@yan162/changewayguard 6.8.25 → 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.
- package/dist/agent/env.d.ts +9 -0
- package/dist/agent/env.d.ts.map +1 -1
- package/dist/agent/env.js +14 -3
- package/dist/agent/env.js.map +1 -1
- package/dist/agent/openclaw-hybrid-audit-changeway.js +7 -3
- package/dist/gateway/dist/activity.d.ts +52 -0
- package/dist/gateway/dist/activity.d.ts.map +1 -0
- package/dist/gateway/dist/activity.js +111 -0
- package/dist/gateway/dist/activity.js.map +1 -0
- package/dist/gateway/dist/config.d.ts +50 -0
- package/dist/gateway/dist/config.d.ts.map +1 -0
- package/dist/gateway/dist/config.js +200 -0
- package/dist/gateway/dist/config.js.map +1 -0
- package/dist/gateway/dist/handlers/anthropic.d.ts +12 -0
- package/dist/gateway/dist/handlers/anthropic.d.ts.map +1 -0
- package/dist/gateway/dist/handlers/anthropic.js +254 -0
- package/dist/gateway/dist/handlers/anthropic.js.map +1 -0
- package/dist/gateway/dist/handlers/gemini.d.ts +12 -0
- package/dist/gateway/dist/handlers/gemini.d.ts.map +1 -0
- package/dist/gateway/dist/handlers/gemini.js +101 -0
- package/dist/gateway/dist/handlers/gemini.js.map +1 -0
- package/dist/gateway/dist/handlers/models.d.ts +4 -0
- package/dist/gateway/dist/handlers/models.d.ts.map +1 -0
- package/dist/gateway/dist/handlers/models.js +36 -0
- package/dist/gateway/dist/handlers/models.js.map +1 -0
- package/dist/gateway/dist/handlers/openai.d.ts +16 -0
- package/dist/gateway/dist/handlers/openai.d.ts.map +1 -0
- package/dist/gateway/dist/handlers/openai.js +254 -0
- package/dist/gateway/dist/handlers/openai.js.map +1 -0
- package/dist/gateway/dist/index.d.ts +27 -0
- package/dist/gateway/dist/index.d.ts.map +1 -0
- package/dist/gateway/dist/index.js +290 -0
- package/dist/gateway/dist/index.js.map +1 -0
- package/dist/gateway/dist/mapping-store.d.ts +38 -0
- package/dist/gateway/dist/mapping-store.d.ts.map +1 -0
- package/dist/gateway/dist/mapping-store.js +74 -0
- package/dist/gateway/dist/mapping-store.js.map +1 -0
- package/dist/gateway/dist/restorer.d.ts +63 -0
- package/dist/gateway/dist/restorer.d.ts.map +1 -0
- package/dist/gateway/dist/restorer.js +284 -0
- package/dist/gateway/dist/restorer.js.map +1 -0
- package/dist/gateway/dist/sanitizer.d.ts +17 -0
- package/dist/gateway/dist/sanitizer.d.ts.map +1 -0
- package/dist/gateway/dist/sanitizer.js +228 -0
- package/dist/gateway/dist/sanitizer.js.map +1 -0
- package/dist/gateway/dist/types.d.ts +53 -0
- package/dist/gateway/dist/types.d.ts.map +1 -0
- package/dist/gateway/dist/types.js +5 -0
- package/dist/gateway/dist/types.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/agent/env.d.ts
CHANGED
|
@@ -8,8 +8,17 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export declare const openclawHome: string;
|
|
10
10
|
export declare const isDev: boolean;
|
|
11
|
+
export declare const DEV_CORE_URL = "http://127.0.0.1:8080/changeway-open";
|
|
12
|
+
export declare const PROD_CORE_URL = "http://10.16.137.72:8080/changeway-open";
|
|
11
13
|
export declare const envCoreUrl: string | undefined;
|
|
12
14
|
export declare const defaultCoreUrl: string;
|
|
15
|
+
/**
|
|
16
|
+
* Build a full API URL by appending a path to the base Core URL.
|
|
17
|
+
* @param basePath - The base Core URL (e.g., PROD_CORE_URL or DEV_CORE_URL)
|
|
18
|
+
* @param apiPath - The API path (e.g., "/api/v1/prompt/scan")
|
|
19
|
+
* @returns Full URL string
|
|
20
|
+
*/
|
|
21
|
+
export declare function buildCoreApiUrl(basePath: string, apiPath: string): string;
|
|
13
22
|
export declare const envApiKey: string;
|
|
14
23
|
/**
|
|
15
24
|
* Sets environment variables at runtime. Centralised here so that files
|
package/dist/agent/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../agent/env.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,eAAO,MAAM,YAAY,EAAE,MACwC,CAAC;AAMpE,eAAO,MAAM,KAAK,EAAE,OAIuC,CAAC;
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../agent/env.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,eAAO,MAAM,YAAY,EAAE,MACwC,CAAC;AAMpE,eAAO,MAAM,KAAK,EAAE,OAIuC,CAAC;AAM5D,eAAO,MAAM,YAAY,yCAAyC,CAAC;AAEnE,eAAO,MAAM,aAAa,4CAA4C,CAAC;AAEvE,eAAO,MAAM,UAAU,EAAE,MAAM,GAAG,SAAmC,CAAC;AAEtE,eAAO,MAAM,cAAc,EAAE,MACyB,CAAC;AAEvD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIzE;AAMD,eAAO,MAAM,SAAS,EAAE,MAAqC,CAAC;AAM9D;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEvD"}
|
package/dist/agent/env.js
CHANGED
|
@@ -22,11 +22,22 @@ export const isDev = process.env.NODE_ENV === "development" ||
|
|
|
22
22
|
// ---------------------------------------------------------------------------
|
|
23
23
|
// Core URL
|
|
24
24
|
// ---------------------------------------------------------------------------
|
|
25
|
-
const DEV_CORE_URL = "http://127.0.0.1:8080/changeway-open";
|
|
26
|
-
const PROD_CORE_URL = "https://auth.ctct.cn:10020/changeway-open";
|
|
27
|
-
|
|
25
|
+
export const DEV_CORE_URL = "http://127.0.0.1:8080/changeway-open";
|
|
26
|
+
// export const PROD_CORE_URL = "https://auth.ctct.cn:10020/changeway-open";
|
|
27
|
+
export const PROD_CORE_URL = "http://10.16.137.72:8080/changeway-open";
|
|
28
28
|
export const envCoreUrl = process.env.OG_CORE_URL;
|
|
29
29
|
export const defaultCoreUrl = envCoreUrl ?? (isDev ? DEV_CORE_URL : PROD_CORE_URL);
|
|
30
|
+
/**
|
|
31
|
+
* Build a full API URL by appending a path to the base Core URL.
|
|
32
|
+
* @param basePath - The base Core URL (e.g., PROD_CORE_URL or DEV_CORE_URL)
|
|
33
|
+
* @param apiPath - The API path (e.g., "/api/v1/prompt/scan")
|
|
34
|
+
* @returns Full URL string
|
|
35
|
+
*/
|
|
36
|
+
export function buildCoreApiUrl(basePath, apiPath) {
|
|
37
|
+
const base = basePath.replace(/\/+$/, "");
|
|
38
|
+
const path = apiPath.startsWith("/") ? apiPath : `/${apiPath}`;
|
|
39
|
+
return `${base}${path}`;
|
|
40
|
+
}
|
|
30
41
|
// ---------------------------------------------------------------------------
|
|
31
42
|
// API key (optional env override)
|
|
32
43
|
// ---------------------------------------------------------------------------
|
package/dist/agent/env.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../agent/env.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GACvB,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAEpE,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,KAAK,GAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;IACtC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG;IAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM;IAC7B,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC;AAE5D,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,YAAY,GAAG,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../agent/env.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GACvB,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAEpE,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,KAAK,GAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;IACtC,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG;IAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,MAAM;IAC7B,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC;AAE5D,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,CAAC,MAAM,YAAY,GAAG,sCAAsC,CAAC;AACnE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,aAAa,GAAG,yCAAyC,CAAC;AAEvE,MAAM,CAAC,MAAM,UAAU,GAAuB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;AAEtE,MAAM,CAAC,MAAM,cAAc,GACzB,UAAU,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,OAAe;IAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;IAC/D,OAAO,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E,MAAM,CAAC,MAAM,SAAS,GAAW,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;AAE9D,8EAA8E;AAC9E,sEAAsE;AACtE,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,GAAW,EAAE,KAAa;IAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAC3B,CAAC"}
|
|
@@ -13,6 +13,8 @@
|
|
|
13
13
|
*
|
|
14
14
|
* @integrity sha256:565556ef7ed65dc93f8822bf59a9df3591648585467a094deedd99a11208325d
|
|
15
15
|
*/
|
|
16
|
+
import { PROD_CORE_URL, DEV_CORE_URL, buildCoreApiUrl } from "./env.js";
|
|
17
|
+
|
|
16
18
|
|
|
17
19
|
const fs = require('fs');
|
|
18
20
|
const path = require('path');
|
|
@@ -1295,8 +1297,9 @@ function finalizeAndPushData() {
|
|
|
1295
1297
|
}
|
|
1296
1298
|
|
|
1297
1299
|
// console.log(`\n${COLORS.cyan}正在向云端安全中心同步态势感知数据...${COLORS.reset}`);
|
|
1298
|
-
|
|
1299
|
-
const pushApiUrl = "
|
|
1300
|
+
// 直接使用常量
|
|
1301
|
+
const pushApiUrl = buildCoreApiUrl(PROD_CORE_URL, "/api/pushAuditData");
|
|
1302
|
+
//const pushApiUrl = "https://auth.ctct.cn:10020/changeway-open/api/pushAuditData";
|
|
1300
1303
|
const pushApiPath = "/changeway-open/api/pushAuditData";
|
|
1301
1304
|
|
|
1302
1305
|
doSignedPost(pushApiUrl, pushApiPath, pushObj, (err, resData) => {
|
|
@@ -1375,7 +1378,8 @@ if (skillMetaList.length === 0) {
|
|
|
1375
1378
|
);
|
|
1376
1379
|
finalizeAndPushData();
|
|
1377
1380
|
} else {
|
|
1378
|
-
const assessApiUrl = "
|
|
1381
|
+
const assessApiUrl = buildCoreApiUrl(PROD_CORE_URL, "/api/skills/assessment");
|
|
1382
|
+
// const assessApiUrl = "https://auth.ctct.cn:10020/changeway-open/api/skills/assessment";
|
|
1379
1383
|
const assessApiPath = "/changeway-open/api/skills/assessment";
|
|
1380
1384
|
|
|
1381
1385
|
doSignedPost(assessApiUrl, assessApiPath, { data: skillMetaList }, (err, apiResRaw) => {
|
|
@@ -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"}
|
|
@@ -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,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Security Gateway - Anthropic Messages API handler
|
|
3
|
+
*
|
|
4
|
+
* Handles POST /v1/messages requests in Anthropic's native format.
|
|
5
|
+
*/
|
|
6
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
7
|
+
import type { BackendConfig } from "../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Handle Anthropic API request
|
|
10
|
+
*/
|
|
11
|
+
export declare function handleAnthropicRequest(req: IncomingMessage, res: ServerResponse, backend: BackendConfig): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/handlers/anthropic.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAK/D;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAwGf"}
|