@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,101 @@
1
+ /**
2
+ * QNSP Vector Store for LlamaIndex — `@heossi/qnsi/llamaindex` subpath.
3
+ *
4
+ * PQC-encrypted semantic search backed by QNSP search-service (SSE-X).
5
+ * LlamaIndex `VectorStore`-compatible without importing `llamaindex`.
6
+ *
7
+ * Folded in from the former standalone `@heossi/qnsi-llamaindex-qnsp`
8
+ * (2026-05-16). The search-service HTTP (`indexDocument` POST
9
+ * `/search/v1/documents/index`, `search` GET `/search/v1/documents`, 429
10
+ * retry w/ backoff + `x-qnsp-tenant-id` header) is inlined here faithfully
11
+ * from the former `@heossi/qnsi-search-sdk`, and SSE-X auto-token derivation
12
+ * uses the inlined `./sse.js` — so this subpath has no `@heossi/qnsi-*`
13
+ * workspace dependency (same pattern as `../_activation`). A single
14
+ * activation (sdkId `llamaindex-qnsp`) resolves the tenant; that tenant id is
15
+ * sent both in the request and the `x-qnsp-tenant-id` header.
16
+ */
17
+ export interface SearchSecurityEnvelope {
18
+ readonly controlPlaneTokenSha256: string | null;
19
+ readonly pqcSignatures: ReadonlyArray<{
20
+ readonly provider: string;
21
+ readonly algorithm: string;
22
+ readonly value: string;
23
+ readonly publicKey: string;
24
+ }>;
25
+ readonly hardwareProvider: string | null;
26
+ readonly attestationStatus: string | null;
27
+ readonly attestationProof: string | null;
28
+ }
29
+ export interface TextNode {
30
+ readonly id_: string;
31
+ readonly text: string;
32
+ readonly metadata?: Record<string, unknown>;
33
+ readonly embedding?: readonly number[];
34
+ }
35
+ export interface VectorStoreQuery {
36
+ readonly queryStr?: string;
37
+ readonly queryEmbedding?: readonly number[];
38
+ readonly similarityTopK?: number;
39
+ }
40
+ export interface VectorStoreQueryResult {
41
+ readonly nodes: TextNode[];
42
+ readonly similarities: number[];
43
+ readonly ids: string[];
44
+ }
45
+ export interface QnspVectorStoreConfig {
46
+ /**
47
+ * QNSP API key. Get one at https://cloud.qnsp.cuilabs.io/api-keys
48
+ * The API key carries the tenant ID internally — no separate tenantId needed.
49
+ */
50
+ readonly apiKey: string;
51
+ /**
52
+ * Tenant ID for all search operations. Optional — resolved automatically
53
+ * from the API key via SDK activation when omitted.
54
+ */
55
+ readonly tenantId?: string;
56
+ /** Source service label used when indexing documents. Defaults to "llamaindex-qnsp". */
57
+ readonly sourceService?: string;
58
+ /** Base URL for the QNSP API. Defaults to https://api.qnsp.cuilabs.io */
59
+ readonly baseUrl?: string;
60
+ /** Request timeout in milliseconds. Defaults to 15000. */
61
+ readonly timeoutMs?: number;
62
+ /**
63
+ * Optional SSE key for encrypted search tokens. When provided, all index
64
+ * and query operations derive SSE-X encrypted tokens automatically.
65
+ */
66
+ readonly sseKey?: Uint8Array | string;
67
+ }
68
+ /**
69
+ * LlamaIndex-compatible vector store backed by QNSP encrypted search (SSE-X).
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * import { QnspVectorStore } from "@heossi/qnsi/llamaindex";
74
+ *
75
+ * const store = new QnspVectorStore({ apiKey: process.env.QNSP_API_KEY });
76
+ * await store.add([{ id_: "doc-1", text: "Quantum-safe overview", metadata: {} }]);
77
+ * const result = await store.query({ queryStr: "post-quantum cryptography" });
78
+ * ```
79
+ */
80
+ export declare class QnspVectorStore {
81
+ #private;
82
+ constructor(config: QnspVectorStoreConfig);
83
+ /**
84
+ * Add nodes to the QNSP encrypted search index. Returns indexed node IDs.
85
+ */
86
+ add(nodes: TextNode[]): Promise<string[]>;
87
+ /**
88
+ * Query the QNSP encrypted search index. Uses SSE-X token derivation when
89
+ * an SSE key is configured.
90
+ */
91
+ query(query: VectorStoreQuery): Promise<VectorStoreQueryResult>;
92
+ /**
93
+ * Remove a node from the search index by document ID.
94
+ *
95
+ * QNSP search-service does not expose a delete-document endpoint; this
96
+ * re-indexes the document with empty content and a "__deleted__" tag so it
97
+ * no longer matches queries (tombstone).
98
+ */
99
+ delete(nodeId: string): Promise<void>;
100
+ }
101
+ //# sourceMappingURL=vector-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-store.d.ts","sourceRoot":"","sources":["../../src/llamaindex/vector-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAuBH,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;QACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;IACH,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AA0CD,MAAM,WAAW,QAAQ;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACrC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,wFAAwF;IACxF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,yEAAyE;IACzE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CACtC;AAsOD;;;;;;;;;;;GAWG;AACH,qBAAa,eAAe;;gBAQf,MAAM,EAAE,qBAAqB;IAqCzC;;OAEG;IACG,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyB/C;;;OAGG;IACG,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAoCrE;;;;;;OAMG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgB3C"}
@@ -0,0 +1,348 @@
1
+ /**
2
+ * QNSP Vector Store for LlamaIndex — `@heossi/qnsi/llamaindex` subpath.
3
+ *
4
+ * PQC-encrypted semantic search backed by QNSP search-service (SSE-X).
5
+ * LlamaIndex `VectorStore`-compatible without importing `llamaindex`.
6
+ *
7
+ * Folded in from the former standalone `@heossi/qnsi-llamaindex-qnsp`
8
+ * (2026-05-16). The search-service HTTP (`indexDocument` POST
9
+ * `/search/v1/documents/index`, `search` GET `/search/v1/documents`, 429
10
+ * retry w/ backoff + `x-qnsp-tenant-id` header) is inlined here faithfully
11
+ * from the former `@heossi/qnsi-search-sdk`, and SSE-X auto-token derivation
12
+ * uses the inlined `./sse.js` — so this subpath has no `@heossi/qnsi-*`
13
+ * workspace dependency (same pattern as `../_activation`). A single
14
+ * activation (sdkId `llamaindex-qnsp`) resolves the tenant; that tenant id is
15
+ * sent both in the request and the `x-qnsp-tenant-id` header.
16
+ */
17
+ import { z } from "zod";
18
+ import { activateSdk } from "../_activation/index.js";
19
+ import { deriveDocumentSseTokens, deriveQuerySseTokens } from "./sse.js";
20
+ const SDK_VERSION = "0.3.0";
21
+ const SDK_ID = "llamaindex-qnsp";
22
+ const DEFAULT_BASE_URL = "https://api.qnsp.cuilabs.io";
23
+ async function resolveActivationTenantId(apiKey, baseUrl) {
24
+ const activation = await activateSdk({
25
+ apiKey,
26
+ sdkId: SDK_ID,
27
+ sdkVersion: SDK_VERSION,
28
+ platformUrl: baseUrl,
29
+ });
30
+ return activation.tenantId;
31
+ }
32
+ // ─── Zod schema for validating search hits ────────────────────────────────────
33
+ const searchHitSchema = z.object({
34
+ documentId: z.string(),
35
+ title: z.string().nullable(),
36
+ description: z.string().nullable(),
37
+ metadata: z.record(z.string(), z.unknown()),
38
+ score: z.number(),
39
+ });
40
+ // ─── Null PQC envelope helpers ────────────────────────────────────────────────
41
+ // The edge gateway fills in PQC signatures for API key callers server-side.
42
+ const NULL_SECURITY_ENVELOPE = {
43
+ controlPlaneTokenSha256: null,
44
+ pqcSignatures: [],
45
+ hardwareProvider: null,
46
+ attestationStatus: null,
47
+ attestationProof: null,
48
+ };
49
+ const NULL_SIGNATURE = {
50
+ provider: "none",
51
+ algorithm: "none",
52
+ value: "",
53
+ publicKey: "",
54
+ };
55
+ // ─── Inlined faithful search-service HTTP (from @heossi/qnsi-search-sdk) ──────
56
+ function assertHttpsOrLocal(baseUrl) {
57
+ if (baseUrl.startsWith("https://"))
58
+ return;
59
+ const isLocalhost = baseUrl.startsWith("http://localhost") || baseUrl.startsWith("http://127.0.0.1");
60
+ let isInternalService = false;
61
+ try {
62
+ const parsed = new URL(baseUrl);
63
+ isInternalService =
64
+ parsed.protocol === "http:" &&
65
+ (parsed.hostname.endsWith(".internal") ||
66
+ parsed.hostname === "localhost" ||
67
+ parsed.hostname === "127.0.0.1");
68
+ }
69
+ catch {
70
+ // ignore; invalid URL caught later by fetch
71
+ }
72
+ const isDevelopment = process.env["NODE_ENV"] === "development" || process.env["NODE_ENV"] === "test";
73
+ if ((!isLocalhost || !isDevelopment) && !isInternalService) {
74
+ throw new Error("baseUrl must use HTTPS in production. HTTP is only allowed for localhost in development.");
75
+ }
76
+ }
77
+ class SearchTransport {
78
+ #baseUrl;
79
+ #apiKey;
80
+ #timeoutMs;
81
+ #maxRetries;
82
+ #retryDelayMs;
83
+ #sseKey;
84
+ #tenantId = null;
85
+ constructor(opts) {
86
+ const baseUrl = opts.baseUrl.replace(/\/$/, "");
87
+ assertHttpsOrLocal(baseUrl);
88
+ this.#baseUrl = baseUrl;
89
+ this.#apiKey = opts.apiKey;
90
+ this.#timeoutMs = opts.timeoutMs;
91
+ this.#maxRetries = 3;
92
+ this.#retryDelayMs = 1_000;
93
+ this.#sseKey = opts.sseKey;
94
+ }
95
+ setTenantId(tenantId) {
96
+ this.#tenantId = tenantId;
97
+ }
98
+ get sseKey() {
99
+ return this.#sseKey;
100
+ }
101
+ async #fetchWithRetry(url, init, attempt) {
102
+ const headers = {
103
+ ...init.headers,
104
+ };
105
+ if (this.#tenantId) {
106
+ headers["x-qnsp-tenant-id"] = this.#tenantId;
107
+ }
108
+ const response = await fetch(url, { ...init, headers });
109
+ if (response.status === 429) {
110
+ if (attempt < this.#maxRetries) {
111
+ const retryAfterHeader = response.headers.get("Retry-After");
112
+ let delayMs = this.#retryDelayMs;
113
+ if (retryAfterHeader) {
114
+ const retryAfterSeconds = Number.parseInt(retryAfterHeader, 10);
115
+ if (!Number.isNaN(retryAfterSeconds) && retryAfterSeconds > 0) {
116
+ delayMs = retryAfterSeconds * 1_000;
117
+ }
118
+ }
119
+ else {
120
+ delayMs = Math.min(2 ** attempt * this.#retryDelayMs, 30_000);
121
+ }
122
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
123
+ return this.#fetchWithRetry(url, init, attempt + 1);
124
+ }
125
+ throw new Error(`Search API error: Rate limit exceeded after ${this.#maxRetries} retries`);
126
+ }
127
+ return response;
128
+ }
129
+ async indexDocument(input) {
130
+ const controller = new AbortController();
131
+ const timer = setTimeout(() => controller.abort(), this.#timeoutMs);
132
+ try {
133
+ const response = await this.#fetchWithRetry(`${this.#baseUrl}/search/v1/documents/index`, {
134
+ method: "POST",
135
+ headers: {
136
+ "Content-Type": "application/json",
137
+ Authorization: `Bearer ${this.#apiKey}`,
138
+ },
139
+ body: JSON.stringify(input),
140
+ signal: controller.signal,
141
+ }, 0);
142
+ if (!response.ok) {
143
+ throw new Error(`Search API error: ${response.status} ${response.statusText}`);
144
+ }
145
+ }
146
+ finally {
147
+ clearTimeout(timer);
148
+ }
149
+ }
150
+ async search(params) {
151
+ if (!params.query && (!params.sseTokens || params.sseTokens.length === 0)) {
152
+ throw new Error("search query requires either plaintext query or SSE tokens");
153
+ }
154
+ const controller = new AbortController();
155
+ const timer = setTimeout(() => controller.abort(), this.#timeoutMs);
156
+ try {
157
+ const query = new URLSearchParams();
158
+ query.set("tenantId", params.tenantId);
159
+ if (params.query && params.query.length > 0) {
160
+ query.set("q", params.query);
161
+ }
162
+ if (params.limit) {
163
+ query.set("limit", params.limit.toString());
164
+ }
165
+ if (params.cursor) {
166
+ query.set("cursor", params.cursor);
167
+ }
168
+ if (params.language) {
169
+ query.set("language", params.language);
170
+ }
171
+ for (const token of params.sseTokens ?? []) {
172
+ query.append("sse", token);
173
+ }
174
+ const response = await this.#fetchWithRetry(`${this.#baseUrl}/search/v1/documents?${query.toString()}`, {
175
+ method: "GET",
176
+ headers: { Authorization: `Bearer ${this.#apiKey}` },
177
+ signal: controller.signal,
178
+ }, 0);
179
+ if (!response.ok) {
180
+ throw new Error(`Search API error: ${response.status} ${response.statusText}`);
181
+ }
182
+ return (await response.json());
183
+ }
184
+ finally {
185
+ clearTimeout(timer);
186
+ }
187
+ }
188
+ async indexDocumentWithAutoSse(document) {
189
+ const sseTokens = this.#sseKey
190
+ ? deriveDocumentSseTokens({
191
+ tenantId: document.tenantId,
192
+ documentId: document.documentId,
193
+ sourceService: document.sourceService,
194
+ tags: document.tags ?? [],
195
+ metadata: document.metadata ?? {},
196
+ title: document.title ?? null,
197
+ description: document.description ?? null,
198
+ body: document.body ?? null,
199
+ }, this.#sseKey, { includeContent: true, includeBody: true })
200
+ : undefined;
201
+ const request = {
202
+ ...document,
203
+ ...(sseTokens !== undefined ? { sseTokens } : {}),
204
+ };
205
+ return this.indexDocument(request);
206
+ }
207
+ async searchWithAutoSse(params) {
208
+ const sseTokens = this.#sseKey ? deriveQuerySseTokens(params.query, this.#sseKey) : undefined;
209
+ return this.search({
210
+ ...params,
211
+ ...(sseTokens !== undefined ? { sseTokens } : {}),
212
+ });
213
+ }
214
+ }
215
+ // ─── QnspVectorStore ──────────────────────────────────────────────────────────
216
+ /**
217
+ * LlamaIndex-compatible vector store backed by QNSP encrypted search (SSE-X).
218
+ *
219
+ * @example
220
+ * ```typescript
221
+ * import { QnspVectorStore } from "@heossi/qnsi/llamaindex";
222
+ *
223
+ * const store = new QnspVectorStore({ apiKey: process.env.QNSP_API_KEY });
224
+ * await store.add([{ id_: "doc-1", text: "Quantum-safe overview", metadata: {} }]);
225
+ * const result = await store.query({ queryStr: "post-quantum cryptography" });
226
+ * ```
227
+ */
228
+ export class QnspVectorStore {
229
+ #transport;
230
+ #sourceService;
231
+ #apiKey;
232
+ #baseUrl;
233
+ #resolvedTenantId;
234
+ #activationPromise = null;
235
+ constructor(config) {
236
+ this.#resolvedTenantId = config.tenantId ?? null;
237
+ this.#sourceService = config.sourceService ?? "llamaindex-qnsp";
238
+ this.#apiKey = config.apiKey;
239
+ this.#baseUrl = config.baseUrl ?? DEFAULT_BASE_URL;
240
+ this.#transport = new SearchTransport({
241
+ baseUrl: this.#baseUrl,
242
+ apiKey: config.apiKey,
243
+ timeoutMs: config.timeoutMs ?? 15_000,
244
+ sseKey: config.sseKey ?? null,
245
+ });
246
+ if (this.#resolvedTenantId) {
247
+ this.#transport.setTenantId(this.#resolvedTenantId);
248
+ }
249
+ }
250
+ async #ensureTenantId() {
251
+ if (this.#resolvedTenantId) {
252
+ return this.#resolvedTenantId;
253
+ }
254
+ if (!this.#activationPromise) {
255
+ this.#activationPromise = resolveActivationTenantId(this.#apiKey, this.#baseUrl).then((tenantId) => {
256
+ this.#resolvedTenantId = tenantId;
257
+ this.#transport.setTenantId(tenantId);
258
+ });
259
+ }
260
+ await this.#activationPromise;
261
+ if (!this.#resolvedTenantId) {
262
+ throw new Error("QNSP LlamaIndex: tenantId could not be resolved. Ensure your API key is valid.");
263
+ }
264
+ return this.#resolvedTenantId;
265
+ }
266
+ /**
267
+ * Add nodes to the QNSP encrypted search index. Returns indexed node IDs.
268
+ */
269
+ async add(nodes) {
270
+ if (nodes.length === 0) {
271
+ return [];
272
+ }
273
+ const tenantId = await this.#ensureTenantId();
274
+ await Promise.all(nodes.map((node) => this.#transport.indexDocumentWithAutoSse({
275
+ tenantId,
276
+ documentId: node.id_,
277
+ version: "1",
278
+ sourceService: this.#sourceService,
279
+ title: node.id_,
280
+ description: null,
281
+ body: node.text,
282
+ tags: [],
283
+ metadata: node.metadata ?? {},
284
+ security: NULL_SECURITY_ENVELOPE,
285
+ signature: NULL_SIGNATURE,
286
+ })));
287
+ return nodes.map((n) => n.id_);
288
+ }
289
+ /**
290
+ * Query the QNSP encrypted search index. Uses SSE-X token derivation when
291
+ * an SSE key is configured.
292
+ */
293
+ async query(query) {
294
+ const queryStr = query.queryStr ?? "";
295
+ if (!queryStr) {
296
+ return { nodes: [], similarities: [], ids: [] };
297
+ }
298
+ const tenantId = await this.#ensureTenantId();
299
+ const limit = query.similarityTopK ?? 10;
300
+ const response = await this.#transport.searchWithAutoSse({
301
+ tenantId,
302
+ query: queryStr,
303
+ limit,
304
+ });
305
+ const nodes = [];
306
+ const similarities = [];
307
+ const ids = [];
308
+ for (const hit of response.items) {
309
+ const parsed = searchHitSchema.safeParse(hit);
310
+ if (!parsed.success) {
311
+ continue;
312
+ }
313
+ const { documentId, title, metadata, score } = parsed.data;
314
+ nodes.push({
315
+ id_: documentId,
316
+ text: title ?? documentId,
317
+ metadata,
318
+ });
319
+ similarities.push(score);
320
+ ids.push(documentId);
321
+ }
322
+ return { nodes, similarities, ids };
323
+ }
324
+ /**
325
+ * Remove a node from the search index by document ID.
326
+ *
327
+ * QNSP search-service does not expose a delete-document endpoint; this
328
+ * re-indexes the document with empty content and a "__deleted__" tag so it
329
+ * no longer matches queries (tombstone).
330
+ */
331
+ async delete(nodeId) {
332
+ const tenantId = await this.#ensureTenantId();
333
+ await this.#transport.indexDocumentWithAutoSse({
334
+ tenantId,
335
+ documentId: nodeId,
336
+ version: "deleted",
337
+ sourceService: this.#sourceService,
338
+ title: null,
339
+ description: null,
340
+ body: null,
341
+ tags: ["__deleted__"],
342
+ metadata: { deleted: true, deletedAt: new Date().toISOString() },
343
+ security: NULL_SECURITY_ENVELOPE,
344
+ signature: NULL_SIGNATURE,
345
+ });
346
+ }
347
+ }
348
+ //# sourceMappingURL=vector-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vector-store.js","sourceRoot":"","sources":["../../src/llamaindex/vector-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * QNSP Search — encrypted vector search with SSE-X. Wraps
3
+ * `apps/search-service` (`/search/v1`).
4
+ */
5
+ import type { Internal, RequestOptions } from "./_internal.js";
6
+ export interface CreateIndexRequest {
7
+ readonly name: string;
8
+ readonly dimensions: number;
9
+ readonly metric?: string;
10
+ readonly algorithm?: string;
11
+ readonly metadata?: Record<string, unknown>;
12
+ }
13
+ export interface Vector {
14
+ readonly id: string;
15
+ readonly values: readonly number[];
16
+ readonly metadata?: Record<string, unknown>;
17
+ }
18
+ export interface QueryRequest {
19
+ readonly vector: readonly number[];
20
+ readonly topK: number;
21
+ readonly filter?: Record<string, unknown>;
22
+ }
23
+ export declare class SearchClient {
24
+ private readonly internal;
25
+ constructor(internal: Internal);
26
+ createIndex(req: CreateIndexRequest, opts?: Pick<RequestOptions, "idempotencyKey">): Promise<Record<string, unknown>>;
27
+ listIndexes(): Promise<Record<string, unknown>>;
28
+ deleteIndex(indexName: string): Promise<void>;
29
+ upsertVectors(indexName: string, vectors: readonly Vector[], opts?: Pick<RequestOptions, "idempotencyKey">): Promise<Record<string, unknown>>;
30
+ query(indexName: string, req: QueryRequest): Promise<Record<string, unknown>>;
31
+ }
32
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAI/D,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,qBAAa,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAE/C,WAAW,CAAC,GAAG,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAIlF,WAAW;IAIL,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,aAAa,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,MAAM,EAAE,EAC1B,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAU9C,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,YAAY;CAG1C"}
package/dist/search.js ADDED
@@ -0,0 +1,27 @@
1
+ /**
2
+ * QNSP Search — encrypted vector search with SSE-X. Wraps
3
+ * `apps/search-service` (`/search/v1`).
4
+ */
5
+ const PATH_PREFIX = "/proxy/search/v1";
6
+ export class SearchClient {
7
+ internal;
8
+ constructor(internal) {
9
+ this.internal = internal;
10
+ }
11
+ createIndex(req, opts) {
12
+ return this.internal.request("POST", `${PATH_PREFIX}/indexes`, req, opts);
13
+ }
14
+ listIndexes() {
15
+ return this.internal.request("GET", `${PATH_PREFIX}/indexes`);
16
+ }
17
+ async deleteIndex(indexName) {
18
+ await this.internal.request("DELETE", `${PATH_PREFIX}/indexes/${indexName}`);
19
+ }
20
+ upsertVectors(indexName, vectors, opts) {
21
+ return this.internal.request("POST", `${PATH_PREFIX}/indexes/${indexName}/vectors`, { vectors }, opts);
22
+ }
23
+ query(indexName, req) {
24
+ return this.internal.request("POST", `${PATH_PREFIX}/indexes/${indexName}/query`, req);
25
+ }
26
+ }
27
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,GAAG,kBAAkB,CAAC;AAsBvC,MAAM,OAAO,YAAY;IACK;IAA7B,YAA6B,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEnD,WAAW,CAAC,GAAuB,EAAE,IAA6C;QACjF,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,WAAW,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,WAAW;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,WAAW,UAAU,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB;QAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,WAAW,YAAY,SAAS,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,aAAa,CACZ,SAAiB,EACjB,OAA0B,EAC1B,IAA6C;QAE7C,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAC3B,MAAM,EACN,GAAG,WAAW,YAAY,SAAS,UAAU,EAC7C,EAAE,OAAO,EAAE,EACX,IAAI,CACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAiB,EAAE,GAAiB;QACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,WAAW,YAAY,SAAS,QAAQ,EAAE,GAAG,CAAC,CAAC;IACxF,CAAC;CACD"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * QNSP Storage — PQC-encrypted object storage with SSE-X. Wraps
3
+ * `apps/storage-service` bucket/object routes, registered at `/storage/v1/buckets/*`
4
+ * (apps/storage-service/src/routes/bucket-objects.ts) and reached via the edge gateway's
5
+ * `/proxy/storage` prefix (rewritten to `/storage`).
6
+ */
7
+ import type { Internal, RequestOptions } from "./_internal.js";
8
+ export interface PutObjectInput {
9
+ readonly data: Uint8Array;
10
+ readonly contentType?: string;
11
+ readonly sseAlgorithm?: string;
12
+ readonly metadata?: Record<string, unknown>;
13
+ }
14
+ interface GetObjectResponse {
15
+ readonly dataB64?: string;
16
+ readonly [key: string]: unknown;
17
+ }
18
+ export declare class StorageClient {
19
+ private readonly internal;
20
+ constructor(internal: Internal);
21
+ putObject(bucket: string, key: string, input: PutObjectInput, opts?: Pick<RequestOptions, "idempotencyKey">): Promise<Record<string, unknown>>;
22
+ /**
23
+ * Returns `[plaintext bytes, descriptor JSON]`. Throws `QnspApiError`
24
+ * if the descriptor is missing the dataB64 field.
25
+ */
26
+ getObject(bucket: string, key: string): Promise<readonly [Uint8Array, GetObjectResponse]>;
27
+ deleteObject(bucket: string, key: string): Promise<void>;
28
+ listObjects(bucket: string, query?: RequestOptions["query"]): Promise<Record<string, unknown>>;
29
+ listBuckets(): Promise<Record<string, unknown>>;
30
+ }
31
+ export {};
32
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAQ/D,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,UAAU,iBAAiB;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAChC;AAED,qBAAa,aAAa;IACb,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAE/C,SAAS,CACR,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,cAAc,EACrB,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC;IAgB9C;;;OAGG;IACG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;IAWzF,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC;IAM3D,WAAW;CAGX"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * QNSP Storage — PQC-encrypted object storage with SSE-X. Wraps
3
+ * `apps/storage-service` bucket/object routes, registered at `/storage/v1/buckets/*`
4
+ * (apps/storage-service/src/routes/bucket-objects.ts) and reached via the edge gateway's
5
+ * `/proxy/storage` prefix (rewritten to `/storage`).
6
+ */
7
+ import { QnspApiError } from "./errors.js";
8
+ // Edge gateway rewrites /proxy/storage -> /storage, so this resolves to the backend's
9
+ // /storage/v1/buckets/* routes. (Was /proxy/storage/storage/v1 — a double "storage" that
10
+ // rewrote to /storage/storage/v1, which the backend never served, so every call 404'd.)
11
+ const PATH_PREFIX = "/proxy/storage/v1";
12
+ export class StorageClient {
13
+ internal;
14
+ constructor(internal) {
15
+ this.internal = internal;
16
+ }
17
+ putObject(bucket, key, input, opts) {
18
+ const body = {
19
+ dataB64: encodeB64(input.data),
20
+ };
21
+ if (input.contentType !== undefined)
22
+ body["contentType"] = input.contentType;
23
+ if (input.sseAlgorithm !== undefined)
24
+ body["sseAlgorithm"] = input.sseAlgorithm;
25
+ if (input.metadata !== undefined)
26
+ body["metadata"] = input.metadata;
27
+ return this.internal.request("PUT", `${PATH_PREFIX}/buckets/${bucket}/objects/${key}`, body, opts);
28
+ }
29
+ /**
30
+ * Returns `[plaintext bytes, descriptor JSON]`. Throws `QnspApiError`
31
+ * if the descriptor is missing the dataB64 field.
32
+ */
33
+ async getObject(bucket, key) {
34
+ const resp = await this.internal.request("GET", `${PATH_PREFIX}/buckets/${bucket}/objects/${key}`);
35
+ if (!resp.dataB64) {
36
+ throw new QnspApiError("storage.getObject: response missing dataB64", 200);
37
+ }
38
+ return [decodeB64(resp.dataB64), resp];
39
+ }
40
+ async deleteObject(bucket, key) {
41
+ await this.internal.request("DELETE", `${PATH_PREFIX}/buckets/${bucket}/objects/${key}`);
42
+ }
43
+ listObjects(bucket, query) {
44
+ return this.internal.request("GET", `${PATH_PREFIX}/buckets/${bucket}/objects`, undefined, {
45
+ query,
46
+ });
47
+ }
48
+ listBuckets() {
49
+ return this.internal.request("GET", `${PATH_PREFIX}/buckets`);
50
+ }
51
+ }
52
+ function encodeB64(bytes) {
53
+ return Buffer.from(bytes).toString("base64");
54
+ }
55
+ function decodeB64(b64) {
56
+ return new Uint8Array(Buffer.from(b64, "base64"));
57
+ }
58
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,sFAAsF;AACtF,yFAAyF;AACzF,wFAAwF;AACxF,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAcxC,MAAM,OAAO,aAAa;IACI;IAA7B,YAA6B,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEnD,SAAS,CACR,MAAc,EACd,GAAW,EACX,KAAqB,EACrB,IAA6C;QAE7C,MAAM,IAAI,GAA4B;YACrC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;SAC9B,CAAC;QACF,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,IAAI,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC;QAC7E,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;YAAE,IAAI,CAAC,cAAc,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;QAChF,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;QACpE,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAC3B,KAAK,EACL,GAAG,WAAW,YAAY,MAAM,YAAY,GAAG,EAAE,EACjD,IAAI,EACJ,IAAI,CACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,GAAW;QAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CACvC,KAAK,EACL,GAAG,WAAW,YAAY,MAAM,YAAY,GAAG,EAAE,CACjD,CAAC;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,IAAI,YAAY,CAAC,6CAA6C,EAAE,GAAG,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,GAAW;QAC7C,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,WAAW,YAAY,MAAM,YAAY,GAAG,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,KAA+B;QAC1D,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,WAAW,YAAY,MAAM,UAAU,EAAE,SAAS,EAAE;YAC1F,KAAK;SACL,CAAC,CAAC;IACJ,CAAC;IAED,WAAW;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,WAAW,UAAU,CAAC,CAAC;IAC/D,CAAC;CACD;AAED,SAAS,SAAS,CAAC,KAAiB;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;AACnD,CAAC"}