@congzhen/changewayguard 6.8.12
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 +21 -0
- package/README.md +270 -0
- package/dashboard-dist/api/104.index.js +1420 -0
- package/dashboard-dist/api/104.index.js.map +1 -0
- package/dashboard-dist/api/113.index.js +496 -0
- package/dashboard-dist/api/113.index.js.map +1 -0
- package/dashboard-dist/api/18.index.js +67 -0
- package/dashboard-dist/api/18.index.js.map +1 -0
- package/dashboard-dist/api/217.index.js +44 -0
- package/dashboard-dist/api/217.index.js.map +1 -0
- package/dashboard-dist/api/222.index.js +90 -0
- package/dashboard-dist/api/222.index.js.map +1 -0
- package/dashboard-dist/api/25.index.js +3562 -0
- package/dashboard-dist/api/25.index.js.map +1 -0
- package/dashboard-dist/api/280.index.js +206 -0
- package/dashboard-dist/api/280.index.js.map +1 -0
- package/dashboard-dist/api/369.index.js +115 -0
- package/dashboard-dist/api/369.index.js.map +1 -0
- package/dashboard-dist/api/377.index.js +1176 -0
- package/dashboard-dist/api/377.index.js.map +1 -0
- package/dashboard-dist/api/411.index.js +4250 -0
- package/dashboard-dist/api/411.index.js.map +1 -0
- package/dashboard-dist/api/424.index.js +135 -0
- package/dashboard-dist/api/424.index.js.map +1 -0
- package/dashboard-dist/api/573.index.js +806 -0
- package/dashboard-dist/api/573.index.js.map +1 -0
- package/dashboard-dist/api/598.index.js +328 -0
- package/dashboard-dist/api/598.index.js.map +1 -0
- package/dashboard-dist/api/62.index.js +4151 -0
- package/dashboard-dist/api/62.index.js.map +1 -0
- package/dashboard-dist/api/67.index.js +23383 -0
- package/dashboard-dist/api/67.index.js.map +1 -0
- package/dashboard-dist/api/678.index.js +2734 -0
- package/dashboard-dist/api/678.index.js.map +1 -0
- package/dashboard-dist/api/698.index.js +1896 -0
- package/dashboard-dist/api/698.index.js.map +1 -0
- package/dashboard-dist/api/720.index.js +98 -0
- package/dashboard-dist/api/720.index.js.map +1 -0
- package/dashboard-dist/api/830.index.js +95 -0
- package/dashboard-dist/api/830.index.js.map +1 -0
- package/dashboard-dist/api/831.index.js +99 -0
- package/dashboard-dist/api/831.index.js.map +1 -0
- package/dashboard-dist/api/84.index.js +64 -0
- package/dashboard-dist/api/84.index.js.map +1 -0
- package/dashboard-dist/api/900.index.js +65 -0
- package/dashboard-dist/api/900.index.js.map +1 -0
- package/dashboard-dist/api/917.index.js +88 -0
- package/dashboard-dist/api/917.index.js.map +1 -0
- package/dashboard-dist/api/948.index.js +64 -0
- package/dashboard-dist/api/948.index.js.map +1 -0
- package/dashboard-dist/api/953.index.js +67 -0
- package/dashboard-dist/api/953.index.js.map +1 -0
- package/dashboard-dist/api/975.index.js +374 -0
- package/dashboard-dist/api/975.index.js.map +1 -0
- package/dashboard-dist/api/drizzle/sqlite/0000_short_captain_stacy.sql +70 -0
- package/dashboard-dist/api/drizzle/sqlite/0001_closed_magus.sql +10 -0
- package/dashboard-dist/api/drizzle/sqlite/0002_agent_capability_observation.sql +38 -0
- package/dashboard-dist/api/drizzle/sqlite/0003_auth_magic_link.sql +28 -0
- package/dashboard-dist/api/drizzle/sqlite/0004_static_scan_fields.sql +8 -0
- package/dashboard-dist/api/drizzle/sqlite/0005_gateway_activity.sql +24 -0
- package/dashboard-dist/api/drizzle/sqlite/0006_sour_marauders.sql +41 -0
- package/dashboard-dist/api/drizzle/sqlite/meta/0000_snapshot.json +460 -0
- package/dashboard-dist/api/drizzle/sqlite/meta/0001_snapshot.json +536 -0
- package/dashboard-dist/api/drizzle/sqlite/meta/0006_snapshot.json +1249 -0
- package/dashboard-dist/api/drizzle/sqlite/meta/_journal.json +55 -0
- package/dashboard-dist/api/index.js +27340 -0
- package/dashboard-dist/api/index.js.map +1 -0
- package/dashboard-dist/api/package.json +16 -0
- package/dashboard-dist/api/sourcemap-register.cjs +1 -0
- package/dashboard-dist/web/assets/index-CqWIeBTD.js +158 -0
- package/dashboard-dist/web/assets/index-Dw7--9q4.css +1 -0
- package/dashboard-dist/web/changeway-logo.png +0 -0
- package/dashboard-dist/web/favicon.svg +29 -0
- package/dashboard-dist/web/index.html +14 -0
- package/dashboard-dist/web/logo.svg +16 -0
- package/dist/agent/auth.d.ts +37 -0
- package/dist/agent/auth.d.ts.map +1 -0
- package/dist/agent/auth.js +151 -0
- package/dist/agent/auth.js.map +1 -0
- package/dist/agent/behavior-detector.d.ts +150 -0
- package/dist/agent/behavior-detector.d.ts.map +1 -0
- package/dist/agent/behavior-detector.js +573 -0
- package/dist/agent/behavior-detector.js.map +1 -0
- package/dist/agent/business-reporter.d.ts +114 -0
- package/dist/agent/business-reporter.d.ts.map +1 -0
- package/dist/agent/business-reporter.js +359 -0
- package/dist/agent/business-reporter.js.map +1 -0
- package/dist/agent/config-sync.d.ts +70 -0
- package/dist/agent/config-sync.d.ts.map +1 -0
- package/dist/agent/config-sync.js +133 -0
- package/dist/agent/config-sync.js.map +1 -0
- package/dist/agent/config.d.ts +97 -0
- package/dist/agent/config.d.ts.map +1 -0
- package/dist/agent/config.js +359 -0
- package/dist/agent/config.js.map +1 -0
- package/dist/agent/content-injection-scanner.d.ts +35 -0
- package/dist/agent/content-injection-scanner.d.ts.map +1 -0
- package/dist/agent/content-injection-scanner.js +270 -0
- package/dist/agent/content-injection-scanner.js.map +1 -0
- package/dist/agent/engine-log-writer.d.ts +6 -0
- package/dist/agent/engine-log-writer.d.ts.map +1 -0
- package/dist/agent/engine-log-writer.js +18 -0
- package/dist/agent/engine-log-writer.js.map +1 -0
- package/dist/agent/env.d.ts +19 -0
- package/dist/agent/env.d.ts.map +1 -0
- package/dist/agent/env.js +43 -0
- package/dist/agent/env.js.map +1 -0
- package/dist/agent/event-reporter.d.ts +87 -0
- package/dist/agent/event-reporter.d.ts.map +1 -0
- package/dist/agent/event-reporter.js +315 -0
- package/dist/agent/event-reporter.js.map +1 -0
- package/dist/agent/file-watcher.d.ts +50 -0
- package/dist/agent/file-watcher.d.ts.map +1 -0
- package/dist/agent/file-watcher.js +135 -0
- package/dist/agent/file-watcher.js.map +1 -0
- package/dist/agent/fs-utils.d.ts +22 -0
- package/dist/agent/fs-utils.d.ts.map +1 -0
- package/dist/agent/fs-utils.js +41 -0
- package/dist/agent/fs-utils.js.map +1 -0
- package/dist/agent/gateway-manager.d.ts +59 -0
- package/dist/agent/gateway-manager.d.ts.map +1 -0
- package/dist/agent/gateway-manager.js +583 -0
- package/dist/agent/gateway-manager.js.map +1 -0
- package/dist/agent/hook-types.d.ts +276 -0
- package/dist/agent/hook-types.d.ts.map +1 -0
- package/dist/agent/hook-types.js +51 -0
- package/dist/agent/hook-types.js.map +1 -0
- package/dist/agent/index.d.ts +8 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +8 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/prompt-gate.d.ts +13 -0
- package/dist/agent/prompt-gate.d.ts.map +1 -0
- package/dist/agent/prompt-gate.js +28 -0
- package/dist/agent/prompt-gate.js.map +1 -0
- package/dist/agent/prompt-input.d.ts +9 -0
- package/dist/agent/prompt-input.d.ts.map +1 -0
- package/dist/agent/prompt-input.js +158 -0
- package/dist/agent/prompt-input.js.map +1 -0
- package/dist/agent/prompt-output.d.ts +4 -0
- package/dist/agent/prompt-output.d.ts.map +1 -0
- package/dist/agent/prompt-output.js +19 -0
- package/dist/agent/prompt-output.js.map +1 -0
- package/dist/agent/runner.d.ts +23 -0
- package/dist/agent/runner.d.ts.map +1 -0
- package/dist/agent/runner.js +154 -0
- package/dist/agent/runner.js.map +1 -0
- package/dist/agent/sanitizer.d.ts +10 -0
- package/dist/agent/sanitizer.d.ts.map +1 -0
- package/dist/agent/sanitizer.js +175 -0
- package/dist/agent/sanitizer.js.map +1 -0
- package/dist/agent/scan-activity.d.ts +18 -0
- package/dist/agent/scan-activity.d.ts.map +1 -0
- package/dist/agent/scan-activity.js +32 -0
- package/dist/agent/scan-activity.js.map +1 -0
- package/dist/agent/types.d.ts +177 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +5 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/agent/workspace-scanner.d.ts +35 -0
- package/dist/agent/workspace-scanner.d.ts.map +1 -0
- package/dist/agent/workspace-scanner.js +137 -0
- package/dist/agent/workspace-scanner.js.map +1 -0
- package/dist/dashboard-launcher.d.ts +52 -0
- package/dist/dashboard-launcher.d.ts.map +1 -0
- package/dist/dashboard-launcher.js +363 -0
- package/dist/dashboard-launcher.js.map +1 -0
- package/dist/gateway/activity.d.ts +52 -0
- package/dist/gateway/activity.d.ts.map +1 -0
- package/dist/gateway/activity.js +111 -0
- package/dist/gateway/activity.js.map +1 -0
- package/dist/gateway/config.d.ts +50 -0
- package/dist/gateway/config.d.ts.map +1 -0
- package/dist/gateway/config.js +200 -0
- package/dist/gateway/config.js.map +1 -0
- package/dist/gateway/gateway/activity.d.ts +52 -0
- package/dist/gateway/gateway/activity.d.ts.map +1 -0
- package/dist/gateway/gateway/activity.js +111 -0
- package/dist/gateway/gateway/activity.js.map +1 -0
- package/dist/gateway/gateway/config.d.ts +50 -0
- package/dist/gateway/gateway/config.d.ts.map +1 -0
- package/dist/gateway/gateway/config.js +200 -0
- package/dist/gateway/gateway/config.js.map +1 -0
- package/dist/gateway/gateway/handlers/anthropic.d.ts +12 -0
- package/dist/gateway/gateway/handlers/anthropic.d.ts.map +1 -0
- package/dist/gateway/gateway/handlers/anthropic.js +254 -0
- package/dist/gateway/gateway/handlers/anthropic.js.map +1 -0
- package/dist/gateway/gateway/handlers/gemini.d.ts +12 -0
- package/dist/gateway/gateway/handlers/gemini.d.ts.map +1 -0
- package/dist/gateway/gateway/handlers/gemini.js +101 -0
- package/dist/gateway/gateway/handlers/gemini.js.map +1 -0
- package/dist/gateway/gateway/handlers/models.d.ts +4 -0
- package/dist/gateway/gateway/handlers/models.d.ts.map +1 -0
- package/dist/gateway/gateway/handlers/models.js +36 -0
- package/dist/gateway/gateway/handlers/models.js.map +1 -0
- package/dist/gateway/gateway/handlers/openai.d.ts +16 -0
- package/dist/gateway/gateway/handlers/openai.d.ts.map +1 -0
- package/dist/gateway/gateway/handlers/openai.js +254 -0
- package/dist/gateway/gateway/handlers/openai.js.map +1 -0
- package/dist/gateway/gateway/index.d.ts +27 -0
- package/dist/gateway/gateway/index.d.ts.map +1 -0
- package/dist/gateway/gateway/index.js +293 -0
- package/dist/gateway/gateway/index.js.map +1 -0
- package/dist/gateway/gateway/mapping-store.d.ts +38 -0
- package/dist/gateway/gateway/mapping-store.d.ts.map +1 -0
- package/dist/gateway/gateway/mapping-store.js +74 -0
- package/dist/gateway/gateway/mapping-store.js.map +1 -0
- package/dist/gateway/gateway/restorer.d.ts +63 -0
- package/dist/gateway/gateway/restorer.d.ts.map +1 -0
- package/dist/gateway/gateway/restorer.js +284 -0
- package/dist/gateway/gateway/restorer.js.map +1 -0
- package/dist/gateway/gateway/sanitizer.d.ts +17 -0
- package/dist/gateway/gateway/sanitizer.d.ts.map +1 -0
- package/dist/gateway/gateway/sanitizer.js +228 -0
- package/dist/gateway/gateway/sanitizer.js.map +1 -0
- package/dist/gateway/gateway/types.d.ts +53 -0
- package/dist/gateway/gateway/types.d.ts.map +1 -0
- package/dist/gateway/gateway/types.js +5 -0
- package/dist/gateway/gateway/types.js.map +1 -0
- package/dist/gateway/handlers/anthropic.d.ts +12 -0
- package/dist/gateway/handlers/anthropic.d.ts.map +1 -0
- package/dist/gateway/handlers/anthropic.js +254 -0
- package/dist/gateway/handlers/anthropic.js.map +1 -0
- package/dist/gateway/handlers/gemini.d.ts +12 -0
- package/dist/gateway/handlers/gemini.d.ts.map +1 -0
- package/dist/gateway/handlers/gemini.js +101 -0
- package/dist/gateway/handlers/gemini.js.map +1 -0
- package/dist/gateway/handlers/models.d.ts +4 -0
- package/dist/gateway/handlers/models.d.ts.map +1 -0
- package/dist/gateway/handlers/models.js +36 -0
- package/dist/gateway/handlers/models.js.map +1 -0
- package/dist/gateway/handlers/openai.d.ts +16 -0
- package/dist/gateway/handlers/openai.d.ts.map +1 -0
- package/dist/gateway/handlers/openai.js +254 -0
- package/dist/gateway/handlers/openai.js.map +1 -0
- package/dist/gateway/index.d.ts +27 -0
- package/dist/gateway/index.d.ts.map +1 -0
- package/dist/gateway/index.js +293 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/mapping-store.d.ts +38 -0
- package/dist/gateway/mapping-store.d.ts.map +1 -0
- package/dist/gateway/mapping-store.js +74 -0
- package/dist/gateway/mapping-store.js.map +1 -0
- package/dist/gateway/restorer.d.ts +63 -0
- package/dist/gateway/restorer.d.ts.map +1 -0
- package/dist/gateway/restorer.js +284 -0
- package/dist/gateway/restorer.js.map +1 -0
- package/dist/gateway/sanitizer.d.ts +17 -0
- package/dist/gateway/sanitizer.d.ts.map +1 -0
- package/dist/gateway/sanitizer.js +228 -0
- package/dist/gateway/sanitizer.js.map +1 -0
- package/dist/gateway/types.d.ts +53 -0
- package/dist/gateway/types.d.ts.map +1 -0
- package/dist/gateway/types.js +5 -0
- package/dist/gateway/types.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2084 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/index.d.ts +5 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +5 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/store.d.ts +82 -0
- package/dist/memory/store.d.ts.map +1 -0
- package/dist/memory/store.js +194 -0
- package/dist/memory/store.js.map +1 -0
- package/dist/platform-client/index.d.ts +63 -0
- package/dist/platform-client/index.d.ts.map +1 -0
- package/dist/platform-client/index.js +294 -0
- package/dist/platform-client/index.js.map +1 -0
- package/dist/platform-client/types.d.ts +109 -0
- package/dist/platform-client/types.d.ts.map +1 -0
- package/dist/platform-client/types.js +3 -0
- package/dist/platform-client/types.js.map +1 -0
- package/gateway/activity.d.ts +52 -0
- package/gateway/activity.d.ts.map +1 -0
- package/gateway/activity.js +111 -0
- package/gateway/activity.js.map +1 -0
- package/gateway/config.d.ts +50 -0
- package/gateway/config.d.ts.map +1 -0
- package/gateway/config.js +200 -0
- package/gateway/config.js.map +1 -0
- package/gateway/handlers/anthropic.d.ts +12 -0
- package/gateway/handlers/anthropic.d.ts.map +1 -0
- package/gateway/handlers/anthropic.js +254 -0
- package/gateway/handlers/anthropic.js.map +1 -0
- package/gateway/handlers/gemini.d.ts +12 -0
- package/gateway/handlers/gemini.d.ts.map +1 -0
- package/gateway/handlers/gemini.js +101 -0
- package/gateway/handlers/gemini.js.map +1 -0
- package/gateway/handlers/models.d.ts +4 -0
- package/gateway/handlers/models.d.ts.map +1 -0
- package/gateway/handlers/models.js +36 -0
- package/gateway/handlers/models.js.map +1 -0
- package/gateway/handlers/openai.d.ts +16 -0
- package/gateway/handlers/openai.d.ts.map +1 -0
- package/gateway/handlers/openai.js +254 -0
- package/gateway/handlers/openai.js.map +1 -0
- package/gateway/index.d.ts +27 -0
- package/gateway/index.d.ts.map +1 -0
- package/gateway/index.js +293 -0
- package/gateway/index.js.map +1 -0
- package/gateway/mapping-store.d.ts +38 -0
- package/gateway/mapping-store.d.ts.map +1 -0
- package/gateway/mapping-store.js +74 -0
- package/gateway/mapping-store.js.map +1 -0
- package/gateway/restorer.d.ts +63 -0
- package/gateway/restorer.d.ts.map +1 -0
- package/gateway/restorer.js +284 -0
- package/gateway/restorer.js.map +1 -0
- package/gateway/sanitizer.d.ts +17 -0
- package/gateway/sanitizer.d.ts.map +1 -0
- package/gateway/sanitizer.js +228 -0
- package/gateway/sanitizer.js.map +1 -0
- package/gateway/types.d.ts +53 -0
- package/gateway/types.d.ts.map +1 -0
- package/gateway/types.js +5 -0
- package/gateway/types.js.map +1 -0
- package/openclaw.plugin.json +86 -0
- package/package.json +74 -0
- package/samples/Untitled +1 -0
- package/samples/clean-email.txt +20 -0
- package/samples/test-document.md +53 -0
- package/samples/test-email-popup.txt +44 -0
- package/samples/test-email.txt +32 -0
- package/samples/test-webpage.html +51 -0
- package/scripts/enterprise-enroll.sh +89 -0
- package/scripts/enterprise-unenroll.sh +75 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway Activity Logger
|
|
3
|
+
*
|
|
4
|
+
* Tracks sanitization and restoration events for monitoring.
|
|
5
|
+
*/
|
|
6
|
+
// Activity listeners
|
|
7
|
+
const listeners = [];
|
|
8
|
+
// Request counter for generating IDs
|
|
9
|
+
let requestCounter = 0;
|
|
10
|
+
/**
|
|
11
|
+
* Generate a unique request ID
|
|
12
|
+
*/
|
|
13
|
+
export function generateRequestId() {
|
|
14
|
+
return `gw-${Date.now()}-${++requestCounter}`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Register an activity listener
|
|
18
|
+
*/
|
|
19
|
+
export function addActivityListener(listener) {
|
|
20
|
+
listeners.push(listener);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Remove an activity listener
|
|
24
|
+
*/
|
|
25
|
+
export function removeActivityListener(listener) {
|
|
26
|
+
const index = listeners.indexOf(listener);
|
|
27
|
+
if (index !== -1) {
|
|
28
|
+
listeners.splice(index, 1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Clear all activity listeners
|
|
33
|
+
*/
|
|
34
|
+
export function clearActivityListeners() {
|
|
35
|
+
listeners.length = 0;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Emit an activity event to all listeners
|
|
39
|
+
*/
|
|
40
|
+
function emitActivity(event) {
|
|
41
|
+
for (const listener of listeners) {
|
|
42
|
+
try {
|
|
43
|
+
listener(event);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
console.error("[gateway-activity] Listener error:", err);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Count categories from mapping table
|
|
52
|
+
* Handles both old format (__email_1__) and new format (__PII_EMAIL_ADDRESS_00000001__)
|
|
53
|
+
*/
|
|
54
|
+
export function countCategories(mappingTable) {
|
|
55
|
+
const categories = {};
|
|
56
|
+
for (const placeholder of mappingTable.keys()) {
|
|
57
|
+
// Try new format first: __PII_EMAIL_ADDRESS_00000001__
|
|
58
|
+
const newMatch = placeholder.match(/^__PII_([A-Z_]+)_\d+__$/);
|
|
59
|
+
if (newMatch) {
|
|
60
|
+
const category = newMatch[1].toLowerCase();
|
|
61
|
+
categories[category] = (categories[category] || 0) + 1;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// Fallback to old format: __email_1__
|
|
65
|
+
const oldMatch = placeholder.match(/^__([a-z_]+)_\d+__$/);
|
|
66
|
+
if (oldMatch) {
|
|
67
|
+
const category = oldMatch[1];
|
|
68
|
+
categories[category] = (categories[category] || 0) + 1;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return categories;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Log a sanitization event (request going out)
|
|
75
|
+
*/
|
|
76
|
+
export function logSanitizeEvent(params) {
|
|
77
|
+
const event = {
|
|
78
|
+
id: `${params.requestId}-sanitize`,
|
|
79
|
+
timestamp: new Date().toISOString(),
|
|
80
|
+
requestId: params.requestId,
|
|
81
|
+
type: "sanitize",
|
|
82
|
+
direction: "request",
|
|
83
|
+
backend: params.backend,
|
|
84
|
+
endpoint: params.endpoint,
|
|
85
|
+
model: params.model,
|
|
86
|
+
redactionCount: params.redactionCount,
|
|
87
|
+
categories: countCategories(params.mappingTable),
|
|
88
|
+
durationMs: params.durationMs,
|
|
89
|
+
};
|
|
90
|
+
emitActivity(event);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Log a restoration event (response coming back)
|
|
94
|
+
*/
|
|
95
|
+
export function logRestoreEvent(params) {
|
|
96
|
+
const event = {
|
|
97
|
+
id: `${params.requestId}-restore`,
|
|
98
|
+
timestamp: new Date().toISOString(),
|
|
99
|
+
requestId: params.requestId,
|
|
100
|
+
type: "restore",
|
|
101
|
+
direction: "response",
|
|
102
|
+
backend: params.backend,
|
|
103
|
+
endpoint: params.endpoint,
|
|
104
|
+
model: params.model,
|
|
105
|
+
redactionCount: params.restorationCount,
|
|
106
|
+
categories: countCategories(params.mappingTable),
|
|
107
|
+
durationMs: params.durationMs,
|
|
108
|
+
};
|
|
109
|
+
emitActivity(event);
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway configuration management
|
|
3
|
+
*/
|
|
4
|
+
import type { GatewayConfig, ApiType } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Load gateway configuration from file or environment
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadConfig(configPath?: string): GatewayConfig;
|
|
9
|
+
/**
|
|
10
|
+
* Validate configuration
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateConfig(config: GatewayConfig): void;
|
|
13
|
+
/**
|
|
14
|
+
* Infer API type from backend name
|
|
15
|
+
*/
|
|
16
|
+
export declare function inferApiType(name: string): ApiType;
|
|
17
|
+
/**
|
|
18
|
+
* Get API type for a backend
|
|
19
|
+
*/
|
|
20
|
+
export declare function getBackendApiType(name: string, config: GatewayConfig): ApiType;
|
|
21
|
+
/**
|
|
22
|
+
* Find backend by API key
|
|
23
|
+
*/
|
|
24
|
+
export declare function findBackendByApiKey(apiKey: string, config: GatewayConfig): {
|
|
25
|
+
name: string;
|
|
26
|
+
backend: typeof config.backends[string];
|
|
27
|
+
} | null;
|
|
28
|
+
/**
|
|
29
|
+
* Find default backend for an API type
|
|
30
|
+
*/
|
|
31
|
+
export declare function findDefaultBackend(apiType: ApiType, config: GatewayConfig): {
|
|
32
|
+
name: string;
|
|
33
|
+
backend: typeof config.backends[string];
|
|
34
|
+
} | null;
|
|
35
|
+
/**
|
|
36
|
+
* Find backend by request path prefix
|
|
37
|
+
* Matches the longest pathPrefix that is a prefix of the request path
|
|
38
|
+
*/
|
|
39
|
+
export declare function findBackendByPathPrefix(requestPath: string, config: GatewayConfig): {
|
|
40
|
+
name: string;
|
|
41
|
+
backend: typeof config.backends[string];
|
|
42
|
+
} | null;
|
|
43
|
+
/**
|
|
44
|
+
* Find backend by model name
|
|
45
|
+
*/
|
|
46
|
+
export declare function findBackendByModel(modelName: string, config: GatewayConfig): {
|
|
47
|
+
name: string;
|
|
48
|
+
backend: typeof config.backends[string];
|
|
49
|
+
} | null;
|
|
50
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIzD;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAyB7D;AAmFD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAkB1D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAM9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAOlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAelE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAclE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAOlE"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway configuration management
|
|
3
|
+
*/
|
|
4
|
+
import { readFileSync, existsSync } from "node:fs";
|
|
5
|
+
import { homedir } from "node:os";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
const DEFAULT_CONFIG_PATH = join(homedir(), ".openclaw", "extensions", "moltguard", "data", "gateway.json");
|
|
8
|
+
/**
|
|
9
|
+
* Load gateway configuration from file or environment
|
|
10
|
+
*/
|
|
11
|
+
export function loadConfig(configPath) {
|
|
12
|
+
const path = configPath || DEFAULT_CONFIG_PATH;
|
|
13
|
+
// Default configuration
|
|
14
|
+
const defaultConfig = {
|
|
15
|
+
port: parseInt(process.env.GATEWAY_PORT || "53669", 10),
|
|
16
|
+
backends: {},
|
|
17
|
+
};
|
|
18
|
+
// Try to load from file
|
|
19
|
+
if (existsSync(path)) {
|
|
20
|
+
try {
|
|
21
|
+
const fileContent = readFileSync(path, "utf-8");
|
|
22
|
+
const fileConfig = JSON.parse(fileContent);
|
|
23
|
+
return mergeConfig(defaultConfig, fileConfig);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.warn(`[ai-security-gateway] Failed to load config from ${path}:`, error);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Load from environment variables
|
|
30
|
+
return loadFromEnv(defaultConfig);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Load backend configs from environment variables
|
|
34
|
+
*/
|
|
35
|
+
function loadFromEnv(config) {
|
|
36
|
+
// Anthropic
|
|
37
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
38
|
+
config.backends.anthropic = {
|
|
39
|
+
baseUrl: process.env.ANTHROPIC_BASE_URL || "https://api.anthropic.com",
|
|
40
|
+
apiKey: process.env.ANTHROPIC_API_KEY,
|
|
41
|
+
type: "anthropic",
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// OpenAI
|
|
45
|
+
if (process.env.OPENAI_API_KEY) {
|
|
46
|
+
config.backends.openai = {
|
|
47
|
+
baseUrl: process.env.OPENAI_BASE_URL || "https://api.openai.com",
|
|
48
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
49
|
+
type: "openai",
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// Kimi (Moonshot) — only set if openai backend not already configured
|
|
53
|
+
if ((process.env.KIMI_API_KEY || process.env.MOONSHOT_API_KEY) &&
|
|
54
|
+
!config.backends.openai) {
|
|
55
|
+
config.backends.kimi = {
|
|
56
|
+
baseUrl: process.env.KIMI_BASE_URL || "https://api.moonshot.cn",
|
|
57
|
+
apiKey: process.env.KIMI_API_KEY || process.env.MOONSHOT_API_KEY || "",
|
|
58
|
+
type: "openai",
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// Gemini
|
|
62
|
+
if (process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY) {
|
|
63
|
+
config.backends.gemini = {
|
|
64
|
+
baseUrl: process.env.GEMINI_BASE_URL ||
|
|
65
|
+
"https://generativelanguage.googleapis.com",
|
|
66
|
+
apiKey: process.env.GEMINI_API_KEY || process.env.GOOGLE_API_KEY || "",
|
|
67
|
+
type: "gemini",
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// OpenRouter
|
|
71
|
+
if (process.env.OPENROUTER_API_KEY) {
|
|
72
|
+
config.backends.openrouter = {
|
|
73
|
+
baseUrl: process.env.OPENROUTER_BASE_URL || "https://openrouter.ai/api",
|
|
74
|
+
apiKey: process.env.OPENROUTER_API_KEY,
|
|
75
|
+
type: "openai",
|
|
76
|
+
...(process.env.OPENROUTER_REFERER && {
|
|
77
|
+
referer: process.env.OPENROUTER_REFERER,
|
|
78
|
+
}),
|
|
79
|
+
...(process.env.OPENROUTER_TITLE && {
|
|
80
|
+
title: process.env.OPENROUTER_TITLE,
|
|
81
|
+
}),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return config;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Merge file config with default config
|
|
88
|
+
*/
|
|
89
|
+
function mergeConfig(defaultConfig, fileConfig) {
|
|
90
|
+
return {
|
|
91
|
+
port: fileConfig.port ?? defaultConfig.port,
|
|
92
|
+
backends: {
|
|
93
|
+
...defaultConfig.backends,
|
|
94
|
+
...fileConfig.backends,
|
|
95
|
+
},
|
|
96
|
+
routing: fileConfig.routing,
|
|
97
|
+
defaultBackends: fileConfig.defaultBackends,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Validate configuration
|
|
102
|
+
*/
|
|
103
|
+
export function validateConfig(config) {
|
|
104
|
+
if (config.port < 1 || config.port > 65535) {
|
|
105
|
+
throw new Error(`Invalid port: ${config.port}`);
|
|
106
|
+
}
|
|
107
|
+
// Note: Backends are now optional. Gateway will act as transparent proxy.
|
|
108
|
+
// If no backends configured, gateway will forward requests based on routing rules
|
|
109
|
+
// or pass through to the original target.
|
|
110
|
+
// Validate each backend (if any)
|
|
111
|
+
for (const [name, backend] of Object.entries(config.backends)) {
|
|
112
|
+
if (!backend.baseUrl) {
|
|
113
|
+
throw new Error(`Backend ${name} missing baseUrl`);
|
|
114
|
+
}
|
|
115
|
+
if (!backend.apiKey) {
|
|
116
|
+
throw new Error(`Backend ${name} missing apiKey`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Infer API type from backend name
|
|
122
|
+
*/
|
|
123
|
+
export function inferApiType(name) {
|
|
124
|
+
const lower = name.toLowerCase();
|
|
125
|
+
if (lower.includes("anthropic") || lower.includes("claude")) {
|
|
126
|
+
return "anthropic";
|
|
127
|
+
}
|
|
128
|
+
if (lower.includes("gemini") || lower.includes("google")) {
|
|
129
|
+
return "gemini";
|
|
130
|
+
}
|
|
131
|
+
// Default to OpenAI-compatible for everything else
|
|
132
|
+
return "openai";
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get API type for a backend
|
|
136
|
+
*/
|
|
137
|
+
export function getBackendApiType(name, config) {
|
|
138
|
+
const backend = config.backends[name];
|
|
139
|
+
if (backend?.type) {
|
|
140
|
+
return backend.type;
|
|
141
|
+
}
|
|
142
|
+
return inferApiType(name);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Find backend by API key
|
|
146
|
+
*/
|
|
147
|
+
export function findBackendByApiKey(apiKey, config) {
|
|
148
|
+
for (const [name, backend] of Object.entries(config.backends)) {
|
|
149
|
+
if (backend.apiKey === apiKey) {
|
|
150
|
+
return { name, backend };
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Find default backend for an API type
|
|
157
|
+
*/
|
|
158
|
+
export function findDefaultBackend(apiType, config) {
|
|
159
|
+
// Check explicit default first
|
|
160
|
+
const defaultName = config.defaultBackends?.[apiType];
|
|
161
|
+
if (defaultName && config.backends[defaultName]) {
|
|
162
|
+
return { name: defaultName, backend: config.backends[defaultName] };
|
|
163
|
+
}
|
|
164
|
+
// Find first backend matching the API type
|
|
165
|
+
for (const [name, backend] of Object.entries(config.backends)) {
|
|
166
|
+
if (getBackendApiType(name, config) === apiType) {
|
|
167
|
+
return { name, backend };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Find backend by request path prefix
|
|
174
|
+
* Matches the longest pathPrefix that is a prefix of the request path
|
|
175
|
+
*/
|
|
176
|
+
export function findBackendByPathPrefix(requestPath, config) {
|
|
177
|
+
let bestMatch = null;
|
|
178
|
+
let bestMatchLength = 0;
|
|
179
|
+
for (const [name, backend] of Object.entries(config.backends)) {
|
|
180
|
+
if (backend.pathPrefix && requestPath.startsWith(backend.pathPrefix)) {
|
|
181
|
+
if (backend.pathPrefix.length > bestMatchLength) {
|
|
182
|
+
bestMatch = { name, backend };
|
|
183
|
+
bestMatchLength = backend.pathPrefix.length;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return bestMatch;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Find backend by model name
|
|
191
|
+
*/
|
|
192
|
+
export function findBackendByModel(modelName, config) {
|
|
193
|
+
for (const [name, backend] of Object.entries(config.backends)) {
|
|
194
|
+
if (backend.models?.includes(modelName)) {
|
|
195
|
+
return { name, backend };
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway Activity Logger
|
|
3
|
+
*
|
|
4
|
+
* Tracks sanitization and restoration events for monitoring.
|
|
5
|
+
*/
|
|
6
|
+
import type { ActivityListener, MappingTable } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Generate a unique request ID
|
|
9
|
+
*/
|
|
10
|
+
export declare function generateRequestId(): string;
|
|
11
|
+
/**
|
|
12
|
+
* Register an activity listener
|
|
13
|
+
*/
|
|
14
|
+
export declare function addActivityListener(listener: ActivityListener): void;
|
|
15
|
+
/**
|
|
16
|
+
* Remove an activity listener
|
|
17
|
+
*/
|
|
18
|
+
export declare function removeActivityListener(listener: ActivityListener): void;
|
|
19
|
+
/**
|
|
20
|
+
* Clear all activity listeners
|
|
21
|
+
*/
|
|
22
|
+
export declare function clearActivityListeners(): void;
|
|
23
|
+
/**
|
|
24
|
+
* Count categories from mapping table
|
|
25
|
+
* Handles both old format (__email_1__) and new format (__PII_EMAIL_ADDRESS_00000001__)
|
|
26
|
+
*/
|
|
27
|
+
export declare function countCategories(mappingTable: MappingTable): Record<string, number>;
|
|
28
|
+
/**
|
|
29
|
+
* Log a sanitization event (request going out)
|
|
30
|
+
*/
|
|
31
|
+
export declare function logSanitizeEvent(params: {
|
|
32
|
+
requestId: string;
|
|
33
|
+
backend: string;
|
|
34
|
+
endpoint: string;
|
|
35
|
+
model?: string;
|
|
36
|
+
mappingTable: MappingTable;
|
|
37
|
+
redactionCount: number;
|
|
38
|
+
durationMs?: number;
|
|
39
|
+
}): void;
|
|
40
|
+
/**
|
|
41
|
+
* Log a restoration event (response coming back)
|
|
42
|
+
*/
|
|
43
|
+
export declare function logRestoreEvent(params: {
|
|
44
|
+
requestId: string;
|
|
45
|
+
backend: string;
|
|
46
|
+
endpoint: string;
|
|
47
|
+
model?: string;
|
|
48
|
+
mappingTable: MappingTable;
|
|
49
|
+
restorationCount: number;
|
|
50
|
+
durationMs?: number;
|
|
51
|
+
}): void;
|
|
52
|
+
//# sourceMappingURL=activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAwB,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQvF;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAEpE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAKvE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAeD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBlF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CAgBP;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CAgBP"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway Activity Logger
|
|
3
|
+
*
|
|
4
|
+
* Tracks sanitization and restoration events for monitoring.
|
|
5
|
+
*/
|
|
6
|
+
// Activity listeners
|
|
7
|
+
const listeners = [];
|
|
8
|
+
// Request counter for generating IDs
|
|
9
|
+
let requestCounter = 0;
|
|
10
|
+
/**
|
|
11
|
+
* Generate a unique request ID
|
|
12
|
+
*/
|
|
13
|
+
export function generateRequestId() {
|
|
14
|
+
return `gw-${Date.now()}-${++requestCounter}`;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Register an activity listener
|
|
18
|
+
*/
|
|
19
|
+
export function addActivityListener(listener) {
|
|
20
|
+
listeners.push(listener);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Remove an activity listener
|
|
24
|
+
*/
|
|
25
|
+
export function removeActivityListener(listener) {
|
|
26
|
+
const index = listeners.indexOf(listener);
|
|
27
|
+
if (index !== -1) {
|
|
28
|
+
listeners.splice(index, 1);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Clear all activity listeners
|
|
33
|
+
*/
|
|
34
|
+
export function clearActivityListeners() {
|
|
35
|
+
listeners.length = 0;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Emit an activity event to all listeners
|
|
39
|
+
*/
|
|
40
|
+
function emitActivity(event) {
|
|
41
|
+
for (const listener of listeners) {
|
|
42
|
+
try {
|
|
43
|
+
listener(event);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
console.error("[gateway-activity] Listener error:", err);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Count categories from mapping table
|
|
52
|
+
* Handles both old format (__email_1__) and new format (__PII_EMAIL_ADDRESS_00000001__)
|
|
53
|
+
*/
|
|
54
|
+
export function countCategories(mappingTable) {
|
|
55
|
+
const categories = {};
|
|
56
|
+
for (const placeholder of mappingTable.keys()) {
|
|
57
|
+
// Try new format first: __PII_EMAIL_ADDRESS_00000001__
|
|
58
|
+
const newMatch = placeholder.match(/^__PII_([A-Z_]+)_\d+__$/);
|
|
59
|
+
if (newMatch) {
|
|
60
|
+
const category = newMatch[1].toLowerCase();
|
|
61
|
+
categories[category] = (categories[category] || 0) + 1;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
// Fallback to old format: __email_1__
|
|
65
|
+
const oldMatch = placeholder.match(/^__([a-z_]+)_\d+__$/);
|
|
66
|
+
if (oldMatch) {
|
|
67
|
+
const category = oldMatch[1];
|
|
68
|
+
categories[category] = (categories[category] || 0) + 1;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return categories;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Log a sanitization event (request going out)
|
|
75
|
+
*/
|
|
76
|
+
export function logSanitizeEvent(params) {
|
|
77
|
+
const event = {
|
|
78
|
+
id: `${params.requestId}-sanitize`,
|
|
79
|
+
timestamp: new Date().toISOString(),
|
|
80
|
+
requestId: params.requestId,
|
|
81
|
+
type: "sanitize",
|
|
82
|
+
direction: "request",
|
|
83
|
+
backend: params.backend,
|
|
84
|
+
endpoint: params.endpoint,
|
|
85
|
+
model: params.model,
|
|
86
|
+
redactionCount: params.redactionCount,
|
|
87
|
+
categories: countCategories(params.mappingTable),
|
|
88
|
+
durationMs: params.durationMs,
|
|
89
|
+
};
|
|
90
|
+
emitActivity(event);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Log a restoration event (response coming back)
|
|
94
|
+
*/
|
|
95
|
+
export function logRestoreEvent(params) {
|
|
96
|
+
const event = {
|
|
97
|
+
id: `${params.requestId}-restore`,
|
|
98
|
+
timestamp: new Date().toISOString(),
|
|
99
|
+
requestId: params.requestId,
|
|
100
|
+
type: "restore",
|
|
101
|
+
direction: "response",
|
|
102
|
+
backend: params.backend,
|
|
103
|
+
endpoint: params.endpoint,
|
|
104
|
+
model: params.model,
|
|
105
|
+
redactionCount: params.restorationCount,
|
|
106
|
+
categories: countCategories(params.mappingTable),
|
|
107
|
+
durationMs: params.durationMs,
|
|
108
|
+
};
|
|
109
|
+
emitActivity(event);
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activity.js","sourceRoot":"","sources":["../src/activity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gateway configuration management
|
|
3
|
+
*/
|
|
4
|
+
import type { GatewayConfig, ApiType } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Load gateway configuration from file or environment
|
|
7
|
+
*/
|
|
8
|
+
export declare function loadConfig(configPath?: string): GatewayConfig;
|
|
9
|
+
/**
|
|
10
|
+
* Validate configuration
|
|
11
|
+
*/
|
|
12
|
+
export declare function validateConfig(config: GatewayConfig): void;
|
|
13
|
+
/**
|
|
14
|
+
* Infer API type from backend name
|
|
15
|
+
*/
|
|
16
|
+
export declare function inferApiType(name: string): ApiType;
|
|
17
|
+
/**
|
|
18
|
+
* Get API type for a backend
|
|
19
|
+
*/
|
|
20
|
+
export declare function getBackendApiType(name: string, config: GatewayConfig): ApiType;
|
|
21
|
+
/**
|
|
22
|
+
* Find backend by API key
|
|
23
|
+
*/
|
|
24
|
+
export declare function findBackendByApiKey(apiKey: string, config: GatewayConfig): {
|
|
25
|
+
name: string;
|
|
26
|
+
backend: typeof config.backends[string];
|
|
27
|
+
} | null;
|
|
28
|
+
/**
|
|
29
|
+
* Find default backend for an API type
|
|
30
|
+
*/
|
|
31
|
+
export declare function findDefaultBackend(apiType: ApiType, config: GatewayConfig): {
|
|
32
|
+
name: string;
|
|
33
|
+
backend: typeof config.backends[string];
|
|
34
|
+
} | null;
|
|
35
|
+
/**
|
|
36
|
+
* Find backend by request path prefix
|
|
37
|
+
* Matches the longest pathPrefix that is a prefix of the request path
|
|
38
|
+
*/
|
|
39
|
+
export declare function findBackendByPathPrefix(requestPath: string, config: GatewayConfig): {
|
|
40
|
+
name: string;
|
|
41
|
+
backend: typeof config.backends[string];
|
|
42
|
+
} | null;
|
|
43
|
+
/**
|
|
44
|
+
* Find backend by model name
|
|
45
|
+
*/
|
|
46
|
+
export declare function findBackendByModel(modelName: string, config: GatewayConfig): {
|
|
47
|
+
name: string;
|
|
48
|
+
backend: typeof config.backends[string];
|
|
49
|
+
} | null;
|
|
50
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAIzD;;GAEG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa,CAyB7D;AAmFD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAkB1D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAM9E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAOlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAelE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAclE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,aAAa,GACpB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAOlE"}
|