{"ref":"artifact:expertum-cap-email-plugin","page":"/artifacts/expertum-cap-email-plugin","json":"/artifacts/expertum-cap-email-plugin.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"expertum-cap-email-plugin","name":"@expertum/cap-email-plugin","artifact_type":"cds-plugin","ecosystem":"cap","flavors":[{"key":"node","source":{"url":"https://raw.githubusercontent.com/expertum-net/cap-email-plugin/main/README.md","title":"@expertum/cap-email-plugin — README","checked":"2026-09-22","quote":"Node.js >= 22 (required for ESM + `@cap-js/cds-test` compatibility)"}}],"domain":"integration-and-messaging","origin_ring":"independent","description":{"one_line":"Sends mail on entity lifecycle events from an annotation — @email.enabled on an entity, an HTML template with {{placeholder}} substitution, and a plugin-owned log entity recording what went out and what failed.","short":"Annotation-driven mail on CAP entity lifecycle events","what_it_solves":"The dispatcher is swappable through cds.requires.kinds, and the Microsoft Graph provider authenticates through the BTP Destination Service rather than holding credentials itself. Triggers are INSERT and UPDATE, so it covers \"tell someone this record changed\" without a handler.","when_not_to_use":"Node below 22, or [@sap/cds](artifact:sap-cds) below 9: the package declares the first in engines and the second as a peer dependency. Any mail path other than Microsoft Graph, until a provider is written for it: graph is the only kind that sends, and basic, the kind configured by default, is the base class such a provider extends."},"links":{"npm":"https://www.npmjs.com/package/@expertum/cap-email-plugin","repo":"https://github.com/expertum-net/cap-email-plugin"},"identity":{"author":"Expertum","license":"Apache-2.0"},"compat":{"runtimes":["node"],"cds_range":">=9"},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://github.com/expertum-net/cap-email-plugin","title":"@expertum/cap-email-plugin — README","checked":"2026-10-18","quote":"npm install @expertum/cap-email-plugin"}]}},"provides":[{"capability":"capability:notifications","what_it_does":"Sends mail to a person when an annotated entity is inserted or updated, with the recipient taken from a field on the record, a fixed address or the logged-in user, and every attempt recorded in a log entity the plugin owns.","sources":[{"url":"https://raw.githubusercontent.com/expertum-net/cap-email-plugin/main/README.md","title":"@expertum/cap-email-plugin — README","checked":"2026-09-22","quote":"Emails are triggered on entity lifecycle events (INSERT, UPDATE) and dispatched via configurable email clients."},{"url":"https://raw.githubusercontent.com/expertum-net/cap-email-plugin/main/README.md","title":"@expertum/cap-email-plugin — README","checked":"2026-09-22","quote":"Recipient resolved from `@email.recipient`, `@email.recipientField`, or `req.user.email`"},{"url":"https://raw.githubusercontent.com/expertum-net/cap-email-plugin/main/README.md","title":"@expertum/cap-email-plugin — README","checked":"2026-09-22","quote":"Status logged; failures recorded in the plugin-owned log entity"}]}],"requires":[{"ref":"artifact:sap-cloud-sdk-http-client","for":"Declared an optional peer dependency at ^4, beside @sap-cloud-sdk/resilience, so it is present only where the project installs it.","requirement":"conditional","condition":"The project installs it; peerDependenciesMeta marks it optional.","sources":[{"url":"https://raw.githubusercontent.com/expertum-net/cap-email-plugin/main/package.json","title":"@expertum/cap-email-plugin — package.json on main","checked":"2026-09-22","quote":"\"@sap-cloud-sdk/http-client\": \"^4\""}]},{"ref":"artifact:btp-destination","for":"Carries the OAuth2 client credentials the graph provider authenticates Microsoft Graph with, configured as a destination in the BTP subaccount.","requirement":"conditional","condition":"The graph kind is configured for Microsoft Graph.","sources":[{"url":"https://raw.githubusercontent.com/expertum-net/cap-email-plugin/main/README.md","title":"@expertum/cap-email-plugin — README","checked":"2026-09-22","quote":"BTP Destination Service (for Microsoft Graph provider)"},{"url":"https://raw.githubusercontent.com/expertum-net/cap-email-plugin/main/README.md","title":"@expertum/cap-email-plugin — README","checked":"2026-09-22","quote":"The `graph` kind uses Microsoft Graph API via a BTP destination."}]}],"provenance":{"discovered_via":[{"source":"source:npm","channel":"keywords:cds"}],"first_seen":"2026-09-07"},"source_available":true,"history":[{"date":"2026-09-08","field":"links.repo","from":"https://github.com/expertum-net/cap-email-plugin","to":"removed","reason":"404 from the GitHub API. Found by the first full run of scripts/check-links.mjs — the citation had a checked date and nobody had re-read it."},{"date":"2026-09-22","field":"links.repo","from":"removed","to":"https://github.com/expertum-net/cap-email-plugin","reason":"The repository answers again: the GitHub API returns it created 2026-03-06 and pushed 2026-09-18, and raw.githubusercontent serves its README, its package.json and lib/. Nothing says whether it was private or gone between 2026-09-08 and now."},{"date":"2026-09-22","field":"source_available","from":"false","to":"true","reason":"Follows the repository being readable again. The declared Apache-2.0 licence and the TypeScript the package is built from are both in it."},{"date":"2026-09-22","field":"description.when_not_to_use","from":"A POC at 0.1.0 whose declared repository had been deleted","to":"The two version floors, and the provider boundary","reason":"0.1.1 was published on 2026-09-18 and its README carries no POC label; the repository it declares is readable. What holds is Node >= 22 and @sap/cds >= 9, plus the boundary the README's own provider table states: graph is the kind that sends and basic is a base class, whose dispatchEmail is a no-op for a subclass to override."},{"date":"2026-09-22","field":"requires","from":"bare refs","to":"object form, both conditional","reason":"Neither is needed in every configuration. The README lists the Destination service for the Microsoft Graph provider alone, and package.json marks @sap-cloud-sdk/http-client optional in peerDependenciesMeta."}],"drafted_with_ai":true,"maintainers":["actor:expertum-net","actor:stijnme"],"contributors":["actor:mvansteenhuyse","actor:stijnme"]},"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":"good","evidence":"1 month since release"},{"label":"Continuity","tier":"fair","evidence":"2 contributors, 2 publishers, org-owned"},{"label":"Repository","tier":"good","evidence":"pushed 2026-09, not archived"}],"compatibility":[{"label":"Declared for","tier":"good","evidence":">=9 — includes cds 10 and 9"},{"label":"Survived majors","tier":"unknown","evidence":"first released after @sap/cds 10 shipped"},{"label":"Maintainer's CI","tier":"fair","evidence":"workflows present, no completed run on the default branch"}],"practice":[{"label":"Tests","tier":"good","evidence":"29 test files, npm test"},{"label":"Docs","tier":"good","evidence":"docs/ with 4 pages, README 7 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":5,"unit":"installs/week"},{"value":1,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","latest_version":"0.1.1","majors":{"0.1":{"version":"0.1.0","date":"2026-09-07"}},"license":"Apache-2.0","first_release":"2026-09-07","last_release":"2026-09-18","releases":2,"cadence_days":null,"maintainers":2,"repository":"git+https://github.com/expertum-net/cap-email-plugin.git","peer_cds":">=9","test_script":true,"types":false,"downloads_weekly":5,"months_since_release":1,"dormant":false,"repository_directory":null,"stars":1,"forks":0,"open_issues":34,"archived":false,"pushed_at":"2026-09-18","license_spdx":"Apache-2.0","org_owned":true,"default_branch":"main","contributors":2,"tree_truncated":false,"test_files":29,"workflows":1,"other_ci":false,"readme_bytes":6876,"docs_files":4,"changelog":false,"license_file":true,"dts_files":0,"first_commit":"2026-03-06","last_commit":"2026-09-18","commits":126,"readme_path":"README.md","readme_sha":"6462b7f4a7be9d277855baf8a9f2b822ac216e59","dependencies":0,"node_engine":">=22","downloads_monthly":30,"created_at":"2026-03-06T13:30:19Z","open_prs":2,"repo_read":"2026-10-26"},"release_notes":{"license":"Apache-2.0","quotable":true,"versions":[{"version":"0.1.1","date":"2026-09-18"},{"version":"0.1.0","date":"2026-09-07"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:expertum-net","name":"Expertum","json":"/actors/expertum-net.json"},{"ref":"actor:stijnme","name":"Stijn Mertens","json":"/actors/stijnme.json"}],"contributors":[{"ref":"actor:mvansteenhuyse","name":"Matthis Vansteenhuyse","json":"/actors/mvansteenhuyse.json"},{"ref":"actor:stijnme","name":"Stijn Mertens","json":"/actors/stijnme.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}