{"ref":"artifact:tklein1801-cap-js-attachments","page":"/artifacts/tklein1801-cap-js-attachments","json":"/artifacts/tklein1801-cap-js-attachments.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"tklein1801-cap-js-attachments","name":"@tklein1801/cap-js-attachments","artifact_type":"cds-plugin","ecosystem":"cap","flavors":[{"key":"node","source":{"url":"https://github.com/tklein1801/cap-js-attachments","title":"tklein1801/cap-js-attachments — README","checked":"2026-09-13","quote":"npm add @tklein1801/cap-js-attachments"}}],"domain":"data-and-persistence","origin_ring":"independent","description":{"one_line":"A CAP Node.js attachments plugin with a draft-based upload table, Object Store integration and configurable malware scanning for the files that are uploaded.","short":"CAP Node.js attachments plugin with Object Store and malware scanning"},"links":{"npm":"https://www.npmjs.com/package/@tklein1801/cap-js-attachments","repo":"https://github.com/tklein1801/cap-js-attachments"},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://github.com/tklein1801/cap-js-attachments","title":"@tklein1801/cap-js-attachments — README","checked":"2026-10-18","quote":"npm add @tklein1801/cap-js-attachments"}]}},"provides":[{"capability":"capability:attachments","what_it_does":"Uses an Attachments composition on a draft-enabled entity, with local database storage or an SAP Object Store bucket. Shared-store attachment URLs carry a tenant prefix.","sources":[{"url":"https://raw.githubusercontent.com/tklein1801/cap-js-attachments/1021ab9c3ee9235900ef92e76f30f50fddab524d/README.md","title":"tklein1801/cap-js-attachments — README","checked":"2026-09-17","quote":"For using SAP Object Store, you must already have a SAP Object Store service instance with a bucket which you can access."},{"url":"https://raw.githubusercontent.com/tklein1801/cap-js-attachments/1021ab9c3ee9235900ef92e76f30f50fddab524d/README.md","title":"tklein1801/cap-js-attachments — README","checked":"2026-09-17","quote":"To be able to use the plugin, make sure *draft* is enabled for the entity."},{"url":"https://raw.githubusercontent.com/tklein1801/cap-js-attachments/1021ab9c3ee9235900ef92e76f30f50fddab524d/README.md","title":"tklein1801/cap-js-attachments — README","checked":"2026-09-17","quote":"By default, malware scanning is enabled for all profiles except development profile."},{"url":"https://raw.githubusercontent.com/tklein1801/cap-js-attachments/1021ab9c3ee9235900ef92e76f30f50fddab524d/README.md","title":"tklein1801/cap-js-attachments — README","checked":"2026-09-17","quote":"Attachment URLs are prefixed with the tenant ID to ensure proper separation and identification of data across different tenants."}],"facets":[{"key":"storage_target","value":"Local database or SAP Object Store bucket","applies_to":{"ecosystems":["cap"],"flavors":["node"]},"source":{"url":"https://raw.githubusercontent.com/tklein1801/cap-js-attachments/1021ab9c3ee9235900ef92e76f30f50fddab524d/README.md","title":"tklein1801/cap-js-attachments — README","checked":"2026-09-17","quote":"For using SAP Object Store, you must already have a SAP Object Store service instance with a bucket which you can access."}},{"key":"upload_flow","value":"Draft-enabled entity required","applies_to":{"ecosystems":["cap"],"flavors":["node"]},"source":{"url":"https://raw.githubusercontent.com/tklein1801/cap-js-attachments/1021ab9c3ee9235900ef92e76f30f50fddab524d/README.md","title":"tklein1801/cap-js-attachments — README","checked":"2026-09-17","quote":"To be able to use the plugin, make sure *draft* is enabled for the entity."}},{"key":"scan_behaviour","value":"Enabled by default except in development; configurable","applies_to":{"ecosystems":["cap"],"flavors":["node"]},"source":{"url":"https://raw.githubusercontent.com/tklein1801/cap-js-attachments/1021ab9c3ee9235900ef92e76f30f50fddab524d/README.md","title":"tklein1801/cap-js-attachments — README","checked":"2026-09-17","quote":"By default, malware scanning is enabled for all profiles except development profile."}}]}],"provenance":{"discovered_via":[{"source":"source:npm"},{"source":"source:discover"}],"first_seen":"2026-08-30"},"maintainers":["actor:tklein1801"],"contributors":["actor:tklein1801"],"history":[{"date":"2026-09-08","field":"description.one_line","from":"CAP cds-plugin providing image and attachment storing out-of-the-box.","to":"A derived copy of the official attachments plugin published under a personal scope; its readme is @cap-js/attachments' with the name swapped.","reason":"Placement copied the package's own npm description. Replaced with a line written for this graph — what it does and where it sits — because an unattributed sentence is an unattributed claim."},{"date":"2026-09-11","field":"lineage","from":"(none)","to":"fork of artifact:cap-js-attachments","reason":"GitHub flags the repository as a fork of cap-js/attachments, but that flag is crawled as fork_of and never copied into lineage. The edge rests on the maintainer's own words instead: the README never mentions the original, the repository description does — \"based on @cap-js/attachments\"."},{"date":"2026-09-17","field":"provides.what_it_does","from":null,"to":"Uses an Attachments composition on a draft-enabled entity, with local database storage or an SAP Object Store bucket. Shared-store attachment URLs carry a tenant prefix.","reason":"Replace the unsupported name-swapped summary with documented behaviour; preserve sourced lineage."}],"lineage":[{"target":"artifact:cap-js-attachments","kind":"fork","source":{"url":"https://github.com/tklein1801/cap-js-attachments","title":"tklein1801/cap-js-attachments — repository description","checked":"2026-09-11","quote":"The @tklein1801/cap-js-attachments package is a CDS plugin based on @cap-js/attachments"}}],"drafted_with_ai":true,"requires":[{"ref":"artifact:btp-object-store","requirement":"conditional","role":"attachment-storage","condition":"SAP Object Store storage is selected.","sources":[{"url":"https://raw.githubusercontent.com/tklein1801/cap-js-attachments/1021ab9c3ee9235900ef92e76f30f50fddab524d/README.md","title":"tklein1801/cap-js-attachments — README","checked":"2026-09-17","quote":"For using SAP Object Store, you must already have a SAP Object Store service instance with a bucket which you can access."}]},{"ref":"artifact:btp-malware-scanning","requirement":"conditional","role":"attachment-scanning","condition":"Malware scanning is enabled.","sources":[{"url":"https://raw.githubusercontent.com/tklein1801/cap-js-attachments/1021ab9c3ee9235900ef92e76f30f50fddab524d/README.md","title":"tklein1801/cap-js-attachments — README","checked":"2026-09-17","quote":"By default, malware scanning is enabled for all profiles except development profile."}]}]},"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":"poor","evidence":"18 months since release"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"fair","evidence":"pushed 2025-04, not archived"}],"compatibility":[{"label":"Declared for","tier":"good","evidence":">=8 — includes cds 10 and 9"},{"label":"Survived majors","tier":"poor","evidence":"no release since @sap/cds 10 shipped (July 2026)"},{"label":"Maintainer's CI","tier":"fair","evidence":"workflows present, no completed run on the default branch"}],"practice":[{"label":"Tests","tier":"good","evidence":"24 test files, npm test"},{"label":"Docs","tier":"good","evidence":"README 6 KB"},{"label":"Changelog","tier":"good","evidence":"CHANGELOG in the repo"}],"reach":[{"value":1,"unit":"installs/week"},{"value":0,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","latest_version":"0.1.1","majors":{"0.1":{"version":"0.1.0","date":"2025-04-28"}},"license":"SEE LICENSE IN LICENSE","first_release":"2025-04-28","last_release":"2025-04-29","releases":2,"cadence_days":null,"maintainers":1,"repository":"git+https://github.com/tklein1801/cap-js-attachments.git","peer_cds":">=8","test_script":true,"types":false,"downloads_weekly":1,"stars":0,"forks":0,"fork_of":"cap-js/attachments","open_issues":0,"archived":false,"pushed_at":"2025-04-29","license_spdx":"Apache-2.0","org_owned":false,"default_branch":"main","contributors":1,"tree_truncated":false,"test_files":24,"workflows":3,"other_ci":false,"readme_bytes":6379,"docs_files":0,"changelog":true,"license_file":true,"dts_files":0,"readme_path":"README.md","readme_sha":"0ae767fe09703b50b3ab31fa4a2242d5ad32e926","months_since_release":18,"dormant":true,"repository_directory":null,"created_at":"2025-03-25T17:50:23Z","first_commit":"2023-08-14","last_commit":"2025-04-29","commits":449,"contributors_since":"2025-03-25","dependencies":2,"node_engine":">=17.0.0","downloads_monthly":4,"open_prs":0,"repo_read":"2026-10-26"},"release_notes":{"license":"Apache-2.0","quotable":true,"source":{"kind":"repo","path":"CHANGELOG.md","ref":"main","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md"},"format":"keep-a-changelog","releases":[{"version":"2.0.2","heading":"Version 2.0.2","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-202","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"399341d165be50bc"},{"version":"2.0.1","heading":"Version 2.0.1","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-201","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"551e7cf6f9720f4d"},{"version":"2.0.0","heading":"Version 2.0.0","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-200","sections":[{"kind":"change","heading":"Changed","items":2},{"kind":"feature","heading":"Added","items":1}],"hash":"7010f0799de4d7a3"},{"version":"1.2.1","heading":"Version 1.2.1","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-121","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"163bc77ab1484b5c"},{"version":"1.2.0","heading":"Version 1.2.0","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-120","sections":[{"kind":"feature","heading":"Added","items":1},{"kind":"fix","heading":"Fixed","items":1}],"hash":"53f6c60765e3afcc"},{"version":"1.1.9","heading":"Version 1.1.9","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-119","sections":[{"kind":"feature","heading":"Added","items":2},{"kind":"fix","heading":"Fixed","items":1}],"hash":"b7f02e11cb200f51"},{"version":"1.1.8","heading":"Version 1.1.8","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-118","sections":[{"kind":"change","heading":"Changed","items":1},{"kind":"fix","heading":"Fixed","items":1}],"hash":"1752302aa53dc9bf"},{"version":"1.1.7","heading":"Version 1.1.7","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-117","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"1b428bee7d7f687d"},{"version":"1.1.6","heading":"Version 1.1.6","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-116","sections":[{"kind":"feature","heading":"Added","items":1},{"kind":"fix","heading":"Fixed","items":1}],"hash":"0401208e955b8620"},{"version":"1.1.5","heading":"Version 1.1.5","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-115","sections":[{"kind":"change","heading":"Changed","items":3}],"hash":"b9523ced41e6bbb7"},{"version":"1.1.4","heading":"Version 1.1.4","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-114","sections":[{"kind":"change","heading":"Changed","items":1}],"hash":"2e835b55caab3b37"},{"version":"1.1.3","heading":"Version 1.1.3","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-113","sections":[{"kind":"change","heading":"Changed","items":1},{"kind":"fix","heading":"Fixed","items":1}],"hash":"aa3bf022ac9f0fe9"},{"version":"1.1.2","heading":"Version 1.1.2","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-112","sections":[{"kind":"feature","heading":"Added","items":1},{"kind":"change","heading":"Changed","items":2},{"kind":"fix","heading":"Fixed","items":2}],"hash":"eac1d31447036f1b"},{"version":"1.1.1","heading":"Version 1.1.1","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-111","sections":[{"kind":"change","heading":"Changed","items":2},{"kind":"fix","heading":"Fixed","items":1}],"hash":"1f06f4e783ffc895"},{"version":"1.1.0","heading":"Version 1.1.0","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-110","sections":[{"kind":"feature","heading":"Added","items":1},{"kind":"fix","heading":"Fixed","items":1}],"hash":"cc587119c0c63e87"},{"version":"1.0.2","heading":"Version 1.0.2","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-102","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"ddd159ebe5a46b7e"},{"version":"1.0.1","heading":"Version 1.0.1","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-101","sections":[{"kind":"fix","heading":"Fixed","items":1}],"hash":"fd006d4e50f898d6"},{"version":"1.0.0","heading":"Version 1.0.0","url":"https://github.com/tklein1801/cap-js-attachments/blob/main/CHANGELOG.md#version-100","sections":[{"kind":"feature","heading":"Added","items":1}],"hash":"9cd5a8bd29467a49"}],"versions":[{"version":"0.1.1","date":"2025-04-29"},{"version":"0.1.0","date":"2025-04-28"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:tklein1801","name":"Thorben","json":"/actors/tklein1801.json"}],"contributors":[{"ref":"actor:tklein1801","name":"Thorben","json":"/actors/tklein1801.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}