siarashield_workspace 0.0.33 → 0.0.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -195
- package/esm2022/lib/siara-shield-script-utils.mjs +3 -2
- package/esm2022/lib/siara-shield-vendor-runtime.mjs +98 -0
- package/esm2022/lib/siara-shield.component.mjs +29 -15
- package/esm2022/lib/siara-shield.mjs +29 -15
- package/fesm2022/siarashield_workspace.mjs +182 -57
- package/fesm2022/siarashield_workspace.mjs.map +1 -1
- package/lib/siara-shield-vendor-runtime.d.ts +1 -0
- package/lib/siara-shield.component.d.ts +3 -1
- package/lib/siara-shield.d.ts +3 -1
- package/package.json +1 -1
- package/siarashield_workspace-0.0.36.tgz +0 -0
- package/siarashield_workspace-0.0.33.tgz +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { getSiaraShieldGlobals } from './siara-shield.globals';
|
|
2
|
+
const VENDOR_RUNTIME_PATCH_KEY = '__siaraShieldVendorRuntimePatchInstalled__';
|
|
3
|
+
const VENDOR_TOKEN_BRIDGE_KEY = '__siaraShieldVendorTokenBridgeInstalled__';
|
|
4
|
+
const WRAPPED_FN_PREFIX = '__siaraShieldWrappedVendorFn__';
|
|
5
|
+
function isKnownVendorNullDomError(error) {
|
|
6
|
+
const msg = error instanceof Error ? error.message.toLowerCase() : String(error ?? '').toLowerCase();
|
|
7
|
+
return (msg.includes("cannot read properties of null (reading 'style')") ||
|
|
8
|
+
msg.includes("cannot read properties of null (reading 'queryselector')") ||
|
|
9
|
+
msg.includes("cannot read properties of null (reading 'removechild')"));
|
|
10
|
+
}
|
|
11
|
+
function runFallbackChallengeOpen(excluding) {
|
|
12
|
+
const globals = getSiaraShieldGlobals();
|
|
13
|
+
const candidates = ['OpenCaptchaSlid', 'GetCyberSiara', 'Open_Pluin', 'Open_Plugin', 'Open_Plugin_'];
|
|
14
|
+
for (const name of candidates) {
|
|
15
|
+
if (name === excluding)
|
|
16
|
+
continue;
|
|
17
|
+
const fn = globals[name];
|
|
18
|
+
if (typeof fn !== 'function')
|
|
19
|
+
continue;
|
|
20
|
+
try {
|
|
21
|
+
fn();
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Try next candidate.
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function wrapVendorOpenFunction(name) {
|
|
30
|
+
const globals = getSiaraShieldGlobals();
|
|
31
|
+
const marker = `${WRAPPED_FN_PREFIX}${name}`;
|
|
32
|
+
if (globals[marker] === true)
|
|
33
|
+
return;
|
|
34
|
+
const candidate = globals[name];
|
|
35
|
+
if (typeof candidate !== 'function')
|
|
36
|
+
return;
|
|
37
|
+
const original = candidate;
|
|
38
|
+
globals[name] = ((...args) => {
|
|
39
|
+
try {
|
|
40
|
+
return original(...args);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (!isKnownVendorNullDomError(error)) {
|
|
44
|
+
throw error;
|
|
45
|
+
}
|
|
46
|
+
// Vendor challenge opener hit a missing DOM node.
|
|
47
|
+
// Try alternative open functions so challenge can still render.
|
|
48
|
+
runFallbackChallengeOpen(name);
|
|
49
|
+
return undefined;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
globals[marker] = true;
|
|
53
|
+
}
|
|
54
|
+
function installVerifiedSubmitTokenBridge() {
|
|
55
|
+
const globals = getSiaraShieldGlobals();
|
|
56
|
+
if (globals[VENDOR_TOKEN_BRIDGE_KEY])
|
|
57
|
+
return;
|
|
58
|
+
const patchAjaxOwner = (owner) => {
|
|
59
|
+
if (!owner || typeof owner.ajax !== 'function')
|
|
60
|
+
return;
|
|
61
|
+
const originalAjax = owner.ajax.bind(owner);
|
|
62
|
+
owner.ajax = ((...args) => {
|
|
63
|
+
const firstArg = args[0];
|
|
64
|
+
if (!firstArg || typeof firstArg !== 'object') {
|
|
65
|
+
return originalAjax(...args);
|
|
66
|
+
}
|
|
67
|
+
const options = firstArg;
|
|
68
|
+
const url = String(options['url'] ?? '').toLowerCase();
|
|
69
|
+
const originalSuccess = options['success'];
|
|
70
|
+
if (!url.includes('/submitcaptcha/verifiedsubmit') || typeof originalSuccess !== 'function') {
|
|
71
|
+
return originalAjax(options);
|
|
72
|
+
}
|
|
73
|
+
options['success'] = ((response, ...rest) => {
|
|
74
|
+
const payload = response;
|
|
75
|
+
const maybeTokenRaw = payload?.data ?? payload?.Data;
|
|
76
|
+
if (typeof maybeTokenRaw === 'string' && maybeTokenRaw.trim()) {
|
|
77
|
+
globals.CyberSiaraToken = maybeTokenRaw.trim();
|
|
78
|
+
}
|
|
79
|
+
return originalSuccess(response, ...rest);
|
|
80
|
+
});
|
|
81
|
+
return originalAjax(options);
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
patchAjaxOwner(globals.$);
|
|
85
|
+
patchAjaxOwner(globals.JQuryName);
|
|
86
|
+
globals[VENDOR_TOKEN_BRIDGE_KEY] = true;
|
|
87
|
+
}
|
|
88
|
+
export function installVendorChallengeRuntimePatch() {
|
|
89
|
+
const globals = getSiaraShieldGlobals();
|
|
90
|
+
if (globals[VENDOR_RUNTIME_PATCH_KEY])
|
|
91
|
+
return;
|
|
92
|
+
wrapVendorOpenFunction('Open_Pluin');
|
|
93
|
+
wrapVendorOpenFunction('Open_Plugin');
|
|
94
|
+
wrapVendorOpenFunction('Open_Plugin_');
|
|
95
|
+
installVerifiedSubmitTokenBridge();
|
|
96
|
+
globals[VENDOR_RUNTIME_PATCH_KEY] = true;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLXZlbmRvci1ydW50aW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2lhcmFzaGllbGQtd29ya3NwYWNlL3NyYy9saWIvc2lhcmEtc2hpZWxkLXZlbmRvci1ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRS9ELE1BQU0sd0JBQXdCLEdBQUcsNENBQTRDLENBQUM7QUFDOUUsTUFBTSx1QkFBdUIsR0FBRywyQ0FBMkMsQ0FBQztBQUM1RSxNQUFNLGlCQUFpQixHQUFHLGdDQUFnQyxDQUFDO0FBTTNELFNBQVMseUJBQXlCLENBQUMsS0FBYztJQUMvQyxNQUFNLEdBQUcsR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JHLE9BQU8sQ0FDTCxHQUFHLENBQUMsUUFBUSxDQUFDLGtEQUFrRCxDQUFDO1FBQ2hFLEdBQUcsQ0FBQyxRQUFRLENBQUMsMERBQTBELENBQUM7UUFDeEUsR0FBRyxDQUFDLFFBQVEsQ0FBQyx3REFBd0QsQ0FBQyxDQUN2RSxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQUMsU0FBK0I7SUFDL0QsTUFBTSxPQUFPLEdBQUcscUJBQXFCLEVBQWlELENBQUM7SUFDdkYsTUFBTSxVQUFVLEdBQTJCLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFN0gsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUM5QixJQUFJLElBQUksS0FBSyxTQUFTO1lBQUUsU0FBUztRQUNqQyxNQUFNLEVBQUUs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RSxJQUFJLENBQUM7Z0JBQ3JELElBQUksT0FBTyxhQUFhLEtBQUssUUFBUSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUM5RCxPQUFPLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakQsQ0FBQztnQkFFRCxPQUFRLGVBQXFELENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7WUFDbkYsQ0FBQyxDQUFZLENBQUM7WUFFZCxPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQXNCLENBQUM7SUFDMUIsQ0FBQyxDQUFDO0lBRUYsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQixjQUFjLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMxQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGtDQUFrQztJQUNoRCxNQUFNLE9BQU8sR0FBRyxxQkFBcUIsRUFFcEMsQ0FBQztJQUNGLElBQUksT0FBTyxDQUFDLHdCQUF3QixDQUFDO1FBQUUsT0FBTztJQUU5QyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNyQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN0QyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2QyxnQ0FBZ0MsRUFBRSxDQUFDO0lBQ25DLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0U2lhcmFTaGllbGRHbG9iYWxzIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQuZ2xvYmFscyc7XHJcblxyXG5jb25zdCBWRU5ET1JfUlVOVElNRV9QQVRDSF9LRVkgPSAnX19zaWFyYVNoaWVsZFZlbmRvclJ1bnRpbWVQYXRjaEluc3RhbGxlZF9fJztcclxuY29uc3QgVkVORE9SX1RPS0VOX0JSSURHRV9LRVkgPSAnX19zaWFyYVNoaWVsZFZlbmRvclRva2VuQnJpZGdlSW5zdGFsbGVkX18nO1xyXG5jb25zdCBXUkFQUEVEX0ZOX1BSRUZJWCA9ICdfX3NpYXJhU2hpZWxkV3JhcHBlZFZlbmRvckZuX18nO1xyXG5cclxudHlwZSBWZW5kb3JGbk5hbWUgPSAnT3Blbl9QbHVpbicgfCAnT3Blbl9QbHVnaW4nIHwgJ09wZW5fUGx1Z2luXyc7XHJcbnR5cGUgT3B0aW9uYWxWZW5kb3JGbk5hbWUgPSBWZW5kb3JGbk5hbWUgfCAnT3BlbkNhcHRjaGFTbGlkJyB8ICdHZXRDeWJlclNpYXJhJztcclxudHlwZSBWZW5kb3JGbiA9ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XHJcblxyXG5mdW5jdGlvbiBpc0tub3duVmVuZG9yTnVsbERvbUVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XHJcbiAgY29uc3QgbXNnID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UudG9Mb3dlckNhc2UoKSA6IFN0cmluZyhlcnJvciA/PyAnJykudG9Mb3dlckNhc2UoKTtcclxuICByZXR1cm4gKFxyXG4gICAgbXNnLmluY2x1ZGVzKFwiY2Fubm90IHJlYWQgcHJvcGVydGllcyBvZiBudWxsIChyZWFkaW5nICdzdHlsZScpXCIpIHx8XHJcbiAgICBtc2cuaW5jbHVkZXMoXCJjYW5ub3QgcmVhZCBwcm9wZXJ0aWVzIG9mIG51bGwgKHJlYWRpbmcgJ3F1ZXJ5c2VsZWN0b3InKVwiKSB8fFxyXG4gICAgbXNnLmluY2x1ZGVzKFwiY2Fubm90IHJlYWQgcHJvcGVydGllcyBvZiBudWxsIChyZWFkaW5nICdyZW1vdmVjaGlsZCcpXCIpXHJcbiAgKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcnVuRmFsbGJhY2tDaGFsbGVuZ2VPcGVuKGV4Y2x1ZGluZzogT3B0aW9uYWxWZW5kb3JGbk5hbWUpOiB2b2lkIHtcclxuICBjb25zdCBnbG9iYWxzID0gZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCkgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuICBjb25zdCBjYW5kaWRhdGVzOiBPcHRpb25hbFZlbmRvckZuTmFtZVtdID0gWydPcGVuQ2FwdGNoYVNsaWQnLCAnR2V0Q3liZXJTaWFyYScsICdPcGVuX1BsdWluJywgJ09wZW5fUGx1Z2luJywgJ09wZW5fUGx1Z2luXyddO1xyXG5cclxuICBmb3IgKGNvbnN0IG5hbWUgb2YgY2FuZGlkYXRlcykge1xyXG4gICAgaWYgKG5hbWUgPT09IGV4Y2x1ZGluZykgY29udGludWU7XHJcbiAgICBjb25zdCBmbiA9IGdsb2JhbHNbbmFtZV07XHJcbiAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSBjb250aW51ZTtcclxuICAgIHRyeSB7XHJcbiAgICAgIChmbiBhcyBWZW5kb3JGbikoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIC8vIFRyeSBuZXh0IGNhbmRpZGF0ZS5cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdyYXBWZW5kb3JPcGVuRnVuY3Rpb24obmFtZTogVmVuZG9yRm5OYW1lKTogdm9pZCB7XHJcbiAgY29uc3QgZ2xvYmFscyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XHJcbiAgY29uc3QgbWFya2VyID0gYCR7V1JBUFBFRF9GTl9QUkVGSVh9JHtuYW1lfWA7XHJcbiAgaWYgKGdsb2JhbHNbbWFya2VyXSA9PT0gdHJ1ZSkgcmV0dXJuO1xyXG5cclxuICBjb25zdCBjYW5kaWRhdGUgPSBnbG9iYWxzW25hbWVdO1xyXG4gIGlmICh0eXBlb2YgY2FuZGlkYXRlICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XHJcblxyXG4gIGNvbnN0IG9yaWdpbmFsID0gY2FuZGlkYXRlIGFzIFZlbmRvckZuO1xyXG4gIGdsb2JhbHNbbmFtZV0gPSAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIG9yaWdpbmFsKC4uLmFyZ3MpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgaWYgKCFpc0tub3duVmVuZG9yTnVsbERvbUVycm9yKGVycm9yKSkge1xyXG4gICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBWZW5kb3IgY2hhbGxlbmdlIG9wZW5lciBoaXQgYSBtaXNzaW5nIERPTSBub2RlLlxyXG4gICAgICAvLyBUcnkgYWx0ZXJuYXRpdmUgb3BlbiBmdW5jdGlvbnMgc28gY2hhbGxlbmdlIGNhbiBzdGlsbCByZW5kZXIuXHJcbiAgICAgIHJ1bkZhbGxiYWNrQ2hhbGxlbmdlT3BlbihuYW1lKTtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICB9KSBhcyB1bmtub3duO1xyXG4gIGdsb2JhbHNbbWFya2VyXSA9IHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluc3RhbGxWZXJpZmllZFN1Ym1pdFRva2VuQnJpZGdlKCk6IHZvaWQge1xyXG4gIGNvbnN0IGdsb2JhbHMgPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKSBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHtcclxuICAgIFtWRU5ET1JfVE9LRU5fQlJJREdFX0tFWV0/OiBib29sZWFuO1xyXG4gICAgSlF1cnlOYW1lPzogeyBhamF4PzogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biB9O1xyXG4gICAgJD86IHsgYWpheD86ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24gfTtcclxuICAgIEN5YmVyU2lhcmFUb2tlbj86IHN0cmluZztcclxuICB9O1xyXG4gIGlmIChnbG9iYWxzW1ZFTkRPUl9UT0tFTl9CUklER0VfS0VZXSkgcmV0dXJuO1xyXG5cclxuICBjb25zdCBwYXRjaEFqYXhPd25lciA9IChvd25lcjogeyBhamF4PzogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93biB9IHwgdW5kZWZpbmVkKTogdm9pZCA9PiB7XHJcbiAgICBpZiAoIW93bmVyIHx8IHR5cGVvZiBvd25lci5hamF4ICE9PSAnZnVuY3Rpb24nKSByZXR1cm47XHJcbiAgICBjb25zdCBvcmlnaW5hbEFqYXggPSBvd25lci5hamF4LmJpbmQob3duZXIpO1xyXG5cclxuICAgIG93bmVyLmFqYXggPSAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xyXG4gICAgICBjb25zdCBmaXJzdEFyZyA9IGFyZ3NbMF07XHJcbiAgICAgIGlmICghZmlyc3RBcmcgfHwgdHlwZW9mIGZpcnN0QXJnICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIHJldHVybiBvcmlnaW5hbEFqYXgoLi4uYXJncyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBmaXJzdEFyZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcclxuICAgICAgY29uc3QgdXJsID0gU3RyaW5nKG9wdGlvbnNbJ3VybCddID8/ICcnKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBjb25zdCBvcmlnaW5hbFN1Y2Nlc3MgPSBvcHRpb25zWydzdWNjZXNzJ107XHJcbiAgICAgIGlmICghdXJsLmluY2x1ZGVzKCcvc3VibWl0Y2FwdGNoYS92ZXJpZmllZHN1Ym1pdCcpIHx8IHR5cGVvZiBvcmlnaW5hbFN1Y2Nlc3MgIT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICByZXR1cm4gb3JpZ2luYWxBamF4KG9wdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBvcHRpb25zWydzdWNjZXNzJ10gPSAoKHJlc3BvbnNlOiB1bmtub3duLCAuLi5yZXN0OiB1bmtub3duW10pID0+IHtcclxuICAgICAgICBjb25zdCBwYXlsb2FkID0gcmVzcG9uc2UgYXMgeyBkYXRhPzogdW5rbm93bjsgRGF0YT86IHVua25vd24gfSB8IG51bGw7XHJcbiAgICAgICAgY29uc3QgbWF5YmVUb2tlblJhdyA9IHBheWxvYWQ/LmRhdGEgPz8gcGF5bG9hZD8uRGF0YTtcclxuICAgICAgICBpZiAodHlwZW9mIG1heWJlVG9rZW5SYXcgPT09ICdzdHJpbmcnICYmIG1heWJlVG9rZW5SYXcudHJpbSgpKSB7XHJcbiAgICAgICAgICBnbG9iYWxzLkN5YmVyU2lhcmFUb2tlbiA9IG1heWJlVG9rZW5SYXcudHJpbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIChvcmlnaW5hbFN1Y2Nlc3MgYXMgKC4uLmZuQXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKShyZXNwb25zZSwgLi4ucmVzdCk7XHJcbiAgICAgIH0pIGFzIHVua25vd247XHJcblxyXG4gICAgICByZXR1cm4gb3JpZ2luYWxBamF4KG9wdGlvbnMpO1xyXG4gICAgfSkgYXMgdHlwZW9mIG93bmVyLmFqYXg7XHJcbiAgfTtcclxuXHJcbiAgcGF0Y2hBamF4T3duZXIoZ2xvYmFscy4kKTtcclxuICBwYXRjaEFqYXhPd25lcihnbG9iYWxzLkpRdXJ5TmFtZSk7XHJcbiAgZ2xvYmFsc1tWRU5ET1JfVE9LRU5fQlJJREdFX0tFWV0gPSB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFsbFZlbmRvckNoYWxsZW5nZVJ1bnRpbWVQYXRjaCgpOiB2b2lkIHtcclxuICBjb25zdCBnbG9iYWxzID0gZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCkgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XHJcbiAgICBbVkVORE9SX1JVTlRJTUVfUEFUQ0hfS0VZXT86IGJvb2xlYW47XHJcbiAgfTtcclxuICBpZiAoZ2xvYmFsc1tWRU5ET1JfUlVOVElNRV9QQVRDSF9LRVldKSByZXR1cm47XHJcblxyXG4gIHdyYXBWZW5kb3JPcGVuRnVuY3Rpb24oJ09wZW5fUGx1aW4nKTtcclxuICB3cmFwVmVuZG9yT3BlbkZ1bmN0aW9uKCdPcGVuX1BsdWdpbicpO1xyXG4gIHdyYXBWZW5kb3JPcGVuRnVuY3Rpb24oJ09wZW5fUGx1Z2luXycpO1xyXG4gIGluc3RhbGxWZXJpZmllZFN1Ym1pdFRva2VuQnJpZGdlKCk7XHJcbiAgZ2xvYmFsc1tWRU5ET1JfUlVOVElNRV9QQVRDSF9LRVldID0gdHJ1ZTtcclxufVxyXG4iXX0=
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
|
|
2
2
|
import { getInitCaptchaFn, getSiaraShieldGlobals } from './siara-shield.globals';
|
|
3
3
|
import { installVendorRuntimeErrorSuppression, suppressVendorConsoleWindow } from './siara-shield-log-utils';
|
|
4
|
-
import { prepareScriptNonce } from './siara-shield-script-utils';
|
|
5
4
|
import { installCaptchaSubmitGuard } from './siara-shield-submit-guard';
|
|
5
|
+
import { installVendorChallengeRuntimePatch } from './siara-shield-vendor-runtime';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "./siara-shield-loader.service";
|
|
8
8
|
const JQUERY_FALLBACK_SRC = 'https://embedcdn.mycybersiara.com/capcha-temple/js/jquery.min.js';
|
|
@@ -66,22 +66,18 @@ export class SiaraShieldComponent {
|
|
|
66
66
|
if (!options.publicKey) {
|
|
67
67
|
throw new Error('SiaraShieldComponent: publicKey is required.');
|
|
68
68
|
}
|
|
69
|
-
const cspNonce = prepareScriptNonce(this.host.nativeElement.ownerDocument, options.cspNonce);
|
|
70
69
|
if ((options.loadJQuery ?? true) && !this.isJQueryAlreadyAvailable()) {
|
|
71
|
-
await this.loader.loadScript(JQUERY_FALLBACK_SRC
|
|
70
|
+
await this.loader.loadScript(JQUERY_FALLBACK_SRC);
|
|
72
71
|
}
|
|
73
|
-
await this.loader.loadScript(CAPTCHA_SCRIPT_SRC
|
|
74
|
-
|
|
75
|
-
});
|
|
76
|
-
await this.loader.loadScript(VALIDATION_SCRIPT_SRC, {
|
|
77
|
-
nonce: cspNonce,
|
|
78
|
-
});
|
|
72
|
+
await this.loader.loadScript(CAPTCHA_SCRIPT_SRC);
|
|
73
|
+
await this.loader.loadScript(VALIDATION_SCRIPT_SRC);
|
|
79
74
|
const g = getSiaraShieldGlobals();
|
|
80
75
|
ensureAccessibilityPopupAliases();
|
|
81
76
|
this.preventDuplicateValidationBootstrap(g);
|
|
77
|
+
installVendorChallengeRuntimePatch();
|
|
82
78
|
const initCaptchaFn = getInitCaptchaFn(g);
|
|
83
79
|
if (!initCaptchaFn) {
|
|
84
|
-
throw new Error('SiaraShield: InitCaptcha() is not available after loading scripts.
|
|
80
|
+
throw new Error('SiaraShield: InitCaptcha() is not available after loading scripts.');
|
|
85
81
|
}
|
|
86
82
|
if (!options.allowVendorConsoleLogs) {
|
|
87
83
|
suppressVendorConsoleWindow();
|
|
@@ -123,7 +119,7 @@ export class SiaraShieldComponent {
|
|
|
123
119
|
}
|
|
124
120
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
125
121
|
}
|
|
126
|
-
throw new Error('SiaraShield: CheckCaptcha() was not available within timeout.
|
|
122
|
+
throw new Error('SiaraShield: CheckCaptcha() was not available within timeout.');
|
|
127
123
|
}
|
|
128
124
|
/**
|
|
129
125
|
* Calls the global `CheckCaptcha()` from SiaraShield script.
|
|
@@ -132,7 +128,7 @@ export class SiaraShieldComponent {
|
|
|
132
128
|
checkCaptcha() {
|
|
133
129
|
const g = getSiaraShieldGlobals();
|
|
134
130
|
if (!g.CheckCaptcha) {
|
|
135
|
-
throw new Error('SiaraShield: CheckCaptcha() is not available. Did init() run
|
|
131
|
+
throw new Error('SiaraShield: CheckCaptcha() is not available. Did init() run?');
|
|
136
132
|
}
|
|
137
133
|
const existingToken = typeof g.CyberSiaraToken === 'string' && g.CyberSiaraToken.length > 0 ? g.CyberSiaraToken : undefined;
|
|
138
134
|
if (existingToken) {
|
|
@@ -156,15 +152,33 @@ export class SiaraShieldComponent {
|
|
|
156
152
|
const timeoutMs = options?.timeoutMs ?? 2000;
|
|
157
153
|
const pollIntervalMs = options?.pollIntervalMs ?? 120;
|
|
158
154
|
const beforeCheckDelayMs = options?.beforeCheckDelayMs ?? 140;
|
|
155
|
+
const retryOnFalseMs = options?.retryOnFalseMs ?? 0;
|
|
156
|
+
const falseResultTokenWaitMs = options?.falseResultTokenWaitMs ?? 900;
|
|
159
157
|
const existingToken = getSiaraShieldGlobals().CyberSiaraToken;
|
|
160
158
|
if (typeof existingToken === 'string' && existingToken.length > 0) {
|
|
161
159
|
this.token.emit(existingToken);
|
|
162
160
|
return true;
|
|
163
161
|
}
|
|
164
162
|
await new Promise((resolve) => setTimeout(resolve, beforeCheckDelayMs));
|
|
165
|
-
|
|
166
|
-
|
|
163
|
+
let ok = this.checkCaptcha();
|
|
164
|
+
// Optional retry for integrations that observe late vendor-state settling.
|
|
165
|
+
if (!ok && retryOnFalseMs > 0) {
|
|
166
|
+
await new Promise((resolve) => setTimeout(resolve, retryOnFalseMs));
|
|
167
|
+
ok = this.checkCaptcha();
|
|
168
|
+
}
|
|
169
|
+
if (!ok) {
|
|
170
|
+
// Some vendor flows return false first, then set token shortly after.
|
|
171
|
+
const falseStartedAt = Date.now();
|
|
172
|
+
while (Date.now() - falseStartedAt < falseResultTokenWaitMs) {
|
|
173
|
+
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
|
|
174
|
+
const token = getSiaraShieldGlobals().CyberSiaraToken;
|
|
175
|
+
if (typeof token === 'string' && token.length > 0) {
|
|
176
|
+
this.token.emit(token);
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
167
180
|
return false;
|
|
181
|
+
}
|
|
168
182
|
const g = getSiaraShieldGlobals();
|
|
169
183
|
if (typeof g.CyberSiaraToken === 'string' && g.CyberSiaraToken.length > 0) {
|
|
170
184
|
return true;
|
|
@@ -203,4 +217,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
203
217
|
}], token: [{
|
|
204
218
|
type: Output
|
|
205
219
|
}] } });
|
|
206
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0csT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7OztBQUV4RSxNQUFNLG1CQUFtQixHQUFHLGtFQUFrRSxDQUFDO0FBQy9GLE1BQU0sa0JBQWtCLEdBQUcsc0VBQXNFLENBQUM7QUFDbEcsTUFBTSxxQkFBcUIsR0FBRyx5RUFBeUUsQ0FBQztBQUN4RyxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQztBQUV0QyxTQUFTLCtCQUErQjtJQUN0QyxNQUFNLENBQUMsR0FBRyxVQUF5RCxDQUFDO0lBQ3BFLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLHlCQUF5QjtRQUN6QiwwQkFBMEI7UUFDMUIsd0JBQXdCO1FBQ3hCLHlCQUF5QjtLQUNqQixDQUFDO0lBRVgsTUFBTSxRQUFRLEdBQUcsVUFBVTtTQUN4QixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQXVCLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FB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dGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNpYXJhU2hpZWxkTG9hZGVyU2VydmljZSB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLWxvYWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IGdldEluaXRDYXB0Y2hhRm4sIGdldFNpYXJhU2hpZWxkR2xvYmFscyB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLmdsb2JhbHMnO1xuaW1wb3J0IHsgaW5zdGFsbFZlbmRvclJ1bnRpbWVFcnJvclN1cHByZXNzaW9uLCBzdXBwcmVzc1ZlbmRvckNvbnNvbGVXaW5kb3cgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC1sb2ctdXRpbHMnO1xuaW1wb3J0IHsgcHJlcGFyZVNjcmlwdE5vbmNlIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtc2NyaXB0LXV0aWxzJztcbmltcG9ydCB7IGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC1zdWJtaXQtZ3VhcmQnO1xuXG5jb25zdCBKUVVFUllfRkFMTEJBQ0tfU1JDID0gJ2h0dHBzOi8vZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbS9jYXBjaGEtdGVtcGxlL2pzL2pxdWVyeS5taW4uanMnO1xuY29uc3QgQ0FQVENIQV9TQ1JJUFRfU1JDID0gJ2h0dHBzOi8vZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbS9DYXB0Y2hhRm9ybWF0ZS9DYXB0Y2hhUmVzb3VyY2VzLmpzJztcbmNvbnN0IFZBTElEQVRJT05fU0NSSVBUX1NSQyA9ICdodHRwczovL2VtYmVkLm15Y3liZXJzaWFyYS5jb20vQ2FwdGNoYUZvcm1hdGUvU2lhcmFTaGllbGRfVmFsaWRhdGlvbi5qcyc7XG5jb25zdCBDQVBUQ0hBX1JFQURZX1RJTUVPVVRfTVMgPSA4MDAwO1xuXG5mdW5jdGlvbiBlbnN1cmVBY2Nlc3NpYmlsaXR5UG9wdXBBbGlhc2VzKCk6IHZvaWQge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBhbGlhc05hbWVzID0gW1xuICAgICdSZW1vdmVBY2Nlc2liaWxpdHlQb3B1cCcsXG4gICAgJ19SZW1vdmVBY2Nlc2liaWxpdHlQb3B1cCcsXG4gICAgJ1JlbW92ZUFjY2VzaWJsaXR5UG9wdXAnLFxuICAgICdfUmVtb3ZlQWNjZXNpYmxpdHlQb3B1cCcsXG4gIF0gYXMgY29uc3Q7XG5cbiAgY29uc3QgZXhpc3RpbmcgPSBhbGlhc05hbWVzXG4gICAgLm1hcCgobmFtZSkgPT4gZ1tuYW1lXSlcbiAgICAuZmluZCgodmFsdWUpOiB2YWx1ZSBpcyAoKSA9PiB2b2lkID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyk7XG5cbiAgY29uc3Qgc3RhYmxlRm4gPSBleGlzdGluZyA/PyAoKCkgPT4gdW5kZWZpbmVkKTtcbiAgZm9yIChjb25zdCBuYW1lIG9mIGFsaWFzTmFtZXMpIHtcbiAgICBnW25hbWVdID0gc3RhYmxlRm47XG4gIH1cbn1cblxuZnVuY3Rpb24gcnVuSW5Sb290Wm9uZTxUPihmbjogKCkgPT4gVCk6IFQge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHsgWm9uZT86IHsgcm9vdD86IHsgcnVuPzogPFU+KGNiOiAoKSA9PiBVKSA9PiBVIH0gfSB9O1xuICBjb25zdCB6b25lUm9vdFJ1biA9IGcuWm9uZT8ucm9vdD8ucnVuO1xuICBpZiAodHlwZW9mIHpvbmVSb290UnVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHpvbmVSb290UnVuLmNhbGwoZy5ab25lPy5yb290LCBmbikgYXMgVDtcbiAgfVxuICByZXR1cm4gZm4oKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTaWFyYVNoaWVsZEluaXRPcHRpb25zIHtcbiAgLyoqIFNpYXJhU2hpZWxkIHB1YmxpYyBrZXkuIFVzZSBcIlRFU1QtQ1lCRVJTSUFSQVwiIGZvciBzdGFnaW5nL2RldmVsb3BtZW50LiAqL1xuICBwdWJsaWNLZXk6IHN0cmluZztcbiAgLyoqIExvYWRzIGpRdWVyeSBiZWZvcmUgU2lhcmFTaGllbGQgc2NyaXB0LiBEZWZhdWx0IGlzIHRydWUgZm9yIGVhc2llciBpbnRlZ3JhdGlvbi4gU2V0IHRvIGZhbHNlIG9ubHkgaWYgeW91ciBwYWdlIGFscmVhZHkgaW5jbHVkZXMgalF1ZXJ5LiAqL1xuICBsb2FkSlF1ZXJ5PzogYm9vbGVhbjtcbiAgLyoqIENTUCBub25jZSBmb3Igc3RyaWN0IHBvbGljaWVzIChgc2NyaXB0LXNyYyAnbm9uY2UtLi4uJ2ApLiBQYWlyIHdpdGggYGdldFNpYXJhU2hpZWxkQ3NwUG9saWN5KClgLiAqL1xuICBjc3BOb25jZT86IHN0cmluZztcbiAgLyoqIFNldCB0cnVlIG9ubHkgd2hlbiBhY3RpdmVseSBkZWJ1Z2dpbmcgdmVuZG9yL3J1bnRpbWUgaW50ZXJuYWxzIGluIGJyb3dzZXIgY29uc29sZS4gKi9cbiAgYWxsb3dWZW5kb3JDb25zb2xlTG9ncz86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpYXJhLXNoaWVsZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cIlNpYXJhU2hpZWxkXCI+PC9kaXY+YCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgU2lhcmFTaGllbGRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgcHVibGljS2V5ITogc3RyaW5nO1xuICBASW5wdXQoKSBsb2FkSlF1ZXJ5ID0gdHJ1ZTtcbiAgQElucHV0KCkgY3NwTm9uY2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFsbG93VmVuZG9yQ29uc29sZUxvZ3MgPSBmYWxzZTtcblxuICAvKipcbiAgICogRW1pdHMgdGhlIGN1cnJlbnQgYEN5YmVyU2lhcmFUb2tlbmAgcmlnaHQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGBjaGVja0NhcHRjaGEoKWAuXG4gICAqL1xuICBAT3V0cHV0KCkgdG9rZW4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBwcml2YXRlIGluaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBob3N0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvYWRlcjogU2lhcmFTaGllbGRMb2FkZXJTZXJ2aWNlLFxuICApIHt9XG5cbiAgYXN5bmMgbmdBZnRlclZpZXdJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuaW5pdCh7XG4gICAgICBwdWJsaWNLZXk6IHRoaXMucHVibGljS2V5LFxuICAgICAgbG9hZEpRdWVyeTogdGhpcy5sb2FkSlF1ZXJ5LFxuICAgICAgY3NwTm9uY2U6IHRoaXMuY3NwTm9uY2UsXG4gICAgICBhbGxvd1ZlbmRvckNvbnNvbGVMb2dzOiB0aGlzLmFsbG93VmVuZG9yQ29uc29sZUxvZ3MsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBpbml0KG9wdGlvbnM6IFNpYXJhU2hpZWxkSW5pdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5pbml0aWFsaXplZCkgcmV0dXJuO1xuXG4gICAgLy8gRW5zdXJlIHRoZSBob3N0IGVsZW1lbnQgaXMgaW4gRE9NIGJlZm9yZSBzY3JpcHRzIHJ1bi5cbiAgICB2b2lkIHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50O1xuICAgIGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQoKTtcblxuICAgIGlmICghb3B0aW9ucy5wdWJsaWNLZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2lhcmFTaGllbGRDb21wb25lbnQ6IHB1YmxpY0tleSBpcyByZXF1aXJlZC4nKTtcbiAgICB9XG4gICAgY29uc3QgY3NwTm9uY2UgPSBwcmVwYXJlU2NyaXB0Tm9uY2UodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudCwgb3B0aW9ucy5jc3BOb25jZSk7XG5cbiAgICBpZiAoKG9wdGlvbnMubG9hZEpRdWVyeSA/PyB0cnVlKSAmJiAhdGhpcy5pc0pRdWVyeUFscmVhZHlBdmFpbGFibGUoKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkZXIubG9hZFNjcmlwdChKUVVFUllfRkFMTEJBQ0tfU1JDLCB7IG5vbmNlOiBjc3BOb25jZSB9KTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmxvYWRlci5sb2FkU2NyaXB0KENBUFRDSEFfU0NSSVBUX1NSQywge1xuICAgICAgbm9uY2U6IGNzcE5vbmNlLFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMubG9hZGVyLmxvYWRTY3JpcHQoVkFMSURBVElPTl9TQ1JJUFRfU1JDLCB7XG4gICAgICBub25jZTogY3NwTm9uY2UsXG4gICAgfSk7XG5cbiAgICBjb25zdCBnID0gZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCk7XG4gICAgZW5zdXJlQWNjZXNzaWJpbGl0eVBvcHVwQWxpYXNlcygpO1xuICAgIHRoaXMucHJldmVudER1cGxpY2F0ZVZhbGlkYXRpb25Cb290c3RyYXAoZyk7XG4gICAgY29uc3QgaW5pdENhcHRjaGFGbiA9IGdldEluaXRDYXB0Y2hhRm4oZyk7XG4gICAgaWYgKCFpbml0Q2FwdGNoYUZuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdTaWFyYVNoaWVsZDogSW5pdENhcHRjaGEoKSBpcyBub3QgYXZhaWxhYmxlIGFmdGVyIGxvYWRpbmcgc2NyaXB0cy4gQ2hlY2sgd2hldGhlciBDU1AgYmxvY2tlZCB2ZW5kb3Igc2NyaXB0cyBvciBpbmxpbmUgZXhlY3V0aW9uLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5hbGxvd1ZlbmRvckNvbnNvbGVMb2dzKSB7XG4gICAgICBzdXBwcmVzc1ZlbmRvckNvbnNvbGVXaW5kb3coKTtcbiAgICAgIGluc3RhbGxWZW5kb3JSdW50aW1lRXJyb3JTdXBwcmVzc2lvbigpO1xuICAgIH1cbiAgICBydW5JblJvb3Rab25lKCgpID0+IGluaXRDYXB0Y2hhRm4ob3B0aW9ucy5wdWJsaWNLZXkpKTtcbiAgICBhd2FpdCB0aGlzLndhaXRGb3JDaGVja0NhcHRjaGFBcGkoKTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3QgcHJlbG9hZGVkIGpRdWVyeSBmcm9tIGdsb2JhbCBvYmplY3Qgb3IgYW4gZXhpc3Rpbmcgc2NyaXB0IHRhZy5cbiAgICovXG4gIHByaXZhdGUgaXNKUXVlcnlBbHJlYWR5QXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGcgPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKTtcbiAgICBpZiAodHlwZW9mIGcualF1ZXJ5ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBnLiQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nSnF1ZXJ5U2NyaXB0ID0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50PihcbiAgICAgICdzY3JpcHRbc3JjKj1cImpxdWVyeVwiXScsXG4gICAgKTtcbiAgICByZXR1cm4gQm9vbGVhbihleGlzdGluZ0pxdWVyeVNjcmlwdCk7XG4gIH1cblxuICBwcml2YXRlIHByZXZlbnREdXBsaWNhdGVWYWxpZGF0aW9uQm9vdHN0cmFwKGc6IFJldHVyblR5cGU8dHlwZW9mIGdldFNpYXJhU2hpZWxkR2xvYmFscz4pOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5hbEFwcGVuZFZhbGlkYXRpb24gPSBnLkFwcGVuZFZhbGlkYXRpb25KUztcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsQXBwZW5kVmFsaWRhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGcuQXBwZW5kVmFsaWRhdGlvbkpTID0gKCkgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFNjcmlwdEVsZW1lbnQ+KFxuICAgICAgICBgc2NyaXB0W3NyYz1cIiR7VkFMSURBVElPTl9TQ1JJUFRfU1JDfVwiXWAsXG4gICAgICApO1xuICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luYWxBcHBlbmRWYWxpZGF0aW9uKCk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckNoZWNrQ2FwdGNoYUFwaSh0aW1lb3V0TXMgPSBDQVBUQ0hBX1JFQURZX1RJTUVPVVRfTVMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDwgdGltZW91dE1zKSB7XG4gICAgICBpZiAoZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCkuQ2hlY2tDYXB0Y2hhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpYXJhU2hpZWxkOiBDaGVja0NhcHRjaGEoKSB3YXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGltZW91dC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gQ1NQIGJsb2NrcyB0aGUgY2FwdGNoYSBydW50aW1lLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxzIHRoZSBnbG9iYWwgYENoZWNrQ2FwdGNoYSgpYCBmcm9tIFNpYXJhU2hpZWxkIHNjcmlwdC5cbiAgICogUmV0dXJucyB0cnVlIHdoZW4gY2FwdGNoYSBpcyB2YWxpZDsgZW1pdHMgdG9rZW4gaWYgYXZhaWxhYmxlLlxuICAgKi9cbiAgY2hlY2tDYXB0Y2hhKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGcgPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKTtcbiAgICBpZiAoIWcuQ2hlY2tDYXB0Y2hhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpYXJhU2hpZWxkOiBDaGVja0NhcHRjaGEoKSBpcyBub3QgYXZhaWxhYmxlLiBEaWQgaW5pdCgpIHJ1biwgYW5kIGlzIENTUCBhbGxvd2luZyB0aGUgY2FwdGNoYSBzY3JpcHRzPycpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nVG9rZW4gPSB0eXBlb2YgZy5DeWJlclNpYXJhVG9rZW4gPT09ICdzdHJpbmcnICYmIGcuQ3liZXJTaWFyYVRva2VuLmxlbmd0aCA+IDAgPyBnLkN5YmVyU2lhcmFUb2tlbiA6IHVuZGVmaW5lZDtcbiAgICBpZiAoZXhpc3RpbmdUb2tlbikge1xuICAgICAgdGhpcy50b2tlbi5lbWl0KGV4aXN0aW5nVG9rZW4pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmFsbG93VmVuZG9yQ29uc29sZUxvZ3MpIHtcbiAgICAgIHN1cHByZXNzVmVuZG9yQ29uc29sZVdpbmRvdygpO1xuICAgIH1cbiAgICBjb25zdCBvayA9IGcuQ2hlY2tDYXB0Y2hhKCk7XG4gICAgaWYgKG9rICYmIHR5cGVvZiBnLkN5YmVyU2lhcmFUb2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMudG9rZW4uZW1pdChnLkN5YmVyU2lhcmFUb2tlbik7XG4gICAgfVxuICAgIHJldHVybiBvaztcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3luYy1mcmllbmRseSBjYXB0Y2hhIHZhbGlkYXRpb24gdG8gYXZvaWQgZmlyc3QtY2xpY2sgdGltaW5nIGlzc3Vlcy5cbiAgICogUGVyZm9ybXMgb25lIHZhbGlkYXRpb24gY2FsbCBhbmQgd2FpdHMgZm9yIHRva2VuIHByb3BhZ2F0aW9uLlxuICAgKi9cbiAgYXN5bmMgY2hlY2tDYXB0Y2hhQXN5bmMob3B0aW9ucz86IHsgdGltZW91dE1zPzogbnVtYmVyOyBwb2xsSW50ZXJ2YWxNcz86IG51bWJlcjsgYmVmb3JlQ2hlY2tEZWxheU1zPzogbnVtYmVyIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB0aW1lb3V0TXMgPSBvcHRpb25zPy50aW1lb3V0TXMgPz8gMjAwMDtcbiAgICBjb25zdCBwb2xsSW50ZXJ2YWxNcyA9IG9wdGlvbnM/LnBvbGxJbnRlcnZhbE1zID8/IDEyMDtcbiAgICBjb25zdCBiZWZvcmVDaGVja0RlbGF5TXMgPSBvcHRpb25zPy5iZWZvcmVDaGVja0RlbGF5TXMgPz8gMTQwO1xuICAgIGNvbnN0IGV4aXN0aW5nVG9rZW4gPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKS5DeWJlclNpYXJhVG9rZW47XG4gICAgaWYgKHR5cGVvZiBleGlzdGluZ1Rva2VuID09PSAnc3RyaW5nJyAmJiBleGlzdGluZ1Rva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMudG9rZW4uZW1pdChleGlzdGluZ1Rva2VuKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBiZWZvcmVDaGVja0RlbGF5TXMpKTtcbiAgICBjb25zdCBvayA9IHRoaXMuY2hlY2tDYXB0Y2hhKCk7XG4gICAgaWYgKCFvaykgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICAgIGlmICh0eXBlb2YgZy5DeWJlclNpYXJhVG9rZW4gPT09ICdzdHJpbmcnICYmIGcuQ3liZXJTaWFyYVRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydGVkQXQgPCB0aW1lb3V0TXMpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHBvbGxJbnRlcnZhbE1zKSk7XG4gICAgICBjb25zdCB0b2tlbiA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpLkN5YmVyU2lhcmFUb2tlbjtcbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnICYmIHRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy50b2tlbi5lbWl0KHRva2VuKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuIl19
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3NpYXJhc2hpZWxkLXdvcmtzcGFjZS9zcmMvbGliL3NpYXJhLXNoaWVsZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakYsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0csT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQUVuRixNQUFNLG1CQUFtQixHQUFHLGtFQUFrRSxDQUFDO0FBQy9GLE1BQU0sa0JBQWtCLEdBQUcsc0VBQXNFLENBQUM7QUFDbEcsTUFBTSxxQkFBcUIsR0FBRyx5RUFBeUUsQ0FBQztBQUN4RyxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQztBQUV0QyxTQUFTLCtCQUErQjtJQUN0QyxNQUFNLENBQUMsR0FBRyxVQUF5RCxDQUFDO0lBQ3BFLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLHlCQUF5QjtRQUN6QiwwQkFBMEI7UUFDMUIsd0JBQXdCO1FBQ3hCLHlCQUF5QjtLQUNqQixDQUFDO0lBRVgsTUFBTSxRQUFRLEdBQUcsVUFBVTtTQUN4QixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN0QixJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQXVCLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FB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Q0FBQztZQUNwRSxNQUFNLEtBQUssR0FBRyxxQkFBcUIsRUFBRSxDQUFDLGVBQWUsQ0FBQztZQUN0RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzt3R0FoTVUsb0JBQW9COzRGQUFwQixvQkFBb0IsMk9BSHJCLGlDQUFpQzs7NEZBR2hDLG9CQUFvQjtrQkFOaEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxpQ0FBaUM7b0JBQzNDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2lCQUN0QztzSEFFNEIsU0FBUztzQkFBbkMsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBS0ksS0FBSztzQkFBZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaWFyYVNoaWVsZExvYWRlclNlcnZpY2UgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC1sb2FkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRJbml0Q2FwdGNoYUZuLCBnZXRTaWFyYVNoaWVsZEdsb2JhbHMgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC5nbG9iYWxzJztcbmltcG9ydCB7IGluc3RhbGxWZW5kb3JSdW50aW1lRXJyb3JTdXBwcmVzc2lvbiwgc3VwcHJlc3NWZW5kb3JDb25zb2xlV2luZG93IH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtbG9nLXV0aWxzJztcbmltcG9ydCB7IGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC1zdWJtaXQtZ3VhcmQnO1xuaW1wb3J0IHsgaW5zdGFsbFZlbmRvckNoYWxsZW5nZVJ1bnRpbWVQYXRjaCB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLXZlbmRvci1ydW50aW1lJztcblxuY29uc3QgSlFVRVJZX0ZBTExCQUNLX1NSQyA9ICdodHRwczovL2VtYmVkY2RuLm15Y3liZXJzaWFyYS5jb20vY2FwY2hhLXRlbXBsZS9qcy9qcXVlcnkubWluLmpzJztcbmNvbnN0IENBUFRDSEFfU0NSSVBUX1NSQyA9ICdodHRwczovL2VtYmVkY2RuLm15Y3liZXJzaWFyYS5jb20vQ2FwdGNoYUZvcm1hdGUvQ2FwdGNoYVJlc291cmNlcy5qcyc7XG5jb25zdCBWQUxJREFUSU9OX1NDUklQVF9TUkMgPSAnaHR0cHM6Ly9lbWJlZC5teWN5YmVyc2lhcmEuY29tL0NhcHRjaGFGb3JtYXRlL1NpYXJhU2hpZWxkX1ZhbGlkYXRpb24uanMnO1xuY29uc3QgQ0FQVENIQV9SRUFEWV9USU1FT1VUX01TID0gODAwMDtcblxuZnVuY3Rpb24gZW5zdXJlQWNjZXNzaWJpbGl0eVBvcHVwQWxpYXNlcygpOiB2b2lkIHtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgYWxpYXNOYW1lcyA9IFtcbiAgICAnUmVtb3ZlQWNjZXNpYmlsaXR5UG9wdXAnLFxuICAgICdfUmVtb3ZlQWNjZXNpYmlsaXR5UG9wdXAnLFxuICAgICdSZW1vdmVBY2Nlc2libGl0eVBvcHVwJyxcbiAgICAnX1JlbW92ZUFjY2VzaWJsaXR5UG9wdXAnLFxuICBdIGFzIGNvbnN0O1xuXG4gIGNvbnN0IGV4aXN0aW5nID0gYWxpYXNOYW1lc1xuICAgIC5tYXAoKG5hbWUpID0+IGdbbmFtZV0pXG4gICAgLmZpbmQoKHZhbHVlKTogdmFsdWUgaXMgKCkgPT4gdm9pZCA9PiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpO1xuXG4gIGNvbnN0IHN0YWJsZUZuID0gZXhpc3RpbmcgPz8gKCgpID0+IHVuZGVmaW5lZCk7XG4gIGZvciAoY29uc3QgbmFtZSBvZiBhbGlhc05hbWVzKSB7XG4gICAgZ1tuYW1lXSA9IHN0YWJsZUZuO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJ1bkluUm9vdFpvbmU8VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7IFpvbmU/OiB7IHJvb3Q/OiB7IHJ1bj86IDxVPihjYjogKCkgPT4gVSkgPT4gVSB9IH0gfTtcbiAgY29uc3Qgem9uZVJvb3RSdW4gPSBnLlpvbmU/LnJvb3Q/LnJ1bjtcbiAgaWYgKHR5cGVvZiB6b25lUm9vdFJ1biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB6b25lUm9vdFJ1bi5jYWxsKGcuWm9uZT8ucm9vdCwgZm4pIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIGZuKCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lhcmFTaGllbGRJbml0T3B0aW9ucyB7XG4gIC8qKiBTaWFyYVNoaWVsZCBwdWJsaWMga2V5LiBVc2UgXCJURVNULUNZQkVSU0lBUkFcIiBmb3Igc3RhZ2luZy9kZXZlbG9wbWVudC4gKi9cbiAgcHVibGljS2V5OiBzdHJpbmc7XG4gIC8qKiBMb2FkcyBqUXVlcnkgYmVmb3JlIFNpYXJhU2hpZWxkIHNjcmlwdC4gRGVmYXVsdCBpcyB0cnVlIGZvciBlYXNpZXIgaW50ZWdyYXRpb24uIFNldCB0byBmYWxzZSBvbmx5IGlmIHlvdXIgcGFnZSBhbHJlYWR5IGluY2x1ZGVzIGpRdWVyeS4gKi9cbiAgbG9hZEpRdWVyeT86IGJvb2xlYW47XG4gIC8qKiBSZXNlcnZlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gQ1NQIG5vbmNlIGlzIGlnbm9yZWQgaW4gdGhpcyB0ZXN0IHZhcmlhbnQuICovXG4gIGNzcE5vbmNlPzogc3RyaW5nO1xuICAvKiogU2V0IHRydWUgb25seSB3aGVuIGFjdGl2ZWx5IGRlYnVnZ2luZyB2ZW5kb3IvcnVudGltZSBpbnRlcm5hbHMgaW4gYnJvd3NlciBjb25zb2xlLiAqL1xuICBhbGxvd1ZlbmRvckNvbnNvbGVMb2dzPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2lhcmEtc2hpZWxkJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IGA8ZGl2IGNsYXNzPVwiU2lhcmFTaGllbGRcIj48L2Rpdj5gLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBTaWFyYVNoaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBwdWJsaWNLZXkhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGxvYWRKUXVlcnkgPSB0cnVlO1xuICBASW5wdXQoKSBjc3BOb25jZT86IHN0cmluZztcbiAgQElucHV0KCkgYWxsb3dWZW5kb3JDb25zb2xlTG9ncyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgY3VycmVudCBgQ3liZXJTaWFyYVRva2VuYCByaWdodCBhZnRlciBhIHN1Y2Nlc3NmdWwgYGNoZWNrQ2FwdGNoYSgpYC5cbiAgICovXG4gIEBPdXRwdXQoKSB0b2tlbiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3Q6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9hZGVyOiBTaWFyYVNoaWVsZExvYWRlclNlcnZpY2UsXG4gICkge31cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5pbml0KHtcbiAgICAgIHB1YmxpY0tleTogdGhpcy5wdWJsaWNLZXksXG4gICAgICBsb2FkSlF1ZXJ5OiB0aGlzLmxvYWRKUXVlcnksXG4gICAgICBjc3BOb25jZTogdGhpcy5jc3BOb25jZSxcbiAgICAgIGFsbG93VmVuZG9yQ29uc29sZUxvZ3M6IHRoaXMuYWxsb3dWZW5kb3JDb25zb2xlTG9ncyxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGluaXQob3B0aW9uczogU2lhcmFTaGllbGRJbml0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSByZXR1cm47XG5cbiAgICAvLyBFbnN1cmUgdGhlIGhvc3QgZWxlbWVudCBpcyBpbiBET00gYmVmb3JlIHNjcmlwdHMgcnVuLlxuICAgIHZvaWQgdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaW5zdGFsbENhcHRjaGFTdWJtaXRHdWFyZCgpO1xuXG4gICAgaWYgKCFvcHRpb25zLnB1YmxpY0tleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWFyYVNoaWVsZENvbXBvbmVudDogcHVibGljS2V5IGlzIHJlcXVpcmVkLicpO1xuICAgIH1cbiAgICBpZiAoKG9wdGlvbnMubG9hZEpRdWVyeSA/PyB0cnVlKSAmJiAhdGhpcy5pc0pRdWVyeUFscmVhZHlBdmFpbGFibGUoKSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkZXIubG9hZFNjcmlwdChKUVVFUllfRkFMTEJBQ0tfU1JDKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmxvYWRlci5sb2FkU2NyaXB0KENBUFRDSEFfU0NSSVBUX1NSQyk7XG4gICAgYXdhaXQgdGhpcy5sb2FkZXIubG9hZFNjcmlwdChWQUxJREFUSU9OX1NDUklQVF9TUkMpO1xuXG4gICAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICAgIGVuc3VyZUFjY2Vzc2liaWxpdHlQb3B1cEFsaWFzZXMoKTtcbiAgICB0aGlzLnByZXZlbnREdXBsaWNhdGVWYWxpZGF0aW9uQm9vdHN0cmFwKGcpO1xuICAgIGluc3RhbGxWZW5kb3JDaGFsbGVuZ2VSdW50aW1lUGF0Y2goKTtcbiAgICBjb25zdCBpbml0Q2FwdGNoYUZuID0gZ2V0SW5pdENhcHRjaGFGbihnKTtcbiAgICBpZiAoIWluaXRDYXB0Y2hhRm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1NpYXJhU2hpZWxkOiBJbml0Q2FwdGNoYSgpIGlzIG5vdCBhdmFpbGFibGUgYWZ0ZXIgbG9hZGluZyBzY3JpcHRzLicsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5hbGxvd1ZlbmRvckNvbnNvbGVMb2dzKSB7XG4gICAgICBzdXBwcmVzc1ZlbmRvckNvbnNvbGVXaW5kb3coKTtcbiAgICAgIGluc3RhbGxWZW5kb3JSdW50aW1lRXJyb3JTdXBwcmVzc2lvbigpO1xuICAgIH1cbiAgICBydW5JblJvb3Rab25lKCgpID0+IGluaXRDYXB0Y2hhRm4ob3B0aW9ucy5wdWJsaWNLZXkpKTtcbiAgICBhd2FpdCB0aGlzLndhaXRGb3JDaGVja0NhcHRjaGFBcGkoKTtcbiAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3QgcHJlbG9hZGVkIGpRdWVyeSBmcm9tIGdsb2JhbCBvYmplY3Qgb3IgYW4gZXhpc3Rpbmcgc2NyaXB0IHRhZy5cbiAgICovXG4gIHByaXZhdGUgaXNKUXVlcnlBbHJlYWR5QXZhaWxhYmxlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGcgPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKTtcbiAgICBpZiAodHlwZW9mIGcualF1ZXJ5ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBnLiQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGV4aXN0aW5nSnF1ZXJ5U2NyaXB0ID0gdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50PihcbiAgICAgICdzY3JpcHRbc3JjKj1cImpxdWVyeVwiXScsXG4gICAgKTtcbiAgICByZXR1cm4gQm9vbGVhbihleGlzdGluZ0pxdWVyeVNjcmlwdCk7XG4gIH1cblxuICBwcml2YXRlIHByZXZlbnREdXBsaWNhdGVWYWxpZGF0aW9uQm9vdHN0cmFwKGc6IFJldHVyblR5cGU8dHlwZW9mIGdldFNpYXJhU2hpZWxkR2xvYmFscz4pOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5hbEFwcGVuZFZhbGlkYXRpb24gPSBnLkFwcGVuZFZhbGlkYXRpb25KUztcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsQXBwZW5kVmFsaWRhdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGcuQXBwZW5kVmFsaWRhdGlvbkpTID0gKCkgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmhvc3QubmF0aXZlRWxlbWVudC5vd25lckRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFNjcmlwdEVsZW1lbnQ+KFxuICAgICAgICBgc2NyaXB0W3NyYz1cIiR7VkFMSURBVElPTl9TQ1JJUFRfU1JDfVwiXWAsXG4gICAgICApO1xuICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luYWxBcHBlbmRWYWxpZGF0aW9uKCk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEZvckNoZWNrQ2FwdGNoYUFwaSh0aW1lb3V0TXMgPSBDQVBUQ0hBX1JFQURZX1RJTUVPVVRfTVMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDwgdGltZW91dE1zKSB7XG4gICAgICBpZiAoZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCkuQ2hlY2tDYXB0Y2hhKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpYXJhU2hpZWxkOiBDaGVja0NhcHRjaGEoKSB3YXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGltZW91dC4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyB0aGUgZ2xvYmFsIGBDaGVja0NhcHRjaGEoKWAgZnJvbSBTaWFyYVNoaWVsZCBzY3JpcHQuXG4gICAqIFJldHVybnMgdHJ1ZSB3aGVuIGNhcHRjaGEgaXMgdmFsaWQ7IGVtaXRzIHRva2VuIGlmIGF2YWlsYWJsZS5cbiAgICovXG4gIGNoZWNrQ2FwdGNoYSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBnID0gZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCk7XG4gICAgaWYgKCFnLkNoZWNrQ2FwdGNoYSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWFyYVNoaWVsZDogQ2hlY2tDYXB0Y2hhKCkgaXMgbm90IGF2YWlsYWJsZS4gRGlkIGluaXQoKSBydW4/Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdUb2tlbiA9IHR5cGVvZiBnLkN5YmVyU2lhcmFUb2tlbiA9PT0gJ3N0cmluZycgJiYgZy5DeWJlclNpYXJhVG9rZW4ubGVuZ3RoID4gMCA/IGcuQ3liZXJTaWFyYVRva2VuIDogdW5kZWZpbmVkO1xuICAgIGlmIChleGlzdGluZ1Rva2VuKSB7XG4gICAgICB0aGlzLnRva2VuLmVtaXQoZXhpc3RpbmdUb2tlbik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuYWxsb3dWZW5kb3JDb25zb2xlTG9ncykge1xuICAgICAgc3VwcHJlc3NWZW5kb3JDb25zb2xlV2luZG93KCk7XG4gICAgfVxuICAgIGNvbnN0IG9rID0gZy5DaGVja0NhcHRjaGEoKTtcbiAgICBpZiAob2sgJiYgdHlwZW9mIGcuQ3liZXJTaWFyYVRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy50b2tlbi5lbWl0KGcuQ3liZXJTaWFyYVRva2VuKTtcbiAgICB9XG4gICAgcmV0dXJuIG9rO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzeW5jLWZyaWVuZGx5IGNhcHRjaGEgdmFsaWRhdGlvbiB0byBhdm9pZCBmaXJzdC1jbGljayB0aW1pbmcgaXNzdWVzLlxuICAgKiBQZXJmb3JtcyBvbmUgdmFsaWRhdGlvbiBjYWxsIGFuZCB3YWl0cyBmb3IgdG9rZW4gcHJvcGFnYXRpb24uXG4gICAqL1xuICBhc3luYyBjaGVja0NhcHRjaGFBc3luYyhvcHRpb25zPzoge1xuICAgIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgICBiZWZvcmVDaGVja0RlbGF5TXM/OiBudW1iZXI7XG4gICAgcmV0cnlPbkZhbHNlTXM/OiBudW1iZXI7XG4gICAgZmFsc2VSZXN1bHRUb2tlbldhaXRNcz86IG51bWJlcjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRpbWVvdXRNcyA9IG9wdGlvbnM/LnRpbWVvdXRNcyA/PyAyMDAwO1xuICAgIGNvbnN0IHBvbGxJbnRlcnZhbE1zID0gb3B0aW9ucz8ucG9sbEludGVydmFsTXMgPz8gMTIwO1xuICAgIGNvbnN0IGJlZm9yZUNoZWNrRGVsYXlNcyA9IG9wdGlvbnM/LmJlZm9yZUNoZWNrRGVsYXlNcyA/PyAxNDA7XG4gICAgY29uc3QgcmV0cnlPbkZhbHNlTXMgPSBvcHRpb25zPy5yZXRyeU9uRmFsc2VNcyA/PyAwO1xuICAgIGNvbnN0IGZhbHNlUmVzdWx0VG9rZW5XYWl0TXMgPSBvcHRpb25zPy5mYWxzZVJlc3VsdFRva2VuV2FpdE1zID8/IDkwMDtcbiAgICBjb25zdCBleGlzdGluZ1Rva2VuID0gZ2V0U2lhcmFTaGllbGRHbG9iYWxzKCkuQ3liZXJTaWFyYVRva2VuO1xuICAgIGlmICh0eXBlb2YgZXhpc3RpbmdUb2tlbiA9PT0gJ3N0cmluZycgJiYgZXhpc3RpbmdUb2tlbi5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnRva2VuLmVtaXQoZXhpc3RpbmdUb2tlbik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgYmVmb3JlQ2hlY2tEZWxheU1zKSk7XG4gICAgbGV0IG9rID0gdGhpcy5jaGVja0NhcHRjaGEoKTtcbiAgICAvLyBPcHRpb25hbCByZXRyeSBmb3IgaW50ZWdyYXRpb25zIHRoYXQgb2JzZXJ2ZSBsYXRlIHZlbmRvci1zdGF0ZSBzZXR0bGluZy5cbiAgICBpZiAoIW9rICYmIHJldHJ5T25GYWxzZU1zID4gMCkge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmV0cnlPbkZhbHNlTXMpKTtcbiAgICAgIG9rID0gdGhpcy5jaGVja0NhcHRjaGEoKTtcbiAgICB9XG4gICAgaWYgKCFvaykge1xuICAgICAgLy8gU29tZSB2ZW5kb3IgZmxvd3MgcmV0dXJuIGZhbHNlIGZpcnN0LCB0aGVuIHNldCB0b2tlbiBzaG9ydGx5IGFmdGVyLlxuICAgICAgY29uc3QgZmFsc2VTdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICAgICAgd2hpbGUgKERhdGUubm93KCkgLSBmYWxzZVN0YXJ0ZWRBdCA8IGZhbHNlUmVzdWx0VG9rZW5XYWl0TXMpIHtcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcG9sbEludGVydmFsTXMpKTtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKS5DeWJlclNpYXJhVG9rZW47XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnICYmIHRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0aGlzLnRva2VuLmVtaXQodG9rZW4pO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICAgIGlmICh0eXBlb2YgZy5DeWJlclNpYXJhVG9rZW4gPT09ICdzdHJpbmcnICYmIGcuQ3liZXJTaWFyYVRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgd2hpbGUgKERhdGUubm93KCkgLSBzdGFydGVkQXQgPCB0aW1lb3V0TXMpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHBvbGxJbnRlcnZhbE1zKSk7XG4gICAgICBjb25zdCB0b2tlbiA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpLkN5YmVyU2lhcmFUb2tlbjtcbiAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnICYmIHRva2VuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy50b2tlbi5lbWl0KHRva2VuKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuIl19
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { getInitCaptchaFn, getSiaraShieldGlobals } from './siara-shield.globals';
|
|
2
2
|
import { installVendorRuntimeErrorSuppression, suppressVendorConsoleWindow } from './siara-shield-log-utils';
|
|
3
|
-
import { loadScript
|
|
3
|
+
import { loadScript } from './siara-shield-script-utils';
|
|
4
4
|
import { installCaptchaSubmitGuard } from './siara-shield-submit-guard';
|
|
5
|
+
import { installVendorChallengeRuntimePatch } from './siara-shield-vendor-runtime';
|
|
5
6
|
const JQUERY_FALLBACK_SRC = 'https://embedcdn.mycybersiara.com/capcha-temple/js/jquery.min.js';
|
|
6
7
|
const CAPTCHA_SCRIPT_SRC = 'https://embedcdn.mycybersiara.com/CaptchaFormate/CaptchaResources.js';
|
|
7
8
|
const VALIDATION_SCRIPT_SRC = 'https://embed.mycybersiara.com/CaptchaFormate/SiaraShield_Validation.js';
|
|
@@ -61,7 +62,7 @@ async function waitForCheckCaptchaApi(timeoutMs = CAPTCHA_READY_TIMEOUT_MS) {
|
|
|
61
62
|
}
|
|
62
63
|
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
63
64
|
}
|
|
64
|
-
throw new Error('SiaraShield: CheckCaptcha() was not available within timeout.
|
|
65
|
+
throw new Error('SiaraShield: CheckCaptcha() was not available within timeout.');
|
|
65
66
|
}
|
|
66
67
|
/**
|
|
67
68
|
* Drop-in initializer for SiaraShield.
|
|
@@ -81,22 +82,18 @@ export async function initSiaraShield(options) {
|
|
|
81
82
|
}
|
|
82
83
|
pending = (async () => {
|
|
83
84
|
installCaptchaSubmitGuard();
|
|
84
|
-
const cspNonce = prepareScriptNonce(document, options.cspNonce);
|
|
85
85
|
if ((options.loadJQuery ?? true) && !isJQueryAlreadyAvailable()) {
|
|
86
|
-
await loadScript(document, JQUERY_FALLBACK_SRC
|
|
86
|
+
await loadScript(document, JQUERY_FALLBACK_SRC);
|
|
87
87
|
}
|
|
88
|
-
await loadScript(document, CAPTCHA_SCRIPT_SRC
|
|
89
|
-
|
|
90
|
-
});
|
|
91
|
-
await loadScript(document, VALIDATION_SCRIPT_SRC, {
|
|
92
|
-
nonce: cspNonce,
|
|
93
|
-
});
|
|
88
|
+
await loadScript(document, CAPTCHA_SCRIPT_SRC);
|
|
89
|
+
await loadScript(document, VALIDATION_SCRIPT_SRC);
|
|
94
90
|
const g = getSiaraShieldGlobals();
|
|
95
91
|
ensureAccessibilityPopupAliases();
|
|
96
92
|
preventDuplicateValidationBootstrap(g);
|
|
93
|
+
installVendorChallengeRuntimePatch();
|
|
97
94
|
const initCaptchaFn = getInitCaptchaFn(g);
|
|
98
95
|
if (!initCaptchaFn) {
|
|
99
|
-
throw new Error('SiaraShield: InitCaptcha() is not available after loading scripts.
|
|
96
|
+
throw new Error('SiaraShield: InitCaptcha() is not available after loading scripts.');
|
|
100
97
|
}
|
|
101
98
|
if (!options.allowVendorConsoleLogs) {
|
|
102
99
|
suppressVendorConsoleWindow();
|
|
@@ -120,7 +117,7 @@ export async function initSiaraShield(options) {
|
|
|
120
117
|
export function checkSiaraShieldCaptcha(options) {
|
|
121
118
|
const g = getSiaraShieldGlobals();
|
|
122
119
|
if (!g.CheckCaptcha) {
|
|
123
|
-
throw new Error('SiaraShield: CheckCaptcha() is not available. Did initSiaraShield() run
|
|
120
|
+
throw new Error('SiaraShield: CheckCaptcha() is not available. Did initSiaraShield() run?');
|
|
124
121
|
}
|
|
125
122
|
const existingToken = typeof g.CyberSiaraToken === 'string' && g.CyberSiaraToken.length > 0 ? g.CyberSiaraToken : undefined;
|
|
126
123
|
if (existingToken) {
|
|
@@ -140,14 +137,31 @@ export async function checkSiaraShieldCaptchaAsync(options) {
|
|
|
140
137
|
const timeoutMs = options?.timeoutMs ?? 1200;
|
|
141
138
|
const pollIntervalMs = options?.pollIntervalMs ?? 120;
|
|
142
139
|
const beforeCheckDelayMs = options?.beforeCheckDelayMs ?? 140;
|
|
140
|
+
const retryOnFalseMs = options?.retryOnFalseMs ?? 0;
|
|
141
|
+
const falseResultTokenWaitMs = options?.falseResultTokenWaitMs ?? 900;
|
|
143
142
|
const existingToken = getSiaraShieldGlobals().CyberSiaraToken;
|
|
144
143
|
if (typeof existingToken === 'string' && existingToken.length > 0) {
|
|
145
144
|
return { ok: true, token: existingToken };
|
|
146
145
|
}
|
|
147
146
|
await new Promise((resolve) => setTimeout(resolve, beforeCheckDelayMs));
|
|
148
|
-
|
|
149
|
-
if (!firstCheck.ok)
|
|
147
|
+
let firstCheck = checkSiaraShieldCaptcha(); // one API call only
|
|
148
|
+
if (!firstCheck.ok && retryOnFalseMs > 0) {
|
|
149
|
+
// Optional retry for integrations that observe late vendor-state settling.
|
|
150
|
+
await new Promise((resolve) => setTimeout(resolve, retryOnFalseMs));
|
|
151
|
+
firstCheck = checkSiaraShieldCaptcha();
|
|
152
|
+
}
|
|
153
|
+
if (!firstCheck.ok) {
|
|
154
|
+
// Some vendor flows return false first, then set token shortly after.
|
|
155
|
+
const falseStartedAt = Date.now();
|
|
156
|
+
while (Date.now() - falseStartedAt < falseResultTokenWaitMs) {
|
|
157
|
+
await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));
|
|
158
|
+
const token = getSiaraShieldGlobals().CyberSiaraToken;
|
|
159
|
+
if (typeof token === 'string' && token.length > 0) {
|
|
160
|
+
return { ok: true, token };
|
|
161
|
+
}
|
|
162
|
+
}
|
|
150
163
|
return firstCheck;
|
|
164
|
+
}
|
|
151
165
|
if (firstCheck.token)
|
|
152
166
|
return firstCheck;
|
|
153
167
|
const startedAt = Date.now();
|
|
@@ -161,4 +175,4 @@ export async function checkSiaraShieldCaptchaAsync(options) {
|
|
|
161
175
|
}
|
|
162
176
|
return { ok: true };
|
|
163
177
|
}
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2lhcmFzaGllbGQtd29ya3NwYWNlL3NyYy9saWIvc2lhcmEtc2hpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV4RSxNQUFNLG1CQUFtQixHQUFHLGtFQUFrRSxDQUFDO0FBQy9GLE1BQU0sa0JBQWtCLEdBQUcsc0VBQXNFLENBQUM7QUFDbEcsTUFBTSxxQkFBcUIsR0FBRyx5RUFBeUUsQ0FBQztBQUN4RyxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQztBQWlCdEMsSUFBSSxPQUFPLEdBQXlCLElBQUksQ0FBQztBQUN6QyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFFeEIsU0FBUywrQkFBK0I7SUFDdEMsTUFBTSxDQUFDLEdBQUcsVUFBeUQsQ0FBQztJQUNwRSxNQUFNLFVBQVUsR0FBRztRQUNqQix5QkFBeUI7UUFDekIsMEJBQTBCO1FBQzFCLHdCQUF3QjtRQUN4Qix5QkFBeUI7S0FDakIsQ0FBQztJQUVYLE1BQU0sUUFBUSxHQUFHLFVBQVU7U0FDeEIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEIsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUF1QixFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFDLENBQUM7SUFFckUsTUFBTSxRQUFRLEdBQUcsUUFBUSxJQUFJ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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldEluaXRDYXB0Y2hhRm4sIGdldFNpYXJhU2hpZWxkR2xvYmFscyB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLmdsb2JhbHMnO1xuaW1wb3J0IHsgaW5zdGFsbFZlbmRvclJ1bnRpbWVFcnJvclN1cHByZXNzaW9uLCBzdXBwcmVzc1ZlbmRvckNvbnNvbGVXaW5kb3cgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC1sb2ctdXRpbHMnO1xuaW1wb3J0IHsgbG9hZFNjcmlwdCwgcHJlcGFyZVNjcmlwdE5vbmNlIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtc2NyaXB0LXV0aWxzJztcbmltcG9ydCB7IGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC1zdWJtaXQtZ3VhcmQnO1xuXG5jb25zdCBKUVVFUllfRkFMTEJBQ0tfU1JDID0gJ2h0dHBzOi8vZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbS9jYXBjaGEtdGVtcGxlL2pzL2pxdWVyeS5taW4uanMnO1xuY29uc3QgQ0FQVENIQV9TQ1JJUFRfU1JDID0gJ2h0dHBzOi8vZW1iZWRjZG4ubXljeWJlcnNpYXJhLmNvbS9DYXB0Y2hhRm9ybWF0ZS9DYXB0Y2hhUmVzb3VyY2VzLmpzJztcbmNvbnN0IFZBTElEQVRJT05fU0NSSVBUX1NSQyA9ICdodHRwczovL2VtYmVkLm15Y3liZXJzaWFyYS5jb20vQ2FwdGNoYUZvcm1hdGUvU2lhcmFTaGllbGRfVmFsaWRhdGlvbi5qcyc7XG5jb25zdCBDQVBUQ0hBX1JFQURZX1RJTUVPVVRfTVMgPSA4MDAwO1xuXG5leHBvcnQgaW50ZXJmYWNlIEluaXRTaWFyYVNoaWVsZE9wdGlvbnMge1xuICAvKiogU2lhcmFTaGllbGQgcHVibGljIGtleS4gVXNlIFwiVEVTVC1DWUJFUlNJQVJBXCIgZm9yIHN0YWdpbmcvZGV2ZWxvcG1lbnQuICovXG4gIHB1YmxpY0tleTogc3RyaW5nO1xuICAvKipcbiAgICogTG9hZHMgalF1ZXJ5IGJlZm9yZSBTaWFyYVNoaWVsZCBzY3JpcHQuXG4gICAqIERlZmF1bHQgaXMgdHJ1ZSBmb3IgZWFzaWVyIGludGVncmF0aW9uLlxuICAgKiBTZXQgdG8gZmFsc2Ugb25seSBpZiB5b3VyIHNpdGUvYXBwIGFscmVhZHkgbG9hZHMgalF1ZXJ5LlxuICAgKi9cbiAgbG9hZEpRdWVyeT86IGJvb2xlYW47XG4gIC8qKiBDU1Agbm9uY2UgZm9yIHN0cmljdCBwb2xpY2llcyAoYHNjcmlwdC1zcmMgJ25vbmNlLS4uLidgKS4gUGFpciB3aXRoIGBnZXRTaWFyYVNoaWVsZENzcFBvbGljeSgpYC4gKi9cbiAgY3NwTm9uY2U/OiBzdHJpbmc7XG4gIC8qKiBTZXQgdHJ1ZSBvbmx5IHdoZW4gYWN0aXZlbHkgZGVidWdnaW5nIHZlbmRvci9ydW50aW1lIGludGVybmFscyBpbiBicm93c2VyIGNvbnNvbGUuICovXG4gIGFsbG93VmVuZG9yQ29uc29sZUxvZ3M/OiBib29sZWFuO1xufVxuXG5sZXQgcGVuZGluZzogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xubGV0IGluaXRpYWxpemVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGVuc3VyZUFjY2Vzc2liaWxpdHlQb3B1cEFsaWFzZXMoKTogdm9pZCB7XG4gIGNvbnN0IGcgPSBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGFsaWFzTmFtZXMgPSBbXG4gICAgJ1JlbW92ZUFjY2VzaWJpbGl0eVBvcHVwJyxcbiAgICAnX1JlbW92ZUFjY2VzaWJpbGl0eVBvcHVwJyxcbiAgICAnUmVtb3ZlQWNjZXNpYmxpdHlQb3B1cCcsXG4gICAgJ19SZW1vdmVBY2Nlc2libGl0eVBvcHVwJyxcbiAgXSBhcyBjb25zdDtcblxuICBjb25zdCBleGlzdGluZyA9IGFsaWFzTmFtZXNcbiAgICAubWFwKChuYW1lKSA9PiBnW25hbWVdKVxuICAgIC5maW5kKCh2YWx1ZSk6IHZhbHVlIGlzICgpID0+IHZvaWQgPT4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKTtcblxuICBjb25zdCBzdGFibGVGbiA9IGV4aXN0aW5nID8/ICgoKSA9PiB1bmRlZmluZWQpO1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgYWxpYXNOYW1lcykge1xuICAgIGdbbmFtZV0gPSBzdGFibGVGbjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0pRdWVyeUFscmVhZHlBdmFpbGFibGUoKTogYm9vbGVhbiB7XG4gIGNvbnN0IGcgPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKTtcbiAgaWYgKHR5cGVvZiBnLmpRdWVyeSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZy4kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBleGlzdGluZ0pxdWVyeVNjcmlwdCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFNjcmlwdEVsZW1lbnQ+KCdzY3JpcHRbc3JjKj1cImpxdWVyeVwiXScpO1xuICByZXR1cm4gQm9vbGVhbihleGlzdGluZ0pxdWVyeVNjcmlwdCk7XG59XG5cbmZ1bmN0aW9uIHJ1bkluUm9vdFpvbmU8VD4oZm46ICgpID0+IFQpOiBUIHtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7IFpvbmU/OiB7IHJvb3Q/OiB7IHJ1bj86IDxVPihjYjogKCkgPT4gVSkgPT4gVSB9IH0gfTtcbiAgY29uc3Qgem9uZVJvb3RSdW4gPSBnLlpvbmU/LnJvb3Q/LnJ1bjtcbiAgaWYgKHR5cGVvZiB6b25lUm9vdFJ1biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB6b25lUm9vdFJ1bi5jYWxsKGcuWm9uZT8ucm9vdCwgZm4pIGFzIFQ7XG4gIH1cbiAgcmV0dXJuIGZuKCk7XG59XG5cbmZ1bmN0aW9uIHByZXZlbnREdXBsaWNhdGVWYWxpZGF0aW9uQm9vdHN0cmFwKGc6IFJldHVyblR5cGU8dHlwZW9mIGdldFNpYXJhU2hpZWxkR2xvYmFscz4pOiB2b2lkIHtcbiAgY29uc3Qgb3JpZ2luYWxBcHBlbmRWYWxpZGF0aW9uID0gZy5BcHBlbmRWYWxpZGF0aW9uSlM7XG4gIGlmICh0eXBlb2Ygb3JpZ2luYWxBcHBlbmRWYWxpZGF0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZy5BcHBlbmRWYWxpZGF0aW9uSlMgPSAoKSA9PiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50Pihgc2NyaXB0W3NyYz1cIiR7VkFMSURBVElPTl9TQ1JJUFRfU1JDfVwiXWApO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG9yaWdpbmFsQXBwZW5kVmFsaWRhdGlvbigpO1xuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiB3YWl0Rm9yQ2hlY2tDYXB0Y2hhQXBpKHRpbWVvdXRNcyA9IENBUFRDSEFfUkVBRFlfVElNRU9VVF9NUyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCA8IHRpbWVvdXRNcykge1xuICAgIGlmIChnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKS5DaGVja0NhcHRjaGEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdTaWFyYVNoaWVsZDogQ2hlY2tDYXB0Y2hhKCkgd2FzIG5vdCBhdmFpbGFibGUgd2l0aGluIHRpbWVvdXQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIENTUCBibG9ja3MgdGhlIGNhcHRjaGEgcnVudGltZS4nKTtcbn1cblxuLyoqXG4gKiBEcm9wLWluIGluaXRpYWxpemVyIGZvciBTaWFyYVNoaWVsZC5cbiAqIC0gTG9hZHMgcmVxdWlyZWQgc2NyaXB0cyAob3B0aW9uYWxseSBqUXVlcnkpXG4gKiAtIENhbGxzIGdsb2JhbCBgaW5pdENhcHRjaGEocHVibGljS2V5KWBcbiAqXG4gKiBSZXF1aXJlbWVudHMgaW4geW91ciBIVE1ML3RlbXBsYXRlOlxuICogLSBZb3UgbXVzdCByZW5kZXI6IGA8ZGl2IGNsYXNzPVwiU2lhcmFTaGllbGRcIj48L2Rpdj5gXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0U2lhcmFTaGllbGQob3B0aW9uczogSW5pdFNpYXJhU2hpZWxkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgaWYgKHBlbmRpbmcpIHJldHVybiBwZW5kaW5nO1xuXG4gIGlmICghb3B0aW9ucz8ucHVibGljS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbml0U2lhcmFTaGllbGQ6IHB1YmxpY0tleSBpcyByZXF1aXJlZC4nKTtcbiAgfVxuXG4gIHBlbmRpbmcgPSAoYXN5bmMgKCkgPT4ge1xuICAgIGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQoKTtcbiAgICBjb25zdCBjc3BOb25jZSA9IHByZXBhcmVTY3JpcHROb25jZShkb2N1bWVudCwgb3B0aW9ucy5jc3BOb25jZSk7XG5cbiAgICBpZiAoKG9wdGlvbnMubG9hZEpRdWVyeSA/PyB0cnVlKSAmJiAhaXNKUXVlcnlBbHJlYWR5QXZhaWxhYmxlKCkpIHtcbiAgICAgIGF3YWl0IGxvYWRTY3JpcHQoZG9jdW1lbnQsIEpRVUVSWV9GQUxMQkFDS19TUkMsIHsgbm9uY2U6IGNzcE5vbmNlIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IGxvYWRTY3JpcHQoZG9jdW1lbnQsIENBUFRDSEFfU0NSSVBUX1NSQywge1xuICAgICAgbm9uY2U6IGNzcE5vbmNlLFxuICAgIH0pO1xuICAgIGF3YWl0IGxvYWRTY3JpcHQoZG9jdW1lbnQsIFZBTElEQVRJT05fU0NSSVBUX1NSQywge1xuICAgICAgbm9uY2U6IGNzcE5vbmNlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICAgIGVuc3VyZUFjY2Vzc2liaWxpdHlQb3B1cEFsaWFzZXMoKTtcbiAgICBwcmV2ZW50RHVwbGljYXRlVmFsaWRhdGlvbkJvb3RzdHJhcChnKTtcbiAgICBjb25zdCBpbml0Q2FwdGNoYUZuID0gZ2V0SW5pdENhcHRjaGFGbihnKTtcbiAgICBpZiAoIWluaXRDYXB0Y2hhRm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1NpYXJhU2hpZWxkOiBJbml0Q2FwdGNoYSgpIGlzIG5vdCBhdmFpbGFibGUgYWZ0ZXIgbG9hZGluZyBzY3JpcHRzLiBDaGVjayB3aGV0aGVyIENTUCBibG9ja2VkIHZlbmRvciBzY3JpcHRzIG9yIGlubGluZSBleGVjdXRpb24uJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLmFsbG93VmVuZG9yQ29uc29sZUxvZ3MpIHtcbiAgICAgIHN1cHByZXNzVmVuZG9yQ29uc29sZVdpbmRvdygpO1xuICAgICAgaW5zdGFsbFZlbmRvclJ1bnRpbWVFcnJvclN1cHByZXNzaW9uKCk7XG4gICAgfVxuICAgIHJ1bkluUm9vdFpvbmUoKCkgPT4gaW5pdENhcHRjaGFGbihvcHRpb25zLnB1YmxpY0tleSkpO1xuICAgIGF3YWl0IHdhaXRGb3JDaGVja0NhcHRjaGFBcGkoKTtcbiAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gIH0pKCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwZW5kaW5nO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIGtlZXAgYHBlbmRpbmdgIGNhY2hlZCBmb3Igc3Vic2VxdWVudCBjYWxsZXJzXG4gIH1cbn1cblxuLyoqXG4gKiBDYWxscyBnbG9iYWwgYENoZWNrQ2FwdGNoYSgpYCBhbmQgcmV0dXJucyBpdHMgYm9vbGVhbiByZXN1bHQuXG4gKiBJZiBzdWNjZXNzZnVsLCByZXR1cm5zIGB7IG9rOiB0cnVlLCB0b2tlbj86IHN0cmluZyB9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU2lhcmFTaGllbGRDYXB0Y2hhKG9wdGlvbnM/OiB7IGFsbG93VmVuZG9yQ29uc29sZUxvZ3M/OiBib29sZWFuIH0pOiB7IG9rOiBib29sZWFuOyB0b2tlbj86IHN0cmluZyB9IHtcbiAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICBpZiAoIWcuQ2hlY2tDYXB0Y2hhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTaWFyYVNoaWVsZDogQ2hlY2tDYXB0Y2hhKCkgaXMgbm90IGF2YWlsYWJsZS4gRGlkIGluaXRTaWFyYVNoaWVsZCgpIHJ1biwgYW5kIGlzIENTUCBhbGxvd2luZyB0aGUgY2FwdGNoYSBzY3JpcHRzPycpO1xuICB9XG5cbiAgY29uc3QgZXhpc3RpbmdUb2tlbiA9IHR5cGVvZiBnLkN5YmVyU2lhcmFUb2tlbiA9PT0gJ3N0cmluZycgJiYgZy5DeWJlclNpYXJhVG9rZW4ubGVuZ3RoID4gMCA/IGcuQ3liZXJTaWFyYVRva2VuIDogdW5kZWZpbmVkO1xuICBpZiAoZXhpc3RpbmdUb2tlbikge1xuICAgIHJldHVybiB7IG9rOiB0cnVlLCB0b2tlbjogZXhpc3RpbmdUb2tlbiB9O1xuICB9XG5cbiAgaWYgKCFvcHRpb25zPy5hbGxvd1ZlbmRvckNvbnNvbGVMb2dzKSB7XG4gICAgc3VwcHJlc3NWZW5kb3JDb25zb2xlV2luZG93KCk7XG4gIH1cbiAgY29uc3Qgb2sgPSBnLkNoZWNrQ2FwdGNoYSgpO1xuICBjb25zdCB0b2tlbiA9IHR5cGVvZiBnLkN5YmVyU2lhcmFUb2tlbiA9PT0gJ3N0cmluZycgPyBnLkN5YmVyU2lhcmFUb2tlbiA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIG9rID8geyBvazogdHJ1ZSwgdG9rZW4gfSA6IHsgb2s6IGZhbHNlIH07XG59XG5cbi8qKlxuICogQXN5bmMtZnJpZW5kbHkgY2FwdGNoYSBjaGVjayB0byBoYW5kbGUgZGVsYXllZCB0b2tlbiBwb3B1bGF0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tTaWFyYVNoaWVsZENhcHRjaGFBc3luYyhvcHRpb25zPzoge1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHBvbGxJbnRlcnZhbE1zPzogbnVtYmVyO1xuICBiZWZvcmVDaGVja0RlbGF5TXM/OiBudW1iZXI7XG59KTogUHJvbWlzZTx7IG9rOiBib29sZWFuOyB0b2tlbj86IHN0cmluZyB9PiB7XG4gIGNvbnN0IHRpbWVvdXRNcyA9IG9wdGlvbnM/LnRpbWVvdXRNcyA/PyAxMjAwO1xuICBjb25zdCBwb2xsSW50ZXJ2YWxNcyA9IG9wdGlvbnM/LnBvbGxJbnRlcnZhbE1zID8/IDEyMDtcbiAgY29uc3QgYmVmb3JlQ2hlY2tEZWxheU1zID0gb3B0aW9ucz8uYmVmb3JlQ2hlY2tEZWxheU1zID8/IDE0MDtcbiAgY29uc3QgZXhpc3RpbmdUb2tlbiA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpLkN5YmVyU2lhcmFUb2tlbjtcbiAgaWYgKHR5cGVvZiBleGlzdGluZ1Rva2VuID09PSAnc3RyaW5nJyAmJiBleGlzdGluZ1Rva2VuLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4geyBvazogdHJ1ZSwgdG9rZW46IGV4aXN0aW5nVG9rZW4gfTtcbiAgfVxuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBiZWZvcmVDaGVja0RlbGF5TXMpKTtcbiAgY29uc3QgZmlyc3RDaGVjayA9IGNoZWNrU2lhcmFTaGllbGRDYXB0Y2hhKCk7IC8vIG9uZSBBUEkgY2FsbCBvbmx5XG4gIGlmICghZmlyc3RDaGVjay5vaykgcmV0dXJuIGZpcnN0Q2hlY2s7XG4gIGlmIChmaXJzdENoZWNrLnRva2VuKSByZXR1cm4gZmlyc3RDaGVjaztcblxuICBjb25zdCBzdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICAvLyBUb2tlbiBjYW4gYmUgYXNzaWduZWQgc2xpZ2h0bHkgYWZ0ZXIgc3VjY2Vzc2Z1bCB2ZXJpZmljYXRpb24uXG4gIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDwgdGltZW91dE1zKSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcG9sbEludGVydmFsTXMpKTtcbiAgICBjb25zdCB0b2tlbiA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpLkN5YmVyU2lhcmFUb2tlbjtcbiAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJyAmJiB0b2tlbi5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4geyBvazogdHJ1ZSwgdG9rZW4gfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBvazogdHJ1ZSB9O1xufVxuXG4iXX0=
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lhcmEtc2hpZWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2lhcmFzaGllbGQtd29ya3NwYWNlL3NyYy9saWIvc2lhcmEtc2hpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVuRixNQUFNLG1CQUFtQixHQUFHLGtFQUFrRSxDQUFDO0FBQy9GLE1BQU0sa0JBQWtCLEdBQUcsc0VBQXNFLENBQUM7QUFDbEcsTUFBTSxxQkFBcUIsR0FBRyx5RUFBeUUsQ0FBQztBQUN4RyxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQztBQWlCdEMsSUFBSSxPQUFPLEdBQXlCLElBQUksQ0FBQztBQUN6QyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFFeEIsU0FBUywrQkFBK0I7SUFDdEMsTUFBTSxDQUFDLEdBQUcsVUFBeUQsQ0FBQztJQUNwRSxNQUFNLFVBQVUsR0FBRztRQUNqQix5QkFBeUI7UUFDekIsMEJBQTBCO1FBQzFCLHdCQUF3QjtRQUN4Qix5QkFBeUI7S0FDakIsQ0FBQztJQUVYLE1BQU0sUUFBUSxHQUFHLFVBQVU7U0FDeEIsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEIsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUF1QixFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFDLENB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SyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbEQsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDN0IsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsS0FBSztRQUFFLE9BQU8sVUFBVSxDQUFDO0lBRXhDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUM3QixnRUFBZ0U7SUFDaEUsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxHQUFHLFNBQVMsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxxQkFBcUIsRUFBRSxDQUFDLGVBQWUsQ0FBQztRQUN0RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0SW5pdENhcHRjaGFGbiwgZ2V0U2lhcmFTaGllbGRHbG9iYWxzIH0gZnJvbSAnLi9zaWFyYS1zaGllbGQuZ2xvYmFscyc7XG5pbXBvcnQgeyBpbnN0YWxsVmVuZG9yUnVudGltZUVycm9yU3VwcHJlc3Npb24sIHN1cHByZXNzVmVuZG9yQ29uc29sZVdpbmRvdyB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLWxvZy11dGlscyc7XG5pbXBvcnQgeyBsb2FkU2NyaXB0IH0gZnJvbSAnLi9zaWFyYS1zaGllbGQtc2NyaXB0LXV0aWxzJztcbmltcG9ydCB7IGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQgfSBmcm9tICcuL3NpYXJhLXNoaWVsZC1zdWJtaXQtZ3VhcmQnO1xuaW1wb3J0IHsgaW5zdGFsbFZlbmRvckNoYWxsZW5nZVJ1bnRpbWVQYXRjaCB9IGZyb20gJy4vc2lhcmEtc2hpZWxkLXZlbmRvci1ydW50aW1lJztcblxuY29uc3QgSlFVRVJZX0ZBTExCQUNLX1NSQyA9ICdodHRwczovL2VtYmVkY2RuLm15Y3liZXJzaWFyYS5jb20vY2FwY2hhLXRlbXBsZS9qcy9qcXVlcnkubWluLmpzJztcbmNvbnN0IENBUFRDSEFfU0NSSVBUX1NSQyA9ICdodHRwczovL2VtYmVkY2RuLm15Y3liZXJzaWFyYS5jb20vQ2FwdGNoYUZvcm1hdGUvQ2FwdGNoYVJlc291cmNlcy5qcyc7XG5jb25zdCBWQUxJREFUSU9OX1NDUklQVF9TUkMgPSAnaHR0cHM6Ly9lbWJlZC5teWN5YmVyc2lhcmEuY29tL0NhcHRjaGFGb3JtYXRlL1NpYXJhU2hpZWxkX1ZhbGlkYXRpb24uanMnO1xuY29uc3QgQ0FQVENIQV9SRUFEWV9USU1FT1VUX01TID0gODAwMDtcblxuZXhwb3J0IGludGVyZmFjZSBJbml0U2lhcmFTaGllbGRPcHRpb25zIHtcbiAgLyoqIFNpYXJhU2hpZWxkIHB1YmxpYyBrZXkuIFVzZSBcIlRFU1QtQ1lCRVJTSUFSQVwiIGZvciBzdGFnaW5nL2RldmVsb3BtZW50LiAqL1xuICBwdWJsaWNLZXk6IHN0cmluZztcbiAgLyoqXG4gICAqIExvYWRzIGpRdWVyeSBiZWZvcmUgU2lhcmFTaGllbGQgc2NyaXB0LlxuICAgKiBEZWZhdWx0IGlzIHRydWUgZm9yIGVhc2llciBpbnRlZ3JhdGlvbi5cbiAgICogU2V0IHRvIGZhbHNlIG9ubHkgaWYgeW91ciBzaXRlL2FwcCBhbHJlYWR5IGxvYWRzIGpRdWVyeS5cbiAgICovXG4gIGxvYWRKUXVlcnk/OiBib29sZWFuO1xuICAvKiogUmVzZXJ2ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuIENTUCBub25jZSBpcyBpZ25vcmVkIGluIHRoaXMgdGVzdCB2YXJpYW50LiAqL1xuICBjc3BOb25jZT86IHN0cmluZztcbiAgLyoqIFNldCB0cnVlIG9ubHkgd2hlbiBhY3RpdmVseSBkZWJ1Z2dpbmcgdmVuZG9yL3J1bnRpbWUgaW50ZXJuYWxzIGluIGJyb3dzZXIgY29uc29sZS4gKi9cbiAgYWxsb3dWZW5kb3JDb25zb2xlTG9ncz86IGJvb2xlYW47XG59XG5cbmxldCBwZW5kaW5nOiBQcm9taXNlPHZvaWQ+IHwgbnVsbCA9IG51bGw7XG5sZXQgaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gZW5zdXJlQWNjZXNzaWJpbGl0eVBvcHVwQWxpYXNlcygpOiB2b2lkIHtcbiAgY29uc3QgZyA9IGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgYWxpYXNOYW1lcyA9IFtcbiAgICAnUmVtb3ZlQWNjZXNpYmlsaXR5UG9wdXAnLFxuICAgICdfUmVtb3ZlQWNjZXNpYmlsaXR5UG9wdXAnLFxuICAgICdSZW1vdmVBY2Nlc2libGl0eVBvcHVwJyxcbiAgICAnX1JlbW92ZUFjY2VzaWJsaXR5UG9wdXAnLFxuICBdIGFzIGNvbnN0O1xuXG4gIGNvbnN0IGV4aXN0aW5nID0gYWxpYXNOYW1lc1xuICAgIC5tYXAoKG5hbWUpID0+IGdbbmFtZV0pXG4gICAgLmZpbmQoKHZhbHVlKTogdmFsdWUgaXMgKCkgPT4gdm9pZCA9PiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpO1xuXG4gIGNvbnN0IHN0YWJsZUZuID0gZXhpc3RpbmcgPz8gKCgpID0+IHVuZGVmaW5lZCk7XG4gIGZvciAoY29uc3QgbmFtZSBvZiBhbGlhc05hbWVzKSB7XG4gICAgZ1tuYW1lXSA9IHN0YWJsZUZuO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSlF1ZXJ5QWxyZWFkeUF2YWlsYWJsZSgpOiBib29sZWFuIHtcbiAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICBpZiAodHlwZW9mIGcualF1ZXJ5ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBnLiQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nSnF1ZXJ5U2NyaXB0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MU2NyaXB0RWxlbWVudD4oJ3NjcmlwdFtzcmMqPVwianF1ZXJ5XCJdJyk7XG4gIHJldHVybiBCb29sZWFuKGV4aXN0aW5nSnF1ZXJ5U2NyaXB0KTtcbn1cblxuZnVuY3Rpb24gcnVuSW5Sb290Wm9uZTxUPihmbjogKCkgPT4gVCk6IFQge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHsgWm9uZT86IHsgcm9vdD86IHsgcnVuPzogPFU+KGNiOiAoKSA9PiBVKSA9PiBVIH0gfSB9O1xuICBjb25zdCB6b25lUm9vdFJ1biA9IGcuWm9uZT8ucm9vdD8ucnVuO1xuICBpZiAodHlwZW9mIHpvbmVSb290UnVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHpvbmVSb290UnVuLmNhbGwoZy5ab25lPy5yb290LCBmbikgYXMgVDtcbiAgfVxuICByZXR1cm4gZm4oKTtcbn1cblxuZnVuY3Rpb24gcHJldmVudER1cGxpY2F0ZVZhbGlkYXRpb25Cb290c3RyYXAoZzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0U2lhcmFTaGllbGRHbG9iYWxzPik6IHZvaWQge1xuICBjb25zdCBvcmlnaW5hbEFwcGVuZFZhbGlkYXRpb24gPSBnLkFwcGVuZFZhbGlkYXRpb25KUztcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbEFwcGVuZFZhbGlkYXRpb24gIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBnLkFwcGVuZFZhbGlkYXRpb25KUyA9ICgpID0+IHtcbiAgICBjb25zdCBleGlzdGluZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTFNjcmlwdEVsZW1lbnQ+KGBzY3JpcHRbc3JjPVwiJHtWQUxJREFUSU9OX1NDUklQVF9TUkN9XCJdYCk7XG4gICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3JpZ2luYWxBcHBlbmRWYWxpZGF0aW9uKCk7XG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JDaGVja0NhcHRjaGFBcGkodGltZW91dE1zID0gQ0FQVENIQV9SRUFEWV9USU1FT1VUX01TKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gIHdoaWxlIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0IDwgdGltZW91dE1zKSB7XG4gICAgaWYgKGdldFNpYXJhU2hpZWxkR2xvYmFscygpLkNoZWNrQ2FwdGNoYSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1NpYXJhU2hpZWxkOiBDaGVja0NhcHRjaGEoKSB3YXMgbm90IGF2YWlsYWJsZSB3aXRoaW4gdGltZW91dC4nKTtcbn1cblxuLyoqXG4gKiBEcm9wLWluIGluaXRpYWxpemVyIGZvciBTaWFyYVNoaWVsZC5cbiAqIC0gTG9hZHMgcmVxdWlyZWQgc2NyaXB0cyAob3B0aW9uYWxseSBqUXVlcnkpXG4gKiAtIENhbGxzIGdsb2JhbCBgaW5pdENhcHRjaGEocHVibGljS2V5KWBcbiAqXG4gKiBSZXF1aXJlbWVudHMgaW4geW91ciBIVE1ML3RlbXBsYXRlOlxuICogLSBZb3UgbXVzdCByZW5kZXI6IGA8ZGl2IGNsYXNzPVwiU2lhcmFTaGllbGRcIj48L2Rpdj5gXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0U2lhcmFTaGllbGQob3B0aW9uczogSW5pdFNpYXJhU2hpZWxkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoaW5pdGlhbGl6ZWQpIHJldHVybjtcbiAgaWYgKHBlbmRpbmcpIHJldHVybiBwZW5kaW5nO1xuXG4gIGlmICghb3B0aW9ucz8ucHVibGljS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdpbml0U2lhcmFTaGllbGQ6IHB1YmxpY0tleSBpcyByZXF1aXJlZC4nKTtcbiAgfVxuXG4gIHBlbmRpbmcgPSAoYXN5bmMgKCkgPT4ge1xuICAgIGluc3RhbGxDYXB0Y2hhU3VibWl0R3VhcmQoKTtcbiAgICBpZiAoKG9wdGlvbnMubG9hZEpRdWVyeSA/PyB0cnVlKSAmJiAhaXNKUXVlcnlBbHJlYWR5QXZhaWxhYmxlKCkpIHtcbiAgICAgIGF3YWl0IGxvYWRTY3JpcHQoZG9jdW1lbnQsIEpRVUVSWV9GQUxMQkFDS19TUkMpO1xuICAgIH1cblxuICAgIGF3YWl0IGxvYWRTY3JpcHQoZG9jdW1lbnQsIENBUFRDSEFfU0NSSVBUX1NSQyk7XG4gICAgYXdhaXQgbG9hZFNjcmlwdChkb2N1bWVudCwgVkFMSURBVElPTl9TQ1JJUFRfU1JDKTtcblxuICAgIGNvbnN0IGcgPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKTtcbiAgICBlbnN1cmVBY2Nlc3NpYmlsaXR5UG9wdXBBbGlhc2VzKCk7XG4gICAgcHJldmVudER1cGxpY2F0ZVZhbGlkYXRpb25Cb290c3RyYXAoZyk7XG4gICAgaW5zdGFsbFZlbmRvckNoYWxsZW5nZVJ1bnRpbWVQYXRjaCgpO1xuICAgIGNvbnN0IGluaXRDYXB0Y2hhRm4gPSBnZXRJbml0Q2FwdGNoYUZuKGcpO1xuICAgIGlmICghaW5pdENhcHRjaGFGbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnU2lhcmFTaGllbGQ6IEluaXRDYXB0Y2hhKCkgaXMgbm90IGF2YWlsYWJsZSBhZnRlciBsb2FkaW5nIHNjcmlwdHMuJyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zLmFsbG93VmVuZG9yQ29uc29sZUxvZ3MpIHtcbiAgICAgIHN1cHByZXNzVmVuZG9yQ29uc29sZVdpbmRvdygpO1xuICAgICAgaW5zdGFsbFZlbmRvclJ1bnRpbWVFcnJvclN1cHByZXNzaW9uKCk7XG4gICAgfVxuICAgIHJ1bkluUm9vdFpvbmUoKCkgPT4gaW5pdENhcHRjaGFGbihvcHRpb25zLnB1YmxpY0tleSkpO1xuICAgIGF3YWl0IHdhaXRGb3JDaGVja0NhcHRjaGFBcGkoKTtcbiAgICBpbml0aWFsaXplZCA9IHRydWU7XG4gIH0pKCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBwZW5kaW5nO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIGtlZXAgYHBlbmRpbmdgIGNhY2hlZCBmb3Igc3Vic2VxdWVudCBjYWxsZXJzXG4gIH1cbn1cblxuLyoqXG4gKiBDYWxscyBnbG9iYWwgYENoZWNrQ2FwdGNoYSgpYCBhbmQgcmV0dXJucyBpdHMgYm9vbGVhbiByZXN1bHQuXG4gKiBJZiBzdWNjZXNzZnVsLCByZXR1cm5zIGB7IG9rOiB0cnVlLCB0b2tlbj86IHN0cmluZyB9YC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU2lhcmFTaGllbGRDYXB0Y2hhKG9wdGlvbnM/OiB7IGFsbG93VmVuZG9yQ29uc29sZUxvZ3M/OiBib29sZWFuIH0pOiB7IG9rOiBib29sZWFuOyB0b2tlbj86IHN0cmluZyB9IHtcbiAgY29uc3QgZyA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpO1xuICBpZiAoIWcuQ2hlY2tDYXB0Y2hhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTaWFyYVNoaWVsZDogQ2hlY2tDYXB0Y2hhKCkgaXMgbm90IGF2YWlsYWJsZS4gRGlkIGluaXRTaWFyYVNoaWVsZCgpIHJ1bj8nKTtcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nVG9rZW4gPSB0eXBlb2YgZy5DeWJlclNpYXJhVG9rZW4gPT09ICdzdHJpbmcnICYmIGcuQ3liZXJTaWFyYVRva2VuLmxlbmd0aCA+IDAgPyBnLkN5YmVyU2lhcmFUb2tlbiA6IHVuZGVmaW5lZDtcbiAgaWYgKGV4aXN0aW5nVG9rZW4pIHtcbiAgICByZXR1cm4geyBvazogdHJ1ZSwgdG9rZW46IGV4aXN0aW5nVG9rZW4gfTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucz8uYWxsb3dWZW5kb3JDb25zb2xlTG9ncykge1xuICAgIHN1cHByZXNzVmVuZG9yQ29uc29sZVdpbmRvdygpO1xuICB9XG4gIGNvbnN0IG9rID0gZy5DaGVja0NhcHRjaGEoKTtcbiAgY29uc3QgdG9rZW4gPSB0eXBlb2YgZy5DeWJlclNpYXJhVG9rZW4gPT09ICdzdHJpbmcnID8gZy5DeWJlclNpYXJhVG9rZW4gOiB1bmRlZmluZWQ7XG4gIHJldHVybiBvayA/IHsgb2s6IHRydWUsIHRva2VuIH0gOiB7IG9rOiBmYWxzZSB9O1xufVxuXG4vKipcbiAqIEFzeW5jLWZyaWVuZGx5IGNhcHRjaGEgY2hlY2sgdG8gaGFuZGxlIGRlbGF5ZWQgdG9rZW4gcG9wdWxhdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrU2lhcmFTaGllbGRDYXB0Y2hhQXN5bmMob3B0aW9ucz86IHtcbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICBwb2xsSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgYmVmb3JlQ2hlY2tEZWxheU1zPzogbnVtYmVyO1xuICByZXRyeU9uRmFsc2VNcz86IG51bWJlcjtcbiAgZmFsc2VSZXN1bHRUb2tlbldhaXRNcz86IG51bWJlcjtcbn0pOiBQcm9taXNlPHsgb2s6IGJvb2xlYW47IHRva2VuPzogc3RyaW5nIH0+IHtcbiAgY29uc3QgdGltZW91dE1zID0gb3B0aW9ucz8udGltZW91dE1zID8/IDEyMDA7XG4gIGNvbnN0IHBvbGxJbnRlcnZhbE1zID0gb3B0aW9ucz8ucG9sbEludGVydmFsTXMgPz8gMTIwO1xuICBjb25zdCBiZWZvcmVDaGVja0RlbGF5TXMgPSBvcHRpb25zPy5iZWZvcmVDaGVja0RlbGF5TXMgPz8gMTQwO1xuICBjb25zdCByZXRyeU9uRmFsc2VNcyA9IG9wdGlvbnM/LnJldHJ5T25GYWxzZU1zID8/IDA7XG4gIGNvbnN0IGZhbHNlUmVzdWx0VG9rZW5XYWl0TXMgPSBvcHRpb25zPy5mYWxzZVJlc3VsdFRva2VuV2FpdE1zID8/IDkwMDtcbiAgY29uc3QgZXhpc3RpbmdUb2tlbiA9IGdldFNpYXJhU2hpZWxkR2xvYmFscygpLkN5YmVyU2lhcmFUb2tlbjtcbiAgaWYgKHR5cGVvZiBleGlzdGluZ1Rva2VuID09PSAnc3RyaW5nJyAmJiBleGlzdGluZ1Rva2VuLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4geyBvazogdHJ1ZSwgdG9rZW46IGV4aXN0aW5nVG9rZW4gfTtcbiAgfVxuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBiZWZvcmVDaGVja0RlbGF5TXMpKTtcbiAgbGV0IGZpcnN0Q2hlY2sgPSBjaGVja1NpYXJhU2hpZWxkQ2FwdGNoYSgpOyAvLyBvbmUgQVBJIGNhbGwgb25seVxuICBpZiAoIWZpcnN0Q2hlY2sub2sgJiYgcmV0cnlPbkZhbHNlTXMgPiAwKSB7XG4gICAgLy8gT3B0aW9uYWwgcmV0cnkgZm9yIGludGVncmF0aW9ucyB0aGF0IG9ic2VydmUgbGF0ZSB2ZW5kb3Itc3RhdGUgc2V0dGxpbmcuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmV0cnlPbkZhbHNlTXMpKTtcbiAgICBmaXJzdENoZWNrID0gY2hlY2tTaWFyYVNoaWVsZENhcHRjaGEoKTtcbiAgfVxuICBpZiAoIWZpcnN0Q2hlY2sub2spIHtcbiAgICAvLyBTb21lIHZlbmRvciBmbG93cyByZXR1cm4gZmFsc2UgZmlyc3QsIHRoZW4gc2V0IHRva2VuIHNob3J0bHkgYWZ0ZXIuXG4gICAgY29uc3QgZmFsc2VTdGFydGVkQXQgPSBEYXRlLm5vdygpO1xuICAgIHdoaWxlIChEYXRlLm5vdygpIC0gZmFsc2VTdGFydGVkQXQgPCBmYWxzZVJlc3VsdFRva2VuV2FpdE1zKSB7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBwb2xsSW50ZXJ2YWxNcykpO1xuICAgICAgY29uc3QgdG9rZW4gPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKS5DeWJlclNpYXJhVG9rZW47XG4gICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJyAmJiB0b2tlbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB7IG9rOiB0cnVlLCB0b2tlbiB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmlyc3RDaGVjaztcbiAgfVxuICBpZiAoZmlyc3RDaGVjay50b2tlbikgcmV0dXJuIGZpcnN0Q2hlY2s7XG5cbiAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgLy8gVG9rZW4gY2FuIGJlIGFzc2lnbmVkIHNsaWdodGx5IGFmdGVyIHN1Y2Nlc3NmdWwgdmVyaWZpY2F0aW9uLlxuICB3aGlsZSAoRGF0ZS5ub3coKSAtIHN0YXJ0ZWRBdCA8IHRpbWVvdXRNcykge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHBvbGxJbnRlcnZhbE1zKSk7XG4gICAgY29uc3QgdG9rZW4gPSBnZXRTaWFyYVNoaWVsZEdsb2JhbHMoKS5DeWJlclNpYXJhVG9rZW47XG4gICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycgJiYgdG9rZW4ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHsgb2s6IHRydWUsIHRva2VuIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHsgb2s6IHRydWUgfTtcbn1cblxuIl19
|