indigiarmor 0.1.0
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/LICENSE +24 -0
- package/README.md +257 -0
- package/dist/client.d.ts +117 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +359 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +20 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +39 -0
- package/dist/errors.js.map +1 -0
- package/dist/guard.d.ts +17 -0
- package/dist/guard.d.ts.map +1 -0
- package/dist/guard.js +39 -0
- package/dist/guard.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware.d.ts +13 -0
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +34 -0
- package/dist/middleware.js.map +1 -0
- package/dist/next-handler.d.ts +4 -0
- package/dist/next-handler.d.ts.map +1 -0
- package/dist/next-handler.js +39 -0
- package/dist/next-handler.js.map +1 -0
- package/dist/protect.d.ts +9 -0
- package/dist/protect.d.ts.map +1 -0
- package/dist/protect.js +24 -0
- package/dist/protect.js.map +1 -0
- package/dist/types.d.ts +356 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/wrap-anthropic.d.ts +5 -0
- package/dist/wrap-anthropic.d.ts.map +1 -0
- package/dist/wrap-anthropic.js +107 -0
- package/dist/wrap-anthropic.js.map +1 -0
- package/dist/wrap-gemini.d.ts +5 -0
- package/dist/wrap-gemini.d.ts.map +1 -0
- package/dist/wrap-gemini.js +122 -0
- package/dist/wrap-gemini.js.map +1 -0
- package/dist/wrap-openai.d.ts +5 -0
- package/dist/wrap-openai.d.ts.map +1 -0
- package/dist/wrap-openai.js +106 -0
- package/dist/wrap-openai.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-handler.js","sourceRoot":"","sources":["../src/next-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAe,MAAM,YAAY,CAAC;AAEhE,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,SAAS,WAAW,CACzB,OAAgF,EAChF,UAA8B,EAAE;QAEhC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,QAAQ,CAAC;QACpD,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,UAAU,CAAC;QAE5D,OAAO,KAAK,EAAE,GAAY,EAAqB,EAAE;YAC/C,IAAI,IAA6B,CAAC;YAClC,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,EAA6B,CAAC;YAC7D,CAAC;YAAC,MAAM,CAAC;gBACP,mDAAmD;gBACnD,OAAO,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YACjC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,iCAAiC;gBACjC,OAAO,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YACjC,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAEpC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC;gBACpC,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CAAC;oBACb,KAAK,EAAE,SAAS;oBAChB,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;iBAClB,CAAC,EACF,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CACjE,CAAC;YACJ,CAAC;YAED,iEAAiE;YACjE,IAAI,CAAC,WAAW,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;gBAClC,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,OAAO,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ScanResult, ScanResponseResult, ProtectOptions, ProtectResult } from './types.js';
|
|
2
|
+
export interface ScanFn {
|
|
3
|
+
(prompt: string): Promise<ScanResult>;
|
|
4
|
+
}
|
|
5
|
+
export interface ScanResponseFn {
|
|
6
|
+
(response: string): Promise<ScanResponseResult>;
|
|
7
|
+
}
|
|
8
|
+
export declare function createProtect(scanFn: ScanFn, scanResponseFn: ScanResponseFn): <T>(prompt: string, fn: (safePrompt: string) => Promise<T>, options?: ProtectOptions) => Promise<ProtectResult<T>>;
|
|
9
|
+
//# sourceMappingURL=protect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protect.d.ts","sourceRoot":"","sources":["../src/protect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhG,MAAM,WAAW,MAAM;IACrB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACjD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,IAC5C,CAAC,EAC7B,QAAQ,MAAM,EACd,IAAI,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EACtC,UAAS,cAAmB,KAC3B,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAkC7B"}
|
package/dist/protect.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { IndigiArmorError } from './errors.js';
|
|
2
|
+
import { isSafe, resolvePrompt } from './guard.js';
|
|
3
|
+
export function createProtect(scanFn, scanResponseFn) {
|
|
4
|
+
return async function protect(prompt, fn, options = {}) {
|
|
5
|
+
const yellowStrategy = options.yellowStrategy ?? 'sanitize';
|
|
6
|
+
const inputScan = await scanFn(prompt);
|
|
7
|
+
if (!isSafe(inputScan, yellowStrategy)) {
|
|
8
|
+
throw new IndigiArmorError(inputScan.explanation || 'Prompt blocked by IndigiArmor', 'PROMPT_BLOCKED', 0);
|
|
9
|
+
}
|
|
10
|
+
const safePrompt = resolvePrompt(prompt, inputScan, yellowStrategy);
|
|
11
|
+
const output = await fn(safePrompt);
|
|
12
|
+
const result = { output, inputScan };
|
|
13
|
+
if (options.scanOutput) {
|
|
14
|
+
const text = typeof output === 'string' ? output : JSON.stringify(output);
|
|
15
|
+
const outputScan = await scanResponseFn(text);
|
|
16
|
+
result.outputScan = outputScan;
|
|
17
|
+
if (!outputScan.clean) {
|
|
18
|
+
throw new IndigiArmorError('LLM response blocked by IndigiArmor', 'RESPONSE_BLOCKED', 0);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=protect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protect.js","sourceRoot":"","sources":["../src/protect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAUnD,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,cAA8B;IAC1E,OAAO,KAAK,UAAU,OAAO,CAC3B,MAAc,EACd,EAAsC,EACtC,UAA0B,EAAE;QAE5B,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,UAAU,CAAC;QAE5D,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,gBAAgB,CACxB,SAAS,CAAC,WAAW,IAAI,+BAA+B,EACxD,gBAAgB,EAChB,CAAC,CACF,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC;QAEpC,MAAM,MAAM,GAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAEvD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC1E,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;YAE/B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;gBACtB,MAAM,IAAI,gBAAgB,CACxB,qCAAqC,EACrC,kBAAkB,EAClB,CAAC,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
export interface ScanRequest {
|
|
2
|
+
prompt: string;
|
|
3
|
+
}
|
|
4
|
+
export interface Signal {
|
|
5
|
+
domain: string;
|
|
6
|
+
type: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
confidence: number;
|
|
9
|
+
weight: number;
|
|
10
|
+
severity?: 'low' | 'medium' | 'high' | 'critical';
|
|
11
|
+
}
|
|
12
|
+
export interface ScanResult {
|
|
13
|
+
tier: 'green' | 'yellow' | 'red';
|
|
14
|
+
action: 'allow' | 'flag' | 'block';
|
|
15
|
+
risk_score: number;
|
|
16
|
+
signals: Signal[];
|
|
17
|
+
explanation: string;
|
|
18
|
+
sanitized_prompt: string | null;
|
|
19
|
+
token_id: string | null;
|
|
20
|
+
active_domains: string[];
|
|
21
|
+
latency_ms: number;
|
|
22
|
+
}
|
|
23
|
+
export interface DocumentMetadata {
|
|
24
|
+
filename?: string;
|
|
25
|
+
mime_type?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface DocumentScanRequest {
|
|
28
|
+
content: string;
|
|
29
|
+
document_metadata?: DocumentMetadata;
|
|
30
|
+
metadata?: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
export interface ScanResponseRequest {
|
|
33
|
+
response: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ScanResponseResult {
|
|
36
|
+
clean: boolean;
|
|
37
|
+
signals: Signal[];
|
|
38
|
+
sanitized_response: string | null;
|
|
39
|
+
}
|
|
40
|
+
export interface ConfirmResult {
|
|
41
|
+
confirmed: boolean;
|
|
42
|
+
sanitized_prompt?: string | null;
|
|
43
|
+
error?: string;
|
|
44
|
+
}
|
|
45
|
+
export type DetectionDomain = 'pii' | 'education' | 'cultural' | 'reidentification' | 'injection' | 'custom';
|
|
46
|
+
export interface Policy {
|
|
47
|
+
id: string;
|
|
48
|
+
organization_id: string;
|
|
49
|
+
name: string;
|
|
50
|
+
enabled: boolean;
|
|
51
|
+
detection_categories: DetectionDomain[];
|
|
52
|
+
action: string;
|
|
53
|
+
sensitivity_threshold: number;
|
|
54
|
+
custom_rules: Record<string, unknown>;
|
|
55
|
+
is_default: boolean;
|
|
56
|
+
created_at: string;
|
|
57
|
+
updated_at: string;
|
|
58
|
+
}
|
|
59
|
+
export interface CreatePolicyRequest {
|
|
60
|
+
name: string;
|
|
61
|
+
enabled?: boolean;
|
|
62
|
+
detection_categories?: DetectionDomain[];
|
|
63
|
+
action?: string;
|
|
64
|
+
sensitivity_threshold?: number;
|
|
65
|
+
custom_rules?: Record<string, unknown>;
|
|
66
|
+
is_default?: boolean;
|
|
67
|
+
}
|
|
68
|
+
export interface UpdatePolicyRequest {
|
|
69
|
+
name?: string;
|
|
70
|
+
enabled?: boolean;
|
|
71
|
+
detection_categories?: DetectionDomain[];
|
|
72
|
+
action?: string;
|
|
73
|
+
sensitivity_threshold?: number;
|
|
74
|
+
domain_thresholds?: Record<string, number>;
|
|
75
|
+
custom_rules?: Record<string, unknown>;
|
|
76
|
+
is_default?: boolean;
|
|
77
|
+
}
|
|
78
|
+
export interface PolicyTemplate {
|
|
79
|
+
id: string;
|
|
80
|
+
name: string;
|
|
81
|
+
template_type: string | null;
|
|
82
|
+
detection_categories: DetectionDomain[];
|
|
83
|
+
action: string;
|
|
84
|
+
sensitivity_threshold: number;
|
|
85
|
+
}
|
|
86
|
+
export interface CreateFromTemplateRequest {
|
|
87
|
+
template_id: string;
|
|
88
|
+
name?: string;
|
|
89
|
+
is_default?: boolean;
|
|
90
|
+
}
|
|
91
|
+
export interface ApiKey {
|
|
92
|
+
id: string;
|
|
93
|
+
name: string;
|
|
94
|
+
key_prefix: string;
|
|
95
|
+
rate_limit_per_minute: number;
|
|
96
|
+
enabled: boolean;
|
|
97
|
+
last_used_at: string | null;
|
|
98
|
+
created_at: string;
|
|
99
|
+
expires_at: string | null;
|
|
100
|
+
}
|
|
101
|
+
export interface CreateKeyRequest {
|
|
102
|
+
name: string;
|
|
103
|
+
rate_limit_per_minute?: number;
|
|
104
|
+
expires_at?: string | null;
|
|
105
|
+
}
|
|
106
|
+
export interface CreateKeyResult {
|
|
107
|
+
key: ApiKey;
|
|
108
|
+
raw_key: string;
|
|
109
|
+
warning: string;
|
|
110
|
+
}
|
|
111
|
+
export interface UsagePeriod {
|
|
112
|
+
organization_id: string;
|
|
113
|
+
period_start: string;
|
|
114
|
+
period_end: string;
|
|
115
|
+
scan_count: number;
|
|
116
|
+
green_count: number;
|
|
117
|
+
yellow_count: number;
|
|
118
|
+
red_count: number;
|
|
119
|
+
}
|
|
120
|
+
export interface UsageResult {
|
|
121
|
+
periods: UsagePeriod[];
|
|
122
|
+
totals: {
|
|
123
|
+
scan_count: number;
|
|
124
|
+
green_count: number;
|
|
125
|
+
yellow_count: number;
|
|
126
|
+
red_count: number;
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
export interface UsageQuery {
|
|
130
|
+
from?: string;
|
|
131
|
+
to?: string;
|
|
132
|
+
}
|
|
133
|
+
export interface AuditLog {
|
|
134
|
+
id: string;
|
|
135
|
+
organization_id: string;
|
|
136
|
+
api_key_id: string | null;
|
|
137
|
+
tier: string;
|
|
138
|
+
action: string;
|
|
139
|
+
risk_score: number;
|
|
140
|
+
signal_count: number;
|
|
141
|
+
domains: string[];
|
|
142
|
+
signals: Signal[];
|
|
143
|
+
latency_ms: number;
|
|
144
|
+
requesting_ip: string | null;
|
|
145
|
+
created_at: string;
|
|
146
|
+
}
|
|
147
|
+
export interface AuditQuery {
|
|
148
|
+
limit?: number;
|
|
149
|
+
offset?: number;
|
|
150
|
+
tier?: 'green' | 'yellow' | 'red';
|
|
151
|
+
from?: string;
|
|
152
|
+
to?: string;
|
|
153
|
+
}
|
|
154
|
+
export interface AuditListResult {
|
|
155
|
+
logs: AuditLog[];
|
|
156
|
+
total: number;
|
|
157
|
+
limit: number;
|
|
158
|
+
offset: number;
|
|
159
|
+
}
|
|
160
|
+
export interface AllowlistEntry {
|
|
161
|
+
id: string;
|
|
162
|
+
organization_id: string;
|
|
163
|
+
term: string;
|
|
164
|
+
domain: DetectionDomain | null;
|
|
165
|
+
created_at: string;
|
|
166
|
+
}
|
|
167
|
+
export interface CreateAllowlistRequest {
|
|
168
|
+
term: string;
|
|
169
|
+
domain?: DetectionDomain;
|
|
170
|
+
}
|
|
171
|
+
/** Callback hooks invoked after every scan() call based on tier. */
|
|
172
|
+
export interface IndigiArmorCallbacks {
|
|
173
|
+
/** Called when scan result is red (blocked). */
|
|
174
|
+
onBlock?: (result: ScanResult) => void | Promise<void>;
|
|
175
|
+
/** Called when scan result is yellow (flagged). */
|
|
176
|
+
onFlag?: (result: ScanResult) => void | Promise<void>;
|
|
177
|
+
/** Called when scan result is green (allowed). */
|
|
178
|
+
onAllow?: (result: ScanResult) => void | Promise<void>;
|
|
179
|
+
}
|
|
180
|
+
export interface IndigiArmorOptions {
|
|
181
|
+
/** Base URL of the IndigiArmor API (default: https://indigiarmor.com) */
|
|
182
|
+
baseUrl?: string;
|
|
183
|
+
/** Custom fetch implementation (default: globalThis.fetch) */
|
|
184
|
+
fetch?: typeof globalThis.fetch;
|
|
185
|
+
/** Request timeout in milliseconds (default: 30000) */
|
|
186
|
+
timeout?: number;
|
|
187
|
+
/** Lifecycle callbacks triggered after each scan. */
|
|
188
|
+
callbacks?: IndigiArmorCallbacks;
|
|
189
|
+
}
|
|
190
|
+
/** Strategy for handling yellow (flagged) scan results. */
|
|
191
|
+
export type YellowStrategy = 'block' | 'allow' | 'sanitize';
|
|
192
|
+
export interface GuardOptions {
|
|
193
|
+
/** How to handle yellow-tier results. Default: 'sanitize'. */
|
|
194
|
+
yellowStrategy?: YellowStrategy;
|
|
195
|
+
}
|
|
196
|
+
export interface GuardResult {
|
|
197
|
+
/** Whether the prompt is safe to use. */
|
|
198
|
+
safe: boolean;
|
|
199
|
+
/** The prompt to use (sanitized if applicable, original otherwise). */
|
|
200
|
+
prompt: string;
|
|
201
|
+
/** The full scan result. */
|
|
202
|
+
result: ScanResult;
|
|
203
|
+
}
|
|
204
|
+
export interface ProtectOptions {
|
|
205
|
+
/** How to handle yellow-tier results. Default: 'sanitize'. */
|
|
206
|
+
yellowStrategy?: YellowStrategy;
|
|
207
|
+
/** Whether to scan the function's output. Default: false. */
|
|
208
|
+
scanOutput?: boolean;
|
|
209
|
+
}
|
|
210
|
+
export interface ProtectResult<T> {
|
|
211
|
+
/** The return value of the wrapped function. */
|
|
212
|
+
output: T;
|
|
213
|
+
/** The input scan result. */
|
|
214
|
+
inputScan: ScanResult;
|
|
215
|
+
/** The output scan result (only present if scanOutput was true). */
|
|
216
|
+
outputScan?: ScanResponseResult;
|
|
217
|
+
}
|
|
218
|
+
export interface MiddlewareOptions {
|
|
219
|
+
/** The request body field to read the prompt from. Default: 'prompt'. */
|
|
220
|
+
promptField?: string;
|
|
221
|
+
/** How to handle yellow-tier results. Default: 'sanitize'. */
|
|
222
|
+
yellowStrategy?: YellowStrategy;
|
|
223
|
+
}
|
|
224
|
+
export interface NextHandlerOptions {
|
|
225
|
+
/** The request body field to read the prompt from. Default: 'prompt'. */
|
|
226
|
+
promptField?: string;
|
|
227
|
+
/** How to handle yellow-tier results. Default: 'sanitize'. */
|
|
228
|
+
yellowStrategy?: YellowStrategy;
|
|
229
|
+
}
|
|
230
|
+
export interface WrapLLMOptions {
|
|
231
|
+
/** How to handle yellow-tier results. Default: 'sanitize'. */
|
|
232
|
+
yellowStrategy?: YellowStrategy;
|
|
233
|
+
/** Whether to scan non-streaming LLM output. Default: false. */
|
|
234
|
+
scanOutput?: boolean;
|
|
235
|
+
}
|
|
236
|
+
export interface Webhook {
|
|
237
|
+
id: string;
|
|
238
|
+
url: string;
|
|
239
|
+
events: string[];
|
|
240
|
+
format: string;
|
|
241
|
+
enabled: boolean;
|
|
242
|
+
failure_count: number;
|
|
243
|
+
last_triggered_at: string | null;
|
|
244
|
+
created_at: string;
|
|
245
|
+
}
|
|
246
|
+
export interface CreateWebhookRequest {
|
|
247
|
+
url: string;
|
|
248
|
+
events?: string[];
|
|
249
|
+
format?: 'json' | 'cef';
|
|
250
|
+
}
|
|
251
|
+
export interface UpdateWebhookRequest {
|
|
252
|
+
url?: string;
|
|
253
|
+
events?: string[];
|
|
254
|
+
format?: string;
|
|
255
|
+
enabled?: boolean;
|
|
256
|
+
}
|
|
257
|
+
export interface Team {
|
|
258
|
+
id: string;
|
|
259
|
+
name: string;
|
|
260
|
+
organization_id: string;
|
|
261
|
+
created_at: string;
|
|
262
|
+
}
|
|
263
|
+
export interface CreateTeamRequest {
|
|
264
|
+
name: string;
|
|
265
|
+
}
|
|
266
|
+
export interface TeamMember {
|
|
267
|
+
id: string;
|
|
268
|
+
full_name: string;
|
|
269
|
+
email: string;
|
|
270
|
+
role: string;
|
|
271
|
+
}
|
|
272
|
+
export interface CustomEntity {
|
|
273
|
+
id: string;
|
|
274
|
+
name: string;
|
|
275
|
+
domain: string;
|
|
276
|
+
patterns: string[];
|
|
277
|
+
keywords: string[];
|
|
278
|
+
weight: number;
|
|
279
|
+
enabled: boolean;
|
|
280
|
+
created_at: string;
|
|
281
|
+
}
|
|
282
|
+
export interface CreateCustomEntityRequest {
|
|
283
|
+
name: string;
|
|
284
|
+
domain?: string;
|
|
285
|
+
patterns?: string[];
|
|
286
|
+
keywords?: string[];
|
|
287
|
+
weight?: number;
|
|
288
|
+
}
|
|
289
|
+
export interface UpdateCustomEntityRequest {
|
|
290
|
+
name?: string;
|
|
291
|
+
domain?: string;
|
|
292
|
+
patterns?: string[];
|
|
293
|
+
keywords?: string[];
|
|
294
|
+
weight?: number;
|
|
295
|
+
enabled?: boolean;
|
|
296
|
+
}
|
|
297
|
+
export interface AuditExportQuery {
|
|
298
|
+
from: string;
|
|
299
|
+
to: string;
|
|
300
|
+
format?: 'csv' | 'json';
|
|
301
|
+
domain?: string;
|
|
302
|
+
}
|
|
303
|
+
export interface ComplianceReport {
|
|
304
|
+
period: {
|
|
305
|
+
from: string;
|
|
306
|
+
to: string;
|
|
307
|
+
};
|
|
308
|
+
total_scans: number;
|
|
309
|
+
tier_breakdown: Record<string, number>;
|
|
310
|
+
domain_distribution: Record<string, number>;
|
|
311
|
+
signal_frequency: Record<string, number>;
|
|
312
|
+
average_risk_score: number;
|
|
313
|
+
average_latency_ms: number;
|
|
314
|
+
block_rate: number;
|
|
315
|
+
}
|
|
316
|
+
export interface AttackCase {
|
|
317
|
+
id: string;
|
|
318
|
+
name: string;
|
|
319
|
+
domain: string;
|
|
320
|
+
expected_tier: string;
|
|
321
|
+
description: string;
|
|
322
|
+
}
|
|
323
|
+
export interface SimulationResult {
|
|
324
|
+
id: string;
|
|
325
|
+
name: string;
|
|
326
|
+
domain: string;
|
|
327
|
+
expected_tier: string;
|
|
328
|
+
actual_tier: string;
|
|
329
|
+
detected: boolean;
|
|
330
|
+
tier_match: boolean;
|
|
331
|
+
risk_score: number;
|
|
332
|
+
signals_count: number;
|
|
333
|
+
}
|
|
334
|
+
export interface SimulationSummary {
|
|
335
|
+
total_attacks: number;
|
|
336
|
+
detected: number;
|
|
337
|
+
missed: number;
|
|
338
|
+
detection_rate: number;
|
|
339
|
+
domain_coverage: Record<string, {
|
|
340
|
+
total: number;
|
|
341
|
+
detected: number;
|
|
342
|
+
rate: number;
|
|
343
|
+
}>;
|
|
344
|
+
}
|
|
345
|
+
export interface SimulationRunResult {
|
|
346
|
+
summary: SimulationSummary;
|
|
347
|
+
results: SimulationResult[];
|
|
348
|
+
}
|
|
349
|
+
export interface ErrorEnvelope {
|
|
350
|
+
error: {
|
|
351
|
+
code: string;
|
|
352
|
+
message: string;
|
|
353
|
+
request_id?: string;
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,iDAAiD"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { WrapLLMOptions } from './types.js';
|
|
2
|
+
import { type ScanFn } from './guard.js';
|
|
3
|
+
import type { ScanResponseFn } from './protect.js';
|
|
4
|
+
export declare function createWrapAnthropic(scanFn: ScanFn, scanResponseFn: ScanResponseFn): <T extends object>(client: T, options?: WrapLLMOptions) => T;
|
|
5
|
+
//# sourceMappingURL=wrap-anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap-anthropic.d.ts","sourceRoot":"","sources":["../src/wrap-anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,cAAc,EAAE,MAAM,YAAY,CAAC;AAErE,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAiCnD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,IAClD,CAAC,SAAS,MAAM,EAAE,QAAQ,CAAC,EAAE,UAAS,cAAmB,KAAG,CAAC,CA0F5F"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { IndigiArmorError } from './errors.js';
|
|
2
|
+
import { isSafe, resolvePrompt } from './guard.js';
|
|
3
|
+
/** Extract text from Anthropic message content (string or content block array). */
|
|
4
|
+
function extractText(content) {
|
|
5
|
+
if (typeof content === 'string')
|
|
6
|
+
return content;
|
|
7
|
+
if (Array.isArray(content)) {
|
|
8
|
+
const texts = [];
|
|
9
|
+
for (const block of content) {
|
|
10
|
+
if (block && typeof block === 'object' && 'type' in block && block.type === 'text' && 'text' in block) {
|
|
11
|
+
texts.push(block.text);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return texts.length > 0 ? texts.join('\n') : null;
|
|
15
|
+
}
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
/** Replace text content, preserving structure. */
|
|
19
|
+
function replaceContent(content, newText) {
|
|
20
|
+
if (typeof content === 'string')
|
|
21
|
+
return newText;
|
|
22
|
+
if (Array.isArray(content)) {
|
|
23
|
+
let replaced = false;
|
|
24
|
+
return content.map((block) => {
|
|
25
|
+
if (!replaced && block && typeof block === 'object' && 'type' in block && block.type === 'text') {
|
|
26
|
+
replaced = true;
|
|
27
|
+
return { ...block, text: newText };
|
|
28
|
+
}
|
|
29
|
+
return block;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return content;
|
|
33
|
+
}
|
|
34
|
+
export function createWrapAnthropic(scanFn, scanResponseFn) {
|
|
35
|
+
return function wrapAnthropic(client, options = {}) {
|
|
36
|
+
const yellowStrategy = options.yellowStrategy ?? 'sanitize';
|
|
37
|
+
const scanOutput = options.scanOutput ?? false;
|
|
38
|
+
// Proxy chain: client -> messages -> create()
|
|
39
|
+
return new Proxy(client, {
|
|
40
|
+
get(target, prop, receiver) {
|
|
41
|
+
if (prop === 'messages') {
|
|
42
|
+
const messages = Reflect.get(target, prop, receiver);
|
|
43
|
+
return new Proxy(messages, {
|
|
44
|
+
get(msgTarget, msgProp, msgReceiver) {
|
|
45
|
+
if (msgProp === 'create') {
|
|
46
|
+
const originalCreate = Reflect.get(msgTarget, msgProp, msgReceiver);
|
|
47
|
+
return async function interceptedCreate(params) {
|
|
48
|
+
// Scan system parameter (Anthropic-specific top-level field)
|
|
49
|
+
if (typeof params.system === 'string' && params.system) {
|
|
50
|
+
const sysResult = await scanFn(params.system);
|
|
51
|
+
if (!isSafe(sysResult, yellowStrategy)) {
|
|
52
|
+
throw new IndigiArmorError(sysResult.explanation || 'System prompt blocked by IndigiArmor', 'PROMPT_BLOCKED', 0);
|
|
53
|
+
}
|
|
54
|
+
const safeSystem = resolvePrompt(params.system, sysResult, yellowStrategy);
|
|
55
|
+
if (safeSystem !== params.system) {
|
|
56
|
+
params = { ...params, system: safeSystem };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Scan user messages
|
|
60
|
+
const msgList = params.messages;
|
|
61
|
+
if (msgList) {
|
|
62
|
+
const scannedMessages = [...msgList];
|
|
63
|
+
for (let i = 0; i < scannedMessages.length; i++) {
|
|
64
|
+
const msg = scannedMessages[i];
|
|
65
|
+
if (msg.role !== 'user')
|
|
66
|
+
continue;
|
|
67
|
+
const text = extractText(msg.content);
|
|
68
|
+
if (!text)
|
|
69
|
+
continue;
|
|
70
|
+
const result = await scanFn(text);
|
|
71
|
+
if (!isSafe(result, yellowStrategy)) {
|
|
72
|
+
throw new IndigiArmorError(result.explanation || 'Prompt blocked by IndigiArmor', 'PROMPT_BLOCKED', 0);
|
|
73
|
+
}
|
|
74
|
+
const safeText = resolvePrompt(text, result, yellowStrategy);
|
|
75
|
+
if (safeText !== text) {
|
|
76
|
+
scannedMessages[i] = { ...msg, content: replaceContent(msg.content, safeText) };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
params = { ...params, messages: scannedMessages };
|
|
80
|
+
}
|
|
81
|
+
const response = await originalCreate.call(msgTarget, params);
|
|
82
|
+
if (scanOutput && response && typeof response === 'object') {
|
|
83
|
+
const content = response.content;
|
|
84
|
+
if (content) {
|
|
85
|
+
for (const block of content) {
|
|
86
|
+
if (block.type === 'text' && typeof block.text === 'string' && block.text) {
|
|
87
|
+
const outputScan = await scanResponseFn(block.text);
|
|
88
|
+
if (!outputScan.clean) {
|
|
89
|
+
throw new IndigiArmorError('LLM response blocked by IndigiArmor', 'RESPONSE_BLOCKED', 0);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return response;
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return Reflect.get(msgTarget, msgProp, msgReceiver);
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return Reflect.get(target, prop, receiver);
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=wrap-anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap-anthropic.js","sourceRoot":"","sources":["../src/wrap-anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { WrapLLMOptions } from './types.js';
|
|
2
|
+
import { type ScanFn } from './guard.js';
|
|
3
|
+
import type { ScanResponseFn } from './protect.js';
|
|
4
|
+
export declare function createWrapGemini(scanFn: ScanFn, scanResponseFn: ScanResponseFn): <T extends object>(client: T, options?: WrapLLMOptions) => T;
|
|
5
|
+
//# sourceMappingURL=wrap-gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrap-gemini.d.ts","sourceRoot":"","sources":["../src/wrap-gemini.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAsB,cAAc,EAAE,MAAM,YAAY,CAAC;AAErE,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA8DnD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,IAClD,CAAC,SAAS,MAAM,EAAE,QAAQ,CAAC,EAAE,UAAS,cAAmB,KAAG,CAAC,CAgFzF"}
|