{"ref":"artifact:uxkjaer-cap-user-info","page":"/artifacts/uxkjaer-cap-user-info","json":"/artifacts/uxkjaer-cap-user-info.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"uxkjaer-cap-user-info","name":"cap-user-info","artifact_type":"cds-plugin","ecosystem":"cap","domain":"data-and-persistence","secondary_domains":["ui-and-frontend-bridge"],"origin_ring":"independent","description":{"one_line":"Resolves the createdBy and modifiedBy of a managed entity to a stored user record of email, given name and family name, and renders the two fields as links with a quickview.","short":"User details and quickview links for createdBy and modifiedBy","what_it_solves":"cap-user-info adds a UserTracked aspect that extends CAP's managed, a UserInfo entity holding Email, GivenName and FamilyName, and the associations _toCreatedUserInfo and _toModifiedUserInfo that resolve through createdBy and modifiedBy, so including the aspect is enough and no separate managed declaration is needed. It registers after-CREATE and after-UPDATE handlers on every application-service entity carrying the aspect and upserts the current user, req.user, into UserInfo, which is what fills the record. The same association can be pointed at any other user field on an entity, and UserInfo itself can be extended with further elements such as a Department, as long as the handler that populates them is registered in the root context rather than inside srv.init. Labels ship as English properties in _i18n and are overridden per locale from the app's own i18n folder."},"links":{"npm":"https://www.npmjs.com/package/cap-user-info","repo":"https://github.com/uxkjaer/cap-user-info"},"identity":{"author":"Jakob Kjaer","license":"MIT"},"compat":{"runtimes":["node"],"cds_range":">=8"},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://cdn.jsdelivr.net/npm/cap-user-info@0.1.9/README.md","title":"cap-user-info 0.1.9 — README, Install","checked":"2026-09-19","quote":"## Install\n\n```bash\nnpm install cap-user-info\n```"}]}},"provides":[{"capability":"capability:data-modelling","what_it_does":"Ships a reusable aspect and entity for user details: UserTracked extends managed, and UserInfo holds the record that createdBy and modifiedBy resolve to through the two associations _toCreatedUserInfo and _toModifiedUserInfo.","sources":[{"url":"https://cdn.jsdelivr.net/npm/cap-user-info@0.1.9/README.md","title":"cap-user-info 0.1.9 — README, how it works","checked":"2026-09-19","quote":"`UserTracked` extends `managed`, so consuming entities automatically inherit `createdBy` / `modifiedBy` (and the corresponding timestamps)"},{"url":"https://cdn.jsdelivr.net/npm/cap-user-info@0.1.9/README.md","title":"cap-user-info 0.1.9 — README, usage","checked":"2026-09-19","quote":"The associations `_toCreatedUserInfo` / `_toModifiedUserInfo` resolve via `createdBy` / `modifiedBy`."}]},{"capability":"capability:fiori-annotations","what_it_does":"Annotates the model so a Fiori client renders the two user fields without screen logic: createdBy and modifiedBy appear as links with a quickview over the stored user record, and the UserInfo property named in configuration becomes the @Common.Text of a user field and the primary display column of its value help.","sources":[{"url":"https://cdn.jsdelivr.net/npm/cap-user-info@0.1.9/README.md","title":"cap-user-info 0.1.9 — README, usage","checked":"2026-09-19","quote":"The fields for createdBy and modifiedBy will automatically be shown as links with a quickview with the user details."},{"url":"https://cdn.jsdelivr.net/npm/cap-user-info@0.1.9/README.md","title":"cap-user-info 0.1.9 — README, configuration","checked":"2026-09-19","quote":"The `UserInfo` property used for `@Common.Text` on user fields and as the primary display column in the value help."}]}],"maintainers":["actor:uxkjaer"],"provenance":{"discovered_via":[{"source":"source:npm","channel":"npm:cds-plugin"},{"source":"source:npm","channel":"npm:cds-"}],"first_seen":"2026-09-08"},"drafted_with_ai":true,"contributors":["actor:uxkjaer"]},"effective_normative_relations":[{"instrument":"instrument:sap-developer-license-3-2-cap","relation":"use-constrained-by","sections":["1","2","3"],"applies_when":"A cds-plugin is used with SAP CAP materials, or an artifact is explicitly identified as a CAP plugin or application.","note":"This is inherited applicability, not a licence verdict about the artifact itself. Review the agreement for the actual materials and use; an explicit artifact relationship to another revision takes precedence.","scope":{"kind":"artifact"},"sources":[{"url":"https://cap.cloud.sap/resources/license/developer-license-3_2_CAP.txt","title":"SAP Developer License Agreement 3.2 CAP","checked":"2026-09-16","quote":"documentation, plug-ins, templates, scripts and sample code, libraries, software development kits"}],"inherited_from":"cap-plugins-and-applications","relevant_capabilities":["agent-systems-access","async-processing","data-import-export","database-connectors","deployment","destinations","llm-integration","mcp-servers","plugin-authoring","replication","retrieval-augmented-generation","rfc-connectivity"]}],"readings":{"liveness":[{"label":"Maintenance","tier":"fair","evidence":"4 months since release"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-06, not archived"}],"compatibility":[{"label":"Declared for","tier":"good","evidence":">=8 — includes cds 10 and 9"},{"label":"Survived majors","tier":"good","evidence":"released before and after @sap/cds 10"},{"label":"Maintainer's CI","tier":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"good","evidence":"4 test files, npm test"},{"label":"Docs","tier":"fair","evidence":"README 3 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":5,"unit":"installs/week"},{"value":0,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-25","latest_version":"0.1.9","majors":{"0.1":{"version":"0.1.0","date":"2026-06-24"}},"license":null,"first_release":"2026-06-24","last_release":"2026-07-02","releases":9,"cadence_days":1,"maintainers":1,"repository":"git+https://github.com/uxkjaer/cap-user-info.git","repository_directory":null,"peer_cds":">=8","dependencies":0,"node_engine":null,"test_script":true,"types":false,"downloads_weekly":5,"downloads_monthly":111,"stars":0,"forks":0,"open_issues":0,"archived":false,"pushed_at":"2026-06-25","license_spdx":"MIT","org_owned":false,"default_branch":"main","created_at":"2026-06-24T04:58:40Z","open_prs":0,"tree_truncated":false,"test_files":4,"workflows":0,"other_ci":false,"readme_bytes":3540,"docs_files":0,"changelog":false,"license_file":true,"dts_files":0,"first_commit":"2026-06-24","last_commit":"2026-06-25","commits":6,"contributors":1,"readme_path":"README.md","readme_sha":"881e572062af9dec77b9cb7fa55189c9e2b44caa","months_since_release":4,"dormant":false,"repo_read":"2026-10-25"},"release_notes":{"license":"MIT","quotable":true,"versions":[{"version":"0.1.9","date":"2026-07-02"},{"version":"0.1.8","date":"2026-07-02"},{"version":"0.1.7","date":"2026-07-01"},{"version":"0.1.6","date":"2026-06-26"},{"version":"0.1.5","date":"2026-06-25"},{"version":"0.1.4","date":"2026-06-25"},{"version":"0.1.2","date":"2026-06-25"},{"version":"0.1.1","date":"2026-06-25"},{"version":"0.1.0","date":"2026-06-24"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:uxkjaer","name":"Jakob Marius Kjaer","json":"/actors/uxkjaer.json"}],"contributors":[{"ref":"actor:uxkjaer","name":"Jakob Marius Kjaer","json":"/actors/uxkjaer.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}