@ontologie/cli 0.1.0-preview.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (266) hide show
  1. package/README.md +492 -0
  2. package/dist/cache/keys.d.ts +11 -0
  3. package/dist/cache/keys.d.ts.map +1 -0
  4. package/dist/cache/keys.js +14 -0
  5. package/dist/cache/keys.js.map +1 -0
  6. package/dist/cache/store.d.ts +23 -0
  7. package/dist/cache/store.d.ts.map +1 -0
  8. package/dist/cache/store.js +160 -0
  9. package/dist/cache/store.js.map +1 -0
  10. package/dist/cli-compat.d.ts +6 -0
  11. package/dist/cli-compat.d.ts.map +1 -0
  12. package/dist/cli-compat.js +11 -0
  13. package/dist/cli-compat.js.map +1 -0
  14. package/dist/cli.d.ts +30 -0
  15. package/dist/cli.d.ts.map +1 -0
  16. package/dist/cli.js +119 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/client.d.ts +7 -0
  19. package/dist/client.d.ts.map +1 -0
  20. package/dist/client.js +15 -0
  21. package/dist/client.js.map +1 -0
  22. package/dist/commands/actions.d.ts +22 -0
  23. package/dist/commands/actions.d.ts.map +1 -0
  24. package/dist/commands/actions.js +211 -0
  25. package/dist/commands/actions.js.map +1 -0
  26. package/dist/commands/agent-files.d.ts +27 -0
  27. package/dist/commands/agent-files.d.ts.map +1 -0
  28. package/dist/commands/agent-files.js +167 -0
  29. package/dist/commands/agent-files.js.map +1 -0
  30. package/dist/commands/agent.d.ts +23 -0
  31. package/dist/commands/agent.d.ts.map +1 -0
  32. package/dist/commands/agent.js +314 -0
  33. package/dist/commands/agent.js.map +1 -0
  34. package/dist/commands/audit.d.ts +11 -0
  35. package/dist/commands/audit.d.ts.map +1 -0
  36. package/dist/commands/audit.js +94 -0
  37. package/dist/commands/audit.js.map +1 -0
  38. package/dist/commands/cache.d.ts +8 -0
  39. package/dist/commands/cache.d.ts.map +1 -0
  40. package/dist/commands/cache.js +40 -0
  41. package/dist/commands/cache.js.map +1 -0
  42. package/dist/commands/capabilities.d.ts +56 -0
  43. package/dist/commands/capabilities.d.ts.map +1 -0
  44. package/dist/commands/capabilities.js +304 -0
  45. package/dist/commands/capabilities.js.map +1 -0
  46. package/dist/commands/check.d.ts +7 -0
  47. package/dist/commands/check.d.ts.map +1 -0
  48. package/dist/commands/check.js +16 -0
  49. package/dist/commands/check.js.map +1 -0
  50. package/dist/commands/config.d.ts +6 -0
  51. package/dist/commands/config.d.ts.map +1 -0
  52. package/dist/commands/config.js +133 -0
  53. package/dist/commands/config.js.map +1 -0
  54. package/dist/commands/context.d.ts +6 -0
  55. package/dist/commands/context.d.ts.map +1 -0
  56. package/dist/commands/context.js +226 -0
  57. package/dist/commands/context.js.map +1 -0
  58. package/dist/commands/dev.d.ts +15 -0
  59. package/dist/commands/dev.d.ts.map +1 -0
  60. package/dist/commands/dev.js +62 -0
  61. package/dist/commands/dev.js.map +1 -0
  62. package/dist/commands/docs-alias.d.ts +14 -0
  63. package/dist/commands/docs-alias.d.ts.map +1 -0
  64. package/dist/commands/docs-alias.js +28 -0
  65. package/dist/commands/docs-alias.js.map +1 -0
  66. package/dist/commands/docs.d.ts +6 -0
  67. package/dist/commands/docs.d.ts.map +1 -0
  68. package/dist/commands/docs.js +67 -0
  69. package/dist/commands/docs.js.map +1 -0
  70. package/dist/commands/doctor.d.ts +6 -0
  71. package/dist/commands/doctor.d.ts.map +1 -0
  72. package/dist/commands/doctor.js +161 -0
  73. package/dist/commands/doctor.js.map +1 -0
  74. package/dist/commands/generate.d.ts +7 -0
  75. package/dist/commands/generate.d.ts.map +1 -0
  76. package/dist/commands/generate.js +36 -0
  77. package/dist/commands/generate.js.map +1 -0
  78. package/dist/commands/graph.d.ts +9 -0
  79. package/dist/commands/graph.d.ts.map +1 -0
  80. package/dist/commands/graph.js +149 -0
  81. package/dist/commands/graph.js.map +1 -0
  82. package/dist/commands/import.d.ts +19 -0
  83. package/dist/commands/import.d.ts.map +1 -0
  84. package/dist/commands/import.js +330 -0
  85. package/dist/commands/import.js.map +1 -0
  86. package/dist/commands/index.d.ts +80 -0
  87. package/dist/commands/index.d.ts.map +1 -0
  88. package/dist/commands/index.js +345 -0
  89. package/dist/commands/index.js.map +1 -0
  90. package/dist/commands/init.d.ts +7 -0
  91. package/dist/commands/init.d.ts.map +1 -0
  92. package/dist/commands/init.js +101 -0
  93. package/dist/commands/init.js.map +1 -0
  94. package/dist/commands/instances.d.ts +7 -0
  95. package/dist/commands/instances.d.ts.map +1 -0
  96. package/dist/commands/instances.js +418 -0
  97. package/dist/commands/instances.js.map +1 -0
  98. package/dist/commands/keys.d.ts +6 -0
  99. package/dist/commands/keys.d.ts.map +1 -0
  100. package/dist/commands/keys.js +113 -0
  101. package/dist/commands/keys.js.map +1 -0
  102. package/dist/commands/knowledge.d.ts +6 -0
  103. package/dist/commands/knowledge.d.ts.map +1 -0
  104. package/dist/commands/knowledge.js +76 -0
  105. package/dist/commands/knowledge.js.map +1 -0
  106. package/dist/commands/model.d.ts +3 -0
  107. package/dist/commands/model.d.ts.map +1 -0
  108. package/dist/commands/model.js +40 -0
  109. package/dist/commands/model.js.map +1 -0
  110. package/dist/commands/nodes.d.ts +6 -0
  111. package/dist/commands/nodes.d.ts.map +1 -0
  112. package/dist/commands/nodes.js +111 -0
  113. package/dist/commands/nodes.js.map +1 -0
  114. package/dist/commands/openapi.d.ts +7 -0
  115. package/dist/commands/openapi.d.ts.map +1 -0
  116. package/dist/commands/openapi.js +17 -0
  117. package/dist/commands/openapi.js.map +1 -0
  118. package/dist/commands/plan.d.ts +19 -0
  119. package/dist/commands/plan.d.ts.map +1 -0
  120. package/dist/commands/plan.js +563 -0
  121. package/dist/commands/plan.js.map +1 -0
  122. package/dist/commands/process.d.ts +3 -0
  123. package/dist/commands/process.d.ts.map +1 -0
  124. package/dist/commands/process.js +67 -0
  125. package/dist/commands/process.js.map +1 -0
  126. package/dist/commands/query.d.ts +26 -0
  127. package/dist/commands/query.d.ts.map +1 -0
  128. package/dist/commands/query.js +253 -0
  129. package/dist/commands/query.js.map +1 -0
  130. package/dist/commands/schema.d.ts +24 -0
  131. package/dist/commands/schema.d.ts.map +1 -0
  132. package/dist/commands/schema.js +933 -0
  133. package/dist/commands/schema.js.map +1 -0
  134. package/dist/commands/search.d.ts +10 -0
  135. package/dist/commands/search.d.ts.map +1 -0
  136. package/dist/commands/search.js +74 -0
  137. package/dist/commands/search.js.map +1 -0
  138. package/dist/commands/shared.d.ts +32 -0
  139. package/dist/commands/shared.d.ts.map +1 -0
  140. package/dist/commands/shared.js +63 -0
  141. package/dist/commands/shared.js.map +1 -0
  142. package/dist/commands/usage.d.ts +6 -0
  143. package/dist/commands/usage.d.ts.map +1 -0
  144. package/dist/commands/usage.js +86 -0
  145. package/dist/commands/usage.js.map +1 -0
  146. package/dist/commands/validators.d.ts +30 -0
  147. package/dist/commands/validators.d.ts.map +1 -0
  148. package/dist/commands/validators.js +93 -0
  149. package/dist/commands/validators.js.map +1 -0
  150. package/dist/commands/whoami.d.ts +6 -0
  151. package/dist/commands/whoami.d.ts.map +1 -0
  152. package/dist/commands/whoami.js +48 -0
  153. package/dist/commands/whoami.js.map +1 -0
  154. package/dist/config.d.ts +47 -0
  155. package/dist/config.d.ts.map +1 -0
  156. package/dist/config.js +127 -0
  157. package/dist/config.js.map +1 -0
  158. package/dist/credentials.d.ts +9 -0
  159. package/dist/credentials.d.ts.map +1 -0
  160. package/dist/credentials.js +79 -0
  161. package/dist/credentials.js.map +1 -0
  162. package/dist/keychain.d.ts +9 -0
  163. package/dist/keychain.d.ts.map +1 -0
  164. package/dist/keychain.js +51 -0
  165. package/dist/keychain.js.map +1 -0
  166. package/dist/output/csv.d.ts +5 -0
  167. package/dist/output/csv.d.ts.map +1 -0
  168. package/dist/output/csv.js +22 -0
  169. package/dist/output/csv.js.map +1 -0
  170. package/dist/output/envelope.schema.d.ts +1053 -0
  171. package/dist/output/envelope.schema.d.ts.map +1 -0
  172. package/dist/output/envelope.schema.js +256 -0
  173. package/dist/output/envelope.schema.js.map +1 -0
  174. package/dist/output/errors.d.ts +58 -0
  175. package/dist/output/errors.d.ts.map +1 -0
  176. package/dist/output/errors.js +339 -0
  177. package/dist/output/errors.js.map +1 -0
  178. package/dist/output/formatter.d.ts +27 -0
  179. package/dist/output/formatter.d.ts.map +1 -0
  180. package/dist/output/formatter.js +80 -0
  181. package/dist/output/formatter.js.map +1 -0
  182. package/dist/output/json.d.ts +41 -0
  183. package/dist/output/json.d.ts.map +1 -0
  184. package/dist/output/json.js +215 -0
  185. package/dist/output/json.js.map +1 -0
  186. package/dist/output/markdown.d.ts +6 -0
  187. package/dist/output/markdown.d.ts.map +1 -0
  188. package/dist/output/markdown.js +51 -0
  189. package/dist/output/markdown.js.map +1 -0
  190. package/dist/output/meta.d.ts +49 -0
  191. package/dist/output/meta.d.ts.map +1 -0
  192. package/dist/output/meta.js +96 -0
  193. package/dist/output/meta.js.map +1 -0
  194. package/dist/output/plain.d.ts +6 -0
  195. package/dist/output/plain.d.ts.map +1 -0
  196. package/dist/output/plain.js +51 -0
  197. package/dist/output/plain.js.map +1 -0
  198. package/dist/output/table.d.ts +5 -0
  199. package/dist/output/table.d.ts.map +1 -0
  200. package/dist/output/table.js +54 -0
  201. package/dist/output/table.js.map +1 -0
  202. package/dist/output/types.d.ts +54 -0
  203. package/dist/output/types.d.ts.map +1 -0
  204. package/dist/output/types.js +80 -0
  205. package/dist/output/types.js.map +1 -0
  206. package/dist/output/warnings.d.ts +15 -0
  207. package/dist/output/warnings.d.ts.map +1 -0
  208. package/dist/output/warnings.js +46 -0
  209. package/dist/output/warnings.js.map +1 -0
  210. package/dist/output/yaml.d.ts +6 -0
  211. package/dist/output/yaml.d.ts.map +1 -0
  212. package/dist/output/yaml.js +9 -0
  213. package/dist/output/yaml.js.map +1 -0
  214. package/dist/schema/breaking-changes.d.ts +17 -0
  215. package/dist/schema/breaking-changes.d.ts.map +1 -0
  216. package/dist/schema/breaking-changes.js +108 -0
  217. package/dist/schema/breaking-changes.js.map +1 -0
  218. package/dist/schema/helpers.d.ts +18 -0
  219. package/dist/schema/helpers.d.ts.map +1 -0
  220. package/dist/schema/helpers.js +48 -0
  221. package/dist/schema/helpers.js.map +1 -0
  222. package/dist/schema/load-schema-file.d.ts +13 -0
  223. package/dist/schema/load-schema-file.d.ts.map +1 -0
  224. package/dist/schema/load-schema-file.js +88 -0
  225. package/dist/schema/load-schema-file.js.map +1 -0
  226. package/dist/schema/lockfile.d.ts +6 -0
  227. package/dist/schema/lockfile.d.ts.map +1 -0
  228. package/dist/schema/lockfile.js +34 -0
  229. package/dist/schema/lockfile.js.map +1 -0
  230. package/dist/schema/manifest-client.d.ts +31 -0
  231. package/dist/schema/manifest-client.d.ts.map +1 -0
  232. package/dist/schema/manifest-client.js +282 -0
  233. package/dist/schema/manifest-client.js.map +1 -0
  234. package/dist/schema/output.d.ts +38 -0
  235. package/dist/schema/output.d.ts.map +1 -0
  236. package/dist/schema/output.js +95 -0
  237. package/dist/schema/output.js.map +1 -0
  238. package/dist/stdin.d.ts +8 -0
  239. package/dist/stdin.d.ts.map +1 -0
  240. package/dist/stdin.js +21 -0
  241. package/dist/stdin.js.map +1 -0
  242. package/dist/templates/basic.d.ts +6 -0
  243. package/dist/templates/basic.d.ts.map +1 -0
  244. package/dist/templates/basic.js +90 -0
  245. package/dist/templates/basic.js.map +1 -0
  246. package/dist/templates/contract-review.d.ts +9 -0
  247. package/dist/templates/contract-review.d.ts.map +1 -0
  248. package/dist/templates/contract-review.js +172 -0
  249. package/dist/templates/contract-review.js.map +1 -0
  250. package/dist/templates/customer-onboarding.d.ts +9 -0
  251. package/dist/templates/customer-onboarding.d.ts.map +1 -0
  252. package/dist/templates/customer-onboarding.js +176 -0
  253. package/dist/templates/customer-onboarding.js.map +1 -0
  254. package/dist/templates/index.d.ts +11 -0
  255. package/dist/templates/index.d.ts.map +1 -0
  256. package/dist/templates/index.js +16 -0
  257. package/dist/templates/index.js.map +1 -0
  258. package/dist/templates/react-dashboard.d.ts +6 -0
  259. package/dist/templates/react-dashboard.d.ts.map +1 -0
  260. package/dist/templates/react-dashboard.js +146 -0
  261. package/dist/templates/react-dashboard.js.map +1 -0
  262. package/dist/templates/vendor-risk.d.ts +9 -0
  263. package/dist/templates/vendor-risk.d.ts.map +1 -0
  264. package/dist/templates/vendor-risk.js +186 -0
  265. package/dist/templates/vendor-risk.js.map +1 -0
  266. package/package.json +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA8DD,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAyCpE;AAED,gDAAgD;AAChD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG9C;AAMD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAKD,2DAA2D;AAC3D,wBAAgB,cAAc,IAAI,UAAU,CAO3C;AAED,2CAA2C;AAC3C,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGvD;AAED,sEAAsE;AACtE,wBAAgB,gBAAgB,IAAI,OAAO,GAAG,IAAI,CAGjD;AAED,wCAAwC;AACxC,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAOhD"}
package/dist/config.js ADDED
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Config resolution chain -- flag > ONTOLOGIE_* env > DF_* env (deprecated) > ~/.ontologierc YAML > ~/.dfrc (deprecated) > error
3
+ */
4
+ import * as fs from 'node:fs';
5
+ import * as path from 'node:path';
6
+ import * as os from 'node:os';
7
+ import { parse as parseYaml } from 'yaml';
8
+ import { addWarning, DEPRECATION_DFRC, DEPRECATION_LEGACY_ENV } from './output/warnings.js';
9
+ /** Warn once per session about deprecated env/config */
10
+ const warned = new Set();
11
+ function warnOnce(key, msg) {
12
+ if (warned.has(key))
13
+ return;
14
+ warned.add(key);
15
+ process.stderr.write(`\x1b[33m\u26a0 ${msg}\x1b[0m\n`);
16
+ // Structured warning for JSON consumers
17
+ if (key === 'dfrc') {
18
+ addWarning(DEPRECATION_DFRC);
19
+ }
20
+ else {
21
+ // key is the deprecated env var name (e.g., 'DF_API_KEY')
22
+ const replacement = msg.match(/Use (\S+)/)?.[1] ?? key;
23
+ addWarning(DEPRECATION_LEGACY_ENV(key, replacement));
24
+ }
25
+ }
26
+ function envWithFallback(primary, deprecated) {
27
+ const val = process.env[primary];
28
+ if (val)
29
+ return val;
30
+ const fallback = process.env[deprecated];
31
+ if (fallback) {
32
+ warnOnce(deprecated, `${deprecated} is deprecated. Use ${primary} instead.`);
33
+ return fallback;
34
+ }
35
+ return undefined;
36
+ }
37
+ function loadRc() {
38
+ const primaryPath = path.join(os.homedir(), '.ontologierc');
39
+ if (fs.existsSync(primaryPath)) {
40
+ try {
41
+ const content = fs.readFileSync(primaryPath, 'utf-8');
42
+ return parseYaml(content) || {};
43
+ }
44
+ catch {
45
+ return {};
46
+ }
47
+ }
48
+ const legacyPath = path.join(os.homedir(), '.dfrc');
49
+ if (fs.existsSync(legacyPath)) {
50
+ warnOnce('dfrc', '~/.dfrc is deprecated. Rename to ~/.ontologierc');
51
+ try {
52
+ const content = fs.readFileSync(legacyPath, 'utf-8');
53
+ return parseYaml(content) || {};
54
+ }
55
+ catch {
56
+ return {};
57
+ }
58
+ }
59
+ return {};
60
+ }
61
+ export function resolveConfig(flags) {
62
+ const profileName = flags.profile
63
+ || envWithFallback('ONTOLOGIE_PROFILE', 'DF_PROFILE')
64
+ || 'default';
65
+ const profiles = loadRc();
66
+ const profile = profiles[profileName] || {};
67
+ const apiUrl = flags.apiUrl
68
+ || envWithFallback('ONTOLOGIE_API_URL', 'DF_API_URL')
69
+ || profile.api_url
70
+ || 'https://api.dataforge.io';
71
+ const apiKey = flags.apiKey
72
+ || envWithFallback('ONTOLOGIE_API_KEY', 'DF_API_KEY')
73
+ || profile.api_key;
74
+ const workspaceId = flags.workspace
75
+ || envWithFallback('ONTOLOGIE_WORKSPACE_ID', 'DF_WORKSPACE_ID')
76
+ || profile.workspace_id;
77
+ const spaceId = flags.space
78
+ || flags.espace // deprecated compat
79
+ || envWithFallback('ONTOLOGIE_SPACE_ID', 'DF_ESPACE_ID')
80
+ || profile.space_id
81
+ || profile.espace_id;
82
+ if (!apiKey) {
83
+ throw Object.assign(new Error('No API key found. Set --api-key, ONTOLOGIE_API_KEY, or add to ~/.ontologierc'), { code: 'AUTHENTICATION_ERROR', statusCode: 401 });
84
+ }
85
+ if (!workspaceId) {
86
+ throw Object.assign(new Error('No workspace ID found. Set --workspace, ONTOLOGIE_WORKSPACE_ID, or add to ~/.ontologierc'), { code: 'AUTHENTICATION_ERROR', statusCode: 401 });
87
+ }
88
+ return { apiUrl, apiKey, workspaceId, spaceId, profile: profileName };
89
+ }
90
+ /** Mask an API key for display: df_abc...xyz */
91
+ export function maskApiKey(key) {
92
+ if (key.length <= 10)
93
+ return key.slice(0, 3) + '...';
94
+ return key.slice(0, 6) + '...' + key.slice(-4);
95
+ }
96
+ const CONFIG_DIR = path.join(os.homedir(), '.dataforge');
97
+ const CONFIG_PATH = path.join(CONFIG_DIR, 'config.json');
98
+ /** Load the JSON config file (~/.dataforge/config.json) */
99
+ export function loadConfigFile() {
100
+ try {
101
+ const content = fs.readFileSync(CONFIG_PATH, 'utf-8');
102
+ return JSON.parse(content);
103
+ }
104
+ catch {
105
+ return { activeProfile: 'default', profiles: {} };
106
+ }
107
+ }
108
+ /** Persist the JSON config file to disk */
109
+ export function saveConfigFile(config) {
110
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
111
+ fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
112
+ }
113
+ /** Return the currently active profile, or null if none configured */
114
+ export function getActiveProfile() {
115
+ const config = loadConfigFile();
116
+ return config.profiles[config.activeProfile] ?? null;
117
+ }
118
+ /** Switch the active profile by name */
119
+ export function switchProfile(name) {
120
+ const config = loadConfigFile();
121
+ if (!config.profiles[name]) {
122
+ throw new Error(`Profile "${name}" not found. Available: ${Object.keys(config.profiles).join(', ') || '(none)'}`);
123
+ }
124
+ config.activeProfile = name;
125
+ saveConfigFile(config);
126
+ }
127
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Encrypted credentials file — AES-256-GCM with PBKDF2 key derivation.
3
+ * File: ~/.ontologie/credentials.enc
4
+ * Pure Node.js crypto — zero native dependencies.
5
+ */
6
+ export declare function isEncryptedFilePresent(): boolean;
7
+ export declare function encryptedFileGet(profile: string, password: string): string | null;
8
+ export declare function encryptedFileSet(profile: string, apiKey: string, password: string): void;
9
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiDH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUjF;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAyBxF"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Encrypted credentials file — AES-256-GCM with PBKDF2 key derivation.
3
+ * File: ~/.ontologie/credentials.enc
4
+ * Pure Node.js crypto — zero native dependencies.
5
+ */
6
+ import * as crypto from 'node:crypto';
7
+ import * as fs from 'node:fs';
8
+ import * as path from 'node:path';
9
+ import * as os from 'node:os';
10
+ const CRED_FILE = path.join(os.homedir(), '.ontologie', 'credentials.enc');
11
+ const ALGORITHM = 'aes-256-gcm';
12
+ const PBKDF2_ITERATIONS = 100_000;
13
+ const KEY_LENGTH = 32;
14
+ const IV_LENGTH = 16;
15
+ const SALT_LENGTH = 32;
16
+ const AUTH_TAG_LENGTH = 16;
17
+ function deriveKey(password, salt) {
18
+ return crypto.pbkdf2Sync(password, salt, PBKDF2_ITERATIONS, KEY_LENGTH, 'sha256');
19
+ }
20
+ function encrypt(data, password) {
21
+ const salt = crypto.randomBytes(SALT_LENGTH);
22
+ const iv = crypto.randomBytes(IV_LENGTH);
23
+ const key = deriveKey(password, salt);
24
+ const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
25
+ const encrypted = Buffer.concat([cipher.update(data, 'utf-8'), cipher.final()]);
26
+ const authTag = cipher.getAuthTag();
27
+ // Format: salt (32) + iv (16) + authTag (16) + encrypted (rest)
28
+ return Buffer.concat([salt, iv, authTag, encrypted]);
29
+ }
30
+ function decrypt(buffer, password) {
31
+ const salt = buffer.subarray(0, SALT_LENGTH);
32
+ const iv = buffer.subarray(SALT_LENGTH, SALT_LENGTH + IV_LENGTH);
33
+ const authTag = buffer.subarray(SALT_LENGTH + IV_LENGTH, SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH);
34
+ const encrypted = buffer.subarray(SALT_LENGTH + IV_LENGTH + AUTH_TAG_LENGTH);
35
+ const key = deriveKey(password, salt);
36
+ const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
37
+ decipher.setAuthTag(authTag);
38
+ return Buffer.concat([decipher.update(encrypted), decipher.final()]).toString('utf-8');
39
+ }
40
+ export function isEncryptedFilePresent() {
41
+ return fs.existsSync(CRED_FILE);
42
+ }
43
+ export function encryptedFileGet(profile, password) {
44
+ if (!fs.existsSync(CRED_FILE))
45
+ return null;
46
+ try {
47
+ const raw = fs.readFileSync(CRED_FILE);
48
+ const json = decrypt(raw, password);
49
+ const store = JSON.parse(json);
50
+ return store.profiles[profile]?.api_key || null;
51
+ }
52
+ catch {
53
+ return null;
54
+ }
55
+ }
56
+ export function encryptedFileSet(profile, apiKey, password) {
57
+ let store = { profiles: {} };
58
+ // Load existing if present
59
+ if (fs.existsSync(CRED_FILE)) {
60
+ try {
61
+ const raw = fs.readFileSync(CRED_FILE);
62
+ const json = decrypt(raw, password);
63
+ store = JSON.parse(json);
64
+ }
65
+ catch {
66
+ // Wrong password or corrupted — start fresh
67
+ store = { profiles: {} };
68
+ }
69
+ }
70
+ store.profiles[profile] = { api_key: apiKey };
71
+ const dir = path.dirname(CRED_FILE);
72
+ if (!fs.existsSync(dir)) {
73
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
74
+ }
75
+ const encrypted = encrypt(JSON.stringify(store), password);
76
+ fs.writeFileSync(CRED_FILE, encrypted);
77
+ fs.chmodSync(CRED_FILE, 0o600);
78
+ }
79
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;AAC3E,MAAM,SAAS,GAAG,aAAa,CAAC;AAChC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AAClC,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,MAAM,eAAe,GAAG,EAAE,CAAC;AAM3B,SAAS,SAAS,CAAC,QAAgB,EAAE,IAAY;IAC/C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AACpF,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,QAAgB;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;IAEpC,gEAAgE;IAChE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,OAAO,CAAC,MAAc,EAAE,QAAgB;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;IACjE,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,SAAS,EAAE,WAAW,GAAG,SAAS,GAAG,eAAe,CAAC,CAAC;IACpG,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,GAAG,SAAS,GAAG,eAAe,CAAC,CAAC;IAE7E,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7D,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,QAAgB;IAChE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACpC,MAAM,KAAK,GAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,MAAc,EAAE,QAAgB;IAChF,IAAI,KAAK,GAAoB,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAE9C,2BAA2B;IAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YACpC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;YAC5C,KAAK,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAE9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3D,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACvC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * OS Keychain integration — macOS Keychain, Windows Credential Manager, Linux libsecret.
3
+ * Uses keytar (optional dependency) — gracefully degrades if unavailable.
4
+ */
5
+ export declare function isKeychainAvailable(): Promise<boolean>;
6
+ export declare function keychainGet(profile: string): Promise<string | null>;
7
+ export declare function keychainSet(profile: string, key: string): Promise<void>;
8
+ export declare function keychainDelete(profile: string): Promise<boolean>;
9
+ //# sourceMappingURL=keychain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAwBH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAE5D;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQzE;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7E;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQtE"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * OS Keychain integration — macOS Keychain, Windows Credential Manager, Linux libsecret.
3
+ * Uses keytar (optional dependency) — gracefully degrades if unavailable.
4
+ */
5
+ const SERVICE_NAME = 'ontologie-cli';
6
+ let _keytar;
7
+ async function getKeytar() {
8
+ if (_keytar !== undefined)
9
+ return _keytar;
10
+ try {
11
+ const dynamicImport = new Function('specifier', 'return import(specifier)');
12
+ _keytar = await dynamicImport('keytar');
13
+ return _keytar;
14
+ }
15
+ catch {
16
+ _keytar = null;
17
+ return null;
18
+ }
19
+ }
20
+ export async function isKeychainAvailable() {
21
+ return (await getKeytar()) !== null;
22
+ }
23
+ export async function keychainGet(profile) {
24
+ const keytar = await getKeytar();
25
+ if (!keytar)
26
+ return null;
27
+ try {
28
+ return await keytar.getPassword(SERVICE_NAME, `${profile}:api_key`);
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ export async function keychainSet(profile, key) {
35
+ const keytar = await getKeytar();
36
+ if (!keytar)
37
+ throw new Error('Keychain not available. Install libsecret (Linux) or use encrypted file.');
38
+ await keytar.setPassword(SERVICE_NAME, `${profile}:api_key`, key);
39
+ }
40
+ export async function keychainDelete(profile) {
41
+ const keytar = await getKeytar();
42
+ if (!keytar)
43
+ return false;
44
+ try {
45
+ return await keytar.deletePassword(SERVICE_NAME, `${profile}:api_key`);
46
+ }
47
+ catch {
48
+ return false;
49
+ }
50
+ }
51
+ //# sourceMappingURL=keychain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keychain.js","sourceRoot":"","sources":["../src/keychain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,YAAY,GAAG,eAAe,CAAC;AAQrC,IAAI,OAAkC,CAAC;AAEvC,KAAK,UAAU,SAAS;IACtB,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAA4C,CAAC;QACvH,OAAO,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAW,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,IAAI,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,OAAO,CAAC,MAAM,SAAS,EAAE,CAAC,KAAK,IAAI,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe;IAC/C,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,OAAO,UAAU,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe,EAAE,GAAW;IAC5D,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IACzG,MAAM,MAAM,CAAC,WAAW,CAAC,YAAY,EAAE,GAAG,OAAO,UAAU,EAAE,GAAG,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;IACjC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,IAAI,CAAC;QACH,OAAO,MAAM,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,GAAG,OAAO,UAAU,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * CSV output with header row
3
+ */
4
+ export declare function outputCsv(rows: Record<string, unknown>[], columns?: string[]): void;
5
+ //# sourceMappingURL=csv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../src/output/csv.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAanF"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * CSV output with header row
3
+ */
4
+ function escapeCsv(val) {
5
+ if (val.includes(',') || val.includes('"') || val.includes('\n')) {
6
+ return `"${val.replace(/"/g, '""')}"`;
7
+ }
8
+ return val;
9
+ }
10
+ export function outputCsv(rows, columns) {
11
+ if (rows.length === 0)
12
+ return;
13
+ const cols = columns || Object.keys(rows[0]);
14
+ // Header
15
+ process.stdout.write(cols.map(escapeCsv).join(',') + '\n');
16
+ // Rows
17
+ for (const row of rows) {
18
+ const line = cols.map(c => escapeCsv(String(row[c] ?? ''))).join(',');
19
+ process.stdout.write(line + '\n');
20
+ }
21
+ }
22
+ //# sourceMappingURL=csv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csv.js","sourceRoot":"","sources":["../../src/output/csv.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACjE,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAA+B,EAAE,OAAkB;IAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE9B,MAAM,IAAI,GAAG,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,SAAS;IACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAE3D,OAAO;IACP,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}