@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.
- package/CHANGELOG.md +67 -0
- package/LICENSE.md +8 -0
- package/README.md +200 -0
- package/dist/_activation/activation-client.d.ts +65 -0
- package/dist/_activation/activation-client.d.ts.map +1 -0
- package/dist/_activation/activation-client.js +164 -0
- package/dist/_activation/activation-client.js.map +1 -0
- package/dist/_activation/index.d.ts +10 -0
- package/dist/_activation/index.d.ts.map +1 -0
- package/dist/_activation/index.js +10 -0
- package/dist/_activation/index.js.map +1 -0
- package/dist/_activation/types.d.ts +128 -0
- package/dist/_activation/types.d.ts.map +1 -0
- package/dist/_activation/types.js +94 -0
- package/dist/_activation/types.js.map +1 -0
- package/dist/_internal.d.ts +52 -0
- package/dist/_internal.d.ts.map +1 -0
- package/dist/_internal.js +235 -0
- package/dist/_internal.js.map +1 -0
- package/dist/access.d.ts +32 -0
- package/dist/access.d.ts.map +1 -0
- package/dist/access.js +33 -0
- package/dist/access.js.map +1 -0
- package/dist/ai.d.ts +51 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +53 -0
- package/dist/ai.js.map +1 -0
- package/dist/audit.d.ts +18 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +21 -0
- package/dist/audit.js.map +1 -0
- package/dist/auth.d.ts +31 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +69 -0
- package/dist/auth.js.map +1 -0
- package/dist/autogen/executor.d.ts +200 -0
- package/dist/autogen/executor.d.ts.map +1 -0
- package/dist/autogen/executor.js +277 -0
- package/dist/autogen/executor.js.map +1 -0
- package/dist/autogen/index.d.ts +18 -0
- package/dist/autogen/index.d.ts.map +1 -0
- package/dist/autogen/index.js +17 -0
- package/dist/autogen/index.js.map +1 -0
- package/dist/billing.d.ts +22 -0
- package/dist/billing.d.ts.map +1 -0
- package/dist/billing.js +33 -0
- package/dist/billing.js.map +1 -0
- package/dist/browser/encrypt.d.ts +68 -0
- package/dist/browser/encrypt.d.ts.map +1 -0
- package/dist/browser/encrypt.js +191 -0
- package/dist/browser/encrypt.js.map +1 -0
- package/dist/browser/index.d.ts +39 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +41 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/noble-provider.d.ts +10 -0
- package/dist/browser/noble-provider.d.ts.map +1 -0
- package/dist/browser/noble-provider.js +130 -0
- package/dist/browser/noble-provider.js.map +1 -0
- package/dist/browser/pqc-types.d.ts +40 -0
- package/dist/browser/pqc-types.d.ts.map +1 -0
- package/dist/browser/pqc-types.js +2 -0
- package/dist/browser/pqc-types.js.map +1 -0
- package/dist/browser/provider-setup.d.ts +70 -0
- package/dist/browser/provider-setup.d.ts.map +1 -0
- package/dist/browser/provider-setup.js +101 -0
- package/dist/browser/provider-setup.js.map +1 -0
- package/dist/browser/sdk-package-version.d.ts +12 -0
- package/dist/browser/sdk-package-version.d.ts.map +1 -0
- package/dist/browser/sdk-package-version.js +12 -0
- package/dist/browser/sdk-package-version.js.map +1 -0
- package/dist/browser/sign.d.ts +65 -0
- package/dist/browser/sign.d.ts.map +1 -0
- package/dist/browser/sign.js +124 -0
- package/dist/browser/sign.js.map +1 -0
- package/dist/browser/telemetry.d.ts +98 -0
- package/dist/browser/telemetry.d.ts.map +1 -0
- package/dist/browser/telemetry.js +93 -0
- package/dist/browser/telemetry.js.map +1 -0
- package/dist/cli/commands/access-control.d.ts +4 -0
- package/dist/cli/commands/access-control.d.ts.map +1 -0
- package/dist/cli/commands/access-control.js +183 -0
- package/dist/cli/commands/access-control.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +4 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +70 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +4 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +46 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/billing.d.ts +4 -0
- package/dist/cli/commands/billing.d.ts.map +1 -0
- package/dist/cli/commands/billing.js +179 -0
- package/dist/cli/commands/billing.js.map +1 -0
- package/dist/cli/commands/crypto-policy.d.ts +4 -0
- package/dist/cli/commands/crypto-policy.d.ts.map +1 -0
- package/dist/cli/commands/crypto-policy.js +130 -0
- package/dist/cli/commands/crypto-policy.js.map +1 -0
- package/dist/cli/commands/kms.d.ts +4 -0
- package/dist/cli/commands/kms.d.ts.map +1 -0
- package/dist/cli/commands/kms.js +153 -0
- package/dist/cli/commands/kms.js.map +1 -0
- package/dist/cli/commands/observability.d.ts +4 -0
- package/dist/cli/commands/observability.d.ts.map +1 -0
- package/dist/cli/commands/observability.js +97 -0
- package/dist/cli/commands/observability.js.map +1 -0
- package/dist/cli/commands/search.d.ts +4 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +66 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/security.d.ts +4 -0
- package/dist/cli/commands/security.d.ts.map +1 -0
- package/dist/cli/commands/security.js +136 -0
- package/dist/cli/commands/security.js.map +1 -0
- package/dist/cli/commands/storage.d.ts +4 -0
- package/dist/cli/commands/storage.d.ts.map +1 -0
- package/dist/cli/commands/storage.js +85 -0
- package/dist/cli/commands/storage.js.map +1 -0
- package/dist/cli/commands/tenant.d.ts +4 -0
- package/dist/cli/commands/tenant.d.ts.map +1 -0
- package/dist/cli/commands/tenant.js +82 -0
- package/dist/cli/commands/tenant.js.map +1 -0
- package/dist/cli/commands/test-utils.d.ts +15 -0
- package/dist/cli/commands/test-utils.d.ts.map +1 -0
- package/dist/cli/commands/test-utils.js +72 -0
- package/dist/cli/commands/test-utils.js.map +1 -0
- package/dist/cli/commands/vault.d.ts +4 -0
- package/dist/cli/commands/vault.d.ts.map +1 -0
- package/dist/cli/commands/vault.js +111 -0
- package/dist/cli/commands/vault.js.map +1 -0
- package/dist/cli/config.d.ts +32 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +105 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +54 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/audit-logger.d.ts +17 -0
- package/dist/cli/utils/audit-logger.d.ts.map +1 -0
- package/dist/cli/utils/audit-logger.js +52 -0
- package/dist/cli/utils/audit-logger.js.map +1 -0
- package/dist/cli/utils/auth.d.ts +4 -0
- package/dist/cli/utils/auth.d.ts.map +1 -0
- package/dist/cli/utils/auth.js +100 -0
- package/dist/cli/utils/auth.js.map +1 -0
- package/dist/cli/utils/backend-validator.d.ts +19 -0
- package/dist/cli/utils/backend-validator.d.ts.map +1 -0
- package/dist/cli/utils/backend-validator.js +72 -0
- package/dist/cli/utils/backend-validator.js.map +1 -0
- package/dist/cli/utils/command-config.d.ts +4 -0
- package/dist/cli/utils/command-config.d.ts.map +1 -0
- package/dist/cli/utils/command-config.js +29 -0
- package/dist/cli/utils/command-config.js.map +1 -0
- package/dist/cli/utils/fetcher.d.ts +3 -0
- package/dist/cli/utils/fetcher.d.ts.map +1 -0
- package/dist/cli/utils/fetcher.js +30 -0
- package/dist/cli/utils/fetcher.js.map +1 -0
- package/dist/cli/utils/https-validator.d.ts +9 -0
- package/dist/cli/utils/https-validator.d.ts.map +1 -0
- package/dist/cli/utils/https-validator.js +35 -0
- package/dist/cli/utils/https-validator.js.map +1 -0
- package/dist/cli/utils/output.d.ts +6 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +29 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/cli/utils/pqc-validator.d.ts +17 -0
- package/dist/cli/utils/pqc-validator.d.ts.map +1 -0
- package/dist/cli/utils/pqc-validator.js +62 -0
- package/dist/cli/utils/pqc-validator.js.map +1 -0
- package/dist/cli/utils/prompt.d.ts +4 -0
- package/dist/cli/utils/prompt.d.ts.map +1 -0
- package/dist/cli/utils/prompt.js +30 -0
- package/dist/cli/utils/prompt.js.map +1 -0
- package/dist/cli/utils/rate-limiter.d.ts +15 -0
- package/dist/cli/utils/rate-limiter.d.ts.map +1 -0
- package/dist/cli/utils/rate-limiter.js +46 -0
- package/dist/cli/utils/rate-limiter.js.map +1 -0
- package/dist/cli/utils/sanitize.d.ts +3 -0
- package/dist/cli/utils/sanitize.d.ts.map +1 -0
- package/dist/cli/utils/sanitize.js +44 -0
- package/dist/cli/utils/sanitize.js.map +1 -0
- package/dist/cli/utils/security-headers.d.ts +18 -0
- package/dist/cli/utils/security-headers.d.ts.map +1 -0
- package/dist/cli/utils/security-headers.js +32 -0
- package/dist/cli/utils/security-headers.js.map +1 -0
- package/dist/cli/utils/token-cache.d.ts +4 -0
- package/dist/cli/utils/token-cache.d.ts.map +1 -0
- package/dist/cli/utils/token-cache.js +22 -0
- package/dist/cli/utils/token-cache.js.map +1 -0
- package/dist/client.d.ts +52 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +78 -0
- package/dist/client.js.map +1 -0
- package/dist/crypto-inventory.d.ts +21 -0
- package/dist/crypto-inventory.d.ts.map +1 -0
- package/dist/crypto-inventory.js +28 -0
- package/dist/crypto-inventory.js.map +1 -0
- package/dist/errors.d.ts +35 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +64 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/kms.d.ts +30 -0
- package/dist/kms.d.ts.map +1 -0
- package/dist/kms.js +92 -0
- package/dist/kms.js.map +1 -0
- package/dist/langchain/index.d.ts +22 -0
- package/dist/langchain/index.d.ts.map +1 -0
- package/dist/langchain/index.js +23 -0
- package/dist/langchain/index.js.map +1 -0
- package/dist/langchain/toolkit.d.ts +85 -0
- package/dist/langchain/toolkit.d.ts.map +1 -0
- package/dist/langchain/toolkit.js +146 -0
- package/dist/langchain/toolkit.js.map +1 -0
- package/dist/langchain/tools/audit.d.ts +43 -0
- package/dist/langchain/tools/audit.d.ts.map +1 -0
- package/dist/langchain/tools/audit.js +78 -0
- package/dist/langchain/tools/audit.js.map +1 -0
- package/dist/langchain/tools/kms.d.ts +62 -0
- package/dist/langchain/tools/kms.d.ts.map +1 -0
- package/dist/langchain/tools/kms.js +120 -0
- package/dist/langchain/tools/kms.js.map +1 -0
- package/dist/langchain/tools/vault.d.ts +69 -0
- package/dist/langchain/tools/vault.d.ts.map +1 -0
- package/dist/langchain/tools/vault.js +107 -0
- package/dist/langchain/tools/vault.js.map +1 -0
- package/dist/langchain/vault-client.d.ts +82 -0
- package/dist/langchain/vault-client.d.ts.map +1 -0
- package/dist/langchain/vault-client.js +133 -0
- package/dist/langchain/vault-client.js.map +1 -0
- package/dist/llamaindex/index.d.ts +16 -0
- package/dist/llamaindex/index.d.ts.map +1 -0
- package/dist/llamaindex/index.js +15 -0
- package/dist/llamaindex/index.js.map +1 -0
- package/dist/llamaindex/sse.d.ts +36 -0
- package/dist/llamaindex/sse.d.ts.map +1 -0
- package/dist/llamaindex/sse.js +151 -0
- package/dist/llamaindex/sse.js.map +1 -0
- package/dist/llamaindex/vector-store.d.ts +101 -0
- package/dist/llamaindex/vector-store.d.ts.map +1 -0
- package/dist/llamaindex/vector-store.js +348 -0
- package/dist/llamaindex/vector-store.js.map +1 -0
- package/dist/search.d.ts +32 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +27 -0
- package/dist/search.js.map +1 -0
- package/dist/storage.d.ts +32 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +58 -0
- package/dist/storage.js.map +1 -0
- package/dist/tenant.d.ts +25 -0
- package/dist/tenant.d.ts.map +1 -0
- package/dist/tenant.js +36 -0
- package/dist/tenant.js.map +1 -0
- package/dist/vault.d.ts +22 -0
- package/dist/vault.d.ts.map +1 -0
- package/dist/vault.js +43 -0
- package/dist/vault.js.map +1 -0
- package/dist/webhooks.d.ts +32 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +77 -0
- package/dist/webhooks.js.map +1 -0
- package/package.json +118 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/langchain/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,oCAAoC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,yBAAyB;AACzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,uBAAuB;AACvB,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,yBAAyB;AACzB,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QNSP Toolkit for LangChain
|
|
3
|
+
*
|
|
4
|
+
* A pre-configured set of QNSP tools for governed AI agents.
|
|
5
|
+
* Provides PQC-encrypted secrets, quantum-safe signing, and immutable audit trails
|
|
6
|
+
* as a single composable toolkit.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { QnspToolkit } from "@heossi/qnsi-langchain-qnsp";
|
|
11
|
+
* import { ChatOpenAI } from "@langchain/openai";
|
|
12
|
+
* import { AgentExecutor, createToolCallingAgent } from "langchain/agents";
|
|
13
|
+
*
|
|
14
|
+
* const toolkit = new QnspToolkit({
|
|
15
|
+
* apiKey: process.env.QNSP_API_KEY,
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* const agent = createToolCallingAgent({
|
|
19
|
+
* llm: new ChatOpenAI({ model: "gpt-4o" }),
|
|
20
|
+
* tools: toolkit.getTools(),
|
|
21
|
+
* prompt,
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
import type { StructuredTool } from "@langchain/core/tools";
|
|
26
|
+
export interface QnspToolkitConfig {
|
|
27
|
+
/**
|
|
28
|
+
* QNSP API key. Get one at https://cloud.qnsp.cuilabs.io/api-keys
|
|
29
|
+
* The API key carries the tenant ID — no separate tenantId needed.
|
|
30
|
+
*/
|
|
31
|
+
readonly apiKey: string;
|
|
32
|
+
/**
|
|
33
|
+
* Tenant ID. Required for KMS and audit operations.
|
|
34
|
+
* If omitted, defaults to empty string (tenant resolved from API key by edge gateway).
|
|
35
|
+
*/
|
|
36
|
+
readonly tenantId?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Base URL for the QNSP API.
|
|
39
|
+
* Defaults to https://api.qnsp.cuilabs.io
|
|
40
|
+
*/
|
|
41
|
+
readonly baseUrl?: string;
|
|
42
|
+
/**
|
|
43
|
+
* Request timeout in milliseconds.
|
|
44
|
+
* Defaults to 15000 (15 seconds).
|
|
45
|
+
*/
|
|
46
|
+
readonly timeoutMs?: number;
|
|
47
|
+
/**
|
|
48
|
+
* Which tool categories to include.
|
|
49
|
+
* Defaults to all categories.
|
|
50
|
+
*/
|
|
51
|
+
readonly include?: ReadonlyArray<"vault" | "kms" | "audit">;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* QNSP Toolkit — a composable set of LangChain tools for governed AI agents.
|
|
55
|
+
*
|
|
56
|
+
* Provides:
|
|
57
|
+
* - Vault tools: read, write, and rotate PQC-encrypted secrets
|
|
58
|
+
* - KMS tools: sign and verify data with quantum-safe algorithms
|
|
59
|
+
* - Audit tools: write immutable, PQC-signed audit events
|
|
60
|
+
*/
|
|
61
|
+
export declare class QnspToolkit {
|
|
62
|
+
#private;
|
|
63
|
+
constructor(config: QnspToolkitConfig);
|
|
64
|
+
/**
|
|
65
|
+
* One-shot activation handshake against billing-service. Validates the API
|
|
66
|
+
* key, captures tenantId + tier, caches the activation token. Required:
|
|
67
|
+
* call `await toolkit.activate()` before `toolkit.getTools()` — `getTools()`
|
|
68
|
+
* throws otherwise.
|
|
69
|
+
*
|
|
70
|
+
* Idempotent — repeat calls are cheap (cached) and only re-fetch when the
|
|
71
|
+
* activation token approaches expiry.
|
|
72
|
+
*/
|
|
73
|
+
activate(): Promise<void>;
|
|
74
|
+
/** Returns all configured QNSP tools for use with a LangChain agent. */
|
|
75
|
+
getTools(): StructuredTool[];
|
|
76
|
+
/** Returns only the vault tools (read, write, rotate secrets). */
|
|
77
|
+
getVaultTools(): StructuredTool[];
|
|
78
|
+
/** Returns only the KMS tools (sign, verify). */
|
|
79
|
+
getKmsTools(): StructuredTool[];
|
|
80
|
+
/** Returns only the audit tool (log agent actions). */
|
|
81
|
+
getAuditTools(): StructuredTool[];
|
|
82
|
+
/** True once `activate()` has resolved successfully. */
|
|
83
|
+
get isActivated(): boolean;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=toolkit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolkit.d.ts","sourceRoot":"","sources":["../../src/langchain/toolkit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAW5D,MAAM,WAAW,iBAAiB;IACjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC;CAC5D;AAED;;;;;;;GAOG;AACH,qBAAa,WAAW;;gBASX,MAAM,EAAE,iBAAiB;IAcrC;;;;;;;;OAQG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B/B,wEAAwE;IACxE,QAAQ,IAAI,cAAc,EAAE;IAiB5B,kEAAkE;IAClE,aAAa,IAAI,cAAc,EAAE;IASjC,iDAAiD;IACjD,WAAW,IAAI,cAAc,EAAE;IAW/B,uDAAuD;IACvD,aAAa,IAAI,cAAc,EAAE;IAWjC,wDAAwD;IACxD,IAAI,WAAW,IAAI,OAAO,CAEzB;CACD"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QNSP Toolkit for LangChain
|
|
3
|
+
*
|
|
4
|
+
* A pre-configured set of QNSP tools for governed AI agents.
|
|
5
|
+
* Provides PQC-encrypted secrets, quantum-safe signing, and immutable audit trails
|
|
6
|
+
* as a single composable toolkit.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { QnspToolkit } from "@heossi/qnsi-langchain-qnsp";
|
|
11
|
+
* import { ChatOpenAI } from "@langchain/openai";
|
|
12
|
+
* import { AgentExecutor, createToolCallingAgent } from "langchain/agents";
|
|
13
|
+
*
|
|
14
|
+
* const toolkit = new QnspToolkit({
|
|
15
|
+
* apiKey: process.env.QNSP_API_KEY,
|
|
16
|
+
* });
|
|
17
|
+
*
|
|
18
|
+
* const agent = createToolCallingAgent({
|
|
19
|
+
* llm: new ChatOpenAI({ model: "gpt-4o" }),
|
|
20
|
+
* tools: toolkit.getTools(),
|
|
21
|
+
* prompt,
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
import { activateSdk } from "../_activation/index.js";
|
|
26
|
+
import { QnspLogAgentActionTool } from "./tools/audit.js";
|
|
27
|
+
import { QnspSignDataTool, QnspVerifySignatureTool } from "./tools/kms.js";
|
|
28
|
+
import { QnspReadSecretTool, QnspRotateSecretTool, QnspWriteSecretTool } from "./tools/vault.js";
|
|
29
|
+
import { VaultClient } from "./vault-client.js";
|
|
30
|
+
const SDK_VERSION = "0.3.0";
|
|
31
|
+
/**
|
|
32
|
+
* QNSP Toolkit — a composable set of LangChain tools for governed AI agents.
|
|
33
|
+
*
|
|
34
|
+
* Provides:
|
|
35
|
+
* - Vault tools: read, write, and rotate PQC-encrypted secrets
|
|
36
|
+
* - KMS tools: sign and verify data with quantum-safe algorithms
|
|
37
|
+
* - Audit tools: write immutable, PQC-signed audit events
|
|
38
|
+
*/
|
|
39
|
+
export class QnspToolkit {
|
|
40
|
+
#apiKey;
|
|
41
|
+
#tenantId;
|
|
42
|
+
#baseUrl;
|
|
43
|
+
#timeoutMs;
|
|
44
|
+
#include;
|
|
45
|
+
#vaultClient;
|
|
46
|
+
#activated = false;
|
|
47
|
+
constructor(config) {
|
|
48
|
+
this.#apiKey = config.apiKey;
|
|
49
|
+
this.#tenantId = config.tenantId ?? "";
|
|
50
|
+
this.#baseUrl = config.baseUrl ?? "https://api.qnsp.cuilabs.io";
|
|
51
|
+
this.#timeoutMs = config.timeoutMs ?? 15_000;
|
|
52
|
+
this.#include = config.include ?? ["vault", "kms", "audit"];
|
|
53
|
+
this.#vaultClient = new VaultClient({
|
|
54
|
+
baseUrl: this.#baseUrl,
|
|
55
|
+
apiKey: this.#apiKey,
|
|
56
|
+
timeoutMs: this.#timeoutMs,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* One-shot activation handshake against billing-service. Validates the API
|
|
61
|
+
* key, captures tenantId + tier, caches the activation token. Required:
|
|
62
|
+
* call `await toolkit.activate()` before `toolkit.getTools()` — `getTools()`
|
|
63
|
+
* throws otherwise.
|
|
64
|
+
*
|
|
65
|
+
* Idempotent — repeat calls are cheap (cached) and only re-fetch when the
|
|
66
|
+
* activation token approaches expiry.
|
|
67
|
+
*/
|
|
68
|
+
async activate() {
|
|
69
|
+
const activation = await activateSdk({
|
|
70
|
+
apiKey: this.#apiKey,
|
|
71
|
+
sdkId: "langchain-qnsp",
|
|
72
|
+
sdkVersion: SDK_VERSION,
|
|
73
|
+
platformUrl: this.#baseUrl,
|
|
74
|
+
});
|
|
75
|
+
// If the caller did not specify tenantId, inherit it from activation
|
|
76
|
+
// so KMS and audit tools have a tenant-scoped header without an extra
|
|
77
|
+
// constructor argument.
|
|
78
|
+
if (this.#tenantId === "") {
|
|
79
|
+
this.#tenantId = activation.tenantId;
|
|
80
|
+
}
|
|
81
|
+
// Inject the resolved tenant into the inlined vault client so its
|
|
82
|
+
// requests carry the x-qnsp-tenant-id header (the former
|
|
83
|
+
// @heossi/qnsi-vault-sdk did this via its own internal activation;
|
|
84
|
+
// here the single langchain-qnsp activation covers it).
|
|
85
|
+
this.#vaultClient.setTenantId(this.#tenantId);
|
|
86
|
+
this.#activated = true;
|
|
87
|
+
}
|
|
88
|
+
#assertActivated() {
|
|
89
|
+
if (!this.#activated) {
|
|
90
|
+
throw new Error("@heossi/qnsi-langchain-qnsp: call `await toolkit.activate()` once before `getTools()`. " +
|
|
91
|
+
"This validates your QNSP API key and resolves the tenant ID. " +
|
|
92
|
+
"Free signup (no credit card): https://cloud.qnsp.cuilabs.io/auth");
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** Returns all configured QNSP tools for use with a LangChain agent. */
|
|
96
|
+
getTools() {
|
|
97
|
+
this.#assertActivated();
|
|
98
|
+
const tools = [];
|
|
99
|
+
if (this.#include.includes("vault")) {
|
|
100
|
+
tools.push(...this.getVaultTools());
|
|
101
|
+
}
|
|
102
|
+
if (this.#include.includes("kms")) {
|
|
103
|
+
tools.push(...this.getKmsTools());
|
|
104
|
+
}
|
|
105
|
+
if (this.#include.includes("audit")) {
|
|
106
|
+
tools.push(...this.getAuditTools());
|
|
107
|
+
}
|
|
108
|
+
return tools;
|
|
109
|
+
}
|
|
110
|
+
/** Returns only the vault tools (read, write, rotate secrets). */
|
|
111
|
+
getVaultTools() {
|
|
112
|
+
this.#assertActivated();
|
|
113
|
+
return [
|
|
114
|
+
new QnspReadSecretTool(this.#vaultClient),
|
|
115
|
+
new QnspWriteSecretTool(this.#vaultClient),
|
|
116
|
+
new QnspRotateSecretTool(this.#vaultClient),
|
|
117
|
+
];
|
|
118
|
+
}
|
|
119
|
+
/** Returns only the KMS tools (sign, verify). */
|
|
120
|
+
getKmsTools() {
|
|
121
|
+
this.#assertActivated();
|
|
122
|
+
const kmsConfig = {
|
|
123
|
+
baseUrl: this.#baseUrl,
|
|
124
|
+
apiKey: this.#apiKey,
|
|
125
|
+
tenantId: this.#tenantId,
|
|
126
|
+
timeoutMs: this.#timeoutMs,
|
|
127
|
+
};
|
|
128
|
+
return [new QnspSignDataTool(kmsConfig), new QnspVerifySignatureTool(kmsConfig)];
|
|
129
|
+
}
|
|
130
|
+
/** Returns only the audit tool (log agent actions). */
|
|
131
|
+
getAuditTools() {
|
|
132
|
+
this.#assertActivated();
|
|
133
|
+
const auditConfig = {
|
|
134
|
+
baseUrl: this.#baseUrl,
|
|
135
|
+
apiKey: this.#apiKey,
|
|
136
|
+
tenantId: this.#tenantId,
|
|
137
|
+
timeoutMs: this.#timeoutMs,
|
|
138
|
+
};
|
|
139
|
+
return [new QnspLogAgentActionTool(auditConfig)];
|
|
140
|
+
}
|
|
141
|
+
/** True once `activate()` has resolved successfully. */
|
|
142
|
+
get isActivated() {
|
|
143
|
+
return this.#activated;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=toolkit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolkit.js","sourceRoot":"","sources":["../../src/langchain/toolkit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QNSP Audit Tool for LangChain
|
|
3
|
+
*
|
|
4
|
+
* Provides governed agents with immutable, PQC-signed audit trail logging.
|
|
5
|
+
* Every agent action logged here is tamper-evident and cryptographically chained.
|
|
6
|
+
*/
|
|
7
|
+
import { StructuredTool, type ToolParams } from "@langchain/core/tools";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
export interface QnspAuditToolConfig {
|
|
10
|
+
/** Base URL for the QNSP API (e.g. https://api.qnsp.cuilabs.io) */
|
|
11
|
+
readonly baseUrl: string;
|
|
12
|
+
/** API key or Bearer token for authentication */
|
|
13
|
+
readonly apiKey: string;
|
|
14
|
+
/** Tenant ID for all audit events */
|
|
15
|
+
readonly tenantId: string;
|
|
16
|
+
/** Request timeout in milliseconds (default: 15000) */
|
|
17
|
+
readonly timeoutMs?: number;
|
|
18
|
+
}
|
|
19
|
+
declare const logAgentActionSchema: z.ZodObject<{
|
|
20
|
+
topic: z.ZodString;
|
|
21
|
+
sourceService: z.ZodString;
|
|
22
|
+
payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
23
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
24
|
+
}, z.core.$strip>;
|
|
25
|
+
/**
|
|
26
|
+
* LangChain tool that writes an immutable, PQC-signed audit event to QNSP.
|
|
27
|
+
* Use this to create a tamper-evident record of every significant agent action.
|
|
28
|
+
*/
|
|
29
|
+
export declare class QnspLogAgentActionTool extends StructuredTool {
|
|
30
|
+
#private;
|
|
31
|
+
readonly name = "qnsp_log_agent_action";
|
|
32
|
+
readonly description = "Write an immutable, PQC-signed audit event to QNSP. Creates a tamper-evident record of agent actions, decisions, tool calls, and outputs. Use this for compliance, governance, and traceability of agent behavior.";
|
|
33
|
+
readonly schema: z.ZodObject<{
|
|
34
|
+
topic: z.ZodString;
|
|
35
|
+
sourceService: z.ZodString;
|
|
36
|
+
payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
37
|
+
metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
38
|
+
}, z.core.$strip>;
|
|
39
|
+
constructor(config: QnspAuditToolConfig, fields?: ToolParams);
|
|
40
|
+
protected _call(input: z.infer<typeof logAgentActionSchema>): Promise<string>;
|
|
41
|
+
}
|
|
42
|
+
export {};
|
|
43
|
+
//# sourceMappingURL=audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../../src/langchain/tools/audit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,mBAAmB;IACnC,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,qCAAqC;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAID,QAAA,MAAM,oBAAoB;;;;;iBAsBxB,CAAC;AAEH;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,cAAc;;IACzD,SAAkB,IAAI,2BAA2B;IACjD,SAAkB,WAAW,wNACyL;IACtN,SAAkB,MAAM;;;;;sBAAwB;gBAIpC,MAAM,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,UAAU;cAK5C,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAwCnF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QNSP Audit Tool for LangChain
|
|
3
|
+
*
|
|
4
|
+
* Provides governed agents with immutable, PQC-signed audit trail logging.
|
|
5
|
+
* Every agent action logged here is tamper-evident and cryptographically chained.
|
|
6
|
+
*/
|
|
7
|
+
import { StructuredTool } from "@langchain/core/tools";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
// ─── Log Agent Action ─────────────────────────────────────────────────────────
|
|
10
|
+
const logAgentActionSchema = z.object({
|
|
11
|
+
topic: z
|
|
12
|
+
.string()
|
|
13
|
+
.min(1)
|
|
14
|
+
.max(255)
|
|
15
|
+
.describe("The audit topic / event type (e.g. 'agent.decision', 'agent.tool_call', 'agent.output')"),
|
|
16
|
+
sourceService: z
|
|
17
|
+
.string()
|
|
18
|
+
.min(1)
|
|
19
|
+
.max(255)
|
|
20
|
+
.describe("The name of the agent or service emitting this event (e.g. 'research-agent')"),
|
|
21
|
+
payload: z
|
|
22
|
+
.record(z.string(), z.unknown())
|
|
23
|
+
.describe("Structured data describing the action — what the agent did, inputs, outputs, reasoning"),
|
|
24
|
+
metadata: z
|
|
25
|
+
.record(z.string(), z.unknown())
|
|
26
|
+
.optional()
|
|
27
|
+
.describe("Optional metadata: run ID, model name, token counts, latency, etc."),
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* LangChain tool that writes an immutable, PQC-signed audit event to QNSP.
|
|
31
|
+
* Use this to create a tamper-evident record of every significant agent action.
|
|
32
|
+
*/
|
|
33
|
+
export class QnspLogAgentActionTool extends StructuredTool {
|
|
34
|
+
name = "qnsp_log_agent_action";
|
|
35
|
+
description = "Write an immutable, PQC-signed audit event to QNSP. Creates a tamper-evident record of agent actions, decisions, tool calls, and outputs. Use this for compliance, governance, and traceability of agent behavior.";
|
|
36
|
+
schema = logAgentActionSchema;
|
|
37
|
+
#config;
|
|
38
|
+
constructor(config, fields) {
|
|
39
|
+
super(fields);
|
|
40
|
+
this.#config = { timeoutMs: 15_000, ...config };
|
|
41
|
+
}
|
|
42
|
+
async _call(input) {
|
|
43
|
+
const url = `${this.#config.baseUrl}/proxy/audit/v1/events`;
|
|
44
|
+
const event = {
|
|
45
|
+
tenantId: this.#config.tenantId,
|
|
46
|
+
sourceService: input.sourceService,
|
|
47
|
+
topic: input.topic,
|
|
48
|
+
version: "1.0",
|
|
49
|
+
payload: input.payload,
|
|
50
|
+
};
|
|
51
|
+
if (input.metadata !== undefined) {
|
|
52
|
+
event["metadata"] = input.metadata;
|
|
53
|
+
}
|
|
54
|
+
const response = await fetch(url, {
|
|
55
|
+
method: "POST",
|
|
56
|
+
headers: {
|
|
57
|
+
"Content-Type": "application/json",
|
|
58
|
+
Authorization: `Bearer ${this.#config.apiKey}`,
|
|
59
|
+
"x-qnsp-tenant-id": this.#config.tenantId,
|
|
60
|
+
},
|
|
61
|
+
body: JSON.stringify({ events: [event] }),
|
|
62
|
+
signal: AbortSignal.timeout(this.#config.timeoutMs),
|
|
63
|
+
});
|
|
64
|
+
if (!response.ok) {
|
|
65
|
+
const err = (await response.json().catch(() => ({})));
|
|
66
|
+
throw new Error(`Audit ingest failed (${response.status}): ${String(err["message"] ?? "unknown error")}`);
|
|
67
|
+
}
|
|
68
|
+
const result = (await response.json());
|
|
69
|
+
return JSON.stringify({
|
|
70
|
+
accepted: result["accepted"],
|
|
71
|
+
received: result["received"],
|
|
72
|
+
topic: input.topic,
|
|
73
|
+
sourceService: input.sourceService,
|
|
74
|
+
loggedAt: new Date().toISOString(),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/langchain/tools/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QNSP KMS Tools for LangChain
|
|
3
|
+
*
|
|
4
|
+
* Provides governed agents with quantum-safe signing and key operations.
|
|
5
|
+
* Uses ML-DSA (FIPS 204), SLH-DSA (FIPS 205), and FN-DSA for signatures.
|
|
6
|
+
*/
|
|
7
|
+
import { StructuredTool, type ToolParams } from "@langchain/core/tools";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
export interface QnspKmsToolConfig {
|
|
10
|
+
/** Base URL for the QNSP API (e.g. https://api.qnsp.cuilabs.io) */
|
|
11
|
+
readonly baseUrl: string;
|
|
12
|
+
/** API key or Bearer token for authentication */
|
|
13
|
+
readonly apiKey: string;
|
|
14
|
+
/** Tenant ID for all KMS operations */
|
|
15
|
+
readonly tenantId: string;
|
|
16
|
+
/** Request timeout in milliseconds (default: 15000) */
|
|
17
|
+
readonly timeoutMs?: number;
|
|
18
|
+
}
|
|
19
|
+
declare const signDataSchema: z.ZodObject<{
|
|
20
|
+
keyId: z.ZodString;
|
|
21
|
+
data: z.ZodString;
|
|
22
|
+
context: z.ZodOptional<z.ZodString>;
|
|
23
|
+
}, z.core.$strip>;
|
|
24
|
+
/**
|
|
25
|
+
* LangChain tool that signs data with a PQC key (ML-DSA / SLH-DSA / FN-DSA).
|
|
26
|
+
*/
|
|
27
|
+
export declare class QnspSignDataTool extends StructuredTool {
|
|
28
|
+
#private;
|
|
29
|
+
readonly name = "qnsp_sign_data";
|
|
30
|
+
readonly description = "Sign data with a quantum-safe PQC key (ML-DSA, SLH-DSA, or FN-DSA). Returns a base64-encoded signature. Use this when an agent needs to cryptographically attest to data it produced or decisions it made.";
|
|
31
|
+
readonly schema: z.ZodObject<{
|
|
32
|
+
keyId: z.ZodString;
|
|
33
|
+
data: z.ZodString;
|
|
34
|
+
context: z.ZodOptional<z.ZodString>;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
constructor(config: QnspKmsToolConfig, fields?: ToolParams);
|
|
37
|
+
protected _call(input: z.infer<typeof signDataSchema>): Promise<string>;
|
|
38
|
+
}
|
|
39
|
+
declare const verifySignatureSchema: z.ZodObject<{
|
|
40
|
+
keyId: z.ZodString;
|
|
41
|
+
data: z.ZodString;
|
|
42
|
+
signature: z.ZodString;
|
|
43
|
+
context: z.ZodOptional<z.ZodString>;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
/**
|
|
46
|
+
* LangChain tool that verifies a PQC signature against data and a key.
|
|
47
|
+
*/
|
|
48
|
+
export declare class QnspVerifySignatureTool extends StructuredTool {
|
|
49
|
+
#private;
|
|
50
|
+
readonly name = "qnsp_verify_signature";
|
|
51
|
+
readonly description = "Verify a quantum-safe PQC signature. Returns true/false and the algorithm used. Use this when an agent needs to verify the authenticity of data or attestations from other agents or services.";
|
|
52
|
+
readonly schema: z.ZodObject<{
|
|
53
|
+
keyId: z.ZodString;
|
|
54
|
+
data: z.ZodString;
|
|
55
|
+
signature: z.ZodString;
|
|
56
|
+
context: z.ZodOptional<z.ZodString>;
|
|
57
|
+
}, z.core.$strip>;
|
|
58
|
+
constructor(config: QnspKmsToolConfig, fields?: ToolParams);
|
|
59
|
+
protected _call(input: z.infer<typeof verifySignatureSchema>): Promise<string>;
|
|
60
|
+
}
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=kms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kms.d.ts","sourceRoot":"","sources":["../../../src/langchain/tools/kms.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,WAAW,iBAAiB;IACjC,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC5B;AAID,QAAA,MAAM,cAAc;;;;iBAUlB,CAAC;AAEH;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,cAAc;;IACnD,SAAkB,IAAI,oBAAoB;IAC1C,SAAkB,WAAW,gNACiL;IAC9M,SAAkB,MAAM;;;;sBAAkB;gBAI9B,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,UAAU;cAK1C,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAoC7E;AAID,QAAA,MAAM,qBAAqB;;;;;iBAQzB,CAAC;AAEH;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,cAAc;;IAC1D,SAAkB,IAAI,2BAA2B;IACjD,SAAkB,WAAW,oMACqK;IAClM,SAAkB,MAAM;;;;;sBAAyB;gBAIrC,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,UAAU;cAK1C,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAqCpF"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QNSP KMS Tools for LangChain
|
|
3
|
+
*
|
|
4
|
+
* Provides governed agents with quantum-safe signing and key operations.
|
|
5
|
+
* Uses ML-DSA (FIPS 204), SLH-DSA (FIPS 205), and FN-DSA for signatures.
|
|
6
|
+
*/
|
|
7
|
+
import { StructuredTool } from "@langchain/core/tools";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
// ─── Sign Data ────────────────────────────────────────────────────────────────
|
|
10
|
+
const signDataSchema = z.object({
|
|
11
|
+
keyId: z.string().min(1).describe("The UUID of the PQC signing key to use"),
|
|
12
|
+
data: z
|
|
13
|
+
.string()
|
|
14
|
+
.min(1)
|
|
15
|
+
.describe("The data to sign, base64-encoded (e.g. btoa(JSON.stringify(payload)))"),
|
|
16
|
+
context: z
|
|
17
|
+
.string()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("Optional context string for domain separation (base64-encoded)"),
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* LangChain tool that signs data with a PQC key (ML-DSA / SLH-DSA / FN-DSA).
|
|
23
|
+
*/
|
|
24
|
+
export class QnspSignDataTool extends StructuredTool {
|
|
25
|
+
name = "qnsp_sign_data";
|
|
26
|
+
description = "Sign data with a quantum-safe PQC key (ML-DSA, SLH-DSA, or FN-DSA). Returns a base64-encoded signature. Use this when an agent needs to cryptographically attest to data it produced or decisions it made.";
|
|
27
|
+
schema = signDataSchema;
|
|
28
|
+
#config;
|
|
29
|
+
constructor(config, fields) {
|
|
30
|
+
super(fields);
|
|
31
|
+
this.#config = { timeoutMs: 15_000, ...config };
|
|
32
|
+
}
|
|
33
|
+
async _call(input) {
|
|
34
|
+
const url = `${this.#config.baseUrl}/proxy/kms/v1/keys/${encodeURIComponent(input.keyId)}/sign`;
|
|
35
|
+
const body = {
|
|
36
|
+
tenantId: this.#config.tenantId,
|
|
37
|
+
data: input.data,
|
|
38
|
+
};
|
|
39
|
+
if (input.context !== undefined) {
|
|
40
|
+
body["context"] = input.context;
|
|
41
|
+
}
|
|
42
|
+
const response = await fetch(url, {
|
|
43
|
+
method: "POST",
|
|
44
|
+
headers: {
|
|
45
|
+
"Content-Type": "application/json",
|
|
46
|
+
Authorization: `Bearer ${this.#config.apiKey}`,
|
|
47
|
+
"x-qnsp-tenant-id": this.#config.tenantId,
|
|
48
|
+
},
|
|
49
|
+
body: JSON.stringify(body),
|
|
50
|
+
signal: AbortSignal.timeout(this.#config.timeoutMs),
|
|
51
|
+
});
|
|
52
|
+
if (!response.ok) {
|
|
53
|
+
const err = (await response.json().catch(() => ({})));
|
|
54
|
+
throw new Error(`KMS sign failed (${response.status}): ${String(err["message"] ?? "unknown error")}`);
|
|
55
|
+
}
|
|
56
|
+
const result = (await response.json());
|
|
57
|
+
return JSON.stringify({
|
|
58
|
+
keyId: input.keyId,
|
|
59
|
+
signature: result["signature"],
|
|
60
|
+
algorithm: result["algorithm"],
|
|
61
|
+
signedAt: new Date().toISOString(),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// ─── Verify Signature ─────────────────────────────────────────────────────────
|
|
66
|
+
const verifySignatureSchema = z.object({
|
|
67
|
+
keyId: z.string().min(1).describe("The UUID of the PQC key used to create the signature"),
|
|
68
|
+
data: z.string().min(1).describe("The original data that was signed, base64-encoded"),
|
|
69
|
+
signature: z.string().min(1).describe("The signature to verify, base64-encoded"),
|
|
70
|
+
context: z
|
|
71
|
+
.string()
|
|
72
|
+
.optional()
|
|
73
|
+
.describe("Optional context string used during signing (base64-encoded)"),
|
|
74
|
+
});
|
|
75
|
+
/**
|
|
76
|
+
* LangChain tool that verifies a PQC signature against data and a key.
|
|
77
|
+
*/
|
|
78
|
+
export class QnspVerifySignatureTool extends StructuredTool {
|
|
79
|
+
name = "qnsp_verify_signature";
|
|
80
|
+
description = "Verify a quantum-safe PQC signature. Returns true/false and the algorithm used. Use this when an agent needs to verify the authenticity of data or attestations from other agents or services.";
|
|
81
|
+
schema = verifySignatureSchema;
|
|
82
|
+
#config;
|
|
83
|
+
constructor(config, fields) {
|
|
84
|
+
super(fields);
|
|
85
|
+
this.#config = { timeoutMs: 15_000, ...config };
|
|
86
|
+
}
|
|
87
|
+
async _call(input) {
|
|
88
|
+
const url = `${this.#config.baseUrl}/proxy/kms/v1/keys/${encodeURIComponent(input.keyId)}/verify`;
|
|
89
|
+
const body = {
|
|
90
|
+
tenantId: this.#config.tenantId,
|
|
91
|
+
data: input.data,
|
|
92
|
+
signature: input.signature,
|
|
93
|
+
};
|
|
94
|
+
if (input.context !== undefined) {
|
|
95
|
+
body["context"] = input.context;
|
|
96
|
+
}
|
|
97
|
+
const response = await fetch(url, {
|
|
98
|
+
method: "POST",
|
|
99
|
+
headers: {
|
|
100
|
+
"Content-Type": "application/json",
|
|
101
|
+
Authorization: `Bearer ${this.#config.apiKey}`,
|
|
102
|
+
"x-qnsp-tenant-id": this.#config.tenantId,
|
|
103
|
+
},
|
|
104
|
+
body: JSON.stringify(body),
|
|
105
|
+
signal: AbortSignal.timeout(this.#config.timeoutMs),
|
|
106
|
+
});
|
|
107
|
+
if (!response.ok) {
|
|
108
|
+
const err = (await response.json().catch(() => ({})));
|
|
109
|
+
throw new Error(`KMS verify failed (${response.status}): ${String(err["message"] ?? "unknown error")}`);
|
|
110
|
+
}
|
|
111
|
+
const result = (await response.json());
|
|
112
|
+
return JSON.stringify({
|
|
113
|
+
keyId: input.keyId,
|
|
114
|
+
valid: result["valid"],
|
|
115
|
+
algorithm: result["algorithm"],
|
|
116
|
+
verifiedAt: new Date().toISOString(),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=kms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kms.js","sourceRoot":"","sources":["../../../src/langchain/tools/kms.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAmB,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,iFAAiF;AAEjF,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC3E,IAAI,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,uEAAuE,CAAC;IACnF,OAAO,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,gEAAgE,CAAC;CAC5E,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,cAAc;IACjC,IAAI,GAAG,gBAAgB,CAAC;IACxB,WAAW,GAC5B,4MAA4M,CAAC;IAC5L,MAAM,GAAG,cAAc,CAAC;IAEjC,OAAO,CAA8B;IAE9C,YAAY,MAAyB,EAAE,MAAmB;QACzD,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IACjD,CAAC;IAES,KAAK,CAAC,KAAK,CAAC,KAAqC;QAC1D,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,sBAAsB,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;QAChG,MAAM,IAAI,GAA2B;YACpC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,IAAI,EAAE,KAAK,CAAC,IAAI;SAChB,CAAC;QACF,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QACjC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACjC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACR,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBAC9C,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;aACzC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SACnD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAA4B,CAAC;YACjF,MAAM,IAAI,KAAK,CACd,oBAAoB,QAAQ,CAAC,MAAM,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,EAAE,CACpF,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;QAClE,OAAO,IAAI,CAAC,SAAS,CAAC;YACrB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;YAC9B,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;YAC9B,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAClC,CAAC,CAAC;IACJ,CAAC;CACD;AAED,iFAAiF;AAEjF,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IACzF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IACrF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IAChF,OAAO,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8DAA8D,CAAC;CAC1E,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,cAAc;IACxC,IAAI,GAAG,uBAAuB,CAAC;IAC/B,WAAW,GAC5B,gMAAgM,CAAC;IAChL,MAAM,GAAG,qBAAqB,CAAC;IAExC,OAAO,CAA8B;IAE9C,YAAY,MAAyB,EAAE,MAAmB;QACzD,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IACjD,CAAC;IAES,KAAK,CAAC,KAAK,CAAC,KAA4C;QACjE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,sBAAsB,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;QAClG,MAAM,IAAI,GAA2B;YACpC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC1B,CAAC;QACF,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;QACjC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YACjC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACR,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBAC9C,kBAAkB,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;aACzC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;SACnD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAA4B,CAAC;YACjF,MAAM,IAAI,KAAK,CACd,sBAAsB,QAAQ,CAAC,MAAM,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,EAAE,CACtF,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;QAClE,OAAO,IAAI,CAAC,SAAS,CAAC;YACrB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;YACtB,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC;YAC9B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;IACJ,CAAC;CACD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
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, type ToolParams } from "@langchain/core/tools";
|
|
8
|
+
import { z } from "zod";
|
|
9
|
+
import type { VaultClient } from "../vault-client.js";
|
|
10
|
+
declare const readSecretSchema: z.ZodObject<{
|
|
11
|
+
secretId: z.ZodString;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
/**
|
|
14
|
+
* LangChain tool that reads a PQC-encrypted secret from QNSP Vault.
|
|
15
|
+
*/
|
|
16
|
+
export declare class QnspReadSecretTool extends StructuredTool {
|
|
17
|
+
#private;
|
|
18
|
+
readonly name = "qnsp_read_secret";
|
|
19
|
+
readonly 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.";
|
|
20
|
+
readonly schema: z.ZodObject<{
|
|
21
|
+
secretId: z.ZodString;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
constructor(vault: VaultClient, fields?: ToolParams);
|
|
24
|
+
protected _call(input: z.infer<typeof readSecretSchema>): Promise<string>;
|
|
25
|
+
}
|
|
26
|
+
declare const writeSecretSchema: z.ZodObject<{
|
|
27
|
+
tenantId: z.ZodString;
|
|
28
|
+
name: z.ZodString;
|
|
29
|
+
payload: z.ZodString;
|
|
30
|
+
description: z.ZodOptional<z.ZodString>;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
/**
|
|
33
|
+
* LangChain tool that stores a PQC-encrypted secret in QNSP Vault.
|
|
34
|
+
*/
|
|
35
|
+
export declare class QnspWriteSecretTool extends StructuredTool {
|
|
36
|
+
#private;
|
|
37
|
+
readonly name = "qnsp_write_secret";
|
|
38
|
+
readonly 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.";
|
|
39
|
+
readonly schema: z.ZodObject<{
|
|
40
|
+
tenantId: z.ZodString;
|
|
41
|
+
name: z.ZodString;
|
|
42
|
+
payload: z.ZodString;
|
|
43
|
+
description: z.ZodOptional<z.ZodString>;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
constructor(vault: VaultClient, fields?: ToolParams);
|
|
46
|
+
protected _call(input: z.infer<typeof writeSecretSchema>): Promise<string>;
|
|
47
|
+
}
|
|
48
|
+
declare const rotateSecretSchema: z.ZodObject<{
|
|
49
|
+
secretId: z.ZodString;
|
|
50
|
+
tenantId: z.ZodString;
|
|
51
|
+
newPayload: z.ZodString;
|
|
52
|
+
}, z.core.$strip>;
|
|
53
|
+
/**
|
|
54
|
+
* LangChain tool that rotates a secret in QNSP Vault with a new value.
|
|
55
|
+
*/
|
|
56
|
+
export declare class QnspRotateSecretTool extends StructuredTool {
|
|
57
|
+
#private;
|
|
58
|
+
readonly name = "qnsp_rotate_secret";
|
|
59
|
+
readonly 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.";
|
|
60
|
+
readonly schema: z.ZodObject<{
|
|
61
|
+
secretId: z.ZodString;
|
|
62
|
+
tenantId: z.ZodString;
|
|
63
|
+
newPayload: z.ZodString;
|
|
64
|
+
}, z.core.$strip>;
|
|
65
|
+
constructor(vault: VaultClient, fields?: ToolParams);
|
|
66
|
+
protected _call(input: z.infer<typeof rotateSecretSchema>): Promise<string>;
|
|
67
|
+
}
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=vault.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../../../src/langchain/tools/vault.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD,QAAA,MAAM,gBAAgB;;iBAEpB,CAAC;AAEH;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,cAAc;;IACrD,SAAkB,IAAI,sBAAsB;IAC5C,SAAkB,WAAW,6LAC8J;IAC3L,SAAkB,MAAM;;sBAAoB;gBAIhC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,UAAU;cAKnC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAW/E;AAID,QAAA,MAAM,iBAAiB;;;;;iBAQrB,CAAC;AAEH;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,cAAc;;IACtD,SAAkB,IAAI,uBAAuB;IAC7C,SAAkB,WAAW,8MAC+K;IAC5M,SAAkB,MAAM;;;;;sBAAqB;gBAIjC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,UAAU;cAKnC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAehF;AAID,QAAA,MAAM,kBAAkB;;;;iBAItB,CAAC;AAEH;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,cAAc;;IACvD,SAAkB,IAAI,wBAAwB;IAC9C,SAAkB,WAAW,sLACuJ;IACpL,SAAkB,MAAM;;;;sBAAsB;gBAIlC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,UAAU;cAKnC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;CAajF"}
|