@yan162/changewayguard 6.8.26 → 6.8.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/gateway/dist/activity.d.ts +52 -0
  2. package/dist/gateway/dist/activity.d.ts.map +1 -0
  3. package/dist/gateway/dist/activity.js +111 -0
  4. package/dist/gateway/dist/activity.js.map +1 -0
  5. package/dist/gateway/dist/config.d.ts +50 -0
  6. package/dist/gateway/dist/config.d.ts.map +1 -0
  7. package/dist/gateway/dist/config.js +200 -0
  8. package/dist/gateway/dist/config.js.map +1 -0
  9. package/dist/gateway/dist/handlers/anthropic.d.ts +12 -0
  10. package/dist/gateway/dist/handlers/anthropic.d.ts.map +1 -0
  11. package/dist/gateway/dist/handlers/anthropic.js +254 -0
  12. package/dist/gateway/dist/handlers/anthropic.js.map +1 -0
  13. package/dist/gateway/dist/handlers/gemini.d.ts +12 -0
  14. package/dist/gateway/dist/handlers/gemini.d.ts.map +1 -0
  15. package/dist/gateway/dist/handlers/gemini.js +101 -0
  16. package/dist/gateway/dist/handlers/gemini.js.map +1 -0
  17. package/dist/gateway/dist/handlers/models.d.ts +4 -0
  18. package/dist/gateway/dist/handlers/models.d.ts.map +1 -0
  19. package/dist/gateway/dist/handlers/models.js +36 -0
  20. package/dist/gateway/dist/handlers/models.js.map +1 -0
  21. package/dist/gateway/dist/handlers/openai.d.ts +16 -0
  22. package/dist/gateway/dist/handlers/openai.d.ts.map +1 -0
  23. package/dist/gateway/dist/handlers/openai.js +254 -0
  24. package/dist/gateway/dist/handlers/openai.js.map +1 -0
  25. package/dist/gateway/dist/index.d.ts +27 -0
  26. package/dist/gateway/dist/index.d.ts.map +1 -0
  27. package/dist/gateway/dist/index.js +290 -0
  28. package/dist/gateway/dist/index.js.map +1 -0
  29. package/dist/gateway/dist/mapping-store.d.ts +38 -0
  30. package/dist/gateway/dist/mapping-store.d.ts.map +1 -0
  31. package/dist/gateway/dist/mapping-store.js +74 -0
  32. package/dist/gateway/dist/mapping-store.js.map +1 -0
  33. package/dist/gateway/dist/restorer.d.ts +63 -0
  34. package/dist/gateway/dist/restorer.d.ts.map +1 -0
  35. package/dist/gateway/dist/restorer.js +284 -0
  36. package/dist/gateway/dist/restorer.js.map +1 -0
  37. package/dist/gateway/dist/sanitizer.d.ts +17 -0
  38. package/dist/gateway/dist/sanitizer.d.ts.map +1 -0
  39. package/dist/gateway/dist/sanitizer.js +228 -0
  40. package/dist/gateway/dist/sanitizer.js.map +1 -0
  41. package/dist/gateway/dist/types.d.ts +53 -0
  42. package/dist/gateway/dist/types.d.ts.map +1 -0
  43. package/dist/gateway/dist/types.js +5 -0
  44. package/dist/gateway/dist/types.js.map +1 -0
  45. package/package.json +1 -1
@@ -0,0 +1,228 @@
1
+ /**
2
+ * AI Security Gateway - Content Sanitizer
3
+ *
4
+ * Sanitizes sensitive data in a single request-response cycle.
5
+ * Placeholder format: __PII_<ENTITY_TYPE>_<SERIAL_ID>__
6
+ */
7
+ // =============================================================================
8
+ // Detection Patterns
9
+ // =============================================================================
10
+ const ENTITY_PATTERNS = [
11
+ // PEM Private Keys
12
+ {
13
+ type: "PRIVATE_KEY",
14
+ pattern: /-----BEGIN (?:OPENSSH |RSA |EC |DSA )?PRIVATE KEY-----[\s\S]*?-----END (?:OPENSSH |RSA |EC |DSA )?PRIVATE KEY-----/g,
15
+ score: 0.95,
16
+ },
17
+ // Email addresses
18
+ {
19
+ type: "EMAIL_ADDRESS",
20
+ pattern: /[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}/g,
21
+ score: 0.90,
22
+ },
23
+ // URLs
24
+ {
25
+ type: "URL_ADDRESS",
26
+ pattern: /https?:\/\/[A-Za-z0-9._~:/?#\[\]@!$&'()*+,;=%-]+/g,
27
+ score: 0.80,
28
+ },
29
+ // Known API key prefixes
30
+ {
31
+ type: "API_KEY",
32
+ pattern: /\b(?:sk-[A-Za-z0-9]{20,}|sk_(?:live|test)_[A-Za-z0-9]{20,}|pk_(?:live|test)_[A-Za-z0-9]{20,}|ghp_[A-Za-z0-9]{36,}|gho_[A-Za-z0-9]{36,}|github_pat_[A-Za-z0-9_]{22,}|AKIA[A-Z0-9]{16}|xox[baprs]-[A-Za-z0-9-]+|SG\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+|hf_[A-Za-z0-9]{30,})\b/g,
33
+ score: 0.90,
34
+ },
35
+ // Bearer tokens
36
+ {
37
+ type: "API_KEY",
38
+ pattern: /Bearer\s+[A-Za-z0-9\-_.~+/]{20,}={0,3}/g,
39
+ score: 0.85,
40
+ },
41
+ // Hex private keys (64 hex chars)
42
+ {
43
+ type: "PRIVATE_KEY",
44
+ pattern: /\b[0-9a-fA-F]{64}\b/g,
45
+ score: 0.75,
46
+ },
47
+ // Labeled password patterns
48
+ {
49
+ type: "PASSWORD",
50
+ pattern: /(?:password|passwd|pwd|pass|passcode)\s*[:=]\s*["']?(\S+)["']?/gi,
51
+ score: 0.80,
52
+ captureGroup: 1,
53
+ },
54
+ // Labeled API key patterns
55
+ {
56
+ type: "API_KEY",
57
+ pattern: /(?:api[_-]?key|apikey|secret[_-]?key|access[_-]?token|auth[_-]?token)\s*[:=]\s*["']?([A-Za-z0-9\-_.~+/]{16,})["']?/gi,
58
+ score: 0.85,
59
+ captureGroup: 1,
60
+ },
61
+ // Phone numbers
62
+ {
63
+ type: "PHONE_NUMBER",
64
+ pattern: /\+?\d{1,3}[-.\s]?\(?\d{2,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{3,4}/g,
65
+ score: 0.70,
66
+ },
67
+ // Credit card numbers
68
+ {
69
+ type: "CREDIT_CARD",
70
+ pattern: /\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b/g,
71
+ score: 0.85,
72
+ },
73
+ // Bank account numbers
74
+ {
75
+ type: "BANK_NUMBER",
76
+ pattern: /\b\d{12,19}\b/g,
77
+ score: 0.60,
78
+ },
79
+ // SSN
80
+ {
81
+ type: "SSN",
82
+ pattern: /\b\d{3}-\d{2}-\d{4}\b/g,
83
+ score: 0.85,
84
+ },
85
+ // IP addresses
86
+ {
87
+ type: "IP_ADDRESS",
88
+ pattern: /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g,
89
+ score: 0.70,
90
+ },
91
+ // Labeled verification codes
92
+ {
93
+ type: "VERIFICATION_CODE",
94
+ pattern: /(?:verification\s*code|verify\s*code|otp|2fa\s*code|auth(?:entication)?\s*code)\s*[:=\-]?\s*([A-Za-z0-9]{4,12})/gi,
95
+ score: 0.80,
96
+ captureGroup: 1,
97
+ },
98
+ ];
99
+ function collectMatches(content) {
100
+ const matches = [];
101
+ for (const entity of ENTITY_PATTERNS) {
102
+ entity.pattern.lastIndex = 0;
103
+ let m;
104
+ while ((m = entity.pattern.exec(content)) !== null) {
105
+ let matchedText;
106
+ let start;
107
+ if (entity.captureGroup !== undefined && m[entity.captureGroup]) {
108
+ matchedText = m[entity.captureGroup];
109
+ start = m.index + m[0].indexOf(matchedText);
110
+ }
111
+ else {
112
+ matchedText = m[0];
113
+ start = m.index;
114
+ }
115
+ matches.push({
116
+ originalText: matchedText,
117
+ type: entity.type,
118
+ score: entity.score,
119
+ start,
120
+ end: start + matchedText.length,
121
+ });
122
+ }
123
+ }
124
+ return matches;
125
+ }
126
+ // =============================================================================
127
+ // Span Merging
128
+ // =============================================================================
129
+ function mergeSpans(matches) {
130
+ if (matches.length === 0)
131
+ return [];
132
+ matches.sort((a, b) => {
133
+ if (a.start !== b.start)
134
+ return a.start - b.start;
135
+ const lenDiff = (b.end - b.start) - (a.end - a.start);
136
+ if (lenDiff !== 0)
137
+ return lenDiff;
138
+ return b.score - a.score;
139
+ });
140
+ const merged = [];
141
+ let current = matches[0];
142
+ for (let i = 1; i < matches.length; i++) {
143
+ const next = matches[i];
144
+ if (next.start < current.end) {
145
+ const currentLen = current.end - current.start;
146
+ const nextLen = next.end - next.start;
147
+ if (next.score > current.score || (next.score === current.score && nextLen > currentLen)) {
148
+ current = next;
149
+ }
150
+ }
151
+ else {
152
+ merged.push(current);
153
+ current = next;
154
+ }
155
+ }
156
+ merged.push(current);
157
+ return merged;
158
+ }
159
+ // =============================================================================
160
+ // Text Sanitization
161
+ // =============================================================================
162
+ function sanitizeText(text, mappingTable, typeCounters) {
163
+ const matches = collectMatches(text);
164
+ if (matches.length === 0)
165
+ return text;
166
+ const merged = mergeSpans(matches);
167
+ const textToPlaceholder = new Map();
168
+ for (const match of merged) {
169
+ if (!textToPlaceholder.has(match.originalText)) {
170
+ const counter = (typeCounters.get(match.type) ?? 0) + 1;
171
+ typeCounters.set(match.type, counter);
172
+ const paddedId = counter.toString().padStart(8, "0");
173
+ const placeholder = `__PII_${match.type}_${paddedId}__`;
174
+ textToPlaceholder.set(match.originalText, placeholder);
175
+ mappingTable.set(placeholder, match.originalText);
176
+ }
177
+ }
178
+ let sanitized = text;
179
+ const sortedMatches = [...merged].sort((a, b) => b.start - a.start);
180
+ for (const match of sortedMatches) {
181
+ const placeholder = textToPlaceholder.get(match.originalText);
182
+ sanitized = sanitized.slice(0, match.start) + placeholder + sanitized.slice(match.end);
183
+ }
184
+ return sanitized;
185
+ }
186
+ // =============================================================================
187
+ // Recursive Sanitization
188
+ // =============================================================================
189
+ function sanitizeValue(value, mappingTable, typeCounters) {
190
+ if (typeof value === "string") {
191
+ return sanitizeText(value, mappingTable, typeCounters);
192
+ }
193
+ if (Array.isArray(value)) {
194
+ return value.map((item) => sanitizeValue(item, mappingTable, typeCounters));
195
+ }
196
+ if (value !== null && typeof value === "object") {
197
+ const sanitized = {};
198
+ for (const [key, val] of Object.entries(value)) {
199
+ sanitized[key] = sanitizeValue(val, mappingTable, typeCounters);
200
+ }
201
+ return sanitized;
202
+ }
203
+ return value;
204
+ }
205
+ // =============================================================================
206
+ // Public API
207
+ // =============================================================================
208
+ /**
209
+ * Sanitize any content (messages array, object, string)
210
+ * Returns sanitized content and mapping table for restoration
211
+ */
212
+ export function sanitize(content) {
213
+ const mappingTable = new Map();
214
+ const typeCounters = new Map();
215
+ const sanitized = sanitizeValue(content, mappingTable, typeCounters);
216
+ return {
217
+ sanitized,
218
+ mappingTable,
219
+ redactionCount: mappingTable.size,
220
+ };
221
+ }
222
+ /**
223
+ * Sanitize messages array (common case for LLM APIs)
224
+ */
225
+ export function sanitizeMessages(messages) {
226
+ return sanitize(messages);
227
+ }
228
+ //# sourceMappingURL=sanitizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../src/sanitizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * AI Security Gateway types
3
+ */
4
+ export type MappingTable = Map<string, string>;
5
+ export type SanitizeResult = {
6
+ sanitized: any;
7
+ mappingTable: MappingTable;
8
+ redactionCount: number;
9
+ };
10
+ export type ApiType = "anthropic" | "openai" | "gemini";
11
+ export type BackendConfig = {
12
+ baseUrl: string;
13
+ apiKey: string;
14
+ type?: ApiType;
15
+ pathPrefix?: string;
16
+ models?: string[];
17
+ referer?: string;
18
+ title?: string;
19
+ };
20
+ export type GatewayConfig = {
21
+ port: number;
22
+ backends: {
23
+ [name: string]: BackendConfig;
24
+ };
25
+ routing?: {
26
+ [path: string]: string;
27
+ };
28
+ defaultBackends?: {
29
+ anthropic?: string;
30
+ openai?: string;
31
+ gemini?: string;
32
+ };
33
+ };
34
+ export type EntityMatch = {
35
+ originalText: string;
36
+ category: string;
37
+ placeholder: string;
38
+ };
39
+ export type GatewayActivityEvent = {
40
+ id: string;
41
+ timestamp: string;
42
+ requestId: string;
43
+ type: "sanitize" | "restore";
44
+ direction: "request" | "response";
45
+ backend: string;
46
+ endpoint: string;
47
+ model?: string;
48
+ redactionCount: number;
49
+ categories: Record<string, number>;
50
+ durationMs?: number;
51
+ };
52
+ export type ActivityListener = (event: GatewayActivityEvent) => void;
53
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAG/C,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,GAAG,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAGF,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAGxD,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE;QACR,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC;KAC/B,CAAC;IAEF,OAAO,CAAC,EAAE;QACR,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,CAAC;IAEF,eAAe,CAAC,EAAE;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAGF,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAGF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAGF,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * AI Security Gateway types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yan162/changewayguard",
3
- "version": "6.8.26",
3
+ "version": "6.8.27",
4
4
  "description": "AI agent security plugin for OpenClaw: prompt injection detection, PII sanitization, and monitoring dashboard",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",