@heossi/qnsi 0.3.2 → 0.3.4
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/README.md +4 -4
- package/dist/_activation/activation-client.d.ts +2 -2
- package/dist/_activation/activation-client.js +4 -4
- package/dist/_internal.d.ts +2 -2
- package/dist/_internal.js +2 -2
- package/dist/autogen/executor.d.ts +2 -2
- package/dist/autogen/executor.js +1 -1
- package/dist/browser/provider-setup.d.ts +2 -2
- package/dist/cli/commands/test-utils.js +1 -1
- package/dist/cli/config.js +1 -1
- package/dist/cli/utils/backend-validator.js +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -8
- package/dist/index.js.map +1 -1
- package/dist/langchain/toolkit.d.ts +2 -2
- package/dist/langchain/toolkit.js +2 -2
- package/dist/langchain/tools/audit.d.ts +1 -1
- package/dist/langchain/tools/kms.d.ts +1 -1
- package/dist/langchain/vault-client.js +2 -2
- package/dist/llamaindex/vector-store.d.ts +2 -2
- package/dist/llamaindex/vector-store.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
The official **single-package** Node.js / TypeScript SDK for QNSI. Covers the full customer-facing platform — vault, KMS, audit, auth, tenant, access-control, billing, crypto-inventory, storage, search, and AI orchestrator — plus webhook signature verification. Mirrors the shape of the `qnsp` Python / Go / Rust SDKs byte-for-byte: same wire contracts, same algorithm names, same FIPS 203 / 204 / 205 posture.
|
|
7
7
|
|
|
8
|
-
> **Free tier available.** Free-forever account at <https://cloud.
|
|
8
|
+
> **Free tier available.** Free-forever account at <https://cloud.qnsi.heossi.com/auth> — 60-second signup, no credit card. Includes 10 GB PQC storage, 50 000 API calls/month, 20 KMS keys, 25 vault secrets.
|
|
9
9
|
|
|
10
10
|
## Why one package?
|
|
11
11
|
|
|
@@ -182,9 +182,9 @@ import { VaultClient } from "@heossi/qnsi-vault-sdk";
|
|
|
182
182
|
import { KmsClient } from "@heossi/qnsi-kms-client";
|
|
183
183
|
import { AuditClient } from "@heossi/qnsi-audit-sdk";
|
|
184
184
|
|
|
185
|
-
const vault = new VaultClient({ apiKey, baseUrl: "https://api.
|
|
186
|
-
const kms = new KmsClient({ apiKey, baseUrl: "https://api.
|
|
187
|
-
const audit = new AuditClient({ apiKey, baseUrl: "https://api.
|
|
185
|
+
const vault = new VaultClient({ apiKey, baseUrl: "https://api.qnsi.heossi.com/proxy/vault", tier });
|
|
186
|
+
const kms = new KmsClient({ apiKey, baseUrl: "https://api.qnsi.heossi.com/proxy/kms", tier });
|
|
187
|
+
const audit = new AuditClient({ apiKey, baseUrl: "https://api.qnsi.heossi.com/proxy/audit", tier });
|
|
188
188
|
|
|
189
189
|
// After — one package, one activation, one client
|
|
190
190
|
import { QnspClient } from "@heossi/qnsi";
|
|
@@ -25,13 +25,13 @@ export declare class SdkActivationError_ extends Error {
|
|
|
25
25
|
* Configuration for SDK activation.
|
|
26
26
|
*/
|
|
27
27
|
export interface SdkActivationConfig {
|
|
28
|
-
/** QNSP API key (required — get one at https://cloud.
|
|
28
|
+
/** QNSP API key (required — get one at https://cloud.qnsi.heossi.com/signup) */
|
|
29
29
|
readonly apiKey: string;
|
|
30
30
|
/** SDK package identifier */
|
|
31
31
|
readonly sdkId: SdkIdentifier;
|
|
32
32
|
/** SDK version string */
|
|
33
33
|
readonly sdkVersion: string;
|
|
34
|
-
/** Override platform URL (defaults to https://api.
|
|
34
|
+
/** Override platform URL (defaults to https://api.qnsi.heossi.com) */
|
|
35
35
|
readonly platformUrl?: string | undefined;
|
|
36
36
|
/** Override activation timeout in ms (defaults to 15000) */
|
|
37
37
|
readonly timeoutMs?: number | undefined;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { SdkActivationErrorSchema, SdkActivationResponseSchema, } from "./types.js";
|
|
16
16
|
const ACTIVATION_PATH = "/billing/v1/sdk/activate";
|
|
17
|
-
const DEFAULT_PLATFORM_URL = "https://api.
|
|
17
|
+
const DEFAULT_PLATFORM_URL = "https://api.qnsi.heossi.com";
|
|
18
18
|
const ACTIVATION_TIMEOUT_MS = 15_000;
|
|
19
19
|
const REFRESH_BUFFER_SECONDS = 300; // Refresh 5 minutes before expiry
|
|
20
20
|
/**
|
|
@@ -61,9 +61,9 @@ function detectRuntime() {
|
|
|
61
61
|
export async function activateSdk(config) {
|
|
62
62
|
if (!config.apiKey || config.apiKey.trim().length === 0) {
|
|
63
63
|
throw new SdkActivationError_("INVALID_API_KEY", `QNSP ${config.sdkId}: apiKey is required. ` +
|
|
64
|
-
"Get your free API key at https://cloud.
|
|
64
|
+
"Get your free API key at https://cloud.qnsi.heossi.com/signup — " +
|
|
65
65
|
"no credit card required (FREE tier: 10 GB storage, 50,000 API calls/month). " +
|
|
66
|
-
`Docs: https://docs.
|
|
66
|
+
`Docs: https://docs.qnsi.heossi.com/sdk/${config.sdkId}`, 401);
|
|
67
67
|
}
|
|
68
68
|
const key = cacheKey(config);
|
|
69
69
|
const cached = activationCache.get(key);
|
|
@@ -114,7 +114,7 @@ export async function activateSdk(config) {
|
|
|
114
114
|
}
|
|
115
115
|
if (response.status === 401) {
|
|
116
116
|
throw new SdkActivationError_("INVALID_API_KEY", `QNSP ${config.sdkId}: Invalid API key. ` +
|
|
117
|
-
"Get your API key at https://cloud.
|
|
117
|
+
"Get your API key at https://cloud.qnsi.heossi.com/api-keys", 401);
|
|
118
118
|
}
|
|
119
119
|
if (response.status === 429) {
|
|
120
120
|
throw new SdkActivationError_("RATE_LIMITED", `QNSP ${config.sdkId}: Activation rate limited. Please retry after a short delay.`, 429);
|
package/dist/_internal.d.ts
CHANGED
|
@@ -10,9 +10,9 @@ export declare const SDK_ID = "qnsp";
|
|
|
10
10
|
export declare const SDK_VERSION = "0.3.0";
|
|
11
11
|
/** Public configuration accepted by `new QnspClient(opts)`. */
|
|
12
12
|
export interface QnspClientOptions {
|
|
13
|
-
/** API key issued from <https://cloud.
|
|
13
|
+
/** API key issued from <https://cloud.qnsi.heossi.com/api-keys>. Required. */
|
|
14
14
|
readonly apiKey: string;
|
|
15
|
-
/** Override the QNSP edge-gateway URL. Defaults to https://api.
|
|
15
|
+
/** Override the QNSP edge-gateway URL. Defaults to https://api.qnsi.heossi.com. */
|
|
16
16
|
readonly baseUrl?: string;
|
|
17
17
|
/** Per-request timeout in milliseconds. Defaults to 15 000. */
|
|
18
18
|
readonly timeoutMs?: number;
|
package/dist/_internal.js
CHANGED
|
@@ -11,7 +11,7 @@ export const SDK_ID = "qnsp";
|
|
|
11
11
|
// Bump in lockstep with packages/qnsp/package.json `version` (activation
|
|
12
12
|
// telemetry label). Same release contract as browser/sdk-package-version.ts.
|
|
13
13
|
export const SDK_VERSION = "0.3.0";
|
|
14
|
-
const DEFAULT_BASE_URL = "https://api.
|
|
14
|
+
const DEFAULT_BASE_URL = "https://api.qnsi.heossi.com";
|
|
15
15
|
const DEFAULT_TIMEOUT_MS = 15_000;
|
|
16
16
|
const EXPIRY_BUFFER_MS = 60_000; // refresh 60 s before expiry
|
|
17
17
|
export class Internal {
|
|
@@ -22,7 +22,7 @@ export class Internal {
|
|
|
22
22
|
activationPromise = null;
|
|
23
23
|
constructor(opts) {
|
|
24
24
|
if (!opts.apiKey || opts.apiKey.trim().length === 0) {
|
|
25
|
-
throw new QnspAuthError("api key required (sign up at https://cloud.
|
|
25
|
+
throw new QnspAuthError("api key required (sign up at https://cloud.qnsi.heossi.com/auth)");
|
|
26
26
|
}
|
|
27
27
|
this.apiKey = opts.apiKey;
|
|
28
28
|
this.baseUrl = (opts.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, "");
|
|
@@ -88,7 +88,7 @@ export interface WorkloadDetail extends WorkloadSummary {
|
|
|
88
88
|
}
|
|
89
89
|
export interface QnspExecutorConfig {
|
|
90
90
|
/**
|
|
91
|
-
* QNSP API key. Get one at https://cloud.
|
|
91
|
+
* QNSP API key. Get one at https://cloud.qnsi.heossi.com/api-keys
|
|
92
92
|
* The API key carries the tenant ID — no separate tenantId needed.
|
|
93
93
|
*/
|
|
94
94
|
readonly apiKey: string;
|
|
@@ -100,7 +100,7 @@ export interface QnspExecutorConfig {
|
|
|
100
100
|
readonly tenantId?: string;
|
|
101
101
|
/**
|
|
102
102
|
* Base URL for the QNSP API.
|
|
103
|
-
* Defaults to https://api.
|
|
103
|
+
* Defaults to https://api.qnsi.heossi.com
|
|
104
104
|
*/
|
|
105
105
|
readonly baseUrl?: string;
|
|
106
106
|
/**
|
package/dist/autogen/executor.js
CHANGED
|
@@ -84,7 +84,7 @@ export class QnspExecutor {
|
|
|
84
84
|
this.#pollIntervalMs = config.pollIntervalMs ?? 2_000;
|
|
85
85
|
this.#requestTimeoutMs = config.requestTimeoutMs ?? 30_000;
|
|
86
86
|
this.#apiKey = config.apiKey;
|
|
87
|
-
this.#baseUrl = (config.baseUrl ?? "https://api.
|
|
87
|
+
this.#baseUrl = (config.baseUrl ?? "https://api.qnsi.heossi.com").replace(/\/$/, "");
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
90
|
* Resolve the effective tenant ID — either from config or via SDK activation.
|
|
@@ -13,11 +13,11 @@ import type { PqcAlgorithm, PqcProvider } from "./pqc-types.js";
|
|
|
13
13
|
export type RuntimeEnvironment = "browser" | "node" | "edge";
|
|
14
14
|
/** Options for initializing the PQC provider. */
|
|
15
15
|
export interface InitializePqcProviderOptions {
|
|
16
|
-
/** QNSP API key — required. Get one at https://cloud.
|
|
16
|
+
/** QNSP API key — required. Get one at https://cloud.qnsi.heossi.com/signup */
|
|
17
17
|
readonly apiKey: string;
|
|
18
18
|
/** Optional subset of algorithms to enable. Defaults to all noble-supported. */
|
|
19
19
|
readonly algorithms?: readonly PqcAlgorithm[] | undefined;
|
|
20
|
-
/** Override platform URL (defaults to https://api.
|
|
20
|
+
/** Override platform URL (defaults to https://api.qnsi.heossi.com) */
|
|
21
21
|
readonly platformUrl?: string | undefined;
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
@@ -18,7 +18,7 @@ export function createMockResponse(data, status = 200, ok = true, headers = {})
|
|
|
18
18
|
}
|
|
19
19
|
export const mockConfig = {
|
|
20
20
|
edgeGatewayUrl: null,
|
|
21
|
-
cloudPortalUrl: "https://cloud.
|
|
21
|
+
cloudPortalUrl: "https://cloud.qnsi.heossi.com",
|
|
22
22
|
authServiceUrl: "http://localhost:8081",
|
|
23
23
|
serviceId: "test-service-id",
|
|
24
24
|
serviceSecret: "test-secret",
|
package/dist/cli/config.js
CHANGED
|
@@ -16,7 +16,7 @@ function deriveViaEdgeGateway(options) {
|
|
|
16
16
|
}
|
|
17
17
|
export function loadConfig(overrides) {
|
|
18
18
|
const edgeGatewayUrl = process.env["QNSP_EDGE_GATEWAY_URL"] ?? null;
|
|
19
|
-
const cloudPortalUrl = process.env["QNSP_CLOUD_PORTAL_URL"] ?? "https://cloud.
|
|
19
|
+
const cloudPortalUrl = process.env["QNSP_CLOUD_PORTAL_URL"] ?? "https://cloud.qnsi.heossi.com";
|
|
20
20
|
const defaults = {
|
|
21
21
|
edgeGatewayUrl,
|
|
22
22
|
cloudPortalUrl,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EXIT_CODES } from "../config.js";
|
|
2
2
|
import { printError } from "./output.js";
|
|
3
|
-
const CLOUD_PORTAL_URL = process.env["QNSP_CLOUD_PORTAL_URL"] ?? "https://cloud.
|
|
3
|
+
const CLOUD_PORTAL_URL = process.env["QNSP_CLOUD_PORTAL_URL"] ?? "https://cloud.qnsi.heossi.com";
|
|
4
4
|
export function handleBackendError(response, body) {
|
|
5
5
|
const error = body;
|
|
6
6
|
switch (response.status) {
|
package/dist/index.d.ts
CHANGED
|
@@ -9,36 +9,36 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```ts
|
|
12
|
-
* import {
|
|
12
|
+
* import { QnsiClient } from "@heossi/qnsi";
|
|
13
13
|
*
|
|
14
|
-
* const
|
|
14
|
+
* const qnsi = new QnsiClient({ apiKey: process.env.QNSI_API_KEY! });
|
|
15
15
|
*
|
|
16
16
|
* // Vault
|
|
17
|
-
* const secret = await
|
|
17
|
+
* const secret = await qnsi.vault.createSecret({
|
|
18
18
|
* name: "openai-api-key",
|
|
19
19
|
* payloadB64: Buffer.from("sk-...").toString("base64"),
|
|
20
20
|
* algorithm: "ml-kem-768",
|
|
21
21
|
* });
|
|
22
22
|
*
|
|
23
23
|
* // KMS
|
|
24
|
-
* const key = await
|
|
25
|
-
* const sig = await
|
|
24
|
+
* const key = await qnsi.kms.createKey({ algorithm: "ml-dsa-65", purpose: "signing" });
|
|
25
|
+
* const sig = await qnsi.kms.sign(key.keyId, new TextEncoder().encode("hello"));
|
|
26
26
|
*
|
|
27
27
|
* // Audit
|
|
28
|
-
* await
|
|
28
|
+
* await qnsi.audit.logEvent({
|
|
29
29
|
* eventType: "model.inference",
|
|
30
30
|
* payload: { modelId: "gpt-4o", latencyMs: 412 },
|
|
31
31
|
* });
|
|
32
32
|
* ```
|
|
33
33
|
*
|
|
34
|
-
* Sign up for a free QNSI account at https://cloud.
|
|
34
|
+
* Sign up for a free QNSI account at https://cloud.qnsi.heossi.com/auth.
|
|
35
35
|
*/
|
|
36
36
|
export { AccessClient, type AssignRoleRequest, type CheckPermissionRequest, type CreateRoleRequest, } from "./access.js";
|
|
37
37
|
export { AiClient, type InferenceRequest, type RegisterArtifactRequest, type RegisterModelRequest, type SubmitWorkloadRequest, } from "./ai.js";
|
|
38
38
|
export { AuditClient, type LogEventRequest } from "./audit.js";
|
|
39
39
|
export { AuthClient, type LoginRequest } from "./auth.js";
|
|
40
40
|
export { BillingClient, type IngestMeterRequest } from "./billing.js";
|
|
41
|
-
export { QnspClient, type QnspClientOptions } from "./client.js";
|
|
41
|
+
export { QnspClient, QnspClient as QnsiClient, type QnspClientOptions, type QnspClientOptions as QnsiClientOptions, } from "./client.js";
|
|
42
42
|
export { CryptoInventoryClient, type DiscoverAssetsRequest } from "./crypto-inventory.js";
|
|
43
43
|
export { QnspApiError, QnspAuthError, QnspError, QnspNetworkError, QnspWebhookError, } from "./errors.js";
|
|
44
44
|
export { type CreateKeyRequest, KmsClient } from "./kms.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EACN,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,QAAQ,EACR,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC1B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EACN,YAAY,EACZ,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,QAAQ,EACR,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,GAC1B,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAGtE,OAAO,EACN,UAAU,EACV,UAAU,IAAI,UAAU,EACxB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,IAAI,iBAAiB,GAC3C,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EACN,YAAY,EACZ,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,gBAAgB,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,gBAAgB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EACN,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,YAAY,EACZ,KAAK,MAAM,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,cAAc,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,KAAK,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAErE,OAAO,EAAE,KAAK,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACN,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,0BAA0B,GAC1B,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,36 +9,38 @@
|
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```ts
|
|
12
|
-
* import {
|
|
12
|
+
* import { QnsiClient } from "@heossi/qnsi";
|
|
13
13
|
*
|
|
14
|
-
* const
|
|
14
|
+
* const qnsi = new QnsiClient({ apiKey: process.env.QNSI_API_KEY! });
|
|
15
15
|
*
|
|
16
16
|
* // Vault
|
|
17
|
-
* const secret = await
|
|
17
|
+
* const secret = await qnsi.vault.createSecret({
|
|
18
18
|
* name: "openai-api-key",
|
|
19
19
|
* payloadB64: Buffer.from("sk-...").toString("base64"),
|
|
20
20
|
* algorithm: "ml-kem-768",
|
|
21
21
|
* });
|
|
22
22
|
*
|
|
23
23
|
* // KMS
|
|
24
|
-
* const key = await
|
|
25
|
-
* const sig = await
|
|
24
|
+
* const key = await qnsi.kms.createKey({ algorithm: "ml-dsa-65", purpose: "signing" });
|
|
25
|
+
* const sig = await qnsi.kms.sign(key.keyId, new TextEncoder().encode("hello"));
|
|
26
26
|
*
|
|
27
27
|
* // Audit
|
|
28
|
-
* await
|
|
28
|
+
* await qnsi.audit.logEvent({
|
|
29
29
|
* eventType: "model.inference",
|
|
30
30
|
* payload: { modelId: "gpt-4o", latencyMs: 412 },
|
|
31
31
|
* });
|
|
32
32
|
* ```
|
|
33
33
|
*
|
|
34
|
-
* Sign up for a free QNSI account at https://cloud.
|
|
34
|
+
* Sign up for a free QNSI account at https://cloud.qnsi.heossi.com/auth.
|
|
35
35
|
*/
|
|
36
36
|
export { AccessClient, } from "./access.js";
|
|
37
37
|
export { AiClient, } from "./ai.js";
|
|
38
38
|
export { AuditClient } from "./audit.js";
|
|
39
39
|
export { AuthClient } from "./auth.js";
|
|
40
40
|
export { BillingClient } from "./billing.js";
|
|
41
|
-
|
|
41
|
+
// QnsiClient is the canonical name (product is QNSI). QnspClient is kept as a
|
|
42
|
+
// back-compat alias for consumers on the pre-rebrand name.
|
|
43
|
+
export { QnspClient, QnspClient as QnsiClient, } from "./client.js";
|
|
42
44
|
export { CryptoInventoryClient } from "./crypto-inventory.js";
|
|
43
45
|
export { QnspApiError, QnspAuthError, QnspError, QnspNetworkError, QnspWebhookError, } from "./errors.js";
|
|
44
46
|
export { KmsClient } from "./kms.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EACN,YAAY,GAIZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,QAAQ,GAKR,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAwB,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAqB,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAA2B,MAAM,cAAc,CAAC;AACtE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EACN,YAAY,GAIZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,QAAQ,GAKR,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,WAAW,EAAwB,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAqB,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAA2B,MAAM,cAAc,CAAC;AACtE,8EAA8E;AAC9E,2DAA2D;AAC3D,OAAO,EACN,UAAU,EACV,UAAU,IAAI,UAAU,GAGxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAA8B,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EACN,YAAY,EACZ,aAAa,EACb,SAAS,EACT,gBAAgB,EAChB,gBAAgB,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAyB,SAAS,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAGN,YAAY,GAEZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAuB,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAA4B,YAAY,EAAE,MAAM,aAAa,CAAC;AACrE,yEAAyE;AACzE,OAAO,EAA4B,WAAW,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EACN,mBAAmB,EACnB,gBAAgB,EAEhB,0BAA0B,GAC1B,MAAM,eAAe,CAAC"}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
import type { StructuredTool } from "@langchain/core/tools";
|
|
26
26
|
export interface QnspToolkitConfig {
|
|
27
27
|
/**
|
|
28
|
-
* QNSP API key. Get one at https://cloud.
|
|
28
|
+
* QNSP API key. Get one at https://cloud.qnsi.heossi.com/api-keys
|
|
29
29
|
* The API key carries the tenant ID — no separate tenantId needed.
|
|
30
30
|
*/
|
|
31
31
|
readonly apiKey: string;
|
|
@@ -36,7 +36,7 @@ export interface QnspToolkitConfig {
|
|
|
36
36
|
readonly tenantId?: string;
|
|
37
37
|
/**
|
|
38
38
|
* Base URL for the QNSP API.
|
|
39
|
-
* Defaults to https://api.
|
|
39
|
+
* Defaults to https://api.qnsi.heossi.com
|
|
40
40
|
*/
|
|
41
41
|
readonly baseUrl?: string;
|
|
42
42
|
/**
|
|
@@ -47,7 +47,7 @@ export class QnspToolkit {
|
|
|
47
47
|
constructor(config) {
|
|
48
48
|
this.#apiKey = config.apiKey;
|
|
49
49
|
this.#tenantId = config.tenantId ?? "";
|
|
50
|
-
this.#baseUrl = config.baseUrl ?? "https://api.
|
|
50
|
+
this.#baseUrl = config.baseUrl ?? "https://api.qnsi.heossi.com";
|
|
51
51
|
this.#timeoutMs = config.timeoutMs ?? 15_000;
|
|
52
52
|
this.#include = config.include ?? ["vault", "kms", "audit"];
|
|
53
53
|
this.#vaultClient = new VaultClient({
|
|
@@ -89,7 +89,7 @@ export class QnspToolkit {
|
|
|
89
89
|
if (!this.#activated) {
|
|
90
90
|
throw new Error("@heossi/qnsi-langchain-qnsp: call `await toolkit.activate()` once before `getTools()`. " +
|
|
91
91
|
"This validates your QNSP API key and resolves the tenant ID. " +
|
|
92
|
-
"Free signup (no credit card): https://cloud.
|
|
92
|
+
"Free signup (no credit card): https://cloud.qnsi.heossi.com/auth");
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
95
|
/** Returns all configured QNSP tools for use with a LangChain agent. */
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { StructuredTool, type ToolParams } from "@langchain/core/tools";
|
|
8
8
|
import { z } from "zod";
|
|
9
9
|
export interface QnspAuditToolConfig {
|
|
10
|
-
/** Base URL for the QNSP API (e.g. https://api.
|
|
10
|
+
/** Base URL for the QNSP API (e.g. https://api.qnsi.heossi.com) */
|
|
11
11
|
readonly baseUrl: string;
|
|
12
12
|
/** API key or Bearer token for authentication */
|
|
13
13
|
readonly apiKey: string;
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
import { StructuredTool, type ToolParams } from "@langchain/core/tools";
|
|
8
8
|
import { z } from "zod";
|
|
9
9
|
export interface QnspKmsToolConfig {
|
|
10
|
-
/** Base URL for the QNSP API (e.g. https://api.
|
|
10
|
+
/** Base URL for the QNSP API (e.g. https://api.qnsi.heossi.com) */
|
|
11
11
|
readonly baseUrl: string;
|
|
12
12
|
/** API key or Bearer token for authentication */
|
|
13
13
|
readonly apiKey: string;
|
|
@@ -17,7 +17,7 @@ function validateUUID(value, field) {
|
|
|
17
17
|
throw new Error(`QNSP Vault: ${field} must be a valid UUID, received "${value}"`);
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
const DEFAULT_BASE_URL = "https://api.
|
|
20
|
+
const DEFAULT_BASE_URL = "https://api.qnsi.heossi.com";
|
|
21
21
|
export class VaultClient {
|
|
22
22
|
#baseUrl;
|
|
23
23
|
#apiKey;
|
|
@@ -27,7 +27,7 @@ export class VaultClient {
|
|
|
27
27
|
#tenantId = null;
|
|
28
28
|
constructor(config) {
|
|
29
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.
|
|
30
|
+
throw new Error("QNSP Vault: apiKey is required. Get a free key at https://cloud.qnsi.heossi.com/auth");
|
|
31
31
|
}
|
|
32
32
|
this.#baseUrl = (config.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, "");
|
|
33
33
|
this.#apiKey = config.apiKey;
|
|
@@ -44,7 +44,7 @@ export interface VectorStoreQueryResult {
|
|
|
44
44
|
}
|
|
45
45
|
export interface QnspVectorStoreConfig {
|
|
46
46
|
/**
|
|
47
|
-
* QNSP API key. Get one at https://cloud.
|
|
47
|
+
* QNSP API key. Get one at https://cloud.qnsi.heossi.com/api-keys
|
|
48
48
|
* The API key carries the tenant ID internally — no separate tenantId needed.
|
|
49
49
|
*/
|
|
50
50
|
readonly apiKey: string;
|
|
@@ -55,7 +55,7 @@ export interface QnspVectorStoreConfig {
|
|
|
55
55
|
readonly tenantId?: string;
|
|
56
56
|
/** Source service label used when indexing documents. Defaults to "llamaindex-qnsp". */
|
|
57
57
|
readonly sourceService?: string;
|
|
58
|
-
/** Base URL for the QNSP API. Defaults to https://api.
|
|
58
|
+
/** Base URL for the QNSP API. Defaults to https://api.qnsi.heossi.com */
|
|
59
59
|
readonly baseUrl?: string;
|
|
60
60
|
/** Request timeout in milliseconds. Defaults to 15000. */
|
|
61
61
|
readonly timeoutMs?: number;
|
|
@@ -19,7 +19,7 @@ import { activateSdk } from "../_activation/index.js";
|
|
|
19
19
|
import { deriveDocumentSseTokens, deriveQuerySseTokens } from "./sse.js";
|
|
20
20
|
const SDK_VERSION = "0.3.0";
|
|
21
21
|
const SDK_ID = "llamaindex-qnsp";
|
|
22
|
-
const DEFAULT_BASE_URL = "https://api.
|
|
22
|
+
const DEFAULT_BASE_URL = "https://api.qnsi.heossi.com";
|
|
23
23
|
async function resolveActivationTenantId(apiKey, baseUrl) {
|
|
24
24
|
const activation = await activateSdk({
|
|
25
25
|
apiKey,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@heossi/qnsi",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
"url": "https://github.com/heossi-hq/qnsp-public",
|
|
100
100
|
"directory": "packages/qnsp"
|
|
101
101
|
},
|
|
102
|
-
"homepage": "https://cloud.
|
|
102
|
+
"homepage": "https://cloud.qnsi.heossi.com",
|
|
103
103
|
"bugs": {
|
|
104
104
|
"url": "https://github.com/heossi-hq/qnsp-public/issues"
|
|
105
105
|
},
|