siarashield_workspace 0.0.44 → 0.0.46
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/esm2022/lib/siara-shield-log-utils.mjs +36 -2
- package/esm2022/lib/siara-shield.component.mjs +6 -5
- package/esm2022/lib/siara-shield.mjs +6 -5
- package/fesm2022/siarashield_workspace.mjs +45 -9
- package/fesm2022/siarashield_workspace.mjs.map +1 -1
- package/package.json +5 -1
- package/schematics/collection.json +11 -0
- package/schematics/ng-add/index.js +215 -0
- package/schematics/ng-add/schema.json +18 -0
- package/siarashield_workspace-0.0.46.tgz +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const CONSOLE_PATCH_STATE_KEY = '__siaraShieldConsolePatchState__';
|
|
2
2
|
const VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY = '__siaraShieldVendorRuntimeErrorPatchState__';
|
|
3
|
-
const DEFAULT_SUPPRESS_WINDOW_MS =
|
|
3
|
+
const DEFAULT_SUPPRESS_WINDOW_MS = 8000;
|
|
4
4
|
function getConsolePatchState() {
|
|
5
5
|
const globalState = globalThis;
|
|
6
6
|
if (!globalState[CONSOLE_PATCH_STATE_KEY]) {
|
|
@@ -72,12 +72,18 @@ function isLikelyVendorScriptRuntimeError(message, source) {
|
|
|
72
72
|
const normalizedMessage = String(message ?? '').trim().toLowerCase();
|
|
73
73
|
const normalizedSource = String(source ?? '').trim().toLowerCase();
|
|
74
74
|
const fromSiaraHost = normalizedSource.includes('embed.mycybersiara.com') || normalizedSource.includes('embedcdn.mycybersiara.com');
|
|
75
|
+
const fromRequestsJs = normalizedSource.includes('requests.js');
|
|
75
76
|
const isKnownVendorDomError = normalizedMessage.includes("cannot read properties of null (reading 'removechild')") &&
|
|
76
77
|
(normalizedSource.includes('jquery') || normalizedSource.includes('captcharesources'));
|
|
78
|
+
const isKnownNoErrorErrorEvent = normalizedMessage.includes('an errorevent with no error occurred') || normalizedMessage.includes('script error');
|
|
77
79
|
if (fromSiaraHost)
|
|
78
80
|
return true;
|
|
81
|
+
if (fromRequestsJs)
|
|
82
|
+
return true;
|
|
79
83
|
if (isKnownVendorDomError)
|
|
80
84
|
return true;
|
|
85
|
+
if (isKnownNoErrorErrorEvent)
|
|
86
|
+
return true;
|
|
81
87
|
return normalizedMessage === 'script error.' || normalizedMessage === 'script error';
|
|
82
88
|
}
|
|
83
89
|
/**
|
|
@@ -89,6 +95,28 @@ export function installVendorRuntimeErrorSuppression() {
|
|
|
89
95
|
if (patchState.installed)
|
|
90
96
|
return;
|
|
91
97
|
const previousOnError = patchState.originalOnError;
|
|
98
|
+
const previousErrorListener = globalThis
|
|
99
|
+
.__siaraShieldPrevErrorListener__;
|
|
100
|
+
const captureErrorListener = (event) => {
|
|
101
|
+
// Angular can surface cross-origin script failures as generic ErrorEvent "Script error."
|
|
102
|
+
// even when the underlying vendor request succeeds. This blocks those from bubbling.
|
|
103
|
+
const errorEvent = event;
|
|
104
|
+
const message = String(errorEvent?.message ?? '').trim().toLowerCase();
|
|
105
|
+
const filename = String(errorEvent?.filename ?? '').trim().toLowerCase();
|
|
106
|
+
const isGenericCrossOriginNoise = message === 'script error.' ||
|
|
107
|
+
message === 'script error' ||
|
|
108
|
+
message.includes('an errorevent with no error occurred');
|
|
109
|
+
if (!isGenericCrossOriginNoise)
|
|
110
|
+
return;
|
|
111
|
+
// Requests.js and vendor scripts are commonly cross-origin; suppress the generic noise.
|
|
112
|
+
if (filename.includes('requests.js') ||
|
|
113
|
+
filename.includes('embed.mycybersiara.com') ||
|
|
114
|
+
filename.includes('embedcdn.mycybersiara.com') ||
|
|
115
|
+
filename.includes('jquery')) {
|
|
116
|
+
event.preventDefault?.();
|
|
117
|
+
event.stopImmediatePropagation?.();
|
|
118
|
+
}
|
|
119
|
+
};
|
|
92
120
|
globalThis.onerror = (message, source, lineno, colno, error) => {
|
|
93
121
|
if (isLikelyVendorScriptRuntimeError(message, source)) {
|
|
94
122
|
return true;
|
|
@@ -98,6 +126,12 @@ export function installVendorRuntimeErrorSuppression() {
|
|
|
98
126
|
}
|
|
99
127
|
return false;
|
|
100
128
|
};
|
|
129
|
+
// Capture-phase listener to prevent Angular global error handler from logging generic cross-origin noise.
|
|
130
|
+
if (!previousErrorListener) {
|
|
131
|
+
globalThis.__siaraShieldPrevErrorListener__ =
|
|
132
|
+
captureErrorListener;
|
|
133
|
+
globalThis.addEventListener('error', captureErrorListener, true);
|
|
134
|
+
}
|
|
101
135
|
patchState.installed = true;
|
|
102
136
|
}
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLWxvZy11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC1sb2ctdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsTUFBTSx1QkFBdUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUNuRSxNQUFNLG9DQUFvQyxHQUFHLDZDQUE2QyxDQUFDO0FBQzNGLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBRXhDLFNBQVMsb0JBQW9CO0lBQzNCLE1BQU0sV0FBVyxHQUFHLFVBRW5CLENBQUM7SUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztRQUMxQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsR0FBRztZQUNyQyxLQUFLLEVBQUUsQ0FBQztZQUNSLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDdEMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN4QyxZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3hDLGFBQWEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDMUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVELFNBQVMsV0FBVztJQUNsQixNQUFNLFVBQVUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0lBQzFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3RCLElBQUksVUFBVSxDQUFDLEtBQUssR0FBRyxD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QUssQ0FBQztJQUNmLENBQUMsQ0FBQztJQUVGLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbnRlcmZhY2UgQ29uc29sZVBhdGNoU3RhdGUge1xuICBkZXB0aDogbnVtYmVyO1xuICBvcmlnaW5hbExvZzogQ29uc29sZVsnbG9nJ107XG4gIG9yaWdpbmFsSW5mbzogQ29uc29sZVsnaW5mbyddO1xuICBvcmlnaW5hbFdhcm46IENvbnNvbGVbJ3dhcm4nXTtcbiAgb3JpZ2luYWxEZWJ1ZzogQ29uc29sZVsnZGVidWcnXTtcbiAgb3JpZ2luYWxFcnJvcjogQ29uc29sZVsnZXJyb3InXTtcbn1cblxuaW50ZXJmYWNlIFZlbmRvclJ1bnRpbWVFcnJvclBhdGNoU3RhdGUge1xuICBpbnN0YWxsZWQ6IGJvb2xlYW47XG4gIG9yaWdpbmFsT25FcnJvcjogT25FcnJvckV2ZW50SGFuZGxlciB8IG51bGw7XG59XG5cbmNvbnN0IENPTlNPTEVfUEFUQ0hfU1RBVEVfS0VZID0gJ19fc2lhcmFTaGllbGRDb25zb2xlUGF0Y2hTdGF0ZV9fJztcbmNvbnN0IFZFTkRPUl9SVU5USU1FX0VSUk9SX1BBVENIX1NUQVRFX0tFWSA9ICdfX3NpYXJhU2hpZWxkVmVuZG9yUnVudGltZUVycm9yUGF0Y2hTdGF0ZV9fJztcbmNvbnN0IERFRkFVTFRfU1VQUFJFU1NfV0lORE9XX01TID0gMjAwMDtcblxuZnVuY3Rpb24gZ2V0Q29uc29sZVBhdGNoU3RhdGUoKTogQ29uc29sZVBhdGNoU3RhdGUge1xuICBjb25zdCBnbG9iYWxTdGF0ZSA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gICAgW0NPTlNPTEVfUEFUQ0hfU1RBVEVfS0VZXT86IENvbnNvbGVQYXRjaFN0YXRlO1xuICB9O1xuXG4gIGlmICghZ2xvYmFsU3RhdGVbQ09OU09MRV9QQVRDSF9TVEFURV9LRVldKSB7XG4gICAgZ2xvYmFsU3RhdGVbQ09OU09MRV9QQVRDSF9TVEFURV9LRVldID0ge1xuICAgICAgZGVwdGg6IDAsXG4gICAgICBvcmlnaW5hbExvZzogY29uc29sZS5sb2cuYmluZChjb25zb2xlKSxcbiAgICAgIG9yaWdpbmFsSW5mbzogY29uc29sZS5pbmZvLmJpbmQoY29uc29sZSksXG4gICAgICBvcmlnaW5hbFdhcm46IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpLFxuICAgICAgb3JpZ2luYWxEZWJ1ZzogY29uc29sZS5kZWJ1Zy5iaW5kKGNvbnNvbGUpLFxuICAgICAgb3JpZ2luYWxFcnJvcjogY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZ2xvYmFsU3RhdGVbQ09OU09MRV9QQVRDSF9TVEFURV9LRVldO1xufVxuXG5mdW5jdGlvbiBtdXRlQ29uc29sZSgpOiB2b2lkIHtcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldENvbnNvbGVQYXRjaFN0YXRlKCk7XG4gIHBhdGNoU3RhdGUuZGVwdGggKz0gMTtcbiAgaWYgKHBhdGNoU3RhdGUuZGVwdGggPiAxKSByZXR1cm47XG5cbiAgY29uc29sZS5sb2cgPSAoKSA9PiB1bmRlZmluZWQ7XG4gIGNvbnNvbGUuaW5mbyA9ICgpID0+IHVuZGVmaW5lZDtcbiAgY29uc29sZS53YXJuID0gKCkgPT4gdW5kZWZpbmVkO1xuICBjb25zb2xlLmRlYnVnID0gKCkgPT4gdW5kZWZpbmVkO1xuICBjb25zb2xlLmVycm9yID0gKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBhcmdzXG4gICAgICAubWFwKChhcmcpID0+ICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyA/IGFyZyA6IGFyZyBpbnN0YW5jZW9mIEVycm9yID8gYXJnLm1lc3NhZ2UgOiAnJykpXG4gICAgICAuam9pbignICcpXG4gICAgICAudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEtub3duIG5vaXN5IHVwc3RyZWFtIHZlbmRvciBydW50aW1lIGVycm9yIHBhdGggZnJvbSBDYXB0Y2hhUmVzb3VyY2VzLmpzIGJvb3RzdHJhcC5cbiAgICBpZiAoXG4gICAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdhbiBlcnJvcmV2ZW50IHdpdGggbm8gZXJyb3Igb2NjdXJyZWQnKSB8fFxuICAgICAgbm9ybWFsaXplZC5pbmNsdWRlcygnc2NyaXB0IGVycm9yJykgfHxcbiAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2NhcHRjaGFyZXNvdXJjZXMuanMnKSB8fFxuICAgICAgbm9ybWFsaXplZC5pbmNsdWRlcygnZ2V0Y3liZXJzaWFyYScpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGF0Y2hTdGF0ZS5vcmlnaW5hbEVycm9yKC4uLmFyZ3MpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB1bm11dGVDb25zb2xlKCk6IHZvaWQge1xuICBjb25zdCBwYXRjaFN0YXRlID0gZ2V0Q29uc29sZVBhdGNoU3RhdGUoKTtcbiAgaWYgKHBhdGNoU3RhdGUuZGVwdGggPT09IDApIHJldHVybjtcbiAgcGF0Y2hTdGF0ZS5kZXB0aCAtPSAxO1xuICBpZiAocGF0Y2hTdGF0ZS5kZXB0aCA+IDApIHJldHVybjtcblxuICBjb25zb2xlLmxvZyA9IHBhdGNoU3RhdGUub3JpZ2luYWxMb2c7XG4gIGNvbnNvbGUuaW5mbyA9IHBhdGNoU3RhdGUub3JpZ2luYWxJbmZvO1xuICBjb25zb2xlLndhcm4gPSBwYXRjaFN0YXRlLm9yaWdpbmFsV2FybjtcbiAgY29uc29sZS5kZWJ1ZyA9IHBhdGNoU3RhdGUub3JpZ2luYWxEZWJ1ZztcbiAgY29uc29sZS5lcnJvciA9IHBhdGNoU3RhdGUub3JpZ2luYWxFcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1cHByZXNzVmVuZG9yQ29uc29sZVdpbmRvdyh3aW5kb3dNcyA9IERFRkFVTFRfU1VQUFJFU1NfV0lORE9XX01TKTogdm9pZCB7XG4gIG11dGVDb25zb2xlKCk7XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHVubXV0ZUNvbnNvbGUoKTtcbiAgfSwgd2luZG93TXMpO1xufVxuXG5mdW5jdGlvbiBnZXRWZW5kb3JSdW50aW1lRXJyb3JQYXRjaFN0YXRlKCk6IFZlbmRvclJ1bnRpbWVFcnJvclBhdGNoU3RhdGUge1xuICBjb25zdCBnbG9iYWxTdGF0ZSA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gICAgW1ZFTkRPUl9SVU5USU1FX0VSUk9SX1BBVENIX1NUQVRFX0tFWV0/OiBWZW5kb3JSdW50aW1lRXJyb3JQYXRjaFN0YXRlO1xuICB9O1xuXG4gIGlmICghZ2xvYmFsU3RhdGVbVkVORE9SX1JVTlRJTUVfRVJST1JfUEFUQ0hfU1RBVEVfS0VZXSkge1xuICAgIGdsb2JhbFN0YXRlW1ZFTkRPUl9SVU5USU1FX0VSUk9SX1BBVENIX1NUQVRFX0tFWV0gPSB7XG4gICAgICBpbnN0YWxsZWQ6IGZhbHNlLFxuICAgICAgb3JpZ2luYWxPbkVycm9yOiBnbG9iYWxUaGlzLm9uZXJyb3IgPz8gbnVsbCxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGdsb2JhbFN0YXRlW1ZFTkRPUl9SVU5USU1FX0VSUk9SX1BBVENIX1NUQVRFX0tFWV07XG59XG5cbmZ1bmN0aW9uIGlzTGlrZWx5VmVuZG9yU2NyaXB0UnVudGltZUVycm9yKG1lc3NhZ2U6IHVua25vd24sIHNvdXJjZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICBjb25zdCBub3JtYWxpemVkTWVzc2FnZSA9IFN0cmluZyhtZXNzYWdlID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgbm9ybWFsaXplZFNvdXJjZSA9IFN0cmluZyhzb3VyY2UgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBmcm9tU2lhcmFIb3N0ID1cbiAgICBub3JtYWxpemVkU291cmNlLmluY2x1ZGVzKCdlbWJlZC5teWN5YmVyc2lhcmEuY29tJykgfHwgbm9ybWFsaXplZFNvdXJjZS5pbmNsdWRlcygnZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbScpO1xuICBjb25zdCBpc0tub3duVmVuZG9yRG9tRXJyb3IgPVxuICAgIG5vcm1hbGl6ZWRNZXNzYWdlLmluY2x1ZGVzKFwiY2Fubm90IHJlYWQgcHJvcGVydGllcyBvZiBudWxsIChyZWFkaW5nICdyZW1vdmVjaGlsZCcpXCIpICYmXG4gICAgKG5vcm1hbGl6ZWRTb3VyY2UuaW5jbHVkZXMoJ2pxdWVyeScpIHx8IG5vcm1hbGl6ZWRTb3VyY2UuaW5jbHVkZXMoJ2NhcHRjaGFyZXNvdXJjZXMnKSk7XG5cbiAgaWYgKGZyb21TaWFyYUhvc3QpIHJldHVybiB0cnVlO1xuICBpZiAoaXNLbm93blZlbmRvckRvbUVycm9yKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRNZXNzYWdlID09PSAnc2NyaXB0IGVycm9yLicgfHwgbm9ybWFsaXplZE1lc3NhZ2UgPT09ICdzY3JpcHQgZXJyb3InO1xufVxuXG4vKipcbiAqIFN1cHByZXNzZXMgbm9pc3kgY3Jvc3Mtb3JpZ2luIHZlbmRvciBydW50aW1lIHNjcmlwdCBlcnJvcnMgc28gQW5ndWxhciBkb2VzIG5vdFxuICogc3VyZmFjZSB0aGVtIGFzIHVuaGFuZGxlZCBgRXJyb3JFdmVudGAgY3Jhc2hlcyBpbiB0aGUgY29uc29sZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbGxWZW5kb3JSdW50aW1lRXJyb3JTdXBwcmVzc2lvbigpOiB2b2lkIHtcbiAgY29uc3QgcGF0Y2hTdGF0ZSA9IGdldFZlbmRvclJ1bnRpbWVFcnJvclBhdGNoU3RhdGUoKTtcbiAgaWYgKHBhdGNoU3RhdGUuaW5zdGFsbGVkKSByZXR1cm47XG5cbiAgY29uc3QgcHJldmlvdXNPbkVycm9yID0gcGF0Y2hTdGF0ZS5vcmlnaW5hbE9uRXJyb3I7XG4gIGdsb2JhbFRoaXMub25lcnJvciA9IChtZXNzYWdlLCBzb3VyY2UsIGxpbmVubywgY29sbm8sIGVycm9yKSA9PiB7XG4gICAgaWYgKGlzTGlrZWx5VmVuZG9yU2NyaXB0UnVudGltZUVycm9yKG1lc3NhZ2UsIHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJldmlvdXNPbkVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcHJldmlvdXNPbkVycm9yLmNhbGwoZ2xvYmFsVGhpcywgbWVzc2FnZSwgc291cmNlLCBsaW5lbm8sIGNvbG5vLCBlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHBhdGNoU3RhdGUuaW5zdGFsbGVkID0gdHJ1ZTtcbn1cblxuIl19
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLWxvZy11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC1sb2ctdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0EsTUFBTSx1QkFBdUIsR0FBRyxrQ0FBa0MsQ0FBQztBQUNuRSxNQUFNLG9DQUFvQyxHQUFHLDZDQUE2QyxDQUFDO0FBQzNGLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBRXhDLFNBQVMsb0JBQW9CO0lBQzNCLE1BQU0sV0FBVyxHQUFHLFVBRW5CLENBQUM7SUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQztRQUMxQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsR0FBRztZQUNyQyxLQUFLLEVBQUUsQ0FBQztZQUNSLFdBQVcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDdEMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUN4QyxZQUFZLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3hDLGFBQWEsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDMUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVELFNBQVMsV0FBVztJQUNsQixNQUFNLFVBQVUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO0lBQzFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ3RCLElBQUksVUFBVSxDQUFDLEtBQUssR0FBRyxD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VSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDLENBQUM7SUFFRiwwR0FBMEc7SUFDMUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDMUIsVUFBb0YsQ0FBQyxnQ0FBZ0M7WUFDcEgsb0JBQW9CLENBQUM7UUFDdkIsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBDb25zb2xlUGF0Y2hTdGF0ZSB7XG4gIGRlcHRoOiBudW1iZXI7XG4gIG9yaWdpbmFsTG9nOiBDb25zb2xlWydsb2cnXTtcbiAgb3JpZ2luYWxJbmZvOiBDb25zb2xlWydpbmZvJ107XG4gIG9yaWdpbmFsV2FybjogQ29uc29sZVsnd2FybiddO1xuICBvcmlnaW5hbERlYnVnOiBDb25zb2xlWydkZWJ1ZyddO1xuICBvcmlnaW5hbEVycm9yOiBDb25zb2xlWydlcnJvciddO1xufVxuXG5pbnRlcmZhY2UgVmVuZG9yUnVudGltZUVycm9yUGF0Y2hTdGF0ZSB7XG4gIGluc3RhbGxlZDogYm9vbGVhbjtcbiAgb3JpZ2luYWxPbkVycm9yOiBPbkVycm9yRXZlbnRIYW5kbGVyIHwgbnVsbDtcbn1cblxuY29uc3QgQ09OU09MRV9QQVRDSF9TVEFURV9LRVkgPSAnX19zaWFyYVNoaWVsZENvbnNvbGVQYXRjaFN0YXRlX18nO1xuY29uc3QgVkVORE9SX1JVTlRJTUVfRVJST1JfUEFUQ0hfU1RBVEVfS0VZID0gJ19fc2lhcmFTaGllbGRWZW5kb3JSdW50aW1lRXJyb3JQYXRjaFN0YXRlX18nO1xuY29uc3QgREVGQVVMVF9TVVBQUkVTU19XSU5ET1dfTVMgPSA4MDAwO1xuXG5mdW5jdGlvbiBnZXRDb25zb2xlUGF0Y2hTdGF0ZSgpOiBDb25zb2xlUGF0Y2hTdGF0ZSB7XG4gIGNvbnN0IGdsb2JhbFN0YXRlID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHtcbiAgICBbQ09OU09MRV9QQVRDSF9TVEFURV9LRVldPzogQ29uc29sZVBhdGNoU3RhdGU7XG4gIH07XG5cbiAgaWYgKCFnbG9iYWxTdGF0ZVtDT05TT0xFX1BBVENIX1NUQVRFX0tFWV0pIHtcbiAgICBnbG9iYWxTdGF0ZVtDT05TT0xFX1BBVENIX1NUQVRFX0tFWV0gPSB7XG4gICAgICBkZXB0aDogMCxcbiAgICAgIG9yaWdpbmFsTG9nOiBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpLFxuICAgICAgb3JpZ2luYWxJbmZvOiBjb25zb2xlLmluZm8uYmluZChjb25zb2xlKSxcbiAgICAgIG9yaWdpbmFsV2FybjogY29uc29sZS53YXJuLmJpbmQoY29uc29sZSksXG4gICAgICBvcmlnaW5hbERlYnVnOiBjb25zb2xlLmRlYnVnLmJpbmQoY29uc29sZSksXG4gICAgICBvcmlnaW5hbEVycm9yOiBjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBnbG9iYWxTdGF0ZVtDT05TT0xFX1BBVENIX1NUQVRFX0tFWV07XG59XG5cbmZ1bmN0aW9uIG11dGVDb25zb2xlKCk6IHZvaWQge1xuICBjb25zdCBwYXRjaFN0YXRlID0gZ2V0Q29uc29sZVBhdGNoU3RhdGUoKTtcbiAgcGF0Y2hTdGF0ZS5kZXB0aCArPSAxO1xuICBpZiAocGF0Y2hTdGF0ZS5kZXB0aCA+IDEpIHJldHVybjtcblxuICBjb25zb2xlLmxvZyA9ICgpID0+IHVuZGVmaW5lZDtcbiAgY29uc29sZS5pbmZvID0gKCkgPT4gdW5kZWZpbmVkO1xuICBjb25zb2xlLndhcm4gPSAoKSA9PiB1bmRlZmluZWQ7XG4gIGNvbnNvbGUuZGVidWcgPSAoKSA9PiB1bmRlZmluZWQ7XG4gIGNvbnNvbGUuZXJyb3IgPSAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGFyZ3NcbiAgICAgIC5tYXAoKGFyZykgPT4gKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnID8gYXJnIDogYXJnIGluc3RhbmNlb2YgRXJyb3IgPyBhcmcubWVzc2FnZSA6ICcnKSlcbiAgICAgIC5qb2luKCcgJylcbiAgICAgIC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gS25vd24gbm9pc3kgdXBzdHJlYW0gdmVuZG9yIHJ1bnRpbWUgZXJyb3IgcGF0aCBmcm9tIENhcHRjaGFSZXNvdXJjZXMuanMgYm9vdHN0cmFwLlxuICAgIGlmIChcbiAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2FuIGVycm9yZXZlbnQgd2l0aCBubyBlcnJvciBvY2N1cnJlZCcpIHx8XG4gICAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdzY3JpcHQgZXJyb3InKSB8fFxuICAgICAgbm9ybWFsaXplZC5pbmNsdWRlcygnY2FwdGNoYXJlc291cmNlcy5qcycpIHx8XG4gICAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdnZXRjeWJlcnNpYXJhJylcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYXRjaFN0YXRlLm9yaWdpbmFsRXJyb3IoLi4uYXJncyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVubXV0ZUNvbnNvbGUoKTogdm9pZCB7XG4gIGNvbnN0IHBhdGNoU3RhdGUgPSBnZXRDb25zb2xlUGF0Y2hTdGF0ZSgpO1xuICBpZiAocGF0Y2hTdGF0ZS5kZXB0aCA9PT0gMCkgcmV0dXJuO1xuICBwYXRjaFN0YXRlLmRlcHRoIC09IDE7XG4gIGlmIChwYXRjaFN0YXRlLmRlcHRoID4gMCkgcmV0dXJuO1xuXG4gIGNvbnNvbGUubG9nID0gcGF0Y2hTdGF0ZS5vcmlnaW5hbExvZztcbiAgY29uc29sZS5pbmZvID0gcGF0Y2hTdGF0ZS5vcmlnaW5hbEluZm87XG4gIGNvbnNvbGUud2FybiA9IHBhdGNoU3RhdGUub3JpZ2luYWxXYXJuO1xuICBjb25zb2xlLmRlYnVnID0gcGF0Y2hTdGF0ZS5vcmlnaW5hbERlYnVnO1xuICBjb25zb2xlLmVycm9yID0gcGF0Y2hTdGF0ZS5vcmlnaW5hbEVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcHJlc3NWZW5kb3JDb25zb2xlV2luZG93KHdpbmRvd01zID0gREVGQVVMVF9TVVBQUkVTU19XSU5ET1dfTVMpOiB2b2lkIHtcbiAgbXV0ZUNvbnNvbGUoKTtcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgdW5tdXRlQ29uc29sZSgpO1xuICB9LCB3aW5kb3dNcyk7XG59XG5cbmZ1bmN0aW9uIGdldFZlbmRvclJ1bnRpbWVFcnJvclBhdGNoU3RhdGUoKTogVmVuZG9yUnVudGltZUVycm9yUGF0Y2hTdGF0ZSB7XG4gIGNvbnN0IGdsb2JhbFN0YXRlID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHtcbiAgICBbVkVORE9SX1JVTlRJTUVfRVJST1JfUEFUQ0hfU1RBVEVfS0VZXT86IFZlbmRvclJ1bnRpbWVFcnJvclBhdGNoU3RhdGU7XG4gIH07XG5cbiAgaWYgKCFnbG9iYWxTdGF0ZVtWRU5ET1JfUlVOVElNRV9FUlJPUl9QQVRDSF9TVEFURV9LRVldKSB7XG4gICAgZ2xvYmFsU3RhdGVbVkVORE9SX1JVTlRJTUVfRVJST1JfUEFUQ0hfU1RBVEVfS0VZXSA9IHtcbiAgICAgIGluc3RhbGxlZDogZmFsc2UsXG4gICAgICBvcmlnaW5hbE9uRXJyb3I6IGdsb2JhbFRoaXMub25lcnJvciA/PyBudWxsLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZ2xvYmFsU3RhdGVbVkVORE9SX1JVTlRJTUVfRVJST1JfUEFUQ0hfU1RBVEVfS0VZXTtcbn1cblxuZnVuY3Rpb24gaXNMaWtlbHlWZW5kb3JTY3JpcHRSdW50aW1lRXJyb3IobWVzc2FnZTogdW5rbm93biwgc291cmNlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRNZXNzYWdlID0gU3RyaW5nKG1lc3NhZ2UgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBub3JtYWxpemVkU291cmNlID0gU3RyaW5nKHNvdXJjZSA/PyAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGZyb21TaWFyYUhvc3QgPVxuICAgIG5vcm1hbGl6ZWRTb3VyY2UuaW5jbHVkZXMoJ2VtYmVkLm15Y3liZXJzaWFyYS5jb20nKSB8fCBub3JtYWxpemVkU291cmNlLmluY2x1ZGVzKCdlbWJlZGNkbi5teWN5YmVyc2lhcmEuY29tJyk7XG4gIGNvbnN0IGZyb21SZXF1ZXN0c0pzID0gbm9ybWFsaXplZFNvdXJjZS5pbmNsdWRlcygncmVxdWVzdHMuanMnKTtcbiAgY29uc3QgaXNLbm93blZlbmRvckRvbUVycm9yID1cbiAgICBub3JtYWxpemVkTWVzc2FnZS5pbmNsdWRlcyhcImNhbm5vdCByZWFkIHByb3BlcnRpZXMgb2YgbnVsbCAocmVhZGluZyAncmVtb3ZlY2hpbGQnKVwiKSAmJlxuICAgIChub3JtYWxpemVkU291cmNlLmluY2x1ZGVzKCdqcXVlcnknKSB8fCBub3JtYWxpemVkU291cmNlLmluY2x1ZGVzKCdjYXB0Y2hhcmVzb3VyY2VzJykpO1xuICBjb25zdCBpc0tub3duTm9FcnJvckVycm9yRXZlbnQgPVxuICAgIG5vcm1hbGl6ZWRNZXNzYWdlLmluY2x1ZGVzKCdhbiBlcnJvcmV2ZW50IHdpdGggbm8gZXJyb3Igb2NjdXJyZWQnKSB8fCBub3JtYWxpemVkTWVzc2FnZS5pbmNsdWRlcygnc2NyaXB0IGVycm9yJyk7XG5cbiAgaWYgKGZyb21TaWFyYUhvc3QpIHJldHVybiB0cnVlO1xuICBpZiAoZnJvbVJlcXVlc3RzSnMpIHJldHVybiB0cnVlO1xuICBpZiAoaXNLbm93blZlbmRvckRvbUVycm9yKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGlzS25vd25Ob0Vycm9yRXJyb3JFdmVudCkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBub3JtYWxpemVkTWVzc2FnZSA9PT0gJ3NjcmlwdCBlcnJvci4nIHx8IG5vcm1hbGl6ZWRNZXNzYWdlID09PSAnc2NyaXB0IGVycm9yJztcbn1cblxuLyoqXG4gKiBTdXBwcmVzc2VzIG5vaXN5IGNyb3NzLW9yaWdpbiB2ZW5kb3IgcnVudGltZSBzY3JpcHQgZXJyb3JzIHNvIEFuZ3VsYXIgZG9lcyBub3RcbiAqIHN1cmZhY2UgdGhlbSBhcyB1bmhhbmRsZWQgYEVycm9yRXZlbnRgIGNyYXNoZXMgaW4gdGhlIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnN0YWxsVmVuZG9yUnVudGltZUVycm9yU3VwcHJlc3Npb24oKTogdm9pZCB7XG4gIGNvbnN0IHBhdGNoU3RhdGUgPSBnZXRWZW5kb3JSdW50aW1lRXJyb3JQYXRjaFN0YXRlKCk7XG4gIGlmIChwYXRjaFN0YXRlLmluc3RhbGxlZCkgcmV0dXJuO1xuXG4gIGNvbnN0IHByZXZpb3VzT25FcnJvciA9IHBhdGNoU3RhdGUub3JpZ2luYWxPbkVycm9yO1xuICBjb25zdCBwcmV2aW91c0Vycm9yTGlzdGVuZXIgPSAoZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIHsgX19zaWFyYVNoaWVsZFByZXZFcnJvckxpc3RlbmVyX18/OiAoZXY6IEV2ZW50KSA9PiB2b2lkIH0pXG4gICAgLl9fc2lhcmFTaGllbGRQcmV2RXJyb3JMaXN0ZW5lcl9fO1xuXG4gIGNvbnN0IGNhcHR1cmVFcnJvckxpc3RlbmVyID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgIC8vIEFuZ3VsYXIgY2FuIHN1cmZhY2UgY3Jvc3Mtb3JpZ2luIHNjcmlwdCBmYWlsdXJlcyBhcyBnZW5lcmljIEVycm9yRXZlbnQgXCJTY3JpcHQgZXJyb3IuXCJcbiAgICAvLyBldmVuIHdoZW4gdGhlIHVuZGVybHlpbmcgdmVuZG9yIHJlcXVlc3Qgc3VjY2VlZHMuIFRoaXMgYmxvY2tzIHRob3NlIGZyb20gYnViYmxpbmcuXG4gICAgY29uc3QgZXJyb3JFdmVudCA9IGV2ZW50IGFzIEVycm9yRXZlbnQ7XG4gICAgY29uc3QgbWVzc2FnZSA9IFN0cmluZyhlcnJvckV2ZW50Py5tZXNzYWdlID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IFN0cmluZygoZXJyb3JFdmVudCBhcyB1bmtub3duIGFzIHsgZmlsZW5hbWU/OiBzdHJpbmcgfSk/LmZpbGVuYW1lID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcblxuICAgIGNvbnN0IGlzR2VuZXJpY0Nyb3NzT3JpZ2luTm9pc2UgPVxuICAgICAgbWVzc2FnZSA9PT0gJ3NjcmlwdCBlcnJvci4nIHx8XG4gICAgICBtZXNzYWdlID09PSAnc2NyaXB0IGVycm9yJyB8fFxuICAgICAgbWVzc2FnZS5pbmNsdWRlcygnYW4gZXJyb3JldmVudCB3aXRoIG5vIGVycm9yIG9jY3VycmVkJyk7XG5cbiAgICBpZiAoIWlzR2VuZXJpY0Nyb3NzT3JpZ2luTm9pc2UpIHJldHVybjtcblxuICAgIC8vIFJlcXVlc3RzLmpzIGFuZCB2ZW5kb3Igc2NyaXB0cyBhcmUgY29tbW9ubHkgY3Jvc3Mtb3JpZ2luOyBzdXBwcmVzcyB0aGUgZ2VuZXJpYyBub2lzZS5cbiAgICBpZiAoXG4gICAgICBmaWxlbmFtZS5pbmNsdWRlcygncmVxdWVzdHMuanMnKSB8fFxuICAgICAgZmlsZW5hbWUuaW5jbHVkZXMoJ2VtYmVkLm15Y3liZXJzaWFyYS5jb20nKSB8fFxuICAgICAgZmlsZW5hbWUuaW5jbHVkZXMoJ2VtYmVkY2RuLm15Y3liZXJzaWFyYS5jb20nKSB8fFxuICAgICAgZmlsZW5hbWUuaW5jbHVkZXMoJ2pxdWVyeScpXG4gICAgKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdD8uKCk7XG4gICAgICAoZXZlbnQgYXMgdW5rbm93biBhcyB7IHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj86ICgpID0+IHZvaWQgfSkuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uPy4oKTtcbiAgICB9XG4gIH07XG5cbiAgZ2xvYmFsVGhpcy5vbmVycm9yID0gKG1lc3NhZ2UsIHNvdXJjZSwgbGluZW5vLCBjb2xubywgZXJyb3IpID0+IHtcbiAgICBpZiAoaXNMaWtlbHlWZW5kb3JTY3JpcHRSdW50aW1lRXJyb3IobWVzc2FnZSwgc291cmNlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcmV2aW91c09uRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBwcmV2aW91c09uRXJyb3IuY2FsbChnbG9iYWxUaGlzLCBtZXNzYWdlLCBzb3VyY2UsIGxpbmVubywgY29sbm8sIGVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgLy8gQ2FwdHVyZS1waGFzZSBsaXN0ZW5lciB0byBwcmV2ZW50IEFuZ3VsYXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIgZnJvbSBsb2dnaW5nIGdlbmVyaWMgY3Jvc3Mtb3JpZ2luIG5vaXNlLlxuICBpZiAoIXByZXZpb3VzRXJyb3JMaXN0ZW5lcikge1xuICAgIChnbG9iYWxUaGlzIGFzIHVua25vd24gYXMgeyBfX3NpYXJhU2hpZWxkUHJldkVycm9yTGlzdGVuZXJfXz86IChldjogRXZlbnQpID0+IHZvaWQgfSkuX19zaWFyYVNoaWVsZFByZXZFcnJvckxpc3RlbmVyX18gPVxuICAgICAgY2FwdHVyZUVycm9yTGlzdGVuZXI7XG4gICAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGNhcHR1cmVFcnJvckxpc3RlbmVyLCB0cnVlKTtcbiAgfVxuXG4gIHBhdGNoU3RhdGUuaW5zdGFsbGVkID0gdHJ1ZTtcbn1cblxuIl19
|
|
@@ -74,6 +74,11 @@ export class SiaraShieldComponent {
|
|
|
74
74
|
return;
|
|
75
75
|
// Ensure the host element is in DOM before scripts run.
|
|
76
76
|
void this.host.nativeElement;
|
|
77
|
+
if (!options.allowVendorConsoleLogs) {
|
|
78
|
+
// Install suppression as early as possible so Angular doesn't log cross-origin vendor noise during bootstrap.
|
|
79
|
+
installVendorRuntimeErrorSuppression();
|
|
80
|
+
suppressVendorConsoleWindow();
|
|
81
|
+
}
|
|
77
82
|
installCaptchaSubmitGuard();
|
|
78
83
|
if (!options.publicKey) {
|
|
79
84
|
throw new Error('SiaraShieldComponent: publicKey is required.');
|
|
@@ -98,10 +103,6 @@ export class SiaraShieldComponent {
|
|
|
98
103
|
if (!initCaptchaFn) {
|
|
99
104
|
throw new Error('SiaraShield: InitCaptcha() is not available after loading scripts.');
|
|
100
105
|
}
|
|
101
|
-
if (!options.allowVendorConsoleLogs) {
|
|
102
|
-
suppressVendorConsoleWindow();
|
|
103
|
-
installVendorRuntimeErrorSuppression();
|
|
104
|
-
}
|
|
105
106
|
runInRootZone(() => initCaptchaFn(options.publicKey));
|
|
106
107
|
await this.waitForCheckCaptchaApi();
|
|
107
108
|
this.initialized = true;
|
|
@@ -236,4 +237,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
236
237
|
}], token: [{
|
|
237
238
|
type: Output
|
|
238
239
|
}] } });
|
|
239
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0csT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQUVuRixNQUFNLG1CQUFtQixHQUFHLGtFQUFrRSxDQUFDO0FBQy9GLE1BQU0sa0JBQWtCLEdBQUcsc0VBQXNFLENBQUM7QUFDbEcsTUFBTSxxQkFBcUIsR0FBRyx5RUFBeUUsQ0FBQztBQUN4RyxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFNLGtDQUFrQyxHQUFHLElBQUksQ0FBQztBQUNoRCxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUVyQyxLQUFLLFVBQVUsdUJBQXVCLENBQUMsV0FBcUIsRUFBRSxTQUFTLEdBQUcsa0NBQWtDO0lBQzFHLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFDMUMsSUFBSSxXQUFXLENBQUMs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O2dCQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt3R0F4TVUsb0JBQW9COzRGQUFwQixvQkFBb0IsMk9BSHJCLGlDQUFpQzs7NEZBR2hDLG9CQUFvQjtrQkFOaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxpQ0FBaUM7b0JBQzNDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUN0QztzSEFFNEIsU0FBUztzQkFBbkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBS0ksS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaWFyYVNoaWVsZExvYWRlclNlcnZpY2UgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC1sb2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRJbml0Q2FwdGNoYUZuLCBnZXRTaWFyYVNoaWVsZEdsb2JhbHMgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC5nbG9iYWxzJztcbmltcG9ydCB7IGluc3RhbGxWZW5kb3JSdW50aW1lRXJyb3JTdXBwcmVzc2lvbiwgc3VwcHJlc3NWZW5kb3JDb25zb2xlV2luZG93IH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtbG9nLXV0aWxzJztcbmltcG9ydCB7IGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC1zdWJtaXQtZ3VhcmQnO1xuaW1wb3J0IHsgcHJlcGFyZVNjcmlwdE5vbmNlIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtc2NyaXB0LXV0aWxzJztcbmltcG9ydCB7IGluc3RhbGxWZW5kb3JDaGFsbGVuZ2VSdW50aW1lUGF0Y2ggfSBmcm9tICcuL3NpYXJhLXNoaWVsZC12ZW5kb3ItcnVudGltZSc7XG5cbmNvbnN0IEpRVUVSWV9GQUxMQkFDS19TUkMgPSAnaHR0cHM6Ly9lbWJlZGNkbi5teWN5YmVyc2lhcmEuY29tL2NhcGNoYS10ZW1wbGUvanMvanF1ZXJ5Lm1pbi5qcyc7XG5jb25zdCBDQVBUQ0hBX1NDUklQVF9TUkMgPSAnaHR0cHM6Ly9lbWJlZGNkbi5teWN5YmVyc2lhcmEuY29tL0NhcHRjaGFGb3JtYXRlL0NhcHRjaGFSZXNvdXJjZXMuanMnO1xuY29uc3QgVkFMSURBVElPTl9TQ1JJUFRfU1JDID0gJ2h0dHBzOi8vZW1iZWQubXljeWJlcnNpYXJhLmNvbS9DYXB0Y2hhRm9ybWF0ZS9TaWFyYVNoaWVsZF9WYWxpZGF0aW9uLmpzJztcbmNvbnN0IENBUFRDSEFfUkVBRFlfVElNRU9VVF9NUyA9IDgwMDA7XG5jb25zdCBDQVBUQ0hBX0NPTlRBSU5FUl9SRUFEWV9USU1FT1VUX01TID0gMjAwMDtcbmNvbnN0IENBUFRDSEFfQ09OVEFJTkVSX1BPTExfTVMgPSA1MDtcblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckNhcHRjaGFDb250YWluZXIoZG9jdW1lbnRSZWY6IERvY3VtZW50LCB0aW1lb3V0TXMgPSBDQVBUQ0hBX0NPTlRBSU5FUl9SRUFEWV9USU1FT1VUX01TKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDwgdGltZW91dE1zKSB7XG4gICAgaWYgKGRvY3VtZW50UmVmLnF1ZXJ5U2VsZWN0b3IoJy5TaWFyYVNoaWVsZCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIENBUFRDSEFfQ09OVEFJTkVSX1BPTExfTVMpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnN1cmVBY2Nlc3NpYmlsaXR5UG9wdXBBbGlhc2VzKCk6IHZvaWQge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBhbGlhc05hbWVzID0gW1xuICAgICdSZW1vdmVBY2Nlc2liaWxpdHlQb3B1cCcsXG4gICAgJ19SZW1vdmVBY2Nlc2liaWxpdHlQb3B1cCcsXG4gICAgJ1JlbW92ZUFjY2VzaWJsaXR5UG9wdXAnLFxuICAgICdfUmVtb3ZlQWNjZXNpYmxpdHlQb3B1cCcsXG4gIF0gYXMgY29uc3Q7XG5cbiAgY29uc3QgZXhpc3RpbmcgPSBhbGlhc05hbWVzXG4gICAgLm1hcCgobmFtZSkgPT4gZ1tuYW1lXSlcbiAgICAuZmluZCgodmFsdWUpOiB2YWx1ZSBpcyAoKSA9PiB2b2lkID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyk7XG5cbiAgY29uc3Qgc3RhYmxlRm4gPSBleGlzdGluZyA/PyAoKCkgPT4gdW5kZWZpbmVkKTtcbiAgZm9yIChjb25zdCBuYW1lIG9mIGFsaWFzTmFtZXMpIHtcbiAgICBnW25hbWVdID0gc3RhYmxlRm47XG4gIH1cbn1cblxuZnVuY3Rpb24gcnVuSW5Sb290Wm9uZTxUPihmbjogKCkgPT4gVCk6IFQge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHsgWm9uZT86IHsgcm9vdD86IHsgcnVuPzogPFU+KGNiOiAoKSA9PiBVKSA9PiBVIH0gfSB9O1xuICBjb25zdCB6b25lUm9vdFJ1biA9IGcuWm9uZT8ucm9vdD8ucnVuO1xuICBpZiAodHlwZW9mIHpvbmVSb290UnVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHpvbmVSb290UnVuLmNhbGwoZy5ab25lPy5yb290LCBmbikgYXMgVDtcbiAgfVxuICByZXR1cm4gZm4oKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWFyYVNoaWVsZEluaXRPcHRpb25zIHtcbiAgLyoqIFNpYXJhU2hpZWxkIHB1YmxpYyBrZXkuIFVzZSBcIlRFU1QtQ1lCRVJTSUFSQVwiIGZvciBzdGFnaW5nL2RldmVsb3BtZW50LiAqL1xuICBwdWJsaWNLZXk6IHN0cmluZztcbiAgLyoqIExvYWRzIGpRdWVyeSBiZWZvcmUgU2lhcmFTaGllbGQgc2NyaXB0LiBEZWZhdWx0IGlzIHRydWUgZm9yIGVhc2llciBpbnRlZ3JhdGlvbi4gU2V0IHRvIGZhbHNlIG9ubHkgaWYgeW91ciBwYWdlIGFscmVhZHkgaW5jbHVkZXMgalF1ZXJ5LiAqL1xuICBsb2FkSlF1ZXJ5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENTUCBub25jZSB2YWx1ZSAod2l0aG91dCB0aGUgYCdub25jZS0nYCBwcmVmaXgpLlxuICAgKiBJZiBvbWl0dGVkLCB3ZSBhdHRlbXB0IHRvIHJlc29sdmUgaXQgZnJvbSBleGlzdGluZyBgc2NyaXB0W25vbmNlXWAgb3IgYG1ldGFbbmFtZT1cImNzcC1ub25jZVwiXWAuXG4gICAqL1xuICBjc3BOb25jZT86IHN0cmluZztcbiAgLyoqIFNldCB0cnVlIG9ubHkgd2hlbiBhY3RpdmVseSBkZWJ1Z2dpbmcgdmVuZG9yL3J1bnRpbWUgaW50ZXJuYWxzIGluIGJyb3dzZXIgY29uc29sZS4gKi9cbiAgYWxsb3dWZW5kb3JDb25zb2xlTG9ncz86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpYXJhLXNoaWVsZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cIlNpYXJhU2hpZWxkXCI+PC9kaXY+YCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgU2lhcmFTaGllbGRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljS2V5ITogc3RyaW5nO1xuICBASW5wdXQoKSBsb2FkSlF1ZXJ5ID0gdHJ1ZTtcbiAgQElucHV0KCkgY3NwTm9uY2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFsbG93VmVuZG9yQ29uc29sZUxvZ3MgPSBmYWxzZTtcblxuICAvKipcbiAgICogRW1pdHMgdGhlIGN1cnJlbnQgYEN5YmVyU2lhcmFUb2tlbmAgcmlnaHQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGBjaGVja0NhcHRjaGEoKWAuXG4gICAqL1xuICBAT3V0cHV0KCkgdG9rZW4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBwcml2YXRlIGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvYWRlcjogU2lhcmFTaGllbGRMb2FkZXJTZXJ2aWNlLFxuICApIHt9XG5cbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCh7XG4gICAgICBwdWJsaWNLZXk6IHRoaXMucHVibGljS2V5LFxuICAgICAgbG9hZEpRdWVyeTogdGhpcy5sb2FkSlF1ZXJ5LFxuICAgICAgY3NwTm9uY2U6IHRoaXMuY3NwTm9uY2UsXG4gICAgICBhbGxvd1ZlbmRvckNvbnNvbGVMb2dzOiB0aGlzLmFsbG93VmVuZG9yQ29uc29sZUxvZ3MsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBpbml0KG9wdGlvbnM6IFNpYXJhU2hpZWxkSW5pdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkgcmV0dXJuO1xuXG4gICAgLy8gRW5zdXJlIHRoZSBob3N0IGVsZW1lbnQgaXMgaW4gRE9NIGJlZm9yZSBzY3JpcHRzIHJ1bi5cbiAgICB2b2lkIHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O1xuICAgIGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQoKTtcblxuICAgIGlmICghb3B0aW9ucy5wdWJsaWNLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2lhcmFTaGllbGRDb21wb25lbnQ6IHB1YmxpY0tleSBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIENTUCBub25jZSBwcm9wYWdhdGlvbiBzbyBhbnkgdmVuZG9yLWluamVjdGVkIGNoaWxkIHNjcmlwdHMgZ2V0IHRoZSBzYW1lIG5vbmNlLlxuICAgIGNvbnN0IGRvY3VtZW50UmVmID0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudCA/PyBnbG9iYWxUaGlzLmRvY3VtZW50ID8/IG51bGw7XG4gICAgY29uc3Qgbm9uY2UgPSBwcmVwYXJlU2NyaXB0Tm9uY2UoZG9jdW1lbnRSZWYsIG9wdGlvbnMuY3NwTm9uY2UpO1xuICAgIGlmIChkb2N1bWVudFJlZikge1xuICAgICAgLy8gVmVuZG9yIHNjcmlwdHMgb2Z0ZW4gcXVlcnkgYC5TaWFyYVNoaWVsZGAgaW1tZWRpYXRlbHk7IGVuc3VyZSBpdCdzIHByZXNlbnQgaW4gRE9NLlxuICAgICAgYXdhaXQgd2FpdEZvckNhcHRjaGFDb250YWluZXIoZG9jdW1lbnRSZWYpO1xuICAgIH1cbiAgICBpZiAoKG9wdGlvbnMubG9hZEpRdWVyeSA/PyB0cnVlKSAmJiAhdGhpcy5pc0pRdWVyeUFscmVhZHlBdmFpbGFibGUoKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkZXIubG9hZFNjcmlwdChKUVVFUllfRkFMTEJBQ0tfU1JDLCB7IG5vbmNlIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMubG9hZGVyLmxvYWRTY3JpcHQoQ0FQVENIQV9TQ1JJUFRfU1JDLCB7IG5vbmNlIH0pO1xuICAgIGF3YWl0IHRoaXMubG9hZGVyLmxvYWRTY3JpcHQoVkFMSURBVElPTl9TQ1JJUFRfU1JDLCB7IG5vbmNlIH0pO1xuXG4gICAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICAgIGVuc3VyZUFjY2Vzc2liaWxpdHlQb3B1cEFsaWFzZXMoKTtcbiAgICB0aGlzLnByZXZlbnREdXBsaWNhdGVWYWxpZGF0aW9uQm9vdHN0cmFwKGcpO1xuICAgIGluc3RhbGxWZW5kb3JDaGFsbGVuZ2VSdW50aW1lUGF0Y2goKTtcbiAgICBjb25zdCBpbml0Q2FwdGNoYUZuID0gZ2V0SW5pdENhcHRjaGFGbihnKTtcbiAgICBpZiAoIWluaXRDYXB0Y2hhRm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1NpYXJhU2hpZWxkOiBJbml0Q2FwdGNoYSgpIGlzIG5vdCBhdmFpbGFibGUgYWZ0ZXIgbG9hZGluZyBzY3JpcHRzLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5hbGxvd1ZlbmRvckNvbnNvbGVMb2dzKSB7XG4gICAgICBzdXBwcmVzc1ZlbmRvckNvbnNvbGVXaW5kb3coKTtcbiAgICAgIGluc3RhbGxWZW5kb3JSdW50aW1lRXJyb3JTdXBwcmVzc2lvbigpO1xuICAgIH1cbiAgICBydW5JblJvb3Rab25lKCgpID0+IGluaXRDYXB0Y2hhRm4ob3B0aW9ucy5wdWJsaWNLZXkpKTtcbiAgICBhd2FpdCB0aGlzLndhaXRGb3JDaGVja0NhcHRjaGFBcGkoKTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3QgcHJlbG9hZGVkIGpRdWVyeSBmcm9tIGdsb2JhbCBvYmplY3Qgb3IgYW4gZXhpc3Rpbmcgc2NyaXB0IHRhZy5cbiAgICovXG4gIHByaXZhdGUgaXNKUXVlcnlBbHJlYWR5QXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGcgPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKTtcbiAgICBpZiAodHlwZW9mIGcualF1ZXJ5ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBnLiQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nSnF1ZXJ5U2NyaXB0ID0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50PihcbiAgICAgICdzY3JpcHRbc3JjKj1cImpxdWVyeVwiXScsXG4gICAgKTtcbiAgICByZXR1cm4gQm9vbGVhbihleGlzdGluZ0pxdWVyeVNjcmlwdCk7XG4gIH1cblxuICBwcml2YXRlIHByZXZlbnREdXBsaWNhdGVWYWxpZGF0aW9uQm9vdHN0cmFwKGc6IFJldHVyblR5cGU8dHlwZW9mIGdldFNpYXJhU2hpZWxkR2xvYmFscz4pOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5hbEFwcGVuZFZhbGlkYXRpb24gPSBnLkFwcGVuZFZhbGlkYXRpb25KUztcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsQXBwZW5kVmFsaWRhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGcuQXBwZW5kVmFsaWRhdGlvbkpTID0gKCkgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFNjcmlwdEVsZW1lbnQ+KFxuICAgICAgICBgc2NyaXB0W3NyYz1cIiR7VkFMSURBVElPTl9TQ1JJUFRfU1JDfVwiXWAsXG4gICAgICApO1xuICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luYWxBcHBlbmRWYWxpZGF0aW9uKCk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckNoZWNrQ2FwdGNoYUFwaSh0aW1lb3V0TXMgPSBDQVBUQ0hBX1JFQURZX1RJTUVPVVRfTVMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDwgdGltZW91dE1zKSB7XG4gICAgICBpZiAoZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCkuQ2hlY2tDYXB0Y2hhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpYXJhU2hpZWxkOiBDaGVja0NhcHRjaGEoKSB3YXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGltZW91dC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyB0aGUgZ2xvYmFsIGBDaGVja0NhcHRjaGEoKWAgZnJvbSBTaWFyYVNoaWVsZCBzY3JpcHQuXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIGNhcHRjaGEgaXMgdmFsaWQ7IGVtaXRzIHRva2VuIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIGNoZWNrQ2FwdGNoYSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBnID0gZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCk7XG4gICAgaWYgKCFnLkNoZWNrQ2FwdGNoYSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWFyYVNoaWVsZDogQ2hlY2tDYXB0Y2hhKCkgaXMgbm90IGF2YWlsYWJsZS4gRGlkIGluaXQoKSBydW4/Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdUb2tlbiA9IHR5cGVvZiBnLkN5YmVyU2lhcmFUb2tlbiA9PT0gJ3N0cmluZycgJiYgZy5DeWJlclNpYXJhVG9rZW4ubGVuZ3RoID4gMCA/IGcuQ3liZXJTaWFyYVRva2VuIDogdW5kZWZpbmVkO1xuICAgIGlmIChleGlzdGluZ1Rva2VuKSB7XG4gICAgICB0aGlzLnRva2VuLmVtaXQoZXhpc3RpbmdUb2tlbik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYWxsb3dWZW5kb3JDb25zb2xlTG9ncykge1xuICAgICAgc3VwcHJlc3NWZW5kb3JDb25zb2xlV2luZG93KCk7XG4gICAgfVxuICAgIGNvbnN0IG9rID0gZy5DaGVja0NhcHRjaGEoKTtcbiAgICBpZiAob2sgJiYgdHlwZW9mIGcuQ3liZXJTaWFyYVRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy50b2tlbi5lbWl0KGcuQ3liZXJTaWFyYVRva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIG9rO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jLWZyaWVuZGx5IGNhcHRjaGEgdmFsaWRhdGlvbiB0byBhdm9pZCBmaXJzdC1jbGljayB0aW1pbmcgaXNzdWVzLlxuICAgKiBQZXJmb3JtcyBvbmUgdmFsaWRhdGlvbiBjYWxsIGFuZCB3YWl0cyBmb3IgdG9rZW4gcHJvcGFnYXRpb24uXG4gICAqL1xuICBhc3luYyBjaGVja0NhcHRjaGFBc3luYyhvcHRpb25zPzoge1xuICAgIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgICBiZWZvcmVDaGVja0RlbGF5TXM/OiBudW1iZXI7XG4gICAgcmV0cnlPbkZhbHNlTXM/OiBudW1iZXI7XG4gICAgZmFsc2VSZXN1bHRUb2tlbldhaXRNcz86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRpbWVvdXRNcyA9IG9wdGlvbnM/LnRpbWVvdXRNcyA/PyAyMDAwO1xuICAgIGNvbnN0IHBvbGxJbnRlcnZhbE1zID0gb3B0aW9ucz8ucG9sbEludGVydmFsTXMgPz8gMTIwO1xuICAgIGNvbnN0IGJlZm9yZUNoZWNrRGVsYXlNcyA9IG9wdGlvbnM/LmJlZm9yZUNoZWNrRGVsYXlNcyA/PyAxNDA7XG4gICAgY29uc3QgcmV0cnlPbkZhbHNlTXMgPSBvcHRpb25zPy5yZXRyeU9uRmFsc2VNcyA/PyAwO1xuICAgIGNvbnN0IGZhbHNlUmVzdWx0VG9rZW5XYWl0TXMgPSBvcHRpb25zPy5mYWxzZVJlc3VsdFRva2VuV2FpdE1zID8/IDkwMDtcbiAgICBjb25zdCBleGlzdGluZ1Rva2VuID0gZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCkuQ3liZXJTaWFyYVRva2VuO1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmdUb2tlbiA9PT0gJ3N0cmluZycgJiYgZXhpc3RpbmdUb2tlbi5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRva2VuLmVtaXQoZXhpc3RpbmdUb2tlbik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgYmVmb3JlQ2hlY2tEZWxheU1zKSk7XG4gICAgbGV0IG9rID0gdGhpcy5jaGVja0NhcHRjaGEoKTtcbiAgICAvLyBPcHRpb25hbCByZXRyeSBmb3IgaW50ZWdyYXRpb25zIHRoYXQgb2JzZXJ2ZSBsYXRlIHZlbmRvci1zdGF0ZSBzZXR0bGluZy5cbiAgICBpZiAoIW9rICYmIHJldHJ5T25GYWxzZU1zID4gMCkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmV0cnlPbkZhbHNlTXMpKTtcbiAgICAgIG9rID0gdGhpcy5jaGVja0NhcHRjaGEoKTtcbiAgICB9XG4gICAgaWYgKCFvaykge1xuICAgICAgLy8gU29tZSB2ZW5kb3IgZmxvd3MgcmV0dXJuIGZhbHNlIGZpcnN0LCB0aGVuIHNldCB0b2tlbiBzaG9ydGx5IGFmdGVyLlxuICAgICAgY29uc3QgZmFsc2VTdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBmYWxzZVN0YXJ0ZWRBdCA8IGZhbHNlUmVzdWx0VG9rZW5XYWl0TXMpIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcG9sbEludGVydmFsTXMpKTtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKS5DeWJlclNpYXJhVG9rZW47XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnICYmIHRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnRva2VuLmVtaXQodG9rZW4pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICAgIGlmICh0eXBlb2YgZy5DeWJlclNpYXJhVG9rZW4gPT09ICdzdHJpbmcnICYmIGcuQ3liZXJTaWFyYVRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydGVkQXQgPCB0aW1lb3V0TXMpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHBvbGxJbnRlcnZhbE1zKSk7XG4gICAgICBjb25zdCB0b2tlbiA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpLkN5YmVyU2lhcmFUb2tlbjtcbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnICYmIHRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy50b2tlbi5lbWl0KHRva2VuKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuIl19
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0csT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQUVuRixNQUFNLG1CQUFtQixHQUFHLGtFQUFrRSxDQUFDO0FBQy9GLE1BQU0sa0JBQWtCLEdBQUcsc0VBQXNFLENBQUM7QUFDbEcsTUFBTSxxQkFBcUIsR0FBRyx5RUFBeUUsQ0FBQztBQUN4RyxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFNLGtDQUFrQyxHQUFHLElBQUksQ0FBQztBQUNoRCxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUVyQyxLQUFLLFVBQVUsdUJBQXVCLENBQUMsV0FBcUIsRUFBRSxTQUFTLEdBQUcsa0NBQWtDO0lBQzFHLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM3QixPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUM7UUFDMUMsSUFBSSxXQUFXLENBQUMs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QUFDLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7d0dBek1VLG9CQUFvQjs0RkFBcEIsb0JBQW9CLDJPQUhyQixpQ0FBaUM7OzRGQUdoQyxvQkFBb0I7a0JBTmhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsaUNBQWlDO29CQUMzQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtpQkFDdEM7c0hBRTRCLFNBQVM7c0JBQW5DLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUtJLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2lhcmFTaGllbGRMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtbG9hZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0SW5pdENhcHRjaGFGbiwgZ2V0U2lhcmFTaGllbGRHbG9iYWxzIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQuZ2xvYmFscyc7XG5pbXBvcnQgeyBpbnN0YWxsVmVuZG9yUnVudGltZUVycm9yU3VwcHJlc3Npb24sIHN1cHByZXNzVmVuZG9yQ29uc29sZVdpbmRvdyB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLWxvZy11dGlscyc7XG5pbXBvcnQgeyBpbnN0YWxsQ2FwdGNoYVN1Ym1pdEd1YXJkIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtc3VibWl0LWd1YXJkJztcbmltcG9ydCB7IHByZXBhcmVTY3JpcHROb25jZSB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLXNjcmlwdC11dGlscyc7XG5pbXBvcnQgeyBpbnN0YWxsVmVuZG9yQ2hhbGxlbmdlUnVudGltZVBhdGNoIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtdmVuZG9yLXJ1bnRpbWUnO1xuXG5jb25zdCBKUVVFUllfRkFMTEJBQ0tfU1JDID0gJ2h0dHBzOi8vZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbS9jYXBjaGEtdGVtcGxlL2pzL2pxdWVyeS5taW4uanMnO1xuY29uc3QgQ0FQVENIQV9TQ1JJUFRfU1JDID0gJ2h0dHBzOi8vZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbS9DYXB0Y2hhRm9ybWF0ZS9DYXB0Y2hhUmVzb3VyY2VzLmpzJztcbmNvbnN0IFZBTElEQVRJT05fU0NSSVBUX1NSQyA9ICdodHRwczovL2VtYmVkLm15Y3liZXJzaWFyYS5jb20vQ2FwdGNoYUZvcm1hdGUvU2lhcmFTaGllbGRfVmFsaWRhdGlvbi5qcyc7XG5jb25zdCBDQVBUQ0hBX1JFQURZX1RJTUVPVVRfTVMgPSA4MDAwO1xuY29uc3QgQ0FQVENIQV9DT05UQUlORVJfUkVBRFlfVElNRU9VVF9NUyA9IDIwMDA7XG5jb25zdCBDQVBUQ0hBX0NPTlRBSU5FUl9QT0xMX01TID0gNTA7XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JDYXB0Y2hhQ29udGFpbmVyKGRvY3VtZW50UmVmOiBEb2N1bWVudCwgdGltZW91dE1zID0gQ0FQVENIQV9DT05UQUlORVJfUkVBRFlfVElNRU9VVF9NUyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCA8IHRpbWVvdXRNcykge1xuICAgIGlmIChkb2N1bWVudFJlZi5xdWVyeVNlbGVjdG9yKCcuU2lhcmFTaGllbGQnKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBDQVBUQ0hBX0NPTlRBSU5FUl9QT0xMX01TKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZW5zdXJlQWNjZXNzaWJpbGl0eVBvcHVwQWxpYXNlcygpOiB2b2lkIHtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgYWxpYXNOYW1lcyA9IFtcbiAgICAnUmVtb3ZlQWNjZXNpYmlsaXR5UG9wdXAnLFxuICAgICdfUmVtb3ZlQWNjZXNpYmlsaXR5UG9wdXAnLFxuICAgICdSZW1vdmVBY2Nlc2libGl0eVBvcHVwJyxcbiAgICAnX1JlbW92ZUFjY2VzaWJsaXR5UG9wdXAnLFxuICBdIGFzIGNvbnN0O1xuXG4gIGNvbnN0IGV4aXN0aW5nID0gYWxpYXNOYW1lc1xuICAgIC5tYXAoKG5hbWUpID0+IGdbbmFtZV0pXG4gICAgLmZpbmQoKHZhbHVlKTogdmFsdWUgaXMgKCkgPT4gdm9pZCA9PiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpO1xuXG4gIGNvbnN0IHN0YWJsZUZuID0gZXhpc3RpbmcgPz8gKCgpID0+IHVuZGVmaW5lZCk7XG4gIGZvciAoY29uc3QgbmFtZSBvZiBhbGlhc05hbWVzKSB7XG4gICAgZ1tuYW1lXSA9IHN0YWJsZUZuO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJ1bkluUm9vdFpvbmU8VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7IFpvbmU/OiB7IHJvb3Q/OiB7IHJ1bj86IDxVPihjYjogKCkgPT4gVSkgPT4gVSB9IH0gfTtcbiAgY29uc3Qgem9uZVJvb3RSdW4gPSBnLlpvbmU/LnJvb3Q/LnJ1bjtcbiAgaWYgKHR5cGVvZiB6b25lUm9vdFJ1biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB6b25lUm9vdFJ1bi5jYWxsKGcuWm9uZT8ucm9vdCwgZm4pIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIGZuKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lhcmFTaGllbGRJbml0T3B0aW9ucyB7XG4gIC8qKiBTaWFyYVNoaWVsZCBwdWJsaWMga2V5LiBVc2UgXCJURVNULUNZQkVSU0lBUkFcIiBmb3Igc3RhZ2luZy9kZXZlbG9wbWVudC4gKi9cbiAgcHVibGljS2V5OiBzdHJpbmc7XG4gIC8qKiBMb2FkcyBqUXVlcnkgYmVmb3JlIFNpYXJhU2hpZWxkIHNjcmlwdC4gRGVmYXVsdCBpcyB0cnVlIGZvciBlYXNpZXIgaW50ZWdyYXRpb24uIFNldCB0byBmYWxzZSBvbmx5IGlmIHlvdXIgcGFnZSBhbHJlYWR5IGluY2x1ZGVzIGpRdWVyeS4gKi9cbiAgbG9hZEpRdWVyeT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDU1Agbm9uY2UgdmFsdWUgKHdpdGhvdXQgdGhlIGAnbm9uY2UtJ2AgcHJlZml4KS5cbiAgICogSWYgb21pdHRlZCwgd2UgYXR0ZW1wdCB0byByZXNvbHZlIGl0IGZyb20gZXhpc3RpbmcgYHNjcmlwdFtub25jZV1gIG9yIGBtZXRhW25hbWU9XCJjc3Atbm9uY2VcIl1gLlxuICAgKi9cbiAgY3NwTm9uY2U/OiBzdHJpbmc7XG4gIC8qKiBTZXQgdHJ1ZSBvbmx5IHdoZW4gYWN0aXZlbHkgZGVidWdnaW5nIHZlbmRvci9ydW50aW1lIGludGVybmFscyBpbiBicm93c2VyIGNvbnNvbGUuICovXG4gIGFsbG93VmVuZG9yQ29uc29sZUxvZ3M/OiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaWFyYS1zaGllbGQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJTaWFyYVNoaWVsZFwiPjwvZGl2PmAsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFNpYXJhU2hpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHB1YmxpY0tleSE6IHN0cmluZztcbiAgQElucHV0KCkgbG9hZEpRdWVyeSA9IHRydWU7XG4gIEBJbnB1dCgpIGNzcE5vbmNlPzogc3RyaW5nO1xuICBASW5wdXQoKSBhbGxvd1ZlbmRvckNvbnNvbGVMb2dzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBjdXJyZW50IGBDeWJlclNpYXJhVG9rZW5gIHJpZ2h0IGFmdGVyIGEgc3VjY2Vzc2Z1bCBgY2hlY2tDYXB0Y2hhKClgLlxuICAgKi9cbiAgQE91dHB1dCgpIHRva2VuID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaG9zdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkZXI6IFNpYXJhU2hpZWxkTG9hZGVyU2VydmljZSxcbiAgKSB7fVxuXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmluaXQoe1xuICAgICAgcHVibGljS2V5OiB0aGlzLnB1YmxpY0tleSxcbiAgICAgIGxvYWRKUXVlcnk6IHRoaXMubG9hZEpRdWVyeSxcbiAgICAgIGNzcE5vbmNlOiB0aGlzLmNzcE5vbmNlLFxuICAgICAgYWxsb3dWZW5kb3JDb25zb2xlTG9nczogdGhpcy5hbGxvd1ZlbmRvckNvbnNvbGVMb2dzLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgaW5pdChvcHRpb25zOiBTaWFyYVNoaWVsZEluaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHJldHVybjtcblxuICAgIC8vIEVuc3VyZSB0aGUgaG9zdCBlbGVtZW50IGlzIGluIERPTSBiZWZvcmUgc2NyaXB0cyBydW4uXG4gICAgdm9pZCB0aGlzLmhvc3QubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIW9wdGlvbnMuYWxsb3dWZW5kb3JDb25zb2xlTG9ncykge1xuICAgICAgLy8gSW5zdGFsbCBzdXBwcmVzc2lvbiBhcyBlYXJseSBhcyBwb3NzaWJsZSBzbyBBbmd1bGFyIGRvZXNuJ3QgbG9nIGNyb3NzLW9yaWdpbiB2ZW5kb3Igbm9pc2UgZHVyaW5nIGJvb3RzdHJhcC5cbiAgICAgIGluc3RhbGxWZW5kb3JSdW50aW1lRXJyb3JTdXBwcmVzc2lvbigpO1xuICAgICAgc3VwcHJlc3NWZW5kb3JDb25zb2xlV2luZG93KCk7XG4gICAgfVxuICAgIGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQoKTtcblxuICAgIGlmICghb3B0aW9ucy5wdWJsaWNLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2lhcmFTaGllbGRDb21wb25lbnQ6IHB1YmxpY0tleSBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG5cbiAgICAvLyBQcmVwYXJlIENTUCBub25jZSBwcm9wYWdhdGlvbiBzbyBhbnkgdmVuZG9yLWluamVjdGVkIGNoaWxkIHNjcmlwdHMgZ2V0IHRoZSBzYW1lIG5vbmNlLlxuICAgIGNvbnN0IGRvY3VtZW50UmVmID0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudCA/PyBnbG9iYWxUaGlzLmRvY3VtZW50ID8/IG51bGw7XG4gICAgY29uc3Qgbm9uY2UgPSBwcmVwYXJlU2NyaXB0Tm9uY2UoZG9jdW1lbnRSZWYsIG9wdGlvbnMuY3NwTm9uY2UpO1xuICAgIGlmIChkb2N1bWVudFJlZikge1xuICAgICAgLy8gVmVuZG9yIHNjcmlwdHMgb2Z0ZW4gcXVlcnkgYC5TaWFyYVNoaWVsZGAgaW1tZWRpYXRlbHk7IGVuc3VyZSBpdCdzIHByZXNlbnQgaW4gRE9NLlxuICAgICAgYXdhaXQgd2FpdEZvckNhcHRjaGFDb250YWluZXIoZG9jdW1lbnRSZWYpO1xuICAgIH1cbiAgICBpZiAoKG9wdGlvbnMubG9hZEpRdWVyeSA/PyB0cnVlKSAmJiAhdGhpcy5pc0pRdWVyeUFscmVhZHlBdmFpbGFibGUoKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkZXIubG9hZFNjcmlwdChKUVVFUllfRkFMTEJBQ0tfU1JDLCB7IG5vbmNlIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMubG9hZGVyLmxvYWRTY3JpcHQoQ0FQVENIQV9TQ1JJUFRfU1JDLCB7IG5vbmNlIH0pO1xuICAgIGF3YWl0IHRoaXMubG9hZGVyLmxvYWRTY3JpcHQoVkFMSURBVElPTl9TQ1JJUFRfU1JDLCB7IG5vbmNlIH0pO1xuXG4gICAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICAgIGVuc3VyZUFjY2Vzc2liaWxpdHlQb3B1cEFsaWFzZXMoKTtcbiAgICB0aGlzLnByZXZlbnREdXBsaWNhdGVWYWxpZGF0aW9uQm9vdHN0cmFwKGcpO1xuICAgIGluc3RhbGxWZW5kb3JDaGFsbGVuZ2VSdW50aW1lUGF0Y2goKTtcbiAgICBjb25zdCBpbml0Q2FwdGNoYUZuID0gZ2V0SW5pdENhcHRjaGFGbihnKTtcbiAgICBpZiAoIWluaXRDYXB0Y2hhRm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1NpYXJhU2hpZWxkOiBJbml0Q2FwdGNoYSgpIGlzIG5vdCBhdmFpbGFibGUgYWZ0ZXIgbG9hZGluZyBzY3JpcHRzLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJ1bkluUm9vdFpvbmUoKCkgPT4gaW5pdENhcHRjaGFGbihvcHRpb25zLnB1YmxpY0tleSkpO1xuICAgIGF3YWl0IHRoaXMud2FpdEZvckNoZWNrQ2FwdGNoYUFwaSgpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdCBwcmVsb2FkZWQgalF1ZXJ5IGZyb20gZ2xvYmFsIG9iamVjdCBvciBhbiBleGlzdGluZyBzY3JpcHQgdGFnLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0pRdWVyeUFscmVhZHlBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICAgIGlmICh0eXBlb2YgZy5qUXVlcnkgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGcuJCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdKcXVlcnlTY3JpcHQgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFNjcmlwdEVsZW1lbnQ+KFxuICAgICAgJ3NjcmlwdFtzcmMqPVwianF1ZXJ5XCJdJyxcbiAgICApO1xuICAgIHJldHVybiBCb29sZWFuKGV4aXN0aW5nSnF1ZXJ5U2NyaXB0KTtcbiAgfVxuXG4gIHByaXZhdGUgcHJldmVudER1cGxpY2F0ZVZhbGlkYXRpb25Cb290c3RyYXAoZzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0U2lhcmFTaGllbGRHbG9iYWxzPik6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbmFsQXBwZW5kVmFsaWRhdGlvbiA9IGcuQXBwZW5kVmFsaWRhdGlvbkpTO1xuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxBcHBlbmRWYWxpZGF0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZy5BcHBlbmRWYWxpZGF0aW9uSlMgPSAoKSA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50Lm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MU2NyaXB0RWxlbWVudD4oXG4gICAgICAgIGBzY3JpcHRbc3JjPVwiJHtWQUxJREFUSU9OX1NDUklQVF9TUkN9XCJdYCxcbiAgICAgICk7XG4gICAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBvcmlnaW5hbEFwcGVuZFZhbGlkYXRpb24oKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yQ2hlY2tDYXB0Y2hhQXBpKHRpbWVvdXRNcyA9IENBUFRDSEFfUkVBRFlfVElNRU9VVF9NUyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydGVkQXQgPCB0aW1lb3V0TXMpIHtcbiAgICAgIGlmIChnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKS5DaGVja0NhcHRjaGEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignU2lhcmFTaGllbGQ6IENoZWNrQ2FwdGNoYSgpIHdhcyBub3QgYXZhaWxhYmxlIHdpdGhpbiB0aW1lb3V0LicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIHRoZSBnbG9iYWwgYENoZWNrQ2FwdGNoYSgpYCBmcm9tIFNpYXJhU2hpZWxkIHNjcmlwdC5cbiAgICogUmV0dXJucyB0cnVlIHdoZW4gY2FwdGNoYSBpcyB2YWxpZDsgZW1pdHMgdG9rZW4gaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgY2hlY2tDYXB0Y2hhKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGcgPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKTtcbiAgICBpZiAoIWcuQ2hlY2tDYXB0Y2hhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpYXJhU2hpZWxkOiBDaGVja0NhcHRjaGEoKSBpcyBub3QgYXZhaWxhYmxlLiBEaWQgaW5pdCgpIHJ1bj8nKTtcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ1Rva2VuID0gdHlwZW9mIGcuQ3liZXJTaWFyYVRva2VuID09PSAnc3RyaW5nJyAmJiBnLkN5YmVyU2lhcmFUb2tlbi5sZW5ndGggPiAwID8gZy5DeWJlclNpYXJhVG9rZW4gOiB1bmRlZmluZWQ7XG4gICAgaWYgKGV4aXN0aW5nVG9rZW4pIHtcbiAgICAgIHRoaXMudG9rZW4uZW1pdChleGlzdGluZ1Rva2VuKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5hbGxvd1ZlbmRvckNvbnNvbGVMb2dzKSB7XG4gICAgICBzdXBwcmVzc1ZlbmRvckNvbnNvbGVXaW5kb3coKTtcbiAgICB9XG4gICAgY29uc3Qgb2sgPSBnLkNoZWNrQ2FwdGNoYSgpO1xuICAgIGlmIChvayAmJiB0eXBlb2YgZy5DeWJlclNpYXJhVG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnRva2VuLmVtaXQoZy5DeWJlclNpYXJhVG9rZW4pO1xuICAgIH1cbiAgICByZXR1cm4gb2s7XG4gIH1cblxuICAvKipcbiAgICogQXN5bmMtZnJpZW5kbHkgY2FwdGNoYSB2YWxpZGF0aW9uIHRvIGF2b2lkIGZpcnN0LWNsaWNrIHRpbWluZyBpc3N1ZXMuXG4gICAqIFBlcmZvcm1zIG9uZSB2YWxpZGF0aW9uIGNhbGwgYW5kIHdhaXRzIGZvciB0b2tlbiBwcm9wYWdhdGlvbi5cbiAgICovXG4gIGFzeW5jIGNoZWNrQ2FwdGNoYUFzeW5jKG9wdGlvbnM/OiB7XG4gICAgdGltZW91dE1zPzogbnVtYmVyO1xuICAgIHBvbGxJbnRlcnZhbE1zPzogbnVtYmVyO1xuICAgIGJlZm9yZUNoZWNrRGVsYXlNcz86IG51bWJlcjtcbiAgICByZXRyeU9uRmFsc2VNcz86IG51bWJlcjtcbiAgICBmYWxzZVJlc3VsdFRva2VuV2FpdE1zPzogbnVtYmVyO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgdGltZW91dE1zID0gb3B0aW9ucz8udGltZW91dE1zID8/IDIwMDA7XG4gICAgY29uc3QgcG9sbEludGVydmFsTXMgPSBvcHRpb25zPy5wb2xsSW50ZXJ2YWxNcyA/PyAxMjA7XG4gICAgY29uc3QgYmVmb3JlQ2hlY2tEZWxheU1zID0gb3B0aW9ucz8uYmVmb3JlQ2hlY2tEZWxheU1zID8/IDE0MDtcbiAgICBjb25zdCByZXRyeU9uRmFsc2VNcyA9IG9wdGlvbnM/LnJldHJ5T25GYWxzZU1zID8/IDA7XG4gICAgY29uc3QgZmFsc2VSZXN1bHRUb2tlbldhaXRNcyA9IG9wdGlvbnM/LmZhbHNlUmVzdWx0VG9rZW5XYWl0TXMgPz8gOTAwO1xuICAgIGNvbnN0IGV4aXN0aW5nVG9rZW4gPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKS5DeWJlclNpYXJhVG9rZW47XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZ1Rva2VuID09PSAnc3RyaW5nJyAmJiBleGlzdGluZ1Rva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudG9rZW4uZW1pdChleGlzdGluZ1Rva2VuKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBiZWZvcmVDaGVja0RlbGF5TXMpKTtcbiAgICBsZXQgb2sgPSB0aGlzLmNoZWNrQ2FwdGNoYSgpO1xuICAgIC8vIE9wdGlvbmFsIHJldHJ5IGZvciBpbnRlZ3JhdGlvbnMgdGhhdCBvYnNlcnZlIGxhdGUgdmVuZG9yLXN0YXRlIHNldHRsaW5nLlxuICAgIGlmICghb2sgJiYgcmV0cnlPbkZhbHNlTXMgPiAwKSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCByZXRyeU9uRmFsc2VNcykpO1xuICAgICAgb2sgPSB0aGlzLmNoZWNrQ2FwdGNoYSgpO1xuICAgIH1cbiAgICBpZiAoIW9rKSB7XG4gICAgICAvLyBTb21lIHZlbmRvciBmbG93cyByZXR1cm4gZmFsc2UgZmlyc3QsIHRoZW4gc2V0IHRva2VuIHNob3J0bHkgYWZ0ZXIuXG4gICAgICBjb25zdCBmYWxzZVN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIGZhbHNlU3RhcnRlZEF0IDwgZmFsc2VSZXN1bHRUb2tlbldhaXRNcykge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBwb2xsSW50ZXJ2YWxNcykpO1xuICAgICAgICBjb25zdCB0b2tlbiA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpLkN5YmVyU2lhcmFUb2tlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycgJiYgdG9rZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMudG9rZW4uZW1pdCh0b2tlbik7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBnID0gZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCk7XG4gICAgaWYgKHR5cGVvZiBnLkN5YmVyU2lhcmFUb2tlbiA9PT0gJ3N0cmluZycgJiYgZy5DeWJlclNpYXJhVG9rZW4ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCA8IHRpbWVvdXRNcykge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcG9sbEludGVydmFsTXMpKTtcbiAgICAgIGNvbnN0IHRva2VuID0gZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCkuQ3liZXJTaWFyYVRva2VuO1xuICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycgJiYgdG9rZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnRva2VuLmVtaXQodG9rZW4pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4iXX0=
|
|
@@ -92,6 +92,11 @@ export async function initSiaraShield(options) {
|
|
|
92
92
|
throw new Error('initSiaraShield: publicKey is required.');
|
|
93
93
|
}
|
|
94
94
|
pending = (async () => {
|
|
95
|
+
if (!options.allowVendorConsoleLogs) {
|
|
96
|
+
// Install suppression as early as possible so Angular doesn't log cross-origin vendor noise during bootstrap.
|
|
97
|
+
installVendorRuntimeErrorSuppression();
|
|
98
|
+
suppressVendorConsoleWindow();
|
|
99
|
+
}
|
|
95
100
|
installCaptchaSubmitGuard();
|
|
96
101
|
const nonce = prepareScriptNonce(document, options.cspNonce);
|
|
97
102
|
await waitForCaptchaContainer();
|
|
@@ -108,10 +113,6 @@ export async function initSiaraShield(options) {
|
|
|
108
113
|
if (!initCaptchaFn) {
|
|
109
114
|
throw new Error('SiaraShield: InitCaptcha() is not available after loading scripts.');
|
|
110
115
|
}
|
|
111
|
-
if (!options.allowVendorConsoleLogs) {
|
|
112
|
-
suppressVendorConsoleWindow();
|
|
113
|
-
installVendorRuntimeErrorSuppression();
|
|
114
|
-
}
|
|
115
116
|
runInRootZone(() => initCaptchaFn(options.publicKey));
|
|
116
117
|
await waitForCheckCaptchaApi();
|
|
117
118
|
initialized = true;
|
|
@@ -188,4 +189,4 @@ export async function checkSiaraShieldCaptchaAsync(options) {
|
|
|
188
189
|
}
|
|
189
190
|
return { ok: true };
|
|
190
191
|
}
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2lhcmFzaGllbGQtd29ya3NwYWNlL3NyYy9saWIvc2lhcmEtc2hpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVuRixNQUFNLG1CQUFtQixHQUFHLGtFQUFrRSxDQUFDO0FBQy9GLE1BQU0sa0JBQWtCLEdBQUcsc0VBQXNFLENBQUM7QUFDbEcsTUFBTSxxQkFBcUIsR0FBRyx5RUFBeUUsQ0FBQztBQUN4RyxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFNLGtDQUFrQyxHQUFHLElBQUksQ0FBQztBQUNoRCxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUVyQyxLQUFLLFVBQVUsdUJBQXVCLENBQUMsU0FBUyxHQUFHLGtDQUFrQztJQUNuRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQzFDLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxD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QyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxxQkFBcUIsRUFBRSxDQUFDLGVBQWUsQ0FBQztRQUN0RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0SW5pdENhcHRjaGFGbiwgZ2V0U2lhcmFTaGllbGRHbG9iYWxzIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQuZ2xvYmFscyc7XG5pbXBvcnQgeyBpbnN0YWxsVmVuZG9yUnVudGltZUVycm9yU3VwcHJlc3Npb24sIHN1cHByZXNzVmVuZG9yQ29uc29sZVdpbmRvdyB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLWxvZy11dGlscyc7XG5pbXBvcnQgeyBsb2FkU2NyaXB0LCBwcmVwYXJlU2NyaXB0Tm9uY2UgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC1zY3JpcHQtdXRpbHMnO1xuaW1wb3J0IHsgaW5zdGFsbENhcHRjaGFTdWJtaXRHdWFyZCB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLXN1Ym1pdC1ndWFyZCc7XG5pbXBvcnQgeyBpbnN0YWxsVmVuZG9yQ2hhbGxlbmdlUnVudGltZVBhdGNoIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtdmVuZG9yLXJ1bnRpbWUnO1xuXG5jb25zdCBKUVVFUllfRkFMTEJBQ0tfU1JDID0gJ2h0dHBzOi8vZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbS9jYXBjaGEtdGVtcGxlL2pzL2pxdWVyeS5taW4uanMnO1xuY29uc3QgQ0FQVENIQV9TQ1JJUFRfU1JDID0gJ2h0dHBzOi8vZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbS9DYXB0Y2hhRm9ybWF0ZS9DYXB0Y2hhUmVzb3VyY2VzLmpzJztcbmNvbnN0IFZBTElEQVRJT05fU0NSSVBUX1NSQyA9ICdodHRwczovL2VtYmVkLm15Y3liZXJzaWFyYS5jb20vQ2FwdGNoYUZvcm1hdGUvU2lhcmFTaGllbGRfVmFsaWRhdGlvbi5qcyc7XG5jb25zdCBDQVBUQ0hBX1JFQURZX1RJTUVPVVRfTVMgPSA4MDAwO1xuY29uc3QgQ0FQVENIQV9DT05UQUlORVJfUkVBRFlfVElNRU9VVF9NUyA9IDIwMDA7XG5jb25zdCBDQVBUQ0hBX0NPTlRBSU5FUl9QT0xMX01TID0gNTA7XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JDYXB0Y2hhQ29udGFpbmVyKHRpbWVvdXRNcyA9IENBUFRDSEFfQ09OVEFJTkVSX1JFQURZX1RJTUVPVVRfTVMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydGVkQXQgPCB0aW1lb3V0TXMpIHtcbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLlNpYXJhU2hpZWxkJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgQ0FQVENIQV9DT05UQUlORVJfUE9MTF9NUykpO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5pdFNpYXJhU2hpZWxkT3B0aW9ucyB7XG4gIC8qKiBTaWFyYVNoaWVsZCBwdWJsaWMga2V5LiBVc2UgXCJURVNULUNZQkVSU0lBUkFcIiBmb3Igc3RhZ2luZy9kZXZlbG9wbWVudC4gKi9cbiAgcHVibGljS2V5OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMb2FkcyBqUXVlcnkgYmVmb3JlIFNpYXJhU2hpZWxkIHNjcmlwdC5cbiAgICogRGVmYXVsdCBpcyB0cnVlIGZvciBlYXNpZXIgaW50ZWdyYXRpb24uXG4gICAqIFNldCB0byBmYWxzZSBvbmx5IGlmIHlvdXIgc2l0ZS9hcHAgYWxyZWFkeSBsb2FkcyBqUXVlcnkuXG4gICAqL1xuICBsb2FkSlF1ZXJ5PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENTUCBub25jZSB2YWx1ZSAod2l0aG91dCB0aGUgYCdub25jZS0nYCBwcmVmaXgpLlxuICAgKiBJZiBvbWl0dGVkLCB3ZSBhdHRlbXB0IHRvIHJlc29sdmUgaXQgZnJvbSBleGlzdGluZyBgc2NyaXB0W25vbmNlXWAgb3IgYG1ldGFbbmFtZT1cImNzcC1ub25jZVwiXWAuXG4gICAqL1xuICBjc3BOb25jZT86IHN0cmluZztcbiAgLyoqIFNldCB0cnVlIG9ubHkgd2hlbiBhY3RpdmVseSBkZWJ1Z2dpbmcgdmVuZG9yL3J1bnRpbWUgaW50ZXJuYWxzIGluIGJyb3dzZXIgY29uc29sZS4gKi9cbiAgYWxsb3dWZW5kb3JDb25zb2xlTG9ncz86IGJvb2xlYW47XG59XG5cbmxldCBwZW5kaW5nOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5sZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gZW5zdXJlQWNjZXNzaWJpbGl0eVBvcHVwQWxpYXNlcygpOiB2b2lkIHtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgYWxpYXNOYW1lcyA9IFtcbiAgICAnUmVtb3ZlQWNjZXNpYmlsaXR5UG9wdXAnLFxuICAgICdfUmVtb3ZlQWNjZXNpYmlsaXR5UG9wdXAnLFxuICAgICdSZW1vdmVBY2Nlc2libGl0eVBvcHVwJyxcbiAgICAnX1JlbW92ZUFjY2VzaWJsaXR5UG9wdXAnLFxuICBdIGFzIGNvbnN0O1xuXG4gIGNvbnN0IGV4aXN0aW5nID0gYWxpYXNOYW1lc1xuICAgIC5tYXAoKG5hbWUpID0+IGdbbmFtZV0pXG4gICAgLmZpbmQoKHZhbHVlKTogdmFsdWUgaXMgKCkgPT4gdm9pZCA9PiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpO1xuXG4gIGNvbnN0IHN0YWJsZUZuID0gZXhpc3RpbmcgPz8gKCgpID0+IHVuZGVmaW5lZCk7XG4gIGZvciAoY29uc3QgbmFtZSBvZiBhbGlhc05hbWVzKSB7XG4gICAgZ1tuYW1lXSA9IHN0YWJsZUZuO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSlF1ZXJ5QWxyZWFkeUF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICBpZiAodHlwZW9mIGcualF1ZXJ5ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBnLiQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nSnF1ZXJ5U2NyaXB0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MU2NyaXB0RWxlbWVudD4oJ3NjcmlwdFtzcmMqPVwianF1ZXJ5XCJdJyk7XG4gIHJldHVybiBCb29sZWFuKGV4aXN0aW5nSnF1ZXJ5U2NyaXB0KTtcbn1cblxuZnVuY3Rpb24gcnVuSW5Sb290Wm9uZTxUPihmbjogKCkgPT4gVCk6IFQge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHsgWm9uZT86IHsgcm9vdD86IHsgcnVuPzogPFU+KGNiOiAoKSA9PiBVKSA9PiBVIH0gfSB9O1xuICBjb25zdCB6b25lUm9vdFJ1biA9IGcuWm9uZT8ucm9vdD8ucnVuO1xuICBpZiAodHlwZW9mIHpvbmVSb290UnVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHpvbmVSb290UnVuLmNhbGwoZy5ab25lPy5yb290LCBmbikgYXMgVDtcbiAgfVxuICByZXR1cm4gZm4oKTtcbn1cblxuZnVuY3Rpb24gcHJldmVudER1cGxpY2F0ZVZhbGlkYXRpb25Cb290c3RyYXAoZzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0U2lhcmFTaGllbGRHbG9iYWxzPik6IHZvaWQge1xuICBjb25zdCBvcmlnaW5hbEFwcGVuZFZhbGlkYXRpb24gPSBnLkFwcGVuZFZhbGlkYXRpb25KUztcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbEFwcGVuZFZhbGlkYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBnLkFwcGVuZFZhbGlkYXRpb25KUyA9ICgpID0+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFNjcmlwdEVsZW1lbnQ+KGBzY3JpcHRbc3JjPVwiJHtWQUxJREFUSU9OX1NDUklQVF9TUkN9XCJdYCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3JpZ2luYWxBcHBlbmRWYWxpZGF0aW9uKCk7XG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JDaGVja0NhcHRjaGFBcGkodGltZW91dE1zID0gQ0FQVENIQV9SRUFEWV9USU1FT1VUX01TKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDwgdGltZW91dE1zKSB7XG4gICAgaWYgKGdldFNpYXJhU2hpZWxkR2xvYmFscygpLkNoZWNrQ2FwdGNoYSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1NpYXJhU2hpZWxkOiBDaGVja0NhcHRjaGEoKSB3YXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGltZW91dC4nKTtcbn1cblxuLyoqXG4gKiBEcm9wLWluIGluaXRpYWxpemVyIGZvciBTaWFyYVNoaWVsZC5cbiAqIC0gTG9hZHMgcmVxdWlyZWQgc2NyaXB0cyAob3B0aW9uYWxseSBqUXVlcnkpXG4gKiAtIENhbGxzIGdsb2JhbCBgaW5pdENhcHRjaGEocHVibGljS2V5KWBcbiAqXG4gKiBSZXF1aXJlbWVudHMgaW4geW91ciBIVE1ML3RlbXBsYXRlOlxuICogLSBZb3UgbXVzdCByZW5kZXI6IGA8ZGl2IGNsYXNzPVwiU2lhcmFTaGllbGRcIj48L2Rpdj5gXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0U2lhcmFTaGllbGQob3B0aW9uczogSW5pdFNpYXJhU2hpZWxkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgaWYgKHBlbmRpbmcpIHJldHVybiBwZW5kaW5nO1xuXG4gIGlmICghb3B0aW9ucz8ucHVibGljS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbml0U2lhcmFTaGllbGQ6IHB1YmxpY0tleSBpcyByZXF1aXJlZC4nKTtcbiAgfVxuXG4gIHBlbmRpbmcgPSAoYXN5bmMgKCkgPT4ge1xuICAgIGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQoKTtcbiAgICBjb25zdCBub25jZSA9IHByZXBhcmVTY3JpcHROb25jZShkb2N1bWVudCwgb3B0aW9ucy5jc3BOb25jZSk7XG4gICAgYXdhaXQgd2FpdEZvckNhcHRjaGFDb250YWluZXIoKTtcbiAgICBpZiAoKG9wdGlvbnMubG9hZEpRdWVyeSA/PyB0cnVlKSAmJiAhaXNKUXVlcnlBbHJlYWR5QXZhaWxhYmxlKCkpIHtcbiAgICAgIGF3YWl0IGxvYWRTY3JpcHQoZG9jdW1lbnQsIEpRVUVSWV9GQUxMQkFDS19TUkMsIHsgbm9uY2UgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgbG9hZFNjcmlwdChkb2N1bWVudCwgQ0FQVENIQV9TQ1JJUFRfU1JDLCB7IG5vbmNlIH0pO1xuICAgIGF3YWl0IGxvYWRTY3JpcHQoZG9jdW1lbnQsIFZBTElEQVRJT05fU0NSSVBUX1NSQywgeyBub25jZSB9KTtcblxuICAgIGNvbnN0IGcgPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKTtcbiAgICBlbnN1cmVBY2Nlc3NpYmlsaXR5UG9wdXBBbGlhc2VzKCk7XG4gICAgcHJldmVudER1cGxpY2F0ZVZhbGlkYXRpb25Cb290c3RyYXAoZyk7XG4gICAgaW5zdGFsbFZlbmRvckNoYWxsZW5nZVJ1bnRpbWVQYXRjaCgpO1xuICAgIGNvbnN0IGluaXRDYXB0Y2hhRm4gPSBnZXRJbml0Q2FwdGNoYUZuKGcpO1xuICAgIGlmICghaW5pdENhcHRjaGFGbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnU2lhcmFTaGllbGQ6IEluaXRDYXB0Y2hhKCkgaXMgbm90IGF2YWlsYWJsZSBhZnRlciBsb2FkaW5nIHNjcmlwdHMuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLmFsbG93VmVuZG9yQ29uc29sZUxvZ3MpIHtcbiAgICAgIHN1cHByZXNzVmVuZG9yQ29uc29sZVdpbmRvdygpO1xuICAgICAgaW5zdGFsbFZlbmRvclJ1bnRpbWVFcnJvclN1cHByZXNzaW9uKCk7XG4gICAgfVxuICAgIHJ1bkluUm9vdFpvbmUoKCkgPT4gaW5pdENhcHRjaGFGbihvcHRpb25zLnB1YmxpY0tleSkpO1xuICAgIGF3YWl0IHdhaXRGb3JDaGVja0NhcHRjaGFBcGkoKTtcbiAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gIH0pKCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwZW5kaW5nO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIGtlZXAgYHBlbmRpbmdgIGNhY2hlZCBmb3Igc3Vic2VxdWVudCBjYWxsZXJzXG4gIH1cbn1cblxuLyoqXG4gKiBDYWxscyBnbG9iYWwgYENoZWNrQ2FwdGNoYSgpYCBhbmQgcmV0dXJucyBpdHMgYm9vbGVhbiByZXN1bHQuXG4gKiBJZiBzdWNjZXNzZnVsLCByZXR1cm5zIGB7IG9rOiB0cnVlLCB0b2tlbj86IHN0cmluZyB9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU2lhcmFTaGllbGRDYXB0Y2hhKG9wdGlvbnM/OiB7IGFsbG93VmVuZG9yQ29uc29sZUxvZ3M/OiBib29sZWFuIH0pOiB7IG9rOiBib29sZWFuOyB0b2tlbj86IHN0cmluZyB9IHtcbiAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICBpZiAoIWcuQ2hlY2tDYXB0Y2hhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTaWFyYVNoaWVsZDogQ2hlY2tDYXB0Y2hhKCkgaXMgbm90IGF2YWlsYWJsZS4gRGlkIGluaXRTaWFyYVNoaWVsZCgpIHJ1bj8nKTtcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nVG9rZW4gPSB0eXBlb2YgZy5DeWJlclNpYXJhVG9rZW4gPT09ICdzdHJpbmcnICYmIGcuQ3liZXJTaWFyYVRva2VuLmxlbmd0aCA+IDAgPyBnLkN5YmVyU2lhcmFUb2tlbiA6IHVuZGVmaW5lZDtcbiAgaWYgKGV4aXN0aW5nVG9rZW4pIHtcbiAgICByZXR1cm4geyBvazogdHJ1ZSwgdG9rZW46IGV4aXN0aW5nVG9rZW4gfTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucz8uYWxsb3dWZW5kb3JDb25zb2xlTG9ncykge1xuICAgIHN1cHByZXNzVmVuZG9yQ29uc29sZVdpbmRvdygpO1xuICB9XG4gIGNvbnN0IG9rID0gZy5DaGVja0NhcHRjaGEoKTtcbiAgY29uc3QgdG9rZW4gPSB0eXBlb2YgZy5DeWJlclNpYXJhVG9rZW4gPT09ICdzdHJpbmcnID8gZy5DeWJlclNpYXJhVG9rZW4gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBvayA/IHsgb2s6IHRydWUsIHRva2VuIH0gOiB7IG9rOiBmYWxzZSB9O1xufVxuXG4vKipcbiAqIEFzeW5jLWZyaWVuZGx5IGNhcHRjaGEgY2hlY2sgdG8gaGFuZGxlIGRlbGF5ZWQgdG9rZW4gcG9wdWxhdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrU2lhcmFTaGllbGRDYXB0Y2hhQXN5bmMob3B0aW9ucz86IHtcbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgYmVmb3JlQ2hlY2tEZWxheU1zPzogbnVtYmVyO1xuICByZXRyeU9uRmFsc2VNcz86IG51bWJlcjtcbiAgZmFsc2VSZXN1bHRUb2tlbldhaXRNcz86IG51bWJlcjtcbn0pOiBQcm9taXNlPHsgb2s6IGJvb2xlYW47IHRva2VuPzogc3RyaW5nIH0+IHtcbiAgY29uc3QgdGltZW91dE1zID0gb3B0aW9ucz8udGltZW91dE1zID8/IDEyMDA7XG4gIGNvbnN0IHBvbGxJbnRlcnZhbE1zID0gb3B0aW9ucz8ucG9sbEludGVydmFsTXMgPz8gMTIwO1xuICBjb25zdCBiZWZvcmVDaGVja0RlbGF5TXMgPSBvcHRpb25zPy5iZWZvcmVDaGVja0RlbGF5TXMgPz8gMTQwO1xuICBjb25zdCByZXRyeU9uRmFsc2VNcyA9IG9wdGlvbnM/LnJldHJ5T25GYWxzZU1zID8/IDA7XG4gIGNvbnN0IGZhbHNlUmVzdWx0VG9rZW5XYWl0TXMgPSBvcHRpb25zPy5mYWxzZVJlc3VsdFRva2VuV2FpdE1zID8/IDkwMDtcbiAgY29uc3QgZXhpc3RpbmdUb2tlbiA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpLkN5YmVyU2lhcmFUb2tlbjtcbiAgaWYgKHR5cGVvZiBleGlzdGluZ1Rva2VuID09PSAnc3RyaW5nJyAmJiBleGlzdGluZ1Rva2VuLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4geyBvazogdHJ1ZSwgdG9rZW46IGV4aXN0aW5nVG9rZW4gfTtcbiAgfVxuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBiZWZvcmVDaGVja0RlbGF5TXMpKTtcbiAgbGV0IGZpcnN0Q2hlY2sgPSBjaGVja1NpYXJhU2hpZWxkQ2FwdGNoYSgpOyAvLyBvbmUgQVBJIGNhbGwgb25seVxuICBpZiAoIWZpcnN0Q2hlY2sub2sgJiYgcmV0cnlPbkZhbHNlTXMgPiAwKSB7XG4gICAgLy8gT3B0aW9uYWwgcmV0cnkgZm9yIGludGVncmF0aW9ucyB0aGF0IG9ic2VydmUgbGF0ZSB2ZW5kb3Itc3RhdGUgc2V0dGxpbmcuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmV0cnlPbkZhbHNlTXMpKTtcbiAgICBmaXJzdENoZWNrID0gY2hlY2tTaWFyYVNoaWVsZENhcHRjaGEoKTtcbiAgfVxuICBpZiAoIWZpcnN0Q2hlY2sub2spIHtcbiAgICAvLyBTb21lIHZlbmRvciBmbG93cyByZXR1cm4gZmFsc2UgZmlyc3QsIHRoZW4gc2V0IHRva2VuIHNob3J0bHkgYWZ0ZXIuXG4gICAgY29uc3QgZmFsc2VTdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIC0gZmFsc2VTdGFydGVkQXQgPCBmYWxzZVJlc3VsdFRva2VuV2FpdE1zKSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBwb2xsSW50ZXJ2YWxNcykpO1xuICAgICAgY29uc3QgdG9rZW4gPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKS5DeWJlclNpYXJhVG9rZW47XG4gICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJyAmJiB0b2tlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB0b2tlbiB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlyc3RDaGVjaztcbiAgfVxuICBpZiAoZmlyc3RDaGVjay50b2tlbikgcmV0dXJuIGZpcnN0Q2hlY2s7XG5cbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgLy8gVG9rZW4gY2FuIGJlIGFzc2lnbmVkIHNsaWdodGx5IGFmdGVyIHN1Y2Nlc3NmdWwgdmVyaWZpY2F0aW9uLlxuICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCA8IHRpbWVvdXRNcykge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHBvbGxJbnRlcnZhbE1zKSk7XG4gICAgY29uc3QgdG9rZW4gPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKS5DeWJlclNpYXJhVG9rZW47XG4gICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycgJiYgdG9rZW4ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHRva2VuIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgb2s6IHRydWUgfTtcbn1cblxuIl19
|
|
192
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2lhcmFzaGllbGQtd29ya3NwYWNlL3NyYy9saWIvc2lhcmEtc2hpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVuRixNQUFNLG1CQUFtQixHQUFHLGtFQUFrRSxDQUFDO0FBQy9GLE1BQU0sa0JBQWtCLEdBQUcsc0VBQXNFLENBQUM7QUFDbEcsTUFBTSxxQkFBcUIsR0FBRyx5RUFBeUUsQ0FBQztBQUN4RyxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQztBQUN0QyxNQUFNLGtDQUFrQyxHQUFHLElBQUksQ0FBQztBQUNoRCxNQUFNLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUVyQyxLQUFLLFVBQVUsdUJBQXVCLENBQUMsU0FBUyxHQUFHLGtDQUFrQztJQUNuRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDN0IsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQzFDLElBQUksUUFBUSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxD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T0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsTUFBTSxLQUFLLEdBQUcscUJBQXFCLEVBQUUsQ0FBQyxlQUFlLENBQUM7UUFDdEQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsRCxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEluaXRDYXB0Y2hhRm4sIGdldFNpYXJhU2hpZWxkR2xvYmFscyB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLmdsb2JhbHMnO1xuaW1wb3J0IHsgaW5zdGFsbFZlbmRvclJ1bnRpbWVFcnJvclN1cHByZXNzaW9uLCBzdXBwcmVzc1ZlbmRvckNvbnNvbGVXaW5kb3cgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC1sb2ctdXRpbHMnO1xuaW1wb3J0IHsgbG9hZFNjcmlwdCwgcHJlcGFyZVNjcmlwdE5vbmNlIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtc2NyaXB0LXV0aWxzJztcbmltcG9ydCB7IGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC1zdWJtaXQtZ3VhcmQnO1xuaW1wb3J0IHsgaW5zdGFsbFZlbmRvckNoYWxsZW5nZVJ1bnRpbWVQYXRjaCB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLXZlbmRvci1ydW50aW1lJztcblxuY29uc3QgSlFVRVJZX0ZBTExCQUNLX1NSQyA9ICdodHRwczovL2VtYmVkY2RuLm15Y3liZXJzaWFyYS5jb20vY2FwY2hhLXRlbXBsZS9qcy9qcXVlcnkubWluLmpzJztcbmNvbnN0IENBUFRDSEFfU0NSSVBUX1NSQyA9ICdodHRwczovL2VtYmVkY2RuLm15Y3liZXJzaWFyYS5jb20vQ2FwdGNoYUZvcm1hdGUvQ2FwdGNoYVJlc291cmNlcy5qcyc7XG5jb25zdCBWQUxJREFUSU9OX1NDUklQVF9TUkMgPSAnaHR0cHM6Ly9lbWJlZC5teWN5YmVyc2lhcmEuY29tL0NhcHRjaGFGb3JtYXRlL1NpYXJhU2hpZWxkX1ZhbGlkYXRpb24uanMnO1xuY29uc3QgQ0FQVENIQV9SRUFEWV9USU1FT1VUX01TID0gODAwMDtcbmNvbnN0IENBUFRDSEFfQ09OVEFJTkVSX1JFQURZX1RJTUVPVVRfTVMgPSAyMDAwO1xuY29uc3QgQ0FQVENIQV9DT05UQUlORVJfUE9MTF9NUyA9IDUwO1xuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ2FwdGNoYUNvbnRhaW5lcih0aW1lb3V0TXMgPSBDQVBUQ0hBX0NPTlRBSU5FUl9SRUFEWV9USU1FT1VUX01TKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDwgdGltZW91dE1zKSB7XG4gICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5TaWFyYVNoaWVsZCcpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIENBUFRDSEFfQ09OVEFJTkVSX1BPTExfTVMpKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRTaWFyYVNoaWVsZE9wdGlvbnMge1xuICAvKiogU2lhcmFTaGllbGQgcHVibGljIGtleS4gVXNlIFwiVEVTVC1DWUJFUlNJQVJBXCIgZm9yIHN0YWdpbmcvZGV2ZWxvcG1lbnQuICovXG4gIHB1YmxpY0tleTogc3RyaW5nO1xuICAvKipcbiAgICogTG9hZHMgalF1ZXJ5IGJlZm9yZSBTaWFyYVNoaWVsZCBzY3JpcHQuXG4gICAqIERlZmF1bHQgaXMgdHJ1ZSBmb3IgZWFzaWVyIGludGVncmF0aW9uLlxuICAgKiBTZXQgdG8gZmFsc2Ugb25seSBpZiB5b3VyIHNpdGUvYXBwIGFscmVhZHkgbG9hZHMgalF1ZXJ5LlxuICAgKi9cbiAgbG9hZEpRdWVyeT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDU1Agbm9uY2UgdmFsdWUgKHdpdGhvdXQgdGhlIGAnbm9uY2UtJ2AgcHJlZml4KS5cbiAgICogSWYgb21pdHRlZCwgd2UgYXR0ZW1wdCB0byByZXNvbHZlIGl0IGZyb20gZXhpc3RpbmcgYHNjcmlwdFtub25jZV1gIG9yIGBtZXRhW25hbWU9XCJjc3Atbm9uY2VcIl1gLlxuICAgKi9cbiAgY3NwTm9uY2U/OiBzdHJpbmc7XG4gIC8qKiBTZXQgdHJ1ZSBvbmx5IHdoZW4gYWN0aXZlbHkgZGVidWdnaW5nIHZlbmRvci9ydW50aW1lIGludGVybmFscyBpbiBicm93c2VyIGNvbnNvbGUuICovXG4gIGFsbG93VmVuZG9yQ29uc29sZUxvZ3M/OiBib29sZWFuO1xufVxuXG5sZXQgcGVuZGluZzogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGVuc3VyZUFjY2Vzc2liaWxpdHlQb3B1cEFsaWFzZXMoKTogdm9pZCB7XG4gIGNvbnN0IGcgPSBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGFsaWFzTmFtZXMgPSBbXG4gICAgJ1JlbW92ZUFjY2VzaWJpbGl0eVBvcHVwJyxcbiAgICAnX1JlbW92ZUFjY2VzaWJpbGl0eVBvcHVwJyxcbiAgICAnUmVtb3ZlQWNjZXNpYmxpdHlQb3B1cCcsXG4gICAgJ19SZW1vdmVBY2Nlc2libGl0eVBvcHVwJyxcbiAgXSBhcyBjb25zdDtcblxuICBjb25zdCBleGlzdGluZyA9IGFsaWFzTmFtZXNcbiAgICAubWFwKChuYW1lKSA9PiBnW25hbWVdKVxuICAgIC5maW5kKCh2YWx1ZSk6IHZhbHVlIGlzICgpID0+IHZvaWQgPT4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKTtcblxuICBjb25zdCBzdGFibGVGbiA9IGV4aXN0aW5nID8/ICgoKSA9PiB1bmRlZmluZWQpO1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgYWxpYXNOYW1lcykge1xuICAgIGdbbmFtZV0gPSBzdGFibGVGbjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0pRdWVyeUFscmVhZHlBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gIGNvbnN0IGcgPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKTtcbiAgaWYgKHR5cGVvZiBnLmpRdWVyeSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZy4kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBleGlzdGluZ0pxdWVyeVNjcmlwdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFNjcmlwdEVsZW1lbnQ+KCdzY3JpcHRbc3JjKj1cImpxdWVyeVwiXScpO1xuICByZXR1cm4gQm9vbGVhbihleGlzdGluZ0pxdWVyeVNjcmlwdCk7XG59XG5cbmZ1bmN0aW9uIHJ1bkluUm9vdFpvbmU8VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7IFpvbmU/OiB7IHJvb3Q/OiB7IHJ1bj86IDxVPihjYjogKCkgPT4gVSkgPT4gVSB9IH0gfTtcbiAgY29uc3Qgem9uZVJvb3RSdW4gPSBnLlpvbmU/LnJvb3Q/LnJ1bjtcbiAgaWYgKHR5cGVvZiB6b25lUm9vdFJ1biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB6b25lUm9vdFJ1bi5jYWxsKGcuWm9uZT8ucm9vdCwgZm4pIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIGZuKCk7XG59XG5cbmZ1bmN0aW9uIHByZXZlbnREdXBsaWNhdGVWYWxpZGF0aW9uQm9vdHN0cmFwKGc6IFJldHVyblR5cGU8dHlwZW9mIGdldFNpYXJhU2hpZWxkR2xvYmFscz4pOiB2b2lkIHtcbiAgY29uc3Qgb3JpZ2luYWxBcHBlbmRWYWxpZGF0aW9uID0gZy5BcHBlbmRWYWxpZGF0aW9uSlM7XG4gIGlmICh0eXBlb2Ygb3JpZ2luYWxBcHBlbmRWYWxpZGF0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZy5BcHBlbmRWYWxpZGF0aW9uSlMgPSAoKSA9PiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50Pihgc2NyaXB0W3NyYz1cIiR7VkFMSURBVElPTl9TQ1JJUFRfU1JDfVwiXWApO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG9yaWdpbmFsQXBwZW5kVmFsaWRhdGlvbigpO1xuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ2hlY2tDYXB0Y2hhQXBpKHRpbWVvdXRNcyA9IENBUFRDSEFfUkVBRFlfVElNRU9VVF9NUyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCA8IHRpbWVvdXRNcykge1xuICAgIGlmIChnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKS5DaGVja0NhcHRjaGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdTaWFyYVNoaWVsZDogQ2hlY2tDYXB0Y2hhKCkgd2FzIG5vdCBhdmFpbGFibGUgd2l0aGluIHRpbWVvdXQuJyk7XG59XG5cbi8qKlxuICogRHJvcC1pbiBpbml0aWFsaXplciBmb3IgU2lhcmFTaGllbGQuXG4gKiAtIExvYWRzIHJlcXVpcmVkIHNjcmlwdHMgKG9wdGlvbmFsbHkgalF1ZXJ5KVxuICogLSBDYWxscyBnbG9iYWwgYGluaXRDYXB0Y2hhKHB1YmxpY0tleSlgXG4gKlxuICogUmVxdWlyZW1lbnRzIGluIHlvdXIgSFRNTC90ZW1wbGF0ZTpcbiAqIC0gWW91IG11c3QgcmVuZGVyOiBgPGRpdiBjbGFzcz1cIlNpYXJhU2hpZWxkXCI+PC9kaXY+YFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdFNpYXJhU2hpZWxkKG9wdGlvbnM6IEluaXRTaWFyYVNoaWVsZE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKGluaXRpYWxpemVkKSByZXR1cm47XG4gIGlmIChwZW5kaW5nKSByZXR1cm4gcGVuZGluZztcblxuICBpZiAoIW9wdGlvbnM/LnB1YmxpY0tleSkge1xuICAgIHRocm93IG5ldyBFcnJvcignaW5pdFNpYXJhU2hpZWxkOiBwdWJsaWNLZXkgaXMgcmVxdWlyZWQuJyk7XG4gIH1cblxuICBwZW5kaW5nID0gKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIW9wdGlvbnMuYWxsb3dWZW5kb3JDb25zb2xlTG9ncykge1xuICAgICAgLy8gSW5zdGFsbCBzdXBwcmVzc2lvbiBhcyBlYXJseSBhcyBwb3NzaWJsZSBzbyBBbmd1bGFyIGRvZXNuJ3QgbG9nIGNyb3NzLW9yaWdpbiB2ZW5kb3Igbm9pc2UgZHVyaW5nIGJvb3RzdHJhcC5cbiAgICAgIGluc3RhbGxWZW5kb3JSdW50aW1lRXJyb3JTdXBwcmVzc2lvbigpO1xuICAgICAgc3VwcHJlc3NWZW5kb3JDb25zb2xlV2luZG93KCk7XG4gICAgfVxuICAgIGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQoKTtcbiAgICBjb25zdCBub25jZSA9IHByZXBhcmVTY3JpcHROb25jZShkb2N1bWVudCwgb3B0aW9ucy5jc3BOb25jZSk7XG4gICAgYXdhaXQgd2FpdEZvckNhcHRjaGFDb250YWluZXIoKTtcbiAgICBpZiAoKG9wdGlvbnMubG9hZEpRdWVyeSA/PyB0cnVlKSAmJiAhaXNKUXVlcnlBbHJlYWR5QXZhaWxhYmxlKCkpIHtcbiAgICAgIGF3YWl0IGxvYWRTY3JpcHQoZG9jdW1lbnQsIEpRVUVSWV9GQUxMQkFDS19TUkMsIHsgbm9uY2UgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgbG9hZFNjcmlwdChkb2N1bWVudCwgQ0FQVENIQV9TQ1JJUFRfU1JDLCB7IG5vbmNlIH0pO1xuICAgIGF3YWl0IGxvYWRTY3JpcHQoZG9jdW1lbnQsIFZBTElEQVRJT05fU0NSSVBUX1NSQywgeyBub25jZSB9KTtcblxuICAgIGNvbnN0IGcgPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKTtcbiAgICBlbnN1cmVBY2Nlc3NpYmlsaXR5UG9wdXBBbGlhc2VzKCk7XG4gICAgcHJldmVudER1cGxpY2F0ZVZhbGlkYXRpb25Cb290c3RyYXAoZyk7XG4gICAgaW5zdGFsbFZlbmRvckNoYWxsZW5nZVJ1bnRpbWVQYXRjaCgpO1xuICAgIGNvbnN0IGluaXRDYXB0Y2hhRm4gPSBnZXRJbml0Q2FwdGNoYUZuKGcpO1xuICAgIGlmICghaW5pdENhcHRjaGFGbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnU2lhcmFTaGllbGQ6IEluaXRDYXB0Y2hhKCkgaXMgbm90IGF2YWlsYWJsZSBhZnRlciBsb2FkaW5nIHNjcmlwdHMuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcnVuSW5Sb290Wm9uZSgoKSA9PiBpbml0Q2FwdGNoYUZuKG9wdGlvbnMucHVibGljS2V5KSk7XG4gICAgYXdhaXQgd2FpdEZvckNoZWNrQ2FwdGNoYUFwaSgpO1xuICAgIGluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfSkoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHBlbmRpbmc7XG4gIH0gZmluYWxseSB7XG4gICAgLy8ga2VlcCBgcGVuZGluZ2AgY2FjaGVkIGZvciBzdWJzZXF1ZW50IGNhbGxlcnNcbiAgfVxufVxuXG4vKipcbiAqIENhbGxzIGdsb2JhbCBgQ2hlY2tDYXB0Y2hhKClgIGFuZCByZXR1cm5zIGl0cyBib29sZWFuIHJlc3VsdC5cbiAqIElmIHN1Y2Nlc3NmdWwsIHJldHVybnMgYHsgb2s6IHRydWUsIHRva2VuPzogc3RyaW5nIH1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tTaWFyYVNoaWVsZENhcHRjaGEob3B0aW9ucz86IHsgYWxsb3dWZW5kb3JDb25zb2xlTG9ncz86IGJvb2xlYW4gfSk6IHsgb2s6IGJvb2xlYW47IHRva2VuPzogc3RyaW5nIH0ge1xuICBjb25zdCBnID0gZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCk7XG4gIGlmICghZy5DaGVja0NhcHRjaGEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpYXJhU2hpZWxkOiBDaGVja0NhcHRjaGEoKSBpcyBub3QgYXZhaWxhYmxlLiBEaWQgaW5pdFNpYXJhU2hpZWxkKCkgcnVuPycpO1xuICB9XG5cbiAgY29uc3QgZXhpc3RpbmdUb2tlbiA9IHR5cGVvZiBnLkN5YmVyU2lhcmFUb2tlbiA9PT0gJ3N0cmluZycgJiYgZy5DeWJlclNpYXJhVG9rZW4ubGVuZ3RoID4gMCA/IGcuQ3liZXJTaWFyYVRva2VuIDogdW5kZWZpbmVkO1xuICBpZiAoZXhpc3RpbmdUb2tlbikge1xuICAgIHJldHVybiB7IG9rOiB0cnVlLCB0b2tlbjogZXhpc3RpbmdUb2tlbiB9O1xuICB9XG5cbiAgaWYgKCFvcHRpb25zPy5hbGxvd1ZlbmRvckNvbnNvbGVMb2dzKSB7XG4gICAgc3VwcHJlc3NWZW5kb3JDb25zb2xlV2luZG93KCk7XG4gIH1cbiAgY29uc3Qgb2sgPSBnLkNoZWNrQ2FwdGNoYSgpO1xuICBjb25zdCB0b2tlbiA9IHR5cGVvZiBnLkN5YmVyU2lhcmFUb2tlbiA9PT0gJ3N0cmluZycgPyBnLkN5YmVyU2lhcmFUb2tlbiA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG9rID8geyBvazogdHJ1ZSwgdG9rZW4gfSA6IHsgb2s6IGZhbHNlIH07XG59XG5cbi8qKlxuICogQXN5bmMtZnJpZW5kbHkgY2FwdGNoYSBjaGVjayB0byBoYW5kbGUgZGVsYXllZCB0b2tlbiBwb3B1bGF0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tTaWFyYVNoaWVsZENhcHRjaGFBc3luYyhvcHRpb25zPzoge1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHBvbGxJbnRlcnZhbE1zPzogbnVtYmVyO1xuICBiZWZvcmVDaGVja0RlbGF5TXM/OiBudW1iZXI7XG4gIHJldHJ5T25GYWxzZU1zPzogbnVtYmVyO1xuICBmYWxzZVJlc3VsdFRva2VuV2FpdE1zPzogbnVtYmVyO1xufSk6IFByb21pc2U8eyBvazogYm9vbGVhbjsgdG9rZW4/OiBzdHJpbmcgfT4ge1xuICBjb25zdCB0aW1lb3V0TXMgPSBvcHRpb25zPy50aW1lb3V0TXMgPz8gMTIwMDtcbiAgY29uc3QgcG9sbEludGVydmFsTXMgPSBvcHRpb25zPy5wb2xsSW50ZXJ2YWxNcyA/PyAxMjA7XG4gIGNvbnN0IGJlZm9yZUNoZWNrRGVsYXlNcyA9IG9wdGlvbnM/LmJlZm9yZUNoZWNrRGVsYXlNcyA/PyAxNDA7XG4gIGNvbnN0IHJldHJ5T25GYWxzZU1zID0gb3B0aW9ucz8ucmV0cnlPbkZhbHNlTXMgPz8gMDtcbiAgY29uc3QgZmFsc2VSZXN1bHRUb2tlbldhaXRNcyA9IG9wdGlvbnM/LmZhbHNlUmVzdWx0VG9rZW5XYWl0TXMgPz8gOTAwO1xuICBjb25zdCBleGlzdGluZ1Rva2VuID0gZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCkuQ3liZXJTaWFyYVRva2VuO1xuICBpZiAodHlwZW9mIGV4aXN0aW5nVG9rZW4gPT09ICdzdHJpbmcnICYmIGV4aXN0aW5nVG9rZW4ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7IG9rOiB0cnVlLCB0b2tlbjogZXhpc3RpbmdUb2tlbiB9O1xuICB9XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIGJlZm9yZUNoZWNrRGVsYXlNcykpO1xuICBsZXQgZmlyc3RDaGVjayA9IGNoZWNrU2lhcmFTaGllbGRDYXB0Y2hhKCk7IC8vIG9uZSBBUEkgY2FsbCBvbmx5XG4gIGlmICghZmlyc3RDaGVjay5vayAmJiByZXRyeU9uRmFsc2VNcyA+IDApIHtcbiAgICAvLyBPcHRpb25hbCByZXRyeSBmb3IgaW50ZWdyYXRpb25zIHRoYXQgb2JzZXJ2ZSBsYXRlIHZlbmRvci1zdGF0ZSBzZXR0bGluZy5cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCByZXRyeU9uRmFsc2VNcykpO1xuICAgIGZpcnN0Q2hlY2sgPSBjaGVja1NpYXJhU2hpZWxkQ2FwdGNoYSgpO1xuICB9XG4gIGlmICghZmlyc3RDaGVjay5vaykge1xuICAgIC8vIFNvbWUgdmVuZG9yIGZsb3dzIHJldHVybiBmYWxzZSBmaXJzdCwgdGhlbiBzZXQgdG9rZW4gc2hvcnRseSBhZnRlci5cbiAgICBjb25zdCBmYWxzZVN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgd2hpbGUgKERhdGUubm93KCkgLSBmYWxzZVN0YXJ0ZWRBdCA8IGZhbHNlUmVzdWx0VG9rZW5XYWl0TXMpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHBvbGxJbnRlcnZhbE1zKSk7XG4gICAgICBjb25zdCB0b2tlbiA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpLkN5YmVyU2lhcmFUb2tlbjtcbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnICYmIHRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHRva2VuIH07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmaXJzdENoZWNrO1xuICB9XG4gIGlmIChmaXJzdENoZWNrLnRva2VuKSByZXR1cm4gZmlyc3RDaGVjaztcblxuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICAvLyBUb2tlbiBjYW4gYmUgYXNzaWduZWQgc2xpZ2h0bHkgYWZ0ZXIgc3VjY2Vzc2Z1bCB2ZXJpZmljYXRpb24uXG4gIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDwgdGltZW91dE1zKSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcG9sbEludGVydmFsTXMpKTtcbiAgICBjb25zdCB0b2tlbiA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpLkN5YmVyU2lhcmFUb2tlbjtcbiAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJyAmJiB0b2tlbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyBvazogdHJ1ZSwgdG9rZW4gfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBvazogdHJ1ZSB9O1xufVxuXG4iXX0=
|
|
@@ -11,7 +11,7 @@ function getInitCaptchaFn(g) {
|
|
|
11
11
|
|
|
12
12
|
const CONSOLE_PATCH_STATE_KEY = '__siaraShieldConsolePatchState__';
|
|
13
13
|
const VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY = '__siaraShieldVendorRuntimeErrorPatchState__';
|
|
14
|
-
const DEFAULT_SUPPRESS_WINDOW_MS =
|
|
14
|
+
const DEFAULT_SUPPRESS_WINDOW_MS = 8000;
|
|
15
15
|
function getConsolePatchState() {
|
|
16
16
|
const globalState = globalThis;
|
|
17
17
|
if (!globalState[CONSOLE_PATCH_STATE_KEY]) {
|
|
@@ -83,12 +83,18 @@ function isLikelyVendorScriptRuntimeError(message, source) {
|
|
|
83
83
|
const normalizedMessage = String(message ?? '').trim().toLowerCase();
|
|
84
84
|
const normalizedSource = String(source ?? '').trim().toLowerCase();
|
|
85
85
|
const fromSiaraHost = normalizedSource.includes('embed.mycybersiara.com') || normalizedSource.includes('embedcdn.mycybersiara.com');
|
|
86
|
+
const fromRequestsJs = normalizedSource.includes('requests.js');
|
|
86
87
|
const isKnownVendorDomError = normalizedMessage.includes("cannot read properties of null (reading 'removechild')") &&
|
|
87
88
|
(normalizedSource.includes('jquery') || normalizedSource.includes('captcharesources'));
|
|
89
|
+
const isKnownNoErrorErrorEvent = normalizedMessage.includes('an errorevent with no error occurred') || normalizedMessage.includes('script error');
|
|
88
90
|
if (fromSiaraHost)
|
|
89
91
|
return true;
|
|
92
|
+
if (fromRequestsJs)
|
|
93
|
+
return true;
|
|
90
94
|
if (isKnownVendorDomError)
|
|
91
95
|
return true;
|
|
96
|
+
if (isKnownNoErrorErrorEvent)
|
|
97
|
+
return true;
|
|
92
98
|
return normalizedMessage === 'script error.' || normalizedMessage === 'script error';
|
|
93
99
|
}
|
|
94
100
|
/**
|
|
@@ -100,6 +106,28 @@ function installVendorRuntimeErrorSuppression() {
|
|
|
100
106
|
if (patchState.installed)
|
|
101
107
|
return;
|
|
102
108
|
const previousOnError = patchState.originalOnError;
|
|
109
|
+
const previousErrorListener = globalThis
|
|
110
|
+
.__siaraShieldPrevErrorListener__;
|
|
111
|
+
const captureErrorListener = (event) => {
|
|
112
|
+
// Angular can surface cross-origin script failures as generic ErrorEvent "Script error."
|
|
113
|
+
// even when the underlying vendor request succeeds. This blocks those from bubbling.
|
|
114
|
+
const errorEvent = event;
|
|
115
|
+
const message = String(errorEvent?.message ?? '').trim().toLowerCase();
|
|
116
|
+
const filename = String(errorEvent?.filename ?? '').trim().toLowerCase();
|
|
117
|
+
const isGenericCrossOriginNoise = message === 'script error.' ||
|
|
118
|
+
message === 'script error' ||
|
|
119
|
+
message.includes('an errorevent with no error occurred');
|
|
120
|
+
if (!isGenericCrossOriginNoise)
|
|
121
|
+
return;
|
|
122
|
+
// Requests.js and vendor scripts are commonly cross-origin; suppress the generic noise.
|
|
123
|
+
if (filename.includes('requests.js') ||
|
|
124
|
+
filename.includes('embed.mycybersiara.com') ||
|
|
125
|
+
filename.includes('embedcdn.mycybersiara.com') ||
|
|
126
|
+
filename.includes('jquery')) {
|
|
127
|
+
event.preventDefault?.();
|
|
128
|
+
event.stopImmediatePropagation?.();
|
|
129
|
+
}
|
|
130
|
+
};
|
|
103
131
|
globalThis.onerror = (message, source, lineno, colno, error) => {
|
|
104
132
|
if (isLikelyVendorScriptRuntimeError(message, source)) {
|
|
105
133
|
return true;
|
|
@@ -109,6 +137,12 @@ function installVendorRuntimeErrorSuppression() {
|
|
|
109
137
|
}
|
|
110
138
|
return false;
|
|
111
139
|
};
|
|
140
|
+
// Capture-phase listener to prevent Angular global error handler from logging generic cross-origin noise.
|
|
141
|
+
if (!previousErrorListener) {
|
|
142
|
+
globalThis.__siaraShieldPrevErrorListener__ =
|
|
143
|
+
captureErrorListener;
|
|
144
|
+
globalThis.addEventListener('error', captureErrorListener, true);
|
|
145
|
+
}
|
|
112
146
|
patchState.installed = true;
|
|
113
147
|
}
|
|
114
148
|
|
|
@@ -644,6 +678,11 @@ class SiaraShieldComponent {
|
|
|
644
678
|
return;
|
|
645
679
|
// Ensure the host element is in DOM before scripts run.
|
|
646
680
|
void this.host.nativeElement;
|
|
681
|
+
if (!options.allowVendorConsoleLogs) {
|
|
682
|
+
// Install suppression as early as possible so Angular doesn't log cross-origin vendor noise during bootstrap.
|
|
683
|
+
installVendorRuntimeErrorSuppression();
|
|
684
|
+
suppressVendorConsoleWindow();
|
|
685
|
+
}
|
|
647
686
|
installCaptchaSubmitGuard();
|
|
648
687
|
if (!options.publicKey) {
|
|
649
688
|
throw new Error('SiaraShieldComponent: publicKey is required.');
|
|
@@ -668,10 +707,6 @@ class SiaraShieldComponent {
|
|
|
668
707
|
if (!initCaptchaFn) {
|
|
669
708
|
throw new Error('SiaraShield: InitCaptcha() is not available after loading scripts.');
|
|
670
709
|
}
|
|
671
|
-
if (!options.allowVendorConsoleLogs) {
|
|
672
|
-
suppressVendorConsoleWindow();
|
|
673
|
-
installVendorRuntimeErrorSuppression();
|
|
674
|
-
}
|
|
675
710
|
runInRootZone$1(() => initCaptchaFn(options.publicKey));
|
|
676
711
|
await this.waitForCheckCaptchaApi();
|
|
677
712
|
this.initialized = true;
|
|
@@ -896,6 +931,11 @@ async function initSiaraShield(options) {
|
|
|
896
931
|
throw new Error('initSiaraShield: publicKey is required.');
|
|
897
932
|
}
|
|
898
933
|
pending = (async () => {
|
|
934
|
+
if (!options.allowVendorConsoleLogs) {
|
|
935
|
+
// Install suppression as early as possible so Angular doesn't log cross-origin vendor noise during bootstrap.
|
|
936
|
+
installVendorRuntimeErrorSuppression();
|
|
937
|
+
suppressVendorConsoleWindow();
|
|
938
|
+
}
|
|
899
939
|
installCaptchaSubmitGuard();
|
|
900
940
|
const nonce = prepareScriptNonce(document, options.cspNonce);
|
|
901
941
|
await waitForCaptchaContainer();
|
|
@@ -912,10 +952,6 @@ async function initSiaraShield(options) {
|
|
|
912
952
|
if (!initCaptchaFn) {
|
|
913
953
|
throw new Error('SiaraShield: InitCaptcha() is not available after loading scripts.');
|
|
914
954
|
}
|
|
915
|
-
if (!options.allowVendorConsoleLogs) {
|
|
916
|
-
suppressVendorConsoleWindow();
|
|
917
|
-
installVendorRuntimeErrorSuppression();
|
|
918
|
-
}
|
|
919
955
|
runInRootZone(() => initCaptchaFn(options.publicKey));
|
|
920
956
|
await waitForCheckCaptchaApi();
|
|
921
957
|
initialized = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"siarashield_workspace.mjs","sources":["../../../projects/siarashield-workspace/src/lib/siara-shield.globals.ts","../../../projects/siarashield-workspace/src/lib/siara-shield-log-utils.ts","../../../projects/siarashield-workspace/src/lib/siara-shield-submit-guard.ts","../../../projects/siarashield-workspace/src/lib/siara-shield-script-utils.ts","../../../projects/siarashield-workspace/src/lib/siara-shield-vendor-runtime.ts","../../../projects/siarashield-workspace/src/lib/siara-shield-loader.service.ts","../../../projects/siarashield-workspace/src/lib/siara-shield.component.ts","../../../projects/siarashield-workspace/src/lib/siara-shield.ts","../../../projects/siarashield-workspace/src/lib/siara-shield-csp.ts","../../../projects/siarashield-workspace/src/public-api.ts","../../../projects/siarashield-workspace/src/siarashield_workspace.ts"],"sourcesContent":["export type InitCaptchaFn = (publicKey: string) => void;\nexport type CheckCaptchaFn = () => boolean;\n\nexport interface SiaraShieldGlobals {\n initCaptcha?: InitCaptchaFn;\n InitCaptcha?: InitCaptchaFn;\n CheckCaptcha?: CheckCaptchaFn;\n AppendValidationJS?: () => void;\n CyberSiaraToken?: string;\n jQuery?: unknown;\n $?: unknown;\n}\n\nexport function getSiaraShieldGlobals(): SiaraShieldGlobals {\n return (globalThis as unknown as { [k: string]: unknown }) as SiaraShieldGlobals;\n}\n\nexport function getInitCaptchaFn(g: SiaraShieldGlobals): InitCaptchaFn | undefined {\n return g.initCaptcha ?? g.InitCaptcha;\n}\n","interface ConsolePatchState {\n depth: number;\n originalLog: Console['log'];\n originalInfo: Console['info'];\n originalWarn: Console['warn'];\n originalDebug: Console['debug'];\n originalError: Console['error'];\n}\n\ninterface VendorRuntimeErrorPatchState {\n installed: boolean;\n originalOnError: OnErrorEventHandler | null;\n}\n\nconst CONSOLE_PATCH_STATE_KEY = '__siaraShieldConsolePatchState__';\nconst VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY = '__siaraShieldVendorRuntimeErrorPatchState__';\nconst DEFAULT_SUPPRESS_WINDOW_MS = 2000;\n\nfunction getConsolePatchState(): ConsolePatchState {\n const globalState = globalThis as typeof globalThis & {\n [CONSOLE_PATCH_STATE_KEY]?: ConsolePatchState;\n };\n\n if (!globalState[CONSOLE_PATCH_STATE_KEY]) {\n globalState[CONSOLE_PATCH_STATE_KEY] = {\n depth: 0,\n originalLog: console.log.bind(console),\n originalInfo: console.info.bind(console),\n originalWarn: console.warn.bind(console),\n originalDebug: console.debug.bind(console),\n originalError: console.error.bind(console),\n };\n }\n\n return globalState[CONSOLE_PATCH_STATE_KEY];\n}\n\nfunction muteConsole(): void {\n const patchState = getConsolePatchState();\n patchState.depth += 1;\n if (patchState.depth > 1) return;\n\n console.log = () => undefined;\n console.info = () => undefined;\n console.warn = () => undefined;\n console.debug = () => undefined;\n console.error = (...args: unknown[]) => {\n const normalized = args\n .map((arg) => (typeof arg === 'string' ? arg : arg instanceof Error ? arg.message : ''))\n .join(' ')\n .toLowerCase();\n\n // Known noisy upstream vendor runtime error path from CaptchaResources.js bootstrap.\n if (\n normalized.includes('an errorevent with no error occurred') ||\n normalized.includes('script error') ||\n normalized.includes('captcharesources.js') ||\n normalized.includes('getcybersiara')\n ) {\n return;\n }\n\n patchState.originalError(...args);\n };\n}\n\nfunction unmuteConsole(): void {\n const patchState = getConsolePatchState();\n if (patchState.depth === 0) return;\n patchState.depth -= 1;\n if (patchState.depth > 0) return;\n\n console.log = patchState.originalLog;\n console.info = patchState.originalInfo;\n console.warn = patchState.originalWarn;\n console.debug = patchState.originalDebug;\n console.error = patchState.originalError;\n}\n\nexport function suppressVendorConsoleWindow(windowMs = DEFAULT_SUPPRESS_WINDOW_MS): void {\n muteConsole();\n setTimeout(() => {\n unmuteConsole();\n }, windowMs);\n}\n\nfunction getVendorRuntimeErrorPatchState(): VendorRuntimeErrorPatchState {\n const globalState = globalThis as typeof globalThis & {\n [VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY]?: VendorRuntimeErrorPatchState;\n };\n\n if (!globalState[VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY]) {\n globalState[VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY] = {\n installed: false,\n originalOnError: globalThis.onerror ?? null,\n };\n }\n\n return globalState[VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY];\n}\n\nfunction isLikelyVendorScriptRuntimeError(message: unknown, source: unknown): boolean {\n const normalizedMessage = String(message ?? '').trim().toLowerCase();\n const normalizedSource = String(source ?? '').trim().toLowerCase();\n const fromSiaraHost =\n normalizedSource.includes('embed.mycybersiara.com') || normalizedSource.includes('embedcdn.mycybersiara.com');\n const isKnownVendorDomError =\n normalizedMessage.includes(\"cannot read properties of null (reading 'removechild')\") &&\n (normalizedSource.includes('jquery') || normalizedSource.includes('captcharesources'));\n\n if (fromSiaraHost) return true;\n if (isKnownVendorDomError) return true;\n return normalizedMessage === 'script error.' || normalizedMessage === 'script error';\n}\n\n/**\n * Suppresses noisy cross-origin vendor runtime script errors so Angular does not\n * surface them as unhandled `ErrorEvent` crashes in the console.\n */\nexport function installVendorRuntimeErrorSuppression(): void {\n const patchState = getVendorRuntimeErrorPatchState();\n if (patchState.installed) return;\n\n const previousOnError = patchState.originalOnError;\n globalThis.onerror = (message, source, lineno, colno, error) => {\n if (isLikelyVendorScriptRuntimeError(message, source)) {\n return true;\n }\n\n if (typeof previousOnError === 'function') {\n return previousOnError.call(globalThis, message, source, lineno, colno, error);\n }\n\n return false;\n };\n\n patchState.installed = true;\n}\n\n","const SUBMIT_GUARD_STATE_KEY = '__siaraShieldSubmitGuardInstalled__';\nconst SYNTHETIC_CLICK_GUARD_WINDOW_MS = 1200;\n\nexport function installCaptchaSubmitGuard(): void {\n const globalState = globalThis as typeof globalThis & {\n [SUBMIT_GUARD_STATE_KEY]?: boolean;\n };\n\n if (globalState[SUBMIT_GUARD_STATE_KEY]) return;\n\n const lastSyntheticClickByButton = new WeakMap<EventTarget, number>();\n\n document.addEventListener(\n 'click',\n (event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n\n const submitButton = target.closest('.CaptchaSubmit');\n if (!submitButton) return;\n\n // Vendor runtime can emit synthetic clicks on .CaptchaSubmit.\n // Allow one synthetic click (needed for vendor auto-submit) but block rapid duplicates.\n if (!event.isTrusted) {\n const now = Date.now();\n const lastSyntheticClickAt = lastSyntheticClickByButton.get(submitButton) ?? 0;\n if (now - lastSyntheticClickAt < SYNTHETIC_CLICK_GUARD_WINDOW_MS) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n lastSyntheticClickByButton.set(submitButton, now);\n }\n },\n true,\n );\n\n globalState[SUBMIT_GUARD_STATE_KEY] = true;\n}\n\n","type ScriptStatus = 'loading' | 'loaded' | 'error';\n\nexport interface ScriptLoadOptions {\n nonce?: string;\n}\n\ninterface DynamicScriptNoncePatchState {\n nonceByDocument: WeakMap<Document, string>;\n observerByDocument: WeakMap<Document, MutationObserver>;\n inlineCaptchaScriptByDocument: WeakMap<Document, Set<string>>;\n patched: boolean;\n}\n\nconst SCRIPT_STATUS_BY_DOCUMENT = new WeakMap<Document, Map<string, ScriptStatus>>();\nconst SCRIPT_PENDING_BY_DOCUMENT = new WeakMap<Document, Map<string, Promise<void>>>();\nconst DYNAMIC_SCRIPT_NONCE_STATE_KEY = '__siaraShieldDynamicScriptNonceState__';\n\nfunction getStatusBySrc(documentRef: Document): Map<string, ScriptStatus> {\n let statusBySrc = SCRIPT_STATUS_BY_DOCUMENT.get(documentRef);\n if (!statusBySrc) {\n statusBySrc = new Map<string, ScriptStatus>();\n SCRIPT_STATUS_BY_DOCUMENT.set(documentRef, statusBySrc);\n }\n\n return statusBySrc;\n}\n\nfunction getPendingBySrc(documentRef: Document): Map<string, Promise<void>> {\n let pendingBySrc = SCRIPT_PENDING_BY_DOCUMENT.get(documentRef);\n if (!pendingBySrc) {\n pendingBySrc = new Map<string, Promise<void>>();\n SCRIPT_PENDING_BY_DOCUMENT.set(documentRef, pendingBySrc);\n }\n\n return pendingBySrc;\n}\n\nfunction getDynamicScriptNoncePatchState(): DynamicScriptNoncePatchState {\n const globalState = globalThis as typeof globalThis & {\n [DYNAMIC_SCRIPT_NONCE_STATE_KEY]?: DynamicScriptNoncePatchState;\n };\n\n if (!globalState[DYNAMIC_SCRIPT_NONCE_STATE_KEY]) {\n globalState[DYNAMIC_SCRIPT_NONCE_STATE_KEY] = {\n nonceByDocument: new WeakMap<Document, string>(),\n observerByDocument: new WeakMap<Document, MutationObserver>(),\n inlineCaptchaScriptByDocument: new WeakMap<Document, Set<string>>(),\n patched: false,\n };\n }\n\n return globalState[DYNAMIC_SCRIPT_NONCE_STATE_KEY];\n}\n\nfunction normalizeNonce(nonce?: string | null): string | undefined {\n const trimmed = nonce?.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction isScriptElement(node: Node): node is HTMLScriptElement {\n return node instanceof Element && node.tagName.toLowerCase() === 'script';\n}\n\nfunction isStyleElement(node: Node): node is HTMLStyleElement {\n return node instanceof Element && node.tagName.toLowerCase() === 'style';\n}\n\nfunction isStylesheetLinkElement(node: Node): node is HTMLLinkElement {\n if (!(node instanceof Element) || node.tagName.toLowerCase() !== 'link') {\n return false;\n }\n const rel = (node.getAttribute('rel') ?? '').toLowerCase();\n return rel === 'stylesheet';\n}\n\nexport function applyScriptNonce(script: HTMLScriptElement, nonce?: string): void {\n const resolvedNonce = normalizeNonce(nonce);\n if (!resolvedNonce) {\n return;\n }\n\n script.setAttribute('nonce', resolvedNonce);\n script.nonce = resolvedNonce;\n\n // Some vendor HTML fragments include inline scripts that execute immediately during insertion.\n // In strict CSP mode these run with a nonce, but can still race DOM insertion and crash\n // (e.g. `null.querySelector(...)`). We defensively retry once on failure.\n if (!script.src) {\n const body = script.textContent ?? '';\n if (body && !body.includes('__siaraShieldInlineRetry__')) {\n script.textContent = `(function(){\\n` +\n ` var __siaraShieldInlineRetry__ = true;\\n` +\n ` function __run(){\\n${body}\\n }\\n` +\n ` try { __run(); } catch (e) {\\n` +\n ` try { setTimeout(function(){ try { __run(); } catch (_e) {} }, 0); } catch (_t) {}\\n` +\n ` }\\n` +\n `})();`;\n }\n }\n}\n\nfunction applyStyleNonce(style: HTMLStyleElement, nonce?: string): void {\n const resolvedNonce = normalizeNonce(nonce);\n if (!resolvedNonce) {\n return;\n }\n\n style.setAttribute('nonce', resolvedNonce);\n style.nonce = resolvedNonce;\n}\n\nfunction applyLinkNonce(link: HTMLLinkElement, nonce?: string): void {\n const resolvedNonce = normalizeNonce(nonce);\n if (!resolvedNonce) {\n return;\n }\n\n link.setAttribute('nonce', resolvedNonce);\n // `HTMLLinkElement.nonce` exists in modern browsers.\n (link as HTMLLinkElement & { nonce?: string }).nonce = resolvedNonce;\n}\n\nfunction applyNonceToNode(node: Node, nonce?: string): void {\n if (isScriptElement(node)) {\n applyScriptNonce(node, nonce);\n return;\n }\n if (isStyleElement(node)) {\n applyStyleNonce(node, nonce);\n return;\n }\n if (isStylesheetLinkElement(node)) {\n applyLinkNonce(node, nonce);\n }\n}\n\nfunction applyTrackedNonce(node: Node): void {\n const documentRef = node.ownerDocument;\n if (!documentRef) {\n return;\n }\n\n const nonce = getDynamicScriptNoncePatchState().nonceByDocument.get(documentRef);\n applyNonceToNode(node, nonce);\n}\n\nfunction getTrackedInlineCaptchaScripts(documentRef: Document): Set<string> {\n const patchState = getDynamicScriptNoncePatchState();\n let trackedScripts = patchState.inlineCaptchaScriptByDocument.get(documentRef);\n if (!trackedScripts) {\n trackedScripts = new Set<string>();\n patchState.inlineCaptchaScriptByDocument.set(documentRef, trackedScripts);\n }\n\n return trackedScripts;\n}\n\nfunction shouldSkipDuplicateInlineCaptchaScript(node: Node): boolean {\n if (!isScriptElement(node) || Boolean(node.src)) {\n return false;\n }\n\n const scriptBody = (node.textContent ?? '').trim();\n if (!scriptBody || !scriptBody.includes('currentLangCode')) {\n return false;\n }\n\n const documentRef = node.ownerDocument;\n if (!documentRef) {\n return false;\n }\n\n const trackedScripts = getTrackedInlineCaptchaScripts(documentRef);\n if (trackedScripts.has(scriptBody)) {\n return true;\n }\n\n trackedScripts.add(scriptBody);\n return false;\n}\n\nfunction walkAndApplyNonce(root: Node, nonce?: string): void {\n if (!nonce) return;\n\n // Fast path: root itself is nonceable.\n if (isScriptElement(root) || isStyleElement(root) || isStylesheetLinkElement(root)) {\n applyNonceToNode(root, nonce);\n return;\n }\n\n // Common path for jQuery: append DocumentFragment containing nodes created via HTML parsing.\n if (root instanceof Element || root instanceof DocumentFragment) {\n const nonceable = root.querySelectorAll?.('script,style,link[rel=\"stylesheet\"]') ?? [];\n for (const el of nonceable) {\n applyNonceToNode(el as unknown as Node, nonce);\n }\n }\n}\n\nfunction ensureNonceMutationObserver(documentRef: Document): void {\n const patchState = getDynamicScriptNoncePatchState();\n if (patchState.observerByDocument.get(documentRef)) {\n return;\n }\n\n const observer = new MutationObserver((records) => {\n const nonce = patchState.nonceByDocument.get(documentRef);\n if (!nonce) return;\n\n for (const record of records) {\n for (const node of record.addedNodes) {\n walkAndApplyNonce(node, nonce);\n }\n }\n });\n\n // Observe the full document because scripts can be injected into body/head by vendor/jQuery.\n const root = documentRef.documentElement ?? documentRef;\n observer.observe(root, { childList: true, subtree: true });\n patchState.observerByDocument.set(documentRef, observer);\n}\n\nfunction teardownNonceMutationObserver(documentRef: Document): void {\n const patchState = getDynamicScriptNoncePatchState();\n const observer = patchState.observerByDocument.get(documentRef);\n if (!observer) return;\n observer.disconnect();\n patchState.observerByDocument.delete(documentRef);\n}\n\nfunction injectNonceIntoHtml(html: string, nonce: string): string {\n const resolvedNonce = normalizeNonce(nonce);\n if (!resolvedNonce) return html;\n\n // If tag already includes nonce, leave it.\n const withNonceAttr = ` nonce=\"${resolvedNonce}\"`;\n\n const addNonceToTag = (tag: 'script' | 'style') => {\n const openTag = new RegExp(`<${tag}(\\\\s[^>]*?)?>`, 'gi');\n return (input: string) =>\n input.replace(openTag, (match) => {\n if (/[\\s\"']nonce\\s*=/.test(match)) return match;\n // Insert nonce before closing `>`\n return match.replace(/>$/, `${withNonceAttr}>`);\n });\n };\n\n // For link rel=stylesheet, add nonce when missing.\n const linkOpenTag = /<link\\b[^>]*>/gi;\n const addNonceToStylesheetLink = (input: string) =>\n input.replace(linkOpenTag, (match) => {\n if (/[\\s\"']nonce\\s*=/.test(match)) return match;\n if (!/\\brel\\s*=\\s*[\"']?stylesheet[\"']?/i.test(match)) return match;\n return match.replace(/>$/, `${withNonceAttr}>`);\n });\n\n return addNonceToStylesheetLink(addNonceToTag('style')(addNonceToTag('script')(html)));\n}\n\nfunction patchDynamicScriptInsertion(): void {\n const patchState = getDynamicScriptNoncePatchState();\n if (patchState.patched) {\n return;\n }\n\n const originalAppendChild = Node.prototype.appendChild;\n const originalInsertBefore = Node.prototype.insertBefore;\n const originalReplaceChild = Node.prototype.replaceChild;\n const originalInsertAdjacentHTML = Element.prototype.insertAdjacentHTML;\n\n Node.prototype.appendChild = function <T extends Node>(node: T): T {\n // Vendor captcha injects an inline snippet with `currentLangCode` that crashes when appended twice.\n if (shouldSkipDuplicateInlineCaptchaScript(node)) {\n return node;\n }\n applyTrackedNonce(node);\n return originalAppendChild.call(this, node) as T;\n };\n\n Node.prototype.insertBefore = function <T extends Node>(node: T, child: Node | null): T {\n if (shouldSkipDuplicateInlineCaptchaScript(node)) {\n return node;\n }\n applyTrackedNonce(node);\n return originalInsertBefore.call(this, node, child) as T;\n };\n\n Node.prototype.replaceChild = function <T extends Node>(node: Node, child: T): T {\n applyTrackedNonce(node);\n return originalReplaceChild.call(this, node, child) as T;\n };\n\n Element.prototype.insertAdjacentHTML = function (position: InsertPosition, text: string): void {\n const documentRef = this.ownerDocument;\n const nonce = documentRef ? patchState.nonceByDocument.get(documentRef) : undefined;\n const patchedText = nonce ? injectNonceIntoHtml(text, nonce) : text;\n return originalInsertAdjacentHTML.call(this, position, patchedText);\n };\n\n patchState.patched = true;\n}\n\nexport function resolveCspNonce(documentRef: Document | null | undefined, explicitNonce?: string): string | undefined {\n const resolvedExplicitNonce = normalizeNonce(explicitNonce);\n if (resolvedExplicitNonce) {\n return resolvedExplicitNonce;\n }\n\n if (!documentRef) {\n return undefined;\n }\n\n const scriptWithNonce = documentRef.querySelector<HTMLScriptElement>('script[nonce]');\n const nonceFromScript = normalizeNonce(scriptWithNonce?.getAttribute('nonce') ?? scriptWithNonce?.nonce);\n if (nonceFromScript) {\n return nonceFromScript;\n }\n\n const nonceMeta = documentRef.querySelector<HTMLMetaElement>('meta[name=\"csp-nonce\"]');\n return normalizeNonce(nonceMeta?.content);\n}\n\nexport function prepareScriptNonce(documentRef: Document | null | undefined, explicitNonce?: string): string | undefined {\n const resolvedNonce = resolveCspNonce(documentRef, explicitNonce);\n const patchState = getDynamicScriptNoncePatchState();\n\n if (resolvedNonce) {\n // DOM patching is only needed when a CSP nonce must be propagated.\n patchDynamicScriptInsertion();\n const effectiveDocumentRef = documentRef ?? globalThis.document;\n if (effectiveDocumentRef) {\n patchState.nonceByDocument.set(effectiveDocumentRef, resolvedNonce);\n ensureNonceMutationObserver(effectiveDocumentRef);\n }\n } else {\n if (documentRef) {\n patchState.nonceByDocument.delete(documentRef);\n teardownNonceMutationObserver(documentRef);\n }\n }\n\n return resolvedNonce;\n}\n\nexport function loadScript(documentRef: Document, src: string, options?: ScriptLoadOptions): Promise<void> {\n const nonce = normalizeNonce(options?.nonce);\n const statusBySrc = getStatusBySrc(documentRef);\n const pendingBySrc = getPendingBySrc(documentRef);\n const existing = documentRef.querySelector<HTMLScriptElement>(`script[src=\"${src}\"]`);\n\n if (existing) {\n applyScriptNonce(existing, nonce);\n const status = statusBySrc.get(src);\n if (status === 'loaded') {\n return Promise.resolve();\n }\n\n const pending = pendingBySrc.get(src);\n if (pending) {\n return pending;\n }\n\n return Promise.resolve();\n }\n\n statusBySrc.set(src, 'loading');\n\n const pending = new Promise<void>((resolve, reject) => {\n const script = documentRef.createElement('script');\n script.src = src;\n script.async = true;\n applyScriptNonce(script, nonce);\n script.onload = () => {\n statusBySrc.set(src, 'loaded');\n pendingBySrc.delete(src);\n resolve();\n };\n script.onerror = () => {\n statusBySrc.set(src, 'error');\n pendingBySrc.delete(src);\n reject(new Error(`Failed to load script: ${src}. Check CSP allowlist and nonce configuration.`));\n };\n documentRef.head.appendChild(script);\n });\n\n pendingBySrc.set(src, pending);\n return pending;\n}\n","import { getSiaraShieldGlobals } from './siara-shield.globals';\r\n\r\nconst VENDOR_RUNTIME_PATCH_KEY = '__siaraShieldVendorRuntimePatchInstalled__';\r\nconst VENDOR_TOKEN_BRIDGE_KEY = '__siaraShieldVendorTokenBridgeInstalled__';\r\nconst WRAPPED_FN_PREFIX = '__siaraShieldWrappedVendorFn__';\r\n\r\ntype VendorFnName = 'Open_Pluin' | 'Open_Plugin' | 'Open_Plugin_';\r\ntype OptionalVendorFnName = VendorFnName | 'OpenCaptchaSlid' | 'GetCyberSiara';\r\ntype VendorFn = (...args: unknown[]) => unknown;\r\n\r\nfunction isKnownVendorNullDomError(error: unknown): boolean {\r\n const msg = error instanceof Error ? error.message.toLowerCase() : String(error ?? '').toLowerCase();\r\n return (\r\n msg.includes(\"cannot read properties of null (reading 'style')\") ||\r\n msg.includes(\"cannot read properties of null (reading 'queryselector')\") ||\r\n msg.includes(\"cannot read properties of null (reading 'removechild')\")\r\n );\r\n}\r\n\r\nfunction runFallbackChallengeOpen(excluding: OptionalVendorFnName): void {\r\n const globals = getSiaraShieldGlobals() as typeof globalThis & Record<string, unknown>;\r\n const candidates: OptionalVendorFnName[] = ['OpenCaptchaSlid', 'GetCyberSiara', 'Open_Pluin', 'Open_Plugin', 'Open_Plugin_'];\r\n\r\n for (const name of candidates) {\r\n if (name === excluding) continue;\r\n const fn = globals[name];\r\n if (typeof fn !== 'function') continue;\r\n try {\r\n (fn as VendorFn)();\r\n return;\r\n } catch {\r\n // Try next candidate.\r\n }\r\n }\r\n}\r\n\r\nfunction wrapVendorOpenFunction(name: VendorFnName): void {\r\n const globals = getSiaraShieldGlobals() as typeof globalThis & Record<string, unknown>;\r\n const marker = `${WRAPPED_FN_PREFIX}${name}`;\r\n if (globals[marker] === true) return;\r\n\r\n const candidate = globals[name];\r\n if (typeof candidate !== 'function') return;\r\n\r\n const original = candidate as VendorFn;\r\n globals[name] = ((...args: unknown[]) => {\r\n try {\r\n return original(...args);\r\n } catch (error) {\r\n if (!isKnownVendorNullDomError(error)) {\r\n throw error;\r\n }\r\n\r\n // Vendor challenge opener hit a missing DOM node.\r\n // Try alternative open functions so challenge can still render.\r\n runFallbackChallengeOpen(name);\r\n return undefined;\r\n }\r\n }) as unknown;\r\n globals[marker] = true;\r\n}\r\n\r\nfunction installVerifiedSubmitTokenBridge(): void {\r\n const globals = getSiaraShieldGlobals() as typeof globalThis & {\r\n [VENDOR_TOKEN_BRIDGE_KEY]?: boolean;\r\n JQuryName?: { ajax?: (...args: unknown[]) => unknown };\r\n $?: { ajax?: (...args: unknown[]) => unknown };\r\n CyberSiaraToken?: string;\r\n };\r\n if (globals[VENDOR_TOKEN_BRIDGE_KEY]) return;\r\n\r\n const patchAjaxOwner = (owner: { ajax?: (...args: unknown[]) => unknown } | undefined): void => {\r\n if (!owner || typeof owner.ajax !== 'function') return;\r\n const originalAjax = owner.ajax.bind(owner);\r\n\r\n owner.ajax = ((...args: unknown[]) => {\r\n const firstArg = args[0];\r\n if (!firstArg || typeof firstArg !== 'object') {\r\n return originalAjax(...args);\r\n }\r\n\r\n const options = firstArg as Record<string, unknown>;\r\n const url = String(options['url'] ?? '').toLowerCase();\r\n const originalSuccess = options['success'];\r\n if (!url.includes('/submitcaptcha/verifiedsubmit') || typeof originalSuccess !== 'function') {\r\n return originalAjax(options);\r\n }\r\n\r\n options['success'] = ((response: unknown, ...rest: unknown[]) => {\r\n const payload = response as { data?: unknown; Data?: unknown } | null;\r\n const maybeTokenRaw = payload?.data ?? payload?.Data;\r\n if (typeof maybeTokenRaw === 'string' && maybeTokenRaw.trim()) {\r\n globals.CyberSiaraToken = maybeTokenRaw.trim();\r\n }\r\n\r\n return (originalSuccess as (...fnArgs: unknown[]) => unknown)(response, ...rest);\r\n }) as unknown;\r\n\r\n return originalAjax(options);\r\n }) as typeof owner.ajax;\r\n };\r\n\r\n patchAjaxOwner(globals.$);\r\n patchAjaxOwner(globals.JQuryName);\r\n globals[VENDOR_TOKEN_BRIDGE_KEY] = true;\r\n}\r\n\r\nexport function installVendorChallengeRuntimePatch(): void {\r\n const globals = getSiaraShieldGlobals() as typeof globalThis & {\r\n [VENDOR_RUNTIME_PATCH_KEY]?: boolean;\r\n };\r\n if (globals[VENDOR_RUNTIME_PATCH_KEY]) return;\r\n\r\n wrapVendorOpenFunction('Open_Pluin');\r\n wrapVendorOpenFunction('Open_Plugin');\r\n wrapVendorOpenFunction('Open_Plugin_');\r\n installVerifiedSubmitTokenBridge();\r\n globals[VENDOR_RUNTIME_PATCH_KEY] = true;\r\n}\r\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\n\nimport { loadScript, type ScriptLoadOptions } from './siara-shield-script-utils';\n\n@Injectable({ providedIn: 'root' })\nexport class SiaraShieldLoaderService {\n constructor(@Inject(DOCUMENT) private readonly document: Document) {}\n\n loadScript(src: string, options?: ScriptLoadOptions): Promise<void> {\n return loadScript(this.document, src, options);\n }\n}\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { SiaraShieldLoaderService } from './siara-shield-loader.service';\nimport { getInitCaptchaFn, getSiaraShieldGlobals } from './siara-shield.globals';\nimport { installVendorRuntimeErrorSuppression, suppressVendorConsoleWindow } from './siara-shield-log-utils';\nimport { installCaptchaSubmitGuard } from './siara-shield-submit-guard';\nimport { prepareScriptNonce } from './siara-shield-script-utils';\nimport { installVendorChallengeRuntimePatch } from './siara-shield-vendor-runtime';\n\nconst JQUERY_FALLBACK_SRC = 'https://embedcdn.mycybersiara.com/capcha-temple/js/jquery.min.js';\nconst CAPTCHA_SCRIPT_SRC = 'https://embedcdn.mycybersiara.com/CaptchaFormate/CaptchaResources.js';\nconst VALIDATION_SCRIPT_SRC = 'https://embed.mycybersiara.com/CaptchaFormate/SiaraShield_Validation.js';\nconst CAPTCHA_READY_TIMEOUT_MS = 8000;\nconst CAPTCHA_CONTAINER_READY_TIMEOUT_MS = 2000;\nconst CAPTCHA_CONTAINER_POLL_MS = 50;\n\nasync function waitForCaptchaContainer(documentRef: Document, timeoutMs = CAPTCHA_CONTAINER_READY_TIMEOUT_MS): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n if (documentRef.querySelector('.SiaraShield')) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, CAPTCHA_CONTAINER_POLL_MS));\n }\n}\n\nfunction ensureAccessibilityPopupAliases(): void {\n const g = globalThis as typeof globalThis & Record<string, unknown>;\n const aliasNames = [\n 'RemoveAccesibilityPopup',\n '_RemoveAccesibilityPopup',\n 'RemoveAccesiblityPopup',\n '_RemoveAccesiblityPopup',\n ] as const;\n\n const existing = aliasNames\n .map((name) => g[name])\n .find((value): value is () => void => typeof value === 'function');\n\n const stableFn = existing ?? (() => undefined);\n for (const name of aliasNames) {\n g[name] = stableFn;\n }\n}\n\nfunction runInRootZone<T>(fn: () => T): T {\n const g = globalThis as typeof globalThis & { Zone?: { root?: { run?: <U>(cb: () => U) => U } } };\n const zoneRootRun = g.Zone?.root?.run;\n if (typeof zoneRootRun === 'function') {\n return zoneRootRun.call(g.Zone?.root, fn) as T;\n }\n return fn();\n}\n\nexport interface SiaraShieldInitOptions {\n /** SiaraShield public key. Use \"TEST-CYBERSIARA\" for staging/development. */\n publicKey: string;\n /** Loads jQuery before SiaraShield script. Default is true for easier integration. Set to false only if your page already includes jQuery. */\n loadJQuery?: boolean;\n /**\n * CSP nonce value (without the `'nonce-'` prefix).\n * If omitted, we attempt to resolve it from existing `script[nonce]` or `meta[name=\"csp-nonce\"]`.\n */\n cspNonce?: string;\n /** Set true only when actively debugging vendor/runtime internals in browser console. */\n allowVendorConsoleLogs?: boolean;\n}\n\n@Component({\n selector: 'siara-shield',\n standalone: true,\n template: `<div class=\"SiaraShield\"></div>`,\n encapsulation: ViewEncapsulation.None,\n})\nexport class SiaraShieldComponent implements AfterViewInit {\n @Input({ required: true }) publicKey!: string;\n @Input() loadJQuery = true;\n @Input() cspNonce?: string;\n @Input() allowVendorConsoleLogs = false;\n\n /**\n * Emits the current `CyberSiaraToken` right after a successful `checkCaptcha()`.\n */\n @Output() token = new EventEmitter<string>();\n\n private initialized = false;\n\n constructor(\n private readonly host: ElementRef<HTMLElement>,\n private readonly loader: SiaraShieldLoaderService,\n ) {}\n\n async ngAfterViewInit(): Promise<void> {\n await this.init({\n publicKey: this.publicKey,\n loadJQuery: this.loadJQuery,\n cspNonce: this.cspNonce,\n allowVendorConsoleLogs: this.allowVendorConsoleLogs,\n });\n }\n\n async init(options: SiaraShieldInitOptions): Promise<void> {\n if (this.initialized) return;\n\n // Ensure the host element is in DOM before scripts run.\n void this.host.nativeElement;\n installCaptchaSubmitGuard();\n\n if (!options.publicKey) {\n throw new Error('SiaraShieldComponent: publicKey is required.');\n }\n\n // Prepare CSP nonce propagation so any vendor-injected child scripts get the same nonce.\n const documentRef = this.host.nativeElement.ownerDocument ?? globalThis.document ?? null;\n const nonce = prepareScriptNonce(documentRef, options.cspNonce);\n if (documentRef) {\n // Vendor scripts often query `.SiaraShield` immediately; ensure it's present in DOM.\n await waitForCaptchaContainer(documentRef);\n }\n if ((options.loadJQuery ?? true) && !this.isJQueryAlreadyAvailable()) {\n await this.loader.loadScript(JQUERY_FALLBACK_SRC, { nonce });\n }\n\n await this.loader.loadScript(CAPTCHA_SCRIPT_SRC, { nonce });\n await this.loader.loadScript(VALIDATION_SCRIPT_SRC, { nonce });\n\n const g = getSiaraShieldGlobals();\n ensureAccessibilityPopupAliases();\n this.preventDuplicateValidationBootstrap(g);\n installVendorChallengeRuntimePatch();\n const initCaptchaFn = getInitCaptchaFn(g);\n if (!initCaptchaFn) {\n throw new Error(\n 'SiaraShield: InitCaptcha() is not available after loading scripts.',\n );\n }\n\n if (!options.allowVendorConsoleLogs) {\n suppressVendorConsoleWindow();\n installVendorRuntimeErrorSuppression();\n }\n runInRootZone(() => initCaptchaFn(options.publicKey));\n await this.waitForCheckCaptchaApi();\n this.initialized = true;\n }\n\n /**\n * Detect preloaded jQuery from global object or an existing script tag.\n */\n private isJQueryAlreadyAvailable(): boolean {\n const g = getSiaraShieldGlobals();\n if (typeof g.jQuery === 'function' || typeof g.$ === 'function') {\n return true;\n }\n\n const existingJqueryScript = this.host.nativeElement.ownerDocument.querySelector<HTMLScriptElement>(\n 'script[src*=\"jquery\"]',\n );\n return Boolean(existingJqueryScript);\n }\n\n private preventDuplicateValidationBootstrap(g: ReturnType<typeof getSiaraShieldGlobals>): void {\n const originalAppendValidation = g.AppendValidationJS;\n if (typeof originalAppendValidation !== 'function') {\n return;\n }\n\n g.AppendValidationJS = () => {\n const existing = this.host.nativeElement.ownerDocument.querySelector<HTMLScriptElement>(\n `script[src=\"${VALIDATION_SCRIPT_SRC}\"]`,\n );\n if (existing) {\n return;\n }\n\n originalAppendValidation();\n };\n }\n\n private async waitForCheckCaptchaApi(timeoutMs = CAPTCHA_READY_TIMEOUT_MS): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n if (getSiaraShieldGlobals().CheckCaptcha) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n throw new Error('SiaraShield: CheckCaptcha() was not available within timeout.');\n }\n\n /**\n * Calls the global `CheckCaptcha()` from SiaraShield script.\n * Returns true when captcha is valid; emits token if available.\n */\n checkCaptcha(): boolean {\n const g = getSiaraShieldGlobals();\n if (!g.CheckCaptcha) {\n throw new Error('SiaraShield: CheckCaptcha() is not available. Did init() run?');\n }\n\n const existingToken = typeof g.CyberSiaraToken === 'string' && g.CyberSiaraToken.length > 0 ? g.CyberSiaraToken : undefined;\n if (existingToken) {\n this.token.emit(existingToken);\n return true;\n }\n\n if (!this.allowVendorConsoleLogs) {\n suppressVendorConsoleWindow();\n }\n const ok = g.CheckCaptcha();\n if (ok && typeof g.CyberSiaraToken === 'string') {\n this.token.emit(g.CyberSiaraToken);\n }\n return ok;\n }\n\n /**\n * Async-friendly captcha validation to avoid first-click timing issues.\n * Performs one validation call and waits for token propagation.\n */\n async checkCaptchaAsync(options?: {\n timeoutMs?: number;\n pollIntervalMs?: number;\n beforeCheckDelayMs?: number;\n retryOnFalseMs?: number;\n falseResultTokenWaitMs?: number;\n }): Promise<boolean> {\n const timeoutMs = options?.timeoutMs ?? 2000;\n const pollIntervalMs = options?.pollIntervalMs ?? 120;\n const beforeCheckDelayMs = options?.beforeCheckDelayMs ?? 140;\n const retryOnFalseMs = options?.retryOnFalseMs ?? 0;\n const falseResultTokenWaitMs = options?.falseResultTokenWaitMs ?? 900;\n const existingToken = getSiaraShieldGlobals().CyberSiaraToken;\n if (typeof existingToken === 'string' && existingToken.length > 0) {\n this.token.emit(existingToken);\n return true;\n }\n await new Promise((resolve) => setTimeout(resolve, beforeCheckDelayMs));\n let ok = this.checkCaptcha();\n // Optional retry for integrations that observe late vendor-state settling.\n if (!ok && retryOnFalseMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, retryOnFalseMs));\n ok = this.checkCaptcha();\n }\n if (!ok) {\n // Some vendor flows return false first, then set token shortly after.\n const falseStartedAt = Date.now();\n while (Date.now() - falseStartedAt < falseResultTokenWaitMs) {\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n const token = getSiaraShieldGlobals().CyberSiaraToken;\n if (typeof token === 'string' && token.length > 0) {\n this.token.emit(token);\n return true;\n }\n }\n return false;\n }\n\n const g = getSiaraShieldGlobals();\n if (typeof g.CyberSiaraToken === 'string' && g.CyberSiaraToken.length > 0) {\n return true;\n }\n\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n const token = getSiaraShieldGlobals().CyberSiaraToken;\n if (typeof token === 'string' && token.length > 0) {\n this.token.emit(token);\n return true;\n }\n }\n\n return true;\n }\n}\n\n","import { getInitCaptchaFn, getSiaraShieldGlobals } from './siara-shield.globals';\nimport { installVendorRuntimeErrorSuppression, suppressVendorConsoleWindow } from './siara-shield-log-utils';\nimport { loadScript, prepareScriptNonce } from './siara-shield-script-utils';\nimport { installCaptchaSubmitGuard } from './siara-shield-submit-guard';\nimport { installVendorChallengeRuntimePatch } from './siara-shield-vendor-runtime';\n\nconst JQUERY_FALLBACK_SRC = 'https://embedcdn.mycybersiara.com/capcha-temple/js/jquery.min.js';\nconst CAPTCHA_SCRIPT_SRC = 'https://embedcdn.mycybersiara.com/CaptchaFormate/CaptchaResources.js';\nconst VALIDATION_SCRIPT_SRC = 'https://embed.mycybersiara.com/CaptchaFormate/SiaraShield_Validation.js';\nconst CAPTCHA_READY_TIMEOUT_MS = 8000;\nconst CAPTCHA_CONTAINER_READY_TIMEOUT_MS = 2000;\nconst CAPTCHA_CONTAINER_POLL_MS = 50;\n\nasync function waitForCaptchaContainer(timeoutMs = CAPTCHA_CONTAINER_READY_TIMEOUT_MS): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n if (document.querySelector('.SiaraShield')) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, CAPTCHA_CONTAINER_POLL_MS));\n }\n}\n\nexport interface InitSiaraShieldOptions {\n /** SiaraShield public key. Use \"TEST-CYBERSIARA\" for staging/development. */\n publicKey: string;\n /**\n * Loads jQuery before SiaraShield script.\n * Default is true for easier integration.\n * Set to false only if your site/app already loads jQuery.\n */\n loadJQuery?: boolean;\n /**\n * CSP nonce value (without the `'nonce-'` prefix).\n * If omitted, we attempt to resolve it from existing `script[nonce]` or `meta[name=\"csp-nonce\"]`.\n */\n cspNonce?: string;\n /** Set true only when actively debugging vendor/runtime internals in browser console. */\n allowVendorConsoleLogs?: boolean;\n}\n\nlet pending: Promise<void> | null = null;\nlet initialized = false;\n\nfunction ensureAccessibilityPopupAliases(): void {\n const g = globalThis as typeof globalThis & Record<string, unknown>;\n const aliasNames = [\n 'RemoveAccesibilityPopup',\n '_RemoveAccesibilityPopup',\n 'RemoveAccesiblityPopup',\n '_RemoveAccesiblityPopup',\n ] as const;\n\n const existing = aliasNames\n .map((name) => g[name])\n .find((value): value is () => void => typeof value === 'function');\n\n const stableFn = existing ?? (() => undefined);\n for (const name of aliasNames) {\n g[name] = stableFn;\n }\n}\n\nfunction isJQueryAlreadyAvailable(): boolean {\n const g = getSiaraShieldGlobals();\n if (typeof g.jQuery === 'function' || typeof g.$ === 'function') {\n return true;\n }\n\n const existingJqueryScript = document.querySelector<HTMLScriptElement>('script[src*=\"jquery\"]');\n return Boolean(existingJqueryScript);\n}\n\nfunction runInRootZone<T>(fn: () => T): T {\n const g = globalThis as typeof globalThis & { Zone?: { root?: { run?: <U>(cb: () => U) => U } } };\n const zoneRootRun = g.Zone?.root?.run;\n if (typeof zoneRootRun === 'function') {\n return zoneRootRun.call(g.Zone?.root, fn) as T;\n }\n return fn();\n}\n\nfunction preventDuplicateValidationBootstrap(g: ReturnType<typeof getSiaraShieldGlobals>): void {\n const originalAppendValidation = g.AppendValidationJS;\n if (typeof originalAppendValidation !== 'function') {\n return;\n }\n\n g.AppendValidationJS = () => {\n const existing = document.querySelector<HTMLScriptElement>(`script[src=\"${VALIDATION_SCRIPT_SRC}\"]`);\n if (existing) {\n return;\n }\n\n originalAppendValidation();\n };\n}\n\nasync function waitForCheckCaptchaApi(timeoutMs = CAPTCHA_READY_TIMEOUT_MS): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n if (getSiaraShieldGlobals().CheckCaptcha) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n throw new Error('SiaraShield: CheckCaptcha() was not available within timeout.');\n}\n\n/**\n * Drop-in initializer for SiaraShield.\n * - Loads required scripts (optionally jQuery)\n * - Calls global `initCaptcha(publicKey)`\n *\n * Requirements in your HTML/template:\n * - You must render: `<div class=\"SiaraShield\"></div>`\n */\nexport async function initSiaraShield(options: InitSiaraShieldOptions): Promise<void> {\n if (initialized) return;\n if (pending) return pending;\n\n if (!options?.publicKey) {\n throw new Error('initSiaraShield: publicKey is required.');\n }\n\n pending = (async () => {\n installCaptchaSubmitGuard();\n const nonce = prepareScriptNonce(document, options.cspNonce);\n await waitForCaptchaContainer();\n if ((options.loadJQuery ?? true) && !isJQueryAlreadyAvailable()) {\n await loadScript(document, JQUERY_FALLBACK_SRC, { nonce });\n }\n\n await loadScript(document, CAPTCHA_SCRIPT_SRC, { nonce });\n await loadScript(document, VALIDATION_SCRIPT_SRC, { nonce });\n\n const g = getSiaraShieldGlobals();\n ensureAccessibilityPopupAliases();\n preventDuplicateValidationBootstrap(g);\n installVendorChallengeRuntimePatch();\n const initCaptchaFn = getInitCaptchaFn(g);\n if (!initCaptchaFn) {\n throw new Error(\n 'SiaraShield: InitCaptcha() is not available after loading scripts.',\n );\n }\n\n if (!options.allowVendorConsoleLogs) {\n suppressVendorConsoleWindow();\n installVendorRuntimeErrorSuppression();\n }\n runInRootZone(() => initCaptchaFn(options.publicKey));\n await waitForCheckCaptchaApi();\n initialized = true;\n })();\n\n try {\n await pending;\n } finally {\n // keep `pending` cached for subsequent callers\n }\n}\n\n/**\n * Calls global `CheckCaptcha()` and returns its boolean result.\n * If successful, returns `{ ok: true, token?: string }`.\n */\nexport function checkSiaraShieldCaptcha(options?: { allowVendorConsoleLogs?: boolean }): { ok: boolean; token?: string } {\n const g = getSiaraShieldGlobals();\n if (!g.CheckCaptcha) {\n throw new Error('SiaraShield: CheckCaptcha() is not available. Did initSiaraShield() run?');\n }\n\n const existingToken = typeof g.CyberSiaraToken === 'string' && g.CyberSiaraToken.length > 0 ? g.CyberSiaraToken : undefined;\n if (existingToken) {\n return { ok: true, token: existingToken };\n }\n\n if (!options?.allowVendorConsoleLogs) {\n suppressVendorConsoleWindow();\n }\n const ok = g.CheckCaptcha();\n const token = typeof g.CyberSiaraToken === 'string' ? g.CyberSiaraToken : undefined;\n return ok ? { ok: true, token } : { ok: false };\n}\n\n/**\n * Async-friendly captcha check to handle delayed token population.\n */\nexport async function checkSiaraShieldCaptchaAsync(options?: {\n timeoutMs?: number;\n pollIntervalMs?: number;\n beforeCheckDelayMs?: number;\n retryOnFalseMs?: number;\n falseResultTokenWaitMs?: number;\n}): Promise<{ ok: boolean; token?: string }> {\n const timeoutMs = options?.timeoutMs ?? 1200;\n const pollIntervalMs = options?.pollIntervalMs ?? 120;\n const beforeCheckDelayMs = options?.beforeCheckDelayMs ?? 140;\n const retryOnFalseMs = options?.retryOnFalseMs ?? 0;\n const falseResultTokenWaitMs = options?.falseResultTokenWaitMs ?? 900;\n const existingToken = getSiaraShieldGlobals().CyberSiaraToken;\n if (typeof existingToken === 'string' && existingToken.length > 0) {\n return { ok: true, token: existingToken };\n }\n await new Promise((resolve) => setTimeout(resolve, beforeCheckDelayMs));\n let firstCheck = checkSiaraShieldCaptcha(); // one API call only\n if (!firstCheck.ok && retryOnFalseMs > 0) {\n // Optional retry for integrations that observe late vendor-state settling.\n await new Promise((resolve) => setTimeout(resolve, retryOnFalseMs));\n firstCheck = checkSiaraShieldCaptcha();\n }\n if (!firstCheck.ok) {\n // Some vendor flows return false first, then set token shortly after.\n const falseStartedAt = Date.now();\n while (Date.now() - falseStartedAt < falseResultTokenWaitMs) {\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n const token = getSiaraShieldGlobals().CyberSiaraToken;\n if (typeof token === 'string' && token.length > 0) {\n return { ok: true, token };\n }\n }\n return firstCheck;\n }\n if (firstCheck.token) return firstCheck;\n\n const startedAt = Date.now();\n // Token can be assigned slightly after successful verification.\n while (Date.now() - startedAt < timeoutMs) {\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n const token = getSiaraShieldGlobals().CyberSiaraToken;\n if (typeof token === 'string' && token.length > 0) {\n return { ok: true, token };\n }\n }\n\n return { ok: true };\n}\n\n","export interface SiaraShieldCspOptions {\n /** Server-generated nonce value without the `'nonce-'` prefix. */\n nonce?: string;\n /** Optional if the customer still loads jQuery from Google's CDN. */\n includeGoogleApis?: boolean;\n /** Include `script-src 'unsafe-inline'` (not recommended for production). */\n includeUnsafeInlineScript?: boolean;\n /** Include `style-src 'unsafe-inline'` (not recommended for production). */\n includeUnsafeInlineStyle?: boolean;\n}\n\nexport type SiaraShieldCspDirectives = Record<string, string[]>;\n\nconst SELF = \"'self'\";\nconst DATA = 'data:';\nconst UNSAFE_INLINE = \"'unsafe-inline'\";\n\nconst SCRIPT_HOSTS = ['https://embedcdn.mycybersiara.com', 'https://embed.mycybersiara.com'] as const;\nconst OPTIONAL_SCRIPT_HOSTS = ['https://ajax.googleapis.com'] as const;\nconst CONNECT_HOSTS = ['https://embed.mycybersiara.com', 'https://embedcdn.mycybersiara.com'] as const;\nconst STYLE_HOSTS = [\n 'https://embed.mycybersiara.com',\n 'https://mycybersiara.com',\n 'https://fonts.googleapis.com',\n 'https://cdnjs.cloudflare.com',\n] as const;\nconst FONT_HOSTS = [\n 'https://fonts.gstatic.com',\n 'https://mycybersiara.com',\n 'https://cdnjs.cloudflare.com',\n] as const;\nconst IMG_HOSTS = [\n 'https://embed.mycybersiara.com',\n 'https://embedcdn.mycybersiara.com',\n 'https://mycybersiara.com',\n] as const;\n\nfunction unique(values: Array<string | undefined>): string[] {\n return [...new Set(values.filter((value): value is string => Boolean(value && value.trim())))];\n}\n\nfunction nonceSource(nonce?: string): string | undefined {\n return nonce ? `'nonce-${nonce}'` : undefined;\n}\n\nfunction serializeDirective(name: string, values: string[]): string {\n return values.length > 0 ? `${name} ${values.join(' ')}` : name;\n}\n\nfunction parsePolicy(policy: string): Map<string, string[]> {\n const directives = new Map<string, string[]>();\n\n for (const rawDirective of policy.split(';')) {\n const directive = rawDirective.trim();\n if (!directive) {\n continue;\n }\n\n const parts = directive.split(/\\s+/).filter(Boolean);\n const [name, ...values] = parts;\n if (!name) {\n continue;\n }\n\n directives.set(name, values);\n }\n\n return directives;\n}\n\nexport function getSiaraShieldCspDirectives(options?: SiaraShieldCspOptions): SiaraShieldCspDirectives {\n const includeGoogleApis = options?.includeGoogleApis ?? false;\n // Default to strict/safe CSP. Customers can explicitly opt-in if they accept the risk.\n const includeUnsafeInlineScript = options?.includeUnsafeInlineScript ?? false;\n const includeUnsafeInlineStyle = options?.includeUnsafeInlineStyle ?? false;\n const nonce = nonceSource(options?.nonce);\n const scriptHosts = includeGoogleApis ? [...SCRIPT_HOSTS, ...OPTIONAL_SCRIPT_HOSTS] : [...SCRIPT_HOSTS];\n const styleSources = unique([SELF, nonce, ...STYLE_HOSTS]);\n\n return {\n 'default-src': unique([SELF]),\n /**\n * CSP note:\n * - Vendor HTML includes inline event handlers (onclick, etc). CSP nonces do NOT cover those.\n * - We keep `script-src-elem` strict (nonce + host allowlist), and scope inline allowances to attributes only.\n */\n 'script-src': unique([SELF, nonce, ...scriptHosts, includeUnsafeInlineScript ? UNSAFE_INLINE : undefined]),\n 'script-src-elem': unique([SELF, nonce, ...scriptHosts]),\n 'script-src-attr': unique([SELF, \"'unsafe-inline'\"]),\n 'connect-src': unique([SELF, ...CONNECT_HOSTS]),\n 'img-src': unique([SELF, DATA, ...IMG_HOSTS]),\n /**\n * CSP note:\n * - A nonce allows `<style nonce=\"...\">...</style>` but does NOT allow `style=\"\"` attributes / `element.style=...`.\n * - Vendor/jQuery uses style attributes in some flows, so we scope `'unsafe-inline'` to *attributes only*.\n * - This keeps scripts strict while restoring compatibility without requiring `style-src 'unsafe-inline'`.\n */\n 'style-src': unique([...styleSources, includeUnsafeInlineStyle ? UNSAFE_INLINE : undefined]),\n 'style-src-elem': unique(styleSources),\n 'style-src-attr': unique([SELF, includeUnsafeInlineStyle ? UNSAFE_INLINE : \"'unsafe-inline'\"]),\n 'font-src': unique([SELF, ...FONT_HOSTS, DATA]),\n };\n}\n\nexport function getSiaraShieldCspPolicy(options?: SiaraShieldCspOptions): string {\n return Object.entries(getSiaraShieldCspDirectives(options))\n .map(([name, values]) => serializeDirective(name, values))\n .join('; ');\n}\n\nexport function mergeSiaraShieldCspPolicy(existingPolicy: string, options?: SiaraShieldCspOptions): string {\n const directives = parsePolicy(existingPolicy);\n const recommended = getSiaraShieldCspDirectives(options);\n\n for (const [name, values] of Object.entries(recommended)) {\n directives.set(name, unique([...(directives.get(name) ?? []), ...values]));\n }\n\n return [...directives.entries()]\n .map(([name, values]) => serializeDirective(name, values))\n .join('; ');\n}\n","/*\n * Public API Surface of siarashield-workspace\n */\n\nexport * from './lib/siarashield-workspace';\nexport * from './lib/siara-shield.component';\nexport * from './lib/siara-shield-loader.service';\nexport * from './lib/siara-shield.globals';\nexport * from './lib/siara-shield';\nexport * from './lib/siara-shield-csp';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["JQUERY_FALLBACK_SRC","CAPTCHA_SCRIPT_SRC","VALIDATION_SCRIPT_SRC","CAPTCHA_READY_TIMEOUT_MS","CAPTCHA_CONTAINER_READY_TIMEOUT_MS","CAPTCHA_CONTAINER_POLL_MS","waitForCaptchaContainer","ensureAccessibilityPopupAliases","runInRootZone","i1.SiaraShieldLoaderService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"siarashield_workspace.mjs","sources":["../../../projects/siarashield-workspace/src/lib/siara-shield.globals.ts","../../../projects/siarashield-workspace/src/lib/siara-shield-log-utils.ts","../../../projects/siarashield-workspace/src/lib/siara-shield-submit-guard.ts","../../../projects/siarashield-workspace/src/lib/siara-shield-script-utils.ts","../../../projects/siarashield-workspace/src/lib/siara-shield-vendor-runtime.ts","../../../projects/siarashield-workspace/src/lib/siara-shield-loader.service.ts","../../../projects/siarashield-workspace/src/lib/siara-shield.component.ts","../../../projects/siarashield-workspace/src/lib/siara-shield.ts","../../../projects/siarashield-workspace/src/lib/siara-shield-csp.ts","../../../projects/siarashield-workspace/src/public-api.ts","../../../projects/siarashield-workspace/src/siarashield_workspace.ts"],"sourcesContent":["export type InitCaptchaFn = (publicKey: string) => void;\nexport type CheckCaptchaFn = () => boolean;\n\nexport interface SiaraShieldGlobals {\n initCaptcha?: InitCaptchaFn;\n InitCaptcha?: InitCaptchaFn;\n CheckCaptcha?: CheckCaptchaFn;\n AppendValidationJS?: () => void;\n CyberSiaraToken?: string;\n jQuery?: unknown;\n $?: unknown;\n}\n\nexport function getSiaraShieldGlobals(): SiaraShieldGlobals {\n return (globalThis as unknown as { [k: string]: unknown }) as SiaraShieldGlobals;\n}\n\nexport function getInitCaptchaFn(g: SiaraShieldGlobals): InitCaptchaFn | undefined {\n return g.initCaptcha ?? g.InitCaptcha;\n}\n","interface ConsolePatchState {\n depth: number;\n originalLog: Console['log'];\n originalInfo: Console['info'];\n originalWarn: Console['warn'];\n originalDebug: Console['debug'];\n originalError: Console['error'];\n}\n\ninterface VendorRuntimeErrorPatchState {\n installed: boolean;\n originalOnError: OnErrorEventHandler | null;\n}\n\nconst CONSOLE_PATCH_STATE_KEY = '__siaraShieldConsolePatchState__';\nconst VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY = '__siaraShieldVendorRuntimeErrorPatchState__';\nconst DEFAULT_SUPPRESS_WINDOW_MS = 8000;\n\nfunction getConsolePatchState(): ConsolePatchState {\n const globalState = globalThis as typeof globalThis & {\n [CONSOLE_PATCH_STATE_KEY]?: ConsolePatchState;\n };\n\n if (!globalState[CONSOLE_PATCH_STATE_KEY]) {\n globalState[CONSOLE_PATCH_STATE_KEY] = {\n depth: 0,\n originalLog: console.log.bind(console),\n originalInfo: console.info.bind(console),\n originalWarn: console.warn.bind(console),\n originalDebug: console.debug.bind(console),\n originalError: console.error.bind(console),\n };\n }\n\n return globalState[CONSOLE_PATCH_STATE_KEY];\n}\n\nfunction muteConsole(): void {\n const patchState = getConsolePatchState();\n patchState.depth += 1;\n if (patchState.depth > 1) return;\n\n console.log = () => undefined;\n console.info = () => undefined;\n console.warn = () => undefined;\n console.debug = () => undefined;\n console.error = (...args: unknown[]) => {\n const normalized = args\n .map((arg) => (typeof arg === 'string' ? arg : arg instanceof Error ? arg.message : ''))\n .join(' ')\n .toLowerCase();\n\n // Known noisy upstream vendor runtime error path from CaptchaResources.js bootstrap.\n if (\n normalized.includes('an errorevent with no error occurred') ||\n normalized.includes('script error') ||\n normalized.includes('captcharesources.js') ||\n normalized.includes('getcybersiara')\n ) {\n return;\n }\n\n patchState.originalError(...args);\n };\n}\n\nfunction unmuteConsole(): void {\n const patchState = getConsolePatchState();\n if (patchState.depth === 0) return;\n patchState.depth -= 1;\n if (patchState.depth > 0) return;\n\n console.log = patchState.originalLog;\n console.info = patchState.originalInfo;\n console.warn = patchState.originalWarn;\n console.debug = patchState.originalDebug;\n console.error = patchState.originalError;\n}\n\nexport function suppressVendorConsoleWindow(windowMs = DEFAULT_SUPPRESS_WINDOW_MS): void {\n muteConsole();\n setTimeout(() => {\n unmuteConsole();\n }, windowMs);\n}\n\nfunction getVendorRuntimeErrorPatchState(): VendorRuntimeErrorPatchState {\n const globalState = globalThis as typeof globalThis & {\n [VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY]?: VendorRuntimeErrorPatchState;\n };\n\n if (!globalState[VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY]) {\n globalState[VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY] = {\n installed: false,\n originalOnError: globalThis.onerror ?? null,\n };\n }\n\n return globalState[VENDOR_RUNTIME_ERROR_PATCH_STATE_KEY];\n}\n\nfunction isLikelyVendorScriptRuntimeError(message: unknown, source: unknown): boolean {\n const normalizedMessage = String(message ?? '').trim().toLowerCase();\n const normalizedSource = String(source ?? '').trim().toLowerCase();\n const fromSiaraHost =\n normalizedSource.includes('embed.mycybersiara.com') || normalizedSource.includes('embedcdn.mycybersiara.com');\n const fromRequestsJs = normalizedSource.includes('requests.js');\n const isKnownVendorDomError =\n normalizedMessage.includes(\"cannot read properties of null (reading 'removechild')\") &&\n (normalizedSource.includes('jquery') || normalizedSource.includes('captcharesources'));\n const isKnownNoErrorErrorEvent =\n normalizedMessage.includes('an errorevent with no error occurred') || normalizedMessage.includes('script error');\n\n if (fromSiaraHost) return true;\n if (fromRequestsJs) return true;\n if (isKnownVendorDomError) return true;\n if (isKnownNoErrorErrorEvent) return true;\n return normalizedMessage === 'script error.' || normalizedMessage === 'script error';\n}\n\n/**\n * Suppresses noisy cross-origin vendor runtime script errors so Angular does not\n * surface them as unhandled `ErrorEvent` crashes in the console.\n */\nexport function installVendorRuntimeErrorSuppression(): void {\n const patchState = getVendorRuntimeErrorPatchState();\n if (patchState.installed) return;\n\n const previousOnError = patchState.originalOnError;\n const previousErrorListener = (globalThis as unknown as { __siaraShieldPrevErrorListener__?: (ev: Event) => void })\n .__siaraShieldPrevErrorListener__;\n\n const captureErrorListener = (event: Event) => {\n // Angular can surface cross-origin script failures as generic ErrorEvent \"Script error.\"\n // even when the underlying vendor request succeeds. This blocks those from bubbling.\n const errorEvent = event as ErrorEvent;\n const message = String(errorEvent?.message ?? '').trim().toLowerCase();\n const filename = String((errorEvent as unknown as { filename?: string })?.filename ?? '').trim().toLowerCase();\n\n const isGenericCrossOriginNoise =\n message === 'script error.' ||\n message === 'script error' ||\n message.includes('an errorevent with no error occurred');\n\n if (!isGenericCrossOriginNoise) return;\n\n // Requests.js and vendor scripts are commonly cross-origin; suppress the generic noise.\n if (\n filename.includes('requests.js') ||\n filename.includes('embed.mycybersiara.com') ||\n filename.includes('embedcdn.mycybersiara.com') ||\n filename.includes('jquery')\n ) {\n event.preventDefault?.();\n (event as unknown as { stopImmediatePropagation?: () => void }).stopImmediatePropagation?.();\n }\n };\n\n globalThis.onerror = (message, source, lineno, colno, error) => {\n if (isLikelyVendorScriptRuntimeError(message, source)) {\n return true;\n }\n\n if (typeof previousOnError === 'function') {\n return previousOnError.call(globalThis, message, source, lineno, colno, error);\n }\n\n return false;\n };\n\n // Capture-phase listener to prevent Angular global error handler from logging generic cross-origin noise.\n if (!previousErrorListener) {\n (globalThis as unknown as { __siaraShieldPrevErrorListener__?: (ev: Event) => void }).__siaraShieldPrevErrorListener__ =\n captureErrorListener;\n globalThis.addEventListener('error', captureErrorListener, true);\n }\n\n patchState.installed = true;\n}\n\n","const SUBMIT_GUARD_STATE_KEY = '__siaraShieldSubmitGuardInstalled__';\nconst SYNTHETIC_CLICK_GUARD_WINDOW_MS = 1200;\n\nexport function installCaptchaSubmitGuard(): void {\n const globalState = globalThis as typeof globalThis & {\n [SUBMIT_GUARD_STATE_KEY]?: boolean;\n };\n\n if (globalState[SUBMIT_GUARD_STATE_KEY]) return;\n\n const lastSyntheticClickByButton = new WeakMap<EventTarget, number>();\n\n document.addEventListener(\n 'click',\n (event) => {\n const target = event.target;\n if (!(target instanceof Element)) return;\n\n const submitButton = target.closest('.CaptchaSubmit');\n if (!submitButton) return;\n\n // Vendor runtime can emit synthetic clicks on .CaptchaSubmit.\n // Allow one synthetic click (needed for vendor auto-submit) but block rapid duplicates.\n if (!event.isTrusted) {\n const now = Date.now();\n const lastSyntheticClickAt = lastSyntheticClickByButton.get(submitButton) ?? 0;\n if (now - lastSyntheticClickAt < SYNTHETIC_CLICK_GUARD_WINDOW_MS) {\n event.preventDefault();\n event.stopImmediatePropagation();\n return;\n }\n lastSyntheticClickByButton.set(submitButton, now);\n }\n },\n true,\n );\n\n globalState[SUBMIT_GUARD_STATE_KEY] = true;\n}\n\n","type ScriptStatus = 'loading' | 'loaded' | 'error';\n\nexport interface ScriptLoadOptions {\n nonce?: string;\n}\n\ninterface DynamicScriptNoncePatchState {\n nonceByDocument: WeakMap<Document, string>;\n observerByDocument: WeakMap<Document, MutationObserver>;\n inlineCaptchaScriptByDocument: WeakMap<Document, Set<string>>;\n patched: boolean;\n}\n\nconst SCRIPT_STATUS_BY_DOCUMENT = new WeakMap<Document, Map<string, ScriptStatus>>();\nconst SCRIPT_PENDING_BY_DOCUMENT = new WeakMap<Document, Map<string, Promise<void>>>();\nconst DYNAMIC_SCRIPT_NONCE_STATE_KEY = '__siaraShieldDynamicScriptNonceState__';\n\nfunction getStatusBySrc(documentRef: Document): Map<string, ScriptStatus> {\n let statusBySrc = SCRIPT_STATUS_BY_DOCUMENT.get(documentRef);\n if (!statusBySrc) {\n statusBySrc = new Map<string, ScriptStatus>();\n SCRIPT_STATUS_BY_DOCUMENT.set(documentRef, statusBySrc);\n }\n\n return statusBySrc;\n}\n\nfunction getPendingBySrc(documentRef: Document): Map<string, Promise<void>> {\n let pendingBySrc = SCRIPT_PENDING_BY_DOCUMENT.get(documentRef);\n if (!pendingBySrc) {\n pendingBySrc = new Map<string, Promise<void>>();\n SCRIPT_PENDING_BY_DOCUMENT.set(documentRef, pendingBySrc);\n }\n\n return pendingBySrc;\n}\n\nfunction getDynamicScriptNoncePatchState(): DynamicScriptNoncePatchState {\n const globalState = globalThis as typeof globalThis & {\n [DYNAMIC_SCRIPT_NONCE_STATE_KEY]?: DynamicScriptNoncePatchState;\n };\n\n if (!globalState[DYNAMIC_SCRIPT_NONCE_STATE_KEY]) {\n globalState[DYNAMIC_SCRIPT_NONCE_STATE_KEY] = {\n nonceByDocument: new WeakMap<Document, string>(),\n observerByDocument: new WeakMap<Document, MutationObserver>(),\n inlineCaptchaScriptByDocument: new WeakMap<Document, Set<string>>(),\n patched: false,\n };\n }\n\n return globalState[DYNAMIC_SCRIPT_NONCE_STATE_KEY];\n}\n\nfunction normalizeNonce(nonce?: string | null): string | undefined {\n const trimmed = nonce?.trim();\n return trimmed ? trimmed : undefined;\n}\n\nfunction isScriptElement(node: Node): node is HTMLScriptElement {\n return node instanceof Element && node.tagName.toLowerCase() === 'script';\n}\n\nfunction isStyleElement(node: Node): node is HTMLStyleElement {\n return node instanceof Element && node.tagName.toLowerCase() === 'style';\n}\n\nfunction isStylesheetLinkElement(node: Node): node is HTMLLinkElement {\n if (!(node instanceof Element) || node.tagName.toLowerCase() !== 'link') {\n return false;\n }\n const rel = (node.getAttribute('rel') ?? '').toLowerCase();\n return rel === 'stylesheet';\n}\n\nexport function applyScriptNonce(script: HTMLScriptElement, nonce?: string): void {\n const resolvedNonce = normalizeNonce(nonce);\n if (!resolvedNonce) {\n return;\n }\n\n script.setAttribute('nonce', resolvedNonce);\n script.nonce = resolvedNonce;\n\n // Some vendor HTML fragments include inline scripts that execute immediately during insertion.\n // In strict CSP mode these run with a nonce, but can still race DOM insertion and crash\n // (e.g. `null.querySelector(...)`). We defensively retry once on failure.\n if (!script.src) {\n const body = script.textContent ?? '';\n if (body && !body.includes('__siaraShieldInlineRetry__')) {\n script.textContent = `(function(){\\n` +\n ` var __siaraShieldInlineRetry__ = true;\\n` +\n ` function __run(){\\n${body}\\n }\\n` +\n ` try { __run(); } catch (e) {\\n` +\n ` try { setTimeout(function(){ try { __run(); } catch (_e) {} }, 0); } catch (_t) {}\\n` +\n ` }\\n` +\n `})();`;\n }\n }\n}\n\nfunction applyStyleNonce(style: HTMLStyleElement, nonce?: string): void {\n const resolvedNonce = normalizeNonce(nonce);\n if (!resolvedNonce) {\n return;\n }\n\n style.setAttribute('nonce', resolvedNonce);\n style.nonce = resolvedNonce;\n}\n\nfunction applyLinkNonce(link: HTMLLinkElement, nonce?: string): void {\n const resolvedNonce = normalizeNonce(nonce);\n if (!resolvedNonce) {\n return;\n }\n\n link.setAttribute('nonce', resolvedNonce);\n // `HTMLLinkElement.nonce` exists in modern browsers.\n (link as HTMLLinkElement & { nonce?: string }).nonce = resolvedNonce;\n}\n\nfunction applyNonceToNode(node: Node, nonce?: string): void {\n if (isScriptElement(node)) {\n applyScriptNonce(node, nonce);\n return;\n }\n if (isStyleElement(node)) {\n applyStyleNonce(node, nonce);\n return;\n }\n if (isStylesheetLinkElement(node)) {\n applyLinkNonce(node, nonce);\n }\n}\n\nfunction applyTrackedNonce(node: Node): void {\n const documentRef = node.ownerDocument;\n if (!documentRef) {\n return;\n }\n\n const nonce = getDynamicScriptNoncePatchState().nonceByDocument.get(documentRef);\n applyNonceToNode(node, nonce);\n}\n\nfunction getTrackedInlineCaptchaScripts(documentRef: Document): Set<string> {\n const patchState = getDynamicScriptNoncePatchState();\n let trackedScripts = patchState.inlineCaptchaScriptByDocument.get(documentRef);\n if (!trackedScripts) {\n trackedScripts = new Set<string>();\n patchState.inlineCaptchaScriptByDocument.set(documentRef, trackedScripts);\n }\n\n return trackedScripts;\n}\n\nfunction shouldSkipDuplicateInlineCaptchaScript(node: Node): boolean {\n if (!isScriptElement(node) || Boolean(node.src)) {\n return false;\n }\n\n const scriptBody = (node.textContent ?? '').trim();\n if (!scriptBody || !scriptBody.includes('currentLangCode')) {\n return false;\n }\n\n const documentRef = node.ownerDocument;\n if (!documentRef) {\n return false;\n }\n\n const trackedScripts = getTrackedInlineCaptchaScripts(documentRef);\n if (trackedScripts.has(scriptBody)) {\n return true;\n }\n\n trackedScripts.add(scriptBody);\n return false;\n}\n\nfunction walkAndApplyNonce(root: Node, nonce?: string): void {\n if (!nonce) return;\n\n // Fast path: root itself is nonceable.\n if (isScriptElement(root) || isStyleElement(root) || isStylesheetLinkElement(root)) {\n applyNonceToNode(root, nonce);\n return;\n }\n\n // Common path for jQuery: append DocumentFragment containing nodes created via HTML parsing.\n if (root instanceof Element || root instanceof DocumentFragment) {\n const nonceable = root.querySelectorAll?.('script,style,link[rel=\"stylesheet\"]') ?? [];\n for (const el of nonceable) {\n applyNonceToNode(el as unknown as Node, nonce);\n }\n }\n}\n\nfunction ensureNonceMutationObserver(documentRef: Document): void {\n const patchState = getDynamicScriptNoncePatchState();\n if (patchState.observerByDocument.get(documentRef)) {\n return;\n }\n\n const observer = new MutationObserver((records) => {\n const nonce = patchState.nonceByDocument.get(documentRef);\n if (!nonce) return;\n\n for (const record of records) {\n for (const node of record.addedNodes) {\n walkAndApplyNonce(node, nonce);\n }\n }\n });\n\n // Observe the full document because scripts can be injected into body/head by vendor/jQuery.\n const root = documentRef.documentElement ?? documentRef;\n observer.observe(root, { childList: true, subtree: true });\n patchState.observerByDocument.set(documentRef, observer);\n}\n\nfunction teardownNonceMutationObserver(documentRef: Document): void {\n const patchState = getDynamicScriptNoncePatchState();\n const observer = patchState.observerByDocument.get(documentRef);\n if (!observer) return;\n observer.disconnect();\n patchState.observerByDocument.delete(documentRef);\n}\n\nfunction injectNonceIntoHtml(html: string, nonce: string): string {\n const resolvedNonce = normalizeNonce(nonce);\n if (!resolvedNonce) return html;\n\n // If tag already includes nonce, leave it.\n const withNonceAttr = ` nonce=\"${resolvedNonce}\"`;\n\n const addNonceToTag = (tag: 'script' | 'style') => {\n const openTag = new RegExp(`<${tag}(\\\\s[^>]*?)?>`, 'gi');\n return (input: string) =>\n input.replace(openTag, (match) => {\n if (/[\\s\"']nonce\\s*=/.test(match)) return match;\n // Insert nonce before closing `>`\n return match.replace(/>$/, `${withNonceAttr}>`);\n });\n };\n\n // For link rel=stylesheet, add nonce when missing.\n const linkOpenTag = /<link\\b[^>]*>/gi;\n const addNonceToStylesheetLink = (input: string) =>\n input.replace(linkOpenTag, (match) => {\n if (/[\\s\"']nonce\\s*=/.test(match)) return match;\n if (!/\\brel\\s*=\\s*[\"']?stylesheet[\"']?/i.test(match)) return match;\n return match.replace(/>$/, `${withNonceAttr}>`);\n });\n\n return addNonceToStylesheetLink(addNonceToTag('style')(addNonceToTag('script')(html)));\n}\n\nfunction patchDynamicScriptInsertion(): void {\n const patchState = getDynamicScriptNoncePatchState();\n if (patchState.patched) {\n return;\n }\n\n const originalAppendChild = Node.prototype.appendChild;\n const originalInsertBefore = Node.prototype.insertBefore;\n const originalReplaceChild = Node.prototype.replaceChild;\n const originalInsertAdjacentHTML = Element.prototype.insertAdjacentHTML;\n\n Node.prototype.appendChild = function <T extends Node>(node: T): T {\n // Vendor captcha injects an inline snippet with `currentLangCode` that crashes when appended twice.\n if (shouldSkipDuplicateInlineCaptchaScript(node)) {\n return node;\n }\n applyTrackedNonce(node);\n return originalAppendChild.call(this, node) as T;\n };\n\n Node.prototype.insertBefore = function <T extends Node>(node: T, child: Node | null): T {\n if (shouldSkipDuplicateInlineCaptchaScript(node)) {\n return node;\n }\n applyTrackedNonce(node);\n return originalInsertBefore.call(this, node, child) as T;\n };\n\n Node.prototype.replaceChild = function <T extends Node>(node: Node, child: T): T {\n applyTrackedNonce(node);\n return originalReplaceChild.call(this, node, child) as T;\n };\n\n Element.prototype.insertAdjacentHTML = function (position: InsertPosition, text: string): void {\n const documentRef = this.ownerDocument;\n const nonce = documentRef ? patchState.nonceByDocument.get(documentRef) : undefined;\n const patchedText = nonce ? injectNonceIntoHtml(text, nonce) : text;\n return originalInsertAdjacentHTML.call(this, position, patchedText);\n };\n\n patchState.patched = true;\n}\n\nexport function resolveCspNonce(documentRef: Document | null | undefined, explicitNonce?: string): string | undefined {\n const resolvedExplicitNonce = normalizeNonce(explicitNonce);\n if (resolvedExplicitNonce) {\n return resolvedExplicitNonce;\n }\n\n if (!documentRef) {\n return undefined;\n }\n\n const scriptWithNonce = documentRef.querySelector<HTMLScriptElement>('script[nonce]');\n const nonceFromScript = normalizeNonce(scriptWithNonce?.getAttribute('nonce') ?? scriptWithNonce?.nonce);\n if (nonceFromScript) {\n return nonceFromScript;\n }\n\n const nonceMeta = documentRef.querySelector<HTMLMetaElement>('meta[name=\"csp-nonce\"]');\n return normalizeNonce(nonceMeta?.content);\n}\n\nexport function prepareScriptNonce(documentRef: Document | null | undefined, explicitNonce?: string): string | undefined {\n const resolvedNonce = resolveCspNonce(documentRef, explicitNonce);\n const patchState = getDynamicScriptNoncePatchState();\n\n if (resolvedNonce) {\n // DOM patching is only needed when a CSP nonce must be propagated.\n patchDynamicScriptInsertion();\n const effectiveDocumentRef = documentRef ?? globalThis.document;\n if (effectiveDocumentRef) {\n patchState.nonceByDocument.set(effectiveDocumentRef, resolvedNonce);\n ensureNonceMutationObserver(effectiveDocumentRef);\n }\n } else {\n if (documentRef) {\n patchState.nonceByDocument.delete(documentRef);\n teardownNonceMutationObserver(documentRef);\n }\n }\n\n return resolvedNonce;\n}\n\nexport function loadScript(documentRef: Document, src: string, options?: ScriptLoadOptions): Promise<void> {\n const nonce = normalizeNonce(options?.nonce);\n const statusBySrc = getStatusBySrc(documentRef);\n const pendingBySrc = getPendingBySrc(documentRef);\n const existing = documentRef.querySelector<HTMLScriptElement>(`script[src=\"${src}\"]`);\n\n if (existing) {\n applyScriptNonce(existing, nonce);\n const status = statusBySrc.get(src);\n if (status === 'loaded') {\n return Promise.resolve();\n }\n\n const pending = pendingBySrc.get(src);\n if (pending) {\n return pending;\n }\n\n return Promise.resolve();\n }\n\n statusBySrc.set(src, 'loading');\n\n const pending = new Promise<void>((resolve, reject) => {\n const script = documentRef.createElement('script');\n script.src = src;\n script.async = true;\n applyScriptNonce(script, nonce);\n script.onload = () => {\n statusBySrc.set(src, 'loaded');\n pendingBySrc.delete(src);\n resolve();\n };\n script.onerror = () => {\n statusBySrc.set(src, 'error');\n pendingBySrc.delete(src);\n reject(new Error(`Failed to load script: ${src}. Check CSP allowlist and nonce configuration.`));\n };\n documentRef.head.appendChild(script);\n });\n\n pendingBySrc.set(src, pending);\n return pending;\n}\n","import { getSiaraShieldGlobals } from './siara-shield.globals';\r\n\r\nconst VENDOR_RUNTIME_PATCH_KEY = '__siaraShieldVendorRuntimePatchInstalled__';\r\nconst VENDOR_TOKEN_BRIDGE_KEY = '__siaraShieldVendorTokenBridgeInstalled__';\r\nconst WRAPPED_FN_PREFIX = '__siaraShieldWrappedVendorFn__';\r\n\r\ntype VendorFnName = 'Open_Pluin' | 'Open_Plugin' | 'Open_Plugin_';\r\ntype OptionalVendorFnName = VendorFnName | 'OpenCaptchaSlid' | 'GetCyberSiara';\r\ntype VendorFn = (...args: unknown[]) => unknown;\r\n\r\nfunction isKnownVendorNullDomError(error: unknown): boolean {\r\n const msg = error instanceof Error ? error.message.toLowerCase() : String(error ?? '').toLowerCase();\r\n return (\r\n msg.includes(\"cannot read properties of null (reading 'style')\") ||\r\n msg.includes(\"cannot read properties of null (reading 'queryselector')\") ||\r\n msg.includes(\"cannot read properties of null (reading 'removechild')\")\r\n );\r\n}\r\n\r\nfunction runFallbackChallengeOpen(excluding: OptionalVendorFnName): void {\r\n const globals = getSiaraShieldGlobals() as typeof globalThis & Record<string, unknown>;\r\n const candidates: OptionalVendorFnName[] = ['OpenCaptchaSlid', 'GetCyberSiara', 'Open_Pluin', 'Open_Plugin', 'Open_Plugin_'];\r\n\r\n for (const name of candidates) {\r\n if (name === excluding) continue;\r\n const fn = globals[name];\r\n if (typeof fn !== 'function') continue;\r\n try {\r\n (fn as VendorFn)();\r\n return;\r\n } catch {\r\n // Try next candidate.\r\n }\r\n }\r\n}\r\n\r\nfunction wrapVendorOpenFunction(name: VendorFnName): void {\r\n const globals = getSiaraShieldGlobals() as typeof globalThis & Record<string, unknown>;\r\n const marker = `${WRAPPED_FN_PREFIX}${name}`;\r\n if (globals[marker] === true) return;\r\n\r\n const candidate = globals[name];\r\n if (typeof candidate !== 'function') return;\r\n\r\n const original = candidate as VendorFn;\r\n globals[name] = ((...args: unknown[]) => {\r\n try {\r\n return original(...args);\r\n } catch (error) {\r\n if (!isKnownVendorNullDomError(error)) {\r\n throw error;\r\n }\r\n\r\n // Vendor challenge opener hit a missing DOM node.\r\n // Try alternative open functions so challenge can still render.\r\n runFallbackChallengeOpen(name);\r\n return undefined;\r\n }\r\n }) as unknown;\r\n globals[marker] = true;\r\n}\r\n\r\nfunction installVerifiedSubmitTokenBridge(): void {\r\n const globals = getSiaraShieldGlobals() as typeof globalThis & {\r\n [VENDOR_TOKEN_BRIDGE_KEY]?: boolean;\r\n JQuryName?: { ajax?: (...args: unknown[]) => unknown };\r\n $?: { ajax?: (...args: unknown[]) => unknown };\r\n CyberSiaraToken?: string;\r\n };\r\n if (globals[VENDOR_TOKEN_BRIDGE_KEY]) return;\r\n\r\n const patchAjaxOwner = (owner: { ajax?: (...args: unknown[]) => unknown } | undefined): void => {\r\n if (!owner || typeof owner.ajax !== 'function') return;\r\n const originalAjax = owner.ajax.bind(owner);\r\n\r\n owner.ajax = ((...args: unknown[]) => {\r\n const firstArg = args[0];\r\n if (!firstArg || typeof firstArg !== 'object') {\r\n return originalAjax(...args);\r\n }\r\n\r\n const options = firstArg as Record<string, unknown>;\r\n const url = String(options['url'] ?? '').toLowerCase();\r\n const originalSuccess = options['success'];\r\n if (!url.includes('/submitcaptcha/verifiedsubmit') || typeof originalSuccess !== 'function') {\r\n return originalAjax(options);\r\n }\r\n\r\n options['success'] = ((response: unknown, ...rest: unknown[]) => {\r\n const payload = response as { data?: unknown; Data?: unknown } | null;\r\n const maybeTokenRaw = payload?.data ?? payload?.Data;\r\n if (typeof maybeTokenRaw === 'string' && maybeTokenRaw.trim()) {\r\n globals.CyberSiaraToken = maybeTokenRaw.trim();\r\n }\r\n\r\n return (originalSuccess as (...fnArgs: unknown[]) => unknown)(response, ...rest);\r\n }) as unknown;\r\n\r\n return originalAjax(options);\r\n }) as typeof owner.ajax;\r\n };\r\n\r\n patchAjaxOwner(globals.$);\r\n patchAjaxOwner(globals.JQuryName);\r\n globals[VENDOR_TOKEN_BRIDGE_KEY] = true;\r\n}\r\n\r\nexport function installVendorChallengeRuntimePatch(): void {\r\n const globals = getSiaraShieldGlobals() as typeof globalThis & {\r\n [VENDOR_RUNTIME_PATCH_KEY]?: boolean;\r\n };\r\n if (globals[VENDOR_RUNTIME_PATCH_KEY]) return;\r\n\r\n wrapVendorOpenFunction('Open_Pluin');\r\n wrapVendorOpenFunction('Open_Plugin');\r\n wrapVendorOpenFunction('Open_Plugin_');\r\n installVerifiedSubmitTokenBridge();\r\n globals[VENDOR_RUNTIME_PATCH_KEY] = true;\r\n}\r\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\n\nimport { loadScript, type ScriptLoadOptions } from './siara-shield-script-utils';\n\n@Injectable({ providedIn: 'root' })\nexport class SiaraShieldLoaderService {\n constructor(@Inject(DOCUMENT) private readonly document: Document) {}\n\n loadScript(src: string, options?: ScriptLoadOptions): Promise<void> {\n return loadScript(this.document, src, options);\n }\n}\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { SiaraShieldLoaderService } from './siara-shield-loader.service';\nimport { getInitCaptchaFn, getSiaraShieldGlobals } from './siara-shield.globals';\nimport { installVendorRuntimeErrorSuppression, suppressVendorConsoleWindow } from './siara-shield-log-utils';\nimport { installCaptchaSubmitGuard } from './siara-shield-submit-guard';\nimport { prepareScriptNonce } from './siara-shield-script-utils';\nimport { installVendorChallengeRuntimePatch } from './siara-shield-vendor-runtime';\n\nconst JQUERY_FALLBACK_SRC = 'https://embedcdn.mycybersiara.com/capcha-temple/js/jquery.min.js';\nconst CAPTCHA_SCRIPT_SRC = 'https://embedcdn.mycybersiara.com/CaptchaFormate/CaptchaResources.js';\nconst VALIDATION_SCRIPT_SRC = 'https://embed.mycybersiara.com/CaptchaFormate/SiaraShield_Validation.js';\nconst CAPTCHA_READY_TIMEOUT_MS = 8000;\nconst CAPTCHA_CONTAINER_READY_TIMEOUT_MS = 2000;\nconst CAPTCHA_CONTAINER_POLL_MS = 50;\n\nasync function waitForCaptchaContainer(documentRef: Document, timeoutMs = CAPTCHA_CONTAINER_READY_TIMEOUT_MS): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n if (documentRef.querySelector('.SiaraShield')) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, CAPTCHA_CONTAINER_POLL_MS));\n }\n}\n\nfunction ensureAccessibilityPopupAliases(): void {\n const g = globalThis as typeof globalThis & Record<string, unknown>;\n const aliasNames = [\n 'RemoveAccesibilityPopup',\n '_RemoveAccesibilityPopup',\n 'RemoveAccesiblityPopup',\n '_RemoveAccesiblityPopup',\n ] as const;\n\n const existing = aliasNames\n .map((name) => g[name])\n .find((value): value is () => void => typeof value === 'function');\n\n const stableFn = existing ?? (() => undefined);\n for (const name of aliasNames) {\n g[name] = stableFn;\n }\n}\n\nfunction runInRootZone<T>(fn: () => T): T {\n const g = globalThis as typeof globalThis & { Zone?: { root?: { run?: <U>(cb: () => U) => U } } };\n const zoneRootRun = g.Zone?.root?.run;\n if (typeof zoneRootRun === 'function') {\n return zoneRootRun.call(g.Zone?.root, fn) as T;\n }\n return fn();\n}\n\nexport interface SiaraShieldInitOptions {\n /** SiaraShield public key. Use \"TEST-CYBERSIARA\" for staging/development. */\n publicKey: string;\n /** Loads jQuery before SiaraShield script. Default is true for easier integration. Set to false only if your page already includes jQuery. */\n loadJQuery?: boolean;\n /**\n * CSP nonce value (without the `'nonce-'` prefix).\n * If omitted, we attempt to resolve it from existing `script[nonce]` or `meta[name=\"csp-nonce\"]`.\n */\n cspNonce?: string;\n /** Set true only when actively debugging vendor/runtime internals in browser console. */\n allowVendorConsoleLogs?: boolean;\n}\n\n@Component({\n selector: 'siara-shield',\n standalone: true,\n template: `<div class=\"SiaraShield\"></div>`,\n encapsulation: ViewEncapsulation.None,\n})\nexport class SiaraShieldComponent implements AfterViewInit {\n @Input({ required: true }) publicKey!: string;\n @Input() loadJQuery = true;\n @Input() cspNonce?: string;\n @Input() allowVendorConsoleLogs = false;\n\n /**\n * Emits the current `CyberSiaraToken` right after a successful `checkCaptcha()`.\n */\n @Output() token = new EventEmitter<string>();\n\n private initialized = false;\n\n constructor(\n private readonly host: ElementRef<HTMLElement>,\n private readonly loader: SiaraShieldLoaderService,\n ) {}\n\n async ngAfterViewInit(): Promise<void> {\n await this.init({\n publicKey: this.publicKey,\n loadJQuery: this.loadJQuery,\n cspNonce: this.cspNonce,\n allowVendorConsoleLogs: this.allowVendorConsoleLogs,\n });\n }\n\n async init(options: SiaraShieldInitOptions): Promise<void> {\n if (this.initialized) return;\n\n // Ensure the host element is in DOM before scripts run.\n void this.host.nativeElement;\n if (!options.allowVendorConsoleLogs) {\n // Install suppression as early as possible so Angular doesn't log cross-origin vendor noise during bootstrap.\n installVendorRuntimeErrorSuppression();\n suppressVendorConsoleWindow();\n }\n installCaptchaSubmitGuard();\n\n if (!options.publicKey) {\n throw new Error('SiaraShieldComponent: publicKey is required.');\n }\n\n // Prepare CSP nonce propagation so any vendor-injected child scripts get the same nonce.\n const documentRef = this.host.nativeElement.ownerDocument ?? globalThis.document ?? null;\n const nonce = prepareScriptNonce(documentRef, options.cspNonce);\n if (documentRef) {\n // Vendor scripts often query `.SiaraShield` immediately; ensure it's present in DOM.\n await waitForCaptchaContainer(documentRef);\n }\n if ((options.loadJQuery ?? true) && !this.isJQueryAlreadyAvailable()) {\n await this.loader.loadScript(JQUERY_FALLBACK_SRC, { nonce });\n }\n\n await this.loader.loadScript(CAPTCHA_SCRIPT_SRC, { nonce });\n await this.loader.loadScript(VALIDATION_SCRIPT_SRC, { nonce });\n\n const g = getSiaraShieldGlobals();\n ensureAccessibilityPopupAliases();\n this.preventDuplicateValidationBootstrap(g);\n installVendorChallengeRuntimePatch();\n const initCaptchaFn = getInitCaptchaFn(g);\n if (!initCaptchaFn) {\n throw new Error(\n 'SiaraShield: InitCaptcha() is not available after loading scripts.',\n );\n }\n\n runInRootZone(() => initCaptchaFn(options.publicKey));\n await this.waitForCheckCaptchaApi();\n this.initialized = true;\n }\n\n /**\n * Detect preloaded jQuery from global object or an existing script tag.\n */\n private isJQueryAlreadyAvailable(): boolean {\n const g = getSiaraShieldGlobals();\n if (typeof g.jQuery === 'function' || typeof g.$ === 'function') {\n return true;\n }\n\n const existingJqueryScript = this.host.nativeElement.ownerDocument.querySelector<HTMLScriptElement>(\n 'script[src*=\"jquery\"]',\n );\n return Boolean(existingJqueryScript);\n }\n\n private preventDuplicateValidationBootstrap(g: ReturnType<typeof getSiaraShieldGlobals>): void {\n const originalAppendValidation = g.AppendValidationJS;\n if (typeof originalAppendValidation !== 'function') {\n return;\n }\n\n g.AppendValidationJS = () => {\n const existing = this.host.nativeElement.ownerDocument.querySelector<HTMLScriptElement>(\n `script[src=\"${VALIDATION_SCRIPT_SRC}\"]`,\n );\n if (existing) {\n return;\n }\n\n originalAppendValidation();\n };\n }\n\n private async waitForCheckCaptchaApi(timeoutMs = CAPTCHA_READY_TIMEOUT_MS): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n if (getSiaraShieldGlobals().CheckCaptcha) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n throw new Error('SiaraShield: CheckCaptcha() was not available within timeout.');\n }\n\n /**\n * Calls the global `CheckCaptcha()` from SiaraShield script.\n * Returns true when captcha is valid; emits token if available.\n */\n checkCaptcha(): boolean {\n const g = getSiaraShieldGlobals();\n if (!g.CheckCaptcha) {\n throw new Error('SiaraShield: CheckCaptcha() is not available. Did init() run?');\n }\n\n const existingToken = typeof g.CyberSiaraToken === 'string' && g.CyberSiaraToken.length > 0 ? g.CyberSiaraToken : undefined;\n if (existingToken) {\n this.token.emit(existingToken);\n return true;\n }\n\n if (!this.allowVendorConsoleLogs) {\n suppressVendorConsoleWindow();\n }\n const ok = g.CheckCaptcha();\n if (ok && typeof g.CyberSiaraToken === 'string') {\n this.token.emit(g.CyberSiaraToken);\n }\n return ok;\n }\n\n /**\n * Async-friendly captcha validation to avoid first-click timing issues.\n * Performs one validation call and waits for token propagation.\n */\n async checkCaptchaAsync(options?: {\n timeoutMs?: number;\n pollIntervalMs?: number;\n beforeCheckDelayMs?: number;\n retryOnFalseMs?: number;\n falseResultTokenWaitMs?: number;\n }): Promise<boolean> {\n const timeoutMs = options?.timeoutMs ?? 2000;\n const pollIntervalMs = options?.pollIntervalMs ?? 120;\n const beforeCheckDelayMs = options?.beforeCheckDelayMs ?? 140;\n const retryOnFalseMs = options?.retryOnFalseMs ?? 0;\n const falseResultTokenWaitMs = options?.falseResultTokenWaitMs ?? 900;\n const existingToken = getSiaraShieldGlobals().CyberSiaraToken;\n if (typeof existingToken === 'string' && existingToken.length > 0) {\n this.token.emit(existingToken);\n return true;\n }\n await new Promise((resolve) => setTimeout(resolve, beforeCheckDelayMs));\n let ok = this.checkCaptcha();\n // Optional retry for integrations that observe late vendor-state settling.\n if (!ok && retryOnFalseMs > 0) {\n await new Promise((resolve) => setTimeout(resolve, retryOnFalseMs));\n ok = this.checkCaptcha();\n }\n if (!ok) {\n // Some vendor flows return false first, then set token shortly after.\n const falseStartedAt = Date.now();\n while (Date.now() - falseStartedAt < falseResultTokenWaitMs) {\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n const token = getSiaraShieldGlobals().CyberSiaraToken;\n if (typeof token === 'string' && token.length > 0) {\n this.token.emit(token);\n return true;\n }\n }\n return false;\n }\n\n const g = getSiaraShieldGlobals();\n if (typeof g.CyberSiaraToken === 'string' && g.CyberSiaraToken.length > 0) {\n return true;\n }\n\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n const token = getSiaraShieldGlobals().CyberSiaraToken;\n if (typeof token === 'string' && token.length > 0) {\n this.token.emit(token);\n return true;\n }\n }\n\n return true;\n }\n}\n\n","import { getInitCaptchaFn, getSiaraShieldGlobals } from './siara-shield.globals';\nimport { installVendorRuntimeErrorSuppression, suppressVendorConsoleWindow } from './siara-shield-log-utils';\nimport { loadScript, prepareScriptNonce } from './siara-shield-script-utils';\nimport { installCaptchaSubmitGuard } from './siara-shield-submit-guard';\nimport { installVendorChallengeRuntimePatch } from './siara-shield-vendor-runtime';\n\nconst JQUERY_FALLBACK_SRC = 'https://embedcdn.mycybersiara.com/capcha-temple/js/jquery.min.js';\nconst CAPTCHA_SCRIPT_SRC = 'https://embedcdn.mycybersiara.com/CaptchaFormate/CaptchaResources.js';\nconst VALIDATION_SCRIPT_SRC = 'https://embed.mycybersiara.com/CaptchaFormate/SiaraShield_Validation.js';\nconst CAPTCHA_READY_TIMEOUT_MS = 8000;\nconst CAPTCHA_CONTAINER_READY_TIMEOUT_MS = 2000;\nconst CAPTCHA_CONTAINER_POLL_MS = 50;\n\nasync function waitForCaptchaContainer(timeoutMs = CAPTCHA_CONTAINER_READY_TIMEOUT_MS): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n if (document.querySelector('.SiaraShield')) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, CAPTCHA_CONTAINER_POLL_MS));\n }\n}\n\nexport interface InitSiaraShieldOptions {\n /** SiaraShield public key. Use \"TEST-CYBERSIARA\" for staging/development. */\n publicKey: string;\n /**\n * Loads jQuery before SiaraShield script.\n * Default is true for easier integration.\n * Set to false only if your site/app already loads jQuery.\n */\n loadJQuery?: boolean;\n /**\n * CSP nonce value (without the `'nonce-'` prefix).\n * If omitted, we attempt to resolve it from existing `script[nonce]` or `meta[name=\"csp-nonce\"]`.\n */\n cspNonce?: string;\n /** Set true only when actively debugging vendor/runtime internals in browser console. */\n allowVendorConsoleLogs?: boolean;\n}\n\nlet pending: Promise<void> | null = null;\nlet initialized = false;\n\nfunction ensureAccessibilityPopupAliases(): void {\n const g = globalThis as typeof globalThis & Record<string, unknown>;\n const aliasNames = [\n 'RemoveAccesibilityPopup',\n '_RemoveAccesibilityPopup',\n 'RemoveAccesiblityPopup',\n '_RemoveAccesiblityPopup',\n ] as const;\n\n const existing = aliasNames\n .map((name) => g[name])\n .find((value): value is () => void => typeof value === 'function');\n\n const stableFn = existing ?? (() => undefined);\n for (const name of aliasNames) {\n g[name] = stableFn;\n }\n}\n\nfunction isJQueryAlreadyAvailable(): boolean {\n const g = getSiaraShieldGlobals();\n if (typeof g.jQuery === 'function' || typeof g.$ === 'function') {\n return true;\n }\n\n const existingJqueryScript = document.querySelector<HTMLScriptElement>('script[src*=\"jquery\"]');\n return Boolean(existingJqueryScript);\n}\n\nfunction runInRootZone<T>(fn: () => T): T {\n const g = globalThis as typeof globalThis & { Zone?: { root?: { run?: <U>(cb: () => U) => U } } };\n const zoneRootRun = g.Zone?.root?.run;\n if (typeof zoneRootRun === 'function') {\n return zoneRootRun.call(g.Zone?.root, fn) as T;\n }\n return fn();\n}\n\nfunction preventDuplicateValidationBootstrap(g: ReturnType<typeof getSiaraShieldGlobals>): void {\n const originalAppendValidation = g.AppendValidationJS;\n if (typeof originalAppendValidation !== 'function') {\n return;\n }\n\n g.AppendValidationJS = () => {\n const existing = document.querySelector<HTMLScriptElement>(`script[src=\"${VALIDATION_SCRIPT_SRC}\"]`);\n if (existing) {\n return;\n }\n\n originalAppendValidation();\n };\n}\n\nasync function waitForCheckCaptchaApi(timeoutMs = CAPTCHA_READY_TIMEOUT_MS): Promise<void> {\n const startedAt = Date.now();\n while (Date.now() - startedAt < timeoutMs) {\n if (getSiaraShieldGlobals().CheckCaptcha) {\n return;\n }\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n throw new Error('SiaraShield: CheckCaptcha() was not available within timeout.');\n}\n\n/**\n * Drop-in initializer for SiaraShield.\n * - Loads required scripts (optionally jQuery)\n * - Calls global `initCaptcha(publicKey)`\n *\n * Requirements in your HTML/template:\n * - You must render: `<div class=\"SiaraShield\"></div>`\n */\nexport async function initSiaraShield(options: InitSiaraShieldOptions): Promise<void> {\n if (initialized) return;\n if (pending) return pending;\n\n if (!options?.publicKey) {\n throw new Error('initSiaraShield: publicKey is required.');\n }\n\n pending = (async () => {\n if (!options.allowVendorConsoleLogs) {\n // Install suppression as early as possible so Angular doesn't log cross-origin vendor noise during bootstrap.\n installVendorRuntimeErrorSuppression();\n suppressVendorConsoleWindow();\n }\n installCaptchaSubmitGuard();\n const nonce = prepareScriptNonce(document, options.cspNonce);\n await waitForCaptchaContainer();\n if ((options.loadJQuery ?? true) && !isJQueryAlreadyAvailable()) {\n await loadScript(document, JQUERY_FALLBACK_SRC, { nonce });\n }\n\n await loadScript(document, CAPTCHA_SCRIPT_SRC, { nonce });\n await loadScript(document, VALIDATION_SCRIPT_SRC, { nonce });\n\n const g = getSiaraShieldGlobals();\n ensureAccessibilityPopupAliases();\n preventDuplicateValidationBootstrap(g);\n installVendorChallengeRuntimePatch();\n const initCaptchaFn = getInitCaptchaFn(g);\n if (!initCaptchaFn) {\n throw new Error(\n 'SiaraShield: InitCaptcha() is not available after loading scripts.',\n );\n }\n\n runInRootZone(() => initCaptchaFn(options.publicKey));\n await waitForCheckCaptchaApi();\n initialized = true;\n })();\n\n try {\n await pending;\n } finally {\n // keep `pending` cached for subsequent callers\n }\n}\n\n/**\n * Calls global `CheckCaptcha()` and returns its boolean result.\n * If successful, returns `{ ok: true, token?: string }`.\n */\nexport function checkSiaraShieldCaptcha(options?: { allowVendorConsoleLogs?: boolean }): { ok: boolean; token?: string } {\n const g = getSiaraShieldGlobals();\n if (!g.CheckCaptcha) {\n throw new Error('SiaraShield: CheckCaptcha() is not available. Did initSiaraShield() run?');\n }\n\n const existingToken = typeof g.CyberSiaraToken === 'string' && g.CyberSiaraToken.length > 0 ? g.CyberSiaraToken : undefined;\n if (existingToken) {\n return { ok: true, token: existingToken };\n }\n\n if (!options?.allowVendorConsoleLogs) {\n suppressVendorConsoleWindow();\n }\n const ok = g.CheckCaptcha();\n const token = typeof g.CyberSiaraToken === 'string' ? g.CyberSiaraToken : undefined;\n return ok ? { ok: true, token } : { ok: false };\n}\n\n/**\n * Async-friendly captcha check to handle delayed token population.\n */\nexport async function checkSiaraShieldCaptchaAsync(options?: {\n timeoutMs?: number;\n pollIntervalMs?: number;\n beforeCheckDelayMs?: number;\n retryOnFalseMs?: number;\n falseResultTokenWaitMs?: number;\n}): Promise<{ ok: boolean; token?: string }> {\n const timeoutMs = options?.timeoutMs ?? 1200;\n const pollIntervalMs = options?.pollIntervalMs ?? 120;\n const beforeCheckDelayMs = options?.beforeCheckDelayMs ?? 140;\n const retryOnFalseMs = options?.retryOnFalseMs ?? 0;\n const falseResultTokenWaitMs = options?.falseResultTokenWaitMs ?? 900;\n const existingToken = getSiaraShieldGlobals().CyberSiaraToken;\n if (typeof existingToken === 'string' && existingToken.length > 0) {\n return { ok: true, token: existingToken };\n }\n await new Promise((resolve) => setTimeout(resolve, beforeCheckDelayMs));\n let firstCheck = checkSiaraShieldCaptcha(); // one API call only\n if (!firstCheck.ok && retryOnFalseMs > 0) {\n // Optional retry for integrations that observe late vendor-state settling.\n await new Promise((resolve) => setTimeout(resolve, retryOnFalseMs));\n firstCheck = checkSiaraShieldCaptcha();\n }\n if (!firstCheck.ok) {\n // Some vendor flows return false first, then set token shortly after.\n const falseStartedAt = Date.now();\n while (Date.now() - falseStartedAt < falseResultTokenWaitMs) {\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n const token = getSiaraShieldGlobals().CyberSiaraToken;\n if (typeof token === 'string' && token.length > 0) {\n return { ok: true, token };\n }\n }\n return firstCheck;\n }\n if (firstCheck.token) return firstCheck;\n\n const startedAt = Date.now();\n // Token can be assigned slightly after successful verification.\n while (Date.now() - startedAt < timeoutMs) {\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n const token = getSiaraShieldGlobals().CyberSiaraToken;\n if (typeof token === 'string' && token.length > 0) {\n return { ok: true, token };\n }\n }\n\n return { ok: true };\n}\n\n","export interface SiaraShieldCspOptions {\n /** Server-generated nonce value without the `'nonce-'` prefix. */\n nonce?: string;\n /** Optional if the customer still loads jQuery from Google's CDN. */\n includeGoogleApis?: boolean;\n /** Include `script-src 'unsafe-inline'` (not recommended for production). */\n includeUnsafeInlineScript?: boolean;\n /** Include `style-src 'unsafe-inline'` (not recommended for production). */\n includeUnsafeInlineStyle?: boolean;\n}\n\nexport type SiaraShieldCspDirectives = Record<string, string[]>;\n\nconst SELF = \"'self'\";\nconst DATA = 'data:';\nconst UNSAFE_INLINE = \"'unsafe-inline'\";\n\nconst SCRIPT_HOSTS = ['https://embedcdn.mycybersiara.com', 'https://embed.mycybersiara.com'] as const;\nconst OPTIONAL_SCRIPT_HOSTS = ['https://ajax.googleapis.com'] as const;\nconst CONNECT_HOSTS = ['https://embed.mycybersiara.com', 'https://embedcdn.mycybersiara.com'] as const;\nconst STYLE_HOSTS = [\n 'https://embed.mycybersiara.com',\n 'https://mycybersiara.com',\n 'https://fonts.googleapis.com',\n 'https://cdnjs.cloudflare.com',\n] as const;\nconst FONT_HOSTS = [\n 'https://fonts.gstatic.com',\n 'https://mycybersiara.com',\n 'https://cdnjs.cloudflare.com',\n] as const;\nconst IMG_HOSTS = [\n 'https://embed.mycybersiara.com',\n 'https://embedcdn.mycybersiara.com',\n 'https://mycybersiara.com',\n] as const;\n\nfunction unique(values: Array<string | undefined>): string[] {\n return [...new Set(values.filter((value): value is string => Boolean(value && value.trim())))];\n}\n\nfunction nonceSource(nonce?: string): string | undefined {\n return nonce ? `'nonce-${nonce}'` : undefined;\n}\n\nfunction serializeDirective(name: string, values: string[]): string {\n return values.length > 0 ? `${name} ${values.join(' ')}` : name;\n}\n\nfunction parsePolicy(policy: string): Map<string, string[]> {\n const directives = new Map<string, string[]>();\n\n for (const rawDirective of policy.split(';')) {\n const directive = rawDirective.trim();\n if (!directive) {\n continue;\n }\n\n const parts = directive.split(/\\s+/).filter(Boolean);\n const [name, ...values] = parts;\n if (!name) {\n continue;\n }\n\n directives.set(name, values);\n }\n\n return directives;\n}\n\nexport function getSiaraShieldCspDirectives(options?: SiaraShieldCspOptions): SiaraShieldCspDirectives {\n const includeGoogleApis = options?.includeGoogleApis ?? false;\n // Default to strict/safe CSP. Customers can explicitly opt-in if they accept the risk.\n const includeUnsafeInlineScript = options?.includeUnsafeInlineScript ?? false;\n const includeUnsafeInlineStyle = options?.includeUnsafeInlineStyle ?? false;\n const nonce = nonceSource(options?.nonce);\n const scriptHosts = includeGoogleApis ? [...SCRIPT_HOSTS, ...OPTIONAL_SCRIPT_HOSTS] : [...SCRIPT_HOSTS];\n const styleSources = unique([SELF, nonce, ...STYLE_HOSTS]);\n\n return {\n 'default-src': unique([SELF]),\n /**\n * CSP note:\n * - Vendor HTML includes inline event handlers (onclick, etc). CSP nonces do NOT cover those.\n * - We keep `script-src-elem` strict (nonce + host allowlist), and scope inline allowances to attributes only.\n */\n 'script-src': unique([SELF, nonce, ...scriptHosts, includeUnsafeInlineScript ? UNSAFE_INLINE : undefined]),\n 'script-src-elem': unique([SELF, nonce, ...scriptHosts]),\n 'script-src-attr': unique([SELF, \"'unsafe-inline'\"]),\n 'connect-src': unique([SELF, ...CONNECT_HOSTS]),\n 'img-src': unique([SELF, DATA, ...IMG_HOSTS]),\n /**\n * CSP note:\n * - A nonce allows `<style nonce=\"...\">...</style>` but does NOT allow `style=\"\"` attributes / `element.style=...`.\n * - Vendor/jQuery uses style attributes in some flows, so we scope `'unsafe-inline'` to *attributes only*.\n * - This keeps scripts strict while restoring compatibility without requiring `style-src 'unsafe-inline'`.\n */\n 'style-src': unique([...styleSources, includeUnsafeInlineStyle ? UNSAFE_INLINE : undefined]),\n 'style-src-elem': unique(styleSources),\n 'style-src-attr': unique([SELF, includeUnsafeInlineStyle ? UNSAFE_INLINE : \"'unsafe-inline'\"]),\n 'font-src': unique([SELF, ...FONT_HOSTS, DATA]),\n };\n}\n\nexport function getSiaraShieldCspPolicy(options?: SiaraShieldCspOptions): string {\n return Object.entries(getSiaraShieldCspDirectives(options))\n .map(([name, values]) => serializeDirective(name, values))\n .join('; ');\n}\n\nexport function mergeSiaraShieldCspPolicy(existingPolicy: string, options?: SiaraShieldCspOptions): string {\n const directives = parsePolicy(existingPolicy);\n const recommended = getSiaraShieldCspDirectives(options);\n\n for (const [name, values] of Object.entries(recommended)) {\n directives.set(name, unique([...(directives.get(name) ?? []), ...values]));\n }\n\n return [...directives.entries()]\n .map(([name, values]) => serializeDirective(name, values))\n .join('; ');\n}\n","/*\n * Public API Surface of siarashield-workspace\n */\n\nexport * from './lib/siarashield-workspace';\nexport * from './lib/siara-shield.component';\nexport * from './lib/siara-shield-loader.service';\nexport * from './lib/siara-shield.globals';\nexport * from './lib/siara-shield';\nexport * from './lib/siara-shield-csp';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["JQUERY_FALLBACK_SRC","CAPTCHA_SCRIPT_SRC","VALIDATION_SCRIPT_SRC","CAPTCHA_READY_TIMEOUT_MS","CAPTCHA_CONTAINER_READY_TIMEOUT_MS","CAPTCHA_CONTAINER_POLL_MS","waitForCaptchaContainer","ensureAccessibilityPopupAliases","runInRootZone","i1.SiaraShieldLoaderService"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "siarashield_workspace",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.46",
|
|
4
4
|
"description": "Angular wrapper for CyberSiara SiaraShield captcha embed.",
|
|
5
|
+
"schematics": "./schematics/collection.json",
|
|
6
|
+
"ng-add": {
|
|
7
|
+
"save": "dependencies"
|
|
8
|
+
},
|
|
5
9
|
"keywords": [
|
|
6
10
|
"cybersiara",
|
|
7
11
|
"siarashield",
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json.schemastore.org/schematics",
|
|
3
|
+
"schematics": {
|
|
4
|
+
"ng-add": {
|
|
5
|
+
"description": "Install SiaraShield recommended CSP + Angular CSP_NONCE wiring.",
|
|
6
|
+
"factory": "./ng-add/index#ngAdd",
|
|
7
|
+
"schema": "./ng-add/schema.json"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
const { chain, noop, Rule } = require('@angular-devkit/schematics');
|
|
2
|
+
const { getWorkspace } = require('@schematics/angular/utility/workspace');
|
|
3
|
+
|
|
4
|
+
function normalizeNewlines(text) {
|
|
5
|
+
return text.replace(/\r\n/g, '\n');
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function addCspMetaToIndexHtml({ projectRoot, noncePlaceholder }) {
|
|
9
|
+
/** @type {Rule} */
|
|
10
|
+
return (tree) => {
|
|
11
|
+
const indexHtmlPath = `${projectRoot}/src/index.html`.replace(/\/+/g, '/');
|
|
12
|
+
if (!tree.exists(indexHtmlPath)) {
|
|
13
|
+
return tree;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const raw = tree.read(indexHtmlPath).toString('utf8');
|
|
17
|
+
const text = normalizeNewlines(raw);
|
|
18
|
+
|
|
19
|
+
const hasNonceMeta = /<meta\s+name=["']csp-nonce["']\s+/i.test(text);
|
|
20
|
+
const hasCspMeta = /<meta\s+http-equiv=["']Content-Security-Policy["']\s+/i.test(text);
|
|
21
|
+
if (hasNonceMeta && hasCspMeta) {
|
|
22
|
+
return tree;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const injection =
|
|
26
|
+
` <meta name="csp-nonce" content="${noncePlaceholder}" />\n` +
|
|
27
|
+
` <meta http-equiv="Content-Security-Policy" content="\n` +
|
|
28
|
+
` default-src 'self';\n` +
|
|
29
|
+
` script-src 'self' 'nonce-${noncePlaceholder}' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;\n` +
|
|
30
|
+
` script-src-elem 'self' 'nonce-${noncePlaceholder}' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;\n` +
|
|
31
|
+
` script-src-attr 'self' 'unsafe-inline';\n` +
|
|
32
|
+
` connect-src 'self' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;\n` +
|
|
33
|
+
` style-src 'self' 'nonce-${noncePlaceholder}' https://embed.mycybersiara.com https://mycybersiara.com https://fonts.googleapis.com https://cdnjs.cloudflare.com;\n` +
|
|
34
|
+
` style-src-elem 'self' 'nonce-${noncePlaceholder}' https://embed.mycybersiara.com https://mycybersiara.com https://fonts.googleapis.com https://cdnjs.cloudflare.com;\n` +
|
|
35
|
+
` style-src-attr 'self' 'unsafe-inline';\n` +
|
|
36
|
+
` font-src 'self' https://fonts.gstatic.com https://mycybersiara.com https://cdnjs.cloudflare.com data:;\n` +
|
|
37
|
+
` img-src 'self' data: https://embed.mycybersiara.com https://embedcdn.mycybersiara.com https://mycybersiara.com;\n` +
|
|
38
|
+
` ">\n`;
|
|
39
|
+
|
|
40
|
+
let updated = text;
|
|
41
|
+
if (!hasNonceMeta && !hasCspMeta) {
|
|
42
|
+
updated = text.replace(/<\/head>/i, `${injection}</head>`);
|
|
43
|
+
} else if (!hasNonceMeta && hasCspMeta) {
|
|
44
|
+
updated = text.replace(
|
|
45
|
+
/(<meta\s+http-equiv=["']Content-Security-Policy["'][^>]*>)/i,
|
|
46
|
+
` <meta name="csp-nonce" content="${noncePlaceholder}" />\n$1`,
|
|
47
|
+
);
|
|
48
|
+
} else if (hasNonceMeta && !hasCspMeta) {
|
|
49
|
+
updated = text.replace(/<\/head>/i, ` <meta http-equiv="Content-Security-Policy" content="\n` +
|
|
50
|
+
` default-src 'self';\n` +
|
|
51
|
+
` script-src 'self' 'nonce-${noncePlaceholder}' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;\n` +
|
|
52
|
+
` script-src-elem 'self' 'nonce-${noncePlaceholder}' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;\n` +
|
|
53
|
+
` script-src-attr 'self' 'unsafe-inline';\n` +
|
|
54
|
+
` connect-src 'self' https://embed.mycybersiara.com https://embedcdn.mycybersiara.com;\n` +
|
|
55
|
+
` style-src 'self' 'nonce-${noncePlaceholder}' https://embed.mycybersiara.com https://mycybersiara.com https://fonts.googleapis.com https://cdnjs.cloudflare.com;\n` +
|
|
56
|
+
` style-src-elem 'self' 'nonce-${noncePlaceholder}' https://embed.mycybersiara.com https://mycybersiara.com https://fonts.googleapis.com https://cdnjs.cloudflare.com;\n` +
|
|
57
|
+
` style-src-attr 'self' 'unsafe-inline';\n` +
|
|
58
|
+
` font-src 'self' https://fonts.gstatic.com https://mycybersiara.com https://cdnjs.cloudflare.com data:;\n` +
|
|
59
|
+
` img-src 'self' data: https://embed.mycybersiara.com https://embedcdn.mycybersiara.com https://mycybersiara.com;\n` +
|
|
60
|
+
` ">\n</head>`);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
if (updated !== text) {
|
|
64
|
+
tree.overwrite(indexHtmlPath, updated.replace(/\n/g, raw.includes('\r\n') ? '\r\n' : '\n'));
|
|
65
|
+
}
|
|
66
|
+
return tree;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function addAngularCspNonceProviderToMainTs({ projectRoot }) {
|
|
71
|
+
/** @type {Rule} */
|
|
72
|
+
return (tree) => {
|
|
73
|
+
const mainTsPath = `${projectRoot}/src/main.ts`.replace(/\/+/g, '/');
|
|
74
|
+
if (!tree.exists(mainTsPath)) {
|
|
75
|
+
return tree;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const raw = tree.read(mainTsPath).toString('utf8');
|
|
79
|
+
const text = normalizeNewlines(raw);
|
|
80
|
+
|
|
81
|
+
if (/\bCSP_NONCE\b/.test(text) && /provide\s*:\s*CSP_NONCE/.test(text)) {
|
|
82
|
+
return tree;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
let updated = text;
|
|
86
|
+
|
|
87
|
+
const providerSnippet =
|
|
88
|
+
`{\n` +
|
|
89
|
+
` provide: CSP_NONCE,\n` +
|
|
90
|
+
` useFactory: () => document.querySelector('meta[name="csp-nonce"]')?.getAttribute('content') ?? null,\n` +
|
|
91
|
+
` }`;
|
|
92
|
+
|
|
93
|
+
let injected = false;
|
|
94
|
+
|
|
95
|
+
// Try to inject into bootstrapApplication(..., { providers: [...] })
|
|
96
|
+
const providersArrayMatch = updated.match(/providers\s*:\s*\[\s*/);
|
|
97
|
+
if (providersArrayMatch) {
|
|
98
|
+
updated = updated.replace(/providers\s*:\s*\[\s*/m, (m) => `${m}\n ${providerSnippet},\n`);
|
|
99
|
+
injected = true;
|
|
100
|
+
} else {
|
|
101
|
+
// If main.ts uses appConfig object, user can add provider manually; we still try a best-effort append.
|
|
102
|
+
// Insert into first bootstrapApplication call's options object.
|
|
103
|
+
const attempted = updated.replace(
|
|
104
|
+
/bootstrapApplication\(([\s\S]*?),\s*\{\s*/m,
|
|
105
|
+
(m) => `${m}\n providers: [\n ${providerSnippet},\n ],\n`,
|
|
106
|
+
);
|
|
107
|
+
if (attempted !== updated) {
|
|
108
|
+
updated = attempted;
|
|
109
|
+
injected = true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (injected) {
|
|
114
|
+
// Ensure import exists (only if we actually injected CSP_NONCE usage in this file).
|
|
115
|
+
if (!/from\s+['"]@angular\/core['"]/.test(updated) || !/\bCSP_NONCE\b/.test(updated)) {
|
|
116
|
+
// If there's already an @angular/core import, append CSP_NONCE into it when possible.
|
|
117
|
+
const coreImportMatch = updated.match(/import\s*\{([^}]+)\}\s*from\s*['"]@angular\/core['"];\s*/);
|
|
118
|
+
if (coreImportMatch) {
|
|
119
|
+
const inside = coreImportMatch[1];
|
|
120
|
+
if (!inside.split(',').map((s) => s.trim()).includes('CSP_NONCE')) {
|
|
121
|
+
const replacement = coreImportMatch[0].replace(inside, `${inside.trim()}, CSP_NONCE`);
|
|
122
|
+
updated = updated.replace(coreImportMatch[0], replacement);
|
|
123
|
+
}
|
|
124
|
+
} else {
|
|
125
|
+
updated = `import { CSP_NONCE } from '@angular/core';\n` + updated;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (updated !== text) {
|
|
131
|
+
tree.overwrite(mainTsPath, updated.replace(/\n/g, raw.includes('\r\n') ? '\r\n' : '\n'));
|
|
132
|
+
}
|
|
133
|
+
return tree;
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function addAngularCspNonceProviderToAppConfig({ projectRoot }) {
|
|
138
|
+
/** @type {Rule} */
|
|
139
|
+
return (tree) => {
|
|
140
|
+
const appConfigPath = `${projectRoot}/src/app/app.config.ts`.replace(/\/+/g, '/');
|
|
141
|
+
if (!tree.exists(appConfigPath)) {
|
|
142
|
+
return tree;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const raw = tree.read(appConfigPath).toString('utf8');
|
|
146
|
+
const text = normalizeNewlines(raw);
|
|
147
|
+
if (/\bCSP_NONCE\b/.test(text) && /provide\s*:\s*CSP_NONCE/.test(text)) {
|
|
148
|
+
return tree;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Only patch if there is a providers array in appConfig.
|
|
152
|
+
if (!/providers\s*:\s*\[\s*/m.test(text)) {
|
|
153
|
+
return tree;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
let updated = text;
|
|
157
|
+
const providerSnippet =
|
|
158
|
+
`{\n` +
|
|
159
|
+
` provide: CSP_NONCE,\n` +
|
|
160
|
+
` useFactory: () => document.querySelector('meta[name="csp-nonce"]')?.getAttribute('content') ?? null,\n` +
|
|
161
|
+
` }`;
|
|
162
|
+
|
|
163
|
+
updated = updated.replace(/providers\s*:\s*\[\s*/m, (m) => `${m}\n ${providerSnippet},\n`);
|
|
164
|
+
|
|
165
|
+
// Ensure import exists.
|
|
166
|
+
const coreImportMatch = updated.match(/import\s*\{([^}]+)\}\s*from\s*['"]@angular\/core['"];\s*/);
|
|
167
|
+
if (coreImportMatch) {
|
|
168
|
+
const inside = coreImportMatch[1];
|
|
169
|
+
if (!inside.split(',').map((s) => s.trim()).includes('CSP_NONCE')) {
|
|
170
|
+
const replacement = coreImportMatch[0].replace(inside, `${inside.trim()}, CSP_NONCE`);
|
|
171
|
+
updated = updated.replace(coreImportMatch[0], replacement);
|
|
172
|
+
}
|
|
173
|
+
} else {
|
|
174
|
+
updated = `import { CSP_NONCE } from '@angular/core';\n` + updated;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (updated !== text) {
|
|
178
|
+
tree.overwrite(appConfigPath, updated.replace(/\n/g, raw.includes('\r\n') ? '\r\n' : '\n'));
|
|
179
|
+
}
|
|
180
|
+
return tree;
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
function getProjectRoot(workspace, projectName) {
|
|
185
|
+
const project = workspace.projects.get(projectName);
|
|
186
|
+
if (!project) {
|
|
187
|
+
throw new Error(`Project "${projectName}" not found in workspace.`);
|
|
188
|
+
}
|
|
189
|
+
// For application projects, root is typically '' and sourceRoot is 'src'.
|
|
190
|
+
// We want the project root folder containing 'src'.
|
|
191
|
+
return project.root && project.root.length > 0 ? project.root : '';
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
function ngAdd(options) {
|
|
195
|
+
return async (tree, context) => {
|
|
196
|
+
const workspace = await getWorkspace(tree);
|
|
197
|
+
const projectName = options && options.project ? options.project : workspace.extensions.defaultProject;
|
|
198
|
+
if (!projectName) {
|
|
199
|
+
context.logger.warn('No project specified and no defaultProject set; skipping ng-add changes.');
|
|
200
|
+
return tree;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const projectRoot = getProjectRoot(workspace, String(projectName));
|
|
204
|
+
const noncePlaceholder = (options && options.noncePlaceholder) || 'REPLACE_WITH_NONCE';
|
|
205
|
+
|
|
206
|
+
return chain([
|
|
207
|
+
addCspMetaToIndexHtml({ projectRoot, noncePlaceholder }),
|
|
208
|
+
addAngularCspNonceProviderToAppConfig({ projectRoot }),
|
|
209
|
+
addAngularCspNonceProviderToMainTs({ projectRoot }),
|
|
210
|
+
])(tree, context);
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
module.exports = { ngAdd };
|
|
215
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/schema",
|
|
3
|
+
"$id": "SiaraShieldNgAddSchema",
|
|
4
|
+
"title": "SiaraShield ng-add",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"properties": {
|
|
7
|
+
"project": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "Angular project name to update (defaults to defaultProject)."
|
|
10
|
+
},
|
|
11
|
+
"noncePlaceholder": {
|
|
12
|
+
"type": "string",
|
|
13
|
+
"default": "REPLACE_WITH_NONCE",
|
|
14
|
+
"description": "Placeholder text used inside index.html CSP meta. In production you must replace this per-request on the server."
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
Binary file
|