usertrust 0.2.6 → 1.0.1
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/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +231 -37
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +18 -3
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/pricing.d.ts +5 -0
- package/dist/cli/pricing.d.ts.map +1 -0
- package/dist/cli/pricing.js +61 -0
- package/dist/cli/pricing.js.map +1 -0
- package/dist/cli/validate-key.d.ts +17 -0
- package/dist/cli/validate-key.d.ts.map +1 -0
- package/dist/cli/validate-key.js +58 -0
- package/dist/cli/validate-key.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +31 -0
- package/dist/config.js.map +1 -1
- package/dist/govern.d.ts +3 -1
- package/dist/govern.d.ts.map +1 -1
- package/dist/govern.js +495 -39
- package/dist/govern.js.map +1 -1
- package/dist/headless.d.ts +77 -0
- package/dist/headless.d.ts.map +1 -0
- package/dist/headless.js +566 -0
- package/dist/headless.js.map +1 -0
- package/dist/index.d.ts +12 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -1
- package/dist/index.js.map +1 -1
- package/dist/ledger/pricing.d.ts +6 -2
- package/dist/ledger/pricing.d.ts.map +1 -1
- package/dist/ledger/pricing.js +31 -3
- package/dist/ledger/pricing.js.map +1 -1
- package/dist/policy/canary.d.ts +17 -0
- package/dist/policy/canary.d.ts.map +1 -0
- package/dist/policy/canary.js +44 -0
- package/dist/policy/canary.js.map +1 -0
- package/dist/policy/injection.d.ts +24 -0
- package/dist/policy/injection.d.ts.map +1 -0
- package/dist/policy/injection.js +178 -0
- package/dist/policy/injection.js.map +1 -0
- package/dist/policy/pii.d.ts +13 -1
- package/dist/policy/pii.d.ts.map +1 -1
- package/dist/policy/pii.js +88 -0
- package/dist/policy/pii.js.map +1 -1
- package/dist/shared/errors.d.ts +20 -0
- package/dist/shared/errors.d.ts.map +1 -1
- package/dist/shared/errors.js +46 -0
- package/dist/shared/errors.js.map +1 -1
- package/dist/shared/types.d.ts +268 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +67 -0
- package/dist/shared/types.js.map +1 -1
- package/dist/streaming.d.ts +7 -2
- package/dist/streaming.d.ts.map +1 -1
- package/dist/streaming.js +15 -8
- package/dist/streaming.js.map +1 -1
- package/dist/supply-chain/manifest.d.ts +22 -0
- package/dist/supply-chain/manifest.d.ts.map +1 -0
- package/dist/supply-chain/manifest.js +46 -0
- package/dist/supply-chain/manifest.js.map +1 -0
- package/dist/supply-chain/permissions.d.ts +12 -0
- package/dist/supply-chain/permissions.d.ts.map +1 -0
- package/dist/supply-chain/permissions.js +89 -0
- package/dist/supply-chain/permissions.js.map +1 -0
- package/dist/supply-chain/sign.d.ts +17 -0
- package/dist/supply-chain/sign.d.ts.map +1 -0
- package/dist/supply-chain/sign.js +95 -0
- package/dist/supply-chain/sign.js.map +1 -0
- package/dist/vault/derive.d.ts +13 -0
- package/dist/vault/derive.d.ts.map +1 -0
- package/dist/vault/derive.js +32 -0
- package/dist/vault/derive.js.map +1 -0
- package/dist/vault/scope.d.ts +20 -0
- package/dist/vault/scope.d.ts.map +1 -0
- package/dist/vault/scope.js +35 -0
- package/dist/vault/scope.js.map +1 -0
- package/dist/vault/store.d.ts +31 -0
- package/dist/vault/store.d.ts.map +1 -0
- package/dist/vault/store.js +204 -0
- package/dist/vault/store.js.map +1 -0
- package/package.json +15 -4
package/dist/ledger/pricing.d.ts
CHANGED
|
@@ -14,18 +14,22 @@ export interface ModelRates {
|
|
|
14
14
|
* Key: model identifier as sent by the client.
|
|
15
15
|
*/
|
|
16
16
|
export declare const PRICING_TABLE: Record<string, ModelRates>;
|
|
17
|
+
/** Date the PRICING_TABLE rates were last verified against provider pricing pages. */
|
|
18
|
+
export declare const PRICING_TABLE_VERSION = "2026-03-29";
|
|
17
19
|
/** Fallback rate for unknown models (sonnet-class pricing). */
|
|
18
20
|
export declare const FALLBACK_RATE: ModelRates;
|
|
21
|
+
/** Return all PRICING_TABLE model keys that belong to a given provider. */
|
|
22
|
+
export declare function modelsForProvider(provider: string): string[];
|
|
19
23
|
/**
|
|
20
24
|
* Look up rates by model string. Falls back to prefix matching,
|
|
21
25
|
* then FALLBACK_RATE for unknown models.
|
|
22
26
|
*/
|
|
23
|
-
export declare function getModelRates(model: string): ModelRates;
|
|
27
|
+
export declare function getModelRates(model: string, customRates?: Record<string, ModelRates>): ModelRates;
|
|
24
28
|
/**
|
|
25
29
|
* Estimate cost in usertokens for a model call.
|
|
26
30
|
* Returns at least 1 (floor to prevent zero-amount transfers).
|
|
27
31
|
*/
|
|
28
|
-
export declare function estimateCost(model: string, inputTokens: number, outputTokens: number): number;
|
|
32
|
+
export declare function estimateCost(model: string, inputTokens: number, outputTokens: number, customRates?: Record<string, ModelRates>): number;
|
|
29
33
|
/**
|
|
30
34
|
* Estimate input token count from a messages array.
|
|
31
35
|
* Heuristic: ~4 chars/token with a 1.5x safety margin so the PENDING
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/ledger/pricing.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,MAAM,WAAW,UAAU;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA0CpD,CAAC;
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/ledger/pricing.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AAEH,MAAM,WAAW,UAAU;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA0CpD,CAAC;AAEF,sFAAsF;AACtF,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAKlD,+DAA+D;AAC/D,eAAO,MAAM,aAAa,EAAE,UAAiD,CAAC;AAiB9E,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAI5D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,UAAU,CAejG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,GACtC,MAAM,CAKR;AA6BD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAqC/D"}
|
package/dist/ledger/pricing.js
CHANGED
|
@@ -37,15 +37,43 @@ export const PRICING_TABLE = {
|
|
|
37
37
|
// ── Amazon ──
|
|
38
38
|
"nova-pro": { inputPer1k: 8, outputPer1k: 32 },
|
|
39
39
|
};
|
|
40
|
+
/** Date the PRICING_TABLE rates were last verified against provider pricing pages. */
|
|
41
|
+
export const PRICING_TABLE_VERSION = "2026-03-29";
|
|
40
42
|
/** Pre-sorted entries for prefix matching (longest key first). */
|
|
41
43
|
const SORTED_TABLE = Object.entries(PRICING_TABLE).sort((a, b) => b[0].length - a[0].length);
|
|
42
44
|
/** Fallback rate for unknown models (sonnet-class pricing). */
|
|
43
45
|
export const FALLBACK_RATE = { inputPer1k: 30, outputPer1k: 150 };
|
|
46
|
+
/** Maps provider names to their model key prefixes in PRICING_TABLE. */
|
|
47
|
+
const PROVIDER_MODEL_MAP = {
|
|
48
|
+
anthropic: ["claude-"],
|
|
49
|
+
openai: ["gpt-", "o3", "o4-"],
|
|
50
|
+
google: ["gemini-"],
|
|
51
|
+
mistral: ["mistral-"],
|
|
52
|
+
deepseek: ["deepseek-"],
|
|
53
|
+
xai: ["grok-"],
|
|
54
|
+
meta: ["llama-"],
|
|
55
|
+
cohere: ["command-"],
|
|
56
|
+
perplexity: ["sonar-"],
|
|
57
|
+
alibaba: ["qwen-"],
|
|
58
|
+
amazon: ["nova-"],
|
|
59
|
+
};
|
|
60
|
+
/** Return all PRICING_TABLE model keys that belong to a given provider. */
|
|
61
|
+
export function modelsForProvider(provider) {
|
|
62
|
+
const prefixes = PROVIDER_MODEL_MAP[provider];
|
|
63
|
+
if (!prefixes)
|
|
64
|
+
return [];
|
|
65
|
+
return Object.keys(PRICING_TABLE).filter((model) => prefixes.some((p) => model.startsWith(p)));
|
|
66
|
+
}
|
|
44
67
|
/**
|
|
45
68
|
* Look up rates by model string. Falls back to prefix matching,
|
|
46
69
|
* then FALLBACK_RATE for unknown models.
|
|
47
70
|
*/
|
|
48
|
-
export function getModelRates(model) {
|
|
71
|
+
export function getModelRates(model, customRates) {
|
|
72
|
+
if (customRates) {
|
|
73
|
+
const custom = customRates[model];
|
|
74
|
+
if (custom)
|
|
75
|
+
return custom;
|
|
76
|
+
}
|
|
49
77
|
const exact = PRICING_TABLE[model];
|
|
50
78
|
if (exact)
|
|
51
79
|
return exact;
|
|
@@ -60,8 +88,8 @@ export function getModelRates(model) {
|
|
|
60
88
|
* Estimate cost in usertokens for a model call.
|
|
61
89
|
* Returns at least 1 (floor to prevent zero-amount transfers).
|
|
62
90
|
*/
|
|
63
|
-
export function estimateCost(model, inputTokens, outputTokens) {
|
|
64
|
-
const rates = getModelRates(model);
|
|
91
|
+
export function estimateCost(model, inputTokens, outputTokens, customRates) {
|
|
92
|
+
const rates = getModelRates(model, customRates);
|
|
65
93
|
const inputCost = (inputTokens / 1000) * rates.inputPer1k;
|
|
66
94
|
const outputCost = (outputTokens / 1000) * rates.outputPer1k;
|
|
67
95
|
return Math.max(1, Math.ceil(inputCost + outputCost));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/ledger/pricing.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAejC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAA+B;IACxD,kBAAkB;IAClB,mBAAmB,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE;IACzD,kBAAkB,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;IACvD,iBAAiB,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE;IAEvD,eAAe;IACf,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE;IAC9C,aAAa,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE;IAClD,SAAS,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE;IAC/C,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;IACvC,SAAS,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE;IAE/C,sBAAsB;IACtB,kBAAkB,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IACtD,gBAAgB,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;IACxD,gBAAgB,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE;IAEtD,gBAAgB;IAChB,eAAe,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IAEnD,iBAAiB;IACjB,eAAe,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE;IACtD,mBAAmB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE;IAE1D,YAAY;IACZ,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE;IAE9C,2BAA2B;IAC3B,kBAAkB,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE;IAEzD,eAAe;IACf,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE;IAEjD,mBAAmB;IACnB,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE;IAEjD,gBAAgB;IAChB,UAAU,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE;IAEjD,eAAe;IACf,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;CAC9C,CAAC;AAEF,kEAAkE;AAClE,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7F,+DAA+D;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAe,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;AAE9E;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/ledger/pricing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CanaryToken } from "../shared/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Generate a new canary token.
|
|
4
|
+
* Returns a 32-char hex token and an HTML comment marker.
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateCanary(): CanaryToken;
|
|
7
|
+
/**
|
|
8
|
+
* Inject a canary token into a system prompt.
|
|
9
|
+
* Prepends the HTML comment marker to the prompt.
|
|
10
|
+
*/
|
|
11
|
+
export declare function injectCanary(systemPrompt: string, canary: CanaryToken): string;
|
|
12
|
+
/**
|
|
13
|
+
* Detect if a canary token leaked into model output.
|
|
14
|
+
* Returns true if the token appears anywhere in the output.
|
|
15
|
+
*/
|
|
16
|
+
export declare function detectCanaryLeak(output: string, canary: CanaryToken): boolean;
|
|
17
|
+
//# sourceMappingURL=canary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canary.d.ts","sourceRoot":"","sources":["../../src/policy/canary.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;GAGG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAI5C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAE9E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAE7E"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright 2026 Usertools, Inc.
|
|
3
|
+
/**
|
|
4
|
+
* Canary Token Utilities
|
|
5
|
+
*
|
|
6
|
+
* Generate, inject, and detect canary tokens for prompt leak detection.
|
|
7
|
+
* A canary token is a random secret embedded in system prompts. If it
|
|
8
|
+
* appears in model output, the system prompt was leaked.
|
|
9
|
+
*
|
|
10
|
+
* Pure module — uses only Node.js crypto.
|
|
11
|
+
*
|
|
12
|
+
* INTEGRATION NOTE: These utilities are NOT automatically wired into the
|
|
13
|
+
* governance pipeline. Callers must manually:
|
|
14
|
+
* 1. Generate a canary: const canary = generateCanary()
|
|
15
|
+
* 2. Inject into system prompt: injectCanary(systemPrompt, canary)
|
|
16
|
+
* 3. After LLM response, check: detectCanaryLeak(output, canary)
|
|
17
|
+
*
|
|
18
|
+
* Automatic integration is planned for a future version.
|
|
19
|
+
*/
|
|
20
|
+
import { randomBytes } from "node:crypto";
|
|
21
|
+
/**
|
|
22
|
+
* Generate a new canary token.
|
|
23
|
+
* Returns a 32-char hex token and an HTML comment marker.
|
|
24
|
+
*/
|
|
25
|
+
export function generateCanary() {
|
|
26
|
+
const token = randomBytes(16).toString("hex");
|
|
27
|
+
const marker = `<!-- ${token} -->`;
|
|
28
|
+
return { token, marker };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Inject a canary token into a system prompt.
|
|
32
|
+
* Prepends the HTML comment marker to the prompt.
|
|
33
|
+
*/
|
|
34
|
+
export function injectCanary(systemPrompt, canary) {
|
|
35
|
+
return `${canary.marker}\n${systemPrompt}`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Detect if a canary token leaked into model output.
|
|
39
|
+
* Returns true if the token appears anywhere in the output.
|
|
40
|
+
*/
|
|
41
|
+
export function detectCanaryLeak(output, canary) {
|
|
42
|
+
return output.includes(canary.token);
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=canary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canary.js","sourceRoot":"","sources":["../../src/policy/canary.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC7B,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,QAAQ,KAAK,MAAM,CAAC;IACnC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,YAAoB,EAAE,MAAmB;IACrE,OAAO,GAAG,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc,EAAE,MAAmB;IACnE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Injection Detector
|
|
3
|
+
*
|
|
4
|
+
* Multi-layer heuristic detection for prompt injection attempts.
|
|
5
|
+
* Recursively scans strings in objects/arrays and returns
|
|
6
|
+
* which injection patterns were matched and at which paths.
|
|
7
|
+
*
|
|
8
|
+
* Pure module — no side effects, no network calls.
|
|
9
|
+
*
|
|
10
|
+
* Layers:
|
|
11
|
+
* 1. Keyword combo matching (verb × object phrases)
|
|
12
|
+
* 2. Role boundary detection (role redefinition attempts)
|
|
13
|
+
* 3. Base64 evasion detection (encoded injection payloads)
|
|
14
|
+
* 4. Delimiter injection detection (escape attempts)
|
|
15
|
+
*/
|
|
16
|
+
import type { InjectionDetection } from "../shared/types.js";
|
|
17
|
+
/**
|
|
18
|
+
* Detect prompt injection attempts in any value by recursively scanning
|
|
19
|
+
* strings in objects/arrays.
|
|
20
|
+
*
|
|
21
|
+
* Returns which injection patterns were matched and at which dot-paths.
|
|
22
|
+
*/
|
|
23
|
+
export declare function detectInjection(data: unknown): InjectionDetection;
|
|
24
|
+
//# sourceMappingURL=injection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection.d.ts","sourceRoot":"","sources":["../../src/policy/injection.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAyL7D;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAejE"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright 2026 Usertools, Inc.
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Layer 1: Keyword combo matching
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
const VERBS = [
|
|
7
|
+
"ignore",
|
|
8
|
+
"disregard",
|
|
9
|
+
"skip",
|
|
10
|
+
"forget",
|
|
11
|
+
"bypass",
|
|
12
|
+
"override",
|
|
13
|
+
"do not follow",
|
|
14
|
+
"stop following",
|
|
15
|
+
"forget about",
|
|
16
|
+
];
|
|
17
|
+
const OBJECTS = [
|
|
18
|
+
"instructions",
|
|
19
|
+
"rules",
|
|
20
|
+
"guidelines",
|
|
21
|
+
"system prompt",
|
|
22
|
+
"previous instructions",
|
|
23
|
+
"above instructions",
|
|
24
|
+
"context",
|
|
25
|
+
"constraints",
|
|
26
|
+
];
|
|
27
|
+
/** Pre-computed lowercased injection phrases (verb + " " + object). */
|
|
28
|
+
const KEYWORD_COMBOS = [];
|
|
29
|
+
for (const verb of VERBS) {
|
|
30
|
+
for (const obj of OBJECTS) {
|
|
31
|
+
KEYWORD_COMBOS.push(`${verb} ${obj}`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function checkKeywordCombo(lower) {
|
|
35
|
+
for (const combo of KEYWORD_COMBOS) {
|
|
36
|
+
if (lower.includes(combo))
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
// Layer 2: Role boundary detection
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
const ROLE_PATTERNS = [
|
|
45
|
+
// Role redefinition
|
|
46
|
+
"you are now",
|
|
47
|
+
"act as if",
|
|
48
|
+
"pretend you are",
|
|
49
|
+
"from now on",
|
|
50
|
+
"new instructions:",
|
|
51
|
+
"### instruction",
|
|
52
|
+
"## system",
|
|
53
|
+
// System prompt extraction
|
|
54
|
+
"repeat your instructions",
|
|
55
|
+
"print your system prompt",
|
|
56
|
+
"what are your instructions",
|
|
57
|
+
"show me your prompt",
|
|
58
|
+
"output your system",
|
|
59
|
+
];
|
|
60
|
+
function checkRoleBoundary(lower) {
|
|
61
|
+
for (const pattern of ROLE_PATTERNS) {
|
|
62
|
+
if (lower.includes(pattern))
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
// Layer 3: Base64 evasion detection
|
|
69
|
+
// ---------------------------------------------------------------------------
|
|
70
|
+
const BASE64_RE = /(?<![A-Za-z0-9+/])[A-Za-z0-9+/]{20,}={0,2}(?![A-Za-z0-9=])/g;
|
|
71
|
+
function checkBase64Evasion(value) {
|
|
72
|
+
const candidates = value.match(BASE64_RE);
|
|
73
|
+
if (!candidates)
|
|
74
|
+
return false;
|
|
75
|
+
for (const candidate of candidates) {
|
|
76
|
+
try {
|
|
77
|
+
const decoded = Buffer.from(candidate, "base64").toString("utf-8");
|
|
78
|
+
// Filter binary data: require printable ASCII only
|
|
79
|
+
if (!/^[\x20-\x7E\t\n\r]+$/.test(decoded))
|
|
80
|
+
continue;
|
|
81
|
+
const lower = decoded.toLowerCase();
|
|
82
|
+
if (checkKeywordCombo(lower) || checkRoleBoundary(lower))
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Invalid base64 — skip
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
// ---------------------------------------------------------------------------
|
|
92
|
+
// Layer 4: Delimiter injection detection
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
/** Triple backtick escape followed by system-like content. */
|
|
95
|
+
const DELIMITER_BACKTICK_RE = /```[\s\S]*?(?:system|instruction|admin)/i;
|
|
96
|
+
/** XML tag injection closing a role-like tag. */
|
|
97
|
+
const DELIMITER_XML_RE = /<\/(?:system|user|assistant|human|ai)>/i;
|
|
98
|
+
/** Markdown heading injection for role. */
|
|
99
|
+
const DELIMITER_HEADING_RE = /^#{1,3}\s*(?:system|instruction|new role)/im;
|
|
100
|
+
function checkDelimiterInjection(value) {
|
|
101
|
+
return (DELIMITER_BACKTICK_RE.test(value) ||
|
|
102
|
+
DELIMITER_XML_RE.test(value) ||
|
|
103
|
+
DELIMITER_HEADING_RE.test(value));
|
|
104
|
+
}
|
|
105
|
+
function scanString(value, currentPath, state) {
|
|
106
|
+
const normalized = value
|
|
107
|
+
.normalize("NFKC")
|
|
108
|
+
.replace(/\u200B|\u200C|\u200D|\uFEFF|\u00AD|\u200E|\u200F/g, "")
|
|
109
|
+
.toLowerCase();
|
|
110
|
+
if (checkKeywordCombo(normalized)) {
|
|
111
|
+
state.patterns.add("keyword_combo");
|
|
112
|
+
state.paths.push(currentPath ? `${currentPath}(keyword_combo)` : "(keyword_combo)");
|
|
113
|
+
if (0.9 > state.score)
|
|
114
|
+
state.score = 0.9;
|
|
115
|
+
}
|
|
116
|
+
if (checkRoleBoundary(normalized)) {
|
|
117
|
+
state.patterns.add("role_boundary");
|
|
118
|
+
state.paths.push(currentPath ? `${currentPath}(role_boundary)` : "(role_boundary)");
|
|
119
|
+
if (0.85 > state.score)
|
|
120
|
+
state.score = 0.85;
|
|
121
|
+
}
|
|
122
|
+
if (checkBase64Evasion(value)) {
|
|
123
|
+
state.patterns.add("base64_evasion");
|
|
124
|
+
state.paths.push(currentPath ? `${currentPath}(base64_evasion)` : "(base64_evasion)");
|
|
125
|
+
if (0.95 > state.score)
|
|
126
|
+
state.score = 0.95;
|
|
127
|
+
}
|
|
128
|
+
if (checkDelimiterInjection(value)) {
|
|
129
|
+
state.patterns.add("delimiter_injection");
|
|
130
|
+
state.paths.push(currentPath ? `${currentPath}(delimiter_injection)` : "(delimiter_injection)");
|
|
131
|
+
if (0.8 > state.score)
|
|
132
|
+
state.score = 0.8;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
function scanValue(value, currentPath, state) {
|
|
136
|
+
if (typeof value === "string") {
|
|
137
|
+
scanString(value, currentPath, state);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
if (Array.isArray(value)) {
|
|
141
|
+
for (let i = 0; i < value.length; i++) {
|
|
142
|
+
const itemPath = currentPath ? `${currentPath}[${i}]` : `[${i}]`;
|
|
143
|
+
scanValue(value[i], itemPath, state);
|
|
144
|
+
}
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
if (value !== null && typeof value === "object") {
|
|
148
|
+
const record = value;
|
|
149
|
+
for (const key of Object.keys(record)) {
|
|
150
|
+
const fieldPath = currentPath ? `${currentPath}.${key}` : key;
|
|
151
|
+
scanValue(record[key], fieldPath, state);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
// Public API
|
|
157
|
+
// ---------------------------------------------------------------------------
|
|
158
|
+
/**
|
|
159
|
+
* Detect prompt injection attempts in any value by recursively scanning
|
|
160
|
+
* strings in objects/arrays.
|
|
161
|
+
*
|
|
162
|
+
* Returns which injection patterns were matched and at which dot-paths.
|
|
163
|
+
*/
|
|
164
|
+
export function detectInjection(data) {
|
|
165
|
+
const state = {
|
|
166
|
+
score: 0,
|
|
167
|
+
patterns: new Set(),
|
|
168
|
+
paths: [],
|
|
169
|
+
};
|
|
170
|
+
scanValue(data, "", state);
|
|
171
|
+
return {
|
|
172
|
+
detected: state.patterns.size > 0,
|
|
173
|
+
score: state.score,
|
|
174
|
+
patterns: [...state.patterns],
|
|
175
|
+
paths: state.paths,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=injection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection.js","sourceRoot":"","sources":["../../src/policy/injection.ts"],"names":[],"mappings":"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"}
|
package/dist/policy/pii.d.ts
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Pure module — no side effects, no network calls.
|
|
9
9
|
*
|
|
10
|
-
* Detects: email, phone, SSN, credit card (Luhn-validated), IPv4
|
|
10
|
+
* Detects: email, phone, SSN, credit card (Luhn-validated), IPv4,
|
|
11
|
+
* API keys, AWS keys, GitHub tokens, bearer tokens, generic secrets.
|
|
11
12
|
*/
|
|
12
13
|
export interface PIIDetection {
|
|
13
14
|
/** Whether any PII was found */
|
|
@@ -23,4 +24,15 @@ export interface PIIDetection {
|
|
|
23
24
|
* Returns which PII types were found and at which dot-paths.
|
|
24
25
|
*/
|
|
25
26
|
export declare function detectPII(data: unknown): PIIDetection;
|
|
27
|
+
export interface RedactedData {
|
|
28
|
+
/** The data with PII values replaced by placeholders */
|
|
29
|
+
data: unknown;
|
|
30
|
+
/** The detection result (same as detectPII) */
|
|
31
|
+
detection: PIIDetection;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Deep-clone data and replace detected PII values with redacted placeholders.
|
|
35
|
+
* Returns both the redacted data and the detection metadata.
|
|
36
|
+
*/
|
|
37
|
+
export declare function redactPII(data: unknown): RedactedData;
|
|
26
38
|
//# sourceMappingURL=pii.d.ts.map
|
package/dist/policy/pii.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pii.d.ts","sourceRoot":"","sources":["../../src/policy/pii.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"pii.d.ts","sourceRoot":"","sources":["../../src/policy/pii.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;GAWG;AAMH,MAAM,WAAW,YAAY;IAC5B,gCAAgC;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,qFAAqF;IACrF,KAAK,EAAE,MAAM,EAAE,CAAC;CAChB;AAuID;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAWrD;AAsCD,MAAM,WAAW,YAAY;IAC5B,wDAAwD;IACxD,IAAI,EAAE,OAAO,CAAC;IACd,+CAA+C;IAC/C,SAAS,EAAE,YAAY,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAOrD"}
|
package/dist/policy/pii.js
CHANGED
|
@@ -57,12 +57,56 @@ function luhnCheck(digits) {
|
|
|
57
57
|
}
|
|
58
58
|
return sum % 10 === 0;
|
|
59
59
|
}
|
|
60
|
+
/** API key: sk-... (OpenAI/Anthropic) or sk_live_/sk_test_ (Stripe) */
|
|
61
|
+
function isApiKey(value) {
|
|
62
|
+
return /\b(?:sk-|sk_(?:live|test)_)[a-zA-Z0-9_-]{20,}\b/.test(value);
|
|
63
|
+
}
|
|
64
|
+
/** AWS access key: AKIA followed by 16 uppercase alphanumeric chars */
|
|
65
|
+
function isAwsKey(value) {
|
|
66
|
+
return /\bAKIA[0-9A-Z]{16}\b/.test(value);
|
|
67
|
+
}
|
|
68
|
+
/** GitHub token: ghp_, gho_, ghs_, ghr_, github_pat_ followed by 22+ alphanumeric chars */
|
|
69
|
+
function isGithubToken(value) {
|
|
70
|
+
return /\b(?:ghp_|gho_|ghs_|ghr_|github_pat_)[a-zA-Z0-9]{22,}\b/.test(value);
|
|
71
|
+
}
|
|
72
|
+
/** Bearer token: Authorization header with 20+ char token */
|
|
73
|
+
function isBearerToken(value) {
|
|
74
|
+
return /\bBearer\s+\S{20,}/.test(value);
|
|
75
|
+
}
|
|
76
|
+
/** JWT token: eyJ... header.payload.signature */
|
|
77
|
+
function isJwt(value) {
|
|
78
|
+
return /\beyJ[a-zA-Z0-9_-]{10,}\.[a-zA-Z0-9_-]{10,}\.[a-zA-Z0-9_-]{10,}\b/.test(value);
|
|
79
|
+
}
|
|
80
|
+
/** PEM-encoded private key */
|
|
81
|
+
function isPrivateKey(value) {
|
|
82
|
+
return /-----BEGIN [A-Z ]*PRIVATE KEY-----/.test(value);
|
|
83
|
+
}
|
|
84
|
+
/** Generic secret: known prefixes (xox, SG., glpat-, npm_) or long hex strings (64+ chars) */
|
|
85
|
+
function isGenericSecret(value) {
|
|
86
|
+
// Note: sk- and sk_ prefixes handled by isApiKey — not duplicated here
|
|
87
|
+
if (/\b(?:xox[bpars]-[a-zA-Z0-9-]+|SG\.[a-zA-Z0-9_-]{20,}|glpat-[a-zA-Z0-9_-]{20,}|npm_[a-zA-Z0-9]{36,})\b/.test(value)) {
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
// Long hex strings — require at least one digit and one letter to avoid false positives
|
|
91
|
+
const hexMatch = value.match(/\b[0-9a-fA-F]{64,}\b/);
|
|
92
|
+
if (!hexMatch)
|
|
93
|
+
return false;
|
|
94
|
+
const hex = hexMatch[0];
|
|
95
|
+
return /[0-9]/.test(hex) && /[a-fA-F]/.test(hex);
|
|
96
|
+
}
|
|
60
97
|
const PII_PATTERNS = [
|
|
61
98
|
{ type: "email", test: isEmail },
|
|
62
99
|
{ type: "phone", test: isPhoneNumber },
|
|
63
100
|
{ type: "ssn", test: isSSN },
|
|
64
101
|
{ type: "credit_card", test: isCreditCard },
|
|
65
102
|
{ type: "ipv4", test: isIPv4 },
|
|
103
|
+
{ type: "api_key", test: isApiKey },
|
|
104
|
+
{ type: "aws_key", test: isAwsKey },
|
|
105
|
+
{ type: "github_token", test: isGithubToken },
|
|
106
|
+
{ type: "bearer_token", test: isBearerToken },
|
|
107
|
+
{ type: "jwt", test: isJwt },
|
|
108
|
+
{ type: "private_key", test: isPrivateKey },
|
|
109
|
+
{ type: "generic_secret", test: isGenericSecret },
|
|
66
110
|
];
|
|
67
111
|
// ---------------------------------------------------------------------------
|
|
68
112
|
// Recursive scanner
|
|
@@ -110,4 +154,48 @@ function scanString(value, currentPath, types, paths) {
|
|
|
110
154
|
}
|
|
111
155
|
}
|
|
112
156
|
}
|
|
157
|
+
/**
|
|
158
|
+
* Deep-clone data and replace detected PII values with redacted placeholders.
|
|
159
|
+
* Returns both the redacted data and the detection metadata.
|
|
160
|
+
*/
|
|
161
|
+
export function redactPII(data) {
|
|
162
|
+
const detection = detectPII(data);
|
|
163
|
+
if (!detection.found) {
|
|
164
|
+
return { data, detection };
|
|
165
|
+
}
|
|
166
|
+
const redacted = redactValue(data);
|
|
167
|
+
return { data: redacted, detection };
|
|
168
|
+
}
|
|
169
|
+
/** Return matched PII type names for a string value. */
|
|
170
|
+
function matchedTypes(value) {
|
|
171
|
+
const matched = [];
|
|
172
|
+
for (const pattern of PII_PATTERNS) {
|
|
173
|
+
if (pattern.test(value)) {
|
|
174
|
+
matched.push(pattern.type);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return matched;
|
|
178
|
+
}
|
|
179
|
+
/** Recursively traverse data and replace PII strings with redacted placeholders. */
|
|
180
|
+
function redactValue(value) {
|
|
181
|
+
if (typeof value === "string") {
|
|
182
|
+
const types = matchedTypes(value);
|
|
183
|
+
if (types.length > 0) {
|
|
184
|
+
return `[REDACTED:${types.join(",")}]`;
|
|
185
|
+
}
|
|
186
|
+
return value;
|
|
187
|
+
}
|
|
188
|
+
if (Array.isArray(value)) {
|
|
189
|
+
return value.map((item) => redactValue(item));
|
|
190
|
+
}
|
|
191
|
+
if (value !== null && typeof value === "object") {
|
|
192
|
+
const record = value;
|
|
193
|
+
const result = {};
|
|
194
|
+
for (const key of Object.keys(record)) {
|
|
195
|
+
result[key] = redactValue(record[key]);
|
|
196
|
+
}
|
|
197
|
+
return result;
|
|
198
|
+
}
|
|
199
|
+
return value;
|
|
200
|
+
}
|
|
113
201
|
//# sourceMappingURL=pii.js.map
|
package/dist/policy/pii.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pii.js","sourceRoot":"","sources":["../../src/policy/pii.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;
|
|
1
|
+
{"version":3,"file":"pii.js","sourceRoot":"","sources":["../../src/policy/pii.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/errors.d.ts
CHANGED
|
@@ -36,10 +36,30 @@ export declare class AuditDegradedError extends Error {
|
|
|
36
36
|
readonly docsUrl: string;
|
|
37
37
|
constructor(reason: string);
|
|
38
38
|
}
|
|
39
|
+
export declare class CredentialAccessDeniedError extends Error {
|
|
40
|
+
readonly credentialName: string;
|
|
41
|
+
readonly reason: string;
|
|
42
|
+
readonly hint: string;
|
|
43
|
+
readonly docsUrl: string;
|
|
44
|
+
constructor(credentialName: string, reason: string);
|
|
45
|
+
}
|
|
39
46
|
export declare class VaultNotInitializedError extends Error {
|
|
40
47
|
readonly path: string;
|
|
41
48
|
readonly hint: string;
|
|
42
49
|
readonly docsUrl: string;
|
|
43
50
|
constructor(path: string);
|
|
44
51
|
}
|
|
52
|
+
export declare class SkillVerificationError extends Error {
|
|
53
|
+
readonly skillId: string;
|
|
54
|
+
readonly reason: string;
|
|
55
|
+
readonly hint: string;
|
|
56
|
+
readonly docsUrl: string;
|
|
57
|
+
constructor(skillId: string, reason: string);
|
|
58
|
+
}
|
|
59
|
+
export declare class VaultKeyMissingError extends Error {
|
|
60
|
+
readonly envVar: string;
|
|
61
|
+
readonly hint: string;
|
|
62
|
+
readonly docsUrl: string;
|
|
63
|
+
constructor(envVar: string);
|
|
64
|
+
}
|
|
45
65
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/shared/errors.ts"],"names":[],"mappings":"AAGA,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAa/D;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC3C,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,MAAM;CAU1B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,MAAM;CAU1B;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,GAAG,EAAE,MAAM;CASvB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,SAAgB,aAAa,EAAE,MAAM,CAAC;IACtC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,MAAM;CAU1B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,SAAgB,aAAa,EAAE,MAAM,CAAC;IACtC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,MAAM;CAS1B;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,IAAI,EAAE,MAAM;CASxB"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/shared/errors.ts"],"names":[],"mappings":"AAGA,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,SAAS,EAAE,MAAM,CAAC;IAClC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAa/D;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC3C,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,MAAM;CAU1B;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,MAAM;CAU1B;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,GAAG,EAAE,MAAM;CASvB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,SAAgB,aAAa,EAAE,MAAM,CAAC;IACtC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,MAAM;CAU1B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC5C,SAAgB,aAAa,EAAE,MAAM,CAAC;IACtC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,MAAM;CAS1B;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IACrD,SAAgB,cAAc,EAAE,MAAM,CAAC;IACvC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAalD;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAClD,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,IAAI,EAAE,MAAM;CASxB;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAa3C;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC9C,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,EAAE,MAAM,CAAC;gBAEpB,MAAM,EAAE,MAAM;CAW1B"}
|