{"ref":"artifact:saptools-cf-hana","page":"/artifacts/saptools-cf-hana","json":"/artifacts/saptools-cf-hana.json","generated":"2026-10-26","drafted_with_ai":true,"entity":{"id":"saptools-cf-hana","name":"@saptools/cf-hana","artifact_type":"cli","ecosystem":"btp","domain":"developer-experience","origin_ring":"independent","description":{"one_line":"A command line and TypeScript API that runs SQL against the [SAP HANA Cloud](artifact:btp-hana-cloud) database bound to a [Cloud Foundry](artifact:btp-cloud-foundry-runtime) app, addressed by a region/org/space/app selector.","short":"SQL runner against the SAP HANA Cloud database bound to a CF app","what_it_solves":"Looking at the data a deployed app holds needs the credentials of its HANA binding, which sit in the app's `VCAP_SERVICES`. `cf-hana` reads that binding live on every connection and writes no credentials under `~/.saptools/`; it does not read the snapshots of [@saptools/cf-sync](artifact:saptools-cf-sync). Its `query`, `tables`, `columns` and `count` commands run over a pooled connection through the bundled `hdb` driver, with an opt-in read-only mode, a guard that blocks `DROP`, `TRUNCATE`, `ALTER` and an `UPDATE` or `DELETE` without a `WHERE`, and, for a CLI `UPDATE`, `UPSERT`, `REPLACE`, matched `MERGE` or `DELETE`, a copy of the affected rows saved before the write runs. Where the database accepts no connection from the developer's machine, it retries through a `cf ssh` port-forward opened on an app in the same org and space. The README calls the guard a convenience and not a security control."},"links":{"npm":"https://www.npmjs.com/package/@saptools/cf-hana","repo":"https://github.com/dongitran/saptools","docs":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/README.md"},"identity":{"author":"dongitran","license":"MIT"},"compat":{"deployment":["cf"]},"type_properties":{"distribution":{"value":["npm"],"sources":[{"url":"https://github.com/dongitran/saptools","title":"@saptools/cf-hana — README","checked":"2026-10-18","quote":"npm install @saptools/cf-hana"}]}},"provides":["capability:debugging"],"requires":[{"ref":"artifact:btp-hana-cloud","for":"The SAP HANA Cloud database bound to the target app, which every query runs against.","requirement":"required","sources":[{"url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/README.md","title":"dongitran/saptools — packages/cf-hana/README.md","checked":"2026-10-15","quote":"Run SQL directly against SAP HANA Cloud databases bound to a Cloud Foundry app — addressed by a `region/org/space/app` selector."}]},{"ref":"artifact:btp-cloud-foundry-runtime","for":"The app whose HANA binding it reads live with cf env, and the space where it opens a cf ssh tunnel when a direct connection fails.","requirement":"required","sources":[{"url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/README.md","title":"dongitran/saptools — packages/cf-hana/README.md","checked":"2026-10-15","quote":"Run SQL directly against SAP HANA Cloud databases bound to a Cloud Foundry app — addressed by a `region/org/space/app` selector."}]},{"ref":"external:nodejs","for":"It is a Node command line and library, and the README names the Node version it needs.","requirement":"required","sources":[{"url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/README.md","title":"dongitran/saptools — packages/cf-hana/README.md","checked":"2026-10-15","quote":"Requires Node.js >= 20."}]}],"provenance":{"discovered_via":[{"source":"source:curator"}],"first_seen":"2026-10-15"},"maintainers":["actor:dong-tran"],"contributors":["actor:dong-tran"],"drafted_with_ai":true},"effective_normative_relations":[],"readings":{"liveness":[{"label":"Maintenance","tier":"good","evidence":"2 months since release"},{"label":"Continuity","tier":"fair","evidence":"2 contributors, 1 publisher"},{"label":"Repository","tier":"good","evidence":"pushed 2026-09, not archived"}],"compatibility":[{"label":"Declared for","tier":"unknown","evidence":"no BTP release lines in the atlas"},{"label":"Survived majors","tier":"unknown","evidence":"no BTP release lines in the atlas"},{"label":"Maintainer's CI","tier":"good","evidence":"CodeQL Security Scan green, 2026-09-18"}],"practice":[{"label":"Tests","tier":"good","evidence":"679 test files"},{"label":"Docs","tier":"good","evidence":"docs site, README 27 KB"},{"label":"Changelog","tier":"fair","evidence":"none in the repo"}],"reach":[{"value":9,"unit":"installs/week"},{"value":3,"unit":"watching"}]},"signals":{"crawled_at":"2026-10-26","latest_version":"0.7.0","majors":{"0.1":{"version":"0.1.0","date":"2026-05-22"},"0.2":{"version":"0.2.0","date":"2026-06-25"},"0.3":{"version":"0.3.0","date":"2026-07-01"},"0.4":{"version":"0.4.0","date":"2026-07-14"},"0.5":{"version":"0.5.0","date":"2026-07-25"},"0.6":{"version":"0.6.0","date":"2026-09-02"},"0.7":{"version":"0.7.0","date":"2026-09-03"}},"license":"MIT","first_release":"2026-05-22","last_release":"2026-09-03","releases":24,"cadence_days":2,"maintainers":1,"repository":"git+https://github.com/dongitran/saptools.git","repository_directory":"packages/cf-hana","peer_cds":null,"dependencies":2,"node_engine":">=20.0.0","test_script":false,"types":true,"downloads_weekly":9,"downloads_monthly":71,"stars":3,"forks":0,"open_issues":1,"archived":false,"pushed_at":"2026-09-18","license_spdx":null,"org_owned":false,"default_branch":"main","created_at":"2026-04-03T14:04:40Z","open_prs":1,"tree_truncated":false,"test_files":679,"workflows":33,"other_ci":false,"readme_bytes":27889,"docs_files":0,"changelog":false,"license_file":false,"dts_files":2,"first_commit":"2026-05-22","last_commit":"2026-09-03","commits":39,"contributors":2,"ci_status":"success","ci_run_at":"2026-09-18","ci_workflow":"CodeQL Security Scan","ci_event":"push","readme_path":"packages/cf-hana/README.md","readme_sha":"520109fdf1130b67305e24bc733bd306710a405e","months_since_release":2,"dormant":false,"repo_read":"2026-10-26"},"release_notes":{"license":"MIT","quotable":true,"source":{"kind":"npm","path":"CHANGELOG.md","version":"0.7.0","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md"},"format":"headings","releases":[{"version":"0.7.0","date":"2026-09-03","date_source":"registry","heading":"0.7.0","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#070","sections":[{"kind":"fix","heading":"Fixed","items":10},{"kind":"change","heading":"Changed","items":1},{"kind":"other","heading":"Known limitations","items":3}],"hash":"cc461cf13ffe1640"},{"version":"0.6.0","date":"2026-09-02","date_source":"registry","heading":"0.6.0","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#060","sections":[{"kind":"other","heading":null,"items":1}],"hash":"5df3d25d07d6a5c3"},{"version":"0.5.4","date":"2026-07-26","date_source":"heading","heading":"0.5.4 - 2026-07-26","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#054---2026-07-26","sections":[{"kind":"other","heading":null,"items":4}],"hash":"3886eac6b10d4ba2"},{"version":"0.5.3","date":"2026-07-26","date_source":"heading","heading":"0.5.3 - 2026-07-26","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#053---2026-07-26","sections":[{"kind":"other","heading":null,"items":4}],"hash":"24458483ebbda5d9"},{"version":"0.5.2","date":"2026-07-25","date_source":"heading","heading":"0.5.2 - 2026-07-25","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#052---2026-07-25","sections":[{"kind":"other","heading":null,"items":1}],"hash":"d131c63daf675237"},{"version":"0.5.1","date":"2026-07-25","date_source":"heading","heading":"0.5.1 - 2026-07-25","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#051---2026-07-25","sections":[{"kind":"other","heading":null,"items":8}],"hash":"d44b8a0aaf72aa8a"},{"version":"0.5.0","date":"2026-07-25","date_source":"heading","heading":"0.5.0 - 2026-07-25","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#050---2026-07-25","sections":[{"kind":"other","heading":null,"items":3}],"hash":"8f732e50fbe09776"},{"version":"0.4.0","date":"2026-07-14","date_source":"heading","heading":"0.4.0 - 2026-07-14","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#040---2026-07-14","sections":[{"kind":"other","heading":null,"items":6}],"hash":"20b8b86890d36cee"},{"version":"0.3.5","date":"2026-07-06","date_source":"heading","heading":"0.3.5 - 2026-07-06","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#035---2026-07-06","sections":[{"kind":"other","heading":null,"items":1}],"hash":"56b506f1511887a2"},{"version":"0.3.4","date":"2026-07-02","date_source":"heading","heading":"0.3.4 - 2026-07-02","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#034---2026-07-02","sections":[{"kind":"other","heading":null,"items":1}],"hash":"270c797010ef43e8"},{"version":"0.3.3","date":"2026-07-02","date_source":"heading","heading":"0.3.3 - 2026-07-02","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#033---2026-07-02","sections":[{"kind":"other","heading":null,"items":4}],"hash":"d2db40f3e6d34e54"},{"version":"0.3.2","date":"2026-07-01","date_source":"heading","heading":"0.3.2 - 2026-07-01","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#032---2026-07-01","sections":[{"kind":"other","heading":null,"items":1}],"hash":"02552ca8a8abc06f"},{"version":"0.3.1","date":"2026-07-01","date_source":"heading","heading":"0.3.1 - 2026-07-01","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#031---2026-07-01","sections":[{"kind":"other","heading":null,"items":3}],"hash":"0ddf538b6348ba3b"},{"version":"0.3.0","date":"2026-07-01","date_source":"heading","heading":"0.3.0 - 2026-07-01","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#030---2026-07-01","sections":[{"kind":"other","heading":null,"items":3}],"hash":"3ad50ab1592b618b"},{"version":"0.2.0","date":"2026-06-25","date_source":"heading","heading":"0.2.0 - 2026-06-25","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#020---2026-06-25","sections":[{"kind":"other","heading":null,"items":5}],"hash":"51d2d9bac6e52c1e"},{"version":"0.1.6","date":"2026-06-23","date_source":"heading","heading":"0.1.6 - 2026-06-23","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#016---2026-06-23","sections":[{"kind":"other","heading":null,"items":3}],"hash":"0992b067971bf33e"},{"version":"0.1.5","date":"2026-06-23","date_source":"heading","heading":"0.1.5 - 2026-06-23","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#015---2026-06-23","sections":[{"kind":"other","heading":null,"items":2}],"hash":"7c6b7667286b6cd9"},{"version":"0.1.4","date":"2026-06-23","date_source":"heading","heading":"0.1.4 - 2026-06-23","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#014---2026-06-23","sections":[{"kind":"other","heading":null,"items":3}],"hash":"0e5ccdaefcd4f6d9"},{"version":"0.1.3","date":"2026-06-23","date_source":"heading","heading":"0.1.3 - 2026-06-23","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#013---2026-06-23","sections":[{"kind":"other","heading":null,"items":3}],"hash":"bc1886403888eb8a"},{"version":"0.1.2","date":"2026-06-23","date_source":"heading","heading":"0.1.2 - 2026-06-23","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#012---2026-06-23","sections":[{"kind":"other","heading":null,"items":5}],"hash":"47038ef056a4f5e3"},{"version":"0.1.1","date":"2026-05-22","date_source":"heading","heading":"0.1.1 - 2026-05-22","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#011---2026-05-22","sections":[{"kind":"other","heading":null,"items":1}],"hash":"786db79bb1dd97f9"},{"version":"0.1.0","date":"2026-05-22","date_source":"heading","heading":"0.1.0 - 2026-05-22","url":"https://github.com/dongitran/saptools/blob/main/packages/cf-hana/CHANGELOG.md#010---2026-05-22","sections":[{"kind":"other","heading":null,"items":3}],"hash":"460334a1bbf3b5b0"}],"versions":[{"version":"0.7.0","date":"2026-09-03"},{"version":"0.6.0","date":"2026-09-02"},{"version":"0.5.4","date":"2026-07-26"},{"version":"0.5.3","date":"2026-07-25"},{"version":"0.5.2","date":"2026-07-25"},{"version":"0.5.1","date":"2026-07-25"},{"version":"0.5.0","date":"2026-07-25"},{"version":"0.4.1","date":"2026-07-16"},{"version":"0.4.0","date":"2026-07-14"},{"version":"0.3.5","date":"2026-07-06"},{"version":"0.3.4","date":"2026-07-02"},{"version":"0.3.2","date":"2026-07-01"},{"version":"0.3.1","date":"2026-07-01"},{"version":"0.3.0","date":"2026-07-01"},{"version":"0.2.2","date":"2026-06-29"},{"version":"0.2.1","date":"2026-06-26"},{"version":"0.2.0","date":"2026-06-25"},{"version":"0.1.6","date":"2026-06-23"},{"version":"0.1.5","date":"2026-06-23"},{"version":"0.1.4","date":"2026-06-23"},{"version":"0.1.3","date":"2026-06-23"},{"version":"0.1.2","date":"2026-06-23"},{"version":"0.1.1","date":"2026-05-22"},{"version":"0.1.0","date":"2026-05-22"}],"crawled_at":"2026-10-25"},"edges":{"maintainers":[{"ref":"actor:dong-tran","name":"Đông Trần","json":"/actors/dong-tran.json"}],"contributors":[{"ref":"actor:dong-tran","name":"Đông Trần","json":"/actors/dong-tran.json"}],"explained_by":[],"alternative_to_this":[],"needed_by":[],"available_via":[],"parts":[],"add_ons":[],"answered_through_parts":[]}}