@guardbee/mcp-security-proxy 0.3.1 → 1.0.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.
Files changed (76) hide show
  1. package/README.md +88 -11
  2. package/TR.md +88 -11
  3. package/dist/audit/logger.d.ts +14 -2
  4. package/dist/audit/logger.d.ts.map +1 -1
  5. package/dist/audit/logger.js +72 -1
  6. package/dist/audit/logger.js.map +1 -1
  7. package/dist/cli.d.ts +1 -0
  8. package/dist/cli.js +65 -3
  9. package/dist/cli.js.map +1 -1
  10. package/dist/gateway/approval.d.ts +16 -0
  11. package/dist/gateway/approval.d.ts.map +1 -0
  12. package/dist/gateway/approval.js +36 -0
  13. package/dist/gateway/approval.js.map +1 -0
  14. package/dist/gateway/config.d.ts +36 -0
  15. package/dist/gateway/config.d.ts.map +1 -0
  16. package/dist/gateway/config.js +206 -0
  17. package/dist/gateway/config.js.map +1 -0
  18. package/dist/gateway/fields.d.ts +7 -0
  19. package/dist/gateway/fields.d.ts.map +1 -0
  20. package/dist/gateway/fields.js +43 -0
  21. package/dist/gateway/fields.js.map +1 -0
  22. package/dist/gateway/gateway.d.ts +59 -0
  23. package/dist/gateway/gateway.d.ts.map +1 -0
  24. package/dist/gateway/gateway.js +376 -0
  25. package/dist/gateway/gateway.js.map +1 -0
  26. package/dist/gateway/labels.d.ts +10 -0
  27. package/dist/gateway/labels.d.ts.map +1 -0
  28. package/dist/gateway/labels.js +17 -0
  29. package/dist/gateway/labels.js.map +1 -0
  30. package/dist/gateway/policy.d.ts +37 -0
  31. package/dist/gateway/policy.d.ts.map +1 -0
  32. package/dist/gateway/policy.js +57 -0
  33. package/dist/gateway/policy.js.map +1 -0
  34. package/dist/gateway/taint.d.ts +25 -0
  35. package/dist/gateway/taint.d.ts.map +1 -0
  36. package/dist/gateway/taint.js +43 -0
  37. package/dist/gateway/taint.js.map +1 -0
  38. package/dist/gateway/tokens.d.ts +18 -0
  39. package/dist/gateway/tokens.d.ts.map +1 -0
  40. package/dist/gateway/tokens.js +60 -0
  41. package/dist/gateway/tokens.js.map +1 -0
  42. package/dist/gateway/upstream.d.ts +20 -0
  43. package/dist/gateway/upstream.d.ts.map +1 -0
  44. package/dist/gateway/upstream.js +49 -0
  45. package/dist/gateway/upstream.js.map +1 -0
  46. package/dist/index.d.ts +21 -3
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +32 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/init.d.ts +34 -0
  51. package/dist/init.d.ts.map +1 -0
  52. package/dist/init.js +140 -0
  53. package/dist/init.js.map +1 -0
  54. package/dist/interceptors/definition-drift.d.ts +1 -0
  55. package/dist/interceptors/definition-drift.d.ts.map +1 -1
  56. package/dist/interceptors/definition-drift.js +1 -0
  57. package/dist/interceptors/definition-drift.js.map +1 -1
  58. package/dist/interceptors/pii-masker.d.ts +1 -2
  59. package/dist/interceptors/pii-masker.d.ts.map +1 -1
  60. package/dist/interceptors/pii-masker.js +5 -68
  61. package/dist/interceptors/pii-masker.js.map +1 -1
  62. package/dist/interceptors/prompt-injection.d.ts +1 -2
  63. package/dist/interceptors/prompt-injection.d.ts.map +1 -1
  64. package/dist/interceptors/prompt-injection.js +4 -40
  65. package/dist/interceptors/prompt-injection.js.map +1 -1
  66. package/dist/interceptors/tool-result.d.ts +1 -3
  67. package/dist/interceptors/tool-result.d.ts.map +1 -1
  68. package/dist/interceptors/tool-result.js +4 -12
  69. package/dist/interceptors/tool-result.js.map +1 -1
  70. package/dist/proxy.d.ts +18 -0
  71. package/dist/proxy.d.ts.map +1 -1
  72. package/dist/proxy.js +48 -226
  73. package/dist/proxy.js.map +1 -1
  74. package/dist/types.d.ts +36 -6
  75. package/dist/types.d.ts.map +1 -1
  76. package/package.json +4 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/gateway/tokens.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,2GAA2G;IAC3G,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;IAaxB,4FAA4F;IAC5F,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC;IAW1B,6DAA6D;IAC7D,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAMrC"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PiiVault = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const guard_core_1 = require("@guardbee/guard-core");
6
+ const TOKEN = /<pii:[a-z_]+:[0-9a-f]{8}>/g;
7
+ /**
8
+ * Session-scoped reversible PII tokens. The model sees `<pii:tc_kimlik:7f3a9b21>`
9
+ * instead of the value, and can still pass that token to another tool; the
10
+ * gateway puts the real value back on the way to the upstream. The table lives
11
+ * only in memory and dies with the session.
12
+ */
13
+ class PiiVault {
14
+ constructor() {
15
+ this.byToken = new Map();
16
+ this.byValue = new Map();
17
+ }
18
+ get size() {
19
+ return this.byToken.size;
20
+ }
21
+ /** Replace validated PII in any JSON-like value with tokens; the same value always gets the same token. */
22
+ tokenize(value) {
23
+ return (0, guard_core_1.maskPiiInValue)(value, (name, match) => {
24
+ const known = this.byValue.get(match);
25
+ if (known)
26
+ return known;
27
+ let token;
28
+ do
29
+ token = `<pii:${name}:${(0, crypto_1.randomBytes)(4).toString("hex")}>`;
30
+ while (this.byToken.has(token));
31
+ this.byToken.set(token, match);
32
+ this.byValue.set(match, token);
33
+ return token;
34
+ });
35
+ }
36
+ /** Put real values back for tokens this session issued; unknown tokens stay as they are. */
37
+ detokenize(value) {
38
+ if (typeof value === "string") {
39
+ return value.replace(TOKEN, (token) => this.byToken.get(token) ?? token);
40
+ }
41
+ if (Array.isArray(value))
42
+ return value.map((item) => this.detokenize(item));
43
+ if (value && typeof value === "object") {
44
+ return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, this.detokenize(v)]));
45
+ }
46
+ return value;
47
+ }
48
+ /** True if the value carries a token this session issued. */
49
+ holdsTokens(value) {
50
+ if (typeof value === "string")
51
+ return (value.match(TOKEN) ?? []).some((token) => this.byToken.has(token));
52
+ if (Array.isArray(value))
53
+ return value.some((item) => this.holdsTokens(item));
54
+ if (value && typeof value === "object")
55
+ return Object.values(value).some((v) => this.holdsTokens(v));
56
+ return false;
57
+ }
58
+ }
59
+ exports.PiiVault = PiiVault;
60
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/gateway/tokens.ts"],"names":[],"mappings":";;;AAAA,mCAAqC;AACrC,qDAAsD;AAEtD,MAAM,KAAK,GAAG,4BAA4B,CAAC;AAE3C;;;;;GAKG;AACH,MAAa,QAAQ;IAArB;QACmB,YAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;QACpC,YAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAuCvD,CAAC;IArCC,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,2GAA2G;IAC3G,QAAQ,CAAI,KAAQ;QAClB,OAAO,IAAA,2BAAc,EAAC,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;YACxB,IAAI,KAAa,CAAC;YAClB;gBAAG,KAAK,GAAG,QAAQ,IAAI,IAAI,IAAA,oBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;mBACtD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;YAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC/B,OAAO,KAAK,CAAC;QACf,CAAC,CAAM,CAAC;IACV,CAAC;IAED,4FAA4F;IAC5F,UAAU,CAAI,KAAQ;QACpB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,CAAM,CAAC;QAChF,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAM,CAAC;QACjF,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAM,CAAC;QACjG,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6DAA6D;IAC7D,WAAW,CAAC,KAAc;QACxB,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1G,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9E,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QACrG,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAzCD,4BAyCC"}
@@ -0,0 +1,20 @@
1
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
+ import type { CallToolResult, GetPromptResult, Prompt, ReadResourceResult, Resource, Tool } from "@modelcontextprotocol/sdk/types.js";
3
+ import type { McpServerConfig } from "../types.js";
4
+ /** One MCP server behind the gateway. */
5
+ export interface Upstream {
6
+ readonly name: string;
7
+ listTools(): Promise<Tool[]>;
8
+ callTool(name: string, args: Record<string, unknown>): Promise<CallToolResult>;
9
+ listResources(): Promise<Resource[]>;
10
+ readResource(uri: string): Promise<ReadResourceResult>;
11
+ listPrompts(): Promise<Prompt[]>;
12
+ getPrompt(name: string, args?: Record<string, string>): Promise<GetPromptResult>;
13
+ /** Register for the server's tools/list_changed notification. */
14
+ onToolsChanged?(listener: () => void): void;
15
+ close(): Promise<void>;
16
+ }
17
+ /** Wrap a connected MCP client. Resources and prompts are empty when the server does not offer them. */
18
+ export declare function clientUpstream(name: string, client: Client): Upstream;
19
+ export declare function connectStdioUpstream(name: string, server: McpServerConfig): Promise<Upstream>;
20
+ //# sourceMappingURL=upstream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream.d.ts","sourceRoot":"","sources":["../../src/gateway/upstream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGnE,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,MAAM,EACN,kBAAkB,EAClB,QAAQ,EACR,IAAI,EACL,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,yCAAyC;AACzC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC/E,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACvD,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACjC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACjF,iEAAiE;IACjE,cAAc,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wGAAwG;AACxG,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CA6BrE;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CASnG"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clientUpstream = clientUpstream;
4
+ exports.connectStdioUpstream = connectStdioUpstream;
5
+ const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
6
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/client/stdio.js");
7
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
8
+ /** Wrap a connected MCP client. Resources and prompts are empty when the server does not offer them. */
9
+ function clientUpstream(name, client) {
10
+ const caps = () => client.getServerCapabilities() ?? {};
11
+ return {
12
+ name,
13
+ async listTools() {
14
+ return (await client.listTools()).tools;
15
+ },
16
+ async callTool(tool, args) {
17
+ return (await client.callTool({ name: tool, arguments: args }));
18
+ },
19
+ async listResources() {
20
+ return caps().resources ? (await client.listResources()).resources : [];
21
+ },
22
+ readResource(uri) {
23
+ return client.readResource({ uri });
24
+ },
25
+ async listPrompts() {
26
+ return caps().prompts ? (await client.listPrompts()).prompts : [];
27
+ },
28
+ getPrompt(prompt, args) {
29
+ return client.getPrompt({ name: prompt, arguments: args });
30
+ },
31
+ onToolsChanged(listener) {
32
+ client.setNotificationHandler(types_js_1.ToolListChangedNotificationSchema, () => listener());
33
+ },
34
+ close() {
35
+ return client.close();
36
+ },
37
+ };
38
+ }
39
+ async function connectStdioUpstream(name, server) {
40
+ const client = new index_js_1.Client({ name: "guardbee-proxy-client", version: "1.0.0" }, { capabilities: {} });
41
+ const transport = new stdio_js_1.StdioClientTransport({
42
+ command: server.command,
43
+ args: server.args ?? [],
44
+ env: { ...process.env, ...(server.env ?? {}) },
45
+ });
46
+ await client.connect(transport);
47
+ return clientUpstream(name, client);
48
+ }
49
+ //# sourceMappingURL=upstream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upstream.js","sourceRoot":"","sources":["../../src/gateway/upstream.ts"],"names":[],"mappings":";;AA4BA,wCA6BC;AAED,oDASC;AApED,wEAAmE;AACnE,wEAAiF;AACjF,iEAAuF;AAyBvF,wGAAwG;AACxG,SAAgB,cAAc,CAAC,IAAY,EAAE,MAAc;IACzD,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,EAAE,IAAI,EAAE,CAAC;IACxD,OAAO;QACL,IAAI;QACJ,KAAK,CAAC,SAAS;YACb,OAAO,CAAC,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC;QAC1C,CAAC;QACD,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI;YACvB,OAAO,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAmB,CAAC;QACpF,CAAC;QACD,KAAK,CAAC,aAAa;YACjB,OAAO,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,CAAC;QACD,YAAY,CAAC,GAAG;YACd,OAAO,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,CAAC,WAAW;YACf,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,CAAC;QACD,SAAS,CAAC,MAAM,EAAE,IAAI;YACpB,OAAO,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,cAAc,CAAC,QAAQ;YACrB,MAAM,CAAC,sBAAsB,CAAC,4CAAiC,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,KAAK;YACH,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,CAAC;KACF,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,oBAAoB,CAAC,IAAY,EAAE,MAAuB;IAC9E,MAAM,MAAM,GAAG,IAAI,iBAAM,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC;IACrG,MAAM,SAAS,GAAG,IAAI,+BAAoB,CAAC;QACzC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;QACvB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,EAA4B;KACzE,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,27 @@
1
- export { startProxy } from "./proxy.js";
1
+ export { startProxy, startGateway, createProxyServer, createGatewayServer } from "./proxy.js";
2
+ export { elicitationApprover } from "./gateway/approval.js";
3
+ export type { Approver, ApprovalRequest, ApprovalOutcome } from "./gateway/approval.js";
4
+ export { PiiVault } from "./gateway/tokens.js";
5
+ export { maskFields } from "./gateway/fields.js";
2
6
  export { loadProxyConfig } from "./config.js";
7
+ export { loadGatewayConfig, parseGatewayYaml, fromLegacyConfig } from "./gateway/config.js";
8
+ export type { GatewayConfig } from "./gateway/config.js";
9
+ export { Gateway } from "./gateway/gateway.js";
10
+ export { clientUpstream, connectStdioUpstream } from "./gateway/upstream.js";
11
+ export type { Upstream } from "./gateway/upstream.js";
12
+ export { labelTool, LABELS } from "./gateway/labels.js";
13
+ export type { Label } from "./gateway/labels.js";
14
+ export { evaluatePolicy, globToRegExp } from "./gateway/policy.js";
15
+ export type { PolicyAction, PolicyRule, PolicyDecision } from "./gateway/policy.js";
16
+ export { TaintTracker } from "./gateway/taint.js";
17
+ export type { TaintMode, TaintSnapshot } from "./gateway/taint.js";
3
18
  export { scanForPromptInjection } from "./interceptors/prompt-injection.js";
4
19
  export { scanToolResult } from "./interceptors/tool-result.js";
5
20
  export { ToolDefinitionPin } from "./interceptors/definition-drift.js";
6
21
  export { maskPiiInValue, maskPiiInText } from "./interceptors/pii-masker.js";
7
- export { AuditLogger } from "./audit/logger.js";
8
- export type { ProxyConfig, McpServerConfig, InterceptResult, AuditEvent } from "./types.js";
22
+ export { AuditLogger, verifyAuditChain } from "./audit/logger.js";
23
+ export type { ChainVerification } from "./audit/logger.js";
24
+ export type { ProxyConfig, McpServerConfig, InterceptResult, AuditEvent, AuditConfig } from "./types.js";
25
+ export { planInit, runInit, clientConfigPath } from "./init.js";
26
+ export type { ClientName, InitPlan, InitOptions, InitResult } from "./init.js";
9
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7E,YAAY,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAClE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzG,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAChE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -1,10 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AuditLogger = exports.maskPiiInText = exports.maskPiiInValue = exports.ToolDefinitionPin = exports.scanToolResult = exports.scanForPromptInjection = exports.loadProxyConfig = exports.startProxy = void 0;
3
+ exports.clientConfigPath = exports.runInit = exports.planInit = exports.verifyAuditChain = exports.AuditLogger = exports.maskPiiInText = exports.maskPiiInValue = exports.ToolDefinitionPin = exports.scanToolResult = exports.scanForPromptInjection = exports.TaintTracker = exports.globToRegExp = exports.evaluatePolicy = exports.LABELS = exports.labelTool = exports.connectStdioUpstream = exports.clientUpstream = exports.Gateway = exports.fromLegacyConfig = exports.parseGatewayYaml = exports.loadGatewayConfig = exports.loadProxyConfig = exports.maskFields = exports.PiiVault = exports.elicitationApprover = exports.createGatewayServer = exports.createProxyServer = exports.startGateway = exports.startProxy = void 0;
4
4
  var proxy_js_1 = require("./proxy.js");
5
5
  Object.defineProperty(exports, "startProxy", { enumerable: true, get: function () { return proxy_js_1.startProxy; } });
6
+ Object.defineProperty(exports, "startGateway", { enumerable: true, get: function () { return proxy_js_1.startGateway; } });
7
+ Object.defineProperty(exports, "createProxyServer", { enumerable: true, get: function () { return proxy_js_1.createProxyServer; } });
8
+ Object.defineProperty(exports, "createGatewayServer", { enumerable: true, get: function () { return proxy_js_1.createGatewayServer; } });
9
+ var approval_js_1 = require("./gateway/approval.js");
10
+ Object.defineProperty(exports, "elicitationApprover", { enumerable: true, get: function () { return approval_js_1.elicitationApprover; } });
11
+ var tokens_js_1 = require("./gateway/tokens.js");
12
+ Object.defineProperty(exports, "PiiVault", { enumerable: true, get: function () { return tokens_js_1.PiiVault; } });
13
+ var fields_js_1 = require("./gateway/fields.js");
14
+ Object.defineProperty(exports, "maskFields", { enumerable: true, get: function () { return fields_js_1.maskFields; } });
6
15
  var config_js_1 = require("./config.js");
7
16
  Object.defineProperty(exports, "loadProxyConfig", { enumerable: true, get: function () { return config_js_1.loadProxyConfig; } });
17
+ var config_js_2 = require("./gateway/config.js");
18
+ Object.defineProperty(exports, "loadGatewayConfig", { enumerable: true, get: function () { return config_js_2.loadGatewayConfig; } });
19
+ Object.defineProperty(exports, "parseGatewayYaml", { enumerable: true, get: function () { return config_js_2.parseGatewayYaml; } });
20
+ Object.defineProperty(exports, "fromLegacyConfig", { enumerable: true, get: function () { return config_js_2.fromLegacyConfig; } });
21
+ var gateway_js_1 = require("./gateway/gateway.js");
22
+ Object.defineProperty(exports, "Gateway", { enumerable: true, get: function () { return gateway_js_1.Gateway; } });
23
+ var upstream_js_1 = require("./gateway/upstream.js");
24
+ Object.defineProperty(exports, "clientUpstream", { enumerable: true, get: function () { return upstream_js_1.clientUpstream; } });
25
+ Object.defineProperty(exports, "connectStdioUpstream", { enumerable: true, get: function () { return upstream_js_1.connectStdioUpstream; } });
26
+ var labels_js_1 = require("./gateway/labels.js");
27
+ Object.defineProperty(exports, "labelTool", { enumerable: true, get: function () { return labels_js_1.labelTool; } });
28
+ Object.defineProperty(exports, "LABELS", { enumerable: true, get: function () { return labels_js_1.LABELS; } });
29
+ var policy_js_1 = require("./gateway/policy.js");
30
+ Object.defineProperty(exports, "evaluatePolicy", { enumerable: true, get: function () { return policy_js_1.evaluatePolicy; } });
31
+ Object.defineProperty(exports, "globToRegExp", { enumerable: true, get: function () { return policy_js_1.globToRegExp; } });
32
+ var taint_js_1 = require("./gateway/taint.js");
33
+ Object.defineProperty(exports, "TaintTracker", { enumerable: true, get: function () { return taint_js_1.TaintTracker; } });
8
34
  var prompt_injection_js_1 = require("./interceptors/prompt-injection.js");
9
35
  Object.defineProperty(exports, "scanForPromptInjection", { enumerable: true, get: function () { return prompt_injection_js_1.scanForPromptInjection; } });
10
36
  var tool_result_js_1 = require("./interceptors/tool-result.js");
@@ -16,4 +42,9 @@ Object.defineProperty(exports, "maskPiiInValue", { enumerable: true, get: functi
16
42
  Object.defineProperty(exports, "maskPiiInText", { enumerable: true, get: function () { return pii_masker_js_1.maskPiiInText; } });
17
43
  var logger_js_1 = require("./audit/logger.js");
18
44
  Object.defineProperty(exports, "AuditLogger", { enumerable: true, get: function () { return logger_js_1.AuditLogger; } });
45
+ Object.defineProperty(exports, "verifyAuditChain", { enumerable: true, get: function () { return logger_js_1.verifyAuditChain; } });
46
+ var init_js_1 = require("./init.js");
47
+ Object.defineProperty(exports, "planInit", { enumerable: true, get: function () { return init_js_1.planInit; } });
48
+ Object.defineProperty(exports, "runInit", { enumerable: true, get: function () { return init_js_1.runInit; } });
49
+ Object.defineProperty(exports, "clientConfigPath", { enumerable: true, get: function () { return init_js_1.clientConfigPath; } });
19
50
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAAwC;AAA/B,sGAAA,UAAU,OAAA;AACnB,yCAA8C;AAArC,4GAAA,eAAe,OAAA;AACxB,0EAA4E;AAAnE,6HAAA,sBAAsB,OAAA;AAC/B,gEAA+D;AAAtD,gHAAA,cAAc,OAAA;AACvB,0EAAuE;AAA9D,wHAAA,iBAAiB,OAAA;AAC1B,8DAA6E;AAApE,+GAAA,cAAc,OAAA;AAAE,8GAAA,aAAa,OAAA;AACtC,+CAAgD;AAAvC,wGAAA,WAAW,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAA8F;AAArF,sGAAA,UAAU,OAAA;AAAE,wGAAA,YAAY,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AAAE,+GAAA,mBAAmB,OAAA;AACzE,qDAA4D;AAAnD,kHAAA,mBAAmB,OAAA;AAE5B,iDAA+C;AAAtC,qGAAA,QAAQ,OAAA;AACjB,iDAAiD;AAAxC,uGAAA,UAAU,OAAA;AACnB,yCAA8C;AAArC,4GAAA,eAAe,OAAA;AACxB,iDAA4F;AAAnF,8GAAA,iBAAiB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAE9D,mDAA+C;AAAtC,qGAAA,OAAO,OAAA;AAChB,qDAA6E;AAApE,6GAAA,cAAc,OAAA;AAAE,mHAAA,oBAAoB,OAAA;AAE7C,iDAAwD;AAA/C,sGAAA,SAAS,OAAA;AAAE,mGAAA,MAAM,OAAA;AAE1B,iDAAmE;AAA1D,2GAAA,cAAc,OAAA;AAAE,yGAAA,YAAY,OAAA;AAErC,+CAAkD;AAAzC,wGAAA,YAAY,OAAA;AAErB,0EAA4E;AAAnE,6HAAA,sBAAsB,OAAA;AAC/B,gEAA+D;AAAtD,gHAAA,cAAc,OAAA;AACvB,0EAAuE;AAA9D,wHAAA,iBAAiB,OAAA;AAC1B,8DAA6E;AAApE,+GAAA,cAAc,OAAA;AAAE,8GAAA,aAAa,OAAA;AACtC,+CAAkE;AAAzD,wGAAA,WAAW,OAAA;AAAE,6GAAA,gBAAgB,OAAA;AAGtC,qCAAgE;AAAvD,mGAAA,QAAQ,OAAA;AAAE,kGAAA,OAAO,OAAA;AAAE,2GAAA,gBAAgB,OAAA"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,34 @@
1
+ export type ClientName = "claude-desktop" | "cursor" | "claude-code";
2
+ /** Where each client keeps its user-level MCP config. */
3
+ export declare function clientConfigPath(client: ClientName, platform?: NodeJS.Platform, home?: string): string;
4
+ export interface InitPlan {
5
+ /** guardbee-proxy.yaml contents. */
6
+ yaml: string;
7
+ /** The client config rewritten to launch the proxy. */
8
+ clientConfig: string;
9
+ /** Server entries moved behind the proxy: config key → upstream name. */
10
+ migrated: Record<string, string>;
11
+ /** Entries left in the client config, and why. */
12
+ kept: {
13
+ name: string;
14
+ reason: string;
15
+ }[];
16
+ }
17
+ /**
18
+ * Work out the migration without touching the disk. stdio servers move into
19
+ * the YAML; HTTP servers, disabled entries and an existing proxy entry stay.
20
+ */
21
+ export declare function planInit(clientConfigText: string, yamlPath: string, auditPath: string): InitPlan;
22
+ export interface InitOptions {
23
+ clientConfigPath: string;
24
+ yamlPath: string;
25
+ dryRun?: boolean;
26
+ force?: boolean;
27
+ now?: Date;
28
+ }
29
+ export interface InitResult extends InitPlan {
30
+ backupPath?: string;
31
+ }
32
+ /** Write the YAML (mode 0600, it may hold tokens), back up the client config, then rewrite it. */
33
+ export declare function runInit(options: InitOptions): InitResult;
34
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,UAAU,GAAG,gBAAgB,GAAG,QAAQ,GAAG,aAAa,CAAC;AAErE,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,kBAAmB,EAAE,IAAI,SAAe,GAAG,MAAM,CAW7G;AAED,MAAM,WAAW,QAAQ;IACvB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,uDAAuD;IACvD,YAAY,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,kDAAkD;IAClD,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1C;AAmCD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,CAyDhG;AAED,MAAM,WAAW,WAAW;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,MAAM,WAAW,UAAW,SAAQ,QAAQ;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,kGAAkG;AAClG,wBAAgB,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAqBxD"}
package/dist/init.js ADDED
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.clientConfigPath = clientConfigPath;
7
+ exports.planInit = planInit;
8
+ exports.runInit = runInit;
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const os_1 = __importDefault(require("os"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const yaml_1 = require("yaml");
13
+ /** Where each client keeps its user-level MCP config. */
14
+ function clientConfigPath(client, platform = process.platform, home = os_1.default.homedir()) {
15
+ switch (client) {
16
+ case "claude-desktop":
17
+ if (platform === "darwin")
18
+ return path_1.default.join(home, "Library", "Application Support", "Claude", "claude_desktop_config.json");
19
+ if (platform === "win32")
20
+ return path_1.default.join(process.env["APPDATA"] ?? path_1.default.join(home, "AppData", "Roaming"), "Claude", "claude_desktop_config.json");
21
+ return path_1.default.join(home, ".config", "Claude", "claude_desktop_config.json");
22
+ case "cursor":
23
+ return path_1.default.join(home, ".cursor", "mcp.json");
24
+ case "claude-code":
25
+ return path_1.default.join(home, ".claude.json");
26
+ }
27
+ }
28
+ const PROXY_PACKAGE = "@guardbee/mcp-security-proxy";
29
+ function asRecord(value) {
30
+ return value && typeof value === "object" && !Array.isArray(value) ? value : null;
31
+ }
32
+ function isProxyEntry(entry) {
33
+ const words = [entry["command"], ...(Array.isArray(entry["args"]) ? entry["args"] : [])].map(String);
34
+ return words.some((word) => word.includes(PROXY_PACKAGE) || /(^|[/\\])guardbee-proxy(\.cmd)?$/.test(word));
35
+ }
36
+ /** Config keys become upstream names: letters, digits, - and single _. */
37
+ function upstreamName(key, taken) {
38
+ const base = key
39
+ .replace(/[^A-Za-z0-9_-]+/g, "-")
40
+ .replace(/_{2,}/g, "_")
41
+ .replace(/^[_-]+|[_-]+$/g, "") || "server";
42
+ let name = base;
43
+ for (let i = 2; taken.has(name); i++)
44
+ name = `${base}-${i}`;
45
+ taken.add(name);
46
+ return name;
47
+ }
48
+ function stringRecord(value) {
49
+ const rec = asRecord(value);
50
+ if (!rec)
51
+ return undefined;
52
+ const out = Object.fromEntries(Object.entries(rec).flatMap(([k, v]) => (typeof v === "string" || typeof v === "number" || typeof v === "boolean" ? [[k, String(v)]] : [])));
53
+ return Object.keys(out).length > 0 ? out : undefined;
54
+ }
55
+ /**
56
+ * Work out the migration without touching the disk. stdio servers move into
57
+ * the YAML; HTTP servers, disabled entries and an existing proxy entry stay.
58
+ */
59
+ function planInit(clientConfigText, yamlPath, auditPath) {
60
+ const root = asRecord(JSON.parse(clientConfigText));
61
+ if (!root)
62
+ throw new Error("The client config is not a JSON object");
63
+ const servers = asRecord(root["mcpServers"]);
64
+ if (!servers || Object.keys(servers).length === 0)
65
+ throw new Error("No mcpServers found in the client config");
66
+ const upstreams = {};
67
+ const migrated = {};
68
+ const kept = [];
69
+ const remaining = {};
70
+ const taken = new Set();
71
+ for (const [key, value] of Object.entries(servers)) {
72
+ const entry = asRecord(value);
73
+ if (!entry) {
74
+ remaining[key] = value;
75
+ kept.push({ name: key, reason: "not an object" });
76
+ }
77
+ else if (isProxyEntry(entry)) {
78
+ remaining[key] = value;
79
+ kept.push({ name: key, reason: "already the GuardBee proxy" });
80
+ }
81
+ else if (entry["disabled"] === true) {
82
+ remaining[key] = value;
83
+ kept.push({ name: key, reason: "disabled" });
84
+ }
85
+ else if (typeof entry["command"] !== "string") {
86
+ remaining[key] = value;
87
+ kept.push({ name: key, reason: "HTTP server: the proxy does not front HTTP servers yet, so this one bypasses the policy" });
88
+ }
89
+ else {
90
+ const name = upstreamName(key, taken);
91
+ const args = Array.isArray(entry["args"]) ? entry["args"].map(String) : undefined;
92
+ const env = stringRecord(entry["env"]);
93
+ upstreams[name] = { command: entry["command"], ...(args?.length ? { args } : {}), ...(env ? { env } : {}) };
94
+ migrated[key] = name;
95
+ }
96
+ }
97
+ if (Object.keys(upstreams).length === 0)
98
+ throw new Error("No stdio MCP servers to move behind the proxy");
99
+ const proxyKey = !("guardbee" in remaining) ? "guardbee" : "guardbee-gateway";
100
+ // Pinned to 1.x: 0.x does not understand --config and would fail to start.
101
+ remaining[proxyKey] = { command: "npx", args: ["-y", `${PROXY_PACKAGE}@^1`, "--config", yamlPath] };
102
+ const yaml = "# GuardBee MCP gateway — generated by `guardbee-proxy init`.\n" +
103
+ "# Tools appear to the agent as <upstream>__<tool>. Check a change with `guardbee-proxy validate --config <this file>`.\n" +
104
+ "# env values were copied from the client config; move secrets to ${VAR} references where you can.\n" +
105
+ (0, yaml_1.stringify)({
106
+ version: 1,
107
+ upstreams,
108
+ taint: { mode: "strict" },
109
+ audit: { sink: "file", filePath: auditPath },
110
+ });
111
+ return {
112
+ yaml,
113
+ clientConfig: JSON.stringify({ ...root, mcpServers: remaining }, null, 2) + "\n",
114
+ migrated,
115
+ kept,
116
+ };
117
+ }
118
+ /** Write the YAML (mode 0600, it may hold tokens), back up the client config, then rewrite it. */
119
+ function runInit(options) {
120
+ const clientPath = path_1.default.resolve(options.clientConfigPath);
121
+ const yamlPath = path_1.default.resolve(options.yamlPath);
122
+ const auditPath = path_1.default.join(path_1.default.dirname(yamlPath), "guardbee-audit.jsonl");
123
+ if (!fs_1.default.existsSync(clientPath))
124
+ throw new Error(`Client config not found: ${clientPath}`);
125
+ if (fs_1.default.existsSync(yamlPath) && !options.force && !options.dryRun) {
126
+ throw new Error(`${yamlPath} already exists; pass --force to overwrite it`);
127
+ }
128
+ const plan = planInit(fs_1.default.readFileSync(clientPath, "utf8"), yamlPath, auditPath);
129
+ if (options.dryRun)
130
+ return plan;
131
+ const stamp = (options.now ?? new Date()).toISOString().replace(/[:.]/g, "-");
132
+ const backupPath = `${clientPath}.guardbee-backup-${stamp}`;
133
+ fs_1.default.mkdirSync(path_1.default.dirname(yamlPath), { recursive: true });
134
+ fs_1.default.writeFileSync(yamlPath, plan.yaml, { mode: 0o600 });
135
+ fs_1.default.chmodSync(yamlPath, 0o600); // `mode` only applies when the file is created; --force may overwrite a wider one
136
+ fs_1.default.copyFileSync(clientPath, backupPath);
137
+ fs_1.default.writeFileSync(clientPath, plan.clientConfig);
138
+ return { ...plan, backupPath };
139
+ }
140
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export interface PinFinding {
6
6
  export type ToolRecord = Record<string, unknown> & {
7
7
  name?: unknown;
8
8
  };
9
+ export declare function stable(value: unknown): string;
9
10
  export declare function hashToolDefinition(tool: ToolRecord): string;
10
11
  /**
11
12
  * Pins the first tools/list a session sees. Later lists are compared to that
@@ -1 +1 @@
1
- {"version":3,"file":"definition-drift.d.ts","sourceRoot":"","sources":["../../src/interceptors/definition-drift.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AActE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAW3D;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAyD;IACvE,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;KAAE;IAiDvG,8FAA8F;IAC9F,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI;IAIvC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,GAAG,IAAI;CAelE"}
1
+ {"version":3,"file":"definition-drift.d.ts","sourceRoot":"","sources":["../../src/interceptors/definition-drift.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAEtE,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAU7C;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAW3D;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAyD;IACvE,OAAO,CAAC,KAAK,CAAS;IAEtB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,QAAQ,EAAE,UAAU,EAAE,CAAA;KAAE;IAiDvG,8FAA8F;IAC9F,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI;IAIvC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,GAAG,IAAI;CAelE"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ToolDefinitionPin = void 0;
4
+ exports.stable = stable;
4
5
  exports.hashToolDefinition = hashToolDefinition;
5
6
  const crypto_1 = require("crypto");
6
7
  function stable(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"definition-drift.js","sourceRoot":"","sources":["../../src/interceptors/definition-drift.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definition-drift.js","sourceRoot":"","sources":["../../src/interceptors/definition-drift.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,2 @@
1
- export declare function maskPiiInText(text: string): string;
2
- export declare function maskPiiInValue(value: unknown): unknown;
1
+ export { maskPiiInText, maskPiiInValue } from "@guardbee/guard-core";
3
2
  //# sourceMappingURL=pii-masker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pii-masker.d.ts","sourceRoot":"","sources":["../../src/interceptors/pii-masker.ts"],"names":[],"mappings":"AAuCA,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUlD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAetD"}
1
+ {"version":3,"file":"pii-masker.d.ts","sourceRoot":"","sources":["../../src/interceptors/pii-masker.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,71 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.maskPiiInText = maskPiiInText;
4
- exports.maskPiiInValue = maskPiiInValue;
5
- // PII patterns for response masking
6
- const PII_PATTERNS = [
7
- {
8
- name: "tc_kimlik",
9
- pattern: /\b[1-9]\d{10}\b/g,
10
- replacement: "[TC-KİMLİK]",
11
- },
12
- {
13
- name: "iban",
14
- pattern: /\bTR\d{2}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{4}[\s-]?\d{2}\b/gi,
15
- replacement: "TR**[IBAN]",
16
- },
17
- {
18
- name: "credit_card",
19
- pattern: /\b(?:\d{4}[\s-]?){3}\d{4}\b/g,
20
- replacement: "****-****-****-[KART]",
21
- },
22
- {
23
- name: "email",
24
- pattern: /\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b/g,
25
- replacement: "***@[EMAIL]",
26
- },
27
- {
28
- name: "phone_tr",
29
- pattern: /\b(?:\+90|0090|0)?[\s-]?(?:\d{3})[\s-]?\d{3}[\s-]?\d{2}[\s-]?\d{2}\b/g,
30
- replacement: "+90-***-***-**[TELEFON]",
31
- },
32
- {
33
- name: "api_key",
34
- pattern: /\b(?:sk|pk|api|key|token|secret)[-_]?[A-Za-z0-9]{16,}\b/gi,
35
- replacement: "[API-KEY]",
36
- },
37
- {
38
- name: "jwt",
39
- pattern: /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g,
40
- replacement: "[JWT-TOKEN]",
41
- },
42
- ];
43
- function maskPiiInText(text) {
44
- let result = text;
45
- for (const { pattern, replacement } of PII_PATTERNS) {
46
- if (typeof replacement === "string") {
47
- result = result.replace(pattern, replacement);
48
- }
49
- else {
50
- result = result.replace(pattern, replacement);
51
- }
52
- }
53
- return result;
54
- }
55
- function maskPiiInValue(value) {
56
- if (typeof value === "string") {
57
- return maskPiiInText(value);
58
- }
59
- if (Array.isArray(value)) {
60
- return value.map(maskPiiInValue);
61
- }
62
- if (typeof value === "object" && value !== null) {
63
- const result = {};
64
- for (const [k, v] of Object.entries(value)) {
65
- result[k] = maskPiiInValue(v);
66
- }
67
- return result;
68
- }
69
- return value;
70
- }
3
+ exports.maskPiiInValue = exports.maskPiiInText = void 0;
4
+ // Checksum-validated PII masking lives in @guardbee/guard-core, shared with the gateway.
5
+ var guard_core_1 = require("@guardbee/guard-core");
6
+ Object.defineProperty(exports, "maskPiiInText", { enumerable: true, get: function () { return guard_core_1.maskPiiInText; } });
7
+ Object.defineProperty(exports, "maskPiiInValue", { enumerable: true, get: function () { return guard_core_1.maskPiiInValue; } });
71
8
  //# sourceMappingURL=pii-masker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pii-masker.js","sourceRoot":"","sources":["../../src/interceptors/pii-masker.ts"],"names":[],"mappings":";;AAuCA,sCAUC;AAED,wCAeC;AAlED,oCAAoC;AACpC,MAAM,YAAY,GAA6D;IAC7E;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,kBAAkB;QAC3B,WAAW,EAAE,aAAa;KAC3B;IACD;QACE,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,iFAAiF;QAC1F,WAAW,EAAE,YAAY;KAC1B;IACD;QACE,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,8BAA8B;QACvC,WAAW,EAAE,uBAAuB;KACrC;IACD;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,sDAAsD;QAC/D,WAAW,EAAE,aAAa;KAC3B;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,uEAAuE;QAChF,WAAW,EAAE,yBAAyB;KACvC;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,2DAA2D;QACpE,WAAW,EAAE,WAAW;KACzB;IACD;QACE,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,wDAAwD;QACjE,WAAW,EAAE,aAAa;KAC3B;CACF,CAAC;AAEF,SAAgB,aAAa,CAAC,IAAY;IACxC,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,YAAY,EAAE,CAAC;QACpD,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,cAAc,CAAC,KAAc;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,MAAM,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"pii-masker.js","sourceRoot":"","sources":["../../src/interceptors/pii-masker.ts"],"names":[],"mappings":";;;AAAA,yFAAyF;AACzF,mDAAqE;AAA5D,2GAAA,aAAa,OAAA;AAAE,4GAAA,cAAc,OAAA"}
@@ -1,3 +1,2 @@
1
- import type { InterceptResult } from "../types.js";
2
- export declare function scanForPromptInjection(input: unknown, mode?: "block" | "warn"): InterceptResult;
1
+ export { scanForPromptInjection } from "@guardbee/guard-core";
3
2
  //# sourceMappingURL=prompt-injection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-injection.d.ts","sourceRoot":"","sources":["../../src/interceptors/prompt-injection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA8BnD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,IAAI,GAAE,OAAO,GAAG,MAAgB,GAC/B,eAAe,CAajB"}
1
+ {"version":3,"file":"prompt-injection.d.ts","sourceRoot":"","sources":["../../src/interceptors/prompt-injection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC"}