@heossi/qnsi 0.3.2

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 (268) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/LICENSE.md +8 -0
  3. package/README.md +200 -0
  4. package/dist/_activation/activation-client.d.ts +65 -0
  5. package/dist/_activation/activation-client.d.ts.map +1 -0
  6. package/dist/_activation/activation-client.js +164 -0
  7. package/dist/_activation/activation-client.js.map +1 -0
  8. package/dist/_activation/index.d.ts +10 -0
  9. package/dist/_activation/index.d.ts.map +1 -0
  10. package/dist/_activation/index.js +10 -0
  11. package/dist/_activation/index.js.map +1 -0
  12. package/dist/_activation/types.d.ts +128 -0
  13. package/dist/_activation/types.d.ts.map +1 -0
  14. package/dist/_activation/types.js +94 -0
  15. package/dist/_activation/types.js.map +1 -0
  16. package/dist/_internal.d.ts +52 -0
  17. package/dist/_internal.d.ts.map +1 -0
  18. package/dist/_internal.js +235 -0
  19. package/dist/_internal.js.map +1 -0
  20. package/dist/access.d.ts +32 -0
  21. package/dist/access.d.ts.map +1 -0
  22. package/dist/access.js +33 -0
  23. package/dist/access.js.map +1 -0
  24. package/dist/ai.d.ts +51 -0
  25. package/dist/ai.d.ts.map +1 -0
  26. package/dist/ai.js +53 -0
  27. package/dist/ai.js.map +1 -0
  28. package/dist/audit.d.ts +18 -0
  29. package/dist/audit.d.ts.map +1 -0
  30. package/dist/audit.js +21 -0
  31. package/dist/audit.js.map +1 -0
  32. package/dist/auth.d.ts +31 -0
  33. package/dist/auth.d.ts.map +1 -0
  34. package/dist/auth.js +69 -0
  35. package/dist/auth.js.map +1 -0
  36. package/dist/autogen/executor.d.ts +200 -0
  37. package/dist/autogen/executor.d.ts.map +1 -0
  38. package/dist/autogen/executor.js +277 -0
  39. package/dist/autogen/executor.js.map +1 -0
  40. package/dist/autogen/index.d.ts +18 -0
  41. package/dist/autogen/index.d.ts.map +1 -0
  42. package/dist/autogen/index.js +17 -0
  43. package/dist/autogen/index.js.map +1 -0
  44. package/dist/billing.d.ts +22 -0
  45. package/dist/billing.d.ts.map +1 -0
  46. package/dist/billing.js +33 -0
  47. package/dist/billing.js.map +1 -0
  48. package/dist/browser/encrypt.d.ts +68 -0
  49. package/dist/browser/encrypt.d.ts.map +1 -0
  50. package/dist/browser/encrypt.js +191 -0
  51. package/dist/browser/encrypt.js.map +1 -0
  52. package/dist/browser/index.d.ts +39 -0
  53. package/dist/browser/index.d.ts.map +1 -0
  54. package/dist/browser/index.js +41 -0
  55. package/dist/browser/index.js.map +1 -0
  56. package/dist/browser/noble-provider.d.ts +10 -0
  57. package/dist/browser/noble-provider.d.ts.map +1 -0
  58. package/dist/browser/noble-provider.js +130 -0
  59. package/dist/browser/noble-provider.js.map +1 -0
  60. package/dist/browser/pqc-types.d.ts +40 -0
  61. package/dist/browser/pqc-types.d.ts.map +1 -0
  62. package/dist/browser/pqc-types.js +2 -0
  63. package/dist/browser/pqc-types.js.map +1 -0
  64. package/dist/browser/provider-setup.d.ts +70 -0
  65. package/dist/browser/provider-setup.d.ts.map +1 -0
  66. package/dist/browser/provider-setup.js +101 -0
  67. package/dist/browser/provider-setup.js.map +1 -0
  68. package/dist/browser/sdk-package-version.d.ts +12 -0
  69. package/dist/browser/sdk-package-version.d.ts.map +1 -0
  70. package/dist/browser/sdk-package-version.js +12 -0
  71. package/dist/browser/sdk-package-version.js.map +1 -0
  72. package/dist/browser/sign.d.ts +65 -0
  73. package/dist/browser/sign.d.ts.map +1 -0
  74. package/dist/browser/sign.js +124 -0
  75. package/dist/browser/sign.js.map +1 -0
  76. package/dist/browser/telemetry.d.ts +98 -0
  77. package/dist/browser/telemetry.d.ts.map +1 -0
  78. package/dist/browser/telemetry.js +93 -0
  79. package/dist/browser/telemetry.js.map +1 -0
  80. package/dist/cli/commands/access-control.d.ts +4 -0
  81. package/dist/cli/commands/access-control.d.ts.map +1 -0
  82. package/dist/cli/commands/access-control.js +183 -0
  83. package/dist/cli/commands/access-control.js.map +1 -0
  84. package/dist/cli/commands/audit.d.ts +4 -0
  85. package/dist/cli/commands/audit.d.ts.map +1 -0
  86. package/dist/cli/commands/audit.js +70 -0
  87. package/dist/cli/commands/audit.js.map +1 -0
  88. package/dist/cli/commands/auth.d.ts +4 -0
  89. package/dist/cli/commands/auth.d.ts.map +1 -0
  90. package/dist/cli/commands/auth.js +46 -0
  91. package/dist/cli/commands/auth.js.map +1 -0
  92. package/dist/cli/commands/billing.d.ts +4 -0
  93. package/dist/cli/commands/billing.d.ts.map +1 -0
  94. package/dist/cli/commands/billing.js +179 -0
  95. package/dist/cli/commands/billing.js.map +1 -0
  96. package/dist/cli/commands/crypto-policy.d.ts +4 -0
  97. package/dist/cli/commands/crypto-policy.d.ts.map +1 -0
  98. package/dist/cli/commands/crypto-policy.js +130 -0
  99. package/dist/cli/commands/crypto-policy.js.map +1 -0
  100. package/dist/cli/commands/kms.d.ts +4 -0
  101. package/dist/cli/commands/kms.d.ts.map +1 -0
  102. package/dist/cli/commands/kms.js +153 -0
  103. package/dist/cli/commands/kms.js.map +1 -0
  104. package/dist/cli/commands/observability.d.ts +4 -0
  105. package/dist/cli/commands/observability.d.ts.map +1 -0
  106. package/dist/cli/commands/observability.js +97 -0
  107. package/dist/cli/commands/observability.js.map +1 -0
  108. package/dist/cli/commands/search.d.ts +4 -0
  109. package/dist/cli/commands/search.d.ts.map +1 -0
  110. package/dist/cli/commands/search.js +66 -0
  111. package/dist/cli/commands/search.js.map +1 -0
  112. package/dist/cli/commands/security.d.ts +4 -0
  113. package/dist/cli/commands/security.d.ts.map +1 -0
  114. package/dist/cli/commands/security.js +136 -0
  115. package/dist/cli/commands/security.js.map +1 -0
  116. package/dist/cli/commands/storage.d.ts +4 -0
  117. package/dist/cli/commands/storage.d.ts.map +1 -0
  118. package/dist/cli/commands/storage.js +85 -0
  119. package/dist/cli/commands/storage.js.map +1 -0
  120. package/dist/cli/commands/tenant.d.ts +4 -0
  121. package/dist/cli/commands/tenant.d.ts.map +1 -0
  122. package/dist/cli/commands/tenant.js +82 -0
  123. package/dist/cli/commands/tenant.js.map +1 -0
  124. package/dist/cli/commands/test-utils.d.ts +15 -0
  125. package/dist/cli/commands/test-utils.d.ts.map +1 -0
  126. package/dist/cli/commands/test-utils.js +72 -0
  127. package/dist/cli/commands/test-utils.js.map +1 -0
  128. package/dist/cli/commands/vault.d.ts +4 -0
  129. package/dist/cli/commands/vault.d.ts.map +1 -0
  130. package/dist/cli/commands/vault.js +111 -0
  131. package/dist/cli/commands/vault.js.map +1 -0
  132. package/dist/cli/config.d.ts +32 -0
  133. package/dist/cli/config.d.ts.map +1 -0
  134. package/dist/cli/config.js +105 -0
  135. package/dist/cli/config.js.map +1 -0
  136. package/dist/cli/index.d.ts +3 -0
  137. package/dist/cli/index.d.ts.map +1 -0
  138. package/dist/cli/index.js +54 -0
  139. package/dist/cli/index.js.map +1 -0
  140. package/dist/cli/utils/audit-logger.d.ts +17 -0
  141. package/dist/cli/utils/audit-logger.d.ts.map +1 -0
  142. package/dist/cli/utils/audit-logger.js +52 -0
  143. package/dist/cli/utils/audit-logger.js.map +1 -0
  144. package/dist/cli/utils/auth.d.ts +4 -0
  145. package/dist/cli/utils/auth.d.ts.map +1 -0
  146. package/dist/cli/utils/auth.js +100 -0
  147. package/dist/cli/utils/auth.js.map +1 -0
  148. package/dist/cli/utils/backend-validator.d.ts +19 -0
  149. package/dist/cli/utils/backend-validator.d.ts.map +1 -0
  150. package/dist/cli/utils/backend-validator.js +72 -0
  151. package/dist/cli/utils/backend-validator.js.map +1 -0
  152. package/dist/cli/utils/command-config.d.ts +4 -0
  153. package/dist/cli/utils/command-config.d.ts.map +1 -0
  154. package/dist/cli/utils/command-config.js +29 -0
  155. package/dist/cli/utils/command-config.js.map +1 -0
  156. package/dist/cli/utils/fetcher.d.ts +3 -0
  157. package/dist/cli/utils/fetcher.d.ts.map +1 -0
  158. package/dist/cli/utils/fetcher.js +30 -0
  159. package/dist/cli/utils/fetcher.js.map +1 -0
  160. package/dist/cli/utils/https-validator.d.ts +9 -0
  161. package/dist/cli/utils/https-validator.d.ts.map +1 -0
  162. package/dist/cli/utils/https-validator.js +35 -0
  163. package/dist/cli/utils/https-validator.js.map +1 -0
  164. package/dist/cli/utils/output.d.ts +6 -0
  165. package/dist/cli/utils/output.d.ts.map +1 -0
  166. package/dist/cli/utils/output.js +29 -0
  167. package/dist/cli/utils/output.js.map +1 -0
  168. package/dist/cli/utils/pqc-validator.d.ts +17 -0
  169. package/dist/cli/utils/pqc-validator.d.ts.map +1 -0
  170. package/dist/cli/utils/pqc-validator.js +62 -0
  171. package/dist/cli/utils/pqc-validator.js.map +1 -0
  172. package/dist/cli/utils/prompt.d.ts +4 -0
  173. package/dist/cli/utils/prompt.d.ts.map +1 -0
  174. package/dist/cli/utils/prompt.js +30 -0
  175. package/dist/cli/utils/prompt.js.map +1 -0
  176. package/dist/cli/utils/rate-limiter.d.ts +15 -0
  177. package/dist/cli/utils/rate-limiter.d.ts.map +1 -0
  178. package/dist/cli/utils/rate-limiter.js +46 -0
  179. package/dist/cli/utils/rate-limiter.js.map +1 -0
  180. package/dist/cli/utils/sanitize.d.ts +3 -0
  181. package/dist/cli/utils/sanitize.d.ts.map +1 -0
  182. package/dist/cli/utils/sanitize.js +44 -0
  183. package/dist/cli/utils/sanitize.js.map +1 -0
  184. package/dist/cli/utils/security-headers.d.ts +18 -0
  185. package/dist/cli/utils/security-headers.d.ts.map +1 -0
  186. package/dist/cli/utils/security-headers.js +32 -0
  187. package/dist/cli/utils/security-headers.js.map +1 -0
  188. package/dist/cli/utils/token-cache.d.ts +4 -0
  189. package/dist/cli/utils/token-cache.d.ts.map +1 -0
  190. package/dist/cli/utils/token-cache.js +22 -0
  191. package/dist/cli/utils/token-cache.js.map +1 -0
  192. package/dist/client.d.ts +52 -0
  193. package/dist/client.d.ts.map +1 -0
  194. package/dist/client.js +78 -0
  195. package/dist/client.js.map +1 -0
  196. package/dist/crypto-inventory.d.ts +21 -0
  197. package/dist/crypto-inventory.d.ts.map +1 -0
  198. package/dist/crypto-inventory.js +28 -0
  199. package/dist/crypto-inventory.js.map +1 -0
  200. package/dist/errors.d.ts +35 -0
  201. package/dist/errors.d.ts.map +1 -0
  202. package/dist/errors.js +64 -0
  203. package/dist/errors.js.map +1 -0
  204. package/dist/index.d.ts +50 -0
  205. package/dist/index.d.ts.map +1 -0
  206. package/dist/index.js +51 -0
  207. package/dist/index.js.map +1 -0
  208. package/dist/kms.d.ts +30 -0
  209. package/dist/kms.d.ts.map +1 -0
  210. package/dist/kms.js +92 -0
  211. package/dist/kms.js.map +1 -0
  212. package/dist/langchain/index.d.ts +22 -0
  213. package/dist/langchain/index.d.ts.map +1 -0
  214. package/dist/langchain/index.js +23 -0
  215. package/dist/langchain/index.js.map +1 -0
  216. package/dist/langchain/toolkit.d.ts +85 -0
  217. package/dist/langchain/toolkit.d.ts.map +1 -0
  218. package/dist/langchain/toolkit.js +146 -0
  219. package/dist/langchain/toolkit.js.map +1 -0
  220. package/dist/langchain/tools/audit.d.ts +43 -0
  221. package/dist/langchain/tools/audit.d.ts.map +1 -0
  222. package/dist/langchain/tools/audit.js +78 -0
  223. package/dist/langchain/tools/audit.js.map +1 -0
  224. package/dist/langchain/tools/kms.d.ts +62 -0
  225. package/dist/langchain/tools/kms.d.ts.map +1 -0
  226. package/dist/langchain/tools/kms.js +120 -0
  227. package/dist/langchain/tools/kms.js.map +1 -0
  228. package/dist/langchain/tools/vault.d.ts +69 -0
  229. package/dist/langchain/tools/vault.d.ts.map +1 -0
  230. package/dist/langchain/tools/vault.js +107 -0
  231. package/dist/langchain/tools/vault.js.map +1 -0
  232. package/dist/langchain/vault-client.d.ts +82 -0
  233. package/dist/langchain/vault-client.d.ts.map +1 -0
  234. package/dist/langchain/vault-client.js +133 -0
  235. package/dist/langchain/vault-client.js.map +1 -0
  236. package/dist/llamaindex/index.d.ts +16 -0
  237. package/dist/llamaindex/index.d.ts.map +1 -0
  238. package/dist/llamaindex/index.js +15 -0
  239. package/dist/llamaindex/index.js.map +1 -0
  240. package/dist/llamaindex/sse.d.ts +36 -0
  241. package/dist/llamaindex/sse.d.ts.map +1 -0
  242. package/dist/llamaindex/sse.js +151 -0
  243. package/dist/llamaindex/sse.js.map +1 -0
  244. package/dist/llamaindex/vector-store.d.ts +101 -0
  245. package/dist/llamaindex/vector-store.d.ts.map +1 -0
  246. package/dist/llamaindex/vector-store.js +348 -0
  247. package/dist/llamaindex/vector-store.js.map +1 -0
  248. package/dist/search.d.ts +32 -0
  249. package/dist/search.d.ts.map +1 -0
  250. package/dist/search.js +27 -0
  251. package/dist/search.js.map +1 -0
  252. package/dist/storage.d.ts +32 -0
  253. package/dist/storage.d.ts.map +1 -0
  254. package/dist/storage.js +58 -0
  255. package/dist/storage.js.map +1 -0
  256. package/dist/tenant.d.ts +25 -0
  257. package/dist/tenant.d.ts.map +1 -0
  258. package/dist/tenant.js +36 -0
  259. package/dist/tenant.js.map +1 -0
  260. package/dist/vault.d.ts +22 -0
  261. package/dist/vault.d.ts.map +1 -0
  262. package/dist/vault.js +43 -0
  263. package/dist/vault.js.map +1 -0
  264. package/dist/webhooks.d.ts +32 -0
  265. package/dist/webhooks.d.ts.map +1 -0
  266. package/dist/webhooks.js +77 -0
  267. package/dist/webhooks.js.map +1 -0
  268. package/package.json +118 -0
@@ -0,0 +1,97 @@
1
+ import { EXIT_CODES } from "../config.js";
2
+ import { getAuthHeaders } from "../utils/auth.js";
3
+ import { getEffectiveConfig } from "../utils/command-config.js";
4
+ import { fetchWithBackendHandling } from "../utils/fetcher.js";
5
+ import { printError, printJson, printTable } from "../utils/output.js";
6
+ export function registerObservabilityCommands(program, config) {
7
+ const observability = program
8
+ .command("observability")
9
+ .description("Observability service commands");
10
+ const slos = observability.command("slos").description("SLO operations");
11
+ slos
12
+ .command("list")
13
+ .description("List SLOs")
14
+ .option("--limit <number>", "Number of SLOs to return", "50")
15
+ .option("--cursor <cursor>", "Pagination cursor")
16
+ .action(async (options, command) => {
17
+ if (!config.tenantId) {
18
+ printError("QNSP_TENANT_ID must be set");
19
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
20
+ return;
21
+ }
22
+ try {
23
+ const effectiveConfig = getEffectiveConfig(config, command);
24
+ const headers = await getAuthHeaders(effectiveConfig);
25
+ const obsUrl = effectiveConfig.observabilityServiceUrl;
26
+ const url = new URL(`${obsUrl}/observability/v1/slos`);
27
+ url.searchParams.set("limit", options.limit);
28
+ if (options.cursor) {
29
+ url.searchParams.set("cursor", options.cursor);
30
+ }
31
+ const response = await fetchWithBackendHandling(effectiveConfig, url.toString(), {
32
+ headers,
33
+ });
34
+ if (!response.ok && [429, 402, 403, 507].includes(response.status)) {
35
+ return;
36
+ }
37
+ if (!response.ok) {
38
+ const errorText = await response.text();
39
+ printError(`Failed to list SLOs: ${response.status} ${errorText}`);
40
+ process.exit(EXIT_CODES.GENERAL_ERROR);
41
+ return;
42
+ }
43
+ const data = (await response.json());
44
+ if (effectiveConfig.outputFormat === "json") {
45
+ printJson(data);
46
+ }
47
+ else {
48
+ printTable((data.slos ?? []));
49
+ }
50
+ process.exit(EXIT_CODES.SUCCESS);
51
+ return;
52
+ }
53
+ catch (error) {
54
+ printError(error instanceof Error ? error.message : "Failed to list SLOs");
55
+ process.exit(EXIT_CODES.NETWORK_ERROR);
56
+ return;
57
+ }
58
+ });
59
+ const otlp = observability.command("otlp").description("OTLP ingestion endpoints");
60
+ otlp
61
+ .command("status")
62
+ .description("Get OTLP ingestion status")
63
+ .action(async (_options, command) => {
64
+ try {
65
+ const effectiveConfig = getEffectiveConfig(config, command);
66
+ const headers = await getAuthHeaders(effectiveConfig);
67
+ const obsUrl = effectiveConfig.observabilityServiceUrl;
68
+ const response = await fetchWithBackendHandling(effectiveConfig, `${obsUrl}/health`, {
69
+ headers,
70
+ });
71
+ if (!response.ok && [429, 402, 403, 507].includes(response.status)) {
72
+ return;
73
+ }
74
+ if (!response.ok) {
75
+ const errorText = await response.text();
76
+ printError(`Failed to get status: ${response.status} ${errorText}`);
77
+ process.exit(EXIT_CODES.GENERAL_ERROR);
78
+ return;
79
+ }
80
+ const data = await response.json();
81
+ if (effectiveConfig.outputFormat === "json") {
82
+ printJson(data);
83
+ }
84
+ else {
85
+ printTable(data);
86
+ }
87
+ process.exit(EXIT_CODES.SUCCESS);
88
+ return;
89
+ }
90
+ catch (error) {
91
+ printError(error instanceof Error ? error.message : "Failed to get OTLP status");
92
+ process.exit(EXIT_CODES.NETWORK_ERROR);
93
+ return;
94
+ }
95
+ });
96
+ }
97
+ //# sourceMappingURL=observability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observability.js","sourceRoot":"","sources":["../../../src/cli/commands/observability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from "commander";
2
+ import type { CliConfig } from "../config.js";
3
+ export declare function registerSearchCommands(program: Command, config: CliConfig): void;
4
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAiEhF"}
@@ -0,0 +1,66 @@
1
+ import { EXIT_CODES } from "../config.js";
2
+ import { getAuthHeaders } from "../utils/auth.js";
3
+ import { getEffectiveConfig } from "../utils/command-config.js";
4
+ import { fetchWithBackendHandling } from "../utils/fetcher.js";
5
+ import { printError, printJson, printTable } from "../utils/output.js";
6
+ export function registerSearchCommands(program, config) {
7
+ const search = program.command("search").description("Search service commands");
8
+ search
9
+ .command("query")
10
+ .description("Execute search query")
11
+ .requiredOption("--query <query>", "Search query")
12
+ .option("--limit <number>", "Number of results to return", "20")
13
+ .action(async (options, command) => {
14
+ try {
15
+ const effectiveConfig = getEffectiveConfig(config, command);
16
+ if (!effectiveConfig.tenantId) {
17
+ printError("QNSP_TENANT_ID must be set");
18
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
19
+ return;
20
+ }
21
+ const headers = await getAuthHeaders(effectiveConfig);
22
+ const searchUrl = effectiveConfig.searchServiceUrl;
23
+ const url = new URL(`${searchUrl}/search/v1/documents`);
24
+ url.searchParams.set("tenantId", effectiveConfig.tenantId);
25
+ url.searchParams.set("q", options.query);
26
+ url.searchParams.set("limit", String(Number.parseInt(options.limit, 10)));
27
+ const response = await fetchWithBackendHandling(effectiveConfig, url.toString(), {
28
+ headers,
29
+ });
30
+ if (!response.ok && [429, 402, 403, 507].includes(response.status)) {
31
+ return;
32
+ }
33
+ if (!response.ok) {
34
+ const errorText = await response.text();
35
+ printError(`Search failed: ${response.status} ${errorText}`);
36
+ process.exit(EXIT_CODES.GENERAL_ERROR);
37
+ return;
38
+ }
39
+ const data = (await response.json());
40
+ if (effectiveConfig.outputFormat === "json") {
41
+ printJson(data);
42
+ }
43
+ else {
44
+ printTable((data.items ?? []));
45
+ }
46
+ process.exit(EXIT_CODES.SUCCESS);
47
+ return;
48
+ }
49
+ catch (error) {
50
+ printError(error instanceof Error ? error.message : "Search failed");
51
+ process.exit(EXIT_CODES.NETWORK_ERROR);
52
+ return;
53
+ }
54
+ });
55
+ const indexes = search.command("indexes").description("Index operations");
56
+ indexes
57
+ .command("list")
58
+ .description("List search indexes")
59
+ .action(async () => {
60
+ printError("search indexes list is unavailable: search-service does not expose a list-indexes endpoint. " +
61
+ "Use search query, or the optimization endpoints in search-service.");
62
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
63
+ return;
64
+ });
65
+ }
66
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/cli/commands/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from "commander";
2
+ import type { CliConfig } from "../config.js";
3
+ export declare function registerSecurityCommands(program: Command, config: CliConfig): void;
4
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAiJlF"}
@@ -0,0 +1,136 @@
1
+ import { EXIT_CODES } from "../config.js";
2
+ import { getAuthHeaders } from "../utils/auth.js";
3
+ import { getEffectiveConfig } from "../utils/command-config.js";
4
+ import { fetchWithBackendHandling } from "../utils/fetcher.js";
5
+ import { printError, printJson, printTable } from "../utils/output.js";
6
+ export function registerSecurityCommands(program, config) {
7
+ const security = program.command("security").description("Security monitoring service commands");
8
+ const alerts = security.command("alerts").description("Security alert operations");
9
+ alerts
10
+ .command("list")
11
+ .description("List security alerts")
12
+ .option("--severity <severity>", "Filter by severity")
13
+ .option("--status <status>", "Filter by status")
14
+ .option("--limit <number>", "Number of alerts to return", "50")
15
+ .option("--cursor <cursor>", "Pagination cursor")
16
+ .action(async (options, command) => {
17
+ if (!config.tenantId) {
18
+ printError("QNSP_TENANT_ID must be set");
19
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
20
+ return;
21
+ }
22
+ try {
23
+ const effectiveConfig = getEffectiveConfig(config, command);
24
+ if (!effectiveConfig.tenantId) {
25
+ printError("QNSP_TENANT_ID must be set");
26
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
27
+ return;
28
+ }
29
+ const headers = await getAuthHeaders(effectiveConfig);
30
+ const secUrl = effectiveConfig.securityMonitoringServiceUrl;
31
+ const url = new URL(`${secUrl}/security/v1/alerts`);
32
+ url.searchParams.set("tenantId", effectiveConfig.tenantId);
33
+ url.searchParams.set("limit", options.limit);
34
+ if (options.severity) {
35
+ url.searchParams.set("severity", options.severity);
36
+ }
37
+ if (options.status) {
38
+ url.searchParams.set("status", options.status);
39
+ }
40
+ if (options.cursor) {
41
+ url.searchParams.set("cursor", options.cursor);
42
+ }
43
+ const response = await fetchWithBackendHandling(effectiveConfig, url.toString(), {
44
+ headers,
45
+ });
46
+ if (!response.ok && [429, 402, 403, 507].includes(response.status)) {
47
+ return;
48
+ }
49
+ if (!response.ok) {
50
+ const errorText = await response.text();
51
+ printError(`Failed to list alerts: ${response.status} ${errorText}`);
52
+ process.exit(EXIT_CODES.GENERAL_ERROR);
53
+ return;
54
+ }
55
+ const data = (await response.json());
56
+ if (effectiveConfig.outputFormat === "json") {
57
+ printJson(data);
58
+ }
59
+ else {
60
+ printTable((data.items ?? []));
61
+ }
62
+ process.exit(EXIT_CODES.SUCCESS);
63
+ return;
64
+ }
65
+ catch (error) {
66
+ printError(error instanceof Error ? error.message : "Failed to list alerts");
67
+ process.exit(EXIT_CODES.NETWORK_ERROR);
68
+ return;
69
+ }
70
+ });
71
+ alerts
72
+ .command("get")
73
+ .description("Get alert details")
74
+ .argument("<alertId>", "Alert identifier")
75
+ .action(async () => {
76
+ printError("security alerts get is not available: security-monitoring-service does not expose /security/v1/alerts/:id. " +
77
+ "Use security alerts list with filters instead.");
78
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
79
+ });
80
+ const breaches = security.command("breaches").description("Data breach detection");
81
+ breaches
82
+ .command("list")
83
+ .description("List detected breaches")
84
+ .option("--limit <number>", "Number of breaches to return", "50")
85
+ .option("--cursor <cursor>", "Pagination cursor")
86
+ .action(async (options, command) => {
87
+ if (!config.tenantId) {
88
+ printError("QNSP_TENANT_ID must be set");
89
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
90
+ return;
91
+ }
92
+ try {
93
+ const effectiveConfig = getEffectiveConfig(config, command);
94
+ if (!effectiveConfig.tenantId) {
95
+ printError("QNSP_TENANT_ID must be set");
96
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
97
+ return;
98
+ }
99
+ const headers = await getAuthHeaders(effectiveConfig);
100
+ const secUrl = effectiveConfig.securityMonitoringServiceUrl;
101
+ const url = new URL(`${secUrl}/security/v1/breaches`);
102
+ url.searchParams.set("tenantId", effectiveConfig.tenantId);
103
+ url.searchParams.set("limit", options.limit);
104
+ if (options.cursor) {
105
+ url.searchParams.set("cursor", options.cursor);
106
+ }
107
+ const response = await fetchWithBackendHandling(effectiveConfig, url.toString(), {
108
+ headers,
109
+ });
110
+ if (!response.ok && [429, 402, 403, 507].includes(response.status)) {
111
+ return;
112
+ }
113
+ if (!response.ok) {
114
+ const errorText = await response.text();
115
+ printError(`Failed to list breaches: ${response.status} ${errorText}`);
116
+ process.exit(EXIT_CODES.GENERAL_ERROR);
117
+ return;
118
+ }
119
+ const data = (await response.json());
120
+ if (effectiveConfig.outputFormat === "json") {
121
+ printJson(data);
122
+ }
123
+ else {
124
+ printTable((data.breaches ?? []));
125
+ }
126
+ process.exit(EXIT_CODES.SUCCESS);
127
+ return;
128
+ }
129
+ catch (error) {
130
+ printError(error instanceof Error ? error.message : "Failed to list breaches");
131
+ process.exit(EXIT_CODES.NETWORK_ERROR);
132
+ return;
133
+ }
134
+ });
135
+ }
136
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/cli/commands/security.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from "commander";
2
+ import type { CliConfig } from "../config.js";
3
+ export declare function registerStorageCommands(program: Command, config: CliConfig): void;
4
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAyFjF"}
@@ -0,0 +1,85 @@
1
+ import { EXIT_CODES } from "../config.js";
2
+ import { getAuthHeaders } from "../utils/auth.js";
3
+ import { getEffectiveConfig } from "../utils/command-config.js";
4
+ import { fetchWithBackendHandling } from "../utils/fetcher.js";
5
+ import { printError, printJson, printTable } from "../utils/output.js";
6
+ export function registerStorageCommands(program, config) {
7
+ const storage = program.command("storage").description("Storage service commands");
8
+ const objects = storage.command("objects").description("Object operations");
9
+ objects
10
+ .command("list")
11
+ .description("List storage objects")
12
+ .option("--limit <number>", "Number of objects to return", "100")
13
+ .option("--cursor <cursor>", "Pagination cursor")
14
+ .option("--prefix <prefix>", "Filter by prefix")
15
+ .action(async (options, command) => {
16
+ if (!config.tenantId) {
17
+ printError("QNSP_TENANT_ID must be set");
18
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
19
+ return;
20
+ }
21
+ try {
22
+ const effectiveConfig = getEffectiveConfig(config, command);
23
+ if (!effectiveConfig.tenantId) {
24
+ printError("QNSP_TENANT_ID must be set");
25
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
26
+ return;
27
+ }
28
+ const headers = await getAuthHeaders(effectiveConfig);
29
+ const storageUrl = effectiveConfig.storageServiceUrl;
30
+ const url = new URL(`${storageUrl}/storage/v1/documents`);
31
+ url.searchParams.set("limit", options.limit);
32
+ if (options.cursor) {
33
+ url.searchParams.set("cursor", options.cursor);
34
+ }
35
+ if (options.prefix) {
36
+ url.searchParams.set("prefix", options.prefix);
37
+ }
38
+ const response = await fetchWithBackendHandling(effectiveConfig, url.toString(), {
39
+ headers,
40
+ });
41
+ if (!response.ok && [429, 402, 403, 507].includes(response.status)) {
42
+ return;
43
+ }
44
+ if (!response.ok) {
45
+ const errorText = await response.text();
46
+ printError(`Failed to list objects: ${response.status} ${errorText}`);
47
+ process.exit(EXIT_CODES.GENERAL_ERROR);
48
+ return;
49
+ }
50
+ const data = (await response.json());
51
+ if (effectiveConfig.outputFormat === "json") {
52
+ printJson(data);
53
+ }
54
+ else {
55
+ printTable((data.items ?? []));
56
+ }
57
+ process.exit(EXIT_CODES.SUCCESS);
58
+ return;
59
+ }
60
+ catch (error) {
61
+ printError(error instanceof Error ? error.message : "Failed to list objects");
62
+ process.exit(EXIT_CODES.NETWORK_ERROR);
63
+ return;
64
+ }
65
+ });
66
+ objects
67
+ .command("get")
68
+ .description("Get storage object metadata")
69
+ .argument("<objectId>", "Object identifier")
70
+ .action(async (_objectId) => {
71
+ printError("storage objects get is not available: storage-service does not expose GET /storage/v1/documents/:id. " +
72
+ "Use storage objects list or the document policy endpoints via the platform APIs.");
73
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
74
+ });
75
+ objects
76
+ .command("delete")
77
+ .description("Delete storage object")
78
+ .argument("<objectId>", "Object identifier")
79
+ .action(async (_objectId) => {
80
+ printError("storage objects delete is not available: storage-service does not expose a delete endpoint for documents. " +
81
+ "Use retention/lifecycle policies or administrative workflows.");
82
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
83
+ });
84
+ }
85
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/cli/commands/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Command } from "commander";
2
+ import type { CliConfig } from "../config.js";
3
+ export declare function registerTenantCommands(program: Command, config: CliConfig): void;
4
+ //# sourceMappingURL=tenant.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tenant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAO9C,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CA2FhF"}
@@ -0,0 +1,82 @@
1
+ import { EXIT_CODES } from "../config.js";
2
+ import { getAuthHeaders } from "../utils/auth.js";
3
+ import { getEffectiveConfig } from "../utils/command-config.js";
4
+ import { fetchWithBackendHandling } from "../utils/fetcher.js";
5
+ import { printError, printJson, printTable } from "../utils/output.js";
6
+ export function registerTenantCommands(program, config) {
7
+ const tenant = program.command("tenant").description("Tenant service commands");
8
+ tenant
9
+ .command("get")
10
+ .description("Get tenant details")
11
+ .argument("<tenantId>", "Tenant identifier")
12
+ .action(async (tenantId, _options, command) => {
13
+ try {
14
+ const effectiveConfig = getEffectiveConfig(config, command);
15
+ if (!effectiveConfig.tenantId) {
16
+ printError("QNSP_TENANT_ID must be set");
17
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
18
+ return;
19
+ }
20
+ if (tenantId !== effectiveConfig.tenantId) {
21
+ printError("Cross-tenant access is not allowed from qnsp CLI. " +
22
+ "The requested tenantId must match QNSP_TENANT_ID.");
23
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
24
+ return;
25
+ }
26
+ const headers = await getAuthHeaders(effectiveConfig);
27
+ const tenantUrl = effectiveConfig.tenantServiceUrl;
28
+ const response = await fetchWithBackendHandling(effectiveConfig, `${tenantUrl}/tenant/v1/tenants/${tenantId}`, { headers });
29
+ if (!response.ok && [429, 402, 403, 507].includes(response.status)) {
30
+ return;
31
+ }
32
+ if (response.status === 404) {
33
+ printError(`Tenant not found: ${tenantId}`);
34
+ process.exit(EXIT_CODES.NOT_FOUND);
35
+ return;
36
+ }
37
+ if (!response.ok) {
38
+ const errorText = await response.text();
39
+ printError(`Failed to get tenant: ${response.status} ${errorText}`);
40
+ process.exit(EXIT_CODES.GENERAL_ERROR);
41
+ return;
42
+ }
43
+ const data = await response.json();
44
+ if (effectiveConfig.outputFormat === "json") {
45
+ printJson(data);
46
+ }
47
+ else {
48
+ printTable(data);
49
+ }
50
+ process.exit(EXIT_CODES.SUCCESS);
51
+ return;
52
+ }
53
+ catch (error) {
54
+ printError(error instanceof Error ? error.message : "Failed to get tenant");
55
+ process.exit(EXIT_CODES.NETWORK_ERROR);
56
+ return;
57
+ }
58
+ });
59
+ tenant
60
+ .command("list")
61
+ .description("List tenants")
62
+ .option("--limit <number>", "Number of tenants to return", "100")
63
+ .option("--cursor <cursor>", "Pagination cursor")
64
+ .action(async () => {
65
+ printError("tenant list is unavailable in qnsp CLI to prevent cross-tenant enumeration. " +
66
+ "Use the Cloud Portal for tenant administration.");
67
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
68
+ return;
69
+ });
70
+ tenant
71
+ .command("create")
72
+ .description("Create a new tenant")
73
+ .requiredOption("--name <name>", "Tenant name")
74
+ .option("--tier <tier>", "Pricing tier", "free")
75
+ .action(async (_options) => {
76
+ printError("tenant create is not available in qnsp CLI. " +
77
+ "Use the Cloud Portal signup flow (or the platform APIs) for tenant provisioning.");
78
+ process.exit(EXIT_CODES.INVALID_ARGUMENTS);
79
+ return;
80
+ });
81
+ }
82
+ //# sourceMappingURL=tenant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tenant.js","sourceRoot":"","sources":["../../../src/cli/commands/tenant.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Mock, MockInstance } from "vitest";
2
+ import type { CliConfig } from "../config.js";
3
+ /** Explicit return type for setupTestEnvironment to avoid non-portable inferred types from @vitest/spy. */
4
+ export interface TestEnvironment {
5
+ readonly mockFetch: Mock;
6
+ readonly mockExit: MockInstance;
7
+ readonly mockLog: MockInstance;
8
+ readonly mockError: MockInstance;
9
+ readonly mockTable: MockInstance;
10
+ readonly cleanup: () => void;
11
+ }
12
+ export declare function createMockResponse(data: unknown, status?: number, ok?: boolean, headers?: Record<string, string>): Response;
13
+ export declare const mockConfig: CliConfig;
14
+ export declare function setupTestEnvironment(): TestEnvironment;
15
+ //# sourceMappingURL=test-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,2GAA2G;AAC3G,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC7B;AAGD,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,OAAO,EACb,MAAM,SAAM,EACZ,EAAE,UAAO,EACT,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAClC,QAAQ,CAgBV;AAED,eAAO,MAAM,UAAU,EAAE,SAmBxB,CAAC;AAEF,wBAAgB,oBAAoB,IAAI,eAAe,CAmCtD"}
@@ -0,0 +1,72 @@
1
+ import { vi } from "vitest";
2
+ // Helper to create Response objects that can be cloned
3
+ export function createMockResponse(data, status = 200, ok = true, headers = {}) {
4
+ const body = JSON.stringify(data);
5
+ const responseHeaders = new Headers(headers);
6
+ // Create a response that mimics the Fetch API Response object
7
+ // tailored for our tests which use clone()
8
+ return {
9
+ ok,
10
+ status,
11
+ headers: responseHeaders,
12
+ json: async () => JSON.parse(body),
13
+ text: async () => body,
14
+ clone() {
15
+ return createMockResponse(data, status, ok, headers);
16
+ },
17
+ };
18
+ }
19
+ export const mockConfig = {
20
+ edgeGatewayUrl: null,
21
+ cloudPortalUrl: "https://cloud.qnsp.cuilabs.io",
22
+ authServiceUrl: "http://localhost:8081",
23
+ serviceId: "test-service-id",
24
+ serviceSecret: "test-secret",
25
+ tenantId: "test-tenant",
26
+ kmsServiceUrl: "http://localhost:8095",
27
+ vaultServiceUrl: "http://localhost:8090",
28
+ auditServiceUrl: "http://localhost:8103",
29
+ tenantServiceUrl: "http://localhost:8108",
30
+ billingServiceUrl: "http://localhost:8106/billing",
31
+ accessControlServiceUrl: "http://localhost:8102",
32
+ securityMonitoringServiceUrl: "http://localhost:8104",
33
+ storageServiceUrl: "http://localhost:8092",
34
+ searchServiceUrl: "http://localhost:8101",
35
+ observabilityServiceUrl: "http://localhost:8105",
36
+ outputFormat: "json",
37
+ verbose: false,
38
+ };
39
+ export function setupTestEnvironment() {
40
+ const mockFetch = vi.fn();
41
+ const mockExit = vi.spyOn(process, "exit").mockImplementation(() => undefined);
42
+ const mockLog = vi.spyOn(console, "log").mockImplementation(() => { });
43
+ const mockError = vi.spyOn(console, "error").mockImplementation(() => { });
44
+ const mockTable = vi.spyOn(console, "table").mockImplementation(() => { });
45
+ // Intercept global fetch
46
+ global.fetch = mockFetch;
47
+ // Override process.stdin.isTTY
48
+ Object.defineProperty(process.stdin, "isTTY", {
49
+ value: false,
50
+ configurable: true,
51
+ });
52
+ // Reset NODE_ENV to development to avoid HTTPS validation exit
53
+ const originalNodeEnv = process.env["NODE_ENV"];
54
+ process.env["NODE_ENV"] = "development";
55
+ return {
56
+ mockFetch,
57
+ mockExit,
58
+ mockLog,
59
+ mockError,
60
+ mockTable,
61
+ cleanup: () => {
62
+ if (originalNodeEnv === undefined) {
63
+ delete process.env["NODE_ENV"];
64
+ }
65
+ else {
66
+ process.env["NODE_ENV"] = originalNodeEnv;
67
+ }
68
+ vi.restoreAllMocks();
69
+ },
70
+ };
71
+ }
72
+ //# sourceMappingURL=test-utils.js.map