@sonisoft/now-sdk-ext-core 5.3.0 → 6.1.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/LICENSE +21 -21
- package/README.md +86 -3
- package/dist/comm/http/HTTPRequest.d.ts +12 -0
- package/dist/comm/http/RequestHandler.d.ts +13 -0
- package/dist/comm/http/RequestHandler.js +47 -0
- package/dist/comm/http/RequestHandler.js.map +1 -1
- package/dist/comm/http/ServiceNowProcessorRequest.d.ts +9 -2
- package/dist/comm/http/ServiceNowProcessorRequest.js +17 -5
- package/dist/comm/http/ServiceNowProcessorRequest.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/policy/Policy.d.ts +40 -0
- package/dist/policy/Policy.js +161 -0
- package/dist/policy/Policy.js.map +1 -0
- package/dist/policy/PolicyEnv.d.ts +46 -0
- package/dist/policy/PolicyEnv.js +92 -0
- package/dist/policy/PolicyEnv.js.map +1 -0
- package/dist/policy/PolicyRefusal.d.ts +17 -0
- package/dist/policy/PolicyRefusal.js +69 -0
- package/dist/policy/PolicyRefusal.js.map +1 -0
- package/dist/policy/PolicyTypes.d.ts +65 -0
- package/dist/policy/PolicyTypes.js +15 -0
- package/dist/policy/PolicyTypes.js.map +1 -0
- package/dist/policy/ScanScript.d.ts +22 -0
- package/dist/policy/ScanScript.js +171 -0
- package/dist/policy/ScanScript.js.map +1 -0
- package/dist/policy/internal/Classify.d.ts +16 -0
- package/dist/policy/internal/Classify.js +121 -0
- package/dist/policy/internal/Classify.js.map +1 -0
- package/dist/sn/Application.js +18 -8
- package/dist/sn/Application.js.map +1 -1
- package/dist/sn/BackgroundScriptExecutor.d.ts +12 -0
- package/dist/sn/BackgroundScriptExecutor.js +60 -1
- package/dist/sn/BackgroundScriptExecutor.js.map +1 -1
- package/dist/sn/amb/AMBClient.js +24 -11
- package/dist/sn/amb/AMBClient.js.map +1 -1
- package/dist/sn/amb/SubscriptionCommandSender.js +19 -2
- package/dist/sn/amb/SubscriptionCommandSender.js.map +1 -1
- package/dist/sn/amb/XMLHttpRequest.d.ts +1 -0
- package/dist/sn/amb/XMLHttpRequest.js +5 -1
- package/dist/sn/amb/XMLHttpRequest.js.map +1 -1
- package/dist/sn/atf/ATFTestExecutor.js +3 -1
- package/dist/sn/atf/ATFTestExecutor.js.map +1 -1
- package/dist/sn/scripttracer/ScriptTracer.js +6 -2
- package/dist/sn/scripttracer/ScriptTracer.js.map +1 -1
- package/dist/sn/syslog/SyslogReader.js +6 -1
- package/dist/sn/syslog/SyslogReader.js.map +1 -1
- package/dist/util/LogConfig.d.ts +83 -0
- package/dist/util/LogConfig.js +387 -0
- package/dist/util/LogConfig.js.map +1 -0
- package/dist/util/Logger.d.ts +40 -18
- package/dist/util/Logger.js +78 -84
- package/dist/util/Logger.js.map +1 -1
- package/dist/util/redact.d.ts +12 -0
- package/dist/util/redact.js +76 -0
- package/dist/util/redact.js.map +1 -1
- package/package.json +10 -9
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { parse } from "acorn";
|
|
2
|
+
/**
|
|
3
|
+
* Looks at a server-side script and reports what it appears to do.
|
|
4
|
+
*
|
|
5
|
+
* ## What this is for
|
|
6
|
+
*
|
|
7
|
+
* A background script needs `execute` no matter what. This scan exists to decide
|
|
8
|
+
* whether it ALSO needs `write` — so a genuinely read-only diagnostic script can run
|
|
9
|
+
* under `execute` alone, while one containing `gr.insert()` needs both.
|
|
10
|
+
*
|
|
11
|
+
* ## What it cannot do — read this before trusting it
|
|
12
|
+
*
|
|
13
|
+
* It is unsound, and deliberately so. A server-side script can mutate through routes no
|
|
14
|
+
* static analysis can follow:
|
|
15
|
+
*
|
|
16
|
+
* - a Script Include: `new global.MyUtil().doThing()` — the write is in another file
|
|
17
|
+
* - `gs.eval(someString)`
|
|
18
|
+
* - `sn_ws.RESTMessageV2` calling out to anything
|
|
19
|
+
* - `workflow.startFlow()`, `gs.getUser().setPreference()`
|
|
20
|
+
* - `GlideRecord` reached through a variable this scan never resolves
|
|
21
|
+
*
|
|
22
|
+
* So a `write`-free result means "nothing obviously writes", NOT "this cannot write".
|
|
23
|
+
* That is exactly why `execute` is still required: permitting a script at all is the
|
|
24
|
+
* real decision, and this scan only narrows what else is needed.
|
|
25
|
+
*
|
|
26
|
+
* ## Deny-leaning by construction
|
|
27
|
+
*
|
|
28
|
+
* Every case it cannot resolve escalates to `write` rather than passing. A scanner that
|
|
29
|
+
* defaults permissive on unfamiliar syntax manufactures confidence and is worse than no
|
|
30
|
+
* scanner — it would let `gr['inse' + 'rt']()` through while looking like it checked.
|
|
31
|
+
*/
|
|
32
|
+
/** Methods that mutate records. Matched on name, on any receiver. */
|
|
33
|
+
const MUTATING_METHODS = new Set([
|
|
34
|
+
"insert",
|
|
35
|
+
"update",
|
|
36
|
+
"updateMultiple",
|
|
37
|
+
"deleteRecord",
|
|
38
|
+
"deleteMultiple",
|
|
39
|
+
"insertWithReferences",
|
|
40
|
+
"updateWithReferences",
|
|
41
|
+
"setValue", // stages a change; harmless alone, but never appears without a write
|
|
42
|
+
"setWorkflow", // disabling business rules is only ever done around a write
|
|
43
|
+
]);
|
|
44
|
+
/** Constructs whose behaviour cannot be known statically. */
|
|
45
|
+
const OPAQUE_CALLS = new Set(["eval", "Function", "GlideEvaluator"]);
|
|
46
|
+
const NONE = { verbs: [], reasons: [], escalated: false };
|
|
47
|
+
function writeResult(reasons, escalated) {
|
|
48
|
+
return { verbs: ["write"], reasons, escalated };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Parses with the loosest grammar that works.
|
|
52
|
+
*
|
|
53
|
+
* Rhino — what ServiceNow runs server-side — is ES5-era, so most scripts parse at 5.
|
|
54
|
+
* Newer syntax appears in scripts written against the newer engine, hence the fallback.
|
|
55
|
+
* If BOTH fail the script is unreadable to us, which escalates rather than passes.
|
|
56
|
+
*/
|
|
57
|
+
function parseScript(script) {
|
|
58
|
+
for (const ecmaVersion of [5, "latest"]) {
|
|
59
|
+
try {
|
|
60
|
+
return { ast: parse(script, { ecmaVersion, silent: true }) };
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// try the next grammar
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return { parseError: "could not be parsed" };
|
|
67
|
+
}
|
|
68
|
+
/** Reads a string-valued AST field, or "" when it is anything else. */
|
|
69
|
+
function textOf(value) {
|
|
70
|
+
return typeof value === "string" ? value : "";
|
|
71
|
+
}
|
|
72
|
+
/** Walks every node without depending on acorn-walk's visitor table. */
|
|
73
|
+
function walk(node, visit) {
|
|
74
|
+
if (!node || typeof node !== "object") {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (Array.isArray(node)) {
|
|
78
|
+
for (const child of node) {
|
|
79
|
+
walk(child, visit);
|
|
80
|
+
}
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const record = node;
|
|
84
|
+
if (typeof record.type === "string") {
|
|
85
|
+
visit(record);
|
|
86
|
+
}
|
|
87
|
+
for (const key of Object.keys(record)) {
|
|
88
|
+
if (key === "type" || key === "start" || key === "end" || key === "loc") {
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
walk(record[key], visit);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Reports the extra permission a script needs.
|
|
96
|
+
*
|
|
97
|
+
* Call this with the script that will ACTUALLY be sent — after any `{param}`
|
|
98
|
+
* substitution. Scanning the pre-substitution text is a hole you could drive a
|
|
99
|
+
* parameter value of `gr.insert()` through.
|
|
100
|
+
*/
|
|
101
|
+
export function scanScript(script) {
|
|
102
|
+
if (typeof script !== "string" || script.trim().length === 0) {
|
|
103
|
+
return NONE;
|
|
104
|
+
}
|
|
105
|
+
const parsed = parseScript(script);
|
|
106
|
+
if ("parseError" in parsed) {
|
|
107
|
+
// Unreadable, so unknowable. Escalate.
|
|
108
|
+
return writeResult(["the script could not be parsed, so its effects are unknown"], true);
|
|
109
|
+
}
|
|
110
|
+
const reasons = [];
|
|
111
|
+
let escalated = false;
|
|
112
|
+
walk(parsed.ast, (node) => {
|
|
113
|
+
if (node.type !== "CallExpression") {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const callee = node.callee;
|
|
117
|
+
if (!callee) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
// eval(...) / new Function(...) — contents are opaque.
|
|
121
|
+
const calleeName = textOf(callee.name);
|
|
122
|
+
if (callee.type === "Identifier" && OPAQUE_CALLS.has(calleeName)) {
|
|
123
|
+
reasons.push(`calls ${calleeName}(), whose contents cannot be inspected`);
|
|
124
|
+
escalated = true;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
if (callee.type !== "MemberExpression") {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
// gr['inse' + 'rt']() — the property is computed, so the method name is not
|
|
131
|
+
// knowable. This is the single most likely way to walk past a naive scan.
|
|
132
|
+
if (callee.computed === true) {
|
|
133
|
+
const property = callee.property;
|
|
134
|
+
const isLiteralName = property?.type === "Literal" && typeof property.value === "string";
|
|
135
|
+
if (!isLiteralName) {
|
|
136
|
+
reasons.push("calls a method chosen at runtime, which cannot be resolved");
|
|
137
|
+
escalated = true;
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const literalName = textOf(property?.value);
|
|
141
|
+
if (MUTATING_METHODS.has(literalName)) {
|
|
142
|
+
reasons.push(`calls .${literalName}()`);
|
|
143
|
+
}
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
const property = callee.property;
|
|
147
|
+
if (property?.type === "Identifier") {
|
|
148
|
+
const name = textOf(property.name);
|
|
149
|
+
if (MUTATING_METHODS.has(name)) {
|
|
150
|
+
reasons.push(`calls .${name}()`);
|
|
151
|
+
}
|
|
152
|
+
if (OPAQUE_CALLS.has(name)) {
|
|
153
|
+
// gs.eval(...)
|
|
154
|
+
reasons.push(`calls .${name}(), whose contents cannot be inspected`);
|
|
155
|
+
escalated = true;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
if (reasons.length === 0) {
|
|
160
|
+
return NONE;
|
|
161
|
+
}
|
|
162
|
+
return writeResult([...new Set(reasons)], escalated);
|
|
163
|
+
}
|
|
164
|
+
/** Convenience: what a background script needs in total. */
|
|
165
|
+
export function requirementForScript(script) {
|
|
166
|
+
const scan = scanScript(script);
|
|
167
|
+
// `execute` always. Running caller-supplied code on the instance is the decision
|
|
168
|
+
// being made; the scan only decides whether `write` rides along.
|
|
169
|
+
return { verbs: ["execute", ...scan.verbs], reasons: scan.reasons };
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=ScanScript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScanScript.js","sourceRoot":"","sources":["../../src/policy/ScanScript.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { HTTPRequest } from "../../comm/http/HTTPRequest.js";
|
|
2
|
+
import { Requirement, Verb } from "../PolicyTypes.js";
|
|
3
|
+
/** Matched floor rules, for the audit log and for tests. */
|
|
4
|
+
export declare function floorFor(request: HTTPRequest): {
|
|
5
|
+
verbs: Verb[];
|
|
6
|
+
reasons: string[];
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* The joined requirement for a request.
|
|
10
|
+
*
|
|
11
|
+
* DECLARED replaces the default when present, but the floor is unioned in afterwards so
|
|
12
|
+
* a declaration can correct a wrong default without ever lowering a floor entry.
|
|
13
|
+
*/
|
|
14
|
+
export declare function classify(request: HTTPRequest): Requirement & {
|
|
15
|
+
reasons: string[];
|
|
16
|
+
};
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
const pathIs = (needle) => (path) => path.split("?")[0].endsWith(needle);
|
|
2
|
+
const pathHas = (needle) => (path) => path.includes(needle);
|
|
3
|
+
/**
|
|
4
|
+
* Un-lowerable minimums.
|
|
5
|
+
*
|
|
6
|
+
* Every entry here exists because the tier-3 default would get it wrong. Adding a new
|
|
7
|
+
* mutating endpoint that travels as a GET means adding a row here — there is no way to
|
|
8
|
+
* detect that statically, so it is called out in the contribution checklist and the
|
|
9
|
+
* audit log is the backstop.
|
|
10
|
+
*/
|
|
11
|
+
const FLOOR = [
|
|
12
|
+
{
|
|
13
|
+
why: "background script execution",
|
|
14
|
+
verbs: ["execute"],
|
|
15
|
+
matches: (p) => pathIs("/sys.scripts.do")(p),
|
|
16
|
+
},
|
|
17
|
+
// NOTE: /xmlhttp.do is deliberately NOT a floor rule, even though the most
|
|
18
|
+
// destructive call in the library (Application.uninstall) goes through it. The same
|
|
19
|
+
// endpoint is used to READ — syslog tailing POSTs to it — and a floor rule cannot be
|
|
20
|
+
// lowered, so listing it here would refuse `nex log` with no way to correct it.
|
|
21
|
+
// Coverage instead comes from three narrower places: the sysparm_delete_all rule
|
|
22
|
+
// below catches the uninstall, the tier-3 default makes every other POST a write,
|
|
23
|
+
// and the two callers that read or execute through it declare so explicitly.
|
|
24
|
+
{
|
|
25
|
+
why: "store application install (issued as a GET)",
|
|
26
|
+
verbs: ["write"],
|
|
27
|
+
matches: (p) => pathHas("/api/sn_appclient/appmanager/app/install")(p),
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
why: "store application update (issued as a GET)",
|
|
31
|
+
verbs: ["write"],
|
|
32
|
+
matches: (p) => pathHas("/api/sn_appclient/appmanager/app/update")(p),
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
why: "sys_trigger scheduled job — persisting a job outlives the request that made it",
|
|
36
|
+
verbs: ["write"],
|
|
37
|
+
matches: (p) => pathHas("/api/now/table/sys_trigger")(p),
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
why: "sysparm_delete_all",
|
|
41
|
+
verbs: ["write"],
|
|
42
|
+
matches: (_p, q) => "sysparm_delete_all" in q,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
why: "sysparm_delete_when_done",
|
|
46
|
+
verbs: ["write"],
|
|
47
|
+
matches: (_p, q) => {
|
|
48
|
+
const value = q["sysparm_delete_when_done"];
|
|
49
|
+
if (value === undefined) {
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
// Only primitives are meaningful here; an object would stringify to
|
|
53
|
+
// "[object Object]" and match, which would be a false positive.
|
|
54
|
+
const text = typeof value === "string" || typeof value === "number" || typeof value === "boolean"
|
|
55
|
+
? String(value)
|
|
56
|
+
: "";
|
|
57
|
+
return text.toLowerCase() !== "false" && text.length > 0;
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
function normalizeQuery(request) {
|
|
62
|
+
const out = {};
|
|
63
|
+
const query = request.query;
|
|
64
|
+
if (query && typeof query === "object") {
|
|
65
|
+
for (const [key, value] of Object.entries(query)) {
|
|
66
|
+
out[key] = value;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Some callers put parameters in `fields` (form-encoded) rather than the query
|
|
70
|
+
// string — Application.uninstall sends sysparm_delete_all that way.
|
|
71
|
+
const fields = request.fields;
|
|
72
|
+
if (fields && typeof fields === "object") {
|
|
73
|
+
for (const [key, value] of Object.entries(fields)) {
|
|
74
|
+
if (!(key in out)) {
|
|
75
|
+
out[key] = value;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return out;
|
|
80
|
+
}
|
|
81
|
+
/** Matched floor rules, for the audit log and for tests. */
|
|
82
|
+
export function floorFor(request) {
|
|
83
|
+
const path = typeof request.path === "string" ? request.path : "";
|
|
84
|
+
const query = normalizeQuery(request);
|
|
85
|
+
const verbs = new Set();
|
|
86
|
+
const reasons = [];
|
|
87
|
+
for (const rule of FLOOR) {
|
|
88
|
+
if (rule.matches(path, query)) {
|
|
89
|
+
rule.verbs.forEach((v) => verbs.add(v));
|
|
90
|
+
reasons.push(rule.why);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return { verbs: [...verbs], reasons };
|
|
94
|
+
}
|
|
95
|
+
/** Tier 3. GET is assumed to read; anything else is assumed to write. */
|
|
96
|
+
function verbDefault(method) {
|
|
97
|
+
const verb = (method ?? "get").toLowerCase();
|
|
98
|
+
return verb === "get" ? [] : ["write"];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* The joined requirement for a request.
|
|
102
|
+
*
|
|
103
|
+
* DECLARED replaces the default when present, but the floor is unioned in afterwards so
|
|
104
|
+
* a declaration can correct a wrong default without ever lowering a floor entry.
|
|
105
|
+
*/
|
|
106
|
+
export function classify(request) {
|
|
107
|
+
const declared = request.requires;
|
|
108
|
+
const base = declared ? declared.verbs : verbDefault(request.method);
|
|
109
|
+
const target = declared?.target ?? "instance";
|
|
110
|
+
const { verbs: floorVerbs, reasons } = floorFor(request);
|
|
111
|
+
const verbs = new Set(base);
|
|
112
|
+
floorVerbs.forEach((v) => verbs.add(v));
|
|
113
|
+
return {
|
|
114
|
+
verbs: [...verbs],
|
|
115
|
+
// A floor match is always about the instance, whatever the caller declared —
|
|
116
|
+
// otherwise declaring `target: "local"` would be a way to opt out of the floor.
|
|
117
|
+
target: floorVerbs.length > 0 ? "instance" : target,
|
|
118
|
+
reasons,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=Classify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Classify.js","sourceRoot":"","sources":["../../../src/policy/internal/Classify.ts"],"names":[],"mappings":"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"}
|
package/dist/sn/Application.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { parseXml, getScopeMetadataFromInstance, getNowTableRequest, monitorUninstallWorkerCompletion, getAppAndSummary } from "@servicenow/sdk-cli-core/dist/util/index.js";
|
|
2
|
-
import { makeRequest, parseResponseBody } from "@servicenow/sdk-cli-core/dist/http/index.js";
|
|
3
2
|
import { ServiceNowRequest } from "../comm/http/ServiceNowRequest.js";
|
|
4
3
|
import { Logger } from "../util/Logger.js";
|
|
5
4
|
export class Application {
|
|
@@ -125,16 +124,27 @@ export class Application {
|
|
|
125
124
|
sysparm_delete_all: 'true',
|
|
126
125
|
sysparm_ck: auth.userToken ?? '',
|
|
127
126
|
};
|
|
128
|
-
|
|
129
|
-
|
|
127
|
+
// Routed through snRequest, not makeRequest directly.
|
|
128
|
+
//
|
|
129
|
+
// This is the most destructive call in the library — sysparm_delete_all on an
|
|
130
|
+
// application — and calling makeRequest here put it OUTSIDE the one point every
|
|
131
|
+
// other request passes through, so the permission gate could not see it. The
|
|
132
|
+
// gate would have been true of everything except the thing that matters most.
|
|
133
|
+
//
|
|
134
|
+
// Not an architectural requirement: changeApplication and convertToStoreApp in
|
|
135
|
+
// this same class already go through snRequest. Line was simply left behind.
|
|
136
|
+
const request = {
|
|
130
137
|
method: 'POST',
|
|
131
138
|
path: '/xmlhttp.do',
|
|
139
|
+
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
140
|
+
query: null,
|
|
141
|
+
body: null,
|
|
132
142
|
fields: params,
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
143
|
+
};
|
|
144
|
+
const response = await this.snRequest.post(request);
|
|
145
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
146
|
+
const xml = await (parseXml)(response.data);
|
|
147
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access
|
|
138
148
|
return xml['xml']['@_answer'];
|
|
139
149
|
}
|
|
140
150
|
async verifyAppUninstall(scopeId, auth, uninstallStoreApp) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Application.js","sourceRoot":"","sources":["../../src/sn/Application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,gCAAgC,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"Application.js","sourceRoot":"","sources":["../../src/sn/Application.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,18 @@ export declare class BackgroundScriptExecutor {
|
|
|
9
9
|
private _scopeCache;
|
|
10
10
|
_logger: Logger;
|
|
11
11
|
constructor(instance: ServiceNowInstance, scope: string);
|
|
12
|
+
/**
|
|
13
|
+
* Refuses a script the policy does not permit, before it is sent anywhere.
|
|
14
|
+
*
|
|
15
|
+
* Running caller-supplied code always needs `execute`; the scan decides whether it
|
|
16
|
+
* also needs `write`. The scan is unsound by design and leans toward `write` on
|
|
17
|
+
* anything it cannot resolve — see ScanScript for what it cannot see at all.
|
|
18
|
+
*
|
|
19
|
+
* Pass the script that will ACTUALLY be sent. Callers doing `{param}` substitution
|
|
20
|
+
* must substitute first, or a parameter value of `gr.insert()` walks straight past.
|
|
21
|
+
*/
|
|
22
|
+
private assertScriptPermitted;
|
|
23
|
+
/** @returns what this script needs, for the HTTP layer to agree with. */
|
|
12
24
|
executeScript(script: string, scope?: string, instance?: ServiceNowInstance): Promise<BackgroundScriptExecutionResult>;
|
|
13
25
|
parseScriptResult(responseXML: string): BackgroundScriptExecutionResult;
|
|
14
26
|
getBackgroundScriptCSRFToken(): Promise<string>;
|
|
@@ -8,6 +8,9 @@ import { ServiceNowInstance } from "./ServiceNowInstance.js";
|
|
|
8
8
|
import { XMLParser } from 'fast-xml-parser';
|
|
9
9
|
import { Logger } from "../util/Logger.js";
|
|
10
10
|
import { BG_SCRIPT_ENDPOINT } from "../constants/ServiceNow.js";
|
|
11
|
+
import { checkRequirement } from "../policy/Policy.js";
|
|
12
|
+
import { isPolicyRefusal, policyRefusal } from "../policy/PolicyRefusal.js";
|
|
13
|
+
import { requirementForScript } from "../policy/ScanScript.js";
|
|
11
14
|
import { isNil } from "../util/utils.js";
|
|
12
15
|
import { CSRFTokenHelper } from "../util/CSRFTokenHelper.js";
|
|
13
16
|
import { TableAPIRequest } from "../comm/http/TableAPIRequest.js";
|
|
@@ -25,6 +28,33 @@ export class BackgroundScriptExecutor {
|
|
|
25
28
|
this.snRequest = SessionManager.getInstance().getRequest(this.instance);
|
|
26
29
|
this._tableAPI = new TableAPIRequest(this.instance);
|
|
27
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Refuses a script the policy does not permit, before it is sent anywhere.
|
|
33
|
+
*
|
|
34
|
+
* Running caller-supplied code always needs `execute`; the scan decides whether it
|
|
35
|
+
* also needs `write`. The scan is unsound by design and leans toward `write` on
|
|
36
|
+
* anything it cannot resolve — see ScanScript for what it cannot see at all.
|
|
37
|
+
*
|
|
38
|
+
* Pass the script that will ACTUALLY be sent. Callers doing `{param}` substitution
|
|
39
|
+
* must substitute first, or a parameter value of `gr.insert()` walks straight past.
|
|
40
|
+
*/
|
|
41
|
+
assertScriptPermitted(script) {
|
|
42
|
+
const { verbs, reasons } = requirementForScript(script);
|
|
43
|
+
const decision = checkRequirement({ verbs, target: "instance" });
|
|
44
|
+
if (decision.allowed) {
|
|
45
|
+
return { verbs, target: "instance" };
|
|
46
|
+
}
|
|
47
|
+
this._logger.warn("Refused a background script", {
|
|
48
|
+
verbs: decision.verbs,
|
|
49
|
+
decidingLayer: decision.decidingLayer,
|
|
50
|
+
detected: reasons,
|
|
51
|
+
});
|
|
52
|
+
const detail = reasons.length > 0
|
|
53
|
+
? `${decision.remediation ?? "Not permitted."} The script ${reasons.join("; ")}.`
|
|
54
|
+
: decision.remediation;
|
|
55
|
+
throw policyRefusal({ ...decision, remediation: detail });
|
|
56
|
+
}
|
|
57
|
+
/** @returns what this script needs, for the HTTP layer to agree with. */
|
|
28
58
|
async executeScript(script, scope = this.scope, instance = this.instance) {
|
|
29
59
|
if (!instance || !(instance instanceof ServiceNowInstance)) {
|
|
30
60
|
throw new Error("instance must be a ServiceNowInstance");
|
|
@@ -35,6 +65,7 @@ export class BackgroundScriptExecutor {
|
|
|
35
65
|
if (!script || typeof script != "string") {
|
|
36
66
|
throw new Error("script must be a string");
|
|
37
67
|
}
|
|
68
|
+
const scriptRequirement = this.assertScriptPermitted(script);
|
|
38
69
|
try {
|
|
39
70
|
const gck = await this.getBackgroundScriptCSRFToken();
|
|
40
71
|
if (isNil(gck)) {
|
|
@@ -57,7 +88,11 @@ export class BackgroundScriptExecutor {
|
|
|
57
88
|
path: BG_SCRIPT_ENDPOINT,
|
|
58
89
|
headers: { "Content-Type": "application/x-www-form-urlencoded" },
|
|
59
90
|
query: null,
|
|
60
|
-
body: params
|
|
91
|
+
body: params,
|
|
92
|
+
// Declared so the HTTP gate reaches the SAME conclusion the script scan
|
|
93
|
+
// did. Without it the POST default adds `write` on top of the floor's
|
|
94
|
+
// `execute`, and a read-only diagnostic script needs write for no reason.
|
|
95
|
+
requires: scriptRequirement
|
|
61
96
|
};
|
|
62
97
|
this._logger.debug("Execute Background Script Request.", { request: request, formData: fd });
|
|
63
98
|
const response = await this.snRequest.post(request);
|
|
@@ -148,6 +183,21 @@ export class BackgroundScriptExecutor {
|
|
|
148
183
|
if (!script || typeof script !== 'string') {
|
|
149
184
|
throw new Error("script must be a non-empty string");
|
|
150
185
|
}
|
|
186
|
+
// Gated independently of executeScript. This method is public, so it is
|
|
187
|
+
// directly reachable — and persisting a sys_trigger is a LARGER privilege than
|
|
188
|
+
// running the script inline, because the job outlives the request that made it.
|
|
189
|
+
this.assertScriptPermitted(script);
|
|
190
|
+
// And `write` unconditionally, whatever the scan concluded about the script
|
|
191
|
+
// body: creating the sys_trigger record IS a write, independent of what the
|
|
192
|
+
// scheduled script goes on to do.
|
|
193
|
+
const triggerDecision = checkRequirement({ verbs: ["write"], target: "instance" });
|
|
194
|
+
if (!triggerDecision.allowed) {
|
|
195
|
+
throw policyRefusal({
|
|
196
|
+
...triggerDecision,
|
|
197
|
+
remediation: `${triggerDecision.remediation ?? "Not permitted."} ` +
|
|
198
|
+
`Scheduling a script creates a sys_trigger record, which is a write.`,
|
|
199
|
+
});
|
|
200
|
+
}
|
|
151
201
|
const triggerName = description || `ExtCore_Trigger_${Date.now()}`;
|
|
152
202
|
// Calculate next_action as 1 second from now
|
|
153
203
|
const now = new Date();
|
|
@@ -203,12 +253,21 @@ export class BackgroundScriptExecutor {
|
|
|
203
253
|
* @returns Either a BackgroundScriptExecutionResult or TriggerExecutionResult
|
|
204
254
|
*/
|
|
205
255
|
async executeScriptAuto(script, scope) {
|
|
256
|
+
// BEFORE the try, deliberately. The catch below falls back to sys_trigger on
|
|
257
|
+
// any failure, so a refusal raised inside executeScript would be swallowed and
|
|
258
|
+
// the refused script would run anyway — later, on a schedule, silently.
|
|
259
|
+
this.assertScriptPermitted(script);
|
|
206
260
|
try {
|
|
207
261
|
this._logger.info("Attempting script execution via background script page...");
|
|
208
262
|
const result = await this.executeScript(script, scope || this.scope);
|
|
209
263
|
return result;
|
|
210
264
|
}
|
|
211
265
|
catch (error) {
|
|
266
|
+
// Second layer: even if the check above is ever refactored away, a refusal
|
|
267
|
+
// must never be treated as "the page failed, try the other route".
|
|
268
|
+
if (isPolicyRefusal(error)) {
|
|
269
|
+
throw error;
|
|
270
|
+
}
|
|
212
271
|
const err = error;
|
|
213
272
|
this._logger.warn(`Background script execution failed: ${err.message}. Falling back to sys_trigger.`);
|
|
214
273
|
const triggerResult = await this.executeScriptViaTrigger(script);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackgroundScriptExecutor.js","sourceRoot":"","sources":["../../src/sn/BackgroundScriptExecutor.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,4DAA4D;AAC5D,6DAA6D;AAC7D,uDAAuD;AACvD,wDAAwD;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAG1D,uCAAuC;AACvC,OAAO,EAAc,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,MAAM,OAAO,wBAAwB;IACjC,SAAS,CAAoB;IAC7B,QAAQ,CAAqB;IAC7B,KAAK,CAAS;IACN,SAAS,CAAkB;IAC3B,WAAW,GAAwB,IAAI,GAAG,EAAE,CAAC;IAErD,OAAO,GAAU,IAAI,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAExD,YAAoB,QAA2B,EAAE,KAAY;QAErD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,QAAgB,IAAI,CAAC,KAAK,EAAE,WAA8B,IAAI,CAAC,QAAQ;QAC9G,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,YAAY,kBAAkB,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,IAAI,QAAQ,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,IAAI,QAAQ,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC/C,CAAC;QAGD,IAAI,CAAC;YAEF,MAAM,GAAG,GAAW,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;YAC9D,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACX,4DAA4D;oBAC5D,+DAA+D;oBAC/D,0DAA0D,CAC7D,CAAC;YACN,CAAC;YACD,2EAA2E;YAC3E,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAE/D,MAAM,EAAE,GAAY,IAAI,QAAQ,EAAE,CAAC;YACnC,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC5B,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;YAC7B,EAAE,CAAC,MAAM,CAAC,WAAW,EAAG,YAAY,CAAC,CAAC;YACtC,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YACxC,EAAE,CAAC,MAAM,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;YACxC,EAAE,CAAC,MAAM,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAI7C,iEAAiE;YACjE,MAAM,MAAM,GAAmB,IAAI,eAAe,CAAC,EAAS,CAAE,CAAC;YAC/D,MAAM,OAAO,GAAgB;gBACzB,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,EAAC,cAAc,EAAC,mCAAmC,EAAC;gBAC7D,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,MAAM;aACf,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,EAAC,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAC,EAAE,EAAC,CAAC,CAAA;YACxF,MAAM,QAAQ,GAA0B,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAS,OAAO,CAAC,CAAC;YACnF,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAU,QAAQ,EAAE,IAAI,CAAC;gBACtC,IAAG,OAAO,EAAC,CAAC;oBACR,MAAM,SAAS,GAAmC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;oBAClF,OAAO,SAAS,CAAC;gBACrB,CAAC;qBAAI,CAAC;oBACF,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBAC3C,CAAC;YAEL,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAC/E,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,GAAS,KAAc,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,CAAC;IACL,CAAC;IAEM,iBAAiB,CAAC,WAAmB;QACxC,MAAM,OAAO,GAAe;YACxB,gBAAgB,EAAE,KAAK;YACvB,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;YACtG,SAAS,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC;YACrD,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,IAAI;YAClB,iBAAiB,EAAE,CAAC,OAAe,EAAE,QAAa,EAAE,EAAE;gBAClD,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;oBACzC,OAAO,QAAQ,GAAG,IAAI,CAAC;gBAC3B,CAAC;gBACD,OAAO,QAAQ,CAAC;YACpB,CAAC;SACJ,CAAC;QACF,MAAM,MAAM,GAAc,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,mBAAmB,GAAU,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QAC3E,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;QACjE,MAAM,IAAI,GAA4B,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAA6B,CAAC;QAEpG,MAAM,eAAe,GAAmC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACxF,MAAM,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAEzD,MAAM,YAAY,GAAmC;YACjD,GAAG,EAAE,WAAW;YAChB,MAAM,EAAE,eAAe,CAAC,SAAS;YACjC,aAAa,EAAE,eAAe,CAAC,aAAa;YAC5C,SAAS,EAAE,eAAe,CAAC,SAAS;YACpC,aAAa,EAAE,eAAe,CAAC,aAAa;YAC5C,mEAAmE;YACnE,eAAe,EAAE,eAAe;SACnC,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,YAAY,CAAC,CAAC;QAEpE,OAAO,YAAY,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,4BAA4B;QACrC,IAAI,SAAS,GAAU,IAAI,CAAC;QAE5B,MAAM,OAAO,GAAgB;YACzB,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,IAAI;SACb,CAAC;QACF,MAAM,QAAQ,GAA0B,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAS,OAAO,CAAC,CAAC;QAClF,MAAM,UAAU,GAAW,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;QACvF,IAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,UAAU,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,CAAC;YAC9D,SAAS,GAAG,eAAe,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC5D,wEAAwE;YACxE,6EAA6E;YAC7E,0EAA0E;YAC1E,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAC,CAAC,CAAC;QAC9E,CAAC;aAAI,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,2GAA2G,EAAE,EAAC,QAAQ,EAAC,QAAQ,EAAC,CAAC,CAAC;QACzJ,CAAC;QAGD,OAAO,SAAS,CAAC;IACnB,CAAC;IAEH;;;;;;;;;OASG;IACI,KAAK,CAAC,uBAAuB,CAAC,MAAc,EAAE,WAAoB,EAAE,aAAsB,IAAI;QACjG,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,WAAW,GAAG,WAAW,IAAI,mBAAmB,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAEnE,6CAA6C;QAC7C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAEtD,IAAI,WAAW,GAAG,MAAM,CAAC;QAEzB,gFAAgF;QAChF,IAAI,UAAU,EAAE,CAAC;YACb,WAAW;gBACP,iBAAiB;oBACjB,aAAa;oBACb,WAAW,MAAM,IAAI;oBACrB,mBAAmB;oBACnB,oDAAoD;oBACpD,gCAAgC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO;oBACvE,uBAAuB;oBACvB,4BAA4B;oBAC5B,kCAAkC;oBAClC,aAAa;oBACb,SAAS;oBACT,OAAO,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,WAAW,uBAAuB,UAAU,EAAE,CAAC,CAAC;QAE3F,MAAM,IAAI,GAAG;YACT,IAAI,EAAE,WAAW;YACjB,YAAY,EAAE,GAAG;YACjB,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,UAAU;SAC1B,CAAC;QAEF,MAAM,QAAQ,GAAyC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAC5E,aAAa,EACb,EAAE,EACF,IAAI,CACP,CAAC;QAEF,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YAClG,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iDAAiD,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAEpF,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,MAAM,CAAC,MAAM;gBAC3B,WAAW,EAAE,WAAW;gBACxB,UAAU,EAAE,UAAU;gBACtB,UAAU,EAAE,UAAU;gBACtB,OAAO,EAAE,YAAY,WAAW,kDAAkD,UAAU,GAAG;aAClG,CAAC;QACN,CAAC;QAED,MAAM,IAAI,KAAK,CACX,iCAAiC,WAAW,cAAc,QAAQ,EAAE,MAAM,IAAI,SAAS,EAAE,CAC5F,CAAC;IACN,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,iBAAiB,CAAC,MAAc,EAAE,KAAc;QACzD,IAAI,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;YAC/E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;YACrE,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,GAAG,GAAU,KAAc,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,uCAAuC,GAAG,CAAC,OAAO,gCAAgC,CAAC,CAAC;YACtG,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;YACjE,OAAO,aAAa,CAAC;QACzB,CAAC;IACL,CAAC;IAED;;OAEG;IACK,wBAAwB,CAAC,IAAU;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3D,OAAO,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;IACpE,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,oBAAoB,CAAC,KAAa;QAC5C,MAAM,UAAU,GAAG,mBAAmB,CAAC;QACvC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,yBAAyB,KAAK,gBAAgB,CAAC,CAAC;QAClE,MAAM,KAAK,GAAoC;YAC3C,aAAa,EAAE,SAAS,KAAK,EAAE;YAC/B,aAAa,EAAE,CAAC;YAChB,cAAc,EAAE,mBAAmB;SACtC,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAmB,WAAW,EAAE,KAAK,CAAC,CAAC;QAEhF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;YACzD,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;YAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAChC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,KAAK,eAAe,KAAK,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;gBACxF,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBACnC,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QAED,MAAM,IAAI,KAAK,CACX,UAAU,KAAK,kCAAkC;YACjD,qFAAqF,CACxF,CAAC;IACN,CAAC;IAED;;;;OAIG;IACK,gBAAgB,CAAC,IAAY;QACjC,MAAM,YAAY,GAAG;YACjB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO;YAC1D,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK;SACpD,CAAC;QACF,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrC,CAAC;IAEO,oBAAoB,CAAC,YAAsC;QAC/D,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC;QAE/D,MAAM,aAAa,GAA+B,EAAE,CAAC;QAErD,oFAAoF;QACpF,wGAAwG;QACxG,sFAAsF;QACtF,MAAM,GAAG,GAAG,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC;QAC1C,MAAM,MAAM,GAAsB,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAuB,CAAC;QAEzG,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAoC,CAAC;QACrG,CAAC;QAED,MAAM,GAAG,GAAY,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,KAAY,EAAE,EAAE;YACvC,IAAG,KAAK,CAAC,IAAI,CAAC;gBACV,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;iBAClB,CAAC;gBACD,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnB,kFAAkF;gBAClF,IAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC;oBAEnC,aAAa,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;oBAC3E,gHAAgH;gBAChH,CAAC;qBAAK,IAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC;oBAC1C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;oBACxC,IAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC;wBAC/B,aAAa,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC1E,CAAC;yBAAI,CAAC;wBACF,aAAa,CAAC,IAAI,CAAC,IAAI,yBAAyB,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;oBAC3E,CAAC;gBACL,CAAC;gBACD,oFAAoF;gBACpF,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YACtB,CAAC;QAEL,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAEtD,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAC,aAAa,EAAmC,CAAC;IAC1H,CAAC;IACO,qBAAqB,CAAC,YAAsC;QAChE,OAAO,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAA;IACxC,CAAC;CACJ;AA4BD,MAAM,OAAO,yBAAyB;IAC1B,KAAK,CAAQ;IACb,QAAQ,GAAW,KAAK,CAAC;IACzB,SAAS,GAAW,KAAK,CAAC;IAC1B,SAAS,GAAW,KAAK,CAAC;IAElC,YAAmB,IAAW;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAW,IAAI,CAAC,GAAU;QACtB,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;IACrB,CAAC;IAEM,WAAW,CAAC,cAAsB,IAAI;QACzC,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;QAE5B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,YAAY,CAAC,eAAuB,IAAI;QAC3C,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;QAE9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,YAAY,CAAC,eAAuB,IAAI;QAC3C,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC;QAE9B,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"BackgroundScriptExecutor.js","sourceRoot":"","sources":["../../src/sn/BackgroundScriptExecutor.ts"],"names":[],"mappings":"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"}
|