siarashield_workspace 0.0.30 → 0.0.32

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.
@@ -0,0 +1,80 @@
1
+ const SELF = "'self'";
2
+ const DATA = 'data:';
3
+ const UNSAFE_INLINE = "'unsafe-inline'";
4
+ const SCRIPT_HOSTS = ['https://embedcdn.mycybersiara.com', 'https://embed.mycybersiara.com'];
5
+ const OPTIONAL_SCRIPT_HOSTS = ['https://ajax.googleapis.com'];
6
+ const CONNECT_HOSTS = ['https://embed.mycybersiara.com', 'https://embedcdn.mycybersiara.com'];
7
+ const STYLE_HOSTS = [
8
+ 'https://embed.mycybersiara.com',
9
+ 'https://mycybersiara.com',
10
+ 'https://fonts.googleapis.com',
11
+ 'https://cdnjs.cloudflare.com',
12
+ ];
13
+ const FONT_HOSTS = [
14
+ 'https://fonts.gstatic.com',
15
+ 'https://mycybersiara.com',
16
+ 'https://cdnjs.cloudflare.com',
17
+ ];
18
+ const IMG_HOSTS = [
19
+ 'https://embed.mycybersiara.com',
20
+ 'https://embedcdn.mycybersiara.com',
21
+ 'https://mycybersiara.com',
22
+ ];
23
+ function unique(values) {
24
+ return [...new Set(values.filter((value) => Boolean(value && value.trim())))];
25
+ }
26
+ function nonceSource(nonce) {
27
+ return nonce ? `'nonce-${nonce}'` : undefined;
28
+ }
29
+ function serializeDirective(name, values) {
30
+ return values.length > 0 ? `${name} ${values.join(' ')}` : name;
31
+ }
32
+ function parsePolicy(policy) {
33
+ const directives = new Map();
34
+ for (const rawDirective of policy.split(';')) {
35
+ const directive = rawDirective.trim();
36
+ if (!directive) {
37
+ continue;
38
+ }
39
+ const parts = directive.split(/\s+/).filter(Boolean);
40
+ const [name, ...values] = parts;
41
+ if (!name) {
42
+ continue;
43
+ }
44
+ directives.set(name, values);
45
+ }
46
+ return directives;
47
+ }
48
+ export function getSiaraShieldCspDirectives(options) {
49
+ const includeGoogleApis = options?.includeGoogleApis ?? false;
50
+ // Default to strict/safe CSP. Customers can explicitly opt-in if they accept the risk.
51
+ const includeUnsafeInlineScript = options?.includeUnsafeInlineScript ?? false;
52
+ const includeUnsafeInlineStyle = options?.includeUnsafeInlineStyle ?? false;
53
+ const nonce = nonceSource(options?.nonce);
54
+ const scriptHosts = includeGoogleApis ? [...SCRIPT_HOSTS, ...OPTIONAL_SCRIPT_HOSTS] : [...SCRIPT_HOSTS];
55
+ return {
56
+ 'default-src': unique([SELF]),
57
+ 'script-src': unique([SELF, nonce, ...scriptHosts, includeUnsafeInlineScript ? UNSAFE_INLINE : undefined]),
58
+ 'script-src-elem': unique([SELF, nonce, ...scriptHosts]),
59
+ 'connect-src': unique([SELF, ...CONNECT_HOSTS]),
60
+ 'img-src': unique([SELF, DATA, ...IMG_HOSTS]),
61
+ 'style-src': unique([SELF, includeUnsafeInlineStyle ? UNSAFE_INLINE : undefined, ...STYLE_HOSTS]),
62
+ 'font-src': unique([SELF, ...FONT_HOSTS, DATA]),
63
+ };
64
+ }
65
+ export function getSiaraShieldCspPolicy(options) {
66
+ return Object.entries(getSiaraShieldCspDirectives(options))
67
+ .map(([name, values]) => serializeDirective(name, values))
68
+ .join('; ');
69
+ }
70
+ export function mergeSiaraShieldCspPolicy(existingPolicy, options) {
71
+ const directives = parsePolicy(existingPolicy);
72
+ const recommended = getSiaraShieldCspDirectives(options);
73
+ for (const [name, values] of Object.entries(recommended)) {
74
+ directives.set(name, unique([...(directives.get(name) ?? []), ...values]));
75
+ }
76
+ return [...directives.entries()]
77
+ .map(([name, values]) => serializeDirective(name, values))
78
+ .join('; ');
79
+ }
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLWNzcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC1jc3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQ3RCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQztBQUNyQixNQUFNLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztBQUV4QyxNQUFNLFlBQVksR0FBRyxDQUFDLG1DQUFtQyxFQUFFLGdDQUFnQyxDQUFVLENBQUM7QUFDdEcsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLDZCQUE2QixDQUFVLENBQUM7QUFDdkUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxnQ0FBZ0MsRUFBRSxtQ0FBbUMsQ0FBVSxDQUFDO0FBQ3ZHLE1BQU0sV0FBVyxHQUFHO0lBQ2xCLGdDQUFnQztJQUNoQywwQkFBMEI7SUFDMUIsOEJBQThCO0lBQzlCLDhCQUE4QjtDQUN0QixDQUFDO0FBQ1gsTUFBTSxVQUFVLEdBQUc7SUFDakIsMkJBQTJCO0lBQzNCLDBCQUEwQjtJQUMxQiw4QkFBOEI7Q0FDdEIsQ0FBQztBQUNYLE1BQU0sU0FBUyxHQUFHO0lBQ2hCLGdDQUFnQztJQUNoQyxtQ0FBbUM7SUFDbkMsMEJBQTBCO0NBQ2xCLENBQUM7QUFFWCxTQUFTLE1BQU0sQ0FBQyxNQUFpQztJQUMvQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFtQixFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxLQUFLLEdBQUcsQ0FBQyxD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QyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLGNBQXNCLEVBQUUsT0FBK0I7SUFDL0YsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLE1BQU0sV0FBVyxHQUFHLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXpELEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7UUFDekQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTaWFyYVNoaWVsZENzcE9wdGlvbnMge1xuICAvKiogU2VydmVyLWdlbmVyYXRlZCBub25jZSB2YWx1ZSB3aXRob3V0IHRoZSBgJ25vbmNlLSdgIHByZWZpeC4gKi9cbiAgbm9uY2U/OiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBpZiB0aGUgY3VzdG9tZXIgc3RpbGwgbG9hZHMgalF1ZXJ5IGZyb20gR29vZ2xlJ3MgQ0ROLiAqL1xuICBpbmNsdWRlR29vZ2xlQXBpcz86IGJvb2xlYW47XG4gIC8qKiBJbmNsdWRlIGBzY3JpcHQtc3JjICd1bnNhZmUtaW5saW5lJ2AgKG5vdCByZWNvbW1lbmRlZCBmb3IgcHJvZHVjdGlvbikuICovXG4gIGluY2x1ZGVVbnNhZmVJbmxpbmVTY3JpcHQ/OiBib29sZWFuO1xuICAvKiogSW5jbHVkZSBgc3R5bGUtc3JjICd1bnNhZmUtaW5saW5lJ2AgKG5vdCByZWNvbW1lbmRlZCBmb3IgcHJvZHVjdGlvbikuICovXG4gIGluY2x1ZGVVbnNhZmVJbmxpbmVTdHlsZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFNpYXJhU2hpZWxkQ3NwRGlyZWN0aXZlcyA9IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPjtcblxuY29uc3QgU0VMRiA9IFwiJ3NlbGYnXCI7XG5jb25zdCBEQVRBID0gJ2RhdGE6JztcbmNvbnN0IFVOU0FGRV9JTkxJTkUgPSBcIid1bnNhZmUtaW5saW5lJ1wiO1xuXG5jb25zdCBTQ1JJUFRfSE9TVFMgPSBbJ2h0dHBzOi8vZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbScsICdodHRwczovL2VtYmVkLm15Y3liZXJzaWFyYS5jb20nXSBhcyBjb25zdDtcbmNvbnN0IE9QVElPTkFMX1NDUklQVF9IT1NUUyA9IFsnaHR0cHM6Ly9hamF4Lmdvb2dsZWFwaXMuY29tJ10gYXMgY29uc3Q7XG5jb25zdCBDT05ORUNUX0hPU1RTID0gWydodHRwczovL2VtYmVkLm15Y3liZXJzaWFyYS5jb20nLCAnaHR0cHM6Ly9lbWJlZGNkbi5teWN5YmVyc2lhcmEuY29tJ10gYXMgY29uc3Q7XG5jb25zdCBTVFlMRV9IT1NUUyA9IFtcbiAgJ2h0dHBzOi8vZW1iZWQubXljeWJlcnNpYXJhLmNvbScsXG4gICdodHRwczovL215Y3liZXJzaWFyYS5jb20nLFxuICAnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbScsXG4gICdodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tJyxcbl0gYXMgY29uc3Q7XG5jb25zdCBGT05UX0hPU1RTID0gW1xuICAnaHR0cHM6Ly9mb250cy5nc3RhdGljLmNvbScsXG4gICdodHRwczovL215Y3liZXJzaWFyYS5jb20nLFxuICAnaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbScsXG5dIGFzIGNvbnN0O1xuY29uc3QgSU1HX0hPU1RTID0gW1xuICAnaHR0cHM6Ly9lbWJlZC5teWN5YmVyc2lhcmEuY29tJyxcbiAgJ2h0dHBzOi8vZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbScsXG4gICdodHRwczovL215Y3liZXJzaWFyYS5jb20nLFxuXSBhcyBjb25zdDtcblxuZnVuY3Rpb24gdW5pcXVlKHZhbHVlczogQXJyYXk8c3RyaW5nIHwgdW5kZWZpbmVkPik6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFsuLi5uZXcgU2V0KHZhbHVlcy5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+IEJvb2xlYW4odmFsdWUgJiYgdmFsdWUudHJpbSgpKSkpXTtcbn1cblxuZnVuY3Rpb24gbm9uY2VTb3VyY2Uobm9uY2U/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gbm9uY2UgPyBgJ25vbmNlLSR7bm9uY2V9J2AgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZURpcmVjdGl2ZShuYW1lOiBzdHJpbmcsIHZhbHVlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWVzLmxlbmd0aCA+IDAgPyBgJHtuYW1lfSAke3ZhbHVlcy5qb2luKCcgJyl9YCA6IG5hbWU7XG59XG5cbmZ1bmN0aW9uIHBhcnNlUG9saWN5KHBvbGljeTogc3RyaW5nKTogTWFwPHN0cmluZywgc3RyaW5nW10+IHtcbiAgY29uc3QgZGlyZWN0aXZlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcblxuICBmb3IgKGNvbnN0IHJhd0RpcmVjdGl2ZSBvZiBwb2xpY3kuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IGRpcmVjdGl2ZSA9IHJhd0RpcmVjdGl2ZS50cmltKCk7XG4gICAgaWYgKCFkaXJlY3RpdmUpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0gZGlyZWN0aXZlLnNwbGl0KC9cXHMrLykuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IFtuYW1lLCAuLi52YWx1ZXNdID0gcGFydHM7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBkaXJlY3RpdmVzLnNldChuYW1lLCB2YWx1ZXMpO1xuICB9XG5cbiAgcmV0dXJuIGRpcmVjdGl2ZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaWFyYVNoaWVsZENzcERpcmVjdGl2ZXMob3B0aW9ucz86IFNpYXJhU2hpZWxkQ3NwT3B0aW9ucyk6IFNpYXJhU2hpZWxkQ3NwRGlyZWN0aXZlcyB7XG4gIGNvbnN0IGluY2x1ZGVHb29nbGVBcGlzID0gb3B0aW9ucz8uaW5jbHVkZUdvb2dsZUFwaXMgPz8gZmFsc2U7XG4gIC8vIERlZmF1bHQgdG8gc3RyaWN0L3NhZmUgQ1NQLiBDdXN0b21lcnMgY2FuIGV4cGxpY2l0bHkgb3B0LWluIGlmIHRoZXkgYWNjZXB0IHRoZSByaXNrLlxuICBjb25zdCBpbmNsdWRlVW5zYWZlSW5saW5lU2NyaXB0ID0gb3B0aW9ucz8uaW5jbHVkZVVuc2FmZUlubGluZVNjcmlwdCA/PyBmYWxzZTtcbiAgY29uc3QgaW5jbHVkZVVuc2FmZUlubGluZVN0eWxlID0gb3B0aW9ucz8uaW5jbHVkZVVuc2FmZUlubGluZVN0eWxlID8/IGZhbHNlO1xuICBjb25zdCBub25jZSA9IG5vbmNlU291cmNlKG9wdGlvbnM/Lm5vbmNlKTtcbiAgY29uc3Qgc2NyaXB0SG9zdHMgPSBpbmNsdWRlR29vZ2xlQXBpcyA/IFsuLi5TQ1JJUFRfSE9TVFMsIC4uLk9QVElPTkFMX1NDUklQVF9IT1NUU10gOiBbLi4uU0NSSVBUX0hPU1RTXTtcblxuICByZXR1cm4ge1xuICAgICdkZWZhdWx0LXNyYyc6IHVuaXF1ZShbU0VMRl0pLFxuICAgICdzY3JpcHQtc3JjJzogdW5pcXVlKFtTRUxGLCBub25jZSwgLi4uc2NyaXB0SG9zdHMsIGluY2x1ZGVVbnNhZmVJbmxpbmVTY3JpcHQgPyBVTlNBRkVfSU5MSU5FIDogdW5kZWZpbmVkXSksXG4gICAgJ3NjcmlwdC1zcmMtZWxlbSc6IHVuaXF1ZShbU0VMRiwgbm9uY2UsIC4uLnNjcmlwdEhvc3RzXSksXG4gICAgJ2Nvbm5lY3Qtc3JjJzogdW5pcXVlKFtTRUxGLCAuLi5DT05ORUNUX0hPU1RTXSksXG4gICAgJ2ltZy1zcmMnOiB1bmlxdWUoW1NFTEYsIERBVEEsIC4uLklNR19IT1NUU10pLFxuICAgICdzdHlsZS1zcmMnOiB1bmlxdWUoW1NFTEYsIGluY2x1ZGVVbnNhZmVJbmxpbmVTdHlsZSA/IFVOU0FGRV9JTkxJTkUgOiB1bmRlZmluZWQsIC4uLlNUWUxFX0hPU1RTXSksXG4gICAgJ2ZvbnQtc3JjJzogdW5pcXVlKFtTRUxGLCAuLi5GT05UX0hPU1RTLCBEQVRBXSksXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTaWFyYVNoaWVsZENzcFBvbGljeShvcHRpb25zPzogU2lhcmFTaGllbGRDc3BPcHRpb25zKTogc3RyaW5nIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGdldFNpYXJhU2hpZWxkQ3NwRGlyZWN0aXZlcyhvcHRpb25zKSlcbiAgICAubWFwKChbbmFtZSwgdmFsdWVzXSkgPT4gc2VyaWFsaXplRGlyZWN0aXZlKG5hbWUsIHZhbHVlcykpXG4gICAgLmpvaW4oJzsgJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNpYXJhU2hpZWxkQ3NwUG9saWN5KGV4aXN0aW5nUG9saWN5OiBzdHJpbmcsIG9wdGlvbnM/OiBTaWFyYVNoaWVsZENzcE9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBkaXJlY3RpdmVzID0gcGFyc2VQb2xpY3koZXhpc3RpbmdQb2xpY3kpO1xuICBjb25zdCByZWNvbW1lbmRlZCA9IGdldFNpYXJhU2hpZWxkQ3NwRGlyZWN0aXZlcyhvcHRpb25zKTtcblxuICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZXNdIG9mIE9iamVjdC5lbnRyaWVzKHJlY29tbWVuZGVkKSkge1xuICAgIGRpcmVjdGl2ZXMuc2V0KG5hbWUsIHVuaXF1ZShbLi4uKGRpcmVjdGl2ZXMuZ2V0KG5hbWUpID8/IFtdKSwgLi4udmFsdWVzXSkpO1xuICB9XG5cbiAgcmV0dXJuIFsuLi5kaXJlY3RpdmVzLmVudHJpZXMoKV1cbiAgICAubWFwKChbbmFtZSwgdmFsdWVzXSkgPT4gc2VyaWFsaXplRGlyZWN0aXZlKG5hbWUsIHZhbHVlcykpXG4gICAgLmpvaW4oJzsgJyk7XG59XG4iXX0=
@@ -0,0 +1,23 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Inject, Injectable } from '@angular/core';
3
+ import { loadScript } from './siara-shield-script-utils';
4
+ import * as i0 from "@angular/core";
5
+ export class SiaraShieldLoaderService {
6
+ document;
7
+ constructor(document) {
8
+ this.document = document;
9
+ }
10
+ loadScript(src, options) {
11
+ return loadScript(this.document, src, options);
12
+ }
13
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SiaraShieldLoaderService, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
14
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SiaraShieldLoaderService, providedIn: 'root' });
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SiaraShieldLoaderService, decorators: [{
17
+ type: Injectable,
18
+ args: [{ providedIn: 'root' }]
19
+ }], ctorParameters: () => [{ type: Document, decorators: [{
20
+ type: Inject,
21
+ args: [DOCUMENT]
22
+ }] }] });
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLWxvYWRlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2lhcmFzaGllbGQtd29ya3NwYWNlL3NyYy9saWIvc2lhcmEtc2hpZWxkLWxvYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsVUFBVSxFQUEwQixNQUFNLDZCQUE2QixDQUFDOztBQUdqRixNQUFNLE9BQU8sd0JBQXdCO0lBQ1k7SUFBL0MsWUFBK0MsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUFHLENBQUM7SUFFckUsVUFBVSxDQUFDLEdBQVcsRUFBRSxPQUEyQjtRQUNqRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDO3dHQUxVLHdCQUF3QixrQkFDZixRQUFROzRHQURqQix3QkFBd0IsY0FEWCxNQUFNOzs0RkFDbkIsd0JBQXdCO2tCQURwQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBRW5CLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBsb2FkU2NyaXB0LCB0eXBlIFNjcmlwdExvYWRPcHRpb25zIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtc2NyaXB0LXV0aWxzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBTaWFyYVNoaWVsZExvYWRlclNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50OiBEb2N1bWVudCkge31cblxuICBsb2FkU2NyaXB0KHNyYzogc3RyaW5nLCBvcHRpb25zPzogU2NyaXB0TG9hZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbG9hZFNjcmlwdCh0aGlzLmRvY3VtZW50LCBzcmMsIG9wdGlvbnMpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,103 @@
1
+ const CONSOLE_PATCH_STATE_KEY = '__siaraShieldConsolePatchState__';
2
+ const VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY = '__siaraShieldVendorRuntimeErrorPatchState__';
3
+ const DEFAULT_SUPPRESS_WINDOW_MS = 2000;
4
+ function getConsolePatchState() {
5
+ const globalState = globalThis;
6
+ if (!globalState[CONSOLE_PATCH_STATE_KEY]) {
7
+ globalState[CONSOLE_PATCH_STATE_KEY] = {
8
+ depth: 0,
9
+ originalLog: console.log.bind(console),
10
+ originalInfo: console.info.bind(console),
11
+ originalWarn: console.warn.bind(console),
12
+ originalDebug: console.debug.bind(console),
13
+ originalError: console.error.bind(console),
14
+ };
15
+ }
16
+ return globalState[CONSOLE_PATCH_STATE_KEY];
17
+ }
18
+ function muteConsole() {
19
+ const patchState = getConsolePatchState();
20
+ patchState.depth += 1;
21
+ if (patchState.depth > 1)
22
+ return;
23
+ console.log = () => undefined;
24
+ console.info = () => undefined;
25
+ console.warn = () => undefined;
26
+ console.debug = () => undefined;
27
+ console.error = (...args) => {
28
+ const normalized = args
29
+ .map((arg) => (typeof arg === 'string' ? arg : arg instanceof Error ? arg.message : ''))
30
+ .join(' ')
31
+ .toLowerCase();
32
+ // Known noisy upstream vendor runtime error path from CaptchaResources.js bootstrap.
33
+ if (normalized.includes('an errorevent with no error occurred') ||
34
+ normalized.includes('script error') ||
35
+ normalized.includes('captcharesources.js') ||
36
+ normalized.includes('getcybersiara')) {
37
+ return;
38
+ }
39
+ patchState.originalError(...args);
40
+ };
41
+ }
42
+ function unmuteConsole() {
43
+ const patchState = getConsolePatchState();
44
+ if (patchState.depth === 0)
45
+ return;
46
+ patchState.depth -= 1;
47
+ if (patchState.depth > 0)
48
+ return;
49
+ console.log = patchState.originalLog;
50
+ console.info = patchState.originalInfo;
51
+ console.warn = patchState.originalWarn;
52
+ console.debug = patchState.originalDebug;
53
+ console.error = patchState.originalError;
54
+ }
55
+ export function suppressVendorConsoleWindow(windowMs = DEFAULT_SUPPRESS_WINDOW_MS) {
56
+ muteConsole();
57
+ setTimeout(() => {
58
+ unmuteConsole();
59
+ }, windowMs);
60
+ }
61
+ function getVendorRuntimeErrorPatchState() {
62
+ const globalState = globalThis;
63
+ if (!globalState[VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY]) {
64
+ globalState[VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY] = {
65
+ installed: false,
66
+ originalOnError: globalThis.onerror ?? null,
67
+ };
68
+ }
69
+ return globalState[VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY];
70
+ }
71
+ function isLikelyVendorScriptRuntimeError(message, source) {
72
+ const normalizedMessage = String(message ?? '').trim().toLowerCase();
73
+ const normalizedSource = String(source ?? '').trim().toLowerCase();
74
+ const fromSiaraHost = normalizedSource.includes('embed.mycybersiara.com') || normalizedSource.includes('embedcdn.mycybersiara.com');
75
+ const isKnownVendorDomError = normalizedMessage.includes("cannot read properties of null (reading 'removechild')") &&
76
+ (normalizedSource.includes('jquery') || normalizedSource.includes('captcharesources'));
77
+ if (fromSiaraHost)
78
+ return true;
79
+ if (isKnownVendorDomError)
80
+ return true;
81
+ return normalizedMessage === 'script error.' || normalizedMessage === 'script error';
82
+ }
83
+ /**
84
+ * Suppresses noisy cross-origin vendor runtime script errors so Angular does not
85
+ * surface them as unhandled `ErrorEvent` crashes in the console.
86
+ */
87
+ export function installVendorRuntimeErrorSuppression() {
88
+ const patchState = getVendorRuntimeErrorPatchState();
89
+ if (patchState.installed)
90
+ return;
91
+ const previousOnError = patchState.originalOnError;
92
+ globalThis.onerror = (message, source, lineno, colno, error) => {
93
+ if (isLikelyVendorScriptRuntimeError(message, source)) {
94
+ return true;
95
+ }
96
+ if (typeof previousOnError === 'function') {
97
+ return previousOnError.call(globalThis, message, source, lineno, colno, error);
98
+ }
99
+ return false;
100
+ };
101
+ patchState.installed = true;
102
+ }
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLWxvZy11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC1sb2ctdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsTUFBTSx1QkFBdUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUNuRSxNQUFNLG9DQUFvQyxHQUFHLDZDQUE2QyxDQUFDO0FBQzNGLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBRXhDLFNBQVMsb0JBQW9CO0lBQzNCLE1BQU0sV0FBVyxHQUFHLFVBRW5CLENBQUM7SUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztRQUMxQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsR0FBRztZQUNyQyxLQUFLLEVBQUUsQ0FBQztZQUNSLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDdEMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN4QyxZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3hDLGFBQWEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDMUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVELFNBQVMsV0FBVztJQUNsQixNQUFNLFVBQVUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0lBQzFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3RCLElBQUksVUFBVSxDQUFDLEtBQUssR0FBRyxD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QUssQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgQ29uc29sZVBhdGNoU3RhdGUge1xuICBkZXB0aDogbnVtYmVyO1xuICBvcmlnaW5hbExvZzogQ29uc29sZVsnbG9nJ107XG4gIG9yaWdpbmFsSW5mbzogQ29uc29sZVsnaW5mbyddO1xuICBvcmlnaW5hbFdhcm46IENvbnNvbGVbJ3dhcm4nXTtcbiAgb3JpZ2luYWxEZWJ1ZzogQ29uc29sZVsnZGVidWcnXTtcbiAgb3JpZ2luYWxFcnJvcjogQ29uc29sZVsnZXJyb3InXTtcbn1cblxuaW50ZXJmYWNlIFZlbmRvclJ1bnRpbWVFcnJvclBhdGNoU3RhdGUge1xuICBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gIG9yaWdpbmFsT25FcnJvcjogT25FcnJvckV2ZW50SGFuZGxlciB8IG51bGw7XG59XG5cbmNvbnN0IENPTlNPTEVfUEFUQ0hfU1RBVEVfS0VZID0gJ19fc2lhcmFTaGllbGRDb25zb2xlUGF0Y2hTdGF0ZV9fJztcbmNvbnN0IFZFTkRPUl9SVU5USU1FX0VSUk9SX1BBVENIX1NUQVRFX0tFWSA9ICdfX3NpYXJhU2hpZWxkVmVuZG9yUnVudGltZUVycm9yUGF0Y2hTdGF0ZV9fJztcbmNvbnN0IERFRkFVTFRfU1VQUFJFU1NfV0lORE9XX01TID0gMjAwMDtcblxuZnVuY3Rpb24gZ2V0Q29uc29sZVBhdGNoU3RhdGUoKTogQ29uc29sZVBhdGNoU3RhdGUge1xuICBjb25zdCBnbG9iYWxTdGF0ZSA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gICAgW0NPTlNPTEVfUEFUQ0hfU1RBVEVfS0VZXT86IENvbnNvbGVQYXRjaFN0YXRlO1xuICB9O1xuXG4gIGlmICghZ2xvYmFsU3RhdGVbQ09OU09MRV9QQVRDSF9TVEFURV9LRVldKSB7XG4gICAgZ2xvYmFsU3RhdGVbQ09OU09MRV9QQVRDSF9TVEFURV9LRVldID0ge1xuICAgICAgZGVwdGg6IDAsXG4gICAgICBvcmlnaW5hbExvZzogY29uc29sZS5sb2cuYmluZChjb25zb2xlKSxcbiAgICAgIG9yaWdpbmFsSW5mbzogY29uc29sZS5pbmZvLmJpbmQoY29uc29sZSksXG4gICAgICBvcmlnaW5hbFdhcm46IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpLFxuICAgICAgb3JpZ2luYWxEZWJ1ZzogY29uc29sZS5kZWJ1Zy5iaW5kKGNvbnNvbGUpLFxuICAgICAgb3JpZ2luYWxFcnJvcjogY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZ2xvYmFsU3RhdGVbQ09OU09MRV9QQVRDSF9TVEFURV9LRVldO1xufVxuXG5mdW5jdGlvbiBtdXRlQ29uc29sZSgpOiB2b2lkIHtcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldENvbnNvbGVQYXRjaFN0YXRlKCk7XG4gIHBhdGNoU3RhdGUuZGVwdGggKz0gMTtcbiAgaWYgKHBhdGNoU3RhdGUuZGVwdGggPiAxKSByZXR1cm47XG5cbiAgY29uc29sZS5sb2cgPSAoKSA9PiB1bmRlZmluZWQ7XG4gIGNvbnNvbGUuaW5mbyA9ICgpID0+IHVuZGVmaW5lZDtcbiAgY29uc29sZS53YXJuID0gKCkgPT4gdW5kZWZpbmVkO1xuICBjb25zb2xlLmRlYnVnID0gKCkgPT4gdW5kZWZpbmVkO1xuICBjb25zb2xlLmVycm9yID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBhcmdzXG4gICAgICAubWFwKChhcmcpID0+ICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyA/IGFyZyA6IGFyZyBpbnN0YW5jZW9mIEVycm9yID8gYXJnLm1lc3NhZ2UgOiAnJykpXG4gICAgICAuam9pbignICcpXG4gICAgICAudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEtub3duIG5vaXN5IHVwc3RyZWFtIHZlbmRvciBydW50aW1lIGVycm9yIHBhdGggZnJvbSBDYXB0Y2hhUmVzb3VyY2VzLmpzIGJvb3RzdHJhcC5cbiAgICBpZiAoXG4gICAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdhbiBlcnJvcmV2ZW50IHdpdGggbm8gZXJyb3Igb2NjdXJyZWQnKSB8fFxuICAgICAgbm9ybWFsaXplZC5pbmNsdWRlcygnc2NyaXB0IGVycm9yJykgfHxcbiAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2NhcHRjaGFyZXNvdXJjZXMuanMnKSB8fFxuICAgICAgbm9ybWFsaXplZC5pbmNsdWRlcygnZ2V0Y3liZXJzaWFyYScpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGF0Y2hTdGF0ZS5vcmlnaW5hbEVycm9yKC4uLmFyZ3MpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1bm11dGVDb25zb2xlKCk6IHZvaWQge1xuICBjb25zdCBwYXRjaFN0YXRlID0gZ2V0Q29uc29sZVBhdGNoU3RhdGUoKTtcbiAgaWYgKHBhdGNoU3RhdGUuZGVwdGggPT09IDApIHJldHVybjtcbiAgcGF0Y2hTdGF0ZS5kZXB0aCAtPSAxO1xuICBpZiAocGF0Y2hTdGF0ZS5kZXB0aCA+IDApIHJldHVybjtcblxuICBjb25zb2xlLmxvZyA9IHBhdGNoU3RhdGUub3JpZ2luYWxMb2c7XG4gIGNvbnNvbGUuaW5mbyA9IHBhdGNoU3RhdGUub3JpZ2luYWxJbmZvO1xuICBjb25zb2xlLndhcm4gPSBwYXRjaFN0YXRlLm9yaWdpbmFsV2FybjtcbiAgY29uc29sZS5kZWJ1ZyA9IHBhdGNoU3RhdGUub3JpZ2luYWxEZWJ1ZztcbiAgY29uc29sZS5lcnJvciA9IHBhdGNoU3RhdGUub3JpZ2luYWxFcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHByZXNzVmVuZG9yQ29uc29sZVdpbmRvdyh3aW5kb3dNcyA9IERFRkFVTFRfU1VQUFJFU1NfV0lORE9XX01TKTogdm9pZCB7XG4gIG11dGVDb25zb2xlKCk7XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHVubXV0ZUNvbnNvbGUoKTtcbiAgfSwgd2luZG93TXMpO1xufVxuXG5mdW5jdGlvbiBnZXRWZW5kb3JSdW50aW1lRXJyb3JQYXRjaFN0YXRlKCk6IFZlbmRvclJ1bnRpbWVFcnJvclBhdGNoU3RhdGUge1xuICBjb25zdCBnbG9iYWxTdGF0ZSA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gICAgW1ZFTkRPUl9SVU5USU1FX0VSUk9SX1BBVENIX1NUQVRFX0tFWV0/OiBWZW5kb3JSdW50aW1lRXJyb3JQYXRjaFN0YXRlO1xuICB9O1xuXG4gIGlmICghZ2xvYmFsU3RhdGVbVkVORE9SX1JVTlRJTUVfRVJST1JfUEFUQ0hfU1RBVEVfS0VZXSkge1xuICAgIGdsb2JhbFN0YXRlW1ZFTkRPUl9SVU5USU1FX0VSUk9SX1BBVENIX1NUQVRFX0tFWV0gPSB7XG4gICAgICBpbnN0YWxsZWQ6IGZhbHNlLFxuICAgICAgb3JpZ2luYWxPbkVycm9yOiBnbG9iYWxUaGlzLm9uZXJyb3IgPz8gbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGdsb2JhbFN0YXRlW1ZFTkRPUl9SVU5USU1FX0VSUk9SX1BBVENIX1NUQVRFX0tFWV07XG59XG5cbmZ1bmN0aW9uIGlzTGlrZWx5VmVuZG9yU2NyaXB0UnVudGltZUVycm9yKG1lc3NhZ2U6IHVua25vd24sIHNvdXJjZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCBub3JtYWxpemVkTWVzc2FnZSA9IFN0cmluZyhtZXNzYWdlID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFNvdXJjZSA9IFN0cmluZyhzb3VyY2UgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBmcm9tU2lhcmFIb3N0ID1cbiAgICBub3JtYWxpemVkU291cmNlLmluY2x1ZGVzKCdlbWJlZC5teWN5YmVyc2lhcmEuY29tJykgfHwgbm9ybWFsaXplZFNvdXJjZS5pbmNsdWRlcygnZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbScpO1xuICBjb25zdCBpc0tub3duVmVuZG9yRG9tRXJyb3IgPVxuICAgIG5vcm1hbGl6ZWRNZXNzYWdlLmluY2x1ZGVzKFwiY2Fubm90IHJlYWQgcHJvcGVydGllcyBvZiBudWxsIChyZWFkaW5nICdyZW1vdmVjaGlsZCcpXCIpICYmXG4gICAgKG5vcm1hbGl6ZWRTb3VyY2UuaW5jbHVkZXMoJ2pxdWVyeScpIHx8IG5vcm1hbGl6ZWRTb3VyY2UuaW5jbHVkZXMoJ2NhcHRjaGFyZXNvdXJjZXMnKSk7XG5cbiAgaWYgKGZyb21TaWFyYUhvc3QpIHJldHVybiB0cnVlO1xuICBpZiAoaXNLbm93blZlbmRvckRvbUVycm9yKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRNZXNzYWdlID09PSAnc2NyaXB0IGVycm9yLicgfHwgbm9ybWFsaXplZE1lc3NhZ2UgPT09ICdzY3JpcHQgZXJyb3InO1xufVxuXG4vKipcbiAqIFN1cHByZXNzZXMgbm9pc3kgY3Jvc3Mtb3JpZ2luIHZlbmRvciBydW50aW1lIHNjcmlwdCBlcnJvcnMgc28gQW5ndWxhciBkb2VzIG5vdFxuICogc3VyZmFjZSB0aGVtIGFzIHVuaGFuZGxlZCBgRXJyb3JFdmVudGAgY3Jhc2hlcyBpbiB0aGUgY29uc29sZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxWZW5kb3JSdW50aW1lRXJyb3JTdXBwcmVzc2lvbigpOiB2b2lkIHtcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldFZlbmRvclJ1bnRpbWVFcnJvclBhdGNoU3RhdGUoKTtcbiAgaWYgKHBhdGNoU3RhdGUuaW5zdGFsbGVkKSByZXR1cm47XG5cbiAgY29uc3QgcHJldmlvdXNPbkVycm9yID0gcGF0Y2hTdGF0ZS5vcmlnaW5hbE9uRXJyb3I7XG4gIGdsb2JhbFRoaXMub25lcnJvciA9IChtZXNzYWdlLCBzb3VyY2UsIGxpbmVubywgY29sbm8sIGVycm9yKSA9PiB7XG4gICAgaWYgKGlzTGlrZWx5VmVuZG9yU2NyaXB0UnVudGltZUVycm9yKG1lc3NhZ2UsIHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJldmlvdXNPbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcHJldmlvdXNPbkVycm9yLmNhbGwoZ2xvYmFsVGhpcywgbWVzc2FnZSwgc291cmNlLCBsaW5lbm8sIGNvbG5vLCBlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHBhdGNoU3RhdGUuaW5zdGFsbGVkID0gdHJ1ZTtcbn1cblxuIl19
@@ -0,0 +1,225 @@
1
+ const SCRIPT_STATUS_BY_DOCUMENT = new WeakMap();
2
+ const SCRIPT_PENDING_BY_DOCUMENT = new WeakMap();
3
+ const DYNAMIC_SCRIPT_NONCE_STATE_KEY = '__siaraShieldDynamicScriptNonceState__';
4
+ function getStatusBySrc(documentRef) {
5
+ let statusBySrc = SCRIPT_STATUS_BY_DOCUMENT.get(documentRef);
6
+ if (!statusBySrc) {
7
+ statusBySrc = new Map();
8
+ SCRIPT_STATUS_BY_DOCUMENT.set(documentRef, statusBySrc);
9
+ }
10
+ return statusBySrc;
11
+ }
12
+ function getPendingBySrc(documentRef) {
13
+ let pendingBySrc = SCRIPT_PENDING_BY_DOCUMENT.get(documentRef);
14
+ if (!pendingBySrc) {
15
+ pendingBySrc = new Map();
16
+ SCRIPT_PENDING_BY_DOCUMENT.set(documentRef, pendingBySrc);
17
+ }
18
+ return pendingBySrc;
19
+ }
20
+ function getDynamicScriptNoncePatchState() {
21
+ const globalState = globalThis;
22
+ if (!globalState[DYNAMIC_SCRIPT_NONCE_STATE_KEY]) {
23
+ globalState[DYNAMIC_SCRIPT_NONCE_STATE_KEY] = {
24
+ nonceByDocument: new WeakMap(),
25
+ observerByDocument: new WeakMap(),
26
+ inlineCaptchaScriptByDocument: new WeakMap(),
27
+ patched: false,
28
+ };
29
+ }
30
+ return globalState[DYNAMIC_SCRIPT_NONCE_STATE_KEY];
31
+ }
32
+ function normalizeNonce(nonce) {
33
+ const trimmed = nonce?.trim();
34
+ return trimmed ? trimmed : undefined;
35
+ }
36
+ function isScriptElement(node) {
37
+ return node instanceof Element && node.tagName.toLowerCase() === 'script';
38
+ }
39
+ export function applyScriptNonce(script, nonce) {
40
+ const resolvedNonce = normalizeNonce(nonce);
41
+ if (!resolvedNonce) {
42
+ return;
43
+ }
44
+ script.setAttribute('nonce', resolvedNonce);
45
+ script.nonce = resolvedNonce;
46
+ }
47
+ function applyTrackedNonce(node) {
48
+ if (!isScriptElement(node)) {
49
+ return;
50
+ }
51
+ const documentRef = node.ownerDocument;
52
+ if (!documentRef) {
53
+ return;
54
+ }
55
+ const nonce = getDynamicScriptNoncePatchState().nonceByDocument.get(documentRef);
56
+ applyScriptNonce(node, nonce);
57
+ }
58
+ function getTrackedInlineCaptchaScripts(documentRef) {
59
+ const patchState = getDynamicScriptNoncePatchState();
60
+ let trackedScripts = patchState.inlineCaptchaScriptByDocument.get(documentRef);
61
+ if (!trackedScripts) {
62
+ trackedScripts = new Set();
63
+ patchState.inlineCaptchaScriptByDocument.set(documentRef, trackedScripts);
64
+ }
65
+ return trackedScripts;
66
+ }
67
+ function shouldSkipDuplicateInlineCaptchaScript(node) {
68
+ if (!isScriptElement(node) || Boolean(node.src)) {
69
+ return false;
70
+ }
71
+ const scriptBody = (node.textContent ?? '').trim();
72
+ if (!scriptBody || !scriptBody.includes('currentLangCode')) {
73
+ return false;
74
+ }
75
+ const documentRef = node.ownerDocument;
76
+ if (!documentRef) {
77
+ return false;
78
+ }
79
+ const trackedScripts = getTrackedInlineCaptchaScripts(documentRef);
80
+ if (trackedScripts.has(scriptBody)) {
81
+ return true;
82
+ }
83
+ trackedScripts.add(scriptBody);
84
+ return false;
85
+ }
86
+ function walkAndApplyNonce(root, nonce) {
87
+ if (!nonce)
88
+ return;
89
+ // Fast path: root itself is a script.
90
+ if (isScriptElement(root)) {
91
+ applyScriptNonce(root, nonce);
92
+ return;
93
+ }
94
+ // Common path for jQuery: append DocumentFragment containing scripts created via HTML parsing.
95
+ if (root instanceof Element || root instanceof DocumentFragment) {
96
+ const scripts = root.querySelectorAll?.('script') ?? [];
97
+ for (const script of scripts) {
98
+ applyScriptNonce(script, nonce);
99
+ }
100
+ }
101
+ }
102
+ function ensureNonceMutationObserver(documentRef) {
103
+ const patchState = getDynamicScriptNoncePatchState();
104
+ if (patchState.observerByDocument.get(documentRef)) {
105
+ return;
106
+ }
107
+ const observer = new MutationObserver((records) => {
108
+ const nonce = patchState.nonceByDocument.get(documentRef);
109
+ if (!nonce)
110
+ return;
111
+ for (const record of records) {
112
+ for (const node of record.addedNodes) {
113
+ walkAndApplyNonce(node, nonce);
114
+ }
115
+ }
116
+ });
117
+ // Observe the full document because scripts can be injected into body/head by vendor/jQuery.
118
+ const root = documentRef.documentElement ?? documentRef;
119
+ observer.observe(root, { childList: true, subtree: true });
120
+ patchState.observerByDocument.set(documentRef, observer);
121
+ }
122
+ function teardownNonceMutationObserver(documentRef) {
123
+ const patchState = getDynamicScriptNoncePatchState();
124
+ const observer = patchState.observerByDocument.get(documentRef);
125
+ if (!observer)
126
+ return;
127
+ observer.disconnect();
128
+ patchState.observerByDocument.delete(documentRef);
129
+ }
130
+ function patchDynamicScriptInsertion() {
131
+ const patchState = getDynamicScriptNoncePatchState();
132
+ if (patchState.patched) {
133
+ return;
134
+ }
135
+ const originalAppendChild = Node.prototype.appendChild;
136
+ const originalInsertBefore = Node.prototype.insertBefore;
137
+ const originalReplaceChild = Node.prototype.replaceChild;
138
+ Node.prototype.appendChild = function (node) {
139
+ // Vendor captcha injects an inline snippet with `currentLangCode` that crashes when appended twice.
140
+ if (shouldSkipDuplicateInlineCaptchaScript(node)) {
141
+ return node;
142
+ }
143
+ applyTrackedNonce(node);
144
+ return originalAppendChild.call(this, node);
145
+ };
146
+ Node.prototype.insertBefore = function (node, child) {
147
+ if (shouldSkipDuplicateInlineCaptchaScript(node)) {
148
+ return node;
149
+ }
150
+ applyTrackedNonce(node);
151
+ return originalInsertBefore.call(this, node, child);
152
+ };
153
+ Node.prototype.replaceChild = function (node, child) {
154
+ applyTrackedNonce(node);
155
+ return originalReplaceChild.call(this, node, child);
156
+ };
157
+ patchState.patched = true;
158
+ }
159
+ export function resolveCspNonce(documentRef, explicitNonce) {
160
+ const resolvedExplicitNonce = normalizeNonce(explicitNonce);
161
+ if (resolvedExplicitNonce) {
162
+ return resolvedExplicitNonce;
163
+ }
164
+ const scriptWithNonce = documentRef.querySelector('script[nonce]');
165
+ const nonceFromScript = normalizeNonce(scriptWithNonce?.getAttribute('nonce') ?? scriptWithNonce?.nonce);
166
+ if (nonceFromScript) {
167
+ return nonceFromScript;
168
+ }
169
+ const nonceMeta = documentRef.querySelector('meta[name="csp-nonce"]');
170
+ return normalizeNonce(nonceMeta?.content);
171
+ }
172
+ export function prepareScriptNonce(documentRef, explicitNonce) {
173
+ const resolvedNonce = resolveCspNonce(documentRef, explicitNonce);
174
+ const patchState = getDynamicScriptNoncePatchState();
175
+ if (resolvedNonce) {
176
+ // DOM patching is only needed when a CSP nonce must be propagated.
177
+ patchDynamicScriptInsertion();
178
+ patchState.nonceByDocument.set(documentRef, resolvedNonce);
179
+ ensureNonceMutationObserver(documentRef);
180
+ }
181
+ else {
182
+ patchState.nonceByDocument.delete(documentRef);
183
+ teardownNonceMutationObserver(documentRef);
184
+ }
185
+ return resolvedNonce;
186
+ }
187
+ export function loadScript(documentRef, src, options) {
188
+ const nonce = prepareScriptNonce(documentRef, options?.nonce);
189
+ const statusBySrc = getStatusBySrc(documentRef);
190
+ const pendingBySrc = getPendingBySrc(documentRef);
191
+ const existing = documentRef.querySelector(`script[src="${src}"]`);
192
+ if (existing) {
193
+ applyScriptNonce(existing, nonce);
194
+ const status = statusBySrc.get(src);
195
+ if (status === 'loaded') {
196
+ return Promise.resolve();
197
+ }
198
+ const pending = pendingBySrc.get(src);
199
+ if (pending) {
200
+ return pending;
201
+ }
202
+ return Promise.resolve();
203
+ }
204
+ statusBySrc.set(src, 'loading');
205
+ const pending = new Promise((resolve, reject) => {
206
+ const script = documentRef.createElement('script');
207
+ script.src = src;
208
+ script.async = true;
209
+ applyScriptNonce(script, nonce);
210
+ script.onload = () => {
211
+ statusBySrc.set(src, 'loaded');
212
+ pendingBySrc.delete(src);
213
+ resolve();
214
+ };
215
+ script.onerror = () => {
216
+ statusBySrc.set(src, 'error');
217
+ pendingBySrc.delete(src);
218
+ reject(new Error(`Failed to load script: ${src}. Check CSP allowlist and nonce configuration.`));
219
+ };
220
+ documentRef.head.appendChild(script);
221
+ });
222
+ pendingBySrc.set(src, pending);
223
+ return pending;
224
+ }
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLXNjcmlwdC11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC1zY3JpcHQtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLE9BQU8sRUFBdUMsQ0FBQztBQUNyRixNQUFNLDBCQUEwQixHQUFHLElBQUksT0FBTyxFQUF3QyxDQUFDO0FBQ3ZGLE1BQU0sOEJBQThCLEdBQUcsd0NBQXdDLENBQUM7QUFFaEYsU0FBUyxjQUFjLENBQUMsV0FBcUI7SUFDM0MsSUFBSSxXQUFXLEdBQUcseUJBQXlCLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzdELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNqQixXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFDOUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFdBQXFCO0lBQzVDLElBQUksWUFBWSxHQUFHLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEIsWUFBWSxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO1FBQ2hELDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE9BQU8sWUFBWSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxTQUFTLCtCQUErQjtJQUN0QyxNQUFNLFdBQVcsR0FBRyxVQUVuQixDQUFDO0lBRUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7UUFD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RyxDQUFDLENBQUM7WUFDekIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUM7UUFDRixNQUFNLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtZQUNwQixXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM5QixZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywwQkFBMEIsR0FBRyxnREFBZ0QsQ0FBQyxDQUFDLENBQUM7UUFDbkcsQ0FBQyxDQUFDO1FBQ0YsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvQixPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsidHlwZSBTY3JpcHRTdGF0dXMgPSAnbG9hZGluZycgfCAnbG9hZGVkJyB8ICdlcnJvcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyaXB0TG9hZE9wdGlvbnMge1xuICBub25jZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUge1xuICBub25jZUJ5RG9jdW1lbnQ6IFdlYWtNYXA8RG9jdW1lbnQsIHN0cmluZz47XG4gIG9ic2VydmVyQnlEb2N1bWVudDogV2Vha01hcDxEb2N1bWVudCwgTXV0YXRpb25PYnNlcnZlcj47XG4gIGlubGluZUNhcHRjaGFTY3JpcHRCeURvY3VtZW50OiBXZWFrTWFwPERvY3VtZW50LCBTZXQ8c3RyaW5nPj47XG4gIHBhdGNoZWQ6IGJvb2xlYW47XG59XG5cbmNvbnN0IFNDUklQVF9TVEFUVVNfQllfRE9DVU1FTlQgPSBuZXcgV2Vha01hcDxEb2N1bWVudCwgTWFwPHN0cmluZywgU2NyaXB0U3RhdHVzPj4oKTtcbmNvbnN0IFNDUklQVF9QRU5ESU5HX0JZX0RPQ1VNRU5UID0gbmV3IFdlYWtNYXA8RG9jdW1lbnQsIE1hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+PigpO1xuY29uc3QgRFlOQU1JQ19TQ1JJUFRfTk9OQ0VfU1RBVEVfS0VZID0gJ19fc2lhcmFTaGllbGREeW5hbWljU2NyaXB0Tm9uY2VTdGF0ZV9fJztcblxuZnVuY3Rpb24gZ2V0U3RhdHVzQnlTcmMoZG9jdW1lbnRSZWY6IERvY3VtZW50KTogTWFwPHN0cmluZywgU2NyaXB0U3RhdHVzPiB7XG4gIGxldCBzdGF0dXNCeVNyYyA9IFNDUklQVF9TVEFUVVNfQllfRE9DVU1FTlQuZ2V0KGRvY3VtZW50UmVmKTtcbiAgaWYgKCFzdGF0dXNCeVNyYykge1xuICAgIHN0YXR1c0J5U3JjID0gbmV3IE1hcDxzdHJpbmcsIFNjcmlwdFN0YXR1cz4oKTtcbiAgICBTQ1JJUFRfU1RBVFVTX0JZX0RPQ1VNRU5ULnNldChkb2N1bWVudFJlZiwgc3RhdHVzQnlTcmMpO1xuICB9XG5cbiAgcmV0dXJuIHN0YXR1c0J5U3JjO1xufVxuXG5mdW5jdGlvbiBnZXRQZW5kaW5nQnlTcmMoZG9jdW1lbnRSZWY6IERvY3VtZW50KTogTWFwPHN0cmluZywgUHJvbWlzZTx2b2lkPj4ge1xuICBsZXQgcGVuZGluZ0J5U3JjID0gU0NSSVBUX1BFTkRJTkdfQllfRE9DVU1FTlQuZ2V0KGRvY3VtZW50UmVmKTtcbiAgaWYgKCFwZW5kaW5nQnlTcmMpIHtcbiAgICBwZW5kaW5nQnlTcmMgPSBuZXcgTWFwPHN0cmluZywgUHJvbWlzZTx2b2lkPj4oKTtcbiAgICBTQ1JJUFRfUEVORElOR19CWV9ET0NVTUVOVC5zZXQoZG9jdW1lbnRSZWYsIHBlbmRpbmdCeVNyYyk7XG4gIH1cblxuICByZXR1cm4gcGVuZGluZ0J5U3JjO1xufVxuXG5mdW5jdGlvbiBnZXREeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlKCk6IER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUge1xuICBjb25zdCBnbG9iYWxTdGF0ZSA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gICAgW0RZTkFNSUNfU0NSSVBUX05PTkNFX1NUQVRFX0tFWV0/OiBEeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlO1xuICB9O1xuXG4gIGlmICghZ2xvYmFsU3RhdGVbRFlOQU1JQ19TQ1JJUFRfTk9OQ0VfU1RBVEVfS0VZXSkge1xuICAgIGdsb2JhbFN0YXRlW0RZTkFNSUNfU0NSSVBUX05PTkNFX1NUQVRFX0tFWV0gPSB7XG4gICAgICBub25jZUJ5RG9jdW1lbnQ6IG5ldyBXZWFrTWFwPERvY3VtZW50LCBzdHJpbmc+KCksXG4gICAgICBvYnNlcnZlckJ5RG9jdW1lbnQ6IG5ldyBXZWFrTWFwPERvY3VtZW50LCBNdXRhdGlvbk9ic2VydmVyPigpLFxuICAgICAgaW5saW5lQ2FwdGNoYVNjcmlwdEJ5RG9jdW1lbnQ6IG5ldyBXZWFrTWFwPERvY3VtZW50LCBTZXQ8c3RyaW5nPj4oKSxcbiAgICAgIHBhdGNoZWQ6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZ2xvYmFsU3RhdGVbRFlOQU1JQ19TQ1JJUFRfTk9OQ0VfU1RBVEVfS0VZXTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTm9uY2Uobm9uY2U/OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdHJpbW1lZCA9IG5vbmNlPy50cmltKCk7XG4gIHJldHVybiB0cmltbWVkID8gdHJpbW1lZCA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNTY3JpcHRFbGVtZW50KG5vZGU6IE5vZGUpOiBub2RlIGlzIEhUTUxTY3JpcHRFbGVtZW50IHtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50ICYmIG5vZGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnc2NyaXB0Jztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5U2NyaXB0Tm9uY2Uoc2NyaXB0OiBIVE1MU2NyaXB0RWxlbWVudCwgbm9uY2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcmVzb2x2ZWROb25jZSA9IG5vcm1hbGl6ZU5vbmNlKG5vbmNlKTtcbiAgaWYgKCFyZXNvbHZlZE5vbmNlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2NyaXB0LnNldEF0dHJpYnV0ZSgnbm9uY2UnLCByZXNvbHZlZE5vbmNlKTtcbiAgc2NyaXB0Lm5vbmNlID0gcmVzb2x2ZWROb25jZTtcbn1cblxuZnVuY3Rpb24gYXBwbHlUcmFja2VkTm9uY2Uobm9kZTogTm9kZSk6IHZvaWQge1xuICBpZiAoIWlzU2NyaXB0RWxlbWVudChub2RlKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50UmVmID0gbm9kZS5vd25lckRvY3VtZW50O1xuICBpZiAoIWRvY3VtZW50UmVmKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgbm9uY2UgPSBnZXREeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlKCkubm9uY2VCeURvY3VtZW50LmdldChkb2N1bWVudFJlZik7XG4gIGFwcGx5U2NyaXB0Tm9uY2Uobm9kZSwgbm9uY2UpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFja2VkSW5saW5lQ2FwdGNoYVNjcmlwdHMoZG9jdW1lbnRSZWY6IERvY3VtZW50KTogU2V0PHN0cmluZz4ge1xuICBjb25zdCBwYXRjaFN0YXRlID0gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpO1xuICBsZXQgdHJhY2tlZFNjcmlwdHMgPSBwYXRjaFN0YXRlLmlubGluZUNhcHRjaGFTY3JpcHRCeURvY3VtZW50LmdldChkb2N1bWVudFJlZik7XG4gIGlmICghdHJhY2tlZFNjcmlwdHMpIHtcbiAgICB0cmFja2VkU2NyaXB0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHBhdGNoU3RhdGUuaW5saW5lQ2FwdGNoYVNjcmlwdEJ5RG9jdW1lbnQuc2V0KGRvY3VtZW50UmVmLCB0cmFja2VkU2NyaXB0cyk7XG4gIH1cblxuICByZXR1cm4gdHJhY2tlZFNjcmlwdHM7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFNraXBEdXBsaWNhdGVJbmxpbmVDYXB0Y2hhU2NyaXB0KG5vZGU6IE5vZGUpOiBib29sZWFuIHtcbiAgaWYgKCFpc1NjcmlwdEVsZW1lbnQobm9kZSkgfHwgQm9vbGVhbihub2RlLnNyYykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzY3JpcHRCb2R5ID0gKG5vZGUudGV4dENvbnRlbnQgPz8gJycpLnRyaW0oKTtcbiAgaWYgKCFzY3JpcHRCb2R5IHx8ICFzY3JpcHRCb2R5LmluY2x1ZGVzKCdjdXJyZW50TGFuZ0NvZGUnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50UmVmID0gbm9kZS5vd25lckRvY3VtZW50O1xuICBpZiAoIWRvY3VtZW50UmVmKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgdHJhY2tlZFNjcmlwdHMgPSBnZXRUcmFja2VkSW5saW5lQ2FwdGNoYVNjcmlwdHMoZG9jdW1lbnRSZWYpO1xuICBpZiAodHJhY2tlZFNjcmlwdHMuaGFzKHNjcmlwdEJvZHkpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cmFja2VkU2NyaXB0cy5hZGQoc2NyaXB0Qm9keSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gd2Fsa0FuZEFwcGx5Tm9uY2Uocm9vdDogTm9kZSwgbm9uY2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKCFub25jZSkgcmV0dXJuO1xuXG4gIC8vIEZhc3QgcGF0aDogcm9vdCBpdHNlbGYgaXMgYSBzY3JpcHQuXG4gIGlmIChpc1NjcmlwdEVsZW1lbnQocm9vdCkpIHtcbiAgICBhcHBseVNjcmlwdE5vbmNlKHJvb3QsIG5vbmNlKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBDb21tb24gcGF0aCBmb3IgalF1ZXJ5OiBhcHBlbmQgRG9jdW1lbnRGcmFnbWVudCBjb250YWluaW5nIHNjcmlwdHMgY3JlYXRlZCB2aWEgSFRNTCBwYXJzaW5nLlxuICBpZiAocm9vdCBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICBjb25zdCBzY3JpcHRzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsPy4oJ3NjcmlwdCcpID8/IFtdO1xuICAgIGZvciAoY29uc3Qgc2NyaXB0IG9mIHNjcmlwdHMpIHtcbiAgICAgIGFwcGx5U2NyaXB0Tm9uY2Uoc2NyaXB0IGFzIEhUTUxTY3JpcHRFbGVtZW50LCBub25jZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGVuc3VyZU5vbmNlTXV0YXRpb25PYnNlcnZlcihkb2N1bWVudFJlZjogRG9jdW1lbnQpOiB2b2lkIHtcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUoKTtcbiAgaWYgKHBhdGNoU3RhdGUub2JzZXJ2ZXJCeURvY3VtZW50LmdldChkb2N1bWVudFJlZikpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChyZWNvcmRzKSA9PiB7XG4gICAgY29uc3Qgbm9uY2UgPSBwYXRjaFN0YXRlLm5vbmNlQnlEb2N1bWVudC5nZXQoZG9jdW1lbnRSZWYpO1xuICAgIGlmICghbm9uY2UpIHJldHVybjtcblxuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIHJlY29yZHMpIHtcbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiByZWNvcmQuYWRkZWROb2Rlcykge1xuICAgICAgICB3YWxrQW5kQXBwbHlOb25jZShub2RlLCBub25jZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBPYnNlcnZlIHRoZSBmdWxsIGRvY3VtZW50IGJlY2F1c2Ugc2NyaXB0cyBjYW4gYmUgaW5qZWN0ZWQgaW50byBib2R5L2hlYWQgYnkgdmVuZG9yL2pRdWVyeS5cbiAgY29uc3Qgcm9vdCA9IGRvY3VtZW50UmVmLmRvY3VtZW50RWxlbWVudCA/PyBkb2N1bWVudFJlZjtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShyb290LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgcGF0Y2hTdGF0ZS5vYnNlcnZlckJ5RG9jdW1lbnQuc2V0KGRvY3VtZW50UmVmLCBvYnNlcnZlcik7XG59XG5cbmZ1bmN0aW9uIHRlYXJkb3duTm9uY2VNdXRhdGlvbk9ic2VydmVyKGRvY3VtZW50UmVmOiBEb2N1bWVudCk6IHZvaWQge1xuICBjb25zdCBwYXRjaFN0YXRlID0gZ2V0RHluYW1pY1NjcmlwdE5vbmNlUGF0Y2hTdGF0ZSgpO1xuICBjb25zdCBvYnNlcnZlciA9IHBhdGNoU3RhdGUub2JzZXJ2ZXJCeURvY3VtZW50LmdldChkb2N1bWVudFJlZik7XG4gIGlmICghb2JzZXJ2ZXIpIHJldHVybjtcbiAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICBwYXRjaFN0YXRlLm9ic2VydmVyQnlEb2N1bWVudC5kZWxldGUoZG9jdW1lbnRSZWYpO1xufVxuXG5mdW5jdGlvbiBwYXRjaER5bmFtaWNTY3JpcHRJbnNlcnRpb24oKTogdm9pZCB7XG4gIGNvbnN0IHBhdGNoU3RhdGUgPSBnZXREeW5hbWljU2NyaXB0Tm9uY2VQYXRjaFN0YXRlKCk7XG4gIGlmIChwYXRjaFN0YXRlLnBhdGNoZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcmlnaW5hbEFwcGVuZENoaWxkID0gTm9kZS5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7XG4gIGNvbnN0IG9yaWdpbmFsSW5zZXJ0QmVmb3JlID0gTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlO1xuICBjb25zdCBvcmlnaW5hbFJlcGxhY2VDaGlsZCA9IE5vZGUucHJvdG90eXBlLnJlcGxhY2VDaGlsZDtcblxuICBOb2RlLnByb3RvdHlwZS5hcHBlbmRDaGlsZCA9IGZ1bmN0aW9uIDxUIGV4dGVuZHMgTm9kZT4obm9kZTogVCk6IFQge1xuICAgIC8vIFZlbmRvciBjYXB0Y2hhIGluamVjdHMgYW4gaW5saW5lIHNuaXBwZXQgd2l0aCBgY3VycmVudExhbmdDb2RlYCB0aGF0IGNyYXNoZXMgd2hlbiBhcHBlbmRlZCB0d2ljZS5cbiAgICBpZiAoc2hvdWxkU2tpcER1cGxpY2F0ZUlubGluZUNhcHRjaGFTY3JpcHQobm9kZSkpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBhcHBseVRyYWNrZWROb25jZShub2RlKTtcbiAgICByZXR1cm4gb3JpZ2luYWxBcHBlbmRDaGlsZC5jYWxsKHRoaXMsIG5vZGUpIGFzIFQ7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUuaW5zZXJ0QmVmb3JlID0gZnVuY3Rpb24gPFQgZXh0ZW5kcyBOb2RlPihub2RlOiBULCBjaGlsZDogTm9kZSB8IG51bGwpOiBUIHtcbiAgICBpZiAoc2hvdWxkU2tpcER1cGxpY2F0ZUlubGluZUNhcHRjaGFTY3JpcHQobm9kZSkpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgICBhcHBseVRyYWNrZWROb25jZShub2RlKTtcbiAgICByZXR1cm4gb3JpZ2luYWxJbnNlcnRCZWZvcmUuY2FsbCh0aGlzLCBub2RlLCBjaGlsZCkgYXMgVDtcbiAgfTtcblxuICBOb2RlLnByb3RvdHlwZS5yZXBsYWNlQ2hpbGQgPSBmdW5jdGlvbiA8VCBleHRlbmRzIE5vZGU+KG5vZGU6IE5vZGUsIGNoaWxkOiBUKTogVCB7XG4gICAgYXBwbHlUcmFja2VkTm9uY2Uobm9kZSk7XG4gICAgcmV0dXJuIG9yaWdpbmFsUmVwbGFjZUNoaWxkLmNhbGwodGhpcywgbm9kZSwgY2hpbGQpIGFzIFQ7XG4gIH07XG5cbiAgcGF0Y2hTdGF0ZS5wYXRjaGVkID0gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDc3BOb25jZShkb2N1bWVudFJlZjogRG9jdW1lbnQsIGV4cGxpY2l0Tm9uY2U/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCByZXNvbHZlZEV4cGxpY2l0Tm9uY2UgPSBub3JtYWxpemVOb25jZShleHBsaWNpdE5vbmNlKTtcbiAgaWYgKHJlc29sdmVkRXhwbGljaXROb25jZSkge1xuICAgIHJldHVybiByZXNvbHZlZEV4cGxpY2l0Tm9uY2U7XG4gIH1cblxuICBjb25zdCBzY3JpcHRXaXRoTm9uY2UgPSBkb2N1bWVudFJlZi5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50Pignc2NyaXB0W25vbmNlXScpO1xuICBjb25zdCBub25jZUZyb21TY3JpcHQgPSBub3JtYWxpemVOb25jZShzY3JpcHRXaXRoTm9uY2U/LmdldEF0dHJpYnV0ZSgnbm9uY2UnKSA/PyBzY3JpcHRXaXRoTm9uY2U/Lm5vbmNlKTtcbiAgaWYgKG5vbmNlRnJvbVNjcmlwdCkge1xuICAgIHJldHVybiBub25jZUZyb21TY3JpcHQ7XG4gIH1cblxuICBjb25zdCBub25jZU1ldGEgPSBkb2N1bWVudFJlZi5xdWVyeVNlbGVjdG9yPEhUTUxNZXRhRWxlbWVudD4oJ21ldGFbbmFtZT1cImNzcC1ub25jZVwiXScpO1xuICByZXR1cm4gbm9ybWFsaXplTm9uY2Uobm9uY2VNZXRhPy5jb250ZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVTY3JpcHROb25jZShkb2N1bWVudFJlZjogRG9jdW1lbnQsIGV4cGxpY2l0Tm9uY2U/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCByZXNvbHZlZE5vbmNlID0gcmVzb2x2ZUNzcE5vbmNlKGRvY3VtZW50UmVmLCBleHBsaWNpdE5vbmNlKTtcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldER5bmFtaWNTY3JpcHROb25jZVBhdGNoU3RhdGUoKTtcblxuICBpZiAocmVzb2x2ZWROb25jZSkge1xuICAgIC8vIERPTSBwYXRjaGluZyBpcyBvbmx5IG5lZWRlZCB3aGVuIGEgQ1NQIG5vbmNlIG11c3QgYmUgcHJvcGFnYXRlZC5cbiAgICBwYXRjaER5bmFtaWNTY3JpcHRJbnNlcnRpb24oKTtcbiAgICBwYXRjaFN0YXRlLm5vbmNlQnlEb2N1bWVudC5zZXQoZG9jdW1lbnRSZWYsIHJlc29sdmVkTm9uY2UpO1xuICAgIGVuc3VyZU5vbmNlTXV0YXRpb25PYnNlcnZlcihkb2N1bWVudFJlZik7XG4gIH0gZWxzZSB7XG4gICAgcGF0Y2hTdGF0ZS5ub25jZUJ5RG9jdW1lbnQuZGVsZXRlKGRvY3VtZW50UmVmKTtcbiAgICB0ZWFyZG93bk5vbmNlTXV0YXRpb25PYnNlcnZlcihkb2N1bWVudFJlZik7XG4gIH1cblxuICByZXR1cm4gcmVzb2x2ZWROb25jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRTY3JpcHQoZG9jdW1lbnRSZWY6IERvY3VtZW50LCBzcmM6IHN0cmluZywgb3B0aW9ucz86IFNjcmlwdExvYWRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG5vbmNlID0gcHJlcGFyZVNjcmlwdE5vbmNlKGRvY3VtZW50UmVmLCBvcHRpb25zPy5ub25jZSk7XG4gIGNvbnN0IHN0YXR1c0J5U3JjID0gZ2V0U3RhdHVzQnlTcmMoZG9jdW1lbnRSZWYpO1xuICBjb25zdCBwZW5kaW5nQnlTcmMgPSBnZXRQZW5kaW5nQnlTcmMoZG9jdW1lbnRSZWYpO1xuICBjb25zdCBleGlzdGluZyA9IGRvY3VtZW50UmVmLnF1ZXJ5U2VsZWN0b3I8SFRNTFNjcmlwdEVsZW1lbnQ+KGBzY3JpcHRbc3JjPVwiJHtzcmN9XCJdYCk7XG5cbiAgaWYgKGV4aXN0aW5nKSB7XG4gICAgYXBwbHlTY3JpcHROb25jZShleGlzdGluZywgbm9uY2UpO1xuICAgIGNvbnN0IHN0YXR1cyA9IHN0YXR1c0J5U3JjLmdldChzcmMpO1xuICAgIGlmIChzdGF0dXMgPT09ICdsb2FkZWQnKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGVuZGluZyA9IHBlbmRpbmdCeVNyYy5nZXQoc3JjKTtcbiAgICBpZiAocGVuZGluZykge1xuICAgICAgcmV0dXJuIHBlbmRpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgc3RhdHVzQnlTcmMuc2V0KHNyYywgJ2xvYWRpbmcnKTtcblxuICBjb25zdCBwZW5kaW5nID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50UmVmLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgIHNjcmlwdC5zcmMgPSBzcmM7XG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICBhcHBseVNjcmlwdE5vbmNlKHNjcmlwdCwgbm9uY2UpO1xuICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBzdGF0dXNCeVNyYy5zZXQoc3JjLCAnbG9hZGVkJyk7XG4gICAgICBwZW5kaW5nQnlTcmMuZGVsZXRlKHNyYyk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfTtcbiAgICBzY3JpcHQub25lcnJvciA9ICgpID0+IHtcbiAgICAgIHN0YXR1c0J5U3JjLnNldChzcmMsICdlcnJvcicpO1xuICAgICAgcGVuZGluZ0J5U3JjLmRlbGV0ZShzcmMpO1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGxvYWQgc2NyaXB0OiAke3NyY30uIENoZWNrIENTUCBhbGxvd2xpc3QgYW5kIG5vbmNlIGNvbmZpZ3VyYXRpb24uYCkpO1xuICAgIH07XG4gICAgZG9jdW1lbnRSZWYuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICB9KTtcblxuICBwZW5kaW5nQnlTcmMuc2V0KHNyYywgcGVuZGluZyk7XG4gIHJldHVybiBwZW5kaW5nO1xufVxuIl19
@@ -0,0 +1,30 @@
1
+ const SUBMIT_GUARD_STATE_KEY = '__siaraShieldSubmitGuardInstalled__';
2
+ const SYNTHETIC_CLICK_GUARD_WINDOW_MS = 1200;
3
+ export function installCaptchaSubmitGuard() {
4
+ const globalState = globalThis;
5
+ if (globalState[SUBMIT_GUARD_STATE_KEY])
6
+ return;
7
+ const lastSyntheticClickByButton = new WeakMap();
8
+ document.addEventListener('click', (event) => {
9
+ const target = event.target;
10
+ if (!(target instanceof Element))
11
+ return;
12
+ const submitButton = target.closest('.CaptchaSubmit');
13
+ if (!submitButton)
14
+ return;
15
+ // Vendor runtime can emit synthetic clicks on .CaptchaSubmit.
16
+ // Allow one synthetic click (needed for vendor auto-submit) but block rapid duplicates.
17
+ if (!event.isTrusted) {
18
+ const now = Date.now();
19
+ const lastSyntheticClickAt = lastSyntheticClickByButton.get(submitButton) ?? 0;
20
+ if (now - lastSyntheticClickAt < SYNTHETIC_CLICK_GUARD_WINDOW_MS) {
21
+ event.preventDefault();
22
+ event.stopImmediatePropagation();
23
+ return;
24
+ }
25
+ lastSyntheticClickByButton.set(submitButton, now);
26
+ }
27
+ }, true);
28
+ globalState[SUBMIT_GUARD_STATE_KEY] = true;
29
+ }
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLXN1Ym1pdC1ndWFyZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC1zdWJtaXQtZ3VhcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxzQkFBc0IsR0FBRyxxQ0FBcUMsQ0FBQztBQUNyRSxNQUFNLCtCQUErQixHQUFHLElBQUksQ0FBQztBQUU3QyxNQUFNLFVBQVUseUJBQXlCO0lBQ3ZDLE1BQU0sV0FBVyxHQUFHLFVBRW5CLENBQUM7SUFFRixJQUFJLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQztRQUFFLE9BQU87SUFFaEQsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztJQUV0RSxRQUFRLENBQUMsZ0JBQWdCLENBQ3ZCLE9BQU8sRUFDUCxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ1IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsQ0FBQyxNQUFNLFlBQVksT0FBTyxDQUFDO1lBQUUsT0FBTztRQUV6QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPO1FBRTFCLDhEQUE4RDtRQUM5RCx3RkFBd0Y7UUFDeEYsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkIsTUFBTSxvQkFBb0IsR0FBRywwQkFBMEIsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9FLElBQUksR0FBRyxHQUFHLG9CQUFvQixHQUFHLCtCQUErQixFQUFFLENBQUM7Z0JBQ2pFLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxDQUFDLHdCQUF3QixFQUFFLENBQUM7Z0JBQ2pDLE9BQU87WUFDVCxDQUFDO1lBQ0QsMEJBQTBCLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNwRCxDQUFDO0lBQ0gsQ0FBQyxFQUNELElBQUksQ0FDTCxDQUFDO0lBRUYsV0FBVyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBTVUJNSVRfR1VBUkRfU1RBVEVfS0VZID0gJ19fc2lhcmFTaGllbGRTdWJtaXRHdWFyZEluc3RhbGxlZF9fJztcbmNvbnN0IFNZTlRIRVRJQ19DTElDS19HVUFSRF9XSU5ET1dfTVMgPSAxMjAwO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbENhcHRjaGFTdWJtaXRHdWFyZCgpOiB2b2lkIHtcbiAgY29uc3QgZ2xvYmFsU3RhdGUgPSBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYge1xuICAgIFtTVUJNSVRfR1VBUkRfU1RBVEVfS0VZXT86IGJvb2xlYW47XG4gIH07XG5cbiAgaWYgKGdsb2JhbFN0YXRlW1NVQk1JVF9HVUFSRF9TVEFURV9LRVldKSByZXR1cm47XG5cbiAgY29uc3QgbGFzdFN5bnRoZXRpY0NsaWNrQnlCdXR0b24gPSBuZXcgV2Vha01hcDxFdmVudFRhcmdldCwgbnVtYmVyPigpO1xuXG4gIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgJ2NsaWNrJyxcbiAgICAoZXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IHRhcmdldC5jbG9zZXN0KCcuQ2FwdGNoYVN1Ym1pdCcpO1xuICAgICAgaWYgKCFzdWJtaXRCdXR0b24pIHJldHVybjtcblxuICAgICAgLy8gVmVuZG9yIHJ1bnRpbWUgY2FuIGVtaXQgc3ludGhldGljIGNsaWNrcyBvbiAuQ2FwdGNoYVN1Ym1pdC5cbiAgICAgIC8vIEFsbG93IG9uZSBzeW50aGV0aWMgY2xpY2sgKG5lZWRlZCBmb3IgdmVuZG9yIGF1dG8tc3VibWl0KSBidXQgYmxvY2sgcmFwaWQgZHVwbGljYXRlcy5cbiAgICAgIGlmICghZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIGNvbnN0IGxhc3RTeW50aGV0aWNDbGlja0F0ID0gbGFzdFN5bnRoZXRpY0NsaWNrQnlCdXR0b24uZ2V0KHN1Ym1pdEJ1dHRvbikgPz8gMDtcbiAgICAgICAgaWYgKG5vdyAtIGxhc3RTeW50aGV0aWNDbGlja0F0IDwgU1lOVEhFVElDX0NMSUNLX0dVQVJEX1dJTkRPV19NUykge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxhc3RTeW50aGV0aWNDbGlja0J5QnV0dG9uLnNldChzdWJtaXRCdXR0b24sIG5vdyk7XG4gICAgICB9XG4gICAgfSxcbiAgICB0cnVlLFxuICApO1xuXG4gIGdsb2JhbFN0YXRlW1NVQk1JVF9HVUFSRF9TVEFURV9LRVldID0gdHJ1ZTtcbn1cblxuIl19