@clawdstrike/openclaw 0.1.3 → 0.2.2
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 +11 -0
- package/dist/audit/adapter-logger.d.ts +3 -3
- package/dist/audit/adapter-logger.d.ts.map +1 -1
- package/dist/audit/adapter-logger.js +3 -3
- package/dist/audit/adapter-logger.js.map +1 -1
- package/dist/audit/store.d.ts +2 -2
- package/dist/audit/store.d.ts.map +1 -1
- package/dist/audit/store.js +13 -13
- package/dist/audit/store.js.map +1 -1
- package/dist/classification.d.ts +2 -2
- package/dist/classification.d.ts.map +1 -1
- package/dist/classification.js +96 -28
- package/dist/classification.js.map +1 -1
- package/dist/cli/bin.js +1 -1
- package/dist/cli/commands/audit.d.ts.map +1 -1
- package/dist/cli/commands/audit.js +29 -29
- package/dist/cli/commands/audit.js.map +1 -1
- package/dist/cli/commands/policy.d.ts.map +1 -1
- package/dist/cli/commands/policy.js +33 -33
- package/dist/cli/commands/policy.js.map +1 -1
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +45 -56
- package/dist/cli/index.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -9
- package/dist/config.js.map +1 -1
- package/dist/e2e/openclaw-e2e.js +58 -49
- package/dist/e2e/openclaw-e2e.js.map +1 -1
- package/dist/engine-holder.d.ts +2 -2
- package/dist/engine-holder.js +1 -1
- package/dist/guards/egress.d.ts +2 -2
- package/dist/guards/egress.d.ts.map +1 -1
- package/dist/guards/egress.js +71 -73
- package/dist/guards/egress.js.map +1 -1
- package/dist/guards/forbidden-path.d.ts +2 -2
- package/dist/guards/forbidden-path.d.ts.map +1 -1
- package/dist/guards/forbidden-path.js +41 -43
- package/dist/guards/forbidden-path.js.map +1 -1
- package/dist/guards/index.d.ts +6 -6
- package/dist/guards/index.d.ts.map +1 -1
- package/dist/guards/index.js +5 -5
- package/dist/guards/index.js.map +1 -1
- package/dist/guards/patch-integrity.d.ts +2 -2
- package/dist/guards/patch-integrity.d.ts.map +1 -1
- package/dist/guards/patch-integrity.js +69 -70
- package/dist/guards/patch-integrity.js.map +1 -1
- package/dist/guards/secret-leak.d.ts +2 -2
- package/dist/guards/secret-leak.d.ts.map +1 -1
- package/dist/guards/secret-leak.js +81 -82
- package/dist/guards/secret-leak.js.map +1 -1
- package/dist/guards/types.d.ts +2 -2
- package/dist/guards/types.d.ts.map +1 -1
- package/dist/guards/types.js +4 -4
- package/dist/guards/types.js.map +1 -1
- package/dist/hooks/agent-bootstrap/handler.d.ts +1 -1
- package/dist/hooks/agent-bootstrap/handler.d.ts.map +1 -1
- package/dist/hooks/agent-bootstrap/handler.js +5 -5
- package/dist/hooks/agent-bootstrap/handler.js.map +1 -1
- package/dist/hooks/approval-state.d.ts +1 -1
- package/dist/hooks/approval-state.d.ts.map +1 -1
- package/dist/hooks/approval-state.js +15 -15
- package/dist/hooks/approval-state.js.map +1 -1
- package/dist/hooks/approval-utils.d.ts +1 -1
- package/dist/hooks/approval-utils.d.ts.map +1 -1
- package/dist/hooks/approval-utils.js +41 -20
- package/dist/hooks/approval-utils.js.map +1 -1
- package/dist/hooks/audit-logger/handler.d.ts +1 -1
- package/dist/hooks/audit-logger/handler.d.ts.map +1 -1
- package/dist/hooks/audit-logger/handler.js +9 -9
- package/dist/hooks/audit-logger/handler.js.map +1 -1
- package/dist/hooks/cua-bridge/handler.d.ts +4 -4
- package/dist/hooks/cua-bridge/handler.d.ts.map +1 -1
- package/dist/hooks/cua-bridge/handler.js +85 -70
- package/dist/hooks/cua-bridge/handler.js.map +1 -1
- package/dist/hooks/tool-guard/handler.d.ts +1 -1
- package/dist/hooks/tool-guard/handler.d.ts.map +1 -1
- package/dist/hooks/tool-guard/handler.js +112 -101
- package/dist/hooks/tool-guard/handler.js.map +1 -1
- package/dist/hooks/tool-preflight/handler.d.ts +2 -2
- package/dist/hooks/tool-preflight/handler.d.ts.map +1 -1
- package/dist/hooks/tool-preflight/handler.js +115 -91
- package/dist/hooks/tool-preflight/handler.js.map +1 -1
- package/dist/index.d.ts +16 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -18
- package/dist/index.js.map +1 -1
- package/dist/openclaw-adapter.d.ts +2 -2
- package/dist/openclaw-adapter.d.ts.map +1 -1
- package/dist/openclaw-adapter.js +4 -4
- package/dist/openclaw-adapter.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +39 -40
- package/dist/plugin.js.map +1 -1
- package/dist/policy/engine.d.ts +1 -1
- package/dist/policy/engine.d.ts.map +1 -1
- package/dist/policy/engine.js +237 -221
- package/dist/policy/engine.js.map +1 -1
- package/dist/policy/index.d.ts +3 -3
- package/dist/policy/index.d.ts.map +1 -1
- package/dist/policy/index.js +3 -3
- package/dist/policy/index.js.map +1 -1
- package/dist/policy/loader.d.ts +1 -1
- package/dist/policy/loader.d.ts.map +1 -1
- package/dist/policy/loader.js +76 -63
- package/dist/policy/loader.js.map +1 -1
- package/dist/policy/validator.d.ts +1 -1
- package/dist/policy/validator.d.ts.map +1 -1
- package/dist/policy/validator.js +158 -151
- package/dist/policy/validator.js.map +1 -1
- package/dist/receipt/signer.d.ts +2 -2
- package/dist/receipt/signer.d.ts.map +1 -1
- package/dist/receipt/signer.js +12 -12
- package/dist/receipt/signer.js.map +1 -1
- package/dist/receipt/types.d.ts +2 -2
- package/dist/receipt/types.d.ts.map +1 -1
- package/dist/sanitizer/output-sanitizer.d.ts +1 -1
- package/dist/sanitizer/output-sanitizer.d.ts.map +1 -1
- package/dist/sanitizer/output-sanitizer.js +8 -8
- package/dist/sanitizer/output-sanitizer.js.map +1 -1
- package/dist/security-prompt.d.ts +1 -1
- package/dist/security-prompt.d.ts.map +1 -1
- package/dist/security-prompt.js +16 -12
- package/dist/security-prompt.js.map +1 -1
- package/dist/tools/policy-check.d.ts +3 -3
- package/dist/tools/policy-check.d.ts.map +1 -1
- package/dist/tools/policy-check.js +60 -52
- package/dist/tools/policy-check.js.map +1 -1
- package/dist/translator/openclaw-translator.d.ts +1 -1
- package/dist/translator/openclaw-translator.d.ts.map +1 -1
- package/dist/translator/openclaw-translator.js +100 -80
- package/dist/translator/openclaw-translator.js.map +1 -1
- package/dist/types.d.ts +11 -13
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -4
package/dist/engine-holder.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* so that a single PolicyEngine instance is created and reused across
|
|
6
6
|
* the entire plugin lifecycle.
|
|
7
7
|
*/
|
|
8
|
-
import { PolicyEngine } from
|
|
8
|
+
import { PolicyEngine } from "./policy/engine.js";
|
|
9
9
|
let sharedEngine = null;
|
|
10
10
|
/**
|
|
11
11
|
* Create (or replace) the shared PolicyEngine with the given config.
|
package/dist/guards/egress.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Enforces network egress allowlist/denylist policies.
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
7
|
-
import { BaseGuard } from
|
|
6
|
+
import type { EventType, GuardResult, Policy, PolicyEvent } from "../types.js";
|
|
7
|
+
import { BaseGuard } from "./types.js";
|
|
8
8
|
/**
|
|
9
9
|
* EgressGuard - enforces network egress policy
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"egress.d.ts","sourceRoot":"","sources":["../../src/guards/egress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"egress.d.ts","sourceRoot":"","sources":["../../src/guards/egress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAoDvC;;GAEG;AACH,qBAAa,WAAY,SAAQ,SAAS;IACxC,IAAI,IAAI,MAAM;IAId,OAAO,IAAI,SAAS,EAAE;IAIhB,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIrE,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;IA2C1D;;OAEG;IACH,OAAO,CAAC,aAAa;IAmCrB;;OAEG;IACH,OAAO,CAAC,WAAW;CA4BpB"}
|
package/dist/guards/egress.js
CHANGED
|
@@ -3,65 +3,65 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Enforces network egress allowlist/denylist policies.
|
|
5
5
|
*/
|
|
6
|
-
import { minimatch } from
|
|
7
|
-
import { BaseGuard } from
|
|
6
|
+
import { minimatch } from "minimatch";
|
|
7
|
+
import { BaseGuard } from "./types.js";
|
|
8
8
|
/**
|
|
9
9
|
* Default denied domains when no policy is specified
|
|
10
10
|
*/
|
|
11
11
|
const DEFAULT_DENIED_DOMAINS = [
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
12
|
+
"*.onion",
|
|
13
|
+
"localhost",
|
|
14
|
+
"127.*",
|
|
15
|
+
"10.*",
|
|
16
|
+
"192.168.*",
|
|
17
|
+
"172.16.*",
|
|
18
|
+
"172.17.*",
|
|
19
|
+
"172.18.*",
|
|
20
|
+
"172.19.*",
|
|
21
|
+
"172.20.*",
|
|
22
|
+
"172.21.*",
|
|
23
|
+
"172.22.*",
|
|
24
|
+
"172.23.*",
|
|
25
|
+
"172.24.*",
|
|
26
|
+
"172.25.*",
|
|
27
|
+
"172.26.*",
|
|
28
|
+
"172.27.*",
|
|
29
|
+
"172.28.*",
|
|
30
|
+
"172.29.*",
|
|
31
|
+
"172.30.*",
|
|
32
|
+
"172.31.*",
|
|
33
|
+
"0.0.0.0",
|
|
34
|
+
"[::1]",
|
|
35
|
+
"[::0]",
|
|
36
|
+
"::1",
|
|
37
|
+
"::0",
|
|
38
|
+
"169.254.*",
|
|
39
|
+
"fe80:*",
|
|
40
|
+
"fc00:*",
|
|
41
|
+
"fd00:*",
|
|
42
|
+
"fd[0-9a-f][0-9a-f]:*",
|
|
43
43
|
];
|
|
44
44
|
/**
|
|
45
45
|
* Default allowed domains for AI agent operations
|
|
46
46
|
*/
|
|
47
47
|
const DEFAULT_ALLOWED_DOMAINS = [
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
"api.anthropic.com",
|
|
49
|
+
"api.openai.com",
|
|
50
|
+
"pypi.org",
|
|
51
|
+
"registry.npmjs.org",
|
|
52
|
+
"crates.io",
|
|
53
|
+
"*.github.com",
|
|
54
|
+
"*.githubusercontent.com",
|
|
55
55
|
];
|
|
56
56
|
/**
|
|
57
57
|
* EgressGuard - enforces network egress policy
|
|
58
58
|
*/
|
|
59
59
|
export class EgressGuard extends BaseGuard {
|
|
60
60
|
name() {
|
|
61
|
-
return
|
|
61
|
+
return "egress";
|
|
62
62
|
}
|
|
63
63
|
handles() {
|
|
64
|
-
return [
|
|
64
|
+
return ["network_egress"];
|
|
65
65
|
}
|
|
66
66
|
async check(event, policy) {
|
|
67
67
|
return this.checkSync(event, policy);
|
|
@@ -69,7 +69,7 @@ export class EgressGuard extends BaseGuard {
|
|
|
69
69
|
checkSync(event, policy) {
|
|
70
70
|
const data = event.data;
|
|
71
71
|
// Only handle network events
|
|
72
|
-
if (data.type !==
|
|
72
|
+
if (data.type !== "network") {
|
|
73
73
|
return this.allow();
|
|
74
74
|
}
|
|
75
75
|
const host = data.host.toLowerCase();
|
|
@@ -77,27 +77,27 @@ export class EgressGuard extends BaseGuard {
|
|
|
77
77
|
// Get configured lists or defaults
|
|
78
78
|
const deniedDomains = egressPolicy?.denied_domains ?? DEFAULT_DENIED_DOMAINS;
|
|
79
79
|
const allowedDomains = egressPolicy?.allowed_domains ?? DEFAULT_ALLOWED_DOMAINS;
|
|
80
|
-
const mode = egressPolicy?.mode ??
|
|
80
|
+
const mode = egressPolicy?.mode ?? "allowlist";
|
|
81
81
|
// Always check denied domains first (takes precedence)
|
|
82
82
|
if (this.matchesDomain(host, deniedDomains)) {
|
|
83
83
|
return this.deny(`Egress to denied domain: ${host}`, this.getSeverity(host));
|
|
84
84
|
}
|
|
85
85
|
// Handle different modes
|
|
86
86
|
switch (mode) {
|
|
87
|
-
case
|
|
88
|
-
return this.deny(`Egress denied (deny_all mode): ${host}`,
|
|
89
|
-
case
|
|
87
|
+
case "deny_all":
|
|
88
|
+
return this.deny(`Egress denied (deny_all mode): ${host}`, "high");
|
|
89
|
+
case "open":
|
|
90
90
|
return this.allow();
|
|
91
|
-
case
|
|
91
|
+
case "denylist":
|
|
92
92
|
// In denylist mode, only deny explicitly listed domains
|
|
93
93
|
return this.allow();
|
|
94
|
-
case
|
|
94
|
+
case "allowlist":
|
|
95
95
|
default:
|
|
96
96
|
// In allowlist mode, only allow explicitly listed domains
|
|
97
97
|
if (this.matchesDomain(host, allowedDomains)) {
|
|
98
98
|
return this.allow();
|
|
99
99
|
}
|
|
100
|
-
return this.deny(`Egress to non-allowlisted domain: ${host}`,
|
|
100
|
+
return this.deny(`Egress to non-allowlisted domain: ${host}`, "medium");
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
/**
|
|
@@ -111,17 +111,15 @@ export class EgressGuard extends BaseGuard {
|
|
|
111
111
|
return true;
|
|
112
112
|
}
|
|
113
113
|
// Wildcard subdomain match (*.example.com)
|
|
114
|
-
if (normalizedPattern.startsWith(
|
|
114
|
+
if (normalizedPattern.startsWith("*.")) {
|
|
115
115
|
const baseDomain = normalizedPattern.slice(2);
|
|
116
|
-
if (host === baseDomain || host.endsWith(
|
|
116
|
+
if (host === baseDomain || host.endsWith("." + baseDomain)) {
|
|
117
117
|
return true;
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
120
|
// IP range match (e.g., 192.168.*)
|
|
121
|
-
if (normalizedPattern.includes(
|
|
122
|
-
const regexPattern = normalizedPattern
|
|
123
|
-
.replace(/\./g, '\\.')
|
|
124
|
-
.replace(/\*/g, '.*');
|
|
121
|
+
if (normalizedPattern.includes("*")) {
|
|
122
|
+
const regexPattern = normalizedPattern.replace(/\./g, "\\.").replace(/\*/g, ".*");
|
|
125
123
|
const regex = new RegExp(`^${regexPattern}$`);
|
|
126
124
|
if (regex.test(host)) {
|
|
127
125
|
return true;
|
|
@@ -139,27 +137,27 @@ export class EgressGuard extends BaseGuard {
|
|
|
139
137
|
*/
|
|
140
138
|
getSeverity(host) {
|
|
141
139
|
// Tor/onion domains are critical
|
|
142
|
-
if (host.endsWith(
|
|
143
|
-
return
|
|
140
|
+
if (host.endsWith(".onion")) {
|
|
141
|
+
return "critical";
|
|
144
142
|
}
|
|
145
143
|
// Localhost/private IPs are high
|
|
146
|
-
if (host ===
|
|
147
|
-
host ===
|
|
148
|
-
host ===
|
|
149
|
-
host ===
|
|
150
|
-
host ===
|
|
151
|
-
host ===
|
|
152
|
-
host.startsWith(
|
|
153
|
-
host.startsWith(
|
|
154
|
-
host.startsWith(
|
|
155
|
-
host.startsWith(
|
|
156
|
-
host.startsWith(
|
|
157
|
-
host.startsWith(
|
|
158
|
-
host.startsWith(
|
|
144
|
+
if (host === "localhost" ||
|
|
145
|
+
host === "0.0.0.0" ||
|
|
146
|
+
host === "[::1]" ||
|
|
147
|
+
host === "::1" ||
|
|
148
|
+
host === "[::0]" ||
|
|
149
|
+
host === "::0" ||
|
|
150
|
+
host.startsWith("127.") ||
|
|
151
|
+
host.startsWith("10.") ||
|
|
152
|
+
host.startsWith("192.168.") ||
|
|
153
|
+
host.startsWith("172.") ||
|
|
154
|
+
host.startsWith("169.254.") ||
|
|
155
|
+
host.startsWith("fe80:") ||
|
|
156
|
+
host.startsWith("fc00:") ||
|
|
159
157
|
/^fd[0-9a-f]{2}:/.test(host)) {
|
|
160
|
-
return
|
|
158
|
+
return "high";
|
|
161
159
|
}
|
|
162
|
-
return
|
|
160
|
+
return "medium";
|
|
163
161
|
}
|
|
164
162
|
}
|
|
165
163
|
//# sourceMappingURL=egress.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"egress.js","sourceRoot":"","sources":["../../src/guards/egress.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,sBAAsB,GAAG;IAC7B,SAAS;IACT,WAAW;IACX,OAAO;IACP,MAAM;IACN,WAAW;IACX,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,OAAO;IACP,OAAO;IACP,KAAK;IACL,KAAK;IACL,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,sBAAsB;CACvB,CAAC;AAEF;;GAEG;AACH,MAAM,uBAAuB,GAAG;IAC9B,mBAAmB;IACnB,gBAAgB;IAChB,UAAU;IACV,oBAAoB;IACpB,WAAW;IACX,cAAc;IACd,yBAAyB;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,SAAS;IACxC,IAAI;QACF,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO;QACL,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAkB,EAAE,MAAc;QAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,SAAS,CAAC,KAAkB,EAAE,MAAc;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAExB,6BAA6B;QAC7B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;QAEnC,mCAAmC;QACnC,MAAM,aAAa,GAAG,YAAY,EAAE,cAAc,IAAI,sBAAsB,CAAC;QAC7E,MAAM,cAAc,GAAG,YAAY,EAAE,eAAe,IAAI,uBAAuB,CAAC;QAChF,MAAM,IAAI,GAAG,YAAY,EAAE,IAAI,IAAI,WAAW,CAAC;QAE/C,uDAAuD;QACvD,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"egress.js","sourceRoot":"","sources":["../../src/guards/egress.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Blocks access to sensitive filesystem paths.
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
7
|
-
import { BaseGuard } from
|
|
6
|
+
import type { EventType, GuardResult, Policy, PolicyEvent } from "../types.js";
|
|
7
|
+
import { BaseGuard } from "./types.js";
|
|
8
8
|
/**
|
|
9
9
|
* ForbiddenPathGuard - blocks access to sensitive paths
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forbidden-path.d.ts","sourceRoot":"","sources":["../../src/guards/forbidden-path.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"forbidden-path.d.ts","sourceRoot":"","sources":["../../src/guards/forbidden-path.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA4BvC;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,SAAS;IAC/C,IAAI,IAAI,MAAM;IAId,OAAO,IAAI,SAAS,EAAE;IAIhB,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIrE,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;IA8B1D;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAqDzB"}
|
|
@@ -3,44 +3,44 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Blocks access to sensitive filesystem paths.
|
|
5
5
|
*/
|
|
6
|
-
import { minimatch } from
|
|
7
|
-
import { homedir } from
|
|
8
|
-
import {
|
|
9
|
-
import { BaseGuard } from
|
|
6
|
+
import { minimatch } from "minimatch";
|
|
7
|
+
import { homedir } from "os";
|
|
8
|
+
import { normalize, resolve } from "path";
|
|
9
|
+
import { BaseGuard } from "./types.js";
|
|
10
10
|
/**
|
|
11
11
|
* Default forbidden paths when no policy is specified
|
|
12
12
|
*/
|
|
13
13
|
const DEFAULT_FORBIDDEN_PATHS = [
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
14
|
+
"~/.ssh",
|
|
15
|
+
"~/.ssh/*",
|
|
16
|
+
"~/.aws",
|
|
17
|
+
"~/.aws/*",
|
|
18
|
+
"~/.gnupg",
|
|
19
|
+
"~/.gnupg/*",
|
|
20
|
+
"~/.config/gcloud",
|
|
21
|
+
"~/.config/gcloud/*",
|
|
22
|
+
"/etc/shadow",
|
|
23
|
+
"/etc/passwd",
|
|
24
|
+
".env",
|
|
25
|
+
"**/.env",
|
|
26
|
+
"**/.env.*",
|
|
27
|
+
"*.pem",
|
|
28
|
+
"**/*.pem",
|
|
29
|
+
"*.key",
|
|
30
|
+
"**/*.key",
|
|
31
|
+
"**/id_rsa",
|
|
32
|
+
"**/id_ed25519",
|
|
33
|
+
"**/id_ecdsa",
|
|
34
34
|
];
|
|
35
35
|
/**
|
|
36
36
|
* ForbiddenPathGuard - blocks access to sensitive paths
|
|
37
37
|
*/
|
|
38
38
|
export class ForbiddenPathGuard extends BaseGuard {
|
|
39
39
|
name() {
|
|
40
|
-
return
|
|
40
|
+
return "forbidden_path";
|
|
41
41
|
}
|
|
42
42
|
handles() {
|
|
43
|
-
return [
|
|
43
|
+
return ["file_read", "file_write"];
|
|
44
44
|
}
|
|
45
45
|
async check(event, policy) {
|
|
46
46
|
return this.checkSync(event, policy);
|
|
@@ -48,20 +48,20 @@ export class ForbiddenPathGuard extends BaseGuard {
|
|
|
48
48
|
checkSync(event, policy) {
|
|
49
49
|
const data = event.data;
|
|
50
50
|
// Only handle file events
|
|
51
|
-
if (data.type !==
|
|
51
|
+
if (data.type !== "file") {
|
|
52
52
|
return this.allow();
|
|
53
53
|
}
|
|
54
54
|
const path = data.path;
|
|
55
55
|
// Reject paths containing null bytes (path injection attack)
|
|
56
|
-
if (path.includes(
|
|
57
|
-
return this.deny(
|
|
56
|
+
if (path.includes("\0")) {
|
|
57
|
+
return this.deny("Path contains null byte: null_byte_injection", "critical");
|
|
58
58
|
}
|
|
59
59
|
const forbiddenPaths = policy.filesystem?.forbidden_paths ?? DEFAULT_FORBIDDEN_PATHS;
|
|
60
60
|
// Check against forbidden paths
|
|
61
61
|
const normalizedPath = normalizePath(path);
|
|
62
62
|
const matchedPattern = this.matchesForbidden(normalizedPath, forbiddenPaths);
|
|
63
63
|
if (matchedPattern) {
|
|
64
|
-
return this.deny(`Access to forbidden path: ${path} (matches pattern: ${matchedPattern})`,
|
|
64
|
+
return this.deny(`Access to forbidden path: ${path} (matches pattern: ${matchedPattern})`, "critical");
|
|
65
65
|
}
|
|
66
66
|
return this.allow();
|
|
67
67
|
}
|
|
@@ -73,17 +73,15 @@ export class ForbiddenPathGuard extends BaseGuard {
|
|
|
73
73
|
const home = homedir();
|
|
74
74
|
for (const pattern of patterns) {
|
|
75
75
|
// Expand ~ in pattern to actual home directory
|
|
76
|
-
const expandedPattern = pattern.startsWith(
|
|
77
|
-
? pattern.replace(/^~/, home)
|
|
78
|
-
: pattern;
|
|
76
|
+
const expandedPattern = pattern.startsWith("~") ? pattern.replace(/^~/, home) : pattern;
|
|
79
77
|
// Check exact match
|
|
80
78
|
if (path === expandedPattern) {
|
|
81
79
|
return pattern;
|
|
82
80
|
}
|
|
83
81
|
// Check if path is inside a forbidden directory
|
|
84
82
|
// e.g., ~/.ssh should match /Users/test/.ssh/id_rsa
|
|
85
|
-
if (!expandedPattern.includes(
|
|
86
|
-
if (path.startsWith(expandedPattern +
|
|
83
|
+
if (!expandedPattern.includes("*") && !expandedPattern.includes("?")) {
|
|
84
|
+
if (path.startsWith(expandedPattern + "/") || path === expandedPattern) {
|
|
87
85
|
return pattern;
|
|
88
86
|
}
|
|
89
87
|
}
|
|
@@ -92,23 +90,23 @@ export class ForbiddenPathGuard extends BaseGuard {
|
|
|
92
90
|
return pattern;
|
|
93
91
|
}
|
|
94
92
|
// Check basename match for patterns like ".env" or "*.pem"
|
|
95
|
-
const basename = path.split(
|
|
93
|
+
const basename = path.split("/").pop() ?? "";
|
|
96
94
|
// Only apply basename matching for patterns without slashes
|
|
97
|
-
if (!pattern.includes(
|
|
95
|
+
if (!pattern.includes("/")) {
|
|
98
96
|
if (minimatch(basename, pattern, { dot: true })) {
|
|
99
97
|
return pattern;
|
|
100
98
|
}
|
|
101
99
|
}
|
|
102
100
|
// For patterns starting with **/, match anywhere in path
|
|
103
|
-
if (pattern.startsWith(
|
|
101
|
+
if (pattern.startsWith("**/")) {
|
|
104
102
|
const patternSuffix = pattern.slice(3);
|
|
105
103
|
if (minimatch(basename, patternSuffix, { dot: true })) {
|
|
106
104
|
return pattern;
|
|
107
105
|
}
|
|
108
106
|
// Also try matching from any path component
|
|
109
|
-
const pathParts = path.split(
|
|
107
|
+
const pathParts = path.split("/");
|
|
110
108
|
for (let i = 0; i < pathParts.length; i++) {
|
|
111
|
-
const subPath = pathParts.slice(i).join(
|
|
109
|
+
const subPath = pathParts.slice(i).join("/");
|
|
112
110
|
if (minimatch(subPath, patternSuffix, { dot: true })) {
|
|
113
111
|
return pattern;
|
|
114
112
|
}
|
|
@@ -123,13 +121,13 @@ export class ForbiddenPathGuard extends BaseGuard {
|
|
|
123
121
|
*/
|
|
124
122
|
function normalizePath(path) {
|
|
125
123
|
// Strip null bytes to prevent path injection
|
|
126
|
-
path = path.replace(/\0/g,
|
|
124
|
+
path = path.replace(/\0/g, "");
|
|
127
125
|
// Expand ~
|
|
128
|
-
if (path.startsWith(
|
|
126
|
+
if (path.startsWith("~")) {
|
|
129
127
|
path = path.replace(/^~/, homedir());
|
|
130
128
|
}
|
|
131
129
|
// Resolve to absolute if not a glob pattern
|
|
132
|
-
if (!path.includes(
|
|
130
|
+
if (!path.includes("*") && !path.includes("?")) {
|
|
133
131
|
path = resolve(path);
|
|
134
132
|
}
|
|
135
133
|
// Normalize slashes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forbidden-path.js","sourceRoot":"","sources":["../../src/guards/forbidden-path.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"forbidden-path.js","sourceRoot":"","sources":["../../src/guards/forbidden-path.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,MAAM,uBAAuB,GAAG;IAC9B,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,UAAU;IACV,UAAU;IACV,YAAY;IACZ,kBAAkB;IAClB,oBAAoB;IACpB,aAAa;IACb,aAAa;IACb,MAAM;IACN,SAAS;IACT,WAAW;IACX,OAAO;IACP,UAAU;IACV,OAAO;IACP,UAAU;IACV,WAAW;IACX,eAAe;IACf,aAAa;CACd,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,kBAAmB,SAAQ,SAAS;IAC/C,IAAI;QACF,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,OAAO;QACL,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAkB,EAAE,MAAc;QAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,SAAS,CAAC,KAAkB,EAAE,MAAc;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAExB,0BAA0B;QAC1B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,6DAA6D;QAC7D,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,8CAA8C,EAAE,UAAU,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,EAAE,eAAe,IAAI,uBAAuB,CAAC;QAErF,gCAAgC;QAChC,MAAM,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;QAE7E,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC,IAAI,CACd,6BAA6B,IAAI,sBAAsB,cAAc,GAAG,EACxE,UAAU,CACX,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED;;;OAGG;IACK,gBAAgB,CAAC,IAAY,EAAE,QAAkB;QACvD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;QAEvB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,+CAA+C;YAC/C,MAAM,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAExF,oBAAoB;YACpB,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;gBAC7B,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,gDAAgD;YAChD,oDAAoD;YACpD,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrE,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,GAAG,GAAG,CAAC,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;oBACvE,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,0CAA0C;YAC1C,IAAI,SAAS,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACtE,OAAO,OAAO,CAAC;YACjB,CAAC;YAED,2DAA2D;YAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAC7C,4DAA4D;YAC5D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC3B,IAAI,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBAChD,OAAO,OAAO,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,yDAAyD;YACzD,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBACtD,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,4CAA4C;gBAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC7C,IAAI,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;wBACrD,OAAO,OAAO,CAAC;oBACjB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAAY;IACjC,6CAA6C;IAC7C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE/B,WAAW;IACX,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,4CAA4C;IAC5C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,oBAAoB;IACpB,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
|
package/dist/guards/index.d.ts
CHANGED
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Security guards for policy enforcement.
|
|
5
5
|
*/
|
|
6
|
-
export
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export {
|
|
6
|
+
export { EgressGuard } from "./egress.js";
|
|
7
|
+
export { ForbiddenPathGuard } from "./forbidden-path.js";
|
|
8
|
+
export { PatchIntegrityGuard } from "./patch-integrity.js";
|
|
9
|
+
export { SecretLeakGuard } from "./secret-leak.js";
|
|
10
|
+
export type { Guard } from "./types.js";
|
|
11
|
+
export { BaseGuard } from "./types.js";
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/guards/index.js
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Security guards for policy enforcement.
|
|
5
5
|
*/
|
|
6
|
-
export {
|
|
7
|
-
export { ForbiddenPathGuard } from
|
|
8
|
-
export {
|
|
9
|
-
export { SecretLeakGuard } from
|
|
10
|
-
export {
|
|
6
|
+
export { EgressGuard } from "./egress.js";
|
|
7
|
+
export { ForbiddenPathGuard } from "./forbidden-path.js";
|
|
8
|
+
export { PatchIntegrityGuard } from "./patch-integrity.js";
|
|
9
|
+
export { SecretLeakGuard } from "./secret-leak.js";
|
|
10
|
+
export { BaseGuard } from "./types.js";
|
|
11
11
|
//# sourceMappingURL=index.js.map
|
package/dist/guards/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guards/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Detects dangerous code patterns in patches and file writes.
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
7
|
-
import { BaseGuard } from
|
|
6
|
+
import type { DangerousPattern, EventType, GuardResult, Policy, PolicyEvent } from "../types.js";
|
|
7
|
+
import { BaseGuard } from "./types.js";
|
|
8
8
|
/**
|
|
9
9
|
* PatchIntegrityGuard - detects dangerous patterns in patches
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patch-integrity.d.ts","sourceRoot":"","sources":["../../src/guards/patch-integrity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"patch-integrity.d.ts","sourceRoot":"","sources":["../../src/guards/patch-integrity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA2IvC;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,SAAS;IAChD,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,kBAAkB,GAAE,gBAAgB,EAAO;IAKvD,IAAI,IAAI,MAAM;IAId,OAAO,IAAI,SAAS,EAAE;IAIhB,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIrE,SAAS,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW;IAyC1D;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAkB5D;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAa3B"}
|