siarashield_workspace 0.0.54 → 0.0.57
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 +20 -3
- package/esm2022/lib/siara-shield-csp.mjs +5 -4
- package/esm2022/lib/siara-shield-script-utils.mjs +3 -1
- package/esm2022/lib/siara-shield-vendor-event-migration.mjs +130 -0
- package/fesm2022/siarashield_workspace.mjs +134 -3
- package/fesm2022/siarashield_workspace.mjs.map +1 -1
- package/lib/siara-shield-csp.d.ts +2 -0
- package/lib/siara-shield-vendor-event-migration.d.ts +2 -0
- package/package.json +1 -1
- package/schematics/ng-add/index.js +215 -215
- package/siarashield_workspace-0.0.57.tgz +0 -0
package/README.md
CHANGED
|
@@ -46,7 +46,7 @@ Copy/paste:
|
|
|
46
46
|
default-src 'self';
|
|
47
47
|
script-src 'self' 'nonce-REPLACE_WITH_NONCE' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
48
48
|
script-src-elem 'self' 'nonce-REPLACE_WITH_NONCE' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
49
|
-
script-src-attr '
|
|
49
|
+
script-src-attr 'none';
|
|
50
50
|
connect-src 'self' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
51
51
|
style-src 'self' 'nonce-REPLACE_WITH_NONCE' https://embed.mycybersiara.com https://mycybersiara.com https://fonts.googleapis.com https://cdnjs.cloudflare.com;
|
|
52
52
|
style-src-elem 'self' 'nonce-REPLACE_WITH_NONCE' https://embed.mycybersiara.com https://mycybersiara.com https://fonts.googleapis.com https://cdnjs.cloudflare.com;
|
|
@@ -99,6 +99,7 @@ export const environment = {
|
|
|
99
99
|
```html
|
|
100
100
|
<siara-shield
|
|
101
101
|
[publicKey]="environment.siaraShieldPublicKey"
|
|
102
|
+
[cspNonce]="cspNonce"
|
|
102
103
|
(token)="onCaptchaToken($event)"
|
|
103
104
|
></siara-shield>
|
|
104
105
|
|
|
@@ -217,7 +218,18 @@ Get keys from [mycybersiara.com](https://mycybersiara.com).
|
|
|
217
218
|
|
|
218
219
|
If your app has no strict CSP, default integration works without extra setup.
|
|
219
220
|
|
|
220
|
-
For strict CSP, use a **server-generated nonce per request**.
|
|
221
|
+
For strict CSP, use a **server-generated nonce per request**. The same nonce must appear in your `Content-Security-Policy` header and in `meta[name="csp-nonce"]` (or an existing `script[nonce]`). Do not ship the literal placeholder `REPLACE_WITH_NONCE` to browsers.
|
|
222
|
+
|
|
223
|
+
### `script-src-attr 'none'` vs `style-src-attr`
|
|
224
|
+
|
|
225
|
+
| Directive | Recommended value | Why |
|
|
226
|
+
| --- | --- | --- |
|
|
227
|
+
| `script-src-attr` | `'none'` | With a configured nonce, the package migrates vendor `onclick` / `on*` attributes to `addEventListener`. |
|
|
228
|
+
| `style-src-attr` | `'self' 'unsafe-inline'` | Vendor/jQuery still sets `style=""` and `element.style` for show/hide and layout. A `style-src` nonce does not cover those. |
|
|
229
|
+
|
|
230
|
+
Do **not** set `style-src-attr 'none'` unless you have validated the full captcha flow under that policy. The current embed still relies on inline style attributes.
|
|
231
|
+
|
|
232
|
+
If you cannot use `script-src-attr 'none'` yet, pass `allowInlineEventAttributes: true` to `getSiaraShieldCspDirectives()` / `getSiaraShieldCspPolicy()` to generate `script-src-attr 'self' 'unsafe-inline'` instead.
|
|
221
233
|
|
|
222
234
|
### Recommended policy example
|
|
223
235
|
|
|
@@ -225,7 +237,7 @@ For strict CSP, use a **server-generated nonce per request**.
|
|
|
225
237
|
default-src 'self';
|
|
226
238
|
script-src 'self' 'nonce-<dynamic>' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
227
239
|
script-src-elem 'self' 'nonce-<dynamic>' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
228
|
-
script-src-attr '
|
|
240
|
+
script-src-attr 'none';
|
|
229
241
|
connect-src 'self' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;
|
|
230
242
|
style-src 'self' 'nonce-<dynamic>' https://embed.mycybersiara.com https://mycybersiara.com https://fonts.googleapis.com https://cdnjs.cloudflare.com;
|
|
231
243
|
style-src-elem 'self' 'nonce-<dynamic>' https://embed.mycybersiara.com https://mycybersiara.com https://fonts.googleapis.com https://cdnjs.cloudflare.com;
|
|
@@ -254,6 +266,11 @@ If your app already has jQuery, set `[loadJQuery]="false"` (or `loadJQuery: fals
|
|
|
254
266
|
- `CheckCaptcha` not available:
|
|
255
267
|
- Ensure initialization completed.
|
|
256
268
|
- Ensure CSP allows required hosts and nonce.
|
|
269
|
+
- CSP console errors on `script-src-attr`:
|
|
270
|
+
- Use a real per-request nonce (not `REPLACE_WITH_NONCE` / `__CSP_NONCE__`).
|
|
271
|
+
- Confirm `script-src-attr 'none'` (or allow inline event attributes only if you opted in via `allowInlineEventAttributes`).
|
|
272
|
+
- CSP console errors on `style-src-attr`:
|
|
273
|
+
- Keep `style-src-attr 'self' 'unsafe-inline'` unless you have verified the widget without it.
|
|
257
274
|
- Token not available immediately:
|
|
258
275
|
- Use async check methods (`checkCaptchaAsync` / `checkSiaraShieldCaptchaAsync`).
|
|
259
276
|
|
|
@@ -50,6 +50,7 @@ export function getSiaraShieldCspDirectives(options) {
|
|
|
50
50
|
// Default to strict/safe CSP. Customers can explicitly opt-in if they accept the risk.
|
|
51
51
|
const includeUnsafeInlineScript = options?.includeUnsafeInlineScript ?? false;
|
|
52
52
|
const includeUnsafeInlineStyle = options?.includeUnsafeInlineStyle ?? false;
|
|
53
|
+
const allowInlineEventAttributes = options?.allowInlineEventAttributes ?? false;
|
|
53
54
|
const nonce = nonceSource(options?.nonce);
|
|
54
55
|
const scriptHosts = includeGoogleApis ? [...SCRIPT_HOSTS, ...OPTIONAL_SCRIPT_HOSTS] : [...SCRIPT_HOSTS];
|
|
55
56
|
const styleSources = unique([SELF, nonce, ...STYLE_HOSTS]);
|
|
@@ -57,12 +58,12 @@ export function getSiaraShieldCspDirectives(options) {
|
|
|
57
58
|
'default-src': unique([SELF]),
|
|
58
59
|
/**
|
|
59
60
|
* CSP note:
|
|
60
|
-
* - Vendor HTML
|
|
61
|
-
* -
|
|
61
|
+
* - Vendor HTML can include inline event handlers (onclick, etc). CSP nonces do NOT cover those.
|
|
62
|
+
* - With a configured nonce, the package migrates those handlers to addEventListener so `script-src-attr 'none'` works.
|
|
62
63
|
*/
|
|
63
64
|
'script-src': unique([SELF, nonce, ...scriptHosts, includeUnsafeInlineScript ? UNSAFE_INLINE : undefined]),
|
|
64
65
|
'script-src-elem': unique([SELF, nonce, ...scriptHosts]),
|
|
65
|
-
'script-src-attr': unique([SELF, "'
|
|
66
|
+
'script-src-attr': unique(allowInlineEventAttributes ? [SELF, UNSAFE_INLINE] : ["'none'"]),
|
|
66
67
|
'connect-src': unique([SELF, ...CONNECT_HOSTS]),
|
|
67
68
|
'img-src': unique([SELF, DATA, ...IMG_HOSTS]),
|
|
68
69
|
/**
|
|
@@ -92,4 +93,4 @@ export function mergeSiaraShieldCspPolicy(existingPolicy, options) {
|
|
|
92
93
|
.map(([name, values]) => serializeDirective(name, values))
|
|
93
94
|
.join('; ');
|
|
94
95
|
}
|
|
95
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLWNzcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC1jc3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQ3RCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUNyQixNQUFNLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztBQUV4QyxNQUFNLFlBQVksR0FBRyxDQUFDLG1DQUFtQyxFQUFFLGdDQUFnQyxDQUFVLENBQUM7QUFDdEcsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLDZCQUE2QixDQUFVLENBQUM7QUFDdkUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBRSxtQ0FBbUMsQ0FBVSxDQUFDO0FBQ3ZHLE1BQU0sV0FBVyxHQUFHO0lBQ2xCLGdDQUFnQztJQUNoQywwQkFBMEI7SUFDMUIsOEJBQThCO0lBQzlCLDhCQUE4QjtDQUN0QixDQUFDO0FBQ1gsTUFBTSxVQUFVLEdBQUc7SUFDakIsMkJBQTJCO0lBQzNCLDBCQUEwQjtJQUMxQiw4QkFBOEI7Q0FDdEIsQ0FBQztBQUNYLE1BQU0sU0FBUyxHQUFHO0lBQ2hCLGdDQUFnQztJQUNoQyxtQ0FBbUM7SUFDbkMsMEJBQTBCO0NBQ2xCLENBQUM7QUFFWCxTQUFTLE1BQU0sQ0FBQyxNQUFpQztJQUMvQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLEdBQUcsQ0FBQyxD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LGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2lhcmFTaGllbGRDc3BPcHRpb25zIHtcbiAgLyoqIFNlcnZlci1nZW5lcmF0ZWQgbm9uY2UgdmFsdWUgd2l0aG91dCB0aGUgYCdub25jZS0nYCBwcmVmaXguICovXG4gIG5vbmNlPzogc3RyaW5nO1xuICAvKiogT3B0aW9uYWwgaWYgdGhlIGN1c3RvbWVyIHN0aWxsIGxvYWRzIGpRdWVyeSBmcm9tIEdvb2dsZSdzIENETi4gKi9cbiAgaW5jbHVkZUdvb2dsZUFwaXM/OiBib29sZWFuO1xuICAvKiogSW5jbHVkZSBgc2NyaXB0LXNyYyAndW5zYWZlLWlubGluZSdgIChub3QgcmVjb21tZW5kZWQgZm9yIHByb2R1Y3Rpb24pLiAqL1xuICBpbmNsdWRlVW5zYWZlSW5saW5lU2NyaXB0PzogYm9vbGVhbjtcbiAgLyoqIEluY2x1ZGUgYHN0eWxlLXNyYyAndW5zYWZlLWlubGluZSdgIChub3QgcmVjb21tZW5kZWQgZm9yIHByb2R1Y3Rpb24pLiAqL1xuICBpbmNsdWRlVW5zYWZlSW5saW5lU3R5bGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBTaWFyYVNoaWVsZENzcERpcmVjdGl2ZXMgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5cbmNvbnN0IFNFTEYgPSBcIidzZWxmJ1wiO1xuY29uc3QgREFUQSA9ICdkYXRhOic7XG5jb25zdCBVTlNBRkVfSU5MSU5FID0gXCIndW5zYWZlLWlubGluZSdcIjtcblxuY29uc3QgU0NSSVBUX0hPU1RTID0gWydodHRwczovL2VtYmVkY2RuLm15Y3liZXJzaWFyYS5jb20nLCAnaHR0cHM6Ly9lbWJlZC5teWN5YmVyc2lhcmEuY29tJ10gYXMgY29uc3Q7XG5jb25zdCBPUFRJT05BTF9TQ1JJUFRfSE9TVFMgPSBbJ2h0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbSddIGFzIGNvbnN0O1xuY29uc3QgQ09OTkVDVF9IT1NUUyA9IFsnaHR0cHM6Ly9lbWJlZC5teWN5YmVyc2lhcmEuY29tJywgJ2h0dHBzOi8vZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbSddIGFzIGNvbnN0O1xuY29uc3QgU1RZTEVfSE9TVFMgPSBbXG4gICdodHRwczovL2VtYmVkLm15Y3liZXJzaWFyYS5jb20nLFxuICAnaHR0cHM6Ly9teWN5YmVyc2lhcmEuY29tJyxcbiAgJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20nLFxuICAnaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbScsXG5dIGFzIGNvbnN0O1xuY29uc3QgRk9OVF9IT1NUUyA9IFtcbiAgJ2h0dHBzOi8vZm9udHMuZ3N0YXRpYy5jb20nLFxuICAnaHR0cHM6Ly9teWN5YmVyc2lhcmEuY29tJyxcbiAgJ2h0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20nLFxuXSBhcyBjb25zdDtcbmNvbnN0IElNR19IT1NUUyA9IFtcbiAgJ2h0dHBzOi8vZW1iZWQubXljeWJlcnNpYXJhLmNvbScsXG4gICdodHRwczovL2VtYmVkY2RuLm15Y3liZXJzaWFyYS5jb20nLFxuICAnaHR0cHM6Ly9teWN5YmVyc2lhcmEuY29tJyxcbl0gYXMgY29uc3Q7XG5cbmZ1bmN0aW9uIHVuaXF1ZSh2YWx1ZXM6IEFycmF5PHN0cmluZyB8IHVuZGVmaW5lZD4pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbLi4ubmV3IFNldCh2YWx1ZXMuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIHN0cmluZyA9PiBCb29sZWFuKHZhbHVlICYmIHZhbHVlLnRyaW0oKSkpKV07XG59XG5cbmZ1bmN0aW9uIG5vbmNlU291cmNlKG5vbmNlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIG5vbmNlID8gYCdub25jZS0ke25vbmNlfSdgIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVEaXJlY3RpdmUobmFtZTogc3RyaW5nLCB2YWx1ZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlcy5sZW5ndGggPiAwID8gYCR7bmFtZX0gJHt2YWx1ZXMuam9pbignICcpfWAgOiBuYW1lO1xufVxuXG5mdW5jdGlvbiBwYXJzZVBvbGljeShwb2xpY3k6IHN0cmluZyk6IE1hcDxzdHJpbmcsIHN0cmluZ1tdPiB7XG4gIGNvbnN0IGRpcmVjdGl2ZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG5cbiAgZm9yIChjb25zdCByYXdEaXJlY3RpdmUgb2YgcG9saWN5LnNwbGl0KCc7JykpIHtcbiAgICBjb25zdCBkaXJlY3RpdmUgPSByYXdEaXJlY3RpdmUudHJpbSgpO1xuICAgIGlmICghZGlyZWN0aXZlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0cyA9IGRpcmVjdGl2ZS5zcGxpdCgvXFxzKy8pLmZpbHRlcihCb29sZWFuKTtcbiAgICBjb25zdCBbbmFtZSwgLi4udmFsdWVzXSA9IHBhcnRzO1xuICAgIGlmICghbmFtZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZGlyZWN0aXZlcy5zZXQobmFtZSwgdmFsdWVzKTtcbiAgfVxuXG4gIHJldHVybiBkaXJlY3RpdmVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2lhcmFTaGllbGRDc3BEaXJlY3RpdmVzKG9wdGlvbnM/OiBTaWFyYVNoaWVsZENzcE9wdGlvbnMpOiBTaWFyYVNoaWVsZENzcERpcmVjdGl2ZXMge1xuICBjb25zdCBpbmNsdWRlR29vZ2xlQXBpcyA9IG9wdGlvbnM/LmluY2x1ZGVHb29nbGVBcGlzID8/IGZhbHNlO1xuICAvLyBEZWZhdWx0IHRvIHN0cmljdC9zYWZlIENTUC4gQ3VzdG9tZXJzIGNhbiBleHBsaWNpdGx5IG9wdC1pbiBpZiB0aGV5IGFjY2VwdCB0aGUgcmlzay5cbiAgY29uc3QgaW5jbHVkZVVuc2FmZUlubGluZVNjcmlwdCA9IG9wdGlvbnM/LmluY2x1ZGVVbnNhZmVJbmxpbmVTY3JpcHQgPz8gZmFsc2U7XG4gIGNvbnN0IGluY2x1ZGVVbnNhZmVJbmxpbmVTdHlsZSA9IG9wdGlvbnM/LmluY2x1ZGVVbnNhZmVJbmxpbmVTdHlsZSA/PyBmYWxzZTtcbiAgY29uc3Qgbm9uY2UgPSBub25jZVNvdXJjZShvcHRpb25zPy5ub25jZSk7XG4gIGNvbnN0IHNjcmlwdEhvc3RzID0gaW5jbHVkZUdvb2dsZUFwaXMgPyBbLi4uU0NSSVBUX0hPU1RTLCAuLi5PUFRJT05BTF9TQ1JJUFRfSE9TVFNdIDogWy4uLlNDUklQVF9IT1NUU107XG4gIGNvbnN0IHN0eWxlU291cmNlcyA9IHVuaXF1ZShbU0VMRiwgbm9uY2UsIC4uLlNUWUxFX0hPU1RTXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAnZGVmYXVsdC1zcmMnOiB1bmlxdWUoW1NFTEZdKSxcbiAgICAvKipcbiAgICAgKiBDU1Agbm90ZTpcbiAgICAgKiAtIFZlbmRvciBIVE1MIGluY2x1ZGVzIGlubGluZSBldmVudCBoYW5kbGVycyAob25jbGljaywgZXRjKS4gQ1NQIG5vbmNlcyBkbyBOT1QgY292ZXIgdGhvc2UuXG4gICAgICogLSBXZSBrZWVwIGBzY3JpcHQtc3JjLWVsZW1gIHN0cmljdCAobm9uY2UgKyBob3N0IGFsbG93bGlzdCksIGFuZCBzY29wZSBpbmxpbmUgYWxsb3dhbmNlcyB0byBhdHRyaWJ1dGVzIG9ubHkuXG4gICAgICovXG4gICAgJ3NjcmlwdC1zcmMnOiB1bmlxdWUoW1NFTEYsIG5vbmNlLCAuLi5zY3JpcHRIb3N0cywgaW5jbHVkZVVuc2FmZUlubGluZVNjcmlwdCA/IFVOU0FGRV9JTkxJTkUgOiB1bmRlZmluZWRdKSxcbiAgICAnc2NyaXB0LXNyYy1lbGVtJzogdW5pcXVlKFtTRUxGLCBub25jZSwgLi4uc2NyaXB0SG9zdHNdKSxcbiAgICAnc2NyaXB0LXNyYy1hdHRyJzogdW5pcXVlKFtTRUxGLCBcIid1bnNhZmUtaW5saW5lJ1wiXSksXG4gICAgJ2Nvbm5lY3Qtc3JjJzogdW5pcXVlKFtTRUxGLCAuLi5DT05ORUNUX0hPU1RTXSksXG4gICAgJ2ltZy1zcmMnOiB1bmlxdWUoW1NFTEYsIERBVEEsIC4uLklNR19IT1NUU10pLFxuICAgIC8qKlxuICAgICAqIENTUCBub3RlOlxuICAgICAqIC0gQSBub25jZSBhbGxvd3MgYDxzdHlsZSBub25jZT1cIi4uLlwiPi4uLjwvc3R5bGU+YCBidXQgZG9lcyBOT1QgYWxsb3cgYHN0eWxlPVwiXCJgIGF0dHJpYnV0ZXMgLyBgZWxlbWVudC5zdHlsZT0uLi5gLlxuICAgICAqIC0gVmVuZG9yL2pRdWVyeSB1c2VzIHN0eWxlIGF0dHJpYnV0ZXMgaW4gc29tZSBmbG93cywgc28gd2Ugc2NvcGUgYCd1bnNhZmUtaW5saW5lJ2AgdG8gKmF0dHJpYnV0ZXMgb25seSouXG4gICAgICogLSBUaGlzIGtlZXBzIHNjcmlwdHMgc3RyaWN0IHdoaWxlIHJlc3RvcmluZyBjb21wYXRpYmlsaXR5IHdpdGhvdXQgcmVxdWlyaW5nIGBzdHlsZS1zcmMgJ3Vuc2FmZS1pbmxpbmUnYC5cbiAgICAgKi9cbiAgICAnc3R5bGUtc3JjJzogdW5pcXVlKFsuLi5zdHlsZVNvdXJjZXMsIGluY2x1ZGVVbnNhZmVJbmxpbmVTdHlsZSA/IFVOU0FGRV9JTkxJTkUgOiB1bmRlZmluZWRdKSxcbiAgICAnc3R5bGUtc3JjLWVsZW0nOiB1bmlxdWUoc3R5bGVTb3VyY2VzKSxcbiAgICAnc3R5bGUtc3JjLWF0dHInOiB1bmlxdWUoW1NFTEYsIGluY2x1ZGVVbnNhZmVJbmxpbmVTdHlsZSA/IFVOU0FGRV9JTkxJTkUgOiBcIid1bnNhZmUtaW5saW5lJ1wiXSksXG4gICAgJ2ZvbnQtc3JjJzogdW5pcXVlKFtTRUxGLCAuLi5GT05UX0hPU1RTLCBEQVRBXSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaWFyYVNoaWVsZENzcFBvbGljeShvcHRpb25zPzogU2lhcmFTaGllbGRDc3BPcHRpb25zKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGdldFNpYXJhU2hpZWxkQ3NwRGlyZWN0aXZlcyhvcHRpb25zKSlcbiAgICAubWFwKChbbmFtZSwgdmFsdWVzXSkgPT4gc2VyaWFsaXplRGlyZWN0aXZlKG5hbWUsIHZhbHVlcykpXG4gICAgLmpvaW4oJzsgJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNpYXJhU2hpZWxkQ3NwUG9saWN5KGV4aXN0aW5nUG9saWN5OiBzdHJpbmcsIG9wdGlvbnM/OiBTaWFyYVNoaWVsZENzcE9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBkaXJlY3RpdmVzID0gcGFyc2VQb2xpY3koZXhpc3RpbmdQb2xpY3kpO1xuICBjb25zdCByZWNvbW1lbmRlZCA9IGdldFNpYXJhU2hpZWxkQ3NwRGlyZWN0aXZlcyhvcHRpb25zKTtcblxuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29tbWVuZGVkKSkge1xuICAgIGRpcmVjdGl2ZXMuc2V0KG5hbWUsIHVuaXF1ZShbLi4uKGRpcmVjdGl2ZXMuZ2V0KG5hbWUpID8/IFtdKSwgLi4udmFsdWVzXSkpO1xuICB9XG5cbiAgcmV0dXJuIFsuLi5kaXJlY3RpdmVzLmVudHJpZXMoKV1cbiAgICAubWFwKChbbmFtZSwgdmFsdWVzXSkgPT4gc2VyaWFsaXplRGlyZWN0aXZlKG5hbWUsIHZhbHVlcykpXG4gICAgLmpvaW4oJzsgJyk7XG59XG4iXX0=
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLWNzcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC1jc3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZUEsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQ3RCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUNyQixNQUFNLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztBQUV4QyxNQUFNLFlBQVksR0FBRyxDQUFDLG1DQUFtQyxFQUFFLGdDQUFnQyxDQUFVLENBQUM7QUFDdEcsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLDZCQUE2QixDQUFVLENBQUM7QUFDdkUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBRSxtQ0FBbUMsQ0FBVSxDQUFDO0FBQ3ZHLE1BQU0sV0FBVyxHQUFHO0lBQ2xCLGdDQUFnQztJQUNoQywwQkFBMEI7SUFDMUIsOEJBQThCO0lBQzlCLDhCQUE4QjtDQUN0QixDQUFDO0FBQ1gsTUFBTSxVQUFVLEdBQUc7SUFDakIsMkJBQTJCO0lBQzNCLDBCQUEwQjtJQUMxQiw4QkFBOEI7Q0FDdEIsQ0FBQztBQUNYLE1BQU0sU0FBUyxHQUFHO0lBQ2hCLGdDQUFnQztJQUNoQyxtQ0FBbUM7SUFDbkMsMEJBQTBCO0NBQ2xCLENBQUM7QUFFWCxTQUFTLE1BQU0sQ0FBQyxNQUFpQztJQUMvQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLEdBQUcsQ0FBQyxD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SUFFRCxPQUFPLENBQUMsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztTQUN6RCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2lhcmFTaGllbGRDc3BPcHRpb25zIHtcclxuICAvKiogU2VydmVyLWdlbmVyYXRlZCBub25jZSB2YWx1ZSB3aXRob3V0IHRoZSBgJ25vbmNlLSdgIHByZWZpeC4gKi9cclxuICBub25jZT86IHN0cmluZztcclxuICAvKiogT3B0aW9uYWwgaWYgdGhlIGN1c3RvbWVyIHN0aWxsIGxvYWRzIGpRdWVyeSBmcm9tIEdvb2dsZSdzIENETi4gKi9cclxuICBpbmNsdWRlR29vZ2xlQXBpcz86IGJvb2xlYW47XHJcbiAgLyoqIEluY2x1ZGUgYHNjcmlwdC1zcmMgJ3Vuc2FmZS1pbmxpbmUnYCAobm90IHJlY29tbWVuZGVkIGZvciBwcm9kdWN0aW9uKS4gKi9cclxuICBpbmNsdWRlVW5zYWZlSW5saW5lU2NyaXB0PzogYm9vbGVhbjtcclxuICAvKiogSW5jbHVkZSBgc2NyaXB0LXNyYy1hdHRyICdzZWxmJyAndW5zYWZlLWlubGluZSdgIGluc3RlYWQgb2YgYCdub25lJ2AuICovXHJcbiAgYWxsb3dJbmxpbmVFdmVudEF0dHJpYnV0ZXM/OiBib29sZWFuO1xyXG4gIC8qKiBJbmNsdWRlIGBzdHlsZS1zcmMgJ3Vuc2FmZS1pbmxpbmUnYCAobm90IHJlY29tbWVuZGVkIGZvciBwcm9kdWN0aW9uKS4gKi9cclxuICBpbmNsdWRlVW5zYWZlSW5saW5lU3R5bGU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBTaWFyYVNoaWVsZENzcERpcmVjdGl2ZXMgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XHJcblxyXG5jb25zdCBTRUxGID0gXCInc2VsZidcIjtcclxuY29uc3QgREFUQSA9ICdkYXRhOic7XHJcbmNvbnN0IFVOU0FGRV9JTkxJTkUgPSBcIid1bnNhZmUtaW5saW5lJ1wiO1xyXG5cclxuY29uc3QgU0NSSVBUX0hPU1RTID0gWydodHRwczovL2VtYmVkY2RuLm15Y3liZXJzaWFyYS5jb20nLCAnaHR0cHM6Ly9lbWJlZC5teWN5YmVyc2lhcmEuY29tJ10gYXMgY29uc3Q7XHJcbmNvbnN0IE9QVElPTkFMX1NDUklQVF9IT1NUUyA9IFsnaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tJ10gYXMgY29uc3Q7XHJcbmNvbnN0IENPTk5FQ1RfSE9TVFMgPSBbJ2h0dHBzOi8vZW1iZWQubXljeWJlcnNpYXJhLmNvbScsICdodHRwczovL2VtYmVkY2RuLm15Y3liZXJzaWFyYS5jb20nXSBhcyBjb25zdDtcclxuY29uc3QgU1RZTEVfSE9TVFMgPSBbXHJcbiAgJ2h0dHBzOi8vZW1iZWQubXljeWJlcnNpYXJhLmNvbScsXHJcbiAgJ2h0dHBzOi8vbXljeWJlcnNpYXJhLmNvbScsXHJcbiAgJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20nLFxyXG4gICdodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tJyxcclxuXSBhcyBjb25zdDtcclxuY29uc3QgRk9OVF9IT1NUUyA9IFtcclxuICAnaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbScsXHJcbiAgJ2h0dHBzOi8vbXljeWJlcnNpYXJhLmNvbScsXHJcbiAgJ2h0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20nLFxyXG5dIGFzIGNvbnN0O1xyXG5jb25zdCBJTUdfSE9TVFMgPSBbXHJcbiAgJ2h0dHBzOi8vZW1iZWQubXljeWJlcnNpYXJhLmNvbScsXHJcbiAgJ2h0dHBzOi8vZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbScsXHJcbiAgJ2h0dHBzOi8vbXljeWJlcnNpYXJhLmNvbScsXHJcbl0gYXMgY29uc3Q7XHJcblxyXG5mdW5jdGlvbiB1bmlxdWUodmFsdWVzOiBBcnJheTxzdHJpbmcgfCB1bmRlZmluZWQ+KTogc3RyaW5nW10ge1xyXG4gIHJldHVybiBbLi4ubmV3IFNldCh2YWx1ZXMuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIHN0cmluZyA9PiBCb29sZWFuKHZhbHVlICYmIHZhbHVlLnRyaW0oKSkpKV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vbmNlU291cmNlKG5vbmNlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICByZXR1cm4gbm9uY2UgPyBgJ25vbmNlLSR7bm9uY2V9J2AgOiB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNlcmlhbGl6ZURpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10pOiBzdHJpbmcge1xyXG4gIHJldHVybiB2YWx1ZXMubGVuZ3RoID4gMCA/IGAke25hbWV9ICR7dmFsdWVzLmpvaW4oJyAnKX1gIDogbmFtZTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VQb2xpY3kocG9saWN5OiBzdHJpbmcpOiBNYXA8c3RyaW5nLCBzdHJpbmdbXT4ge1xyXG4gIGNvbnN0IGRpcmVjdGl2ZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XHJcblxyXG4gIGZvciAoY29uc3QgcmF3RGlyZWN0aXZlIG9mIHBvbGljeS5zcGxpdCgnOycpKSB7XHJcbiAgICBjb25zdCBkaXJlY3RpdmUgPSByYXdEaXJlY3RpdmUudHJpbSgpO1xyXG4gICAgaWYgKCFkaXJlY3RpdmUpIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGFydHMgPSBkaXJlY3RpdmUuc3BsaXQoL1xccysvKS5maWx0ZXIoQm9vbGVhbik7XHJcbiAgICBjb25zdCBbbmFtZSwgLi4udmFsdWVzXSA9IHBhcnRzO1xyXG4gICAgaWYgKCFuYW1lKSB7XHJcbiAgICAgIGNvbnRpbnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGRpcmVjdGl2ZXMuc2V0KG5hbWUsIHZhbHVlcyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZGlyZWN0aXZlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpYXJhU2hpZWxkQ3NwRGlyZWN0aXZlcyhvcHRpb25zPzogU2lhcmFTaGllbGRDc3BPcHRpb25zKTogU2lhcmFTaGllbGRDc3BEaXJlY3RpdmVzIHtcclxuICBjb25zdCBpbmNsdWRlR29vZ2xlQXBpcyA9IG9wdGlvbnM/LmluY2x1ZGVHb29nbGVBcGlzID8/IGZhbHNlO1xyXG4gIC8vIERlZmF1bHQgdG8gc3RyaWN0L3NhZmUgQ1NQLiBDdXN0b21lcnMgY2FuIGV4cGxpY2l0bHkgb3B0LWluIGlmIHRoZXkgYWNjZXB0IHRoZSByaXNrLlxyXG4gIGNvbnN0IGluY2x1ZGVVbnNhZmVJbmxpbmVTY3JpcHQgPSBvcHRpb25zPy5pbmNsdWRlVW5zYWZlSW5saW5lU2NyaXB0ID8/IGZhbHNlO1xyXG4gIGNvbnN0IGluY2x1ZGVVbnNhZmVJbmxpbmVTdHlsZSA9IG9wdGlvbnM/LmluY2x1ZGVVbnNhZmVJbmxpbmVTdHlsZSA/PyBmYWxzZTtcclxuICBjb25zdCBhbGxvd0lubGluZUV2ZW50QXR0cmlidXRlcyA9IG9wdGlvbnM/LmFsbG93SW5saW5lRXZlbnRBdHRyaWJ1dGVzID8/IGZhbHNlO1xyXG4gIGNvbnN0IG5vbmNlID0gbm9uY2VTb3VyY2Uob3B0aW9ucz8ubm9uY2UpO1xyXG4gIGNvbnN0IHNjcmlwdEhvc3RzID0gaW5jbHVkZUdvb2dsZUFwaXMgPyBbLi4uU0NSSVBUX0hPU1RTLCAuLi5PUFRJT05BTF9TQ1JJUFRfSE9TVFNdIDogWy4uLlNDUklQVF9IT1NUU107XHJcbiAgY29uc3Qgc3R5bGVTb3VyY2VzID0gdW5pcXVlKFtTRUxGLCBub25jZSwgLi4uU1RZTEVfSE9TVFNdKTtcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgICdkZWZhdWx0LXNyYyc6IHVuaXF1ZShbU0VMRl0pLFxyXG4gICAgLyoqXHJcbiAgICAgKiBDU1Agbm90ZTpcclxuICAgICAqIC0gVmVuZG9yIEhUTUwgY2FuIGluY2x1ZGUgaW5saW5lIGV2ZW50IGhhbmRsZXJzIChvbmNsaWNrLCBldGMpLiBDU1Agbm9uY2VzIGRvIE5PVCBjb3ZlciB0aG9zZS5cclxuICAgICAqIC0gV2l0aCBhIGNvbmZpZ3VyZWQgbm9uY2UsIHRoZSBwYWNrYWdlIG1pZ3JhdGVzIHRob3NlIGhhbmRsZXJzIHRvIGFkZEV2ZW50TGlzdGVuZXIgc28gYHNjcmlwdC1zcmMtYXR0ciAnbm9uZSdgIHdvcmtzLlxyXG4gICAgICovXHJcbiAgICAnc2NyaXB0LXNyYyc6IHVuaXF1ZShbU0VMRiwgbm9uY2UsIC4uLnNjcmlwdEhvc3RzLCBpbmNsdWRlVW5zYWZlSW5saW5lU2NyaXB0ID8gVU5TQUZFX0lOTElORSA6IHVuZGVmaW5lZF0pLFxyXG4gICAgJ3NjcmlwdC1zcmMtZWxlbSc6IHVuaXF1ZShbU0VMRiwgbm9uY2UsIC4uLnNjcmlwdEhvc3RzXSksXHJcbiAgICAnc2NyaXB0LXNyYy1hdHRyJzogdW5pcXVlKGFsbG93SW5saW5lRXZlbnRBdHRyaWJ1dGVzID8gW1NFTEYsIFVOU0FGRV9JTkxJTkVdIDogW1wiJ25vbmUnXCJdKSxcclxuICAgICdjb25uZWN0LXNyYyc6IHVuaXF1ZShbU0VMRiwgLi4uQ09OTkVDVF9IT1NUU10pLFxyXG4gICAgJ2ltZy1zcmMnOiB1bmlxdWUoW1NFTEYsIERBVEEsIC4uLklNR19IT1NUU10pLFxyXG4gICAgLyoqXHJcbiAgICAgKiBDU1Agbm90ZTpcclxuICAgICAqIC0gQSBub25jZSBhbGxvd3MgYDxzdHlsZSBub25jZT1cIi4uLlwiPi4uLjwvc3R5bGU+YCBidXQgZG9lcyBOT1QgYWxsb3cgYHN0eWxlPVwiXCJgIGF0dHJpYnV0ZXMgLyBgZWxlbWVudC5zdHlsZT0uLi5gLlxyXG4gICAgICogLSBWZW5kb3IvalF1ZXJ5IHVzZXMgc3R5bGUgYXR0cmlidXRlcyBpbiBzb21lIGZsb3dzLCBzbyB3ZSBzY29wZSBgJ3Vuc2FmZS1pbmxpbmUnYCB0byAqYXR0cmlidXRlcyBvbmx5Ki5cclxuICAgICAqIC0gVGhpcyBrZWVwcyBzY3JpcHRzIHN0cmljdCB3aGlsZSByZXN0b3JpbmcgY29tcGF0aWJpbGl0eSB3aXRob3V0IHJlcXVpcmluZyBgc3R5bGUtc3JjICd1bnNhZmUtaW5saW5lJ2AuXHJcbiAgICAgKi9cclxuICAgICdzdHlsZS1zcmMnOiB1bmlxdWUoWy4uLnN0eWxlU291cmNlcywgaW5jbHVkZVVuc2FmZUlubGluZVN0eWxlID8gVU5TQUZFX0lOTElORSA6IHVuZGVmaW5lZF0pLFxyXG4gICAgJ3N0eWxlLXNyYy1lbGVtJzogdW5pcXVlKHN0eWxlU291cmNlcyksXHJcbiAgICAnc3R5bGUtc3JjLWF0dHInOiB1bmlxdWUoW1NFTEYsIGluY2x1ZGVVbnNhZmVJbmxpbmVTdHlsZSA/IFVOU0FGRV9JTkxJTkUgOiBcIid1bnNhZmUtaW5saW5lJ1wiXSksXHJcbiAgICAnZm9udC1zcmMnOiB1bmlxdWUoW1NFTEYsIC4uLkZPTlRfSE9TVFMsIERBVEFdKSxcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2lhcmFTaGllbGRDc3BQb2xpY3kob3B0aW9ucz86IFNpYXJhU2hpZWxkQ3NwT3B0aW9ucyk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGdldFNpYXJhU2hpZWxkQ3NwRGlyZWN0aXZlcyhvcHRpb25zKSlcclxuICAgIC5tYXAoKFtuYW1lLCB2YWx1ZXNdKSA9PiBzZXJpYWxpemVEaXJlY3RpdmUobmFtZSwgdmFsdWVzKSlcclxuICAgIC5qb2luKCc7ICcpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VTaWFyYVNoaWVsZENzcFBvbGljeShleGlzdGluZ1BvbGljeTogc3RyaW5nLCBvcHRpb25zPzogU2lhcmFTaGllbGRDc3BPcHRpb25zKTogc3RyaW5nIHtcclxuICBjb25zdCBkaXJlY3RpdmVzID0gcGFyc2VQb2xpY3koZXhpc3RpbmdQb2xpY3kpO1xyXG4gIGNvbnN0IHJlY29tbWVuZGVkID0gZ2V0U2lhcmFTaGllbGRDc3BEaXJlY3RpdmVzKG9wdGlvbnMpO1xyXG5cclxuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29tbWVuZGVkKSkge1xyXG4gICAgZGlyZWN0aXZlcy5zZXQobmFtZSwgdW5pcXVlKFsuLi4oZGlyZWN0aXZlcy5nZXQobmFtZSkgPz8gW10pLCAuLi52YWx1ZXNdKSk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gWy4uLmRpcmVjdGl2ZXMuZW50cmllcygpXVxyXG4gICAgLm1hcCgoW25hbWUsIHZhbHVlc10pID0+IHNlcmlhbGl6ZURpcmVjdGl2ZShuYW1lLCB2YWx1ZXMpKVxyXG4gICAgLmpvaW4oJzsgJyk7XHJcbn1cclxuIl19
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { installVendorInlineEventMigration } from './siara-shield-vendor-event-migration';
|
|
1
2
|
const SCRIPT_STATUS_BY_DOCUMENT = new WeakMap();
|
|
2
3
|
const SCRIPT_PENDING_BY_DOCUMENT = new WeakMap();
|
|
3
4
|
const DYNAMIC_SCRIPT_NONCE_STATE_KEY = '__siaraShieldDynamicScriptNonceState__';
|
|
@@ -267,6 +268,7 @@ export function prepareScriptNonce(documentRef, explicitNonce) {
|
|
|
267
268
|
if (effectiveDocumentRef) {
|
|
268
269
|
patchState.nonceByDocument.set(effectiveDocumentRef, resolvedNonce);
|
|
269
270
|
ensureNonceMutationObserver(effectiveDocumentRef);
|
|
271
|
+
installVendorInlineEventMigration(effectiveDocumentRef);
|
|
270
272
|
}
|
|
271
273
|
}
|
|
272
274
|
else {
|
|
@@ -315,4 +317,4 @@ export function loadScript(documentRef, src, options) {
|
|
|
315
317
|
pendingBySrc.set(src, pending);
|
|
316
318
|
return pending;
|
|
317
319
|
}
|
|
318
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLXNjcmlwdC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC1zY3JpcHQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLE9BQU8sRUFBdUMsQ0FBQztBQUNyRixNQUFNLDBCQUEwQixHQUFHLElBQUksT0FBTyxFQUF3QyxDQUFDO0FBQ3ZGLE1BQU0sOEJBQThCLEdBQUcsd0NBQXdDLENBQUM7QUFFaEYsU0FBUyxjQUFjLENBQUMsV0FBcUI7SUFDM0MsSUFBSSxXQUFXLEdBQUcseUJBQXlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDOUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFdBQXFCO0lBQzVDLElBQUksWUFBWSxHQUFHLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1FBQ2hELDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLCtCQUErQjtJQUN0QyxNQUFNLFdBQVcsR0FBRyxVQUVuQixDQUFDO0lBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7UUFD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QUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbInR5cGUgU2NyaXB0U3RhdHVzID0gJ2xvYWRpbmcnIHwgJ2xvYWRlZCcgfCAnZXJyb3InO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNjcmlwdExvYWRPcHRpb25zIHtcbiAgbm9uY2U/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBEeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlIHtcbiAgbm9uY2VCeURvY3VtZW50OiBXZWFrTWFwPERvY3VtZW50LCBzdHJpbmc+O1xuICBvYnNlcnZlckJ5RG9jdW1lbnQ6IFdlYWtNYXA8RG9jdW1lbnQsIE11dGF0aW9uT2JzZXJ2ZXI+O1xuICBpbmxpbmVDYXB0Y2hhU2NyaXB0QnlEb2N1bWVudDogV2Vha01hcDxEb2N1bWVudCwgU2V0PHN0cmluZz4+O1xuICBwYXRjaGVkOiBib29sZWFuO1xufVxuXG5jb25zdCBTQ1JJUFRfU1RBVFVTX0JZX0RPQ1VNRU5UID0gbmV3IFdlYWtNYXA8RG9jdW1lbnQsIE1hcDxzdHJpbmcsIFNjcmlwdFN0YXR1cz4+KCk7XG5jb25zdCBTQ1JJUFRfUEVORElOR19CWV9ET0NVTUVOVCA9IG5ldyBXZWFrTWFwPERvY3VtZW50LCBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+Pj4oKTtcbmNvbnN0IERZTkFNSUNfU0NSSVBUX05PTkNFX1NUQVRFX0tFWSA9ICdfX3NpYXJhU2hpZWxkRHluYW1pY1NjcmlwdE5vbmNlU3RhdGVfXyc7XG5cbmZ1bmN0aW9uIGdldFN0YXR1c0J5U3JjKGRvY3VtZW50UmVmOiBEb2N1bWVudCk6IE1hcDxzdHJpbmcsIFNjcmlwdFN0YXR1cz4ge1xuICBsZXQgc3RhdHVzQnlTcmMgPSBTQ1JJUFRfU1RBVFVTX0JZX0RPQ1VNRU5ULmdldChkb2N1bWVudFJlZik7XG4gIGlmICghc3RhdHVzQnlTcmMpIHtcbiAgICBzdGF0dXNCeVNyYyA9IG5ldyBNYXA8c3RyaW5nLCBTY3JpcHRTdGF0dXM+KCk7XG4gICAgU0NSSVBUX1NUQVRVU19CWV9ET0NVTUVOVC5zZXQoZG9jdW1lbnRSZWYsIHN0YXR1c0J5U3JjKTtcbiAgfVxuXG4gIHJldHVybiBzdGF0dXNCeVNyYztcbn1cblxuZnVuY3Rpb24gZ2V0UGVuZGluZ0J5U3JjKGRvY3VtZW50UmVmOiBEb2N1bWVudCk6IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+IHtcbiAgbGV0IHBlbmRpbmdCeVNyYyA9IFNDUklQVF9QRU5ESU5HX0JZX0RPQ1VNRU5ULmdldChkb2N1bWVudFJlZik7XG4gIGlmICghcGVuZGluZ0J5U3JjKSB7XG4gICAgcGVuZGluZ0J5U3JjID0gbmV3IE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+KCk7XG4gICAgU0NSSVBUX1BFTkRJTkdfQllfRE9DVU1FTlQuc2V0KGRvY3VtZW50UmVmLCBwZW5kaW5nQnlTcmMpO1xuICB9XG5cbiAgcmV0dXJuIHBlbmRpbmdCeVNyYztcbn1cblxuZnVuY3Rpb24gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpOiBEeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlIHtcbiAgY29uc3QgZ2xvYmFsU3RhdGUgPSBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYge1xuICAgIFtEWU5BTUlDX1NDUklQVF9OT05DRV9TVEFURV9LRVldPzogRHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZTtcbiAgfTtcblxuICBpZiAoIWdsb2JhbFN0YXRlW0RZTkFNSUNfU0NSSVBUX05PTkNFX1NUQVRFX0tFWV0pIHtcbiAgICBnbG9iYWxTdGF0ZVtEWU5BTUlDX1NDUklQVF9OT05DRV9TVEFURV9LRVldID0ge1xuICAgICAgbm9uY2VCeURvY3VtZW50OiBuZXcgV2Vha01hcDxEb2N1bWVudCwgc3RyaW5nPigpLFxuICAgICAgb2JzZXJ2ZXJCeURvY3VtZW50OiBuZXcgV2Vha01hcDxEb2N1bWVudCwgTXV0YXRpb25PYnNlcnZlcj4oKSxcbiAgICAgIGlubGluZUNhcHRjaGFTY3JpcHRCeURvY3VtZW50OiBuZXcgV2Vha01hcDxEb2N1bWVudCwgU2V0PHN0cmluZz4+KCksXG4gICAgICBwYXRjaGVkOiBmYWxzZSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGdsb2JhbFN0YXRlW0RZTkFNSUNfU0NSSVBUX05PTkNFX1NUQVRFX0tFWV07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZU5vbmNlKG5vbmNlPzogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRyaW1tZWQgPSBub25jZT8udHJpbSgpO1xuICByZXR1cm4gdHJpbW1lZCA/IHRyaW1tZWQgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzU2NyaXB0RWxlbWVudChub2RlOiBOb2RlKTogbm9kZSBpcyBIVE1MU2NyaXB0RWxlbWVudCB7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgRWxlbWVudCAmJiBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3NjcmlwdCc7XG59XG5cbmZ1bmN0aW9uIGlzU3R5bGVFbGVtZW50KG5vZGU6IE5vZGUpOiBub2RlIGlzIEhUTUxTdHlsZUVsZW1lbnQge1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzdHlsZSc7XG59XG5cbmZ1bmN0aW9uIGlzU3R5bGVzaGVldExpbmtFbGVtZW50KG5vZGU6IE5vZGUpOiBub2RlIGlzIEhUTUxMaW5rRWxlbWVudCB7XG4gIGlmICghKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSB8fCBub2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ2xpbmsnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHJlbCA9IChub2RlLmdldEF0dHJpYnV0ZSgncmVsJykgPz8gJycpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiByZWwgPT09ICdzdHlsZXNoZWV0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5U2NyaXB0Tm9uY2Uoc2NyaXB0OiBIVE1MU2NyaXB0RWxlbWVudCwgbm9uY2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcmVzb2x2ZWROb25jZSA9IG5vcm1hbGl6ZU5vbmNlKG5vbmNlKTtcbiAgaWYgKCFyZXNvbHZlZE5vbmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnbm9uY2UnLCByZXNvbHZlZE5vbmNlKTtcbiAgc2NyaXB0Lm5vbmNlID0gcmVzb2x2ZWROb25jZTtcblxuICAvLyBTb21lIHZlbmRvciBIVE1MIGZyYWdtZW50cyBpbmNsdWRlIGlubGluZSBzY3JpcHRzIHRoYXQgZXhlY3V0ZSBpbW1lZGlhdGVseSBkdXJpbmcgaW5zZXJ0aW9uLlxuICAvLyBJbiBzdHJpY3QgQ1NQIG1vZGUgdGhlc2UgcnVuIHdpdGggYSBub25jZSwgYnV0IGNhbiBzdGlsbCByYWNlIERPTSBpbnNlcnRpb24gYW5kIGNyYXNoXG4gIC8vIChlLmcuIGBudWxsLnF1ZXJ5U2VsZWN0b3IoLi4uKWApLiBXZSBkZWZlbnNpdmVseSByZXRyeSBvbmNlIG9uIGZhaWx1cmUuXG4gIGlmICghc2NyaXB0LnNyYykge1xuICAgIGNvbnN0IGJvZHkgPSBzY3JpcHQudGV4dENvbnRlbnQgPz8gJyc7XG4gICAgaWYgKGJvZHkgJiYgIWJvZHkuaW5jbHVkZXMoJ19fc2lhcmFTaGllbGRJbmxpbmVSZXRyeV9fJykpIHtcbiAgICAgIHNjcmlwdC50ZXh0Q29udGVudCA9IGAoZnVuY3Rpb24oKXtcXG5gICtcbiAgICAgICAgYCAgdmFyIF9fc2lhcmFTaGllbGRJbmxpbmVSZXRyeV9fID0gdHJ1ZTtcXG5gICtcbiAgICAgICAgYCAgZnVuY3Rpb24gX19ydW4oKXtcXG4ke2JvZHl9XFxuICB9XFxuYCArXG4gICAgICAgIGAgIHRyeSB7IF9fcnVuKCk7IH0gY2F0Y2ggKGUpIHtcXG5gICtcbiAgICAgICAgYCAgICB0cnkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHRyeSB7IF9fcnVuKCk7IH0gY2F0Y2ggKF9lKSB7fSB9LCAwKTsgfSBjYXRjaCAoX3QpIHt9XFxuYCArXG4gICAgICAgIGAgIH1cXG5gICtcbiAgICAgICAgYH0pKCk7YDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlTdHlsZU5vbmNlKHN0eWxlOiBIVE1MU3R5bGVFbGVtZW50LCBub25jZT86IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCByZXNvbHZlZE5vbmNlID0gbm9ybWFsaXplTm9uY2Uobm9uY2UpO1xuICBpZiAoIXJlc29sdmVkTm9uY2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgcmVzb2x2ZWROb25jZSk7XG4gIHN0eWxlLm5vbmNlID0gcmVzb2x2ZWROb25jZTtcbn1cblxuZnVuY3Rpb24gYXBwbHlMaW5rTm9uY2UobGluazogSFRNTExpbmtFbGVtZW50LCBub25jZT86IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCByZXNvbHZlZE5vbmNlID0gbm9ybWFsaXplTm9uY2Uobm9uY2UpO1xuICBpZiAoIXJlc29sdmVkTm9uY2UpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsaW5rLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCByZXNvbHZlZE5vbmNlKTtcbiAgLy8gYEhUTUxMaW5rRWxlbWVudC5ub25jZWAgZXhpc3RzIGluIG1vZGVybiBicm93c2Vycy5cbiAgKGxpbmsgYXMgSFRNTExpbmtFbGVtZW50ICYgeyBub25jZT86IHN0cmluZyB9KS5ub25jZSA9IHJlc29sdmVkTm9uY2U7XG59XG5cbmZ1bmN0aW9uIGFwcGx5Tm9uY2VUb05vZGUobm9kZTogTm9kZSwgbm9uY2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKGlzU2NyaXB0RWxlbWVudChub2RlKSkge1xuICAgIGFwcGx5U2NyaXB0Tm9uY2Uobm9kZSwgbm9uY2UpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaXNTdHlsZUVsZW1lbnQobm9kZSkpIHtcbiAgICBhcHBseVN0eWxlTm9uY2Uobm9kZSwgbm9uY2UpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoaXNTdHlsZXNoZWV0TGlua0VsZW1lbnQobm9kZSkpIHtcbiAgICBhcHBseUxpbmtOb25jZShub2RlLCBub25jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUcmFja2VkTm9uY2Uobm9kZTogTm9kZSk6IHZvaWQge1xuICBjb25zdCBkb2N1bWVudFJlZiA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgaWYgKCFkb2N1bWVudFJlZikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG5vbmNlID0gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpLm5vbmNlQnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpO1xuICBhcHBseU5vbmNlVG9Ob2RlKG5vZGUsIG5vbmNlKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhY2tlZElubGluZUNhcHRjaGFTY3JpcHRzKGRvY3VtZW50UmVmOiBEb2N1bWVudCk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUoKTtcbiAgbGV0IHRyYWNrZWRTY3JpcHRzID0gcGF0Y2hTdGF0ZS5pbmxpbmVDYXB0Y2hhU2NyaXB0QnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpO1xuICBpZiAoIXRyYWNrZWRTY3JpcHRzKSB7XG4gICAgdHJhY2tlZFNjcmlwdHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwYXRjaFN0YXRlLmlubGluZUNhcHRjaGFTY3JpcHRCeURvY3VtZW50LnNldChkb2N1bWVudFJlZiwgdHJhY2tlZFNjcmlwdHMpO1xuICB9XG5cbiAgcmV0dXJuIHRyYWNrZWRTY3JpcHRzO1xufVxuXG5mdW5jdGlvbiBzaG91bGRTa2lwRHVwbGljYXRlSW5saW5lQ2FwdGNoYVNjcmlwdChub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gIGlmICghaXNTY3JpcHRFbGVtZW50KG5vZGUpIHx8IEJvb2xlYW4obm9kZS5zcmMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgc2NyaXB0Qm9keSA9IChub2RlLnRleHRDb250ZW50ID8/ICcnKS50cmltKCk7XG4gIGlmICghc2NyaXB0Qm9keSB8fCAhc2NyaXB0Qm9keS5pbmNsdWRlcygnY3VycmVudExhbmdDb2RlJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkb2N1bWVudFJlZiA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgaWYgKCFkb2N1bWVudFJlZikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHRyYWNrZWRTY3JpcHRzID0gZ2V0VHJhY2tlZElubGluZUNhcHRjaGFTY3JpcHRzKGRvY3VtZW50UmVmKTtcbiAgaWYgKHRyYWNrZWRTY3JpcHRzLmhhcyhzY3JpcHRCb2R5KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJhY2tlZFNjcmlwdHMuYWRkKHNjcmlwdEJvZHkpO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHdhbGtBbmRBcHBseU5vbmNlKHJvb3Q6IE5vZGUsIG5vbmNlPzogc3RyaW5nKTogdm9pZCB7XG4gIGlmICghbm9uY2UpIHJldHVybjtcblxuICAvLyBGYXN0IHBhdGg6IHJvb3QgaXRzZWxmIGlzIG5vbmNlYWJsZS5cbiAgaWYgKGlzU2NyaXB0RWxlbWVudChyb290KSB8fCBpc1N0eWxlRWxlbWVudChyb290KSB8fCBpc1N0eWxlc2hlZXRMaW5rRWxlbWVudChyb290KSkge1xuICAgIGFwcGx5Tm9uY2VUb05vZGUocm9vdCwgbm9uY2UpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIENvbW1vbiBwYXRoIGZvciBqUXVlcnk6IGFwcGVuZCBEb2N1bWVudEZyYWdtZW50IGNvbnRhaW5pbmcgbm9kZXMgY3JlYXRlZCB2aWEgSFRNTCBwYXJzaW5nLlxuICBpZiAocm9vdCBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICBjb25zdCBub25jZWFibGUgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGw/Lignc2NyaXB0LHN0eWxlLGxpbmtbcmVsPVwic3R5bGVzaGVldFwiXScpID8/IFtdO1xuICAgIGZvciAoY29uc3QgZWwgb2Ygbm9uY2VhYmxlKSB7XG4gICAgICBhcHBseU5vbmNlVG9Ob2RlKGVsIGFzIHVua25vd24gYXMgTm9kZSwgbm9uY2UpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBlbnN1cmVOb25jZU11dGF0aW9uT2JzZXJ2ZXIoZG9jdW1lbnRSZWY6IERvY3VtZW50KTogdm9pZCB7XG4gIGNvbnN0IHBhdGNoU3RhdGUgPSBnZXREeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlKCk7XG4gIGlmIChwYXRjaFN0YXRlLm9ic2VydmVyQnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigocmVjb3JkcykgPT4ge1xuICAgIGNvbnN0IG5vbmNlID0gcGF0Y2hTdGF0ZS5ub25jZUJ5RG9jdW1lbnQuZ2V0KGRvY3VtZW50UmVmKTtcbiAgICBpZiAoIW5vbmNlKSByZXR1cm47XG5cbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgcmVjb3JkLmFkZGVkTm9kZXMpIHtcbiAgICAgICAgd2Fsa0FuZEFwcGx5Tm9uY2Uobm9kZSwgbm9uY2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gT2JzZXJ2ZSB0aGUgZnVsbCBkb2N1bWVudCBiZWNhdXNlIHNjcmlwdHMgY2FuIGJlIGluamVjdGVkIGludG8gYm9keS9oZWFkIGJ5IHZlbmRvci9qUXVlcnkuXG4gIGNvbnN0IHJvb3QgPSBkb2N1bWVudFJlZi5kb2N1bWVudEVsZW1lbnQgPz8gZG9jdW1lbnRSZWY7XG4gIG9ic2VydmVyLm9ic2VydmUocm9vdCwgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gIHBhdGNoU3RhdGUub2JzZXJ2ZXJCeURvY3VtZW50LnNldChkb2N1bWVudFJlZiwgb2JzZXJ2ZXIpO1xufVxuXG5mdW5jdGlvbiB0ZWFyZG93bk5vbmNlTXV0YXRpb25PYnNlcnZlcihkb2N1bWVudFJlZjogRG9jdW1lbnQpOiB2b2lkIHtcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUoKTtcbiAgY29uc3Qgb2JzZXJ2ZXIgPSBwYXRjaFN0YXRlLm9ic2VydmVyQnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpO1xuICBpZiAoIW9ic2VydmVyKSByZXR1cm47XG4gIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgcGF0Y2hTdGF0ZS5vYnNlcnZlckJ5RG9jdW1lbnQuZGVsZXRlKGRvY3VtZW50UmVmKTtcbn1cblxuZnVuY3Rpb24gaW5qZWN0Tm9uY2VJbnRvSHRtbChodG1sOiBzdHJpbmcsIG5vbmNlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZXNvbHZlZE5vbmNlID0gbm9ybWFsaXplTm9uY2Uobm9uY2UpO1xuICBpZiAoIXJlc29sdmVkTm9uY2UpIHJldHVybiBodG1sO1xuXG4gIC8vIElmIHRhZyBhbHJlYWR5IGluY2x1ZGVzIG5vbmNlLCBsZWF2ZSBpdC5cbiAgY29uc3Qgd2l0aE5vbmNlQXR0ciA9IGAgbm9uY2U9XCIke3Jlc29sdmVkTm9uY2V9XCJgO1xuXG4gIGNvbnN0IGFkZE5vbmNlVG9UYWcgPSAodGFnOiAnc2NyaXB0JyB8ICdzdHlsZScpID0+IHtcbiAgICBjb25zdCBvcGVuVGFnID0gbmV3IFJlZ0V4cChgPCR7dGFnfShcXFxcc1tePl0qPyk/PmAsICdnaScpO1xuICAgIHJldHVybiAoaW5wdXQ6IHN0cmluZykgPT5cbiAgICAgIGlucHV0LnJlcGxhY2Uob3BlblRhZywgKG1hdGNoKSA9PiB7XG4gICAgICAgIGlmICgvW1xcc1wiJ11ub25jZVxccyo9Ly50ZXN0KG1hdGNoKSkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAvLyBJbnNlcnQgbm9uY2UgYmVmb3JlIGNsb3NpbmcgYD5gXG4gICAgICAgIHJldHVybiBtYXRjaC5yZXBsYWNlKC8+JC8sIGAke3dpdGhOb25jZUF0dHJ9PmApO1xuICAgICAgfSk7XG4gIH07XG5cbiAgLy8gRm9yIGxpbmsgcmVsPXN0eWxlc2hlZXQsIGFkZCBub25jZSB3aGVuIG1pc3NpbmcuXG4gIGNvbnN0IGxpbmtPcGVuVGFnID0gLzxsaW5rXFxiW14+XSo+L2dpO1xuICBjb25zdCBhZGROb25jZVRvU3R5bGVzaGVldExpbmsgPSAoaW5wdXQ6IHN0cmluZykgPT5cbiAgICBpbnB1dC5yZXBsYWNlKGxpbmtPcGVuVGFnLCAobWF0Y2gpID0+IHtcbiAgICAgIGlmICgvW1xcc1wiJ11ub25jZVxccyo9Ly50ZXN0KG1hdGNoKSkgcmV0dXJuIG1hdGNoO1xuICAgICAgaWYgKCEvXFxicmVsXFxzKj1cXHMqW1wiJ10/c3R5bGVzaGVldFtcIiddPy9pLnRlc3QobWF0Y2gpKSByZXR1cm4gbWF0Y2g7XG4gICAgICByZXR1cm4gbWF0Y2gucmVwbGFjZSgvPiQvLCBgJHt3aXRoTm9uY2VBdHRyfT5gKTtcbiAgICB9KTtcblxuICByZXR1cm4gYWRkTm9uY2VUb1N0eWxlc2hlZXRMaW5rKGFkZE5vbmNlVG9UYWcoJ3N0eWxlJykoYWRkTm9uY2VUb1RhZygnc2NyaXB0JykoaHRtbCkpKTtcbn1cblxuZnVuY3Rpb24gcGF0Y2hEeW5hbWljU2NyaXB0SW5zZXJ0aW9uKCk6IHZvaWQge1xuICBjb25zdCBwYXRjaFN0YXRlID0gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpO1xuICBpZiAocGF0Y2hTdGF0ZS5wYXRjaGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWxBcHBlbmRDaGlsZCA9IE5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkO1xuICBjb25zdCBvcmlnaW5hbEluc2VydEJlZm9yZSA9IE5vZGUucHJvdG90eXBlLmluc2VydEJlZm9yZTtcbiAgY29uc3Qgb3JpZ2luYWxSZXBsYWNlQ2hpbGQgPSBOb2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQ7XG4gIGNvbnN0IG9yaWdpbmFsSW5zZXJ0QWRqYWNlbnRIVE1MID0gRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRIVE1MO1xuXG4gIE5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBOb2RlPihub2RlOiBUKTogVCB7XG4gICAgLy8gVmVuZG9yIGNhcHRjaGEgaW5qZWN0cyBhbiBpbmxpbmUgc25pcHBldCB3aXRoIGBjdXJyZW50TGFuZ0NvZGVgIHRoYXQgY3Jhc2hlcyB3aGVuIGFwcGVuZGVkIHR3aWNlLlxuICAgIGlmIChzaG91bGRTa2lwRHVwbGljYXRlSW5saW5lQ2FwdGNoYVNjcmlwdChub2RlKSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGFwcGx5VHJhY2tlZE5vbmNlKG5vZGUpO1xuICAgIHJldHVybiBvcmlnaW5hbEFwcGVuZENoaWxkLmNhbGwodGhpcywgbm9kZSkgYXMgVDtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUgPSBmdW5jdGlvbiA8VCBleHRlbmRzIE5vZGU+KG5vZGU6IFQsIGNoaWxkOiBOb2RlIHwgbnVsbCk6IFQge1xuICAgIGlmIChzaG91bGRTa2lwRHVwbGljYXRlSW5saW5lQ2FwdGNoYVNjcmlwdChub2RlKSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIGFwcGx5VHJhY2tlZE5vbmNlKG5vZGUpO1xuICAgIHJldHVybiBvcmlnaW5hbEluc2VydEJlZm9yZS5jYWxsKHRoaXMsIG5vZGUsIGNoaWxkKSBhcyBUO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZCA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgTm9kZT4obm9kZTogTm9kZSwgY2hpbGQ6IFQpOiBUIHtcbiAgICBhcHBseVRyYWNrZWROb25jZShub2RlKTtcbiAgICByZXR1cm4gb3JpZ2luYWxSZXBsYWNlQ2hpbGQuY2FsbCh0aGlzLCBub2RlLCBjaGlsZCkgYXMgVDtcbiAgfTtcblxuICBFbGVtZW50LnByb3RvdHlwZS5pbnNlcnRBZGphY2VudEhUTUwgPSBmdW5jdGlvbiAocG9zaXRpb246IEluc2VydFBvc2l0aW9uLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkb2N1bWVudFJlZiA9IHRoaXMub3duZXJEb2N1bWVudDtcbiAgICBjb25zdCBub25jZSA9IGRvY3VtZW50UmVmID8gcGF0Y2hTdGF0ZS5ub25jZUJ5RG9jdW1lbnQuZ2V0KGRvY3VtZW50UmVmKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBwYXRjaGVkVGV4dCA9IG5vbmNlID8gaW5qZWN0Tm9uY2VJbnRvSHRtbCh0ZXh0LCBub25jZSkgOiB0ZXh0O1xuICAgIHJldHVybiBvcmlnaW5hbEluc2VydEFkamFjZW50SFRNTC5jYWxsKHRoaXMsIHBvc2l0aW9uLCBwYXRjaGVkVGV4dCk7XG4gIH07XG5cbiAgcGF0Y2hTdGF0ZS5wYXRjaGVkID0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDc3BOb25jZShkb2N1bWVudFJlZjogRG9jdW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBleHBsaWNpdE5vbmNlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWRFeHBsaWNpdE5vbmNlID0gbm9ybWFsaXplTm9uY2UoZXhwbGljaXROb25jZSk7XG4gIGlmIChyZXNvbHZlZEV4cGxpY2l0Tm9uY2UpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRFeHBsaWNpdE5vbmNlO1xuICB9XG5cbiAgaWYgKCFkb2N1bWVudFJlZikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzY3JpcHRXaXRoTm9uY2UgPSBkb2N1bWVudFJlZi5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50Pignc2NyaXB0W25vbmNlXScpO1xuICBjb25zdCBub25jZUZyb21TY3JpcHQgPSBub3JtYWxpemVOb25jZShzY3JpcHRXaXRoTm9uY2U/LmdldEF0dHJpYnV0ZSgnbm9uY2UnKSA/PyBzY3JpcHRXaXRoTm9uY2U/Lm5vbmNlKTtcbiAgaWYgKG5vbmNlRnJvbVNjcmlwdCkge1xuICAgIHJldHVybiBub25jZUZyb21TY3JpcHQ7XG4gIH1cblxuICBjb25zdCBub25jZU1ldGEgPSBkb2N1bWVudFJlZi5xdWVyeVNlbGVjdG9yPEhUTUxNZXRhRWxlbWVudD4oJ21ldGFbbmFtZT1cImNzcC1ub25jZVwiXScpO1xuICByZXR1cm4gbm9ybWFsaXplTm9uY2Uobm9uY2VNZXRhPy5jb250ZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTY3JpcHROb25jZShkb2N1bWVudFJlZjogRG9jdW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBleHBsaWNpdE5vbmNlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmVzb2x2ZWROb25jZSA9IHJlc29sdmVDc3BOb25jZShkb2N1bWVudFJlZiwgZXhwbGljaXROb25jZSk7XG4gIGNvbnN0IHBhdGNoU3RhdGUgPSBnZXREeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlKCk7XG5cbiAgaWYgKHJlc29sdmVkTm9uY2UpIHtcbiAgICAvLyBET00gcGF0Y2hpbmcgaXMgb25seSBuZWVkZWQgd2hlbiBhIENTUCBub25jZSBtdXN0IGJlIHByb3BhZ2F0ZWQuXG4gICAgcGF0Y2hEeW5hbWljU2NyaXB0SW5zZXJ0aW9uKCk7XG4gICAgY29uc3QgZWZmZWN0aXZlRG9jdW1lbnRSZWYgPSBkb2N1bWVudFJlZiA/PyBnbG9iYWxUaGlzLmRvY3VtZW50O1xuICAgIGlmIChlZmZlY3RpdmVEb2N1bWVudFJlZikge1xuICAgICAgcGF0Y2hTdGF0ZS5ub25jZUJ5RG9jdW1lbnQuc2V0KGVmZmVjdGl2ZURvY3VtZW50UmVmLCByZXNvbHZlZE5vbmNlKTtcbiAgICAgIGVuc3VyZU5vbmNlTXV0YXRpb25PYnNlcnZlcihlZmZlY3RpdmVEb2N1bWVudFJlZik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChkb2N1bWVudFJlZikge1xuICAgICAgcGF0Y2hTdGF0ZS5ub25jZUJ5RG9jdW1lbnQuZGVsZXRlKGRvY3VtZW50UmVmKTtcbiAgICAgIHRlYXJkb3duTm9uY2VNdXRhdGlvbk9ic2VydmVyKGRvY3VtZW50UmVmKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzb2x2ZWROb25jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRTY3JpcHQoZG9jdW1lbnRSZWY6IERvY3VtZW50LCBzcmM6IHN0cmluZywgb3B0aW9ucz86IFNjcmlwdExvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG5vbmNlID0gbm9ybWFsaXplTm9uY2Uob3B0aW9ucz8ubm9uY2UpO1xuICBjb25zdCBzdGF0dXNCeVNyYyA9IGdldFN0YXR1c0J5U3JjKGRvY3VtZW50UmVmKTtcbiAgY29uc3QgcGVuZGluZ0J5U3JjID0gZ2V0UGVuZGluZ0J5U3JjKGRvY3VtZW50UmVmKTtcbiAgY29uc3QgZXhpc3RpbmcgPSBkb2N1bWVudFJlZi5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50Pihgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWApO1xuXG4gIGlmIChleGlzdGluZykge1xuICAgIGFwcGx5U2NyaXB0Tm9uY2UoZXhpc3RpbmcsIG5vbmNlKTtcbiAgICBjb25zdCBzdGF0dXMgPSBzdGF0dXNCeVNyYy5nZXQoc3JjKTtcbiAgICBpZiAoc3RhdHVzID09PSAnbG9hZGVkJykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IHBlbmRpbmcgPSBwZW5kaW5nQnlTcmMuZ2V0KHNyYyk7XG4gICAgaWYgKHBlbmRpbmcpIHtcbiAgICAgIHJldHVybiBwZW5kaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIHN0YXR1c0J5U3JjLnNldChzcmMsICdsb2FkaW5nJyk7XG5cbiAgY29uc3QgcGVuZGluZyA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudFJlZi5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHQuc3JjID0gc3JjO1xuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XG4gICAgYXBwbHlTY3JpcHROb25jZShzY3JpcHQsIG5vbmNlKTtcbiAgICBzY3JpcHQub25sb2FkID0gKCkgPT4ge1xuICAgICAgc3RhdHVzQnlTcmMuc2V0KHNyYywgJ2xvYWRlZCcpO1xuICAgICAgcGVuZGluZ0J5U3JjLmRlbGV0ZShzcmMpO1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH07XG4gICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiB7XG4gICAgICBzdGF0dXNCeVNyYy5zZXQoc3JjLCAnZXJyb3InKTtcbiAgICAgIHBlbmRpbmdCeVNyYy5kZWxldGUoc3JjKTtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2FkIHNjcmlwdDogJHtzcmN9LiBDaGVjayBDU1AgYWxsb3dsaXN0IGFuZCBub25jZSBjb25maWd1cmF0aW9uLmApKTtcbiAgICB9O1xuICAgIGRvY3VtZW50UmVmLmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgfSk7XG5cbiAgcGVuZGluZ0J5U3JjLnNldChzcmMsIHBlbmRpbmcpO1xuICByZXR1cm4gcGVuZGluZztcbn1cbiJdfQ==
|
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLXNjcmlwdC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC1zY3JpcHQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFlMUYsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLE9BQU8sRUFBdUMsQ0FBQztBQUNyRixNQUFNLDBCQUEwQixHQUFHLElBQUksT0FBTyxFQUF3QyxDQUFDO0FBQ3ZGLE1BQU0sOEJBQThCLEdBQUcsd0NBQXdDLENBQUM7QUFFaEYsU0FBUyxjQUFjLENBQUMsV0FBcUI7SUFDM0MsSUFBSSxXQUFXLEdBQUcseUJBQXlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDOUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFdBQXFCO0lBQzVDLElBQUksWUFBWSxHQUFHLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1FBQ2hELDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLCtCQUErQjtJQUN0QyxNQUFNLFdBQVcsR0FBRyxVQUVuQixDQUFDO0lBRUYs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QyxDQUFDLENBQUM7SUFFSCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvQixPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5zdGFsbFZlbmRvcklubGluZUV2ZW50TWlncmF0aW9uIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtdmVuZG9yLWV2ZW50LW1pZ3JhdGlvbic7XHJcblxyXG50eXBlIFNjcmlwdFN0YXR1cyA9ICdsb2FkaW5nJyB8ICdsb2FkZWQnIHwgJ2Vycm9yJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2NyaXB0TG9hZE9wdGlvbnMge1xyXG4gIG5vbmNlPzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSB7XHJcbiAgbm9uY2VCeURvY3VtZW50OiBXZWFrTWFwPERvY3VtZW50LCBzdHJpbmc+O1xyXG4gIG9ic2VydmVyQnlEb2N1bWVudDogV2Vha01hcDxEb2N1bWVudCwgTXV0YXRpb25PYnNlcnZlcj47XHJcbiAgaW5saW5lQ2FwdGNoYVNjcmlwdEJ5RG9jdW1lbnQ6IFdlYWtNYXA8RG9jdW1lbnQsIFNldDxzdHJpbmc+PjtcclxuICBwYXRjaGVkOiBib29sZWFuO1xyXG59XHJcblxyXG5jb25zdCBTQ1JJUFRfU1RBVFVTX0JZX0RPQ1VNRU5UID0gbmV3IFdlYWtNYXA8RG9jdW1lbnQsIE1hcDxzdHJpbmcsIFNjcmlwdFN0YXR1cz4+KCk7XHJcbmNvbnN0IFNDUklQVF9QRU5ESU5HX0JZX0RPQ1VNRU5UID0gbmV3IFdlYWtNYXA8RG9jdW1lbnQsIE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+PigpO1xyXG5jb25zdCBEWU5BTUlDX1NDUklQVF9OT05DRV9TVEFURV9LRVkgPSAnX19zaWFyYVNoaWVsZER5bmFtaWNTY3JpcHROb25jZVN0YXRlX18nO1xyXG5cclxuZnVuY3Rpb24gZ2V0U3RhdHVzQnlTcmMoZG9jdW1lbnRSZWY6IERvY3VtZW50KTogTWFwPHN0cmluZywgU2NyaXB0U3RhdHVzPiB7XHJcbiAgbGV0IHN0YXR1c0J5U3JjID0gU0NSSVBUX1NUQVRVU19CWV9ET0NVTUVOVC5nZXQoZG9jdW1lbnRSZWYpO1xyXG4gIGlmICghc3RhdHVzQnlTcmMpIHtcclxuICAgIHN0YXR1c0J5U3JjID0gbmV3IE1hcDxzdHJpbmcsIFNjcmlwdFN0YXR1cz4oKTtcclxuICAgIFNDUklQVF9TVEFUVVNfQllfRE9DVU1FTlQuc2V0KGRvY3VtZW50UmVmLCBzdGF0dXNCeVNyYyk7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gc3RhdHVzQnlTcmM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFBlbmRpbmdCeVNyYyhkb2N1bWVudFJlZjogRG9jdW1lbnQpOiBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PiB7XHJcbiAgbGV0IHBlbmRpbmdCeVNyYyA9IFNDUklQVF9QRU5ESU5HX0JZX0RPQ1VNRU5ULmdldChkb2N1bWVudFJlZik7XHJcbiAgaWYgKCFwZW5kaW5nQnlTcmMpIHtcclxuICAgIHBlbmRpbmdCeVNyYyA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHZvaWQ+PigpO1xyXG4gICAgU0NSSVBUX1BFTkRJTkdfQllfRE9DVU1FTlQuc2V0KGRvY3VtZW50UmVmLCBwZW5kaW5nQnlTcmMpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHBlbmRpbmdCeVNyYztcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpOiBEeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlIHtcclxuICBjb25zdCBnbG9iYWxTdGF0ZSA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XHJcbiAgICBbRFlOQU1JQ19TQ1JJUFRfTk9OQ0VfU1RBVEVfS0VZXT86IER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGU7XHJcbiAgfTtcclxuXHJcbiAgaWYgKCFnbG9iYWxTdGF0ZVtEWU5BTUlDX1NDUklQVF9OT05DRV9TVEFURV9LRVldKSB7XHJcbiAgICBnbG9iYWxTdGF0ZVtEWU5BTUlDX1NDUklQVF9OT05DRV9TVEFURV9LRVldID0ge1xyXG4gICAgICBub25jZUJ5RG9jdW1lbnQ6IG5ldyBXZWFrTWFwPERvY3VtZW50LCBzdHJpbmc+KCksXHJcbiAgICAgIG9ic2VydmVyQnlEb2N1bWVudDogbmV3IFdlYWtNYXA8RG9jdW1lbnQsIE11dGF0aW9uT2JzZXJ2ZXI+KCksXHJcbiAgICAgIGlubGluZUNhcHRjaGFTY3JpcHRCeURvY3VtZW50OiBuZXcgV2Vha01hcDxEb2N1bWVudCwgU2V0PHN0cmluZz4+KCksXHJcbiAgICAgIHBhdGNoZWQ6IGZhbHNlLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHJldHVybiBnbG9iYWxTdGF0ZVtEWU5BTUlDX1NDUklQVF9OT05DRV9TVEFURV9LRVldO1xyXG59XHJcblxyXG5mdW5jdGlvbiBub3JtYWxpemVOb25jZShub25jZT86IHN0cmluZyB8IG51bGwpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IHRyaW1tZWQgPSBub25jZT8udHJpbSgpO1xyXG4gIHJldHVybiB0cmltbWVkID8gdHJpbW1lZCA6IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZnVuY3Rpb24gaXNTY3JpcHRFbGVtZW50KG5vZGU6IE5vZGUpOiBub2RlIGlzIEhUTUxTY3JpcHRFbGVtZW50IHtcclxuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzY3JpcHQnO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1N0eWxlRWxlbWVudChub2RlOiBOb2RlKTogbm9kZSBpcyBIVE1MU3R5bGVFbGVtZW50IHtcclxuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgbm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdzdHlsZSc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzU3R5bGVzaGVldExpbmtFbGVtZW50KG5vZGU6IE5vZGUpOiBub2RlIGlzIEhUTUxMaW5rRWxlbWVudCB7XHJcbiAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8IG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAnbGluaycpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgY29uc3QgcmVsID0gKG5vZGUuZ2V0QXR0cmlidXRlKCdyZWwnKSA/PyAnJykudG9Mb3dlckNhc2UoKTtcclxuICByZXR1cm4gcmVsID09PSAnc3R5bGVzaGVldCc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhcHBseVNjcmlwdE5vbmNlKHNjcmlwdDogSFRNTFNjcmlwdEVsZW1lbnQsIG5vbmNlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgY29uc3QgcmVzb2x2ZWROb25jZSA9IG5vcm1hbGl6ZU5vbmNlKG5vbmNlKTtcclxuICBpZiAoIXJlc29sdmVkTm9uY2UpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHNjcmlwdC5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgcmVzb2x2ZWROb25jZSk7XHJcbiAgc2NyaXB0Lm5vbmNlID0gcmVzb2x2ZWROb25jZTtcclxuXHJcbiAgLy8gU29tZSB2ZW5kb3IgSFRNTCBmcmFnbWVudHMgaW5jbHVkZSBpbmxpbmUgc2NyaXB0cyB0aGF0IGV4ZWN1dGUgaW1tZWRpYXRlbHkgZHVyaW5nIGluc2VydGlvbi5cclxuICAvLyBJbiBzdHJpY3QgQ1NQIG1vZGUgdGhlc2UgcnVuIHdpdGggYSBub25jZSwgYnV0IGNhbiBzdGlsbCByYWNlIERPTSBpbnNlcnRpb24gYW5kIGNyYXNoXHJcbiAgLy8gKGUuZy4gYG51bGwucXVlcnlTZWxlY3RvciguLi4pYCkuIFdlIGRlZmVuc2l2ZWx5IHJldHJ5IG9uY2Ugb24gZmFpbHVyZS5cclxuICBpZiAoIXNjcmlwdC5zcmMpIHtcclxuICAgIGNvbnN0IGJvZHkgPSBzY3JpcHQudGV4dENvbnRlbnQgPz8gJyc7XHJcbiAgICBpZiAoYm9keSAmJiAhYm9keS5pbmNsdWRlcygnX19zaWFyYVNoaWVsZElubGluZVJldHJ5X18nKSkge1xyXG4gICAgICBzY3JpcHQudGV4dENvbnRlbnQgPSBgKGZ1bmN0aW9uKCl7XFxuYCArXHJcbiAgICAgICAgYCAgdmFyIF9fc2lhcmFTaGllbGRJbmxpbmVSZXRyeV9fID0gdHJ1ZTtcXG5gICtcclxuICAgICAgICBgICBmdW5jdGlvbiBfX3J1bigpe1xcbiR7Ym9keX1cXG4gIH1cXG5gICtcclxuICAgICAgICBgICB0cnkgeyBfX3J1bigpOyB9IGNhdGNoIChlKSB7XFxuYCArXHJcbiAgICAgICAgYCAgICB0cnkgeyBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHRyeSB7IF9fcnVuKCk7IH0gY2F0Y2ggKF9lKSB7fSB9LCAwKTsgfSBjYXRjaCAoX3QpIHt9XFxuYCArXHJcbiAgICAgICAgYCAgfVxcbmAgK1xyXG4gICAgICAgIGB9KSgpO2A7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBhcHBseVN0eWxlTm9uY2Uoc3R5bGU6IEhUTUxTdHlsZUVsZW1lbnQsIG5vbmNlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgY29uc3QgcmVzb2x2ZWROb25jZSA9IG5vcm1hbGl6ZU5vbmNlKG5vbmNlKTtcclxuICBpZiAoIXJlc29sdmVkTm9uY2UpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIHN0eWxlLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCByZXNvbHZlZE5vbmNlKTtcclxuICBzdHlsZS5ub25jZSA9IHJlc29sdmVkTm9uY2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwcGx5TGlua05vbmNlKGxpbms6IEhUTUxMaW5rRWxlbWVudCwgbm9uY2U/OiBzdHJpbmcpOiB2b2lkIHtcclxuICBjb25zdCByZXNvbHZlZE5vbmNlID0gbm9ybWFsaXplTm9uY2Uobm9uY2UpO1xyXG4gIGlmICghcmVzb2x2ZWROb25jZSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgbGluay5zZXRBdHRyaWJ1dGUoJ25vbmNlJywgcmVzb2x2ZWROb25jZSk7XHJcbiAgLy8gYEhUTUxMaW5rRWxlbWVudC5ub25jZWAgZXhpc3RzIGluIG1vZGVybiBicm93c2Vycy5cclxuICAobGluayBhcyBIVE1MTGlua0VsZW1lbnQgJiB7IG5vbmNlPzogc3RyaW5nIH0pLm5vbmNlID0gcmVzb2x2ZWROb25jZTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXBwbHlOb25jZVRvTm9kZShub2RlOiBOb2RlLCBub25jZT86IHN0cmluZyk6IHZvaWQge1xyXG4gIGlmIChpc1NjcmlwdEVsZW1lbnQobm9kZSkpIHtcclxuICAgIGFwcGx5U2NyaXB0Tm9uY2Uobm9kZSwgbm9uY2UpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBpZiAoaXNTdHlsZUVsZW1lbnQobm9kZSkpIHtcclxuICAgIGFwcGx5U3R5bGVOb25jZShub2RlLCBub25jZSk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIGlmIChpc1N0eWxlc2hlZXRMaW5rRWxlbWVudChub2RlKSkge1xyXG4gICAgYXBwbHlMaW5rTm9uY2Uobm9kZSwgbm9uY2UpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gYXBwbHlUcmFja2VkTm9uY2Uobm9kZTogTm9kZSk6IHZvaWQge1xyXG4gIGNvbnN0IGRvY3VtZW50UmVmID0gbm9kZS5vd25lckRvY3VtZW50O1xyXG4gIGlmICghZG9jdW1lbnRSZWYpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGNvbnN0IG5vbmNlID0gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpLm5vbmNlQnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpO1xyXG4gIGFwcGx5Tm9uY2VUb05vZGUobm9kZSwgbm9uY2UpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRUcmFja2VkSW5saW5lQ2FwdGNoYVNjcmlwdHMoZG9jdW1lbnRSZWY6IERvY3VtZW50KTogU2V0PHN0cmluZz4ge1xyXG4gIGNvbnN0IHBhdGNoU3RhdGUgPSBnZXREeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlKCk7XHJcbiAgbGV0IHRyYWNrZWRTY3JpcHRzID0gcGF0Y2hTdGF0ZS5pbmxpbmVDYXB0Y2hhU2NyaXB0QnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpO1xyXG4gIGlmICghdHJhY2tlZFNjcmlwdHMpIHtcclxuICAgIHRyYWNrZWRTY3JpcHRzID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICBwYXRjaFN0YXRlLmlubGluZUNhcHRjaGFTY3JpcHRCeURvY3VtZW50LnNldChkb2N1bWVudFJlZiwgdHJhY2tlZFNjcmlwdHMpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHRyYWNrZWRTY3JpcHRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzaG91bGRTa2lwRHVwbGljYXRlSW5saW5lQ2FwdGNoYVNjcmlwdChub2RlOiBOb2RlKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFpc1NjcmlwdEVsZW1lbnQobm9kZSkgfHwgQm9vbGVhbihub2RlLnNyYykpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHNjcmlwdEJvZHkgPSAobm9kZS50ZXh0Q29udGVudCA/PyAnJykudHJpbSgpO1xyXG4gIGlmICghc2NyaXB0Qm9keSB8fCAhc2NyaXB0Qm9keS5pbmNsdWRlcygnY3VycmVudExhbmdDb2RlJykpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IGRvY3VtZW50UmVmID0gbm9kZS5vd25lckRvY3VtZW50O1xyXG4gIGlmICghZG9jdW1lbnRSZWYpIHtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHRyYWNrZWRTY3JpcHRzID0gZ2V0VHJhY2tlZElubGluZUNhcHRjaGFTY3JpcHRzKGRvY3VtZW50UmVmKTtcclxuICBpZiAodHJhY2tlZFNjcmlwdHMuaGFzKHNjcmlwdEJvZHkpKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHRyYWNrZWRTY3JpcHRzLmFkZChzY3JpcHRCb2R5KTtcclxuICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdhbGtBbmRBcHBseU5vbmNlKHJvb3Q6IE5vZGUsIG5vbmNlPzogc3RyaW5nKTogdm9pZCB7XHJcbiAgaWYgKCFub25jZSkgcmV0dXJuO1xyXG5cclxuICAvLyBGYXN0IHBhdGg6IHJvb3QgaXRzZWxmIGlzIG5vbmNlYWJsZS5cclxuICBpZiAoaXNTY3JpcHRFbGVtZW50KHJvb3QpIHx8IGlzU3R5bGVFbGVtZW50KHJvb3QpIHx8IGlzU3R5bGVzaGVldExpbmtFbGVtZW50KHJvb3QpKSB7XHJcbiAgICBhcHBseU5vbmNlVG9Ob2RlKHJvb3QsIG5vbmNlKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIENvbW1vbiBwYXRoIGZvciBqUXVlcnk6IGFwcGVuZCBEb2N1bWVudEZyYWdtZW50IGNvbnRhaW5pbmcgbm9kZXMgY3JlYXRlZCB2aWEgSFRNTCBwYXJzaW5nLlxyXG4gIGlmIChyb290IGluc3RhbmNlb2YgRWxlbWVudCB8fCByb290IGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudCkge1xyXG4gICAgY29uc3Qgbm9uY2VhYmxlID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NjcmlwdCxzdHlsZSxsaW5rW3JlbD1cInN0eWxlc2hlZXRcIl0nKSA/PyBbXTtcclxuICAgIGZvciAoY29uc3QgZWwgb2Ygbm9uY2VhYmxlKSB7XHJcbiAgICAgIGFwcGx5Tm9uY2VUb05vZGUoZWwgYXMgdW5rbm93biBhcyBOb2RlLCBub25jZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBlbnN1cmVOb25jZU11dGF0aW9uT2JzZXJ2ZXIoZG9jdW1lbnRSZWY6IERvY3VtZW50KTogdm9pZCB7XHJcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUoKTtcclxuICBpZiAocGF0Y2hTdGF0ZS5vYnNlcnZlckJ5RG9jdW1lbnQuZ2V0KGRvY3VtZW50UmVmKSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigocmVjb3JkcykgPT4ge1xyXG4gICAgY29uc3Qgbm9uY2UgPSBwYXRjaFN0YXRlLm5vbmNlQnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpO1xyXG4gICAgaWYgKCFub25jZSkgcmV0dXJuO1xyXG5cclxuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcclxuICAgICAgZm9yIChjb25zdCBub2RlIG9mIHJlY29yZC5hZGRlZE5vZGVzKSB7XHJcbiAgICAgICAgd2Fsa0FuZEFwcGx5Tm9uY2Uobm9kZSwgbm9uY2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIC8vIE9ic2VydmUgdGhlIGZ1bGwgZG9jdW1lbnQgYmVjYXVzZSBzY3JpcHRzIGNhbiBiZSBpbmplY3RlZCBpbnRvIGJvZHkvaGVhZCBieSB2ZW5kb3IvalF1ZXJ5LlxyXG4gIGNvbnN0IHJvb3QgPSBkb2N1bWVudFJlZi5kb2N1bWVudEVsZW1lbnQgPz8gZG9jdW1lbnRSZWY7XHJcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShyb290LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcclxuICBwYXRjaFN0YXRlLm9ic2VydmVyQnlEb2N1bWVudC5zZXQoZG9jdW1lbnRSZWYsIG9ic2VydmVyKTtcclxufVxyXG5cclxuZnVuY3Rpb24gdGVhcmRvd25Ob25jZU11dGF0aW9uT2JzZXJ2ZXIoZG9jdW1lbnRSZWY6IERvY3VtZW50KTogdm9pZCB7XHJcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUoKTtcclxuICBjb25zdCBvYnNlcnZlciA9IHBhdGNoU3RhdGUub2JzZXJ2ZXJCeURvY3VtZW50LmdldChkb2N1bWVudFJlZik7XHJcbiAgaWYgKCFvYnNlcnZlcikgcmV0dXJuO1xyXG4gIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICBwYXRjaFN0YXRlLm9ic2VydmVyQnlEb2N1bWVudC5kZWxldGUoZG9jdW1lbnRSZWYpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbmplY3ROb25jZUludG9IdG1sKGh0bWw6IHN0cmluZywgbm9uY2U6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgY29uc3QgcmVzb2x2ZWROb25jZSA9IG5vcm1hbGl6ZU5vbmNlKG5vbmNlKTtcclxuICBpZiAoIXJlc29sdmVkTm9uY2UpIHJldHVybiBodG1sO1xyXG5cclxuICAvLyBJZiB0YWcgYWxyZWFkeSBpbmNsdWRlcyBub25jZSwgbGVhdmUgaXQuXHJcbiAgY29uc3Qgd2l0aE5vbmNlQXR0ciA9IGAgbm9uY2U9XCIke3Jlc29sdmVkTm9uY2V9XCJgO1xyXG5cclxuICBjb25zdCBhZGROb25jZVRvVGFnID0gKHRhZzogJ3NjcmlwdCcgfCAnc3R5bGUnKSA9PiB7XHJcbiAgICBjb25zdCBvcGVuVGFnID0gbmV3IFJlZ0V4cChgPCR7dGFnfShcXFxcc1tePl0qPyk/PmAsICdnaScpO1xyXG4gICAgcmV0dXJuIChpbnB1dDogc3RyaW5nKSA9PlxyXG4gICAgICBpbnB1dC5yZXBsYWNlKG9wZW5UYWcsIChtYXRjaCkgPT4ge1xyXG4gICAgICAgIGlmICgvW1xcc1wiJ11ub25jZVxccyo9Ly50ZXN0KG1hdGNoKSkgcmV0dXJuIG1hdGNoO1xyXG4gICAgICAgIC8vIEluc2VydCBub25jZSBiZWZvcmUgY2xvc2luZyBgPmBcclxuICAgICAgICByZXR1cm4gbWF0Y2gucmVwbGFjZSgvPiQvLCBgJHt3aXRoTm9uY2VBdHRyfT5gKTtcclxuICAgICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgLy8gRm9yIGxpbmsgcmVsPXN0eWxlc2hlZXQsIGFkZCBub25jZSB3aGVuIG1pc3NpbmcuXHJcbiAgY29uc3QgbGlua09wZW5UYWcgPSAvPGxpbmtcXGJbXj5dKj4vZ2k7XHJcbiAgY29uc3QgYWRkTm9uY2VUb1N0eWxlc2hlZXRMaW5rID0gKGlucHV0OiBzdHJpbmcpID0+XHJcbiAgICBpbnB1dC5yZXBsYWNlKGxpbmtPcGVuVGFnLCAobWF0Y2gpID0+IHtcclxuICAgICAgaWYgKC9bXFxzXCInXW5vbmNlXFxzKj0vLnRlc3QobWF0Y2gpKSByZXR1cm4gbWF0Y2g7XHJcbiAgICAgIGlmICghL1xcYnJlbFxccyo9XFxzKltcIiddP3N0eWxlc2hlZXRbXCInXT8vaS50ZXN0KG1hdGNoKSkgcmV0dXJuIG1hdGNoO1xyXG4gICAgICByZXR1cm4gbWF0Y2gucmVwbGFjZSgvPiQvLCBgJHt3aXRoTm9uY2VBdHRyfT5gKTtcclxuICAgIH0pO1xyXG5cclxuICByZXR1cm4gYWRkTm9uY2VUb1N0eWxlc2hlZXRMaW5rKGFkZE5vbmNlVG9UYWcoJ3N0eWxlJykoYWRkTm9uY2VUb1RhZygnc2NyaXB0JykoaHRtbCkpKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGF0Y2hEeW5hbWljU2NyaXB0SW5zZXJ0aW9uKCk6IHZvaWQge1xyXG4gIGNvbnN0IHBhdGNoU3RhdGUgPSBnZXREeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlKCk7XHJcbiAgaWYgKHBhdGNoU3RhdGUucGF0Y2hlZCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgY29uc3Qgb3JpZ2luYWxBcHBlbmRDaGlsZCA9IE5vZGUucHJvdG90eXBlLmFwcGVuZENoaWxkO1xyXG4gIGNvbnN0IG9yaWdpbmFsSW5zZXJ0QmVmb3JlID0gTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlO1xyXG4gIGNvbnN0IG9yaWdpbmFsUmVwbGFjZUNoaWxkID0gTm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkO1xyXG4gIGNvbnN0IG9yaWdpbmFsSW5zZXJ0QWRqYWNlbnRIVE1MID0gRWxlbWVudC5wcm90b3R5cGUuaW5zZXJ0QWRqYWNlbnRIVE1MO1xyXG5cclxuICBOb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZCA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgTm9kZT4obm9kZTogVCk6IFQge1xyXG4gICAgLy8gVmVuZG9yIGNhcHRjaGEgaW5qZWN0cyBhbiBpbmxpbmUgc25pcHBldCB3aXRoIGBjdXJyZW50TGFuZ0NvZGVgIHRoYXQgY3Jhc2hlcyB3aGVuIGFwcGVuZGVkIHR3aWNlLlxyXG4gICAgaWYgKHNob3VsZFNraXBEdXBsaWNhdGVJbmxpbmVDYXB0Y2hhU2NyaXB0KG5vZGUpKSB7XHJcbiAgICAgIHJldHVybiBub2RlO1xyXG4gICAgfVxyXG4gICAgYXBwbHlUcmFja2VkTm9uY2Uobm9kZSk7XHJcbiAgICByZXR1cm4gb3JpZ2luYWxBcHBlbmRDaGlsZC5jYWxsKHRoaXMsIG5vZGUpIGFzIFQ7XHJcbiAgfTtcclxuXHJcbiAgTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBOb2RlPihub2RlOiBULCBjaGlsZDogTm9kZSB8IG51bGwpOiBUIHtcclxuICAgIGlmIChzaG91bGRTa2lwRHVwbGljYXRlSW5saW5lQ2FwdGNoYVNjcmlwdChub2RlKSkge1xyXG4gICAgICByZXR1cm4gbm9kZTtcclxuICAgIH1cclxuICAgIGFwcGx5VHJhY2tlZE5vbmNlKG5vZGUpO1xyXG4gICAgcmV0dXJuIG9yaWdpbmFsSW5zZXJ0QmVmb3JlLmNhbGwodGhpcywgbm9kZSwgY2hpbGQpIGFzIFQ7XHJcbiAgfTtcclxuXHJcbiAgTm9kZS5wcm90b3R5cGUucmVwbGFjZUNoaWxkID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBOb2RlPihub2RlOiBOb2RlLCBjaGlsZDogVCk6IFQge1xyXG4gICAgYXBwbHlUcmFja2VkTm9uY2Uobm9kZSk7XHJcbiAgICByZXR1cm4gb3JpZ2luYWxSZXBsYWNlQ2hpbGQuY2FsbCh0aGlzLCBub2RlLCBjaGlsZCkgYXMgVDtcclxuICB9O1xyXG5cclxuICBFbGVtZW50LnByb3RvdHlwZS5pbnNlcnRBZGphY2VudEhUTUwgPSBmdW5jdGlvbiAocG9zaXRpb246IEluc2VydFBvc2l0aW9uLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRvY3VtZW50UmVmID0gdGhpcy5vd25lckRvY3VtZW50O1xyXG4gICAgY29uc3Qgbm9uY2UgPSBkb2N1bWVudFJlZiA/IHBhdGNoU3RhdGUubm9uY2VCeURvY3VtZW50LmdldChkb2N1bWVudFJlZikgOiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBwYXRjaGVkVGV4dCA9IG5vbmNlID8gaW5qZWN0Tm9uY2VJbnRvSHRtbCh0ZXh0LCBub25jZSkgOiB0ZXh0O1xyXG4gICAgcmV0dXJuIG9yaWdpbmFsSW5zZXJ0QWRqYWNlbnRIVE1MLmNhbGwodGhpcywgcG9zaXRpb24sIHBhdGNoZWRUZXh0KTtcclxuICB9O1xyXG5cclxuICBwYXRjaFN0YXRlLnBhdGNoZWQgPSB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNzcE5vbmNlKGRvY3VtZW50UmVmOiBEb2N1bWVudCB8IG51bGwgfCB1bmRlZmluZWQsIGV4cGxpY2l0Tm9uY2U/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IHJlc29sdmVkRXhwbGljaXROb25jZSA9IG5vcm1hbGl6ZU5vbmNlKGV4cGxpY2l0Tm9uY2UpO1xyXG4gIGlmIChyZXNvbHZlZEV4cGxpY2l0Tm9uY2UpIHtcclxuICAgIHJldHVybiByZXNvbHZlZEV4cGxpY2l0Tm9uY2U7XHJcbiAgfVxyXG5cclxuICBpZiAoIWRvY3VtZW50UmVmKSB7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgY29uc3Qgc2NyaXB0V2l0aE5vbmNlID0gZG9jdW1lbnRSZWYucXVlcnlTZWxlY3RvcjxIVE1MU2NyaXB0RWxlbWVudD4oJ3NjcmlwdFtub25jZV0nKTtcclxuICBjb25zdCBub25jZUZyb21TY3JpcHQgPSBub3JtYWxpemVOb25jZShzY3JpcHRXaXRoTm9uY2U/LmdldEF0dHJpYnV0ZSgnbm9uY2UnKSA/PyBzY3JpcHRXaXRoTm9uY2U/Lm5vbmNlKTtcclxuICBpZiAobm9uY2VGcm9tU2NyaXB0KSB7XHJcbiAgICByZXR1cm4gbm9uY2VGcm9tU2NyaXB0O1xyXG4gIH1cclxuXHJcbiAgY29uc3Qgbm9uY2VNZXRhID0gZG9jdW1lbnRSZWYucXVlcnlTZWxlY3RvcjxIVE1MTWV0YUVsZW1lbnQ+KCdtZXRhW25hbWU9XCJjc3Atbm9uY2VcIl0nKTtcclxuICByZXR1cm4gbm9ybWFsaXplTm9uY2Uobm9uY2VNZXRhPy5jb250ZW50KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTY3JpcHROb25jZShkb2N1bWVudFJlZjogRG9jdW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBleHBsaWNpdE5vbmNlPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICBjb25zdCByZXNvbHZlZE5vbmNlID0gcmVzb2x2ZUNzcE5vbmNlKGRvY3VtZW50UmVmLCBleHBsaWNpdE5vbmNlKTtcclxuICBjb25zdCBwYXRjaFN0YXRlID0gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpO1xyXG5cclxuICBpZiAocmVzb2x2ZWROb25jZSkge1xyXG4gICAgLy8gRE9NIHBhdGNoaW5nIGlzIG9ubHkgbmVlZGVkIHdoZW4gYSBDU1Agbm9uY2UgbXVzdCBiZSBwcm9wYWdhdGVkLlxyXG4gICAgcGF0Y2hEeW5hbWljU2NyaXB0SW5zZXJ0aW9uKCk7XHJcbiAgICBjb25zdCBlZmZlY3RpdmVEb2N1bWVudFJlZiA9IGRvY3VtZW50UmVmID8/IGdsb2JhbFRoaXMuZG9jdW1lbnQ7XHJcbiAgICBpZiAoZWZmZWN0aXZlRG9jdW1lbnRSZWYpIHtcclxuICAgICAgcGF0Y2hTdGF0ZS5ub25jZUJ5RG9jdW1lbnQuc2V0KGVmZmVjdGl2ZURvY3VtZW50UmVmLCByZXNvbHZlZE5vbmNlKTtcclxuICAgICAgZW5zdXJlTm9uY2VNdXRhdGlvbk9ic2VydmVyKGVmZmVjdGl2ZURvY3VtZW50UmVmKTtcclxuICAgICAgaW5zdGFsbFZlbmRvcklubGluZUV2ZW50TWlncmF0aW9uKGVmZmVjdGl2ZURvY3VtZW50UmVmKTtcclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKGRvY3VtZW50UmVmKSB7XHJcbiAgICAgIHBhdGNoU3RhdGUubm9uY2VCeURvY3VtZW50LmRlbGV0ZShkb2N1bWVudFJlZik7XHJcbiAgICAgIHRlYXJkb3duTm9uY2VNdXRhdGlvbk9ic2VydmVyKGRvY3VtZW50UmVmKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiByZXNvbHZlZE5vbmNlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9hZFNjcmlwdChkb2N1bWVudFJlZjogRG9jdW1lbnQsIHNyYzogc3RyaW5nLCBvcHRpb25zPzogU2NyaXB0TG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICBjb25zdCBub25jZSA9IG5vcm1hbGl6ZU5vbmNlKG9wdGlvbnM/Lm5vbmNlKTtcclxuICBjb25zdCBzdGF0dXNCeVNyYyA9IGdldFN0YXR1c0J5U3JjKGRvY3VtZW50UmVmKTtcclxuICBjb25zdCBwZW5kaW5nQnlTcmMgPSBnZXRQZW5kaW5nQnlTcmMoZG9jdW1lbnRSZWYpO1xyXG4gIGNvbnN0IGV4aXN0aW5nID0gZG9jdW1lbnRSZWYucXVlcnlTZWxlY3RvcjxIVE1MU2NyaXB0RWxlbWVudD4oYHNjcmlwdFtzcmM9XCIke3NyY31cIl1gKTtcclxuXHJcbiAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgICBhcHBseVNjcmlwdE5vbmNlKGV4aXN0aW5nLCBub25jZSk7XHJcbiAgICBjb25zdCBzdGF0dXMgPSBzdGF0dXNCeVNyYy5nZXQoc3JjKTtcclxuICAgIGlmIChzdGF0dXMgPT09ICdsb2FkZWQnKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwZW5kaW5nID0gcGVuZGluZ0J5U3JjLmdldChzcmMpO1xyXG4gICAgaWYgKHBlbmRpbmcpIHtcclxuICAgICAgcmV0dXJuIHBlbmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gIH1cclxuXHJcbiAgc3RhdHVzQnlTcmMuc2V0KHNyYywgJ2xvYWRpbmcnKTtcclxuXHJcbiAgY29uc3QgcGVuZGluZyA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgc2NyaXB0LnNyYyA9IHNyYztcclxuICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XHJcbiAgICBhcHBseVNjcmlwdE5vbmNlKHNjcmlwdCwgbm9uY2UpO1xyXG4gICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgc3RhdHVzQnlTcmMuc2V0KHNyYywgJ2xvYWRlZCcpO1xyXG4gICAgICBwZW5kaW5nQnlTcmMuZGVsZXRlKHNyYyk7XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH07XHJcbiAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcclxuICAgICAgc3RhdHVzQnlTcmMuc2V0KHNyYywgJ2Vycm9yJyk7XHJcbiAgICAgIHBlbmRpbmdCeVNyYy5kZWxldGUoc3JjKTtcclxuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgc2NyaXB0OiAke3NyY30uIENoZWNrIENTUCBhbGxvd2xpc3QgYW5kIG5vbmNlIGNvbmZpZ3VyYXRpb24uYCkpO1xyXG4gICAgfTtcclxuICAgIGRvY3VtZW50UmVmLmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICB9KTtcclxuXHJcbiAgcGVuZGluZ0J5U3JjLnNldChzcmMsIHBlbmRpbmcpO1xyXG4gIHJldHVybiBwZW5kaW5nO1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { getSiaraShieldGlobals } from './siara-shield.globals';
|
|
2
|
+
const VENDOR_EVENT_MIGRATION_KEY = '__siaraShieldVendorEventMigrationInstalled__';
|
|
3
|
+
const MIGRATED_MARKER = 'data-siara-shield-event-migrated';
|
|
4
|
+
const INLINE_EVENT_ATTRIBUTES = [
|
|
5
|
+
'onclick',
|
|
6
|
+
'ondblclick',
|
|
7
|
+
'onmousedown',
|
|
8
|
+
'onmouseup',
|
|
9
|
+
'onkeydown',
|
|
10
|
+
'onkeyup',
|
|
11
|
+
'onchange',
|
|
12
|
+
'oninput',
|
|
13
|
+
'onsubmit',
|
|
14
|
+
];
|
|
15
|
+
function toDomEventName(attributeName) {
|
|
16
|
+
return attributeName.slice(2);
|
|
17
|
+
}
|
|
18
|
+
function resolveGlobalCallable(name) {
|
|
19
|
+
const globals = getSiaraShieldGlobals();
|
|
20
|
+
const candidate = globals[name];
|
|
21
|
+
return typeof candidate === 'function' ? candidate : undefined;
|
|
22
|
+
}
|
|
23
|
+
function invokeWindowOpenExpression(expression) {
|
|
24
|
+
const match = /^window\.open\(\s*(['"])(.*?)\1\s*(?:,\s*(['"])(.*?)\3\s*)?\)(?:\.focus\(\))?;?$/i.exec(expression);
|
|
25
|
+
if (!match) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
const targetWindow = globalThis.open(match[2], match[4] || '_blank');
|
|
29
|
+
targetWindow?.focus();
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
function invokeGlobalFunctionExpression(expression) {
|
|
33
|
+
const match = /^([_$a-zA-Z][\w$]*)\((.*)\);?$/s.exec(expression);
|
|
34
|
+
if (!match) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
const fn = resolveGlobalCallable(match[1]);
|
|
38
|
+
if (!fn) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
const args = match[2].trim();
|
|
42
|
+
if (!args) {
|
|
43
|
+
fn();
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
if (/^(['"]).*\1$/.test(args)) {
|
|
47
|
+
fn(args.slice(1, -1));
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
fn();
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
function invokeInlineEventExpression(expression) {
|
|
54
|
+
const trimmed = expression.trim();
|
|
55
|
+
if (!trimmed) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
for (const part of trimmed.split(';')) {
|
|
59
|
+
const statement = part.trim();
|
|
60
|
+
if (!statement) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (invokeWindowOpenExpression(statement) || invokeGlobalFunctionExpression(statement)) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
function migrateInlineEventAttribute(element, attributeName) {
|
|
69
|
+
const expression = element.getAttribute(attributeName);
|
|
70
|
+
if (!expression) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
element.removeAttribute(attributeName);
|
|
74
|
+
const eventName = toDomEventName(attributeName);
|
|
75
|
+
element.addEventListener(eventName, (event) => {
|
|
76
|
+
if (eventName === 'submit') {
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
}
|
|
79
|
+
invokeInlineEventExpression(expression);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
export function migrateVendorInlineEventAttributes(root) {
|
|
83
|
+
if (root instanceof HTMLElement && root.hasAttribute(MIGRATED_MARKER)) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const elements = [];
|
|
87
|
+
if (root instanceof HTMLElement) {
|
|
88
|
+
elements.push(root);
|
|
89
|
+
}
|
|
90
|
+
if (root instanceof Element || root instanceof Document || root instanceof DocumentFragment) {
|
|
91
|
+
elements.push(...Array.from(root.querySelectorAll('[onclick],[ondblclick],[onmousedown],[onmouseup],[onkeydown],[onkeyup],[onchange],[oninput],[onsubmit]')));
|
|
92
|
+
}
|
|
93
|
+
for (const element of elements) {
|
|
94
|
+
if (element.hasAttribute(MIGRATED_MARKER)) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
for (const attributeName of INLINE_EVENT_ATTRIBUTES) {
|
|
98
|
+
migrateInlineEventAttribute(element, attributeName);
|
|
99
|
+
}
|
|
100
|
+
element.setAttribute(MIGRATED_MARKER, 'true');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
export function installVendorInlineEventMigration(documentRef) {
|
|
104
|
+
const globals = globalThis;
|
|
105
|
+
if (globals[VENDOR_EVENT_MIGRATION_KEY]) {
|
|
106
|
+
migrateVendorInlineEventAttributes(documentRef);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const observer = new MutationObserver((records) => {
|
|
110
|
+
for (const record of records) {
|
|
111
|
+
if (record.type === 'attributes' && record.target instanceof HTMLElement) {
|
|
112
|
+
migrateVendorInlineEventAttributes(record.target);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
for (const node of record.addedNodes) {
|
|
116
|
+
migrateVendorInlineEventAttributes(node);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
const root = documentRef.documentElement ?? documentRef;
|
|
121
|
+
observer.observe(root, {
|
|
122
|
+
childList: true,
|
|
123
|
+
subtree: true,
|
|
124
|
+
attributes: true,
|
|
125
|
+
attributeFilter: [...INLINE_EVENT_ATTRIBUTES],
|
|
126
|
+
});
|
|
127
|
+
migrateVendorInlineEventAttributes(documentRef);
|
|
128
|
+
globals[VENDOR_EVENT_MIGRATION_KEY] = true;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLXZlbmRvci1ldmVudC1taWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zaWFyYXNoaWVsZC13b3Jrc3BhY2Uvc3JjL2xpYi9zaWFyYS1zaGllbGQtdmVuZG9yLWV2ZW50LW1pZ3JhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUvRCxNQUFNLDBCQUEwQixHQUFHLDhDQUE4QyxDQUFDO0FBQ2xGLE1BQU0sZUFBZSxHQUFHLGtDQUFrQyxDQUFDO0FBRTNELE1BQU0sdUJBQXVCLEdBQUc7SUFDOUIsU0FBUztJQUNULFlBQVk7SUFDWixhQUFhO0lBQ2IsV0FBVztJQUNYLFdBQVc7SUFDWCxTQUFTO0lBQ1QsVUFBVTtJQUNWLFNBQVM7SUFDVCxVQUFVO0NBQ0YsQ0FBQztBQUlYLFNBQVMsY0FBYyxDQUFDLGFBQW1DO0lBQ3pELE9BQU8sYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxJQUFZO0lBQ3pDLE1BQU0sT0FBTyxHQUFHLHFCQUFxQixFQUE2QixDQUFDO0lBQ25FLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQyxPQUFPLE9BQU8sU0FBUyxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUUsU0FBNkMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3RHLENBQUM7QUFFRCxTQUFTLDBCQUEwQixDQUFDLFVBQWtCO0lBQ3BELE1BQU0sS0FBSyxHQUFHLG1GQUFtRixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMs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SyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3JDLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsZUFBZSxJQUFJLFdBQVcsQ0FBQztJQUN4RCxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtRQUNyQixTQUFTLEVBQUUsSUFBSTtRQUNmLE9BQU8sRUFBRSxJQUFJO1FBQ2IsVUFBVSxFQUFFLElBQUk7UUFDaEIsZUFBZSxFQUFFLENBQUMsR0FBRyx1QkFBdUIsQ0FBQztLQUM5QyxDQUFDLENBQUM7SUFFSCxrQ0FBa0MsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRCxPQUFPLENBQUMsMEJBQTBCLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldFNpYXJhU2hpZWxkR2xvYmFscyB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLmdsb2JhbHMnO1xyXG5cclxuY29uc3QgVkVORE9SX0VWRU5UX01JR1JBVElPTl9LRVkgPSAnX19zaWFyYVNoaWVsZFZlbmRvckV2ZW50TWlncmF0aW9uSW5zdGFsbGVkX18nO1xyXG5jb25zdCBNSUdSQVRFRF9NQVJLRVIgPSAnZGF0YS1zaWFyYS1zaGllbGQtZXZlbnQtbWlncmF0ZWQnO1xyXG5cclxuY29uc3QgSU5MSU5FX0VWRU5UX0FUVFJJQlVURVMgPSBbXHJcbiAgJ29uY2xpY2snLFxyXG4gICdvbmRibGNsaWNrJyxcclxuICAnb25tb3VzZWRvd24nLFxyXG4gICdvbm1vdXNldXAnLFxyXG4gICdvbmtleWRvd24nLFxyXG4gICdvbmtleXVwJyxcclxuICAnb25jaGFuZ2UnLFxyXG4gICdvbmlucHV0JyxcclxuICAnb25zdWJtaXQnLFxyXG5dIGFzIGNvbnN0O1xyXG5cclxudHlwZSBJbmxpbmVFdmVudEF0dHJpYnV0ZSA9ICh0eXBlb2YgSU5MSU5FX0VWRU5UX0FUVFJJQlVURVMpW251bWJlcl07XHJcblxyXG5mdW5jdGlvbiB0b0RvbUV2ZW50TmFtZShhdHRyaWJ1dGVOYW1lOiBJbmxpbmVFdmVudEF0dHJpYnV0ZSk6IHN0cmluZyB7XHJcbiAgcmV0dXJuIGF0dHJpYnV0ZU5hbWUuc2xpY2UoMik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlc29sdmVHbG9iYWxDYWxsYWJsZShuYW1lOiBzdHJpbmcpOiAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bikgfCB1bmRlZmluZWQge1xyXG4gIGNvbnN0IGdsb2JhbHMgPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuICBjb25zdCBjYW5kaWRhdGUgPSBnbG9iYWxzW25hbWVdO1xyXG4gIHJldHVybiB0eXBlb2YgY2FuZGlkYXRlID09PSAnZnVuY3Rpb24nID8gKGNhbmRpZGF0ZSBhcyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKSA6IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZnVuY3Rpb24gaW52b2tlV2luZG93T3BlbkV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgbWF0Y2ggPSAvXndpbmRvd1xcLm9wZW5cXChcXHMqKFsnXCJdKSguKj8pXFwxXFxzKig/OixcXHMqKFsnXCJdKSguKj8pXFwzXFxzKik/XFwpKD86XFwuZm9jdXNcXChcXCkpPzs/JC9pLmV4ZWMoZXhwcmVzc2lvbik7XHJcbiAgaWYgKCFtYXRjaCkge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgdGFyZ2V0V2luZG93ID0gZ2xvYmFsVGhpcy5vcGVuKG1hdGNoWzJdLCBtYXRjaFs0XSB8fCAnX2JsYW5rJyk7XHJcbiAgdGFyZ2V0V2luZG93Py5mb2N1cygpO1xyXG4gIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnZva2VHbG9iYWxGdW5jdGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgbWF0Y2ggPSAvXihbXyRhLXpBLVpdW1xcdyRdKilcXCgoLiopXFwpOz8kL3MuZXhlYyhleHByZXNzaW9uKTtcclxuICBpZiAoIW1hdGNoKSB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjb25zdCBmbiA9IHJlc29sdmVHbG9iYWxDYWxsYWJsZShtYXRjaFsxXSk7XHJcbiAgaWYgKCFmbikge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3QgYXJncyA9IG1hdGNoWzJdLnRyaW0oKTtcclxuICBpZiAoIWFyZ3MpIHtcclxuICAgIGZuKCk7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlmICgvXihbJ1wiXSkuKlxcMSQvLnRlc3QoYXJncykpIHtcclxuICAgIGZuKGFyZ3Muc2xpY2UoMSwgLTEpKTtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZm4oKTtcclxuICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW52b2tlSW5saW5lRXZlbnRFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IHZvaWQge1xyXG4gIGNvbnN0IHRyaW1tZWQgPSBleHByZXNzaW9uLnRyaW0oKTtcclxuICBpZiAoIXRyaW1tZWQpIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGZvciAoY29uc3QgcGFydCBvZiB0cmltbWVkLnNwbGl0KCc7JykpIHtcclxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHBhcnQudHJpbSgpO1xyXG4gICAgaWYgKCFzdGF0ZW1lbnQpIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGludm9rZVdpbmRvd09wZW5FeHByZXNzaW9uKHN0YXRlbWVudCkgfHwgaW52b2tlR2xvYmFsRnVuY3Rpb25FeHByZXNzaW9uKHN0YXRlbWVudCkpIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBtaWdyYXRlSW5saW5lRXZlbnRBdHRyaWJ1dGUoZWxlbWVudDogSFRNTEVsZW1lbnQsIGF0dHJpYnV0ZU5hbWU6IElubGluZUV2ZW50QXR0cmlidXRlKTogdm9pZCB7XHJcbiAgY29uc3QgZXhwcmVzc2lvbiA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xyXG4gIGlmICghZXhwcmVzc2lvbikge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XHJcbiAgY29uc3QgZXZlbnROYW1lID0gdG9Eb21FdmVudE5hbWUoYXR0cmlidXRlTmFtZSk7XHJcbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgKGV2ZW50KSA9PiB7XHJcbiAgICBpZiAoZXZlbnROYW1lID09PSAnc3VibWl0Jykge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gICAgaW52b2tlSW5saW5lRXZlbnRFeHByZXNzaW9uKGV4cHJlc3Npb24pO1xyXG4gIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWlncmF0ZVZlbmRvcklubGluZUV2ZW50QXR0cmlidXRlcyhyb290OiBOb2RlKTogdm9pZCB7XHJcbiAgaWYgKHJvb3QgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiByb290Lmhhc0F0dHJpYnV0ZShNSUdSQVRFRF9NQVJLRVIpKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBjb25zdCBlbGVtZW50czogSFRNTEVsZW1lbnRbXSA9IFtdO1xyXG4gIGlmIChyb290IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcclxuICAgIGVsZW1lbnRzLnB1c2gocm9vdCk7XHJcbiAgfVxyXG5cclxuICBpZiAocm9vdCBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XHJcbiAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAuLi5BcnJheS5mcm9tKFxyXG4gICAgICAgIHJvb3QucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oXHJcbiAgICAgICAgICAnW29uY2xpY2tdLFtvbmRibGNsaWNrXSxbb25tb3VzZWRvd25dLFtvbm1vdXNldXBdLFtvbmtleWRvd25dLFtvbmtleXVwXSxbb25jaGFuZ2VdLFtvbmlucHV0XSxbb25zdWJtaXRdJyxcclxuICAgICAgICApLFxyXG4gICAgICApLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xyXG4gICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlKE1JR1JBVEVEX01BUktFUikpIHtcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGVOYW1lIG9mIElOTElORV9FVkVOVF9BVFRSSUJVVEVTKSB7XHJcbiAgICAgIG1pZ3JhdGVJbmxpbmVFdmVudEF0dHJpYnV0ZShlbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShNSUdSQVRFRF9NQVJLRVIsICd0cnVlJyk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFZlbmRvcklubGluZUV2ZW50TWlncmF0aW9uKGRvY3VtZW50UmVmOiBEb2N1bWVudCk6IHZvaWQge1xyXG4gIGNvbnN0IGdsb2JhbHMgPSBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYgeyBbVkVORE9SX0VWRU5UX01JR1JBVElPTl9LRVldPzogYm9vbGVhbiB9O1xyXG4gIGlmIChnbG9iYWxzW1ZFTkRPUl9FVkVOVF9NSUdSQVRJT05fS0VZXSkge1xyXG4gICAgbWlncmF0ZVZlbmRvcklubGluZUV2ZW50QXR0cmlidXRlcyhkb2N1bWVudFJlZik7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChyZWNvcmRzKSA9PiB7XHJcbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiByZWNvcmRzKSB7XHJcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gJ2F0dHJpYnV0ZXMnICYmIHJlY29yZC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xyXG4gICAgICAgIG1pZ3JhdGVWZW5kb3JJbmxpbmVFdmVudEF0dHJpYnV0ZXMocmVjb3JkLnRhcmdldCk7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiByZWNvcmQuYWRkZWROb2Rlcykge1xyXG4gICAgICAgIG1pZ3JhdGVWZW5kb3JJbmxpbmVFdmVudEF0dHJpYnV0ZXMobm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgY29uc3Qgcm9vdCA9IGRvY3VtZW50UmVmLmRvY3VtZW50RWxlbWVudCA/PyBkb2N1bWVudFJlZjtcclxuICBvYnNlcnZlci5vYnNlcnZlKHJvb3QsIHtcclxuICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgIHN1YnRyZWU6IHRydWUsXHJcbiAgICBhdHRyaWJ1dGVzOiB0cnVlLFxyXG4gICAgYXR0cmlidXRlRmlsdGVyOiBbLi4uSU5MSU5FX0VWRU5UX0FUVFJJQlVURVNdLFxyXG4gIH0pO1xyXG5cclxuICBtaWdyYXRlVmVuZG9ySW5saW5lRXZlbnRBdHRyaWJ1dGVzKGRvY3VtZW50UmVmKTtcclxuICBnbG9iYWxzW1ZFTkRPUl9FVkVOVF9NSUdSQVRJT05fS0VZXSA9IHRydWU7XHJcbn1cclxuIl19
|
|
@@ -176,6 +176,135 @@ function installCaptchaSubmitGuard() {
|
|
|
176
176
|
globalState[SUBMIT_GUARD_STATE_KEY] = true;
|
|
177
177
|
}
|
|
178
178
|
|
|
179
|
+
const VENDOR_EVENT_MIGRATION_KEY = '__siaraShieldVendorEventMigrationInstalled__';
|
|
180
|
+
const MIGRATED_MARKER = 'data-siara-shield-event-migrated';
|
|
181
|
+
const INLINE_EVENT_ATTRIBUTES = [
|
|
182
|
+
'onclick',
|
|
183
|
+
'ondblclick',
|
|
184
|
+
'onmousedown',
|
|
185
|
+
'onmouseup',
|
|
186
|
+
'onkeydown',
|
|
187
|
+
'onkeyup',
|
|
188
|
+
'onchange',
|
|
189
|
+
'oninput',
|
|
190
|
+
'onsubmit',
|
|
191
|
+
];
|
|
192
|
+
function toDomEventName(attributeName) {
|
|
193
|
+
return attributeName.slice(2);
|
|
194
|
+
}
|
|
195
|
+
function resolveGlobalCallable(name) {
|
|
196
|
+
const globals = getSiaraShieldGlobals();
|
|
197
|
+
const candidate = globals[name];
|
|
198
|
+
return typeof candidate === 'function' ? candidate : undefined;
|
|
199
|
+
}
|
|
200
|
+
function invokeWindowOpenExpression(expression) {
|
|
201
|
+
const match = /^window\.open\(\s*(['"])(.*?)\1\s*(?:,\s*(['"])(.*?)\3\s*)?\)(?:\.focus\(\))?;?$/i.exec(expression);
|
|
202
|
+
if (!match) {
|
|
203
|
+
return false;
|
|
204
|
+
}
|
|
205
|
+
const targetWindow = globalThis.open(match[2], match[4] || '_blank');
|
|
206
|
+
targetWindow?.focus();
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
function invokeGlobalFunctionExpression(expression) {
|
|
210
|
+
const match = /^([_$a-zA-Z][\w$]*)\((.*)\);?$/s.exec(expression);
|
|
211
|
+
if (!match) {
|
|
212
|
+
return false;
|
|
213
|
+
}
|
|
214
|
+
const fn = resolveGlobalCallable(match[1]);
|
|
215
|
+
if (!fn) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
const args = match[2].trim();
|
|
219
|
+
if (!args) {
|
|
220
|
+
fn();
|
|
221
|
+
return true;
|
|
222
|
+
}
|
|
223
|
+
if (/^(['"]).*\1$/.test(args)) {
|
|
224
|
+
fn(args.slice(1, -1));
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
fn();
|
|
228
|
+
return true;
|
|
229
|
+
}
|
|
230
|
+
function invokeInlineEventExpression(expression) {
|
|
231
|
+
const trimmed = expression.trim();
|
|
232
|
+
if (!trimmed) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
for (const part of trimmed.split(';')) {
|
|
236
|
+
const statement = part.trim();
|
|
237
|
+
if (!statement) {
|
|
238
|
+
continue;
|
|
239
|
+
}
|
|
240
|
+
if (invokeWindowOpenExpression(statement) || invokeGlobalFunctionExpression(statement)) {
|
|
241
|
+
continue;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
function migrateInlineEventAttribute(element, attributeName) {
|
|
246
|
+
const expression = element.getAttribute(attributeName);
|
|
247
|
+
if (!expression) {
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
element.removeAttribute(attributeName);
|
|
251
|
+
const eventName = toDomEventName(attributeName);
|
|
252
|
+
element.addEventListener(eventName, (event) => {
|
|
253
|
+
if (eventName === 'submit') {
|
|
254
|
+
event.preventDefault();
|
|
255
|
+
}
|
|
256
|
+
invokeInlineEventExpression(expression);
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
function migrateVendorInlineEventAttributes(root) {
|
|
260
|
+
if (root instanceof HTMLElement && root.hasAttribute(MIGRATED_MARKER)) {
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
const elements = [];
|
|
264
|
+
if (root instanceof HTMLElement) {
|
|
265
|
+
elements.push(root);
|
|
266
|
+
}
|
|
267
|
+
if (root instanceof Element || root instanceof Document || root instanceof DocumentFragment) {
|
|
268
|
+
elements.push(...Array.from(root.querySelectorAll('[onclick],[ondblclick],[onmousedown],[onmouseup],[onkeydown],[onkeyup],[onchange],[oninput],[onsubmit]')));
|
|
269
|
+
}
|
|
270
|
+
for (const element of elements) {
|
|
271
|
+
if (element.hasAttribute(MIGRATED_MARKER)) {
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
for (const attributeName of INLINE_EVENT_ATTRIBUTES) {
|
|
275
|
+
migrateInlineEventAttribute(element, attributeName);
|
|
276
|
+
}
|
|
277
|
+
element.setAttribute(MIGRATED_MARKER, 'true');
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
function installVendorInlineEventMigration(documentRef) {
|
|
281
|
+
const globals = globalThis;
|
|
282
|
+
if (globals[VENDOR_EVENT_MIGRATION_KEY]) {
|
|
283
|
+
migrateVendorInlineEventAttributes(documentRef);
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
const observer = new MutationObserver((records) => {
|
|
287
|
+
for (const record of records) {
|
|
288
|
+
if (record.type === 'attributes' && record.target instanceof HTMLElement) {
|
|
289
|
+
migrateVendorInlineEventAttributes(record.target);
|
|
290
|
+
continue;
|
|
291
|
+
}
|
|
292
|
+
for (const node of record.addedNodes) {
|
|
293
|
+
migrateVendorInlineEventAttributes(node);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
const root = documentRef.documentElement ?? documentRef;
|
|
298
|
+
observer.observe(root, {
|
|
299
|
+
childList: true,
|
|
300
|
+
subtree: true,
|
|
301
|
+
attributes: true,
|
|
302
|
+
attributeFilter: [...INLINE_EVENT_ATTRIBUTES],
|
|
303
|
+
});
|
|
304
|
+
migrateVendorInlineEventAttributes(documentRef);
|
|
305
|
+
globals[VENDOR_EVENT_MIGRATION_KEY] = true;
|
|
306
|
+
}
|
|
307
|
+
|
|
179
308
|
const SCRIPT_STATUS_BY_DOCUMENT = new WeakMap();
|
|
180
309
|
const SCRIPT_PENDING_BY_DOCUMENT = new WeakMap();
|
|
181
310
|
const DYNAMIC_SCRIPT_NONCE_STATE_KEY = '__siaraShieldDynamicScriptNonceState__';
|
|
@@ -445,6 +574,7 @@ function prepareScriptNonce(documentRef, explicitNonce) {
|
|
|
445
574
|
if (effectiveDocumentRef) {
|
|
446
575
|
patchState.nonceByDocument.set(effectiveDocumentRef, resolvedNonce);
|
|
447
576
|
ensureNonceMutationObserver(effectiveDocumentRef);
|
|
577
|
+
installVendorInlineEventMigration(effectiveDocumentRef);
|
|
448
578
|
}
|
|
449
579
|
}
|
|
450
580
|
else {
|
|
@@ -1081,6 +1211,7 @@ function getSiaraShieldCspDirectives(options) {
|
|
|
1081
1211
|
// Default to strict/safe CSP. Customers can explicitly opt-in if they accept the risk.
|
|
1082
1212
|
const includeUnsafeInlineScript = options?.includeUnsafeInlineScript ?? false;
|
|
1083
1213
|
const includeUnsafeInlineStyle = options?.includeUnsafeInlineStyle ?? false;
|
|
1214
|
+
const allowInlineEventAttributes = options?.allowInlineEventAttributes ?? false;
|
|
1084
1215
|
const nonce = nonceSource(options?.nonce);
|
|
1085
1216
|
const scriptHosts = includeGoogleApis ? [...SCRIPT_HOSTS, ...OPTIONAL_SCRIPT_HOSTS] : [...SCRIPT_HOSTS];
|
|
1086
1217
|
const styleSources = unique([SELF, nonce, ...STYLE_HOSTS]);
|
|
@@ -1088,12 +1219,12 @@ function getSiaraShieldCspDirectives(options) {
|
|
|
1088
1219
|
'default-src': unique([SELF]),
|
|
1089
1220
|
/**
|
|
1090
1221
|
* CSP note:
|
|
1091
|
-
* - Vendor HTML
|
|
1092
|
-
* -
|
|
1222
|
+
* - Vendor HTML can include inline event handlers (onclick, etc). CSP nonces do NOT cover those.
|
|
1223
|
+
* - With a configured nonce, the package migrates those handlers to addEventListener so `script-src-attr 'none'` works.
|
|
1093
1224
|
*/
|
|
1094
1225
|
'script-src': unique([SELF, nonce, ...scriptHosts, includeUnsafeInlineScript ? UNSAFE_INLINE : undefined]),
|
|
1095
1226
|
'script-src-elem': unique([SELF, nonce, ...scriptHosts]),
|
|
1096
|
-
'script-src-attr': unique([SELF, "'
|
|
1227
|
+
'script-src-attr': unique(allowInlineEventAttributes ? [SELF, UNSAFE_INLINE] : ["'none'"]),
|
|
1097
1228
|
'connect-src': unique([SELF, ...CONNECT_HOSTS]),
|
|
1098
1229
|
'img-src': unique([SELF, DATA, ...IMG_HOSTS]),
|
|
1099
1230
|
/**
|