@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,107 @@
1
+ /**
2
+ * QNSP Vault Tools for LangChain
3
+ *
4
+ * Provides governed agents with PQC-encrypted secret storage.
5
+ * Every read and write is automatically audited via the QNSP audit trail.
6
+ */
7
+ import { StructuredTool } from "@langchain/core/tools";
8
+ import { z } from "zod";
9
+ // ─── Read Secret ─────────────────────────────────────────────────────────────
10
+ const readSecretSchema = z.object({
11
+ secretId: z.string().min(1).describe("The UUID of the secret to read"),
12
+ });
13
+ /**
14
+ * LangChain tool that reads a PQC-encrypted secret from QNSP Vault.
15
+ */
16
+ export class QnspReadSecretTool extends StructuredTool {
17
+ name = "qnsp_read_secret";
18
+ description = "Read a PQC-encrypted secret from QNSP Vault. Returns the secret name and encrypted envelope. Use this when an agent needs to retrieve a stored credential, API key, or sensitive value.";
19
+ schema = readSecretSchema;
20
+ #vault;
21
+ constructor(vault, fields) {
22
+ super(fields);
23
+ this.#vault = vault;
24
+ }
25
+ async _call(input) {
26
+ const secret = await this.#vault.getSecret(input.secretId);
27
+ return JSON.stringify({
28
+ id: secret.id,
29
+ name: secret.name,
30
+ tenantId: secret.tenantId,
31
+ version: secret.version,
32
+ algorithm: secret.pqc?.algorithm ?? secret.envelope.algorithm,
33
+ createdAt: secret.createdAt,
34
+ });
35
+ }
36
+ }
37
+ // ─── Write Secret ─────────────────────────────────────────────────────────────
38
+ const writeSecretSchema = z.object({
39
+ tenantId: z.string().min(1).describe("The tenant ID that will own the secret"),
40
+ name: z.string().min(1).max(255).describe("A human-readable name for the secret"),
41
+ payload: z
42
+ .string()
43
+ .min(1)
44
+ .describe("The secret value to store, base64-encoded (e.g. btoa('my-api-key'))"),
45
+ description: z.string().max(1000).optional().describe("Optional description stored in metadata"),
46
+ });
47
+ /**
48
+ * LangChain tool that stores a PQC-encrypted secret in QNSP Vault.
49
+ */
50
+ export class QnspWriteSecretTool extends StructuredTool {
51
+ name = "qnsp_write_secret";
52
+ description = "Store a PQC-encrypted secret in QNSP Vault. The payload must be base64-encoded. Returns the created secret ID. Use this when an agent needs to persist a credential, token, or sensitive value securely.";
53
+ schema = writeSecretSchema;
54
+ #vault;
55
+ constructor(vault, fields) {
56
+ super(fields);
57
+ this.#vault = vault;
58
+ }
59
+ async _call(input) {
60
+ const secret = await this.#vault.createSecret({
61
+ tenantId: input.tenantId,
62
+ name: input.name,
63
+ payload: input.payload,
64
+ ...(input.description !== undefined ? { metadata: { description: input.description } } : {}),
65
+ });
66
+ return JSON.stringify({
67
+ id: secret.id,
68
+ name: secret.name,
69
+ tenantId: secret.tenantId,
70
+ algorithm: secret.pqc?.algorithm ?? secret.envelope.algorithm,
71
+ createdAt: secret.createdAt,
72
+ });
73
+ }
74
+ }
75
+ // ─── Rotate Secret ────────────────────────────────────────────────────────────
76
+ const rotateSecretSchema = z.object({
77
+ secretId: z.string().min(1).describe("The UUID of the secret to rotate"),
78
+ tenantId: z.string().min(1).describe("The tenant ID that owns the secret"),
79
+ newPayload: z.string().min(1).describe("The new secret value, base64-encoded"),
80
+ });
81
+ /**
82
+ * LangChain tool that rotates a secret in QNSP Vault with a new value.
83
+ */
84
+ export class QnspRotateSecretTool extends StructuredTool {
85
+ name = "qnsp_rotate_secret";
86
+ description = "Rotate a secret in QNSP Vault with a new PQC-encrypted value. The previous version is retained for rollback. Use this when an agent needs to update a credential after rotation.";
87
+ schema = rotateSecretSchema;
88
+ #vault;
89
+ constructor(vault, fields) {
90
+ super(fields);
91
+ this.#vault = vault;
92
+ }
93
+ async _call(input) {
94
+ const secret = await this.#vault.rotateSecret(input.secretId, {
95
+ tenantId: input.tenantId,
96
+ newPayload: input.newPayload,
97
+ });
98
+ return JSON.stringify({
99
+ id: secret.id,
100
+ name: secret.name,
101
+ version: secret.version,
102
+ algorithm: secret.pqc?.algorithm ?? secret.envelope.algorithm,
103
+ rotatedAt: secret.updatedAt,
104
+ });
105
+ }
106
+ }
107
+ //# sourceMappingURL=vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault.js","sourceRoot":"","sources":["../../../src/langchain/tools/vault.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Minimal QNSP Vault client — `@heossi/qnsi/langchain` subpath.
3
+ *
4
+ * Faithful inline of the `getSecret` / `createSecret` / `rotateSecret` slice of
5
+ * the former `@heossi/qnsi-vault-sdk` `VaultClient` (2026-05-16
6
+ * consolidation): Bearer auth, `x-qnsp-tenant-id` header, 429 retry with
7
+ * exponential backoff + `Retry-After`, per-request timeout, `Vault API
8
+ * error: <status> <statusText>` on failure. Endpoints and request/response
9
+ * shapes are byte-for-byte preserved. Activation is owned by `QnspToolkit`
10
+ * (single `langchain-qnsp` handshake); the resolved tenant id is injected via
11
+ * {@link VaultClient.setTenantId} — so this subpath has no `@heossi/qnsi-*`
12
+ * workspace dependency (same pattern as `../_activation`).
13
+ */
14
+ export interface VaultClientConfig {
15
+ readonly baseUrl?: string;
16
+ readonly apiKey: string;
17
+ readonly timeoutMs?: number;
18
+ readonly maxRetries?: number;
19
+ readonly retryDelayMs?: number;
20
+ }
21
+ export interface RotationPolicy {
22
+ /** When false the secret is never auto-rotated (static / not opted in). */
23
+ readonly enabled: boolean;
24
+ readonly intervalSeconds: number;
25
+ readonly expiresAt: number | null;
26
+ }
27
+ export interface RotationPolicyInput {
28
+ readonly enabled?: boolean;
29
+ readonly intervalSeconds?: number;
30
+ readonly expiresAt?: number;
31
+ }
32
+ export interface SecretEnvelope {
33
+ readonly encrypted: string;
34
+ readonly algorithm: string;
35
+ readonly keyId?: string;
36
+ }
37
+ export interface VaultSecretPqcMetadata {
38
+ readonly provider: string;
39
+ readonly algorithm: string;
40
+ readonly algorithmNist?: string;
41
+ readonly keyId: string;
42
+ }
43
+ export interface Secret {
44
+ readonly id: string;
45
+ readonly name: string;
46
+ readonly tenantId: string;
47
+ readonly version: number;
48
+ readonly metadata: Record<string, unknown>;
49
+ readonly rotationPolicy: RotationPolicy;
50
+ readonly checksum: string;
51
+ readonly createdAt: string;
52
+ readonly updatedAt: string;
53
+ readonly versionCreatedAt: string;
54
+ readonly envelope: SecretEnvelope;
55
+ readonly pqc?: VaultSecretPqcMetadata;
56
+ }
57
+ export interface CreateSecretRequest {
58
+ readonly tenantId?: string;
59
+ readonly name: string;
60
+ readonly payload: string;
61
+ readonly metadata?: Record<string, unknown>;
62
+ readonly rotationPolicy?: RotationPolicyInput;
63
+ }
64
+ export interface RotateSecretRequest {
65
+ readonly tenantId: string;
66
+ readonly newPayload?: string;
67
+ readonly metadata?: Record<string, unknown>;
68
+ readonly rotationPolicy?: RotationPolicyInput;
69
+ }
70
+ export declare class VaultClient {
71
+ #private;
72
+ constructor(config: VaultClientConfig);
73
+ /** Inject the activation-resolved tenant id (sent as `x-qnsp-tenant-id`). */
74
+ setTenantId(tenantId: string): void;
75
+ /** Create a new secret. Payload must be base64-encoded. */
76
+ createSecret(request: CreateSecretRequest): Promise<Secret>;
77
+ /** Get the latest version of a secret. */
78
+ getSecret(id: string): Promise<Secret>;
79
+ /** Rotate a secret to create a new version. */
80
+ rotateSecret(id: string, request: RotateSecretRequest): Promise<Secret>;
81
+ }
82
+ //# sourceMappingURL=vault-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-client.d.ts","sourceRoot":"","sources":["../../src/langchain/vault-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Minimal QNSP Vault client — `@heossi/qnsi/langchain` subpath.
3
+ *
4
+ * Faithful inline of the `getSecret` / `createSecret` / `rotateSecret` slice of
5
+ * the former `@heossi/qnsi-vault-sdk` `VaultClient` (2026-05-16
6
+ * consolidation): Bearer auth, `x-qnsp-tenant-id` header, 429 retry with
7
+ * exponential backoff + `Retry-After`, per-request timeout, `Vault API
8
+ * error: <status> <statusText>` on failure. Endpoints and request/response
9
+ * shapes are byte-for-byte preserved. Activation is owned by `QnspToolkit`
10
+ * (single `langchain-qnsp` handshake); the resolved tenant id is injected via
11
+ * {@link VaultClient.setTenantId} — so this subpath has no `@heossi/qnsi-*`
12
+ * workspace dependency (same pattern as `../_activation`).
13
+ */
14
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
15
+ function validateUUID(value, field) {
16
+ if (!UUID_RE.test(value)) {
17
+ throw new Error(`QNSP Vault: ${field} must be a valid UUID, received "${value}"`);
18
+ }
19
+ }
20
+ const DEFAULT_BASE_URL = "https://api.qnsp.cuilabs.io";
21
+ export class VaultClient {
22
+ #baseUrl;
23
+ #apiKey;
24
+ #timeoutMs;
25
+ #maxRetries;
26
+ #retryDelayMs;
27
+ #tenantId = null;
28
+ constructor(config) {
29
+ if (!config.apiKey || config.apiKey.trim().length === 0) {
30
+ throw new Error("QNSP Vault: apiKey is required. Get a free key at https://cloud.qnsp.cuilabs.io/auth");
31
+ }
32
+ this.#baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, "");
33
+ this.#apiKey = config.apiKey;
34
+ this.#timeoutMs = config.timeoutMs ?? 15_000;
35
+ this.#maxRetries = config.maxRetries ?? 3;
36
+ this.#retryDelayMs = config.retryDelayMs ?? 1_000;
37
+ }
38
+ /** Inject the activation-resolved tenant id (sent as `x-qnsp-tenant-id`). */
39
+ setTenantId(tenantId) {
40
+ this.#tenantId = tenantId;
41
+ }
42
+ async #request(method, path, options, attempt = 0) {
43
+ const url = `${this.#baseUrl}${path}`;
44
+ const headers = {
45
+ "Content-Type": "application/json",
46
+ ...options?.headers,
47
+ Authorization: `Bearer ${this.#apiKey}`,
48
+ };
49
+ if (this.#tenantId) {
50
+ headers["x-qnsp-tenant-id"] = this.#tenantId;
51
+ }
52
+ const controller = new AbortController();
53
+ const timeoutId = setTimeout(() => controller.abort(), this.#timeoutMs);
54
+ try {
55
+ const init = { method, headers, signal: controller.signal };
56
+ if (options?.body !== undefined) {
57
+ init.body = JSON.stringify(options.body);
58
+ }
59
+ const response = await fetch(url, init);
60
+ clearTimeout(timeoutId);
61
+ if (response.status === 429) {
62
+ if (attempt < this.#maxRetries) {
63
+ const retryAfterHeader = response.headers.get("Retry-After");
64
+ let delayMs = this.#retryDelayMs;
65
+ if (retryAfterHeader) {
66
+ const retryAfterSeconds = Number.parseInt(retryAfterHeader, 10);
67
+ if (!Number.isNaN(retryAfterSeconds) && retryAfterSeconds > 0) {
68
+ delayMs = retryAfterSeconds * 1_000;
69
+ }
70
+ }
71
+ else {
72
+ delayMs = Math.min(2 ** attempt * this.#retryDelayMs, 30_000);
73
+ }
74
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
75
+ return this.#request(method, path, options, attempt + 1);
76
+ }
77
+ throw new Error(`Vault API error: Rate limit exceeded after ${this.#maxRetries} retries`);
78
+ }
79
+ if (!response.ok) {
80
+ throw new Error(`Vault API error: ${response.status} ${response.statusText}`);
81
+ }
82
+ if (response.status === 204) {
83
+ return undefined;
84
+ }
85
+ return (await response.json());
86
+ }
87
+ catch (error) {
88
+ clearTimeout(timeoutId);
89
+ if (error instanceof Error && error.name === "AbortError") {
90
+ throw new Error(`Request timeout after ${this.#timeoutMs}ms`);
91
+ }
92
+ throw error;
93
+ }
94
+ }
95
+ /** Create a new secret. Payload must be base64-encoded. */
96
+ async createSecret(request) {
97
+ if (request.tenantId !== undefined) {
98
+ validateUUID(request.tenantId, "tenantId");
99
+ }
100
+ const effectiveTenantId = request.tenantId ?? this.#tenantId;
101
+ if (!effectiveTenantId) {
102
+ throw new Error("QNSP Vault: tenantId could not be resolved. Ensure your API key is valid.");
103
+ }
104
+ return this.#request("POST", "/vault/v1/secrets", {
105
+ body: {
106
+ tenantId: effectiveTenantId,
107
+ name: request.name,
108
+ payload: request.payload,
109
+ ...(request.metadata !== undefined ? { metadata: request.metadata } : {}),
110
+ ...(request.rotationPolicy !== undefined ? { rotationPolicy: request.rotationPolicy } : {}),
111
+ },
112
+ });
113
+ }
114
+ /** Get the latest version of a secret. */
115
+ async getSecret(id) {
116
+ validateUUID(id, "id");
117
+ return this.#request("GET", `/vault/v1/secrets/${id}`, undefined);
118
+ }
119
+ /** Rotate a secret to create a new version. */
120
+ async rotateSecret(id, request) {
121
+ validateUUID(id, "id");
122
+ validateUUID(request.tenantId, "tenantId");
123
+ return this.#request("POST", `/vault/v1/secrets/${id}/rotate`, {
124
+ body: {
125
+ tenantId: request.tenantId,
126
+ ...(request.newPayload !== undefined ? { newPayload: request.newPayload } : {}),
127
+ ...(request.metadata !== undefined ? { metadata: request.metadata } : {}),
128
+ ...(request.rotationPolicy !== undefined ? { rotationPolicy: request.rotationPolicy } : {}),
129
+ },
130
+ });
131
+ }
132
+ }
133
+ //# sourceMappingURL=vault-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vault-client.js","sourceRoot":"","sources":["../../src/langchain/vault-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `@heossi/qnsi/llamaindex` — LlamaIndex adapters for QNSP.
3
+ *
4
+ * PQC-encrypted vector store backed by QNSP search-service (SSE-X). Folded in
5
+ * from the former standalone `@heossi/qnsi-llamaindex-qnsp` (2026-05-16).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { QnspVectorStore } from "@heossi/qnsi/llamaindex";
10
+ *
11
+ * const store = new QnspVectorStore({ apiKey: process.env.QNSP_API_KEY });
12
+ * ```
13
+ */
14
+ export type { QnspVectorStoreConfig, SearchSecurityEnvelope, TextNode, VectorStoreQuery, VectorStoreQueryResult, } from "./vector-store.js";
15
+ export { QnspVectorStore } from "./vector-store.js";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llamaindex/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,YAAY,EACX,qBAAqB,EACrB,sBAAsB,EACtB,QAAQ,EACR,gBAAgB,EAChB,sBAAsB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * `@heossi/qnsi/llamaindex` — LlamaIndex adapters for QNSP.
3
+ *
4
+ * PQC-encrypted vector store backed by QNSP search-service (SSE-X). Folded in
5
+ * from the former standalone `@heossi/qnsi-llamaindex-qnsp` (2026-05-16).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { QnspVectorStore } from "@heossi/qnsi/llamaindex";
10
+ *
11
+ * const store = new QnspVectorStore({ apiKey: process.env.QNSP_API_KEY });
12
+ * ```
13
+ */
14
+ export { QnspVectorStore } from "./vector-store.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llamaindex/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AASH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * SSE-X token derivation — `@heossi/qnsi/llamaindex` subpath.
3
+ *
4
+ * Faithful inline of the SSE-X token-derivation crypto from the former
5
+ * `@heossi/qnsi-search-sdk` `sse.ts` (2026-05-16 consolidation). Only the
6
+ * token-derivation functions are inlined — the former `checkSseAccess`/tier
7
+ * gate is NOT carried over here because the vector store never invoked it
8
+ * (server enforces the SSE entitlement authoritatively), which also lets this
9
+ * subpath avoid a `@heossi/qnsi-shared-kernel` dependency. Crypto is
10
+ * byte-for-byte preserved: HMAC-SHA3-512 over UTF-8 values, base64url output.
11
+ */
12
+ /** Subset of an index document used for token derivation. */
13
+ export interface SseDocumentPayload {
14
+ readonly tenantId: string;
15
+ readonly documentId: string;
16
+ readonly sourceService: string;
17
+ readonly tags?: readonly string[];
18
+ readonly metadata?: Record<string, unknown>;
19
+ readonly body?: string | null;
20
+ readonly title?: string | null;
21
+ readonly description?: string | null;
22
+ }
23
+ export declare function createSseToken(key: Uint8Array | string, value: string): string;
24
+ export interface DeriveSseOptions {
25
+ readonly includeContent?: boolean;
26
+ readonly includeBody?: boolean;
27
+ readonly maxContentTokens?: number;
28
+ readonly minTokenLength?: number;
29
+ }
30
+ export declare function deriveDocumentSseTokens(payload: SseDocumentPayload, key: Uint8Array | string, options?: DeriveSseOptions): string[];
31
+ export interface DeriveQuerySseOptions {
32
+ readonly maxTokens?: number;
33
+ readonly minTokenLength?: number;
34
+ }
35
+ export declare function deriveQuerySseTokens(query: string, key: Uint8Array | string, options?: DeriveQuerySseOptions): string[];
36
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/llamaindex/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,6DAA6D;AAC7D,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAiBD,wBAAgB,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAI9E;AAsED,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAWD,wBAAgB,uBAAuB,CACtC,OAAO,EAAE,kBAAkB,EAC3B,GAAG,EAAE,UAAU,GAAG,MAAM,EACxB,OAAO,GAAE,gBAAqB,GAC5B,MAAM,EAAE,CAkDV;AAED,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,UAAU,GAAG,MAAM,EACxB,OAAO,GAAE,qBAA0B,GACjC,MAAM,EAAE,CAaV"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * SSE-X token derivation — `@heossi/qnsi/llamaindex` subpath.
3
+ *
4
+ * Faithful inline of the SSE-X token-derivation crypto from the former
5
+ * `@heossi/qnsi-search-sdk` `sse.ts` (2026-05-16 consolidation). Only the
6
+ * token-derivation functions are inlined — the former `checkSseAccess`/tier
7
+ * gate is NOT carried over here because the vector store never invoked it
8
+ * (server enforces the SSE entitlement authoritatively), which also lets this
9
+ * subpath avoid a `@heossi/qnsi-shared-kernel` dependency. Crypto is
10
+ * byte-for-byte preserved: HMAC-SHA3-512 over UTF-8 values, base64url output.
11
+ */
12
+ import { Buffer } from "node:buffer";
13
+ import { hmac } from "@noble/hashes/hmac.js";
14
+ import { sha3_512 } from "@noble/hashes/sha3.js";
15
+ import { utf8ToBytes } from "@noble/hashes/utils.js";
16
+ function toBase64Url(bytes) {
17
+ return Buffer.from(bytes)
18
+ .toString("base64")
19
+ .replace(/\+/g, "-")
20
+ .replace(/\//g, "_")
21
+ .replace(/=+$/u, "");
22
+ }
23
+ function normalizeKey(key) {
24
+ if (typeof key === "string") {
25
+ return Uint8Array.from(Buffer.from(key, "base64"));
26
+ }
27
+ return key;
28
+ }
29
+ export function createSseToken(key, value) {
30
+ const normalizedKey = normalizeKey(key);
31
+ const mac = hmac(sha3_512, normalizedKey, utf8ToBytes(value));
32
+ return toBase64Url(mac);
33
+ }
34
+ function flattenMetadata(metadata, prefix = "meta") {
35
+ const tokens = [];
36
+ for (const [key, value] of Object.entries(metadata)) {
37
+ const nextPrefix = `${prefix}.${key}`;
38
+ if (value === null ||
39
+ typeof value === "number" ||
40
+ typeof value === "string" ||
41
+ typeof value === "boolean") {
42
+ tokens.push(`${nextPrefix}=${String(value)}`);
43
+ }
44
+ else if (Array.isArray(value)) {
45
+ value.forEach((entry, index) => {
46
+ if (entry === null ||
47
+ typeof entry === "number" ||
48
+ typeof entry === "string" ||
49
+ typeof entry === "boolean") {
50
+ tokens.push(`${nextPrefix}[${index}]=${String(entry)}`);
51
+ }
52
+ else if (entry && typeof entry === "object") {
53
+ tokens.push(...flattenMetadata(entry, `${nextPrefix}[${index}]`));
54
+ }
55
+ });
56
+ }
57
+ else if (value && typeof value === "object") {
58
+ tokens.push(...flattenMetadata(value, nextPrefix));
59
+ }
60
+ }
61
+ return tokens;
62
+ }
63
+ const DEFAULT_TOKENIZATION = {
64
+ maxTokens: 128,
65
+ minTokenLength: 3,
66
+ };
67
+ function tokenizeContent(value, options = DEFAULT_TOKENIZATION, accumulator) {
68
+ const tokens = accumulator ?? new Set();
69
+ const normalized = value
70
+ .toLowerCase()
71
+ .replace(/[^a-z0-9]+/g, " ")
72
+ .trim()
73
+ .split(/\s+/u);
74
+ for (const token of normalized) {
75
+ if (!token || token.length < options.minTokenLength) {
76
+ continue;
77
+ }
78
+ tokens.add(token);
79
+ if (tokens.size >= options.maxTokens) {
80
+ break;
81
+ }
82
+ }
83
+ return tokens;
84
+ }
85
+ function normalizeOptions(options) {
86
+ return {
87
+ includeContent: options?.includeContent ?? false,
88
+ includeBody: options?.includeBody ?? false,
89
+ maxContentTokens: options?.maxContentTokens ?? DEFAULT_TOKENIZATION.maxTokens,
90
+ minTokenLength: options?.minTokenLength ?? DEFAULT_TOKENIZATION.minTokenLength,
91
+ };
92
+ }
93
+ export function deriveDocumentSseTokens(payload, key, options = {}) {
94
+ const tokens = new Set();
95
+ const normalizedOptions = normalizeOptions(options);
96
+ const tokenizationOptions = {
97
+ maxTokens: normalizedOptions.maxContentTokens,
98
+ minTokenLength: normalizedOptions.minTokenLength,
99
+ };
100
+ const add = (raw) => {
101
+ if (!raw) {
102
+ return;
103
+ }
104
+ tokens.add(createSseToken(key, raw));
105
+ };
106
+ add(`tenant:${payload.tenantId}`);
107
+ add(`document:${payload.documentId}`);
108
+ add(`source:${payload.sourceService}`);
109
+ for (const tag of payload.tags ?? []) {
110
+ add(`tag:${tag}`);
111
+ }
112
+ if (normalizedOptions.includeContent) {
113
+ const contentTokens = new Set();
114
+ if (payload.title) {
115
+ tokenizeContent(payload.title, tokenizationOptions, contentTokens);
116
+ }
117
+ if (payload.description) {
118
+ tokenizeContent(payload.description, tokenizationOptions, contentTokens);
119
+ }
120
+ if (normalizedOptions.includeBody && payload.body) {
121
+ tokenizeContent(payload.body, tokenizationOptions, contentTokens);
122
+ }
123
+ let count = 0;
124
+ for (const keyword of contentTokens) {
125
+ add(`kw:${keyword}`);
126
+ count += 1;
127
+ if (count >= tokenizationOptions.maxTokens) {
128
+ break;
129
+ }
130
+ }
131
+ }
132
+ const metadata = payload.metadata ?? {};
133
+ for (const entry of flattenMetadata(metadata)) {
134
+ add(entry);
135
+ }
136
+ return Array.from(tokens);
137
+ }
138
+ export function deriveQuerySseTokens(query, key, options = {}) {
139
+ const normalized = normalizeOptions({
140
+ includeContent: true,
141
+ includeBody: true,
142
+ maxContentTokens: options.maxTokens ?? 64,
143
+ minTokenLength: options.minTokenLength ?? DEFAULT_TOKENIZATION.minTokenLength,
144
+ });
145
+ const keywordSet = tokenizeContent(query, {
146
+ maxTokens: normalized.maxContentTokens,
147
+ minTokenLength: normalized.minTokenLength,
148
+ });
149
+ return Array.from(keywordSet).map((keyword) => createSseToken(key, `kw:${keyword}`));
150
+ }
151
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/llamaindex/sse.ts"],"names":[],"mappings":"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"}