@neverinfamous/postgres-mcp 1.3.0 → 2.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.
- package/README.md +177 -129
- package/dist/__tests__/benchmarks/codemode.bench.d.ts +10 -0
- package/dist/__tests__/benchmarks/codemode.bench.d.ts.map +1 -0
- package/dist/__tests__/benchmarks/codemode.bench.js +159 -0
- package/dist/__tests__/benchmarks/codemode.bench.js.map +1 -0
- package/dist/__tests__/benchmarks/connection-pool.bench.d.ts +10 -0
- package/dist/__tests__/benchmarks/connection-pool.bench.d.ts.map +1 -0
- package/dist/__tests__/benchmarks/connection-pool.bench.js +123 -0
- package/dist/__tests__/benchmarks/connection-pool.bench.js.map +1 -0
- package/dist/__tests__/benchmarks/handler-dispatch.bench.d.ts +11 -0
- package/dist/__tests__/benchmarks/handler-dispatch.bench.d.ts.map +1 -0
- package/dist/__tests__/benchmarks/handler-dispatch.bench.js +199 -0
- package/dist/__tests__/benchmarks/handler-dispatch.bench.js.map +1 -0
- package/dist/__tests__/benchmarks/logger-sanitization.bench.d.ts +15 -0
- package/dist/__tests__/benchmarks/logger-sanitization.bench.d.ts.map +1 -0
- package/dist/__tests__/benchmarks/logger-sanitization.bench.js +155 -0
- package/dist/__tests__/benchmarks/logger-sanitization.bench.js.map +1 -0
- package/dist/__tests__/benchmarks/resource-prompts.bench.d.ts +10 -0
- package/dist/__tests__/benchmarks/resource-prompts.bench.d.ts.map +1 -0
- package/dist/__tests__/benchmarks/resource-prompts.bench.js +181 -0
- package/dist/__tests__/benchmarks/resource-prompts.bench.js.map +1 -0
- package/dist/__tests__/benchmarks/schema-parsing.bench.d.ts +11 -0
- package/dist/__tests__/benchmarks/schema-parsing.bench.d.ts.map +1 -0
- package/dist/__tests__/benchmarks/schema-parsing.bench.js +209 -0
- package/dist/__tests__/benchmarks/schema-parsing.bench.js.map +1 -0
- package/dist/__tests__/benchmarks/tool-filtering.bench.d.ts +9 -0
- package/dist/__tests__/benchmarks/tool-filtering.bench.d.ts.map +1 -0
- package/dist/__tests__/benchmarks/tool-filtering.bench.js +83 -0
- package/dist/__tests__/benchmarks/tool-filtering.bench.js.map +1 -0
- package/dist/__tests__/benchmarks/transport-auth.bench.d.ts +10 -0
- package/dist/__tests__/benchmarks/transport-auth.bench.d.ts.map +1 -0
- package/dist/__tests__/benchmarks/transport-auth.bench.js +128 -0
- package/dist/__tests__/benchmarks/transport-auth.bench.js.map +1 -0
- package/dist/__tests__/benchmarks/utilities.bench.d.ts +10 -0
- package/dist/__tests__/benchmarks/utilities.bench.d.ts.map +1 -0
- package/dist/__tests__/benchmarks/utilities.bench.js +164 -0
- package/dist/__tests__/benchmarks/utilities.bench.js.map +1 -0
- package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
- package/dist/adapters/DatabaseAdapter.js +12 -0
- package/dist/adapters/DatabaseAdapter.js.map +1 -1
- package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
- package/dist/adapters/postgresql/PostgresAdapter.js +3 -0
- package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
- package/dist/adapters/postgresql/schemas/backup.d.ts +37 -23
- package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/backup.js +53 -22
- package/dist/adapters/postgresql/schemas/backup.js.map +1 -1
- package/dist/adapters/postgresql/schemas/extensions.d.ts +56 -37
- package/dist/adapters/postgresql/schemas/extensions.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/extensions.js +68 -36
- package/dist/adapters/postgresql/schemas/extensions.js.map +1 -1
- package/dist/adapters/postgresql/schemas/index.d.ts +3 -2
- package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/index.js +8 -2
- package/dist/adapters/postgresql/schemas/index.js.map +1 -1
- package/dist/adapters/postgresql/schemas/introspection.d.ts +445 -0
- package/dist/adapters/postgresql/schemas/introspection.d.ts.map +1 -0
- package/dist/adapters/postgresql/schemas/introspection.js +478 -0
- package/dist/adapters/postgresql/schemas/introspection.js.map +1 -0
- package/dist/adapters/postgresql/schemas/jsonb.d.ts +8 -0
- package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/jsonb.js +26 -2
- package/dist/adapters/postgresql/schemas/jsonb.js.map +1 -1
- package/dist/adapters/postgresql/schemas/monitoring.d.ts +41 -25
- package/dist/adapters/postgresql/schemas/monitoring.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/monitoring.js +49 -16
- package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -1
- package/dist/adapters/postgresql/schemas/partitioning.d.ts +16 -20
- package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/partitioning.js +21 -10
- package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -1
- package/dist/adapters/postgresql/schemas/partman.d.ts +69 -0
- package/dist/adapters/postgresql/schemas/partman.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/partman.js +46 -33
- package/dist/adapters/postgresql/schemas/partman.js.map +1 -1
- package/dist/adapters/postgresql/schemas/performance.d.ts +37 -19
- package/dist/adapters/postgresql/schemas/performance.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/performance.js +54 -12
- package/dist/adapters/postgresql/schemas/performance.js.map +1 -1
- package/dist/adapters/postgresql/schemas/postgis.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/postgis.js +20 -0
- package/dist/adapters/postgresql/schemas/postgis.js.map +1 -1
- package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +15 -7
- package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/schema-mgmt.js +36 -7
- package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -1
- package/dist/adapters/postgresql/schemas/text-search.d.ts +26 -14
- package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -1
- package/dist/adapters/postgresql/schemas/text-search.js +41 -9
- package/dist/adapters/postgresql/schemas/text-search.js.map +1 -1
- package/dist/adapters/postgresql/tools/admin.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/admin.js +82 -67
- package/dist/adapters/postgresql/tools/admin.js.map +1 -1
- package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/backup/dump.js +27 -24
- package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -1
- package/dist/adapters/postgresql/tools/citext.js +114 -82
- package/dist/adapters/postgresql/tools/citext.js.map +1 -1
- package/dist/adapters/postgresql/tools/codemode/index.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/codemode/index.js +2 -11
- package/dist/adapters/postgresql/tools/codemode/index.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/core/convenience.js +23 -8
- package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/core/indexes.js +3 -2
- package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -1
- package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/core/tables.js +4 -4
- package/dist/adapters/postgresql/tools/core/tables.js.map +1 -1
- package/dist/adapters/postgresql/tools/cron.js +59 -27
- package/dist/adapters/postgresql/tools/cron.js.map +1 -1
- package/dist/adapters/postgresql/tools/introspection.d.ts +15 -0
- package/dist/adapters/postgresql/tools/introspection.d.ts.map +1 -0
- package/dist/adapters/postgresql/tools/introspection.js +1682 -0
- package/dist/adapters/postgresql/tools/introspection.js.map +1 -0
- package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/jsonb/advanced.js +26 -17
- package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +1 -1
- package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/jsonb/basic.js +92 -23
- package/dist/adapters/postgresql/tools/jsonb/basic.js.map +1 -1
- package/dist/adapters/postgresql/tools/ltree.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/ltree.js +17 -4
- package/dist/adapters/postgresql/tools/ltree.js.map +1 -1
- package/dist/adapters/postgresql/tools/monitoring.js +32 -21
- package/dist/adapters/postgresql/tools/monitoring.js.map +1 -1
- package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/partman/management.js +32 -52
- package/dist/adapters/postgresql/tools/partman/management.js.map +1 -1
- package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/partman/operations.js +5 -5
- package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -1
- package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/performance/analysis.js +15 -8
- package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -1
- package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/performance/monitoring.js +10 -7
- package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -1
- package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/performance/stats.js +62 -28
- package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -1
- package/dist/adapters/postgresql/tools/pgcrypto.js +31 -11
- package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -1
- package/dist/adapters/postgresql/tools/postgis/advanced.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/postgis/advanced.js +30 -25
- package/dist/adapters/postgresql/tools/postgis/advanced.js.map +1 -1
- package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/postgis/basic.js +24 -15
- package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -1
- package/dist/adapters/postgresql/tools/schema.js +79 -5
- package/dist/adapters/postgresql/tools/schema.js.map +1 -1
- package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/stats/advanced.js +61 -39
- package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -1
- package/dist/adapters/postgresql/tools/stats/basic.d.ts.map +1 -1
- package/dist/adapters/postgresql/tools/stats/basic.js +45 -30
- package/dist/adapters/postgresql/tools/stats/basic.js.map +1 -1
- package/dist/adapters/postgresql/tools/text.js +327 -148
- package/dist/adapters/postgresql/tools/text.js.map +1 -1
- package/dist/auth/auth-context.d.ts +28 -0
- package/dist/auth/auth-context.d.ts.map +1 -0
- package/dist/auth/auth-context.js +37 -0
- package/dist/auth/auth-context.js.map +1 -0
- package/dist/auth/scope-map.d.ts +20 -0
- package/dist/auth/scope-map.d.ts.map +1 -0
- package/dist/auth/scope-map.js +40 -0
- package/dist/auth/scope-map.js.map +1 -0
- package/dist/auth/scopes.d.ts.map +1 -1
- package/dist/auth/scopes.js +2 -0
- package/dist/auth/scopes.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/codemode/api.d.ts +1 -0
- package/dist/codemode/api.d.ts.map +1 -1
- package/dist/codemode/api.js +34 -0
- package/dist/codemode/api.js.map +1 -1
- package/dist/codemode/index.d.ts +0 -2
- package/dist/codemode/index.d.ts.map +1 -1
- package/dist/codemode/index.js +0 -4
- package/dist/codemode/index.js.map +1 -1
- package/dist/codemode/sandbox.d.ts +14 -1
- package/dist/codemode/sandbox.d.ts.map +1 -1
- package/dist/codemode/sandbox.js +58 -19
- package/dist/codemode/sandbox.js.map +1 -1
- package/dist/codemode/types.d.ts.map +1 -1
- package/dist/codemode/types.js +3 -0
- package/dist/codemode/types.js.map +1 -1
- package/dist/constants/ServerInstructions.d.ts +5 -1
- package/dist/constants/ServerInstructions.d.ts.map +1 -1
- package/dist/constants/ServerInstructions.js +91 -43
- package/dist/constants/ServerInstructions.js.map +1 -1
- package/dist/filtering/ToolConstants.d.ts +22 -19
- package/dist/filtering/ToolConstants.d.ts.map +1 -1
- package/dist/filtering/ToolConstants.js +48 -37
- package/dist/filtering/ToolConstants.js.map +1 -1
- package/dist/filtering/ToolFilter.d.ts.map +1 -1
- package/dist/filtering/ToolFilter.js +10 -13
- package/dist/filtering/ToolFilter.js.map +1 -1
- package/dist/pool/ConnectionPool.js +1 -1
- package/dist/pool/ConnectionPool.js.map +1 -1
- package/dist/transports/http.d.ts +1 -0
- package/dist/transports/http.d.ts.map +1 -1
- package/dist/transports/http.js +75 -21
- package/dist/transports/http.js.map +1 -1
- package/dist/types/filtering.d.ts +2 -2
- package/dist/types/filtering.d.ts.map +1 -1
- package/dist/utils/icons.d.ts.map +1 -1
- package/dist/utils/icons.js +5 -0
- package/dist/utils/icons.js.map +1 -1
- package/dist/utils/where-clause.d.ts.map +1 -1
- package/dist/utils/where-clause.js +24 -0
- package/dist/utils/where-clause.js.map +1 -1
- package/package.json +15 -12
- package/dist/codemode/sandbox-factory.d.ts +0 -72
- package/dist/codemode/sandbox-factory.d.ts.map +0 -1
- package/dist/codemode/sandbox-factory.js +0 -88
- package/dist/codemode/sandbox-factory.js.map +0 -1
- package/dist/codemode/worker-sandbox.d.ts +0 -82
- package/dist/codemode/worker-sandbox.d.ts.map +0 -1
- package/dist/codemode/worker-sandbox.js +0 -244
- package/dist/codemode/worker-sandbox.js.map +0 -1
- package/dist/codemode/worker-script.d.ts +0 -8
- package/dist/codemode/worker-script.d.ts.map +0 -1
- package/dist/codemode/worker-script.js +0 -113
- package/dist/codemode/worker-script.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-factory.d.ts","sourceRoot":"","sources":["../../src/codemode/sandbox-factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE7E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG,QAAQ,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,SAAS,IAAI,OAAO,CAAC;IACrB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,UAAU,IAAI,IAAI,CAAC;IACnB,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1B,QAAQ,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAKD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAK7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,CAEnD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,WAAW,EAAE,CAExD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,CAAC,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE,cAAc,GACvB,QAAQ,CAUV;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,CAAC,EAAE,WAAW,EAClB,WAAW,CAAC,EAAE,WAAW,EACzB,cAAc,CAAC,EAAE,cAAc,GAC9B,YAAY,CAUd;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,eAAe,CAoBrE"}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* postgres-mcp - Sandbox Factory
|
|
3
|
-
*
|
|
4
|
-
* Factory functions for creating sandbox instances with configurable isolation modes.
|
|
5
|
-
* Allows runtime selection between vm-based and worker-based sandboxes.
|
|
6
|
-
*/
|
|
7
|
-
import { CodeModeSandbox, SandboxPool } from "./sandbox.js";
|
|
8
|
-
import { WorkerSandbox, WorkerSandboxPool } from "./worker-sandbox.js";
|
|
9
|
-
import { logger } from "../utils/logger.js";
|
|
10
|
-
// Default mode (module-level state)
|
|
11
|
-
let defaultMode = "vm";
|
|
12
|
-
/**
|
|
13
|
-
* Set the default sandbox mode
|
|
14
|
-
*/
|
|
15
|
-
export function setDefaultSandboxMode(mode) {
|
|
16
|
-
defaultMode = mode;
|
|
17
|
-
logger.info(`Sandbox default mode set to: ${mode}`, {
|
|
18
|
-
module: "CODEMODE",
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Get the current default mode
|
|
23
|
-
*/
|
|
24
|
-
export function getDefaultSandboxMode() {
|
|
25
|
-
return defaultMode;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Get available sandbox modes
|
|
29
|
-
*/
|
|
30
|
-
export function getAvailableSandboxModes() {
|
|
31
|
-
return ["vm", "worker"];
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Create a sandbox instance
|
|
35
|
-
* @param mode - Isolation mode ('vm' or 'worker')
|
|
36
|
-
* @param options - Sandbox options
|
|
37
|
-
*/
|
|
38
|
-
export function createSandbox(mode, options) {
|
|
39
|
-
const selectedMode = mode ?? defaultMode;
|
|
40
|
-
switch (selectedMode) {
|
|
41
|
-
case "worker":
|
|
42
|
-
return WorkerSandbox.create(options);
|
|
43
|
-
case "vm":
|
|
44
|
-
default:
|
|
45
|
-
return CodeModeSandbox.create(options);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Create a sandbox pool
|
|
50
|
-
* @param mode - Isolation mode ('vm' or 'worker')
|
|
51
|
-
* @param poolOptions - Pool configuration
|
|
52
|
-
* @param sandboxOptions - Sandbox configuration
|
|
53
|
-
*/
|
|
54
|
-
export function createSandboxPool(mode, poolOptions, sandboxOptions) {
|
|
55
|
-
const selectedMode = mode ?? defaultMode;
|
|
56
|
-
switch (selectedMode) {
|
|
57
|
-
case "worker":
|
|
58
|
-
return new WorkerSandboxPool(poolOptions, sandboxOptions);
|
|
59
|
-
case "vm":
|
|
60
|
-
default:
|
|
61
|
-
return new SandboxPool(poolOptions, sandboxOptions);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Get mode characteristics for documentation/selection
|
|
66
|
-
*/
|
|
67
|
-
export function getSandboxModeInfo(mode) {
|
|
68
|
-
switch (mode) {
|
|
69
|
-
case "worker":
|
|
70
|
-
return {
|
|
71
|
-
name: "Worker Thread",
|
|
72
|
-
isolation: "Separate V8 instance per worker",
|
|
73
|
-
performance: "Higher overhead (thread spawn per execution)",
|
|
74
|
-
security: "Enhanced - isolated memory, hard timeouts",
|
|
75
|
-
requirements: "Node.js worker_threads (built-in)",
|
|
76
|
-
};
|
|
77
|
-
case "vm":
|
|
78
|
-
default:
|
|
79
|
-
return {
|
|
80
|
-
name: "VM Context",
|
|
81
|
-
isolation: "Script isolation within same process",
|
|
82
|
-
performance: "Low overhead (reusable contexts)",
|
|
83
|
-
security: "Standard - script isolation, blocked globals",
|
|
84
|
-
requirements: "Node.js vm module (built-in)",
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
//# sourceMappingURL=sandbox-factory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sandbox-factory.js","sourceRoot":"","sources":["../../src/codemode/sandbox-factory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA4C5C,oCAAoC;AACpC,IAAI,WAAW,GAAgB,IAAI,CAAC;AAEpC;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAiB;IACrD,WAAW,GAAG,IAAI,CAAC;IACnB,MAAM,CAAC,IAAI,CAAC,gCAAgC,IAAI,EAAE,EAAE;QAClD,MAAM,EAAE,UAAmB;KAC5B,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAkB,EAClB,OAAwB;IAExB,MAAM,YAAY,GAAG,IAAI,IAAI,WAAW,CAAC;IAEzC,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC;QACV;YACE,OAAO,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAkB,EAClB,WAAyB,EACzB,cAA+B;IAE/B,MAAM,YAAY,GAAG,IAAI,IAAI,WAAW,CAAC;IAEzC,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,IAAI,iBAAiB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC5D,KAAK,IAAI,CAAC;QACV;YACE,OAAO,IAAI,WAAW,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAiB;IAClD,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,QAAQ;YACX,OAAO;gBACL,IAAI,EAAE,eAAe;gBACrB,SAAS,EAAE,iCAAiC;gBAC5C,WAAW,EAAE,8CAA8C;gBAC3D,QAAQ,EAAE,2CAA2C;gBACrD,YAAY,EAAE,mCAAmC;aAClD,CAAC;QACJ,KAAK,IAAI,CAAC;QACV;YACE,OAAO;gBACL,IAAI,EAAE,YAAY;gBAClB,SAAS,EAAE,sCAAsC;gBACjD,WAAW,EAAE,kCAAkC;gBAC/C,QAAQ,EAAE,8CAA8C;gBACxD,YAAY,EAAE,8BAA8B;aAC7C,CAAC;IACN,CAAC;AACH,CAAC"}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* postgres-mcp - Code Mode Worker Sandbox
|
|
3
|
-
*
|
|
4
|
-
* Enhanced sandboxed execution using worker_threads for process-level isolation.
|
|
5
|
-
* Provides stronger isolation than vm module by running code in a separate thread
|
|
6
|
-
* with isolated memory space.
|
|
7
|
-
*
|
|
8
|
-
* Features:
|
|
9
|
-
* - Separate V8 instance per worker thread
|
|
10
|
-
* - Hard timeout enforcement (worker termination)
|
|
11
|
-
* - Isolated memory space
|
|
12
|
-
* - Clean process state on each execution
|
|
13
|
-
*/
|
|
14
|
-
import { type SandboxOptions, type PoolOptions, type SandboxResult } from "./types.js";
|
|
15
|
-
/**
|
|
16
|
-
* A sandboxed execution context using worker_threads
|
|
17
|
-
* Provides stronger isolation than vm module with separate V8 instance
|
|
18
|
-
*/
|
|
19
|
-
export declare class WorkerSandbox {
|
|
20
|
-
private readonly options;
|
|
21
|
-
private disposed;
|
|
22
|
-
private constructor();
|
|
23
|
-
/**
|
|
24
|
-
* Create a new worker sandbox instance
|
|
25
|
-
*/
|
|
26
|
-
static create(options?: SandboxOptions): WorkerSandbox;
|
|
27
|
-
/**
|
|
28
|
-
* Execute code in a worker thread
|
|
29
|
-
* Each execution spawns a fresh worker for maximum isolation
|
|
30
|
-
*/
|
|
31
|
-
execute(code: string, apiBindings: Record<string, unknown>): Promise<SandboxResult>;
|
|
32
|
-
/**
|
|
33
|
-
* Serialize API bindings for worker transfer
|
|
34
|
-
* We can't transfer functions directly, so we send method names
|
|
35
|
-
*/
|
|
36
|
-
private serializeBindings;
|
|
37
|
-
/**
|
|
38
|
-
* Calculate execution metrics
|
|
39
|
-
*/
|
|
40
|
-
private calculateMetrics;
|
|
41
|
-
/**
|
|
42
|
-
* Check if sandbox is healthy
|
|
43
|
-
*/
|
|
44
|
-
isHealthy(): boolean;
|
|
45
|
-
/**
|
|
46
|
-
* Dispose of the sandbox
|
|
47
|
-
*/
|
|
48
|
-
dispose(): void;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Pool of worker sandboxes
|
|
52
|
-
* Unlike VM pool, worker sandboxes are created fresh for each execution
|
|
53
|
-
* so this pool is simpler (mainly for statistics and control)
|
|
54
|
-
*/
|
|
55
|
-
export declare class WorkerSandboxPool {
|
|
56
|
-
private readonly options;
|
|
57
|
-
private readonly sandboxOptions;
|
|
58
|
-
private activeCount;
|
|
59
|
-
private disposed;
|
|
60
|
-
constructor(poolOptions?: PoolOptions, sandboxOptions?: SandboxOptions);
|
|
61
|
-
/**
|
|
62
|
-
* Initialize the pool
|
|
63
|
-
*/
|
|
64
|
-
initialize(): void;
|
|
65
|
-
/**
|
|
66
|
-
* Execute code using a worker sandbox
|
|
67
|
-
*/
|
|
68
|
-
execute(code: string, apiBindings: Record<string, unknown>): Promise<SandboxResult>;
|
|
69
|
-
/**
|
|
70
|
-
* Get pool statistics
|
|
71
|
-
*/
|
|
72
|
-
getStats(): {
|
|
73
|
-
available: number;
|
|
74
|
-
inUse: number;
|
|
75
|
-
max: number;
|
|
76
|
-
};
|
|
77
|
-
/**
|
|
78
|
-
* Dispose of the pool
|
|
79
|
-
*/
|
|
80
|
-
dispose(): void;
|
|
81
|
-
}
|
|
82
|
-
//# sourceMappingURL=worker-sandbox.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worker-sandbox.d.ts","sourceRoot":"","sources":["../../src/codemode/worker-sandbox.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,WAAW,EAChB,KAAK,aAAa,EAEnB,MAAM,YAAY,CAAC;AAMpB;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAS;IAEzB,OAAO;IAIP;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,aAAa;IAKtD;;;OAGG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,aAAa,CAAC;IAyIzB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAcxB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2B;IAC1D,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAS;gBAEb,WAAW,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,EAAE,cAAc;IAKtE;;OAEG;IACH,UAAU,IAAI,IAAI;IASlB;;OAEG;IACG,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,aAAa,CAAC;IA0BzB;;OAEG;IACH,QAAQ,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE;IAQ7D;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB"}
|
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* postgres-mcp - Code Mode Worker Sandbox
|
|
3
|
-
*
|
|
4
|
-
* Enhanced sandboxed execution using worker_threads for process-level isolation.
|
|
5
|
-
* Provides stronger isolation than vm module by running code in a separate thread
|
|
6
|
-
* with isolated memory space.
|
|
7
|
-
*
|
|
8
|
-
* Features:
|
|
9
|
-
* - Separate V8 instance per worker thread
|
|
10
|
-
* - Hard timeout enforcement (worker termination)
|
|
11
|
-
* - Isolated memory space
|
|
12
|
-
* - Clean process state on each execution
|
|
13
|
-
*/
|
|
14
|
-
import { Worker } from "node:worker_threads";
|
|
15
|
-
import { fileURLToPath } from "node:url";
|
|
16
|
-
import { dirname, join } from "node:path";
|
|
17
|
-
import { logger } from "../utils/logger.js";
|
|
18
|
-
import { DEFAULT_SANDBOX_OPTIONS, DEFAULT_POOL_OPTIONS, } from "./types.js";
|
|
19
|
-
// Get directory for worker script
|
|
20
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
21
|
-
const WORKER_SCRIPT_PATH = join(__dirname, "worker-script.js");
|
|
22
|
-
/**
|
|
23
|
-
* A sandboxed execution context using worker_threads
|
|
24
|
-
* Provides stronger isolation than vm module with separate V8 instance
|
|
25
|
-
*/
|
|
26
|
-
export class WorkerSandbox {
|
|
27
|
-
options;
|
|
28
|
-
disposed = false;
|
|
29
|
-
constructor(options) {
|
|
30
|
-
this.options = options;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Create a new worker sandbox instance
|
|
34
|
-
*/
|
|
35
|
-
static create(options) {
|
|
36
|
-
const opts = { ...DEFAULT_SANDBOX_OPTIONS, ...options };
|
|
37
|
-
return new WorkerSandbox(opts);
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Execute code in a worker thread
|
|
41
|
-
* Each execution spawns a fresh worker for maximum isolation
|
|
42
|
-
*/
|
|
43
|
-
async execute(code, apiBindings) {
|
|
44
|
-
if (this.disposed) {
|
|
45
|
-
return {
|
|
46
|
-
success: false,
|
|
47
|
-
error: "Sandbox has been disposed",
|
|
48
|
-
metrics: { wallTimeMs: 0, cpuTimeMs: 0, memoryUsedMb: 0 },
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
const startTime = performance.now();
|
|
52
|
-
const startMemory = process.memoryUsage().heapUsed;
|
|
53
|
-
return new Promise((resolve) => {
|
|
54
|
-
let worker = null;
|
|
55
|
-
let timeoutId = null;
|
|
56
|
-
let resolved = false;
|
|
57
|
-
const cleanup = () => {
|
|
58
|
-
if (timeoutId) {
|
|
59
|
-
clearTimeout(timeoutId);
|
|
60
|
-
timeoutId = null;
|
|
61
|
-
}
|
|
62
|
-
if (worker) {
|
|
63
|
-
worker.terminate().catch(() => {
|
|
64
|
-
/* intentionally empty */
|
|
65
|
-
});
|
|
66
|
-
worker = null;
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
const respond = (result) => {
|
|
70
|
-
if (resolved)
|
|
71
|
-
return;
|
|
72
|
-
resolved = true;
|
|
73
|
-
cleanup();
|
|
74
|
-
resolve(result);
|
|
75
|
-
};
|
|
76
|
-
try {
|
|
77
|
-
worker = new Worker(WORKER_SCRIPT_PATH, {
|
|
78
|
-
workerData: {
|
|
79
|
-
code,
|
|
80
|
-
apiBindings: this.serializeBindings(apiBindings),
|
|
81
|
-
timeout: this.options.timeoutMs,
|
|
82
|
-
},
|
|
83
|
-
});
|
|
84
|
-
// Set hard timeout (will kill worker)
|
|
85
|
-
timeoutId = setTimeout(() => {
|
|
86
|
-
const endTime = performance.now();
|
|
87
|
-
const endMemory = process.memoryUsage().heapUsed;
|
|
88
|
-
respond({
|
|
89
|
-
success: false,
|
|
90
|
-
error: `Execution timeout: exceeded ${String(this.options.timeoutMs)}ms limit`,
|
|
91
|
-
metrics: this.calculateMetrics(startTime, endTime, startMemory, endMemory),
|
|
92
|
-
});
|
|
93
|
-
}, this.options.timeoutMs + 1000); // Extra buffer for cleanup
|
|
94
|
-
worker.on("message", (result) => {
|
|
95
|
-
const endTime = performance.now();
|
|
96
|
-
const endMemory = process.memoryUsage().heapUsed;
|
|
97
|
-
respond({
|
|
98
|
-
success: result.success,
|
|
99
|
-
result: result.result,
|
|
100
|
-
error: result.error,
|
|
101
|
-
stack: result.stack,
|
|
102
|
-
metrics: this.calculateMetrics(startTime, endTime, startMemory, endMemory),
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
worker.on("error", (error) => {
|
|
106
|
-
const endTime = performance.now();
|
|
107
|
-
const endMemory = process.memoryUsage().heapUsed;
|
|
108
|
-
respond({
|
|
109
|
-
success: false,
|
|
110
|
-
error: error.message,
|
|
111
|
-
stack: error.stack,
|
|
112
|
-
metrics: this.calculateMetrics(startTime, endTime, startMemory, endMemory),
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
worker.on("exit", (exitCode) => {
|
|
116
|
-
if (!resolved && exitCode !== 0) {
|
|
117
|
-
const endTime = performance.now();
|
|
118
|
-
const endMemory = process.memoryUsage().heapUsed;
|
|
119
|
-
respond({
|
|
120
|
-
success: false,
|
|
121
|
-
error: `Worker exited with code ${String(exitCode)}`,
|
|
122
|
-
metrics: this.calculateMetrics(startTime, endTime, startMemory, endMemory),
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
catch (error) {
|
|
128
|
-
const endTime = performance.now();
|
|
129
|
-
const endMemory = process.memoryUsage().heapUsed;
|
|
130
|
-
respond({
|
|
131
|
-
success: false,
|
|
132
|
-
error: error instanceof Error ? error.message : String(error),
|
|
133
|
-
stack: error instanceof Error ? error.stack : undefined,
|
|
134
|
-
metrics: this.calculateMetrics(startTime, endTime, startMemory, endMemory),
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Serialize API bindings for worker transfer
|
|
141
|
-
* We can't transfer functions directly, so we send method names
|
|
142
|
-
*/
|
|
143
|
-
serializeBindings(bindings) {
|
|
144
|
-
const serialized = {};
|
|
145
|
-
for (const [group, methods] of Object.entries(bindings)) {
|
|
146
|
-
if (typeof methods === "object" && methods !== null) {
|
|
147
|
-
serialized[group] = Object.keys(methods);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return serialized;
|
|
151
|
-
}
|
|
152
|
-
/**
|
|
153
|
-
* Calculate execution metrics
|
|
154
|
-
*/
|
|
155
|
-
calculateMetrics(startTime, endTime, startMemory, endMemory) {
|
|
156
|
-
return {
|
|
157
|
-
wallTimeMs: Math.round(endTime - startTime),
|
|
158
|
-
cpuTimeMs: Math.round(endTime - startTime), // Approximation
|
|
159
|
-
memoryUsedMb: Math.round(((endMemory - startMemory) / (1024 * 1024)) * 100) / 100,
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Check if sandbox is healthy
|
|
164
|
-
*/
|
|
165
|
-
isHealthy() {
|
|
166
|
-
return !this.disposed;
|
|
167
|
-
}
|
|
168
|
-
/**
|
|
169
|
-
* Dispose of the sandbox
|
|
170
|
-
*/
|
|
171
|
-
dispose() {
|
|
172
|
-
this.disposed = true;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Pool of worker sandboxes
|
|
177
|
-
* Unlike VM pool, worker sandboxes are created fresh for each execution
|
|
178
|
-
* so this pool is simpler (mainly for statistics and control)
|
|
179
|
-
*/
|
|
180
|
-
export class WorkerSandboxPool {
|
|
181
|
-
options;
|
|
182
|
-
sandboxOptions;
|
|
183
|
-
activeCount = 0;
|
|
184
|
-
disposed = false;
|
|
185
|
-
constructor(poolOptions, sandboxOptions) {
|
|
186
|
-
this.options = { ...DEFAULT_POOL_OPTIONS, ...poolOptions };
|
|
187
|
-
this.sandboxOptions = { ...DEFAULT_SANDBOX_OPTIONS, ...sandboxOptions };
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Initialize the pool
|
|
191
|
-
*/
|
|
192
|
-
initialize() {
|
|
193
|
-
logger.info(`Worker sandbox pool initialized (max: ${String(this.options.maxInstances)} concurrent)`, {
|
|
194
|
-
module: "CODEMODE",
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* Execute code using a worker sandbox
|
|
199
|
-
*/
|
|
200
|
-
async execute(code, apiBindings) {
|
|
201
|
-
if (this.disposed) {
|
|
202
|
-
return {
|
|
203
|
-
success: false,
|
|
204
|
-
error: "Pool has been disposed",
|
|
205
|
-
metrics: { wallTimeMs: 0, cpuTimeMs: 0, memoryUsedMb: 0 },
|
|
206
|
-
};
|
|
207
|
-
}
|
|
208
|
-
if (this.activeCount >= this.options.maxInstances) {
|
|
209
|
-
return {
|
|
210
|
-
success: false,
|
|
211
|
-
error: `Worker pool exhausted (max: ${String(this.options.maxInstances)} concurrent)`,
|
|
212
|
-
metrics: { wallTimeMs: 0, cpuTimeMs: 0, memoryUsedMb: 0 },
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
this.activeCount++;
|
|
216
|
-
try {
|
|
217
|
-
const sandbox = WorkerSandbox.create(this.sandboxOptions);
|
|
218
|
-
return await sandbox.execute(code, apiBindings);
|
|
219
|
-
}
|
|
220
|
-
finally {
|
|
221
|
-
this.activeCount--;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Get pool statistics
|
|
226
|
-
*/
|
|
227
|
-
getStats() {
|
|
228
|
-
return {
|
|
229
|
-
available: this.options.maxInstances - this.activeCount,
|
|
230
|
-
inUse: this.activeCount,
|
|
231
|
-
max: this.options.maxInstances,
|
|
232
|
-
};
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Dispose of the pool
|
|
236
|
-
*/
|
|
237
|
-
dispose() {
|
|
238
|
-
this.disposed = true;
|
|
239
|
-
logger.info("Worker sandbox pool disposed", {
|
|
240
|
-
module: "CODEMODE",
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
//# sourceMappingURL=worker-sandbox.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worker-sandbox.js","sourceRoot":"","sources":["../../src/codemode/worker-sandbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worker-script.d.ts","sourceRoot":"","sources":["../../src/codemode/worker-script.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* postgres-mcp - Code Mode Worker Script
|
|
3
|
-
*
|
|
4
|
-
* This script runs in a worker thread to execute user code in isolation.
|
|
5
|
-
* It uses Node.js vm module within the worker for additional sandboxing.
|
|
6
|
-
*/
|
|
7
|
-
import { parentPort, workerData } from "node:worker_threads";
|
|
8
|
-
import vm from "node:vm";
|
|
9
|
-
/**
|
|
10
|
-
* Execute code in a sandboxed vm context within the worker
|
|
11
|
-
*/
|
|
12
|
-
async function executeCode() {
|
|
13
|
-
const { code, timeout } = workerData;
|
|
14
|
-
try {
|
|
15
|
-
// Create minimal sandbox context
|
|
16
|
-
const logBuffer = [];
|
|
17
|
-
const sandbox = {
|
|
18
|
-
console: {
|
|
19
|
-
log: (...args) => {
|
|
20
|
-
logBuffer.push(args
|
|
21
|
-
.map((a) => typeof a === "object" && a !== null
|
|
22
|
-
? JSON.stringify(a)
|
|
23
|
-
: String(a))
|
|
24
|
-
.join(" "));
|
|
25
|
-
},
|
|
26
|
-
warn: (...args) => logBuffer.push("[WARN] " + args.map((a) => String(a)).join(" ")),
|
|
27
|
-
error: (...args) => logBuffer.push("[ERROR] " + args.map((a) => String(a)).join(" ")),
|
|
28
|
-
info: (...args) => logBuffer.push("[INFO] " + args.map((a) => String(a)).join(" ")),
|
|
29
|
-
},
|
|
30
|
-
// Block dangerous globals
|
|
31
|
-
require: undefined,
|
|
32
|
-
process: undefined,
|
|
33
|
-
global: undefined,
|
|
34
|
-
globalThis: undefined,
|
|
35
|
-
__dirname: undefined,
|
|
36
|
-
__filename: undefined,
|
|
37
|
-
module: undefined,
|
|
38
|
-
exports: undefined,
|
|
39
|
-
// Safe built-ins
|
|
40
|
-
JSON,
|
|
41
|
-
Math,
|
|
42
|
-
Date,
|
|
43
|
-
Array,
|
|
44
|
-
Object,
|
|
45
|
-
String,
|
|
46
|
-
Number,
|
|
47
|
-
Boolean,
|
|
48
|
-
Map,
|
|
49
|
-
Set,
|
|
50
|
-
Promise,
|
|
51
|
-
Error,
|
|
52
|
-
TypeError,
|
|
53
|
-
RangeError,
|
|
54
|
-
SyntaxError,
|
|
55
|
-
// Disabled for security
|
|
56
|
-
setTimeout: undefined,
|
|
57
|
-
setInterval: undefined,
|
|
58
|
-
setImmediate: undefined,
|
|
59
|
-
// pg API placeholder (populated by main thread via message passing)
|
|
60
|
-
pg: {},
|
|
61
|
-
};
|
|
62
|
-
const context = vm.createContext(sandbox);
|
|
63
|
-
// Wrap code in async IIFE to support await
|
|
64
|
-
const wrappedCode = `
|
|
65
|
-
(async () => {
|
|
66
|
-
${code}
|
|
67
|
-
})();
|
|
68
|
-
`;
|
|
69
|
-
// Compile and run with timeout
|
|
70
|
-
const script = new vm.Script(wrappedCode, {
|
|
71
|
-
filename: "worker-codemode-script.js",
|
|
72
|
-
});
|
|
73
|
-
const result = await script.runInContext(context, {
|
|
74
|
-
timeout,
|
|
75
|
-
breakOnSigint: true,
|
|
76
|
-
});
|
|
77
|
-
const response = {
|
|
78
|
-
success: true,
|
|
79
|
-
result,
|
|
80
|
-
};
|
|
81
|
-
parentPort?.postMessage(response);
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
85
|
-
const stack = error instanceof Error ? error.stack : undefined;
|
|
86
|
-
// Check for timeout
|
|
87
|
-
if (errorMessage.includes("Script execution timed out")) {
|
|
88
|
-
const response = {
|
|
89
|
-
success: false,
|
|
90
|
-
error: `Execution timeout: exceeded ${String(timeout)}ms limit`,
|
|
91
|
-
stack,
|
|
92
|
-
};
|
|
93
|
-
parentPort?.postMessage(response);
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
const response = {
|
|
97
|
-
success: false,
|
|
98
|
-
error: errorMessage,
|
|
99
|
-
stack,
|
|
100
|
-
};
|
|
101
|
-
parentPort?.postMessage(response);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
// Execute immediately
|
|
105
|
-
executeCode().catch((error) => {
|
|
106
|
-
const response = {
|
|
107
|
-
success: false,
|
|
108
|
-
error: error instanceof Error ? error.message : String(error),
|
|
109
|
-
stack: error instanceof Error ? error.stack : undefined,
|
|
110
|
-
};
|
|
111
|
-
parentPort?.postMessage(response);
|
|
112
|
-
});
|
|
113
|
-
//# sourceMappingURL=worker-script.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worker-script.js","sourceRoot":"","sources":["../../src/codemode/worker-script.ts"],"names":[],"mappings":"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"}
|