@safebrowse/daemon 0.1.2-rc.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -15
- package/README.md +31 -31
- package/dist/cli.js +9 -9
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/parserIsolation.d.ts +12 -0
- package/dist/parserIsolation.d.ts.map +1 -0
- package/dist/parserIsolation.js +57 -0
- package/dist/parserIsolation.js.map +1 -0
- package/dist/parserWorker.d.ts +2 -0
- package/dist/parserWorker.d.ts.map +1 -0
- package/dist/parserWorker.js +89 -0
- package/dist/parserWorker.js.map +1 -0
- package/dist/runtime/config/auditor/v4_prompt_injection_coverage_suite.json +2789 -0
- package/dist/runtime/knowledge_base/safebrowse_vf_action_integrity_patterns.json +1411 -1411
- package/dist/runtime/knowledge_base/safebrowse_vf_artifact_surface_patterns.json +891 -891
- package/dist/runtime/knowledge_base/safebrowse_vf_evaluation_scenarios.json +217 -217
- package/dist/runtime/knowledge_base/safebrowse_vf_incident_response_playbooks.json +209 -209
- package/dist/runtime/knowledge_base/safebrowse_vf_knowledge_base_index.json +143 -143
- package/dist/runtime/knowledge_base/safebrowse_vf_knowledge_base_index.json.sig +1 -1
- package/dist/runtime/knowledge_base/safebrowse_vf_knowledge_bases.zip.sig +1 -1
- package/dist/runtime/knowledge_base/safebrowse_vf_memory_context_poisoning_patterns.json +803 -803
- package/dist/runtime/knowledge_base/safebrowse_vf_policy_controls_catalog.json +686 -686
- package/dist/runtime/knowledge_base/safebrowse_vf_prompt_injection_patterns.json +9930 -9930
- package/dist/runtime/knowledge_base/safebrowse_vf_source_registry.json +345 -345
- package/dist/runtime/knowledge_base/safebrowse_vf_tool_protocol_supply_chain_patterns.json +879 -879
- package/dist/runtime/knowledge_base/safebrowse_vf_trust_signals_provenance.json +480 -480
- package/dist/runtime/knowledge_base/signing/safebrowse_vf_ed25519_public.pem +3 -3
- package/dist/runtime/policies/base/research.yaml +43 -43
- package/dist/runtime/policies/emergency/default.yaml +14 -14
- package/dist/runtime/policies/project/default.yaml +13 -13
- package/dist/runtime/policies/tenant/default.yaml +12 -12
- package/dist/server.d.ts +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +489 -22
- package/dist/server.js.map +1 -1
- package/package.json +53 -53
package/LICENSE
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
SafeBrowse Non-Commercial License 1.0
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2026 RobKang1234. All rights reserved.
|
|
4
|
-
|
|
5
|
-
This package is licensed for non-commercial use only.
|
|
6
|
-
|
|
7
|
-
You may use, copy, modify, and redistribute this package for
|
|
8
|
-
non-commercial purposes only, provided that you preserve this license
|
|
9
|
-
notice and all copyright notices.
|
|
10
|
-
|
|
11
|
-
Commercial use is prohibited without prior written permission from the
|
|
12
|
-
copyright holder.
|
|
13
|
-
|
|
14
|
-
The full license text is distributed in the repository root `LICENSE`
|
|
15
|
-
file for SafeBrowse.
|
|
1
|
+
SafeBrowse Non-Commercial License 1.0
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 RobKang1234. All rights reserved.
|
|
4
|
+
|
|
5
|
+
This package is licensed for non-commercial use only.
|
|
6
|
+
|
|
7
|
+
You may use, copy, modify, and redistribute this package for
|
|
8
|
+
non-commercial purposes only, provided that you preserve this license
|
|
9
|
+
notice and all copyright notices.
|
|
10
|
+
|
|
11
|
+
Commercial use is prohibited without prior written permission from the
|
|
12
|
+
copyright holder.
|
|
13
|
+
|
|
14
|
+
The full license text is distributed in the repository root `LICENSE`
|
|
15
|
+
file for SafeBrowse.
|
package/README.md
CHANGED
|
@@ -1,31 +1,31 @@
|
|
|
1
|
-
# `@safebrowse/daemon`
|
|
2
|
-
|
|
3
|
-
Localhost SafeBrowse daemon with built-in runtime assets for policy, registry, and KB loading.
|
|
4
|
-
|
|
5
|
-
## Install
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install @safebrowse/daemon
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Run
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
npx @safebrowse/daemon --host 127.0.0.1 --port 8787
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
Environment variables:
|
|
18
|
-
|
|
19
|
-
- `SAFEBROWSE_HOST`
|
|
20
|
-
- `SAFEBROWSE_PORT`
|
|
21
|
-
- `SAFEBROWSE_ROOT_DIR`
|
|
22
|
-
|
|
23
|
-
Health endpoint:
|
|
24
|
-
|
|
25
|
-
```text
|
|
26
|
-
GET /health
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
See the repository README for full daemon routes and operational guidance:
|
|
30
|
-
|
|
31
|
-
- https://github.com/RobKang1234/safebrowse-sdk#readme
|
|
1
|
+
# `@safebrowse/daemon`
|
|
2
|
+
|
|
3
|
+
Localhost SafeBrowse daemon with built-in runtime assets for policy, registry, and KB loading.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @safebrowse/daemon
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Run
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx @safebrowse/daemon --host 127.0.0.1 --port 8787
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Environment variables:
|
|
18
|
+
|
|
19
|
+
- `SAFEBROWSE_HOST`
|
|
20
|
+
- `SAFEBROWSE_PORT`
|
|
21
|
+
- `SAFEBROWSE_ROOT_DIR`
|
|
22
|
+
|
|
23
|
+
Health endpoint:
|
|
24
|
+
|
|
25
|
+
```text
|
|
26
|
+
GET /health
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
See the repository README for full daemon routes and operational guidance:
|
|
30
|
+
|
|
31
|
+
- https://github.com/RobKang1234/safebrowse-sdk#readme
|
package/dist/cli.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { resolve } from "node:path";
|
|
2
2
|
import process from "node:process";
|
|
3
3
|
import { startSafeBrowseDaemon } from "./server.js";
|
|
4
|
-
const HELP_TEXT = `SafeBrowse daemon
|
|
5
|
-
|
|
6
|
-
Usage:
|
|
7
|
-
safebrowse-daemon [--host 127.0.0.1] [--port 8787] [--root-dir <path>]
|
|
8
|
-
|
|
9
|
-
Environment:
|
|
10
|
-
SAFEBROWSE_HOST
|
|
11
|
-
SAFEBROWSE_PORT
|
|
12
|
-
SAFEBROWSE_ROOT_DIR
|
|
4
|
+
const HELP_TEXT = `SafeBrowse daemon
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
safebrowse-daemon [--host 127.0.0.1] [--port 8787] [--root-dir <path>]
|
|
8
|
+
|
|
9
|
+
Environment:
|
|
10
|
+
SAFEBROWSE_HOST
|
|
11
|
+
SAFEBROWSE_PORT
|
|
12
|
+
SAFEBROWSE_ROOT_DIR
|
|
13
13
|
`;
|
|
14
14
|
function parsePort(value) {
|
|
15
15
|
const port = Number.parseInt(value, 10);
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
export { formatDaemonHelp, parseDaemonOptions, runDaemonCli } from "./cli.js";
|
|
3
|
+
export { compileObservationInIsolation, probeParserIsolation } from "./parserIsolation.js";
|
|
3
4
|
export { createSafeBrowseServer, startSafeBrowseDaemon } from "./server.js";
|
|
4
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAQA,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
4
|
import { formatDaemonHelp, parseDaemonOptions, runDaemonCli } from "./cli.js";
|
|
5
|
+
import { compileObservationInIsolation, probeParserIsolation } from "./parserIsolation.js";
|
|
5
6
|
import { createSafeBrowseServer, startSafeBrowseDaemon } from "./server.js";
|
|
6
7
|
export { formatDaemonHelp, parseDaemonOptions, runDaemonCli } from "./cli.js";
|
|
8
|
+
export { compileObservationInIsolation, probeParserIsolation } from "./parserIsolation.js";
|
|
7
9
|
export { createSafeBrowseServer, startSafeBrowseDaemon } from "./server.js";
|
|
8
10
|
function isDirectExecution() {
|
|
9
11
|
if (!process.argv[1]) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE5E,SAAS,iBAAiB;IACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,IAAI,iBAAiB,EAAE,EAAE,CAAC;IACxB,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC9E,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAE5E,SAAS,iBAAiB;IACxB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,IAAI,iBAAiB,EAAE,EAAE,CAAC;IACxB,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAClC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { CompiledObservation, ParserWorkerProbe, RuntimeContext, StructuredPlannerInput, SurfaceCapture } from "@safebrowse/core";
|
|
2
|
+
export declare function compileObservationInIsolation(input: {
|
|
3
|
+
capture: SurfaceCapture;
|
|
4
|
+
workflowHash?: string;
|
|
5
|
+
allowlistedEgress?: string[];
|
|
6
|
+
runtime?: Partial<RuntimeContext>;
|
|
7
|
+
}): Promise<{
|
|
8
|
+
compiledObservation: CompiledObservation;
|
|
9
|
+
plannerInput: StructuredPlannerInput;
|
|
10
|
+
}>;
|
|
11
|
+
export declare function probeParserIsolation(): Promise<ParserWorkerProbe>;
|
|
12
|
+
//# sourceMappingURL=parserIsolation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parserIsolation.d.ts","sourceRoot":"","sources":["../src/parserIsolation.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,cAAc,EACf,MAAM,kBAAkB,CAAC;AAwE1B,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,OAAO,EAAE,cAAc,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;CACnC,GAAG,OAAO,CAAC;IACV,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,YAAY,EAAE,sBAAsB,CAAC;CACtC,CAAC,CAQD;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAIjE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { fork } from "node:child_process";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { resolve, dirname } from "node:path";
|
|
5
|
+
const moduleDir = dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
const compiledWorkerPath = resolve(moduleDir, "parserWorker.js");
|
|
7
|
+
const sourceWorkerPath = resolve(moduleDir, "parserWorker.ts");
|
|
8
|
+
const workerPath = existsSync(compiledWorkerPath) ? compiledWorkerPath : sourceWorkerPath;
|
|
9
|
+
function runWorker(payload) {
|
|
10
|
+
return new Promise((resolvePromise, rejectPromise) => {
|
|
11
|
+
const child = fork(workerPath, [], {
|
|
12
|
+
env: {},
|
|
13
|
+
stdio: ["ignore", "ignore", "ignore", "ipc"],
|
|
14
|
+
execArgv: workerPath.endsWith(".ts")
|
|
15
|
+
? [...process.execArgv, "--import", "tsx"]
|
|
16
|
+
: process.execArgv
|
|
17
|
+
});
|
|
18
|
+
const finish = (error, value) => {
|
|
19
|
+
child.removeAllListeners();
|
|
20
|
+
child.kill();
|
|
21
|
+
if (error) {
|
|
22
|
+
rejectPromise(error);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
resolvePromise(value);
|
|
26
|
+
};
|
|
27
|
+
child.once("error", (error) => finish(error));
|
|
28
|
+
child.once("message", (message) => {
|
|
29
|
+
if (!message.ok) {
|
|
30
|
+
finish(new Error(message.error));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
finish(undefined, (message.probe ?? message.result));
|
|
34
|
+
});
|
|
35
|
+
child.once("exit", (code) => {
|
|
36
|
+
if (code && code !== 0) {
|
|
37
|
+
finish(new Error(`parser worker exited with code ${code}`));
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
child.send(payload);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
export function compileObservationInIsolation(input) {
|
|
44
|
+
return runWorker({
|
|
45
|
+
kind: "parse",
|
|
46
|
+
capture: input.capture,
|
|
47
|
+
workflowHash: input.workflowHash,
|
|
48
|
+
allowlistedEgress: input.allowlistedEgress,
|
|
49
|
+
runtime: input.runtime
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
export function probeParserIsolation() {
|
|
53
|
+
return runWorker({
|
|
54
|
+
kind: "probe"
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=parserIsolation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parserIsolation.js","sourceRoot":"","sources":["../src/parserIsolation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parserWorker.d.ts","sourceRoot":"","sources":["../src/parserWorker.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import process from "node:process";
|
|
3
|
+
const require = createRequire(import.meta.url);
|
|
4
|
+
function denyNetwork(message = "Parser worker egress denied") {
|
|
5
|
+
const denial = () => {
|
|
6
|
+
throw new Error(message);
|
|
7
|
+
};
|
|
8
|
+
const http = require("node:http");
|
|
9
|
+
const https = require("node:https");
|
|
10
|
+
const net = require("node:net");
|
|
11
|
+
const tls = require("node:tls");
|
|
12
|
+
const dns = require("node:dns");
|
|
13
|
+
http.request = denial;
|
|
14
|
+
http.get = denial;
|
|
15
|
+
https.request = denial;
|
|
16
|
+
https.get = denial;
|
|
17
|
+
net.connect = denial;
|
|
18
|
+
net.createConnection = denial;
|
|
19
|
+
tls.connect = denial;
|
|
20
|
+
dns.lookup = denial;
|
|
21
|
+
dns.resolve = denial;
|
|
22
|
+
dns.resolve4 = denial;
|
|
23
|
+
dns.resolve6 = denial;
|
|
24
|
+
Object.assign(globalThis, {
|
|
25
|
+
fetch: async () => {
|
|
26
|
+
throw new Error(message);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function lockDownEnvironment() {
|
|
31
|
+
for (const key of Object.keys(process.env)) {
|
|
32
|
+
delete process.env[key];
|
|
33
|
+
}
|
|
34
|
+
denyNetwork();
|
|
35
|
+
}
|
|
36
|
+
async function probeIsolation() {
|
|
37
|
+
let egressDenied = false;
|
|
38
|
+
try {
|
|
39
|
+
await globalThis.fetch("https://example.com");
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
egressDenied = true;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
envKeys: Object.keys(process.env),
|
|
46
|
+
egressDenied,
|
|
47
|
+
processIsolated: true
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
lockDownEnvironment();
|
|
51
|
+
async function loadCoreRuntime() {
|
|
52
|
+
if (import.meta.url.endsWith(".ts")) {
|
|
53
|
+
const sourceEntryUrl = new URL("../../core/src/index.ts", import.meta.url).href;
|
|
54
|
+
return import(sourceEntryUrl);
|
|
55
|
+
}
|
|
56
|
+
return import("@safebrowse/core");
|
|
57
|
+
}
|
|
58
|
+
process.on("message", async (message) => {
|
|
59
|
+
try {
|
|
60
|
+
const { compileObservation } = await loadCoreRuntime();
|
|
61
|
+
if (message.kind === "probe") {
|
|
62
|
+
process.send?.({
|
|
63
|
+
ok: true,
|
|
64
|
+
probe: await probeIsolation()
|
|
65
|
+
});
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const result = compileObservation(message.capture, message.runtime ?? {}, {
|
|
69
|
+
workflowHash: message.workflowHash,
|
|
70
|
+
parserIsolation: {
|
|
71
|
+
processIsolated: true,
|
|
72
|
+
secretAccess: false,
|
|
73
|
+
arbitraryEgress: false,
|
|
74
|
+
allowlistedEgress: message.allowlistedEgress ?? []
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
process.send?.({
|
|
78
|
+
ok: true,
|
|
79
|
+
result
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
process.send?.({
|
|
84
|
+
ok: false,
|
|
85
|
+
error: error instanceof Error ? error.message : String(error)
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=parserWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parserWorker.js","sourceRoot":"","sources":["../src/parserWorker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,OAAO,MAAM,cAAc,CAAC;AAInC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,SAAS,WAAW,CAAC,OAAO,GAAG,6BAA6B;IAC1D,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAChC,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEhC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACtB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;IAClB,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,GAAG,GAAG,MAAM,CAAC;IACnB,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IACrB,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC;IAC9B,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IACrB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;IACpB,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC;IACrB,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC;IACtB,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC;IAEtB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;QACxB,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB;IAC1B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,WAAW,EAAE,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,cAAc;IAK3B,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;QACjC,YAAY;QACZ,eAAe,EAAE,IAAI;KACtB,CAAC;AACJ,CAAC;AAED,mBAAmB,EAAE,CAAC;AAEtB,KAAK,UAAU,eAAe;IAG5B,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,yBAAyB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QAChF,OAAO,MAAM,CAAC,cAAc,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACpC,CAAC;AAcD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAA4B,EAAE,EAAE;IAC3D,IAAI,CAAC;QACH,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,eAAe,EAAE,CAAC;QAEvD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,EAAE,CAAC;gBACb,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,MAAM,cAAc,EAAE;aAC9B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE;YACxE,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,eAAe,EAAE;gBACf,eAAe,EAAE,IAAI;gBACrB,YAAY,EAAE,KAAK;gBACnB,eAAe,EAAE,KAAK;gBACtB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,EAAE;aACnD;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,EAAE,CAAC;YACb,EAAE,EAAE,IAAI;YACR,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,EAAE,CAAC;YACb,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
|