{"ref":"artifact:miyasuta-cap-external-northwind","page":"/artifacts/miyasuta-cap-external-northwind","json":"/artifacts/miyasuta-cap-external-northwind.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"miyasuta-cap-external-northwind","name":"cap-external-northwind","artifact_type":"sample","ecosystem":"cap","domain":"integration-and-messaging","origin_ring":"independent","description":{"one_line":"A CAP service that serves an external OData service as its own: Northwind's `Products` imported as a CSN model, projected read-only, with the incoming query run against the remote service.","short":"CAP service serving Northwind's external OData Products as its own","what_it_solves":"The imported model sits in `srv/external/NorthWind.csn` and is declared under `cds.requires` in package.json as `kind: odata` with `credentials: { destination: 'NorthWind' }`, naming the destination it is reached through. `CatalogService.Products` is a `@readonly` projection naming seven elements, the implementation connects to `NorthWind` once at init, and its single `READ` handler runs `request.query` against that service inside the request's transaction. Beside the model folder `srv/` holds only those two files, and `sqlite3` is the one devDependency, so the imported model, the requires block and that handler are the whole of it. One commit, from July 2021, on a `master` branch."},"links":{"repo":"https://github.com/miyasuta/cap-external-northwind"},"identity":{"license":"UNLICENSED"},"compat":{"runtimes":["node"],"cds_range":"^5"},"demonstrates":["capability:service-integration","capability:destinations"],"requires":[{"ref":"artifact:btp-destination","for":"How the remote service is reached once deployed: the project's own requires block names a destination instead of an address, and the repository does not set that destination up.","requirement":"required","sources":[{"url":"https://raw.githubusercontent.com/miyasuta/cap-external-northwind/master/package.json","title":"miyasuta/cap-external-northwind — package.json, cds.requires","checked":"2026-10-08","quote":"\"NorthWind\": {\n        \"kind\": \"odata\",\n        \"model\": \"srv/external/NorthWind\",\n        \"credentials\": {\n          \"destination\": \"NorthWind\"\n        }\n      }"}]}],"maintainers":["actor:mio-yasutake"],"provenance":{"discovered_via":[{"source":"source:github","channel":"miyasuta"}],"first_seen":"2026-10-08"},"use_as":"reference","contributors":["actor:mio-yasutake"],"drafted_with_ai":true},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"unknown","evidence":"no release data"},{"label":"Continuity","tier":"fair","evidence":"one contributor, personally owned"},{"label":"Repository","tier":"poor","evidence":"pushed 2021-07, not archived"}],"compatibility":[{"label":"Declared for","tier":"poor","evidence":"^5 — stops before cds 9"},{"label":"Survived majors","tier":"unknown","evidence":"no release dates"},{"label":"Maintainer's CI","tier":"fair","evidence":"no CI configured"}],"practice":[{"label":"Tests","tier":"fair","evidence":"none found in the tree"},{"label":"Docs","tier":"poor","evidence":"README 1 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":null,"unit":"installs/week"},{"value":0,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-25","npm":"not published under this name","stars":0,"forks":0,"open_issues":0,"archived":false,"pushed_at":"2021-07-14","license_spdx":null,"org_owned":false,"default_branch":"master","created_at":"2021-07-14T06:04:25Z","open_prs":0,"tree_truncated":false,"test_files":0,"workflows":0,"other_ci":false,"readme_bytes":675,"docs_files":0,"changelog":false,"license_file":false,"dts_files":0,"first_commit":"2021-07-14","last_commit":"2021-07-14","commits":1,"contributors":1,"readme_path":"README.md","readme_sha":"d18474235339ae351787f5d911596633cb257612","repo_read":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:mio-yasutake","name":"Mio Yasutake","json":"/actors/mio-yasutake.json"}],"contributors":[{"ref":"actor:mio-yasutake","name":"Mio Yasutake","json":"/actors/mio-yasutake.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}