@mondaydotcomorg/atp-server 0.17.14
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 +489 -0
- package/dist/aggregator/index.d.ts +59 -0
- package/dist/aggregator/index.d.ts.map +1 -0
- package/dist/aggregator/index.js +171 -0
- package/dist/aggregator/index.js.map +1 -0
- package/dist/callback/index.d.ts +98 -0
- package/dist/callback/index.d.ts.map +1 -0
- package/dist/callback/index.js +136 -0
- package/dist/callback/index.js.map +1 -0
- package/dist/client-sessions.d.ts +82 -0
- package/dist/client-sessions.d.ts.map +1 -0
- package/dist/client-sessions.js +174 -0
- package/dist/client-sessions.js.map +1 -0
- package/dist/controllers/definitions.controller.d.ts +4 -0
- package/dist/controllers/definitions.controller.d.ts.map +1 -0
- package/dist/controllers/definitions.controller.js +11 -0
- package/dist/controllers/definitions.controller.js.map +1 -0
- package/dist/controllers/execute.controller.d.ts +18 -0
- package/dist/controllers/execute.controller.d.ts.map +1 -0
- package/dist/controllers/execute.controller.js +122 -0
- package/dist/controllers/execute.controller.js.map +1 -0
- package/dist/controllers/info.controller.d.ts +3 -0
- package/dist/controllers/info.controller.d.ts.map +1 -0
- package/dist/controllers/info.controller.js +13 -0
- package/dist/controllers/info.controller.js.map +1 -0
- package/dist/controllers/resume.controller.d.ts +11 -0
- package/dist/controllers/resume.controller.d.ts.map +1 -0
- package/dist/controllers/resume.controller.js +61 -0
- package/dist/controllers/resume.controller.js.map +1 -0
- package/dist/controllers/search.controller.d.ts +4 -0
- package/dist/controllers/search.controller.d.ts.map +1 -0
- package/dist/controllers/search.controller.js +7 -0
- package/dist/controllers/search.controller.js.map +1 -0
- package/dist/controllers/stream.controller.d.ts +19 -0
- package/dist/controllers/stream.controller.d.ts.map +1 -0
- package/dist/controllers/stream.controller.js +141 -0
- package/dist/controllers/stream.controller.js.map +1 -0
- package/dist/core/config.d.ts +161 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +7 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/http.d.ts +4 -0
- package/dist/core/http.d.ts.map +1 -0
- package/dist/core/http.js +17 -0
- package/dist/core/http.js.map +1 -0
- package/dist/create-server.d.ts +120 -0
- package/dist/create-server.d.ts.map +1 -0
- package/dist/create-server.js +423 -0
- package/dist/create-server.js.map +1 -0
- package/dist/execution-state/index.d.ts +95 -0
- package/dist/execution-state/index.d.ts.map +1 -0
- package/dist/execution-state/index.js +128 -0
- package/dist/execution-state/index.js.map +1 -0
- package/dist/executor/ast-provenance-bridge.d.ts +12 -0
- package/dist/executor/ast-provenance-bridge.d.ts.map +1 -0
- package/dist/executor/ast-provenance-bridge.js +66 -0
- package/dist/executor/ast-provenance-bridge.js.map +1 -0
- package/dist/executor/ast-tracking-runtime.d.ts +7 -0
- package/dist/executor/ast-tracking-runtime.d.ts.map +1 -0
- package/dist/executor/ast-tracking-runtime.js +559 -0
- package/dist/executor/ast-tracking-runtime.js.map +1 -0
- package/dist/executor/bootstrap-generated.d.ts +32 -0
- package/dist/executor/bootstrap-generated.d.ts.map +1 -0
- package/dist/executor/bootstrap-generated.js +90 -0
- package/dist/executor/bootstrap-generated.js.map +1 -0
- package/dist/executor/compiler-config.d.ts +32 -0
- package/dist/executor/compiler-config.d.ts.map +1 -0
- package/dist/executor/compiler-config.js +99 -0
- package/dist/executor/compiler-config.js.map +1 -0
- package/dist/executor/constants.d.ts +4 -0
- package/dist/executor/constants.d.ts.map +1 -0
- package/dist/executor/constants.js +4 -0
- package/dist/executor/constants.js.map +1 -0
- package/dist/executor/error-handler.d.ts +9 -0
- package/dist/executor/error-handler.d.ts.map +1 -0
- package/dist/executor/error-handler.js +95 -0
- package/dist/executor/error-handler.js.map +1 -0
- package/dist/executor/execution-error-handler.d.ts +7 -0
- package/dist/executor/execution-error-handler.d.ts.map +1 -0
- package/dist/executor/execution-error-handler.js +136 -0
- package/dist/executor/execution-error-handler.js.map +1 -0
- package/dist/executor/executor.d.ts +20 -0
- package/dist/executor/executor.d.ts.map +1 -0
- package/dist/executor/executor.js +452 -0
- package/dist/executor/executor.js.map +1 -0
- package/dist/executor/index.d.ts +4 -0
- package/dist/executor/index.d.ts.map +1 -0
- package/dist/executor/index.js +3 -0
- package/dist/executor/index.js.map +1 -0
- package/dist/executor/resume-handler.d.ts +9 -0
- package/dist/executor/resume-handler.d.ts.map +1 -0
- package/dist/executor/resume-handler.js +22 -0
- package/dist/executor/resume-handler.js.map +1 -0
- package/dist/executor/sandbox-builder.d.ts +29 -0
- package/dist/executor/sandbox-builder.d.ts.map +1 -0
- package/dist/executor/sandbox-builder.js +538 -0
- package/dist/executor/sandbox-builder.js.map +1 -0
- package/dist/executor/sandbox-injector.d.ts +7 -0
- package/dist/executor/sandbox-injector.d.ts.map +1 -0
- package/dist/executor/sandbox-injector.js +293 -0
- package/dist/executor/sandbox-injector.js.map +1 -0
- package/dist/executor/types.d.ts +21 -0
- package/dist/executor/types.d.ts.map +1 -0
- package/dist/executor/types.js +2 -0
- package/dist/executor/types.js.map +1 -0
- package/dist/explorer/index.d.ts +69 -0
- package/dist/explorer/index.d.ts.map +1 -0
- package/dist/explorer/index.js +228 -0
- package/dist/explorer/index.js.map +1 -0
- package/dist/handlers/definitions.handler.d.ts +3 -0
- package/dist/handlers/definitions.handler.d.ts.map +1 -0
- package/dist/handlers/definitions.handler.js +11 -0
- package/dist/handlers/definitions.handler.js.map +1 -0
- package/dist/handlers/execute.handler.d.ts +7 -0
- package/dist/handlers/execute.handler.d.ts.map +1 -0
- package/dist/handlers/execute.handler.js +225 -0
- package/dist/handlers/execute.handler.js.map +1 -0
- package/dist/handlers/explorer.handler.d.ts +4 -0
- package/dist/handlers/explorer.handler.d.ts.map +1 -0
- package/dist/handlers/explorer.handler.js +10 -0
- package/dist/handlers/explorer.handler.js.map +1 -0
- package/dist/handlers/init.handler.d.ts +5 -0
- package/dist/handlers/init.handler.d.ts.map +1 -0
- package/dist/handlers/init.handler.js +41 -0
- package/dist/handlers/init.handler.js.map +1 -0
- package/dist/handlers/resume.handler.d.ts +6 -0
- package/dist/handlers/resume.handler.d.ts.map +1 -0
- package/dist/handlers/resume.handler.js +256 -0
- package/dist/handlers/resume.handler.js.map +1 -0
- package/dist/handlers/search.handler.d.ts +5 -0
- package/dist/handlers/search.handler.d.ts.map +1 -0
- package/dist/handlers/search.handler.js +11 -0
- package/dist/handlers/search.handler.js.map +1 -0
- package/dist/http/request-handler.d.ts +15 -0
- package/dist/http/request-handler.d.ts.map +1 -0
- package/dist/http/request-handler.js +94 -0
- package/dist/http/request-handler.js.map +1 -0
- package/dist/http/router.d.ts +4 -0
- package/dist/http/router.d.ts.map +1 -0
- package/dist/http/router.js +32 -0
- package/dist/http/router.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/instrumentation/index.d.ts +5 -0
- package/dist/instrumentation/index.d.ts.map +1 -0
- package/dist/instrumentation/index.js +5 -0
- package/dist/instrumentation/index.js.map +1 -0
- package/dist/instrumentation/serializer.d.ts +61 -0
- package/dist/instrumentation/serializer.d.ts.map +1 -0
- package/dist/instrumentation/serializer.js +334 -0
- package/dist/instrumentation/serializer.js.map +1 -0
- package/dist/instrumentation/state-manager.d.ts +61 -0
- package/dist/instrumentation/state-manager.d.ts.map +1 -0
- package/dist/instrumentation/state-manager.js +205 -0
- package/dist/instrumentation/state-manager.js.map +1 -0
- package/dist/instrumentation/transformer.d.ts +9 -0
- package/dist/instrumentation/transformer.d.ts.map +1 -0
- package/dist/instrumentation/transformer.js +70 -0
- package/dist/instrumentation/transformer.js.map +1 -0
- package/dist/instrumentation/types.d.ts +59 -0
- package/dist/instrumentation/types.d.ts.map +1 -0
- package/dist/instrumentation/types.js +5 -0
- package/dist/instrumentation/types.js.map +1 -0
- package/dist/middleware/audit.d.ts +18 -0
- package/dist/middleware/audit.d.ts.map +1 -0
- package/dist/middleware/audit.js +76 -0
- package/dist/middleware/audit.js.map +1 -0
- package/dist/openapi/index.d.ts +133 -0
- package/dist/openapi/index.d.ts.map +1 -0
- package/dist/openapi/index.js +235 -0
- package/dist/openapi/index.js.map +1 -0
- package/dist/openapi-loader.d.ts +87 -0
- package/dist/openapi-loader.d.ts.map +1 -0
- package/dist/openapi-loader.js +491 -0
- package/dist/openapi-loader.js.map +1 -0
- package/dist/routes/index.d.ts +21 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +47 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/search/index.d.ts +48 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +156 -0
- package/dist/search/index.js.map +1 -0
- package/dist/security/index.d.ts +2 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +2 -0
- package/dist/security/index.js.map +1 -0
- package/dist/shutdown.d.ts +19 -0
- package/dist/shutdown.d.ts.map +1 -0
- package/dist/shutdown.js +87 -0
- package/dist/shutdown.js.map +1 -0
- package/dist/utils/banner.d.ts +12 -0
- package/dist/utils/banner.d.ts.map +1 -0
- package/dist/utils/banner.js +18 -0
- package/dist/utils/banner.js.map +1 -0
- package/dist/utils/context.d.ts +16 -0
- package/dist/utils/context.d.ts.map +1 -0
- package/dist/utils/context.js +44 -0
- package/dist/utils/context.js.map +1 -0
- package/dist/utils/error.d.ts +8 -0
- package/dist/utils/error.d.ts.map +1 -0
- package/dist/utils/error.js +17 -0
- package/dist/utils/error.js.map +1 -0
- package/dist/utils/hint-based-instrumentation.d.ts +14 -0
- package/dist/utils/hint-based-instrumentation.d.ts.map +1 -0
- package/dist/utils/hint-based-instrumentation.js +84 -0
- package/dist/utils/hint-based-instrumentation.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/info.d.ts +20 -0
- package/dist/utils/info.d.ts.map +1 -0
- package/dist/utils/info.js +15 -0
- package/dist/utils/info.js.map +1 -0
- package/dist/utils/provenance-reattachment.d.ts +32 -0
- package/dist/utils/provenance-reattachment.d.ts.map +1 -0
- package/dist/utils/provenance-reattachment.js +115 -0
- package/dist/utils/provenance-reattachment.js.map +1 -0
- package/dist/utils/request.d.ts +21 -0
- package/dist/utils/request.d.ts.map +1 -0
- package/dist/utils/request.js +44 -0
- package/dist/utils/request.js.map +1 -0
- package/dist/utils/response.d.ts +30 -0
- package/dist/utils/response.d.ts.map +1 -0
- package/dist/utils/response.js +53 -0
- package/dist/utils/response.js.map +1 -0
- package/dist/utils/runtime-types.d.ts +6 -0
- package/dist/utils/runtime-types.d.ts.map +1 -0
- package/dist/utils/runtime-types.js +14 -0
- package/dist/utils/runtime-types.js.map +1 -0
- package/dist/utils/schema.d.ts +9 -0
- package/dist/utils/schema.d.ts.map +1 -0
- package/dist/utils/schema.js +13 -0
- package/dist/utils/schema.js.map +1 -0
- package/dist/utils/token-emitter.d.ts +21 -0
- package/dist/utils/token-emitter.d.ts.map +1 -0
- package/dist/utils/token-emitter.js +129 -0
- package/dist/utils/token-emitter.js.map +1 -0
- package/dist/validator/index.d.ts +36 -0
- package/dist/validator/index.d.ts.map +1 -0
- package/dist/validator/index.js +224 -0
- package/dist/validator/index.js.map +1 -0
- package/package.json +68 -0
- package/src/aggregator/index.ts +207 -0
- package/src/callback/index.ts +191 -0
- package/src/client-sessions.ts +234 -0
- package/src/controllers/definitions.controller.ts +19 -0
- package/src/controllers/execute.controller.ts +166 -0
- package/src/controllers/info.controller.ts +14 -0
- package/src/controllers/resume.controller.ts +92 -0
- package/src/controllers/search.controller.ts +16 -0
- package/src/controllers/stream.controller.ts +190 -0
- package/src/core/config.ts +180 -0
- package/src/core/http.ts +21 -0
- package/src/create-server.ts +536 -0
- package/src/execution-state/index.ts +204 -0
- package/src/executor/ast-provenance-bridge.ts +80 -0
- package/src/executor/ast-tracking-runtime.ts +558 -0
- package/src/executor/bootstrap-generated.ts +90 -0
- package/src/executor/compiler-config.ts +146 -0
- package/src/executor/constants.ts +5 -0
- package/src/executor/error-handler.ts +118 -0
- package/src/executor/execution-error-handler.ts +178 -0
- package/src/executor/executor.ts +631 -0
- package/src/executor/index.ts +3 -0
- package/src/executor/resume-handler.ts +39 -0
- package/src/executor/sandbox-builder.ts +684 -0
- package/src/executor/sandbox-injector.ts +345 -0
- package/src/executor/types.ts +22 -0
- package/src/explorer/index.ts +297 -0
- package/src/handlers/definitions.handler.ts +13 -0
- package/src/handlers/execute.handler.ts +286 -0
- package/src/handlers/explorer.handler.ts +18 -0
- package/src/handlers/init.handler.ts +53 -0
- package/src/handlers/resume.handler.ts +316 -0
- package/src/handlers/search.handler.ts +32 -0
- package/src/http/request-handler.ts +117 -0
- package/src/http/router.ts +29 -0
- package/src/index.ts +60 -0
- package/src/instrumentation/index.ts +4 -0
- package/src/instrumentation/serializer.ts +421 -0
- package/src/instrumentation/state-manager.ts +237 -0
- package/src/instrumentation/transformer.ts +84 -0
- package/src/instrumentation/types.ts +76 -0
- package/src/middleware/audit.ts +101 -0
- package/src/openapi/index.ts +378 -0
- package/src/openapi-loader.ts +744 -0
- package/src/routes/index.ts +93 -0
- package/src/search/index.ts +216 -0
- package/src/security/index.ts +1 -0
- package/src/shutdown.ts +108 -0
- package/src/utils/banner.ts +25 -0
- package/src/utils/context.ts +58 -0
- package/src/utils/error.ts +25 -0
- package/src/utils/hint-based-instrumentation.ts +99 -0
- package/src/utils/index.ts +15 -0
- package/src/utils/info.ts +31 -0
- package/src/utils/provenance-reattachment.ts +144 -0
- package/src/utils/request.ts +53 -0
- package/src/utils/response.ts +69 -0
- package/src/utils/runtime-types.ts +14 -0
- package/src/utils/schema.ts +18 -0
- package/src/utils/token-emitter.ts +182 -0
- package/src/validator/index.ts +253 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provenance Re-attachment Utility
|
|
3
|
+
*
|
|
4
|
+
* Re-attaches provenance to values based on verified hints
|
|
5
|
+
*/
|
|
6
|
+
import { type ProvenanceMetadata } from '@mondaydotcomorg/atp-provenance';
|
|
7
|
+
/**
|
|
8
|
+
* Store hint map for an execution
|
|
9
|
+
*/
|
|
10
|
+
export declare function storeHintMap(executionId: string, hintMap: Map<string, ProvenanceMetadata>): void;
|
|
11
|
+
/**
|
|
12
|
+
* Store a hint value for substring matching
|
|
13
|
+
*/
|
|
14
|
+
export declare function storeHintValue(executionId: string, value: string, metadata: ProvenanceMetadata): void;
|
|
15
|
+
/**
|
|
16
|
+
* Get hint map for an execution
|
|
17
|
+
*/
|
|
18
|
+
export declare function getHintMap(executionId: string): Map<string, ProvenanceMetadata> | undefined;
|
|
19
|
+
/**
|
|
20
|
+
* Get hint values for an execution (for substring matching)
|
|
21
|
+
*/
|
|
22
|
+
export declare function getHintValues(executionId: string): Map<string, ProvenanceMetadata> | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* Clear hint map for an execution (cleanup)
|
|
25
|
+
*/
|
|
26
|
+
export declare function clearHintMap(executionId: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Re-attach provenance from hints to tool arguments
|
|
29
|
+
* Scans arguments recursively and attaches provenance based on value digests
|
|
30
|
+
*/
|
|
31
|
+
export declare function reattachProvenanceFromHints(args: Record<string, unknown>, hintMap: Map<string, ProvenanceMetadata>): void;
|
|
32
|
+
//# sourceMappingURL=provenance-reattachment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance-reattachment.d.ts","sourceRoot":"","sources":["../../src/utils/provenance-reattachment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAMN,KAAK,kBAAkB,EACvB,MAAM,iCAAiC,CAAC;AAczC;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,IAAI,CAEhG;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC7B,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,kBAAkB,GAC1B,IAAI,CAON;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,SAAS,CAE3F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,SAAS,CAE9F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAGtD;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,GACtC,IAAI,CAiEN"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provenance Re-attachment Utility
|
|
3
|
+
*
|
|
4
|
+
* Re-attaches provenance to values based on verified hints
|
|
5
|
+
*/
|
|
6
|
+
import { getProvenance, getProvenanceForPrimitive, markPrimitiveTainted, computeDigest, } from '@mondaydotcomorg/atp-provenance';
|
|
7
|
+
/**
|
|
8
|
+
* Global registry of hint maps per execution
|
|
9
|
+
* Key: executionId, Value: Map<digest, metadata>
|
|
10
|
+
*/
|
|
11
|
+
const executionHintMaps = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* Global registry of hint values per execution
|
|
14
|
+
* Key: executionId, Value: Map<value, metadata> for substring checking
|
|
15
|
+
*/
|
|
16
|
+
const executionHintValues = new Map();
|
|
17
|
+
/**
|
|
18
|
+
* Store hint map for an execution
|
|
19
|
+
*/
|
|
20
|
+
export function storeHintMap(executionId, hintMap) {
|
|
21
|
+
executionHintMaps.set(executionId, hintMap);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Store a hint value for substring matching
|
|
25
|
+
*/
|
|
26
|
+
export function storeHintValue(executionId, value, metadata) {
|
|
27
|
+
let valueMap = executionHintValues.get(executionId);
|
|
28
|
+
if (!valueMap) {
|
|
29
|
+
valueMap = new Map();
|
|
30
|
+
executionHintValues.set(executionId, valueMap);
|
|
31
|
+
}
|
|
32
|
+
valueMap.set(value, metadata);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get hint map for an execution
|
|
36
|
+
*/
|
|
37
|
+
export function getHintMap(executionId) {
|
|
38
|
+
return executionHintMaps.get(executionId);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Get hint values for an execution (for substring matching)
|
|
42
|
+
*/
|
|
43
|
+
export function getHintValues(executionId) {
|
|
44
|
+
return executionHintValues.get(executionId);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Clear hint map for an execution (cleanup)
|
|
48
|
+
*/
|
|
49
|
+
export function clearHintMap(executionId) {
|
|
50
|
+
executionHintMaps.delete(executionId);
|
|
51
|
+
executionHintValues.delete(executionId);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Re-attach provenance from hints to tool arguments
|
|
55
|
+
* Scans arguments recursively and attaches provenance based on value digests
|
|
56
|
+
*/
|
|
57
|
+
export function reattachProvenanceFromHints(args, hintMap) {
|
|
58
|
+
if (!hintMap || hintMap.size === 0) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const visited = new WeakSet();
|
|
62
|
+
function processValue(value) {
|
|
63
|
+
if (value === null || value === undefined) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// Handle primitives (string/number)
|
|
67
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
68
|
+
// Skip if already has provenance
|
|
69
|
+
if (getProvenanceForPrimitive(value)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
// Compute digest and check hint map
|
|
73
|
+
const digest = computeDigest(value);
|
|
74
|
+
if (digest && hintMap.has(digest)) {
|
|
75
|
+
const metadata = hintMap.get(digest);
|
|
76
|
+
markPrimitiveTainted(value, metadata);
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// Handle objects/arrays
|
|
81
|
+
if (typeof value === 'object') {
|
|
82
|
+
// Prevent circular reference processing
|
|
83
|
+
if (visited.has(value)) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
visited.add(value);
|
|
87
|
+
// Skip if already has provenance
|
|
88
|
+
if (getProvenance(value)) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
// Check if object itself has provenance in hints
|
|
92
|
+
const digest = computeDigest(value);
|
|
93
|
+
if (digest && hintMap.has(digest)) {
|
|
94
|
+
const metadata = hintMap.get(digest);
|
|
95
|
+
// Note: We can't modify the object in place, but we mark primitives inside
|
|
96
|
+
}
|
|
97
|
+
// Process children
|
|
98
|
+
if (Array.isArray(value)) {
|
|
99
|
+
for (const item of value) {
|
|
100
|
+
processValue(item);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
for (const childValue of Object.values(value)) {
|
|
105
|
+
processValue(childValue);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Process all argument values
|
|
111
|
+
for (const value of Object.values(args)) {
|
|
112
|
+
processValue(value);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=provenance-reattachment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provenance-reattachment.js","sourceRoot":"","sources":["../../src/utils/provenance-reattachment.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EACN,aAAa,EACb,yBAAyB,EAEzB,oBAAoB,EACpB,aAAa,GAEb,MAAM,iCAAiC,CAAC;AAEzC;;;GAGG;AACH,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAA2C,CAAC;AAE7E;;;GAGG;AACH,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAA2C,CAAC;AAE/E;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB,EAAE,OAAwC;IACzF,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC7B,WAAmB,EACnB,KAAa,EACb,QAA4B;IAE5B,IAAI,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QACrB,mBAAmB,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IACD,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,WAAmB;IAC7C,OAAO,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAChD,OAAO,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC/C,iBAAiB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IACtC,mBAAmB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACzC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAC1C,IAA6B,EAC7B,OAAwC;IAExC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO;IACR,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAU,CAAC;IAEtC,SAAS,YAAY,CAAC,KAAc;QACnC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO;QACR,CAAC;QAED,oCAAoC;QACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5D,iCAAiC;YACjC,IAAI,yBAAyB,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtC,OAAO;YACR,CAAC;YAED,oCAAoC;YACpC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;gBACtC,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACvC,CAAC;YACD,OAAO;QACR,CAAC;QAED,wBAAwB;QACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/B,wCAAwC;YACxC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAe,CAAC,EAAE,CAAC;gBAClC,OAAO;YACR,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAe,CAAC,CAAC;YAE7B,iCAAiC;YACjC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO;YACR,CAAC;YAED,iDAAiD;YACjD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;gBACtC,2EAA2E;YAC5E,CAAC;YAED,mBAAmB;YACnB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBAC1B,YAAY,CAAC,IAAI,CAAC,CAAC;gBACpB,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,KAAgC,CAAC,EAAE,CAAC;oBAC1E,YAAY,CAAC,UAAU,CAAC,CAAC;gBAC1B,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAED,8BAA8B;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,YAAY,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { IncomingMessage } from 'node:http';
|
|
2
|
+
/**
|
|
3
|
+
* Default maximum request body size (10MB)
|
|
4
|
+
*/
|
|
5
|
+
export declare const DEFAULT_MAX_BODY_SIZE: number;
|
|
6
|
+
/**
|
|
7
|
+
* Reads the full request body as a string
|
|
8
|
+
* @param req - The HTTP request
|
|
9
|
+
* @param maxSize - Maximum allowed body size in bytes (default: 10MB)
|
|
10
|
+
* @returns Promise resolving to the complete body string
|
|
11
|
+
* @throws Error if body exceeds maxSize
|
|
12
|
+
*/
|
|
13
|
+
export declare function readBody(req: IncomingMessage, maxSize?: number): Promise<string>;
|
|
14
|
+
/**
|
|
15
|
+
* Reads and parses request body as JSON
|
|
16
|
+
* @param req - The HTTP request
|
|
17
|
+
* @param maxSize - Maximum allowed body size in bytes
|
|
18
|
+
* @returns Promise resolving to the parsed JSON object
|
|
19
|
+
*/
|
|
20
|
+
export declare function readJsonBody<T = any>(req: IncomingMessage, maxSize?: number): Promise<T>;
|
|
21
|
+
//# sourceMappingURL=request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../../src/utils/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C;;GAEG;AACH,eAAO,MAAM,qBAAqB,QAAmB,CAAC;AAEtD;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,SAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB/F;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,CAAC,GAAG,GAAG,EACzC,GAAG,EAAE,eAAe,EACpB,OAAO,SAAwB,GAC7B,OAAO,CAAC,CAAC,CAAC,CAOZ"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default maximum request body size (10MB)
|
|
3
|
+
*/
|
|
4
|
+
export const DEFAULT_MAX_BODY_SIZE = 10 * 1024 * 1024;
|
|
5
|
+
/**
|
|
6
|
+
* Reads the full request body as a string
|
|
7
|
+
* @param req - The HTTP request
|
|
8
|
+
* @param maxSize - Maximum allowed body size in bytes (default: 10MB)
|
|
9
|
+
* @returns Promise resolving to the complete body string
|
|
10
|
+
* @throws Error if body exceeds maxSize
|
|
11
|
+
*/
|
|
12
|
+
export function readBody(req, maxSize = DEFAULT_MAX_BODY_SIZE) {
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
let body = '';
|
|
15
|
+
let size = 0;
|
|
16
|
+
req.on('data', (chunk) => {
|
|
17
|
+
size += chunk.length;
|
|
18
|
+
if (size > maxSize) {
|
|
19
|
+
req.destroy();
|
|
20
|
+
reject(new Error(`Request body too large (max ${maxSize} bytes)`));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
body += chunk.toString();
|
|
24
|
+
});
|
|
25
|
+
req.on('end', () => resolve(body));
|
|
26
|
+
req.on('error', reject);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Reads and parses request body as JSON
|
|
31
|
+
* @param req - The HTTP request
|
|
32
|
+
* @param maxSize - Maximum allowed body size in bytes
|
|
33
|
+
* @returns Promise resolving to the parsed JSON object
|
|
34
|
+
*/
|
|
35
|
+
export async function readJsonBody(req, maxSize = DEFAULT_MAX_BODY_SIZE) {
|
|
36
|
+
const body = await readBody(req, maxSize);
|
|
37
|
+
try {
|
|
38
|
+
return body ? JSON.parse(body) : null;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
throw new Error('Invalid JSON');
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/utils/request.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtD;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAoB,EAAE,OAAO,GAAG,qBAAqB;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,IAAI,GAAG,CAAC,CAAC;QAEb,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;YAErB,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;gBACpB,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,OAAO,SAAS,CAAC,CAAC,CAAC;gBACnE,OAAO;YACR,CAAC;YAED,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CACjC,GAAoB,EACpB,OAAO,GAAG,qBAAqB;IAE/B,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1C,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAE,IAAU,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;IACjC,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ServerResponse } from 'node:http';
|
|
2
|
+
/**
|
|
3
|
+
* Sends a JSON response
|
|
4
|
+
*/
|
|
5
|
+
export declare function sendJson(res: ServerResponse, data: unknown, status?: number): void;
|
|
6
|
+
/**
|
|
7
|
+
* Sends an error response
|
|
8
|
+
*/
|
|
9
|
+
export declare function sendError(res: ServerResponse, error: string | Error, status?: number, requestId?: string): void;
|
|
10
|
+
/**
|
|
11
|
+
* Sends a 404 Not Found response
|
|
12
|
+
*/
|
|
13
|
+
export declare function send404(res: ServerResponse): void;
|
|
14
|
+
/**
|
|
15
|
+
* Sends a 400 Bad Request response
|
|
16
|
+
*/
|
|
17
|
+
export declare function sendBadRequest(res: ServerResponse, message: string): void;
|
|
18
|
+
/**
|
|
19
|
+
* Sends a 503 Service Unavailable response
|
|
20
|
+
*/
|
|
21
|
+
export declare function sendServiceUnavailable(res: ServerResponse, message: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Sets CORS headers on a response
|
|
24
|
+
*/
|
|
25
|
+
export declare function setCorsHeaders(res: ServerResponse, origin?: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Handles OPTIONS preflight requests
|
|
28
|
+
*/
|
|
29
|
+
export declare function handleOptions(res: ServerResponse): void;
|
|
30
|
+
//# sourceMappingURL=response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.d.ts","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,SAAM,GAAG,IAAI,CAG/E;AAED;;GAEG;AACH,wBAAgB,SAAS,CACxB,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,MAAM,SAAM,EACZ,SAAS,CAAC,EAAE,MAAM,GAChB,IAAI,CAUN;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEzE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,SAAM,GAAG,IAAI,CAKtE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,IAAI,CAIvD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sends a JSON response
|
|
3
|
+
*/
|
|
4
|
+
export function sendJson(res, data, status = 200) {
|
|
5
|
+
res.writeHead(status, { 'Content-Type': 'application/json' });
|
|
6
|
+
res.end(JSON.stringify(data));
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Sends an error response
|
|
10
|
+
*/
|
|
11
|
+
export function sendError(res, error, status = 500, requestId) {
|
|
12
|
+
const message = error instanceof Error ? error.message : error;
|
|
13
|
+
sendJson(res, {
|
|
14
|
+
error: message,
|
|
15
|
+
...(requestId && { requestId }),
|
|
16
|
+
}, status);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Sends a 404 Not Found response
|
|
20
|
+
*/
|
|
21
|
+
export function send404(res) {
|
|
22
|
+
sendJson(res, { error: 'Not found' }, 404);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Sends a 400 Bad Request response
|
|
26
|
+
*/
|
|
27
|
+
export function sendBadRequest(res, message) {
|
|
28
|
+
sendJson(res, { error: message }, 400);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Sends a 503 Service Unavailable response
|
|
32
|
+
*/
|
|
33
|
+
export function sendServiceUnavailable(res, message) {
|
|
34
|
+
sendJson(res, { error: message }, 503);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Sets CORS headers on a response
|
|
38
|
+
*/
|
|
39
|
+
export function setCorsHeaders(res, origin = '*') {
|
|
40
|
+
res.setHeader('Access-Control-Allow-Origin', origin);
|
|
41
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
|
|
42
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-Client-ID');
|
|
43
|
+
res.setHeader('Access-Control-Max-Age', '86400');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Handles OPTIONS preflight requests
|
|
47
|
+
*/
|
|
48
|
+
export function handleOptions(res) {
|
|
49
|
+
setCorsHeaders(res);
|
|
50
|
+
res.writeHead(204);
|
|
51
|
+
res.end();
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=response.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/utils/response.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAmB,EAAE,IAAa,EAAE,MAAM,GAAG,GAAG;IACxE,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC9D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACxB,GAAmB,EACnB,KAAqB,EACrB,MAAM,GAAG,GAAG,EACZ,SAAkB;IAElB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/D,QAAQ,CACP,GAAG,EACH;QACC,KAAK,EAAE,OAAO;QACd,GAAG,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;KAC/B,EACD,MAAM,CACN,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAmB;IAC1C,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAmB,EAAE,OAAe;IAClE,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAmB,EAAE,OAAe;IAC1E,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAmB,EAAE,MAAM,GAAG,GAAG;IAC/D,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;IACrD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,iCAAiC,CAAC,CAAC;IACjF,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,0CAA0C,CAAC,CAAC;IAC1F,GAAG,CAAC,SAAS,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,GAAmB;IAChD,cAAc,CAAC,GAAG,CAAC,CAAC;IACpB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnB,GAAG,CAAC,GAAG,EAAE,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-types.d.ts","sourceRoot":"","sources":["../../src/utils/runtime-types.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime SDK Type Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates TypeScript definitions from the runtime API registry.
|
|
5
|
+
*/
|
|
6
|
+
import { GENERATED_METADATA, generateRuntimeTypes as generate } from '@mondaydotcomorg/atp-runtime';
|
|
7
|
+
/**
|
|
8
|
+
* Generates TypeScript definitions for the runtime SDK
|
|
9
|
+
* Delegates to the runtime package's own type generator
|
|
10
|
+
*/
|
|
11
|
+
export function generateRuntimeTypes() {
|
|
12
|
+
return generate(GENERATED_METADATA);
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=runtime-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-types.js","sourceRoot":"","sources":["../../src/utils/runtime-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,IAAI,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAEpG;;;GAGG;AACH,MAAM,UAAU,oBAAoB;IACnC,OAAO,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IAC5D,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACnB,CAUA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a simple type map to a JSON Schema object
|
|
3
|
+
*/
|
|
4
|
+
export function toJSONSchema(types) {
|
|
5
|
+
const properties = {};
|
|
6
|
+
const required = [];
|
|
7
|
+
for (const [key, type] of Object.entries(types)) {
|
|
8
|
+
properties[key] = { type };
|
|
9
|
+
required.push(key);
|
|
10
|
+
}
|
|
11
|
+
return { type: 'object', properties, required };
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/utils/schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAA6B;IAKzD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ProvenanceMetadata, type ProvenanceMode } from '@mondaydotcomorg/atp-provenance';
|
|
2
|
+
import type { CacheProvider } from '@mondaydotcomorg/atp-protocol';
|
|
3
|
+
import type { log } from '@mondaydotcomorg/atp-runtime';
|
|
4
|
+
type Logger = ReturnType<typeof log.child>;
|
|
5
|
+
interface TokenEmission {
|
|
6
|
+
path: string;
|
|
7
|
+
token: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Emits provenance tokens for all values in the result that have provenance in the snapshot.
|
|
11
|
+
* This works by:
|
|
12
|
+
* 1. Traversing the actual serialized result object
|
|
13
|
+
* 2. For each value, checking if it matches provenance in the snapshot
|
|
14
|
+
* 3. Emitting tokens with the ACTUAL value for correct digest matching
|
|
15
|
+
*/
|
|
16
|
+
export declare function emitProvenanceTokens(result: unknown, clientId: string, executionId: string, provenanceMode: ProvenanceMode, cacheProvider: CacheProvider, logger: Logger, maxTokens?: number, tokenTTL?: number, provenanceSnapshot?: {
|
|
17
|
+
registry: Array<[string, ProvenanceMetadata]>;
|
|
18
|
+
primitives: Array<[string, ProvenanceMetadata]>;
|
|
19
|
+
}): Promise<TokenEmission[]>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=token-emitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-emitter.d.ts","sourceRoot":"","sources":["../../src/utils/token-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAEnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,8BAA8B,CAAC;AAExD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;AAE3C,UAAU,aAAa;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CACzC,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,MAAa,EACxB,QAAQ,GAAE,MAAa,EACvB,kBAAkB,CAAC,EAAE;IACpB,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC9C,UAAU,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;CAChD,GACC,OAAO,CAAC,aAAa,EAAE,CAAC,CAiJ1B"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { issueProvenanceToken, ProvenanceMode as PM, } from '@mondaydotcomorg/atp-provenance';
|
|
2
|
+
/**
|
|
3
|
+
* Emits provenance tokens for all values in the result that have provenance in the snapshot.
|
|
4
|
+
* This works by:
|
|
5
|
+
* 1. Traversing the actual serialized result object
|
|
6
|
+
* 2. For each value, checking if it matches provenance in the snapshot
|
|
7
|
+
* 3. Emitting tokens with the ACTUAL value for correct digest matching
|
|
8
|
+
*/
|
|
9
|
+
export async function emitProvenanceTokens(result, clientId, executionId, provenanceMode, cacheProvider, logger, maxTokens = 5000, tokenTTL = 3600, provenanceSnapshot) {
|
|
10
|
+
if (provenanceMode === PM.NONE || !result || !provenanceSnapshot) {
|
|
11
|
+
logger.debug('Skipping token emission', {
|
|
12
|
+
hasResult: !!result,
|
|
13
|
+
hasSnapshot: !!provenanceSnapshot,
|
|
14
|
+
mode: provenanceMode,
|
|
15
|
+
});
|
|
16
|
+
return [];
|
|
17
|
+
}
|
|
18
|
+
logger.info('Token emission starting from snapshot', {
|
|
19
|
+
executionId,
|
|
20
|
+
registrySize: provenanceSnapshot.registry.length,
|
|
21
|
+
primitiveMapSize: provenanceSnapshot.primitives.length,
|
|
22
|
+
resultType: typeof result,
|
|
23
|
+
});
|
|
24
|
+
const tokens = [];
|
|
25
|
+
const visited = new WeakSet();
|
|
26
|
+
const primitiveMap = new Map(provenanceSnapshot.primitives);
|
|
27
|
+
const taintedValues = new Set();
|
|
28
|
+
for (const [key] of provenanceSnapshot.primitives) {
|
|
29
|
+
if (key.startsWith('tainted:')) {
|
|
30
|
+
taintedValues.add(key.slice('tainted:'.length));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const queue = [{ value: result, path: '' }];
|
|
34
|
+
while (queue.length > 0 && tokens.length < maxTokens) {
|
|
35
|
+
const { value, path } = queue.shift();
|
|
36
|
+
if (value === null || value === undefined) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
40
|
+
const valueStr = String(value);
|
|
41
|
+
const taintedKey = `tainted:${valueStr}`;
|
|
42
|
+
let meta = primitiveMap.get(taintedKey);
|
|
43
|
+
if (!meta) {
|
|
44
|
+
for (const [key, metadata] of primitiveMap.entries()) {
|
|
45
|
+
if (!key.startsWith('tainted:')) {
|
|
46
|
+
const parts = key.split(':');
|
|
47
|
+
if (parts.length >= 3) {
|
|
48
|
+
const derivedValue = parts.slice(2).join(':');
|
|
49
|
+
if (derivedValue === valueStr) {
|
|
50
|
+
meta = metadata;
|
|
51
|
+
logger.debug('Found property-derived primitive match', {
|
|
52
|
+
path,
|
|
53
|
+
key,
|
|
54
|
+
valuePreview: valueStr.substring(0, 30),
|
|
55
|
+
});
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (meta) {
|
|
63
|
+
try {
|
|
64
|
+
const token = await issueProvenanceToken(meta, value, clientId, executionId, cacheProvider, tokenTTL);
|
|
65
|
+
if (token) {
|
|
66
|
+
tokens.push({ path, token });
|
|
67
|
+
logger.debug('Emitted token for primitive', {
|
|
68
|
+
path,
|
|
69
|
+
valuePreview: typeof value === 'string' ? value.substring(0, 30) : value,
|
|
70
|
+
tokenPrefix: token.substring(0, 10),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
logger.warn('Failed to issue token for primitive', { path, error });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (typeof value === 'object') {
|
|
81
|
+
if (visited.has(value)) {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
visited.add(value);
|
|
85
|
+
// For objects, we need to check if ANY of the registry metadata applies
|
|
86
|
+
// Since we can't match by identity, we emit tokens for ALL registry entries
|
|
87
|
+
// and let the client match by digest
|
|
88
|
+
if (provenanceSnapshot.registry.length > 0 && path === '') {
|
|
89
|
+
for (const [id, meta] of provenanceSnapshot.registry) {
|
|
90
|
+
if (tokens.length >= maxTokens)
|
|
91
|
+
break;
|
|
92
|
+
try {
|
|
93
|
+
const token = await issueProvenanceToken(meta, value, clientId, executionId, cacheProvider, tokenTTL);
|
|
94
|
+
if (token) {
|
|
95
|
+
tokens.push({ path, token });
|
|
96
|
+
logger.debug('Emitted token for object', {
|
|
97
|
+
path,
|
|
98
|
+
id,
|
|
99
|
+
tokenPrefix: token.substring(0, 10),
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
logger.warn('Failed to issue token for object', { path, id, error });
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (Array.isArray(value)) {
|
|
109
|
+
for (let i = 0; i < value.length; i++) {
|
|
110
|
+
queue.push({ value: value[i], path: `${path}/${i}` });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
for (const key in value) {
|
|
115
|
+
if (Object.prototype.hasOwnProperty.call(value, key)) {
|
|
116
|
+
const escapedKey = key.replace(/~/g, '~0').replace(/\//g, '~1');
|
|
117
|
+
queue.push({ value: value[key], path: `${path}/${escapedKey}` });
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (tokens.length >= maxTokens) {
|
|
124
|
+
logger.warn('Max provenance tokens reached', { executionId, maxTokens });
|
|
125
|
+
}
|
|
126
|
+
logger.info('Token emission completed', { executionId, tokenCount: tokens.length });
|
|
127
|
+
return tokens;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=token-emitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-emitter.js","sourceRoot":"","sources":["../../src/utils/token-emitter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ValidationResult, ExecutionConfig } from '@mondaydotcomorg/atp-protocol';
|
|
2
|
+
/**
|
|
3
|
+
* CodeValidator validates user code before execution using a whitelist approach.
|
|
4
|
+
* Only explicitly allowed operations and patterns are permitted.
|
|
5
|
+
*/
|
|
6
|
+
export declare class CodeValidator {
|
|
7
|
+
private readonly allowedGlobalObjects;
|
|
8
|
+
private readonly forbiddenPatterns;
|
|
9
|
+
/**
|
|
10
|
+
* Validates code for security and syntax issues.
|
|
11
|
+
* @param code - The code to validate
|
|
12
|
+
* @param config - Execution configuration
|
|
13
|
+
* @returns Validation result with any errors or security issues
|
|
14
|
+
*/
|
|
15
|
+
validate(code: string, config: ExecutionConfig): Promise<ValidationResult>;
|
|
16
|
+
/**
|
|
17
|
+
* Validates JavaScript syntax using acorn parser.
|
|
18
|
+
* @param code - Code to validate
|
|
19
|
+
* @param errors - Array to append syntax errors to
|
|
20
|
+
*/
|
|
21
|
+
private validateSyntax;
|
|
22
|
+
/**
|
|
23
|
+
* Checks for unauthorized global object access.
|
|
24
|
+
* @param code - Code to check
|
|
25
|
+
* @param securityIssues - Array to append issues to
|
|
26
|
+
*/
|
|
27
|
+
private checkGlobalAccess;
|
|
28
|
+
/**
|
|
29
|
+
* Validates import statements to ensure NO imports are allowed.
|
|
30
|
+
* ALL imports are blocked for security - use injected sandbox globals instead.
|
|
31
|
+
* @param code - Code to validate
|
|
32
|
+
* @param securityIssues - Array to append issues to
|
|
33
|
+
*/
|
|
34
|
+
private validateImports;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAgBvF;;;GAGG;AACH,qBAAa,aAAa;IACzB,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAkBlC;IAEH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAkChC;IAEF;;;;;OAKG;IACG,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiChF;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA0BtB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;CAyEvB"}
|