@auth0/auth0-spa-js 2.17.0 → 2.18.0
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 +1 -1
- package/dist/auth0-spa-js.development.js +1007 -810
- package/dist/auth0-spa-js.development.js.map +1 -1
- package/dist/auth0-spa-js.production.esm.js +1 -1
- package/dist/auth0-spa-js.production.esm.js.map +1 -1
- package/dist/auth0-spa-js.production.js +1 -1
- package/dist/auth0-spa-js.production.js.map +1 -1
- package/dist/auth0-spa-js.worker.development.js +14 -14
- package/dist/auth0-spa-js.worker.development.js.map +1 -1
- package/dist/auth0-spa-js.worker.production.js +1 -1
- package/dist/auth0-spa-js.worker.production.js.map +1 -1
- package/dist/lib/auth0-spa-js.cjs.js +1113 -902
- package/dist/lib/auth0-spa-js.cjs.js.map +1 -1
- package/dist/typings/Auth0Client.d.ts +24 -0
- package/dist/typings/global.d.ts +42 -0
- package/dist/typings/version.d.ts +1 -1
- package/package.json +7 -8
- package/src/Auth0Client.ts +57 -2
- package/src/global.ts +44 -0
- package/src/utils.ts +9 -4
- package/src/version.ts +1 -1
|
@@ -18,7 +18,7 @@ typeof SuppressedError === "function" ? SuppressedError : function(error, suppre
|
|
|
18
18
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
19
19
|
};
|
|
20
20
|
|
|
21
|
-
var version = "2.
|
|
21
|
+
var version = "2.18.0";
|
|
22
22
|
|
|
23
23
|
const DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS = 60;
|
|
24
24
|
|
|
@@ -175,7 +175,7 @@ const parseAuthenticationResult = queryString => {
|
|
|
175
175
|
|
|
176
176
|
const runIframe = function runIframe(authorizeUrl, eventOrigin) {
|
|
177
177
|
let timeoutInSeconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS;
|
|
178
|
-
return new Promise((
|
|
178
|
+
return new Promise((res, rej) => {
|
|
179
179
|
const iframe = window.document.createElement("iframe");
|
|
180
180
|
iframe.setAttribute("width", "0");
|
|
181
181
|
iframe.setAttribute("height", "0");
|
|
@@ -187,10 +187,10 @@ const runIframe = function runIframe(authorizeUrl, eventOrigin) {
|
|
|
187
187
|
}
|
|
188
188
|
};
|
|
189
189
|
let _iframeEventHandler;
|
|
190
|
-
const timeoutSetTimeoutId = setTimeout((
|
|
190
|
+
const timeoutSetTimeoutId = setTimeout(() => {
|
|
191
191
|
rej(new TimeoutError);
|
|
192
192
|
removeIframe();
|
|
193
|
-
}
|
|
193
|
+
}, timeoutInSeconds * 1e3);
|
|
194
194
|
_iframeEventHandler = function iframeEventHandler(e) {
|
|
195
195
|
if (e.origin != eventOrigin) return;
|
|
196
196
|
if (!e.data || e.data.type !== "authorization_response") return;
|
|
@@ -206,7 +206,7 @@ const runIframe = function runIframe(authorizeUrl, eventOrigin) {
|
|
|
206
206
|
window.addEventListener("message", _iframeEventHandler, false);
|
|
207
207
|
window.document.body.appendChild(iframe);
|
|
208
208
|
iframe.setAttribute("src", authorizeUrl);
|
|
209
|
-
})
|
|
209
|
+
});
|
|
210
210
|
};
|
|
211
211
|
|
|
212
212
|
const openPopup = url => {
|
|
@@ -217,21 +217,21 @@ const openPopup = url => {
|
|
|
217
217
|
return window.open(url, "auth0:authorize:popup", "left=".concat(left, ",top=").concat(top, ",width=").concat(width, ",height=").concat(height, ",resizable,scrollbars=yes,status=1"));
|
|
218
218
|
};
|
|
219
219
|
|
|
220
|
-
const runPopup = config => new Promise((
|
|
220
|
+
const runPopup = config => new Promise((resolve, reject) => {
|
|
221
221
|
let _popupEventListener;
|
|
222
|
-
const popupTimer = setInterval((
|
|
222
|
+
const popupTimer = setInterval(() => {
|
|
223
223
|
if (config.popup && config.popup.closed) {
|
|
224
224
|
clearInterval(popupTimer);
|
|
225
225
|
clearTimeout(timeoutId);
|
|
226
226
|
window.removeEventListener("message", _popupEventListener, false);
|
|
227
227
|
reject(new PopupCancelledError(config.popup));
|
|
228
228
|
}
|
|
229
|
-
}
|
|
230
|
-
const timeoutId = setTimeout((
|
|
229
|
+
}, 1e3);
|
|
230
|
+
const timeoutId = setTimeout(() => {
|
|
231
231
|
clearInterval(popupTimer);
|
|
232
232
|
reject(new PopupTimeoutError(config.popup));
|
|
233
233
|
window.removeEventListener("message", _popupEventListener, false);
|
|
234
|
-
}
|
|
234
|
+
}, (config.timeoutInSeconds || DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS) * 1e3);
|
|
235
235
|
_popupEventListener = function popupEventListener(e) {
|
|
236
236
|
if (!e.data || e.data.type !== "authorization_response") {
|
|
237
237
|
return;
|
|
@@ -248,23 +248,30 @@ const runPopup = config => new Promise(((resolve, reject) => {
|
|
|
248
248
|
resolve(e.data.response);
|
|
249
249
|
};
|
|
250
250
|
window.addEventListener("message", _popupEventListener);
|
|
251
|
-
})
|
|
251
|
+
});
|
|
252
252
|
|
|
253
253
|
const getCrypto = () => window.crypto;
|
|
254
254
|
|
|
255
255
|
const createRandomString = () => {
|
|
256
256
|
const charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.";
|
|
257
|
+
const validMax = 256 - 256 % charset.length;
|
|
257
258
|
let random = "";
|
|
258
|
-
|
|
259
|
-
|
|
259
|
+
while (random.length < 43) {
|
|
260
|
+
const bytes = getCrypto().getRandomValues(new Uint8Array(43 - random.length));
|
|
261
|
+
for (const byte of bytes) {
|
|
262
|
+
if (random.length < 43 && byte < validMax) {
|
|
263
|
+
random += charset[byte % charset.length];
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
260
267
|
return random;
|
|
261
268
|
};
|
|
262
269
|
|
|
263
270
|
const encode$2 = value => btoa(value);
|
|
264
271
|
|
|
265
|
-
const stripUndefined = params => Object.keys(params).filter(
|
|
272
|
+
const stripUndefined = params => Object.keys(params).filter(k => typeof params[k] !== "undefined").reduce((acc, key) => Object.assign(Object.assign({}, acc), {
|
|
266
273
|
[key]: params[key]
|
|
267
|
-
})
|
|
274
|
+
}), {});
|
|
268
275
|
|
|
269
276
|
const ALLOWED_AUTH0CLIENT_PROPERTIES = [ {
|
|
270
277
|
key: "name",
|
|
@@ -279,16 +286,16 @@ const ALLOWED_AUTH0CLIENT_PROPERTIES = [ {
|
|
|
279
286
|
|
|
280
287
|
const stripAuth0Client = function stripAuth0Client(auth0Client) {
|
|
281
288
|
let excludeEnv = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
282
|
-
return Object.keys(auth0Client).reduce((
|
|
289
|
+
return Object.keys(auth0Client).reduce((acc, key) => {
|
|
283
290
|
if (excludeEnv && key === "env") {
|
|
284
291
|
return acc;
|
|
285
292
|
}
|
|
286
|
-
const allowedProperty = ALLOWED_AUTH0CLIENT_PROPERTIES.find(
|
|
293
|
+
const allowedProperty = ALLOWED_AUTH0CLIENT_PROPERTIES.find(p => p.key === key);
|
|
287
294
|
if (allowedProperty && allowedProperty.type.includes(typeof auth0Client[key])) {
|
|
288
295
|
acc[key] = auth0Client[key];
|
|
289
296
|
}
|
|
290
297
|
return acc;
|
|
291
|
-
}
|
|
298
|
+
}, {});
|
|
292
299
|
};
|
|
293
300
|
|
|
294
301
|
const createQueryParams = _a => {
|
|
@@ -311,10 +318,10 @@ const urlEncodeB64 = input => {
|
|
|
311
318
|
"/": "_",
|
|
312
319
|
"=": ""
|
|
313
320
|
};
|
|
314
|
-
return input.replace(/[+/=]/g,
|
|
321
|
+
return input.replace(/[+/=]/g, m => b64Chars[m]);
|
|
315
322
|
};
|
|
316
323
|
|
|
317
|
-
const decodeB64 = input => decodeURIComponent(atob(input).split("").map(
|
|
324
|
+
const decodeB64 = input => decodeURIComponent(atob(input).split("").map(c => "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2)).join(""));
|
|
318
325
|
|
|
319
326
|
const urlDecodeB64 = input => decodeB64(input.replace(/_/g, "/").replace(/-/g, "+"));
|
|
320
327
|
|
|
@@ -353,11 +360,11 @@ const parseNumber = value => {
|
|
|
353
360
|
return parseInt(value, 10) || undefined;
|
|
354
361
|
};
|
|
355
362
|
|
|
356
|
-
const fromEntries = iterable => [ ...iterable ].reduce((
|
|
363
|
+
const fromEntries = iterable => [ ...iterable ].reduce((obj, _ref) => {
|
|
357
364
|
let [key, val] = _ref;
|
|
358
365
|
obj[key] = val;
|
|
359
366
|
return obj;
|
|
360
|
-
}
|
|
367
|
+
}, {});
|
|
361
368
|
|
|
362
369
|
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
|
|
363
370
|
|
|
@@ -392,14 +399,14 @@ var ProcessLocking = function() {
|
|
|
392
399
|
return _this.locked.has(key);
|
|
393
400
|
};
|
|
394
401
|
this.lock = function(key) {
|
|
395
|
-
return new Promise(
|
|
402
|
+
return new Promise(function(resolve, reject) {
|
|
396
403
|
if (_this.isLocked(key)) {
|
|
397
404
|
_this.addToLocked(key, resolve);
|
|
398
405
|
} else {
|
|
399
406
|
_this.addToLocked(key);
|
|
400
407
|
resolve();
|
|
401
408
|
}
|
|
402
|
-
})
|
|
409
|
+
});
|
|
403
410
|
};
|
|
404
411
|
this.unlock = function(key) {
|
|
405
412
|
var callbacks = _this.locked.get(key);
|
|
@@ -430,7 +437,7 @@ function getLock() {
|
|
|
430
437
|
processLock.default = getLock;
|
|
431
438
|
|
|
432
439
|
var __awaiter = commonjsGlobal && commonjsGlobal.__awaiter || function(thisArg, _arguments, P, generator) {
|
|
433
|
-
return new (P || (P = Promise))(
|
|
440
|
+
return new (P || (P = Promise))(function(resolve, reject) {
|
|
434
441
|
function fulfilled(value) {
|
|
435
442
|
try {
|
|
436
443
|
step(generator.next(value));
|
|
@@ -446,12 +453,12 @@ var __awaiter = commonjsGlobal && commonjsGlobal.__awaiter || function(thisArg,
|
|
|
446
453
|
}
|
|
447
454
|
}
|
|
448
455
|
function step(result) {
|
|
449
|
-
result.done ? resolve(result.value) : new P(
|
|
456
|
+
result.done ? resolve(result.value) : new P(function(resolve) {
|
|
450
457
|
resolve(result.value);
|
|
451
|
-
})
|
|
458
|
+
}).then(fulfilled, rejected);
|
|
452
459
|
}
|
|
453
460
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
454
|
-
})
|
|
461
|
+
});
|
|
455
462
|
};
|
|
456
463
|
|
|
457
464
|
var __generator = commonjsGlobal && commonjsGlobal.__generator || function(thisArg, body) {
|
|
@@ -556,39 +563,39 @@ var LOCK_STORAGE_KEY = "browser-tabs-lock-key";
|
|
|
556
563
|
|
|
557
564
|
var DEFAULT_STORAGE_HANDLER = {
|
|
558
565
|
key: function(index) {
|
|
559
|
-
return __awaiter(_this, void 0, void 0,
|
|
560
|
-
return __generator(this,
|
|
566
|
+
return __awaiter(_this, void 0, void 0, function() {
|
|
567
|
+
return __generator(this, function(_a) {
|
|
561
568
|
throw new Error("Unsupported");
|
|
562
|
-
})
|
|
563
|
-
})
|
|
569
|
+
});
|
|
570
|
+
});
|
|
564
571
|
},
|
|
565
572
|
getItem: function(key) {
|
|
566
|
-
return __awaiter(_this, void 0, void 0,
|
|
567
|
-
return __generator(this,
|
|
573
|
+
return __awaiter(_this, void 0, void 0, function() {
|
|
574
|
+
return __generator(this, function(_a) {
|
|
568
575
|
throw new Error("Unsupported");
|
|
569
|
-
})
|
|
570
|
-
})
|
|
576
|
+
});
|
|
577
|
+
});
|
|
571
578
|
},
|
|
572
579
|
clear: function() {
|
|
573
|
-
return __awaiter(_this, void 0, void 0,
|
|
574
|
-
return __generator(this,
|
|
580
|
+
return __awaiter(_this, void 0, void 0, function() {
|
|
581
|
+
return __generator(this, function(_a) {
|
|
575
582
|
return [ 2, window.localStorage.clear() ];
|
|
576
|
-
})
|
|
577
|
-
})
|
|
583
|
+
});
|
|
584
|
+
});
|
|
578
585
|
},
|
|
579
586
|
removeItem: function(key) {
|
|
580
|
-
return __awaiter(_this, void 0, void 0,
|
|
581
|
-
return __generator(this,
|
|
587
|
+
return __awaiter(_this, void 0, void 0, function() {
|
|
588
|
+
return __generator(this, function(_a) {
|
|
582
589
|
throw new Error("Unsupported");
|
|
583
|
-
})
|
|
584
|
-
})
|
|
590
|
+
});
|
|
591
|
+
});
|
|
585
592
|
},
|
|
586
593
|
setItem: function(key, value) {
|
|
587
|
-
return __awaiter(_this, void 0, void 0,
|
|
588
|
-
return __generator(this,
|
|
594
|
+
return __awaiter(_this, void 0, void 0, function() {
|
|
595
|
+
return __generator(this, function(_a) {
|
|
589
596
|
throw new Error("Unsupported");
|
|
590
|
-
})
|
|
591
|
-
})
|
|
597
|
+
});
|
|
598
|
+
});
|
|
592
599
|
},
|
|
593
600
|
keySync: function(index) {
|
|
594
601
|
return window.localStorage.key(index);
|
|
@@ -608,9 +615,9 @@ var DEFAULT_STORAGE_HANDLER = {
|
|
|
608
615
|
};
|
|
609
616
|
|
|
610
617
|
function delay(milliseconds) {
|
|
611
|
-
return new Promise(
|
|
618
|
+
return new Promise(function(resolve) {
|
|
612
619
|
return setTimeout(resolve, milliseconds);
|
|
613
|
-
})
|
|
620
|
+
});
|
|
614
621
|
}
|
|
615
622
|
|
|
616
623
|
function generateRandomString(length) {
|
|
@@ -646,9 +653,9 @@ var SuperTokensLock = function() {
|
|
|
646
653
|
if (timeout === void 0) {
|
|
647
654
|
timeout = 5e3;
|
|
648
655
|
}
|
|
649
|
-
return __awaiter(this, void 0, void 0,
|
|
656
|
+
return __awaiter(this, void 0, void 0, function() {
|
|
650
657
|
var iat, MAX_TIME, STORAGE_KEY, STORAGE, lockObj, TIMEOUT_KEY, lockObjPostDelay, parsedLockObjPostDelay;
|
|
651
|
-
return __generator(this,
|
|
658
|
+
return __generator(this, function(_a) {
|
|
652
659
|
switch (_a.label) {
|
|
653
660
|
case 0:
|
|
654
661
|
iat = Date.now() + generateRandomString(4);
|
|
@@ -707,17 +714,17 @@ var SuperTokensLock = function() {
|
|
|
707
714
|
case 8:
|
|
708
715
|
return [ 2, false ];
|
|
709
716
|
}
|
|
710
|
-
})
|
|
711
|
-
})
|
|
717
|
+
});
|
|
718
|
+
});
|
|
712
719
|
};
|
|
713
720
|
SuperTokensLock.prototype.refreshLockWhileAcquired = function(storageKey, iat) {
|
|
714
|
-
return __awaiter(this, void 0, void 0,
|
|
721
|
+
return __awaiter(this, void 0, void 0, function() {
|
|
715
722
|
var _this = this;
|
|
716
|
-
return __generator(this,
|
|
717
|
-
setTimeout(
|
|
718
|
-
return __awaiter(_this, void 0, void 0,
|
|
723
|
+
return __generator(this, function(_a) {
|
|
724
|
+
setTimeout(function() {
|
|
725
|
+
return __awaiter(_this, void 0, void 0, function() {
|
|
719
726
|
var STORAGE, lockObj, parsedLockObj;
|
|
720
|
-
return __generator(this,
|
|
727
|
+
return __generator(this, function(_a) {
|
|
721
728
|
switch (_a.label) {
|
|
722
729
|
case 0:
|
|
723
730
|
return [ 4, processLock_1.default().lock(iat) ];
|
|
@@ -742,19 +749,19 @@ var SuperTokensLock = function() {
|
|
|
742
749
|
this.refreshLockWhileAcquired(storageKey, iat);
|
|
743
750
|
return [ 2 ];
|
|
744
751
|
}
|
|
745
|
-
})
|
|
746
|
-
})
|
|
747
|
-
}
|
|
752
|
+
});
|
|
753
|
+
});
|
|
754
|
+
}, 1e3);
|
|
748
755
|
return [ 2 ];
|
|
749
|
-
})
|
|
750
|
-
})
|
|
756
|
+
});
|
|
757
|
+
});
|
|
751
758
|
};
|
|
752
759
|
SuperTokensLock.prototype.waitForSomethingToChange = function(MAX_TIME) {
|
|
753
|
-
return __awaiter(this, void 0, void 0,
|
|
754
|
-
return __generator(this,
|
|
760
|
+
return __awaiter(this, void 0, void 0, function() {
|
|
761
|
+
return __generator(this, function(_a) {
|
|
755
762
|
switch (_a.label) {
|
|
756
763
|
case 0:
|
|
757
|
-
return [ 4, new Promise(
|
|
764
|
+
return [ 4, new Promise(function(resolve) {
|
|
758
765
|
var resolvedCalled = false;
|
|
759
766
|
var startedAt = Date.now();
|
|
760
767
|
var MIN_TIME_TO_WAIT = 50;
|
|
@@ -779,14 +786,14 @@ var SuperTokensLock = function() {
|
|
|
779
786
|
window.addEventListener("storage", stopWaiting);
|
|
780
787
|
SuperTokensLock.addToWaiting(stopWaiting);
|
|
781
788
|
var timeOutId = setTimeout(stopWaiting, Math.max(0, MAX_TIME - Date.now()));
|
|
782
|
-
})
|
|
789
|
+
}) ];
|
|
783
790
|
|
|
784
791
|
case 1:
|
|
785
792
|
_a.sent();
|
|
786
793
|
return [ 2 ];
|
|
787
794
|
}
|
|
788
|
-
})
|
|
789
|
-
})
|
|
795
|
+
});
|
|
796
|
+
});
|
|
790
797
|
};
|
|
791
798
|
SuperTokensLock.addToWaiting = function(func) {
|
|
792
799
|
this.removeFromWaiting(func);
|
|
@@ -799,22 +806,22 @@ var SuperTokensLock = function() {
|
|
|
799
806
|
if (SuperTokensLock.waiters === undefined) {
|
|
800
807
|
return;
|
|
801
808
|
}
|
|
802
|
-
SuperTokensLock.waiters = SuperTokensLock.waiters.filter(
|
|
809
|
+
SuperTokensLock.waiters = SuperTokensLock.waiters.filter(function(i) {
|
|
803
810
|
return i !== func;
|
|
804
|
-
})
|
|
811
|
+
});
|
|
805
812
|
};
|
|
806
813
|
SuperTokensLock.notifyWaiters = function() {
|
|
807
814
|
if (SuperTokensLock.waiters === undefined) {
|
|
808
815
|
return;
|
|
809
816
|
}
|
|
810
817
|
var waiters = SuperTokensLock.waiters.slice();
|
|
811
|
-
waiters.forEach(
|
|
818
|
+
waiters.forEach(function(i) {
|
|
812
819
|
return i();
|
|
813
|
-
})
|
|
820
|
+
});
|
|
814
821
|
};
|
|
815
822
|
SuperTokensLock.prototype.releaseLock = function(lockKey) {
|
|
816
|
-
return __awaiter(this, void 0, void 0,
|
|
817
|
-
return __generator(this,
|
|
823
|
+
return __awaiter(this, void 0, void 0, function() {
|
|
824
|
+
return __generator(this, function(_a) {
|
|
818
825
|
switch (_a.label) {
|
|
819
826
|
case 0:
|
|
820
827
|
return [ 4, this.releaseLock__private__(lockKey) ];
|
|
@@ -822,13 +829,13 @@ var SuperTokensLock = function() {
|
|
|
822
829
|
case 1:
|
|
823
830
|
return [ 2, _a.sent() ];
|
|
824
831
|
}
|
|
825
|
-
})
|
|
826
|
-
})
|
|
832
|
+
});
|
|
833
|
+
});
|
|
827
834
|
};
|
|
828
835
|
SuperTokensLock.prototype.releaseLock__private__ = function(lockKey) {
|
|
829
|
-
return __awaiter(this, void 0, void 0,
|
|
836
|
+
return __awaiter(this, void 0, void 0, function() {
|
|
830
837
|
var STORAGE, STORAGE_KEY, lockObj, parsedlockObj;
|
|
831
|
-
return __generator(this,
|
|
838
|
+
return __generator(this, function(_a) {
|
|
832
839
|
switch (_a.label) {
|
|
833
840
|
case 0:
|
|
834
841
|
STORAGE = this.storageHandler === undefined ? DEFAULT_STORAGE_HANDLER : this.storageHandler;
|
|
@@ -852,8 +859,8 @@ var SuperTokensLock = function() {
|
|
|
852
859
|
case 2:
|
|
853
860
|
return [ 2 ];
|
|
854
861
|
}
|
|
855
|
-
})
|
|
856
|
-
})
|
|
862
|
+
});
|
|
863
|
+
});
|
|
857
864
|
};
|
|
858
865
|
SuperTokensLock.lockCorrector = function(storageHandler) {
|
|
859
866
|
var MIN_ALLOWED_TIME = Date.now() - 5e3;
|
|
@@ -895,16 +902,16 @@ var _default = browserTabsLock.default = SuperTokensLock;
|
|
|
895
902
|
class WebLocksApiManager {
|
|
896
903
|
async runWithLock(key, timeout, callback) {
|
|
897
904
|
const controller = new AbortController;
|
|
898
|
-
const timeoutId = setTimeout((
|
|
905
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
899
906
|
try {
|
|
900
907
|
return await navigator.locks.request(key, {
|
|
901
908
|
mode: "exclusive",
|
|
902
909
|
signal: controller.signal
|
|
903
|
-
},
|
|
910
|
+
}, async lock => {
|
|
904
911
|
clearTimeout(timeoutId);
|
|
905
912
|
if (!lock) throw new Error("Lock not available");
|
|
906
913
|
return await callback();
|
|
907
|
-
})
|
|
914
|
+
});
|
|
908
915
|
} catch (error) {
|
|
909
916
|
clearTimeout(timeoutId);
|
|
910
917
|
if ((error === null || error === void 0 ? void 0 : error.name) === "AbortError") throw new TimeoutError;
|
|
@@ -918,7 +925,7 @@ class LegacyLockManager {
|
|
|
918
925
|
this.activeLocks = new Set;
|
|
919
926
|
this.lock = new _default;
|
|
920
927
|
this.pagehideHandler = () => {
|
|
921
|
-
this.activeLocks.forEach(
|
|
928
|
+
this.activeLocks.forEach(key => this.lock.releaseLock(key));
|
|
922
929
|
this.activeLocks.clear();
|
|
923
930
|
};
|
|
924
931
|
}
|
|
@@ -1306,7 +1313,7 @@ function isGrantTypeSupported(grantType) {
|
|
|
1306
1313
|
return SUPPORTED_GRANT_TYPES.includes(grantType);
|
|
1307
1314
|
}
|
|
1308
1315
|
|
|
1309
|
-
const sendMessage = (message, to) => new Promise(
|
|
1316
|
+
const sendMessage = (message, to) => new Promise(function(resolve, reject) {
|
|
1310
1317
|
const messageChannel = new MessageChannel;
|
|
1311
1318
|
messageChannel.port1.onmessage = function(event) {
|
|
1312
1319
|
if (event.data.error) {
|
|
@@ -1317,7 +1324,7 @@ const sendMessage = (message, to) => new Promise((function(resolve, reject) {
|
|
|
1317
1324
|
messageChannel.port1.close();
|
|
1318
1325
|
};
|
|
1319
1326
|
to.postMessage(message, [ messageChannel.port2 ]);
|
|
1320
|
-
})
|
|
1327
|
+
});
|
|
1321
1328
|
|
|
1322
1329
|
const createAbortController = () => new AbortController;
|
|
1323
1330
|
|
|
@@ -1334,14 +1341,14 @@ const fetchWithoutWorker = async (fetchUrl, fetchOptions, timeout) => {
|
|
|
1334
1341
|
const controller = createAbortController();
|
|
1335
1342
|
fetchOptions.signal = controller.signal;
|
|
1336
1343
|
let timeoutId;
|
|
1337
|
-
return Promise.race([ dofetch(fetchUrl, fetchOptions), new Promise((
|
|
1338
|
-
timeoutId = setTimeout((
|
|
1344
|
+
return Promise.race([ dofetch(fetchUrl, fetchOptions), new Promise((_, reject) => {
|
|
1345
|
+
timeoutId = setTimeout(() => {
|
|
1339
1346
|
controller.abort();
|
|
1340
1347
|
reject(new Error("Timeout when executing 'fetch'"));
|
|
1341
|
-
}
|
|
1342
|
-
})
|
|
1348
|
+
}, timeout);
|
|
1349
|
+
}) ]).finally(() => {
|
|
1343
1350
|
clearTimeout(timeoutId);
|
|
1344
|
-
})
|
|
1351
|
+
});
|
|
1345
1352
|
};
|
|
1346
1353
|
|
|
1347
1354
|
const fetchWithWorker = async (fetchUrl, audience, scope, fetchOptions, timeout, worker, useFormData, useMrrt) => sendMessage({
|
|
@@ -1463,10 +1470,10 @@ const injectDefaultScopes = function injectDefaultScopes(authScopes, openIdScope
|
|
|
1463
1470
|
let requestedScopes = {
|
|
1464
1471
|
[DEFAULT_AUDIENCE]: getUniqueScopes(openIdScope, ...extraScopes)
|
|
1465
1472
|
};
|
|
1466
|
-
Object.keys(authScopes).forEach(
|
|
1473
|
+
Object.keys(authScopes).forEach(key => {
|
|
1467
1474
|
const audienceScopes = authScopes[key];
|
|
1468
1475
|
requestedScopes[key] = getUniqueScopes(openIdScope, audienceScopes, ...extraScopes);
|
|
1469
|
-
})
|
|
1476
|
+
});
|
|
1470
1477
|
return requestedScopes;
|
|
1471
1478
|
};
|
|
1472
1479
|
|
|
@@ -1534,7 +1541,7 @@ class LocalStorageCache {
|
|
|
1534
1541
|
localStorage.removeItem(key);
|
|
1535
1542
|
}
|
|
1536
1543
|
allKeys() {
|
|
1537
|
-
return Object.keys(window.localStorage).filter(
|
|
1544
|
+
return Object.keys(window.localStorage).filter(key => key.startsWith(CACHE_KEY_PREFIX));
|
|
1538
1545
|
}
|
|
1539
1546
|
}
|
|
1540
1547
|
|
|
@@ -1672,10 +1679,10 @@ class CacheManager {
|
|
|
1672
1679
|
var _a;
|
|
1673
1680
|
const keys = await this.getCacheKeys();
|
|
1674
1681
|
if (!keys) return;
|
|
1675
|
-
await keys.filter(
|
|
1682
|
+
await keys.filter(key => clientId ? key.includes(clientId) : true).reduce(async (memo, key) => {
|
|
1676
1683
|
await memo;
|
|
1677
1684
|
await this.cache.remove(key);
|
|
1678
|
-
}
|
|
1685
|
+
}, Promise.resolve());
|
|
1679
1686
|
await ((_a = this.keyManifest) === null || _a === void 0 ? void 0 : _a.clear());
|
|
1680
1687
|
}
|
|
1681
1688
|
async wrapCacheEntry(entry) {
|
|
@@ -1700,14 +1707,14 @@ class CacheManager {
|
|
|
1700
1707
|
}, CACHE_KEY_PREFIX, CACHE_KEY_ID_TOKEN_SUFFIX).toKey();
|
|
1701
1708
|
}
|
|
1702
1709
|
matchExistingCacheKey(keyToMatch, allKeys) {
|
|
1703
|
-
return allKeys.filter(
|
|
1710
|
+
return allKeys.filter(key => {
|
|
1704
1711
|
var _a;
|
|
1705
1712
|
const cacheKey = CacheKey.fromKey(key);
|
|
1706
1713
|
const scopeSet = new Set(cacheKey.scope && cacheKey.scope.split(" "));
|
|
1707
1714
|
const scopesToMatch = ((_a = keyToMatch.scope) === null || _a === void 0 ? void 0 : _a.split(" ")) || [];
|
|
1708
|
-
const hasAllScopes = cacheKey.scope && scopesToMatch.reduce((
|
|
1715
|
+
const hasAllScopes = cacheKey.scope && scopesToMatch.reduce((acc, current) => acc && scopeSet.has(current), true);
|
|
1709
1716
|
return cacheKey.prefix === CACHE_KEY_PREFIX && cacheKey.clientId === keyToMatch.clientId && cacheKey.audience === keyToMatch.audience && hasAllScopes;
|
|
1710
|
-
})
|
|
1717
|
+
})[0];
|
|
1711
1718
|
}
|
|
1712
1719
|
async getEntryWithRefreshToken(keyToMatch, allKeys) {
|
|
1713
1720
|
var _a;
|
|
@@ -1776,12 +1783,12 @@ const decode$1 = token => {
|
|
|
1776
1783
|
__raw: token
|
|
1777
1784
|
};
|
|
1778
1785
|
const user = {};
|
|
1779
|
-
Object.keys(payloadJSON).forEach(
|
|
1786
|
+
Object.keys(payloadJSON).forEach(k => {
|
|
1780
1787
|
claims[k] = payloadJSON[k];
|
|
1781
1788
|
if (!idTokendecoded.includes(k)) {
|
|
1782
1789
|
user[k] = payloadJSON[k];
|
|
1783
1790
|
}
|
|
1784
|
-
})
|
|
1791
|
+
});
|
|
1785
1792
|
return {
|
|
1786
1793
|
encoded: {
|
|
1787
1794
|
header: header,
|
|
@@ -2097,17 +2104,17 @@ function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
|
|
|
2097
2104
|
};
|
|
2098
2105
|
}
|
|
2099
2106
|
|
|
2100
|
-
var WorkerFactory = createBase64WorkerFactory("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24oKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBjbGFzcyBHZW5lcmljRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgIHN1cGVyKGVycm9yX2Rlc2NyaXB0aW9uKTsKICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yOwogICAgICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gZXJyb3JfZGVzY3JpcHRpb247CiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBHZW5lcmljRXJyb3IucHJvdG90eXBlKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGZyb21QYXlsb2FkKF9yZWYpIHsKICAgICAgICAgICAgbGV0IHtlcnJvcjogZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvcl9kZXNjcmlwdGlvbn0gPSBfcmVmOwogICAgICAgICAgICByZXR1cm4gbmV3IEdlbmVyaWNFcnJvcihlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24pOwogICAgICAgIH0KICAgIH0KICAgIGNsYXNzIE1pc3NpbmdSZWZyZXNoVG9rZW5FcnJvciBleHRlbmRzIEdlbmVyaWNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoYXVkaWVuY2UsIHNjb3BlKSB7CiAgICAgICAgICAgIHN1cGVyKCJtaXNzaW5nX3JlZnJlc2hfdG9rZW4iLCAiTWlzc2luZyBSZWZyZXNoIFRva2VuIChhdWRpZW5jZTogJyIuY29uY2F0KHZhbHVlT3JFbXB0eVN0cmluZyhhdWRpZW5jZSwgWyAiZGVmYXVsdCIgXSksICInLCBzY29wZTogJyIpLmNvbmNhdCh2YWx1ZU9yRW1wdHlTdHJpbmcoc2NvcGUpLCAiJykiKSk7CiAgICAgICAgICAgIHRoaXMuYXVkaWVuY2UgPSBhdWRpZW5jZTsKICAgICAgICAgICAgdGhpcy5zY29wZSA9IHNjb3BlOwogICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTWlzc2luZ1JlZnJlc2hUb2tlbkVycm9yLnByb3RvdHlwZSk7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gdmFsdWVPckVtcHR5U3RyaW5nKHZhbHVlKSB7CiAgICAgICAgbGV0IGV4Y2x1ZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdOwogICAgICAgIHJldHVybiB2YWx1ZSAmJiAhZXhjbHVkZS5pbmNsdWRlcyh2YWx1ZSkgPyB2YWx1ZSA6ICIiOwogICAgfQogICAgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHsKICAgICAgICB2YXIgdCA9IHt9OwogICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKSB0W3BdID0gc1twXTsKICAgICAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSAiZnVuY3Rpb24iKSBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSkgdFtwW2ldXSA9IHNbcFtpXV07CiAgICAgICAgfQogICAgICAgIHJldHVybiB0OwogICAgfQogICAgdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gImZ1bmN0aW9uIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7CiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7CiAgICAgICAgcmV0dXJuIGUubmFtZSA9ICJTdXBwcmVzc2VkRXJyb3IiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7CiAgICB9OwogICAgY29uc3Qgc3RyaXBVbmRlZmluZWQgPSBwYXJhbXMgPT4gT2JqZWN0LmtleXMocGFyYW1zKS5maWx0ZXIoKGsgPT4gdHlwZW9mIHBhcmFtc1trXSAhPT0gInVuZGVmaW5lZCIpKS5yZWR1Y2UoKChhY2MsIGtleSkgPT4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhY2MpLCB7CiAgICAgICAgW2tleV06IHBhcmFtc1trZXldCiAgICB9KSksIHt9KTsKICAgIGNvbnN0IGNyZWF0ZVF1ZXJ5UGFyYW1zID0gX2EgPT4gewogICAgICAgIHZhciB7Y2xpZW50SWQ6IGNsaWVudF9pZH0gPSBfYSwgcGFyYW1zID0gX19yZXN0KF9hLCBbICJjbGllbnRJZCIgXSk7CiAgICAgICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMoc3RyaXBVbmRlZmluZWQoT2JqZWN0LmFzc2lnbih7CiAgICAgICAgICAgIGNsaWVudF9pZDogY2xpZW50X2lkCiAgICAgICAgfSwgcGFyYW1zKSkpLnRvU3RyaW5nKCk7CiAgICB9OwogICAgY29uc3QgZnJvbUVudHJpZXMgPSBpdGVyYWJsZSA9PiBbIC4uLml0ZXJhYmxlIF0ucmVkdWNlKCgob2JqLCBfcmVmKSA9PiB7CiAgICAgICAgbGV0IFtrZXksIHZhbF0gPSBfcmVmOwogICAgICAgIG9ialtrZXldID0gdmFsOwogICAgICAgIHJldHVybiBvYmo7CiAgICB9KSwge30pOwogICAgbGV0IHJlZnJlc2hUb2tlbnMgPSB7fTsKICAgIGNvbnN0IGNhY2hlS2V5ID0gKGF1ZGllbmNlLCBzY29wZSkgPT4gIiIuY29uY2F0KGF1ZGllbmNlLCAifCIpLmNvbmNhdChzY29wZSk7CiAgICBjb25zdCBjYWNoZUtleUNvbnRhaW5zQXVkaWVuY2UgPSAoYXVkaWVuY2UsIGNhY2hlS2V5KSA9PiBjYWNoZUtleS5zdGFydHNXaXRoKCIiLmNvbmNhdChhdWRpZW5jZSwgInwiKSk7CiAgICBjb25zdCBnZXRSZWZyZXNoVG9rZW4gPSAoYXVkaWVuY2UsIHNjb3BlKSA9PiByZWZyZXNoVG9rZW5zW2NhY2hlS2V5KGF1ZGllbmNlLCBzY29wZSldOwogICAgY29uc3Qgc2V0UmVmcmVzaFRva2VuID0gKHJlZnJlc2hUb2tlbiwgYXVkaWVuY2UsIHNjb3BlKSA9PiByZWZyZXNoVG9rZW5zW2NhY2hlS2V5KGF1ZGllbmNlLCBzY29wZSldID0gcmVmcmVzaFRva2VuOwogICAgY29uc3QgZGVsZXRlUmVmcmVzaFRva2VuID0gKGF1ZGllbmNlLCBzY29wZSkgPT4gZGVsZXRlIHJlZnJlc2hUb2tlbnNbY2FjaGVLZXkoYXVkaWVuY2UsIHNjb3BlKV07CiAgICBjb25zdCB3YWl0ID0gdGltZSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHRpbWUpKSk7CiAgICBjb25zdCBmb3JtRGF0YVRvT2JqZWN0ID0gZm9ybURhdGEgPT4gewogICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhmb3JtRGF0YSk7CiAgICAgICAgY29uc3QgcGFyc2VkUXVlcnkgPSB7fTsKICAgICAgICBxdWVyeVBhcmFtcy5mb3JFYWNoKCgodmFsLCBrZXkpID0+IHsKICAgICAgICAgICAgcGFyc2VkUXVlcnlba2V5XSA9IHZhbDsKICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIHBhcnNlZFF1ZXJ5OwogICAgfTsKICAgIGNvbnN0IHVwZGF0ZVJlZnJlc2hUb2tlbnMgPSAob2xkUmVmcmVzaFRva2VuLCBuZXdSZWZyZXNoVG9rZW4pID0+IHsKICAgICAgICBPYmplY3QuZW50cmllcyhyZWZyZXNoVG9rZW5zKS5mb3JFYWNoKChfcmVmID0+IHsKICAgICAgICAgICAgbGV0IFtrZXksIHRva2VuXSA9IF9yZWY7CiAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gb2xkUmVmcmVzaFRva2VuKSB7CiAgICAgICAgICAgICAgICByZWZyZXNoVG9rZW5zW2tleV0gPSBuZXdSZWZyZXNoVG9rZW47CiAgICAgICAgICAgIH0KICAgICAgICB9KSk7CiAgICB9OwogICAgY29uc3QgY2hlY2tEb3duc2NvcGluZyA9IChzY29wZSwgYXVkaWVuY2UpID0+IHsKICAgICAgICBjb25zdCBmaW5kQ29pbmNpZGVuY2UgPSBPYmplY3Qua2V5cyhyZWZyZXNoVG9rZW5zKS5maW5kKChrZXkgPT4gewogICAgICAgICAgICBpZiAoa2V5ICE9PSAibGF0ZXN0X3JlZnJlc2hfdG9rZW4iKSB7CiAgICAgICAgICAgICAgICBjb25zdCBpc1NhbWVBdWRpZW5jZSA9IGNhY2hlS2V5Q29udGFpbnNBdWRpZW5jZShhdWRpZW5jZSwga2V5KTsKICAgICAgICAgICAgICAgIGNvbnN0IHNjb3Blc0tleSA9IGtleS5zcGxpdCgifCIpWzFdLnNwbGl0KCIgIik7CiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0ZWRTY29wZXMgPSBzY29wZS5zcGxpdCgiICIpOwogICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVzQXJlSW5jbHVkZWQgPSByZXF1ZXN0ZWRTY29wZXMuZXZlcnkoKGtleSA9PiBzY29wZXNLZXkuaW5jbHVkZXMoa2V5KSkpOwogICAgICAgICAgICAgICAgcmV0dXJuIGlzU2FtZUF1ZGllbmNlICYmIHNjb3Blc0FyZUluY2x1ZGVkOwogICAgICAgICAgICB9CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmaW5kQ29pbmNpZGVuY2UgPyB0cnVlIDogZmFsc2U7CiAgICB9OwogICAgY29uc3QgbWVzc2FnZUhhbmRsZXIgPSBhc3luYyBfcmVmMiA9PiB7CiAgICAgICAgbGV0IHtkYXRhOiB7dGltZW91dDogdGltZW91dCwgYXV0aDogYXV0aCwgZmV0Y2hVcmw6IGZldGNoVXJsLCBmZXRjaE9wdGlvbnM6IGZldGNoT3B0aW9ucywgdXNlRm9ybURhdGE6IHVzZUZvcm1EYXRhLCB1c2VNcnJ0OiB1c2VNcnJ0fSwgcG9ydHM6IFtwb3J0XX0gPSBfcmVmMjsKICAgICAgICBsZXQgaGVhZGVycyA9IHt9OwogICAgICAgIGxldCBqc29uOwogICAgICAgIGxldCByZWZyZXNoVG9rZW47CiAgICAgICAgY29uc3Qge2F1ZGllbmNlOiBhdWRpZW5jZSwgc2NvcGU6IHNjb3BlfSA9IGF1dGggfHwge307CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgYm9keSA9IHVzZUZvcm1EYXRhID8gZm9ybURhdGFUb09iamVjdChmZXRjaE9wdGlvbnMuYm9keSkgOiBKU09OLnBhcnNlKGZldGNoT3B0aW9ucy5ib2R5KTsKICAgICAgICAgICAgaWYgKCFib2R5LnJlZnJlc2hfdG9rZW4gJiYgYm9keS5ncmFudF90eXBlID09PSAicmVmcmVzaF90b2tlbiIpIHsKICAgICAgICAgICAgICAgIHJlZnJlc2hUb2tlbiA9IGdldFJlZnJlc2hUb2tlbihhdWRpZW5jZSwgc2NvcGUpOwogICAgICAgICAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4gJiYgdXNlTXJydCkgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhdGVzdFJlZnJlc2hUb2tlbiA9IHJlZnJlc2hUb2tlbnNbImxhdGVzdF9yZWZyZXNoX3Rva2VuIl07CiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNEb3duc2NvcGluZyA9IGNoZWNrRG93bnNjb3Bpbmcoc2NvcGUsIGF1ZGllbmNlKTsKICAgICAgICAgICAgICAgICAgICBpZiAobGF0ZXN0UmVmcmVzaFRva2VuICYmICFpc0Rvd25zY29waW5nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hUb2tlbiA9IGxhdGVzdFJlZnJlc2hUb2tlbjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbikgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBNaXNzaW5nUmVmcmVzaFRva2VuRXJyb3IoYXVkaWVuY2UsIHNjb3BlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZldGNoT3B0aW9ucy5ib2R5ID0gdXNlRm9ybURhdGEgPyBjcmVhdGVRdWVyeVBhcmFtcyhPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJvZHkpLCB7CiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuCiAgICAgICAgICAgICAgICB9KSkgOiBKU09OLnN0cmluZ2lmeShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGJvZHkpLCB7CiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuCiAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGV0IGFib3J0Q29udHJvbGxlcjsKICAgICAgICAgICAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgICAgIGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXI7CiAgICAgICAgICAgICAgICBmZXRjaE9wdGlvbnMuc2lnbmFsID0gYWJvcnRDb250cm9sbGVyLnNpZ25hbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgcmVzcG9uc2U7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbIHdhaXQodGltZW91dCksIGZldGNoKGZldGNoVXJsLCBPYmplY3QuYXNzaWduKHt9LCBmZXRjaE9wdGlvbnMpKSBdKTsKICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvci5tZXNzYWdlCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIXJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgICBpZiAoYWJvcnRDb250cm9sbGVyKSBhYm9ydENvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgICAgIGVycm9yOiAiVGltZW91dCB3aGVuIGV4ZWN1dGluZyAnZmV0Y2gnIgogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaGVhZGVycyA9IGZyb21FbnRyaWVzKHJlc3BvbnNlLmhlYWRlcnMpOwogICAgICAgICAgICBqc29uID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOwogICAgICAgICAgICBpZiAoanNvbi5yZWZyZXNoX3Rva2VuKSB7CiAgICAgICAgICAgICAgICBpZiAodXNlTXJydCkgewogICAgICAgICAgICAgICAgICAgIHJlZnJlc2hUb2tlbnNbImxhdGVzdF9yZWZyZXNoX3Rva2VuIl0gPSBqc29uLnJlZnJlc2hfdG9rZW47CiAgICAgICAgICAgICAgICAgICAgdXBkYXRlUmVmcmVzaFRva2VucyhyZWZyZXNoVG9rZW4sIGpzb24ucmVmcmVzaF90b2tlbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzZXRSZWZyZXNoVG9rZW4oanNvbi5yZWZyZXNoX3Rva2VuLCBhdWRpZW5jZSwgc2NvcGUpOwogICAgICAgICAgICAgICAgZGVsZXRlIGpzb24ucmVmcmVzaF90b2tlbjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRlbGV0ZVJlZnJlc2hUb2tlbihhdWRpZW5jZSwgc2NvcGUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UoewogICAgICAgICAgICAgICAgb2s6IHJlc3BvbnNlLm9rLAogICAgICAgICAgICAgICAganNvbjoganNvbiwKICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMKICAgICAgICAgICAgfSk7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICBvazogZmFsc2UsCiAgICAgICAgICAgICAgICBqc29uOiB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLmVycm9yLAogICAgICAgICAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvci5tZXNzYWdlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9OwogICAgewogICAgICAgIGFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBtZXNzYWdlSGFuZGxlcik7CiAgICB9Cn0pKCk7Cgo=", null, false);
|
|
2107
|
+
var WorkerFactory = createBase64WorkerFactory("Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24oKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBjbGFzcyBHZW5lcmljRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9uKSB7CiAgICAgICAgICAgIHN1cGVyKGVycm9yX2Rlc2NyaXB0aW9uKTsKICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yOwogICAgICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gZXJyb3JfZGVzY3JpcHRpb247CiAgICAgICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLCBHZW5lcmljRXJyb3IucHJvdG90eXBlKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGZyb21QYXlsb2FkKF9yZWYpIHsKICAgICAgICAgICAgbGV0IHtlcnJvcjogZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9uOiBlcnJvcl9kZXNjcmlwdGlvbn0gPSBfcmVmOwogICAgICAgICAgICByZXR1cm4gbmV3IEdlbmVyaWNFcnJvcihlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24pOwogICAgICAgIH0KICAgIH0KICAgIGNsYXNzIE1pc3NpbmdSZWZyZXNoVG9rZW5FcnJvciBleHRlbmRzIEdlbmVyaWNFcnJvciB7CiAgICAgICAgY29uc3RydWN0b3IoYXVkaWVuY2UsIHNjb3BlKSB7CiAgICAgICAgICAgIHN1cGVyKCJtaXNzaW5nX3JlZnJlc2hfdG9rZW4iLCAiTWlzc2luZyBSZWZyZXNoIFRva2VuIChhdWRpZW5jZTogJyIuY29uY2F0KHZhbHVlT3JFbXB0eVN0cmluZyhhdWRpZW5jZSwgWyAiZGVmYXVsdCIgXSksICInLCBzY29wZTogJyIpLmNvbmNhdCh2YWx1ZU9yRW1wdHlTdHJpbmcoc2NvcGUpLCAiJykiKSk7CiAgICAgICAgICAgIHRoaXMuYXVkaWVuY2UgPSBhdWRpZW5jZTsKICAgICAgICAgICAgdGhpcy5zY29wZSA9IHNjb3BlOwogICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgTWlzc2luZ1JlZnJlc2hUb2tlbkVycm9yLnByb3RvdHlwZSk7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gdmFsdWVPckVtcHR5U3RyaW5nKHZhbHVlKSB7CiAgICAgICAgbGV0IGV4Y2x1ZGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdOwogICAgICAgIHJldHVybiB2YWx1ZSAmJiAhZXhjbHVkZS5pbmNsdWRlcyh2YWx1ZSkgPyB2YWx1ZSA6ICIiOwogICAgfQogICAgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHsKICAgICAgICB2YXIgdCA9IHt9OwogICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKSB0W3BdID0gc1twXTsKICAgICAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSAiZnVuY3Rpb24iKSBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSkgdFtwW2ldXSA9IHNbcFtpXV07CiAgICAgICAgfQogICAgICAgIHJldHVybiB0OwogICAgfQogICAgdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gImZ1bmN0aW9uIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7CiAgICAgICAgdmFyIGUgPSBuZXcgRXJyb3IobWVzc2FnZSk7CiAgICAgICAgcmV0dXJuIGUubmFtZSA9ICJTdXBwcmVzc2VkRXJyb3IiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7CiAgICB9OwogICAgY29uc3Qgc3RyaXBVbmRlZmluZWQgPSBwYXJhbXMgPT4gT2JqZWN0LmtleXMocGFyYW1zKS5maWx0ZXIoayA9PiB0eXBlb2YgcGFyYW1zW2tdICE9PSAidW5kZWZpbmVkIikucmVkdWNlKChhY2MsIGtleSkgPT4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhY2MpLCB7CiAgICAgICAgW2tleV06IHBhcmFtc1trZXldCiAgICB9KSwge30pOwogICAgY29uc3QgY3JlYXRlUXVlcnlQYXJhbXMgPSBfYSA9PiB7CiAgICAgICAgdmFyIHtjbGllbnRJZDogY2xpZW50X2lkfSA9IF9hLCBwYXJhbXMgPSBfX3Jlc3QoX2EsIFsgImNsaWVudElkIiBdKTsKICAgICAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyhzdHJpcFVuZGVmaW5lZChPYmplY3QuYXNzaWduKHsKICAgICAgICAgICAgY2xpZW50X2lkOiBjbGllbnRfaWQKICAgICAgICB9LCBwYXJhbXMpKSkudG9TdHJpbmcoKTsKICAgIH07CiAgICBjb25zdCBmcm9tRW50cmllcyA9IGl0ZXJhYmxlID0+IFsgLi4uaXRlcmFibGUgXS5yZWR1Y2UoKG9iaiwgX3JlZikgPT4gewogICAgICAgIGxldCBba2V5LCB2YWxdID0gX3JlZjsKICAgICAgICBvYmpba2V5XSA9IHZhbDsKICAgICAgICByZXR1cm4gb2JqOwogICAgfSwge30pOwogICAgbGV0IHJlZnJlc2hUb2tlbnMgPSB7fTsKICAgIGNvbnN0IGNhY2hlS2V5ID0gKGF1ZGllbmNlLCBzY29wZSkgPT4gIiIuY29uY2F0KGF1ZGllbmNlLCAifCIpLmNvbmNhdChzY29wZSk7CiAgICBjb25zdCBjYWNoZUtleUNvbnRhaW5zQXVkaWVuY2UgPSAoYXVkaWVuY2UsIGNhY2hlS2V5KSA9PiBjYWNoZUtleS5zdGFydHNXaXRoKCIiLmNvbmNhdChhdWRpZW5jZSwgInwiKSk7CiAgICBjb25zdCBnZXRSZWZyZXNoVG9rZW4gPSAoYXVkaWVuY2UsIHNjb3BlKSA9PiByZWZyZXNoVG9rZW5zW2NhY2hlS2V5KGF1ZGllbmNlLCBzY29wZSldOwogICAgY29uc3Qgc2V0UmVmcmVzaFRva2VuID0gKHJlZnJlc2hUb2tlbiwgYXVkaWVuY2UsIHNjb3BlKSA9PiByZWZyZXNoVG9rZW5zW2NhY2hlS2V5KGF1ZGllbmNlLCBzY29wZSldID0gcmVmcmVzaFRva2VuOwogICAgY29uc3QgZGVsZXRlUmVmcmVzaFRva2VuID0gKGF1ZGllbmNlLCBzY29wZSkgPT4gZGVsZXRlIHJlZnJlc2hUb2tlbnNbY2FjaGVLZXkoYXVkaWVuY2UsIHNjb3BlKV07CiAgICBjb25zdCB3YWl0ID0gdGltZSA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgdGltZSkpOwogICAgY29uc3QgZm9ybURhdGFUb09iamVjdCA9IGZvcm1EYXRhID0+IHsKICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoZm9ybURhdGEpOwogICAgICAgIGNvbnN0IHBhcnNlZFF1ZXJ5ID0ge307CiAgICAgICAgcXVlcnlQYXJhbXMuZm9yRWFjaCgodmFsLCBrZXkpID0+IHsKICAgICAgICAgICAgcGFyc2VkUXVlcnlba2V5XSA9IHZhbDsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcGFyc2VkUXVlcnk7CiAgICB9OwogICAgY29uc3QgdXBkYXRlUmVmcmVzaFRva2VucyA9IChvbGRSZWZyZXNoVG9rZW4sIG5ld1JlZnJlc2hUb2tlbikgPT4gewogICAgICAgIE9iamVjdC5lbnRyaWVzKHJlZnJlc2hUb2tlbnMpLmZvckVhY2goX3JlZiA9PiB7CiAgICAgICAgICAgIGxldCBba2V5LCB0b2tlbl0gPSBfcmVmOwogICAgICAgICAgICBpZiAodG9rZW4gPT09IG9sZFJlZnJlc2hUb2tlbikgewogICAgICAgICAgICAgICAgcmVmcmVzaFRva2Vuc1trZXldID0gbmV3UmVmcmVzaFRva2VuOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9OwogICAgY29uc3QgY2hlY2tEb3duc2NvcGluZyA9IChzY29wZSwgYXVkaWVuY2UpID0+IHsKICAgICAgICBjb25zdCBmaW5kQ29pbmNpZGVuY2UgPSBPYmplY3Qua2V5cyhyZWZyZXNoVG9rZW5zKS5maW5kKGtleSA9PiB7CiAgICAgICAgICAgIGlmIChrZXkgIT09ICJsYXRlc3RfcmVmcmVzaF90b2tlbiIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IGlzU2FtZUF1ZGllbmNlID0gY2FjaGVLZXlDb250YWluc0F1ZGllbmNlKGF1ZGllbmNlLCBrZXkpOwogICAgICAgICAgICAgICAgY29uc3Qgc2NvcGVzS2V5ID0ga2V5LnNwbGl0KCJ8IilbMV0uc3BsaXQoIiAiKTsKICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RlZFNjb3BlcyA9IHNjb3BlLnNwbGl0KCIgIik7CiAgICAgICAgICAgICAgICBjb25zdCBzY29wZXNBcmVJbmNsdWRlZCA9IHJlcXVlc3RlZFNjb3Blcy5ldmVyeShrZXkgPT4gc2NvcGVzS2V5LmluY2x1ZGVzKGtleSkpOwogICAgICAgICAgICAgICAgcmV0dXJuIGlzU2FtZUF1ZGllbmNlICYmIHNjb3Blc0FyZUluY2x1ZGVkOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGZpbmRDb2luY2lkZW5jZSA/IHRydWUgOiBmYWxzZTsKICAgIH07CiAgICBjb25zdCBtZXNzYWdlSGFuZGxlciA9IGFzeW5jIF9yZWYyID0+IHsKICAgICAgICBsZXQge2RhdGE6IHt0aW1lb3V0OiB0aW1lb3V0LCBhdXRoOiBhdXRoLCBmZXRjaFVybDogZmV0Y2hVcmwsIGZldGNoT3B0aW9uczogZmV0Y2hPcHRpb25zLCB1c2VGb3JtRGF0YTogdXNlRm9ybURhdGEsIHVzZU1ycnQ6IHVzZU1ycnR9LCBwb3J0czogW3BvcnRdfSA9IF9yZWYyOwogICAgICAgIGxldCBoZWFkZXJzID0ge307CiAgICAgICAgbGV0IGpzb247CiAgICAgICAgbGV0IHJlZnJlc2hUb2tlbjsKICAgICAgICBjb25zdCB7YXVkaWVuY2U6IGF1ZGllbmNlLCBzY29wZTogc2NvcGV9ID0gYXV0aCB8fCB7fTsKICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCBib2R5ID0gdXNlRm9ybURhdGEgPyBmb3JtRGF0YVRvT2JqZWN0KGZldGNoT3B0aW9ucy5ib2R5KSA6IEpTT04ucGFyc2UoZmV0Y2hPcHRpb25zLmJvZHkpOwogICAgICAgICAgICBpZiAoIWJvZHkucmVmcmVzaF90b2tlbiAmJiBib2R5LmdyYW50X3R5cGUgPT09ICJyZWZyZXNoX3Rva2VuIikgewogICAgICAgICAgICAgICAgcmVmcmVzaFRva2VuID0gZ2V0UmVmcmVzaFRva2VuKGF1ZGllbmNlLCBzY29wZSk7CiAgICAgICAgICAgICAgICBpZiAoIXJlZnJlc2hUb2tlbiAmJiB1c2VNcnJ0KSB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF0ZXN0UmVmcmVzaFRva2VuID0gcmVmcmVzaFRva2Vuc1sibGF0ZXN0X3JlZnJlc2hfdG9rZW4iXTsKICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0Rvd25zY29waW5nID0gY2hlY2tEb3duc2NvcGluZyhzY29wZSwgYXVkaWVuY2UpOwogICAgICAgICAgICAgICAgICAgIGlmIChsYXRlc3RSZWZyZXNoVG9rZW4gJiYgIWlzRG93bnNjb3BpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFRva2VuID0gbGF0ZXN0UmVmcmVzaFRva2VuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghcmVmcmVzaFRva2VuKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1pc3NpbmdSZWZyZXNoVG9rZW5FcnJvcihhdWRpZW5jZSwgc2NvcGUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmV0Y2hPcHRpb25zLmJvZHkgPSB1c2VGb3JtRGF0YSA/IGNyZWF0ZVF1ZXJ5UGFyYW1zKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYm9keSksIHsKICAgICAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4KICAgICAgICAgICAgICAgIH0pKSA6IEpTT04uc3RyaW5naWZ5KE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgYm9keSksIHsKICAgICAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4KICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgYWJvcnRDb250cm9sbGVyOwogICAgICAgICAgICBpZiAodHlwZW9mIEFib3J0Q29udHJvbGxlciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcjsKICAgICAgICAgICAgICAgIGZldGNoT3B0aW9ucy5zaWduYWwgPSBhYm9ydENvbnRyb2xsZXIuc2lnbmFsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxldCByZXNwb25zZTsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFsgd2FpdCh0aW1lb3V0KSwgZmV0Y2goZmV0Y2hVcmwsIE9iamVjdC5hc3NpZ24oe30sIGZldGNoT3B0aW9ucykpIF0pOwogICAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLm1lc3NhZ2UKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghcmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIpIGFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICJUaW1lb3V0IHdoZW4gZXhlY3V0aW5nICdmZXRjaCciCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBoZWFkZXJzID0gZnJvbUVudHJpZXMocmVzcG9uc2UuaGVhZGVycyk7CiAgICAgICAgICAgIGpzb24gPSBhd2FpdCByZXNwb25zZS5qc29uKCk7CiAgICAgICAgICAgIGlmIChqc29uLnJlZnJlc2hfdG9rZW4pIHsKICAgICAgICAgICAgICAgIGlmICh1c2VNcnJ0KSB7CiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFRva2Vuc1sibGF0ZXN0X3JlZnJlc2hfdG9rZW4iXSA9IGpzb24ucmVmcmVzaF90b2tlbjsKICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWZyZXNoVG9rZW5zKHJlZnJlc2hUb2tlbiwganNvbi5yZWZyZXNoX3Rva2VuKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHNldFJlZnJlc2hUb2tlbihqc29uLnJlZnJlc2hfdG9rZW4sIGF1ZGllbmNlLCBzY29wZSk7CiAgICAgICAgICAgICAgICBkZWxldGUganNvbi5yZWZyZXNoX3Rva2VuOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZGVsZXRlUmVmcmVzaFRva2VuKGF1ZGllbmNlLCBzY29wZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZSh7CiAgICAgICAgICAgICAgICBvazogcmVzcG9uc2Uub2ssCiAgICAgICAgICAgICAgICBqc29uOiBqc29uLAogICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycwogICAgICAgICAgICB9KTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKHsKICAgICAgICAgICAgICAgIG9rOiBmYWxzZSwKICAgICAgICAgICAgICAgIGpzb246IHsKICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IuZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgZXJyb3JfZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2UKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CiAgICB7CiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG1lc3NhZ2VIYW5kbGVyKTsKICAgIH0KfSkoKTsKCg==", null, false);
|
|
2101
2108
|
|
|
2102
2109
|
const singlePromiseMap = {};
|
|
2103
2110
|
|
|
2104
2111
|
const singlePromise = (cb, key) => {
|
|
2105
2112
|
let promise = singlePromiseMap[key];
|
|
2106
2113
|
if (!promise) {
|
|
2107
|
-
promise = cb().finally((
|
|
2114
|
+
promise = cb().finally(() => {
|
|
2108
2115
|
delete singlePromiseMap[key];
|
|
2109
2116
|
promise = null;
|
|
2110
|
-
})
|
|
2117
|
+
});
|
|
2111
2118
|
singlePromiseMap[key] = promise;
|
|
2112
2119
|
}
|
|
2113
2120
|
return promise;
|
|
@@ -2197,13 +2204,13 @@ const patchOpenUrlWithOnRedirect = options => {
|
|
|
2197
2204
|
const allScopesAreIncluded = (scopeToInclude, scopes) => {
|
|
2198
2205
|
const scopeGroup = (scopes === null || scopes === void 0 ? void 0 : scopes.split(" ")) || [];
|
|
2199
2206
|
const scopesToInclude = (scopeToInclude === null || scopeToInclude === void 0 ? void 0 : scopeToInclude.split(" ")) || [];
|
|
2200
|
-
return scopesToInclude.every(
|
|
2207
|
+
return scopesToInclude.every(key => scopeGroup.includes(key));
|
|
2201
2208
|
};
|
|
2202
2209
|
|
|
2203
2210
|
const getMissingScopes = (requestedScope, respondedScope) => {
|
|
2204
2211
|
const requestedScopes = (requestedScope === null || requestedScope === void 0 ? void 0 : requestedScope.split(" ")) || [];
|
|
2205
2212
|
const respondedScopes = (respondedScope === null || respondedScope === void 0 ? void 0 : respondedScope.split(" ")) || [];
|
|
2206
|
-
const missingScopes = requestedScopes.filter(
|
|
2213
|
+
const missingScopes = requestedScopes.filter(scope => respondedScopes.indexOf(scope) == -1);
|
|
2207
2214
|
return missingScopes.join(",");
|
|
2208
2215
|
};
|
|
2209
2216
|
|
|
@@ -2215,7 +2222,7 @@ const getScopeToRequest = (useMrrt, authorizationParams, cachedAudience, cachedS
|
|
|
2215
2222
|
}
|
|
2216
2223
|
const cachedScopes = cachedScope.split(" ");
|
|
2217
2224
|
const newScopes = ((_a = authorizationParams.scope) === null || _a === void 0 ? void 0 : _a.split(" ")) || [];
|
|
2218
|
-
const newScopesAreIncluded = newScopes.every(
|
|
2225
|
+
const newScopesAreIncluded = newScopes.every(scope => cachedScopes.includes(scope));
|
|
2219
2226
|
return cachedScopes.length >= newScopes.length && newScopesAreIncluded ? cachedScope : authorizationParams.scope;
|
|
2220
2227
|
}
|
|
2221
2228
|
return authorizationParams.scope;
|
|
@@ -2248,11 +2255,11 @@ class DpopStorage {
|
|
|
2248
2255
|
}
|
|
2249
2256
|
createDbHandle() {
|
|
2250
2257
|
const req = window.indexedDB.open(NAME, this.getVersion());
|
|
2251
|
-
return new Promise((
|
|
2252
|
-
req.onupgradeneeded = () => Object.values(TABLES).forEach(
|
|
2258
|
+
return new Promise((resolve, reject) => {
|
|
2259
|
+
req.onupgradeneeded = () => Object.values(TABLES).forEach(t => req.result.createObjectStore(t));
|
|
2253
2260
|
req.onerror = () => reject(req.error);
|
|
2254
2261
|
req.onsuccess = () => resolve(req.result);
|
|
2255
|
-
})
|
|
2262
|
+
});
|
|
2256
2263
|
}
|
|
2257
2264
|
async getDbHandle() {
|
|
2258
2265
|
if (!this.dbHandle) {
|
|
@@ -2265,10 +2272,10 @@ class DpopStorage {
|
|
|
2265
2272
|
const txn = db.transaction(table, mode);
|
|
2266
2273
|
const store = txn.objectStore(table);
|
|
2267
2274
|
const request = requestFactory(store);
|
|
2268
|
-
return new Promise((
|
|
2275
|
+
return new Promise((resolve, reject) => {
|
|
2269
2276
|
request.onsuccess = () => resolve(request.result);
|
|
2270
2277
|
request.onerror = () => reject(request.error);
|
|
2271
|
-
})
|
|
2278
|
+
});
|
|
2272
2279
|
}
|
|
2273
2280
|
buildKey(id) {
|
|
2274
2281
|
const finalId = id ? "_".concat(id) : AUTH0_NONCE_ID;
|
|
@@ -2281,7 +2288,7 @@ class DpopStorage {
|
|
|
2281
2288
|
return this.save(TABLES.KEYPAIR, this.buildKey(), keyPair);
|
|
2282
2289
|
}
|
|
2283
2290
|
async save(table, key, obj) {
|
|
2284
|
-
return void await this.executeDbRequest(table, "readwrite",
|
|
2291
|
+
return void await this.executeDbRequest(table, "readwrite", table => table.put(obj, key));
|
|
2285
2292
|
}
|
|
2286
2293
|
findNonce(id) {
|
|
2287
2294
|
return this.find(TABLES.NONCE, this.buildKey(id));
|
|
@@ -2290,14 +2297,14 @@ class DpopStorage {
|
|
|
2290
2297
|
return this.find(TABLES.KEYPAIR, this.buildKey());
|
|
2291
2298
|
}
|
|
2292
2299
|
find(table, key) {
|
|
2293
|
-
return this.executeDbRequest(table, "readonly",
|
|
2300
|
+
return this.executeDbRequest(table, "readonly", table => table.get(key));
|
|
2294
2301
|
}
|
|
2295
2302
|
async deleteBy(table, predicate) {
|
|
2296
|
-
const allKeys = await this.executeDbRequest(table, "readonly",
|
|
2297
|
-
allKeys === null || allKeys === void 0 ? void 0 : allKeys.filter(predicate).map(
|
|
2303
|
+
const allKeys = await this.executeDbRequest(table, "readonly", table => table.getAllKeys());
|
|
2304
|
+
allKeys === null || allKeys === void 0 ? void 0 : allKeys.filter(predicate).map(k => this.executeDbRequest(table, "readwrite", table => table.delete(k)));
|
|
2298
2305
|
}
|
|
2299
2306
|
deleteByClientId(table, clientId) {
|
|
2300
|
-
return this.deleteBy(table,
|
|
2307
|
+
return this.deleteBy(table, k => typeof k === "string" && k.startsWith("".concat(clientId, "::")));
|
|
2301
2308
|
}
|
|
2302
2309
|
clearNonces() {
|
|
2303
2310
|
return this.deleteByClientId(TABLES.NONCE, this.clientId);
|
|
@@ -2627,9 +2634,9 @@ function ownKeys(e, r) {
|
|
|
2627
2634
|
var t = Object.keys(e);
|
|
2628
2635
|
if (Object.getOwnPropertySymbols) {
|
|
2629
2636
|
var o = Object.getOwnPropertySymbols(e);
|
|
2630
|
-
r && (o = o.filter(
|
|
2637
|
+
r && (o = o.filter(function(r) {
|
|
2631
2638
|
return Object.getOwnPropertyDescriptor(e, r).enumerable;
|
|
2632
|
-
}))
|
|
2639
|
+
})), t.push.apply(t, o);
|
|
2633
2640
|
}
|
|
2634
2641
|
return t;
|
|
2635
2642
|
}
|
|
@@ -2637,11 +2644,11 @@ function ownKeys(e, r) {
|
|
|
2637
2644
|
function _objectSpread2(e) {
|
|
2638
2645
|
for (var r = 1; r < arguments.length; r++) {
|
|
2639
2646
|
var t = null != arguments[r] ? arguments[r] : {};
|
|
2640
|
-
r % 2 ? ownKeys(Object(t), !0).forEach(
|
|
2647
|
+
r % 2 ? ownKeys(Object(t), !0).forEach(function(r) {
|
|
2641
2648
|
_defineProperty(e, r, t[r]);
|
|
2642
|
-
})
|
|
2649
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r) {
|
|
2643
2650
|
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
|
|
2644
|
-
})
|
|
2651
|
+
});
|
|
2645
2652
|
}
|
|
2646
2653
|
return e;
|
|
2647
2654
|
}
|
|
@@ -2689,56 +2696,41 @@ function _wrapAsyncGenerator(e) {
|
|
|
2689
2696
|
}
|
|
2690
2697
|
|
|
2691
2698
|
function AsyncGenerator(e) {
|
|
2692
|
-
var
|
|
2693
|
-
function resume(
|
|
2699
|
+
var t, n;
|
|
2700
|
+
function resume(t, n) {
|
|
2694
2701
|
try {
|
|
2695
|
-
var
|
|
2696
|
-
Promise.resolve(u ? o.v : o).then(
|
|
2702
|
+
var r = e[t](n), o = r.value, u = o instanceof _OverloadYield;
|
|
2703
|
+
Promise.resolve(u ? o.v : o).then(function(n) {
|
|
2697
2704
|
if (u) {
|
|
2698
|
-
var i = "return" ===
|
|
2699
|
-
if (!o.k ||
|
|
2700
|
-
|
|
2705
|
+
var i = "return" === t && o.k ? t : "next";
|
|
2706
|
+
if (!o.k || n.done) return resume(i, n);
|
|
2707
|
+
n = e[i](n).value;
|
|
2701
2708
|
}
|
|
2702
|
-
settle(
|
|
2703
|
-
}
|
|
2709
|
+
settle(!!r.done, n);
|
|
2710
|
+
}, function(e) {
|
|
2704
2711
|
resume("throw", e);
|
|
2705
|
-
})
|
|
2712
|
+
});
|
|
2706
2713
|
} catch (e) {
|
|
2707
|
-
settle(
|
|
2714
|
+
settle(2, e);
|
|
2708
2715
|
}
|
|
2709
2716
|
}
|
|
2710
|
-
function settle(e,
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
done: !0
|
|
2716
|
-
});
|
|
2717
|
-
break;
|
|
2718
|
-
|
|
2719
|
-
case "throw":
|
|
2720
|
-
r.reject(n);
|
|
2721
|
-
break;
|
|
2722
|
-
|
|
2723
|
-
default:
|
|
2724
|
-
r.resolve({
|
|
2725
|
-
value: n,
|
|
2726
|
-
done: !1
|
|
2727
|
-
});
|
|
2728
|
-
}
|
|
2729
|
-
(r = r.next) ? resume(r.key, r.arg) : t = null;
|
|
2717
|
+
function settle(e, r) {
|
|
2718
|
+
2 === e ? t.reject(r) : t.resolve({
|
|
2719
|
+
value: r,
|
|
2720
|
+
done: e
|
|
2721
|
+
}), (t = t.next) ? resume(t.key, t.arg) : n = null;
|
|
2730
2722
|
}
|
|
2731
|
-
this._invoke = function(e,
|
|
2732
|
-
return new Promise(
|
|
2723
|
+
this._invoke = function(e, r) {
|
|
2724
|
+
return new Promise(function(o, u) {
|
|
2733
2725
|
var i = {
|
|
2734
2726
|
key: e,
|
|
2735
|
-
arg:
|
|
2727
|
+
arg: r,
|
|
2736
2728
|
resolve: o,
|
|
2737
2729
|
reject: u,
|
|
2738
2730
|
next: null
|
|
2739
2731
|
};
|
|
2740
|
-
|
|
2741
|
-
})
|
|
2732
|
+
n ? n = n.next = i : (t = n = i, resume(e, r));
|
|
2733
|
+
});
|
|
2742
2734
|
}, "function" != typeof e.return && (this.return = void 0);
|
|
2743
2735
|
}
|
|
2744
2736
|
|
|
@@ -2758,7 +2750,7 @@ let USER_AGENT$2;
|
|
|
2758
2750
|
|
|
2759
2751
|
if (typeof navigator === "undefined" || !((_navigator$userAgent$2 = navigator.userAgent) !== null && _navigator$userAgent$2 !== void 0 && (_navigator$userAgent$$2 = _navigator$userAgent$2.startsWith) !== null && _navigator$userAgent$$2 !== void 0 && _navigator$userAgent$$2.call(_navigator$userAgent$2, "Mozilla/5.0 "))) {
|
|
2760
2752
|
const NAME = "oauth4webapi";
|
|
2761
|
-
const VERSION = "v3.8.
|
|
2753
|
+
const VERSION = "v3.8.5";
|
|
2762
2754
|
USER_AGENT$2 = "".concat(NAME, "/").concat(VERSION);
|
|
2763
2755
|
}
|
|
2764
2756
|
|
|
@@ -2988,7 +2980,7 @@ async function performDiscovery$1(input, urlName, transform, options) {
|
|
|
2988
2980
|
}
|
|
2989
2981
|
|
|
2990
2982
|
async function discoveryRequest(issuerIdentifier, options) {
|
|
2991
|
-
return performDiscovery$1(issuerIdentifier, "issuerIdentifier",
|
|
2983
|
+
return performDiscovery$1(issuerIdentifier, "issuerIdentifier", url => {
|
|
2992
2984
|
switch (options === null || options === void 0 ? void 0 : options.algorithm) {
|
|
2993
2985
|
case undefined:
|
|
2994
2986
|
case "oidc":
|
|
@@ -3003,7 +2995,7 @@ async function discoveryRequest(issuerIdentifier, options) {
|
|
|
3003
2995
|
throw CodedTypeError$1('"options.algorithm" must be "oidc" (default), or "oauth2"', ERR_INVALID_ARG_VALUE$1);
|
|
3004
2996
|
}
|
|
3005
2997
|
return url;
|
|
3006
|
-
}
|
|
2998
|
+
}, options);
|
|
3007
2999
|
}
|
|
3008
3000
|
|
|
3009
3001
|
function assertNumber(input, allow0, it, code, cause) {
|
|
@@ -4351,10 +4343,10 @@ function concat() {
|
|
|
4351
4343
|
for (var _len = arguments.length, buffers = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
4352
4344
|
buffers[_key] = arguments[_key];
|
|
4353
4345
|
}
|
|
4354
|
-
const size = buffers.reduce((
|
|
4346
|
+
const size = buffers.reduce((acc, _ref) => {
|
|
4355
4347
|
let {length: length} = _ref;
|
|
4356
4348
|
return acc + length;
|
|
4357
|
-
}
|
|
4349
|
+
}, 0);
|
|
4358
4350
|
const buf = new Uint8Array(size);
|
|
4359
4351
|
let i = 0;
|
|
4360
4352
|
for (const buffer of buffers) {
|
|
@@ -4406,6 +4398,145 @@ function decode(input) {
|
|
|
4406
4398
|
}
|
|
4407
4399
|
}
|
|
4408
4400
|
|
|
4401
|
+
const unusable = function unusable(name) {
|
|
4402
|
+
let prop = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "algorithm.name";
|
|
4403
|
+
return new TypeError("CryptoKey does not support this operation, its ".concat(prop, " must be ").concat(name));
|
|
4404
|
+
};
|
|
4405
|
+
|
|
4406
|
+
const isAlgorithm = (algorithm, name) => algorithm.name === name;
|
|
4407
|
+
|
|
4408
|
+
function getHashLength(hash) {
|
|
4409
|
+
return parseInt(hash.name.slice(4), 10);
|
|
4410
|
+
}
|
|
4411
|
+
|
|
4412
|
+
function checkHashLength(algorithm, expected) {
|
|
4413
|
+
const actual = getHashLength(algorithm.hash);
|
|
4414
|
+
if (actual !== expected) throw unusable("SHA-".concat(expected), "algorithm.hash");
|
|
4415
|
+
}
|
|
4416
|
+
|
|
4417
|
+
function getNamedCurve(alg) {
|
|
4418
|
+
switch (alg) {
|
|
4419
|
+
case "ES256":
|
|
4420
|
+
return "P-256";
|
|
4421
|
+
|
|
4422
|
+
case "ES384":
|
|
4423
|
+
return "P-384";
|
|
4424
|
+
|
|
4425
|
+
case "ES512":
|
|
4426
|
+
return "P-521";
|
|
4427
|
+
|
|
4428
|
+
default:
|
|
4429
|
+
throw new Error("unreachable");
|
|
4430
|
+
}
|
|
4431
|
+
}
|
|
4432
|
+
|
|
4433
|
+
function checkUsage(key, usage) {
|
|
4434
|
+
if (usage && !key.usages.includes(usage)) {
|
|
4435
|
+
throw new TypeError("CryptoKey does not support this operation, its usages must include ".concat(usage, "."));
|
|
4436
|
+
}
|
|
4437
|
+
}
|
|
4438
|
+
|
|
4439
|
+
function checkSigCryptoKey(key, alg, usage) {
|
|
4440
|
+
switch (alg) {
|
|
4441
|
+
case "HS256":
|
|
4442
|
+
case "HS384":
|
|
4443
|
+
case "HS512":
|
|
4444
|
+
{
|
|
4445
|
+
if (!isAlgorithm(key.algorithm, "HMAC")) throw unusable("HMAC");
|
|
4446
|
+
checkHashLength(key.algorithm, parseInt(alg.slice(2), 10));
|
|
4447
|
+
break;
|
|
4448
|
+
}
|
|
4449
|
+
|
|
4450
|
+
case "RS256":
|
|
4451
|
+
case "RS384":
|
|
4452
|
+
case "RS512":
|
|
4453
|
+
{
|
|
4454
|
+
if (!isAlgorithm(key.algorithm, "RSASSA-PKCS1-v1_5")) throw unusable("RSASSA-PKCS1-v1_5");
|
|
4455
|
+
checkHashLength(key.algorithm, parseInt(alg.slice(2), 10));
|
|
4456
|
+
break;
|
|
4457
|
+
}
|
|
4458
|
+
|
|
4459
|
+
case "PS256":
|
|
4460
|
+
case "PS384":
|
|
4461
|
+
case "PS512":
|
|
4462
|
+
{
|
|
4463
|
+
if (!isAlgorithm(key.algorithm, "RSA-PSS")) throw unusable("RSA-PSS");
|
|
4464
|
+
checkHashLength(key.algorithm, parseInt(alg.slice(2), 10));
|
|
4465
|
+
break;
|
|
4466
|
+
}
|
|
4467
|
+
|
|
4468
|
+
case "Ed25519":
|
|
4469
|
+
case "EdDSA":
|
|
4470
|
+
{
|
|
4471
|
+
if (!isAlgorithm(key.algorithm, "Ed25519")) throw unusable("Ed25519");
|
|
4472
|
+
break;
|
|
4473
|
+
}
|
|
4474
|
+
|
|
4475
|
+
case "ML-DSA-44":
|
|
4476
|
+
case "ML-DSA-65":
|
|
4477
|
+
case "ML-DSA-87":
|
|
4478
|
+
{
|
|
4479
|
+
if (!isAlgorithm(key.algorithm, alg)) throw unusable(alg);
|
|
4480
|
+
break;
|
|
4481
|
+
}
|
|
4482
|
+
|
|
4483
|
+
case "ES256":
|
|
4484
|
+
case "ES384":
|
|
4485
|
+
case "ES512":
|
|
4486
|
+
{
|
|
4487
|
+
if (!isAlgorithm(key.algorithm, "ECDSA")) throw unusable("ECDSA");
|
|
4488
|
+
const expected = getNamedCurve(alg);
|
|
4489
|
+
const actual = key.algorithm.namedCurve;
|
|
4490
|
+
if (actual !== expected) throw unusable(expected, "algorithm.namedCurve");
|
|
4491
|
+
break;
|
|
4492
|
+
}
|
|
4493
|
+
|
|
4494
|
+
default:
|
|
4495
|
+
throw new TypeError("CryptoKey does not support this operation");
|
|
4496
|
+
}
|
|
4497
|
+
checkUsage(key, usage);
|
|
4498
|
+
}
|
|
4499
|
+
|
|
4500
|
+
function message(msg, actual) {
|
|
4501
|
+
for (var _len = arguments.length, types = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
|
4502
|
+
types[_key - 2] = arguments[_key];
|
|
4503
|
+
}
|
|
4504
|
+
types = types.filter(Boolean);
|
|
4505
|
+
if (types.length > 2) {
|
|
4506
|
+
const last = types.pop();
|
|
4507
|
+
msg += "one of type ".concat(types.join(", "), ", or ").concat(last, ".");
|
|
4508
|
+
} else if (types.length === 2) {
|
|
4509
|
+
msg += "one of type ".concat(types[0], " or ").concat(types[1], ".");
|
|
4510
|
+
} else {
|
|
4511
|
+
msg += "of type ".concat(types[0], ".");
|
|
4512
|
+
}
|
|
4513
|
+
if (actual == null) {
|
|
4514
|
+
msg += " Received ".concat(actual);
|
|
4515
|
+
} else if (typeof actual === "function" && actual.name) {
|
|
4516
|
+
msg += " Received function ".concat(actual.name);
|
|
4517
|
+
} else if (typeof actual === "object" && actual != null) {
|
|
4518
|
+
var _actual$constructor;
|
|
4519
|
+
if ((_actual$constructor = actual.constructor) !== null && _actual$constructor !== void 0 && _actual$constructor.name) {
|
|
4520
|
+
msg += " Received an instance of ".concat(actual.constructor.name);
|
|
4521
|
+
}
|
|
4522
|
+
}
|
|
4523
|
+
return msg;
|
|
4524
|
+
}
|
|
4525
|
+
|
|
4526
|
+
const invalidKeyInput = function invalidKeyInput(actual) {
|
|
4527
|
+
for (var _len2 = arguments.length, types = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
|
4528
|
+
types[_key2 - 1] = arguments[_key2];
|
|
4529
|
+
}
|
|
4530
|
+
return message("Key must be ", actual, ...types);
|
|
4531
|
+
};
|
|
4532
|
+
|
|
4533
|
+
const withAlg = function withAlg(alg, actual) {
|
|
4534
|
+
for (var _len3 = arguments.length, types = new Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {
|
|
4535
|
+
types[_key3 - 2] = arguments[_key3];
|
|
4536
|
+
}
|
|
4537
|
+
return message("Key for the ".concat(alg, " algorithm must be "), actual, ...types);
|
|
4538
|
+
};
|
|
4539
|
+
|
|
4409
4540
|
class JOSEError extends Error {
|
|
4410
4541
|
constructor(message, options) {
|
|
4411
4542
|
var _Error$captureStackTr;
|
|
@@ -4583,207 +4714,486 @@ class JWSSignatureVerificationFailed extends JOSEError {
|
|
|
4583
4714
|
|
|
4584
4715
|
_defineProperty(JWSSignatureVerificationFailed, "code", "ERR_JWS_SIGNATURE_VERIFICATION_FAILED");
|
|
4585
4716
|
|
|
4586
|
-
const
|
|
4587
|
-
|
|
4588
|
-
|
|
4717
|
+
const isCryptoKey = key => {
|
|
4718
|
+
if ((key === null || key === void 0 ? void 0 : key[Symbol.toStringTag]) === "CryptoKey") return true;
|
|
4719
|
+
try {
|
|
4720
|
+
return key instanceof CryptoKey;
|
|
4721
|
+
} catch (_unused) {
|
|
4722
|
+
return false;
|
|
4723
|
+
}
|
|
4589
4724
|
};
|
|
4590
4725
|
|
|
4591
|
-
const
|
|
4592
|
-
|
|
4593
|
-
function getHashLength(hash) {
|
|
4594
|
-
return parseInt(hash.name.slice(4), 10);
|
|
4595
|
-
}
|
|
4596
|
-
|
|
4597
|
-
function getNamedCurve(alg) {
|
|
4598
|
-
switch (alg) {
|
|
4599
|
-
case "ES256":
|
|
4600
|
-
return "P-256";
|
|
4601
|
-
|
|
4602
|
-
case "ES384":
|
|
4603
|
-
return "P-384";
|
|
4726
|
+
const isKeyObject = key => (key === null || key === void 0 ? void 0 : key[Symbol.toStringTag]) === "KeyObject";
|
|
4604
4727
|
|
|
4605
|
-
|
|
4606
|
-
return "P-521";
|
|
4728
|
+
const isKeyLike = key => isCryptoKey(key) || isKeyObject(key);
|
|
4607
4729
|
|
|
4608
|
-
|
|
4609
|
-
|
|
4730
|
+
function decodeBase64url(value, label, ErrorClass) {
|
|
4731
|
+
try {
|
|
4732
|
+
return decode(value);
|
|
4733
|
+
} catch (_unused) {
|
|
4734
|
+
throw new ErrorClass("Failed to base64url decode the ".concat(label));
|
|
4610
4735
|
}
|
|
4611
4736
|
}
|
|
4612
4737
|
|
|
4613
|
-
|
|
4614
|
-
|
|
4615
|
-
|
|
4738
|
+
const isObjectLike = value => typeof value === "object" && value !== null;
|
|
4739
|
+
|
|
4740
|
+
function isObject(input) {
|
|
4741
|
+
if (!isObjectLike(input) || Object.prototype.toString.call(input) !== "[object Object]") {
|
|
4742
|
+
return false;
|
|
4743
|
+
}
|
|
4744
|
+
if (Object.getPrototypeOf(input) === null) {
|
|
4745
|
+
return true;
|
|
4746
|
+
}
|
|
4747
|
+
let proto = input;
|
|
4748
|
+
while (Object.getPrototypeOf(proto) !== null) {
|
|
4749
|
+
proto = Object.getPrototypeOf(proto);
|
|
4616
4750
|
}
|
|
4751
|
+
return Object.getPrototypeOf(input) === proto;
|
|
4617
4752
|
}
|
|
4618
4753
|
|
|
4619
|
-
function
|
|
4754
|
+
function isDisjoint() {
|
|
4755
|
+
for (var _len = arguments.length, headers = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
4756
|
+
headers[_key] = arguments[_key];
|
|
4757
|
+
}
|
|
4758
|
+
const sources = headers.filter(Boolean);
|
|
4759
|
+
if (sources.length === 0 || sources.length === 1) {
|
|
4760
|
+
return true;
|
|
4761
|
+
}
|
|
4762
|
+
let acc;
|
|
4763
|
+
for (const header of sources) {
|
|
4764
|
+
const parameters = Object.keys(header);
|
|
4765
|
+
if (!acc || acc.size === 0) {
|
|
4766
|
+
acc = new Set(parameters);
|
|
4767
|
+
continue;
|
|
4768
|
+
}
|
|
4769
|
+
for (const parameter of parameters) {
|
|
4770
|
+
if (acc.has(parameter)) {
|
|
4771
|
+
return false;
|
|
4772
|
+
}
|
|
4773
|
+
acc.add(parameter);
|
|
4774
|
+
}
|
|
4775
|
+
}
|
|
4776
|
+
return true;
|
|
4777
|
+
}
|
|
4778
|
+
|
|
4779
|
+
const isJWK = key => isObject(key) && typeof key.kty === "string";
|
|
4780
|
+
|
|
4781
|
+
const isPrivateJWK = key => key.kty !== "oct" && (key.kty === "AKP" && typeof key.priv === "string" || typeof key.d === "string");
|
|
4782
|
+
|
|
4783
|
+
const isPublicJWK = key => key.kty !== "oct" && key.d === undefined && key.priv === undefined;
|
|
4784
|
+
|
|
4785
|
+
const isSecretJWK = key => key.kty === "oct" && typeof key.k === "string";
|
|
4786
|
+
|
|
4787
|
+
function checkKeyLength(alg, key) {
|
|
4788
|
+
if (alg.startsWith("RS") || alg.startsWith("PS")) {
|
|
4789
|
+
const {modulusLength: modulusLength} = key.algorithm;
|
|
4790
|
+
if (typeof modulusLength !== "number" || modulusLength < 2048) {
|
|
4791
|
+
throw new TypeError("".concat(alg, " requires key modulusLength to be 2048 bits or larger"));
|
|
4792
|
+
}
|
|
4793
|
+
}
|
|
4794
|
+
}
|
|
4795
|
+
|
|
4796
|
+
function subtleAlgorithm(alg, algorithm) {
|
|
4797
|
+
const hash = "SHA-".concat(alg.slice(-3));
|
|
4620
4798
|
switch (alg) {
|
|
4621
4799
|
case "HS256":
|
|
4622
4800
|
case "HS384":
|
|
4623
4801
|
case "HS512":
|
|
4624
|
-
{
|
|
4625
|
-
|
|
4626
|
-
|
|
4627
|
-
|
|
4628
|
-
|
|
4629
|
-
|
|
4630
|
-
|
|
4802
|
+
return {
|
|
4803
|
+
hash: hash,
|
|
4804
|
+
name: "HMAC"
|
|
4805
|
+
};
|
|
4806
|
+
|
|
4807
|
+
case "PS256":
|
|
4808
|
+
case "PS384":
|
|
4809
|
+
case "PS512":
|
|
4810
|
+
return {
|
|
4811
|
+
hash: hash,
|
|
4812
|
+
name: "RSA-PSS",
|
|
4813
|
+
saltLength: parseInt(alg.slice(-3), 10) >> 3
|
|
4814
|
+
};
|
|
4631
4815
|
|
|
4632
4816
|
case "RS256":
|
|
4633
4817
|
case "RS384":
|
|
4634
4818
|
case "RS512":
|
|
4635
|
-
{
|
|
4636
|
-
|
|
4637
|
-
|
|
4638
|
-
|
|
4639
|
-
|
|
4640
|
-
|
|
4819
|
+
return {
|
|
4820
|
+
hash: hash,
|
|
4821
|
+
name: "RSASSA-PKCS1-v1_5"
|
|
4822
|
+
};
|
|
4823
|
+
|
|
4824
|
+
case "ES256":
|
|
4825
|
+
case "ES384":
|
|
4826
|
+
case "ES512":
|
|
4827
|
+
return {
|
|
4828
|
+
hash: hash,
|
|
4829
|
+
name: "ECDSA",
|
|
4830
|
+
namedCurve: algorithm.namedCurve
|
|
4831
|
+
};
|
|
4832
|
+
|
|
4833
|
+
case "Ed25519":
|
|
4834
|
+
case "EdDSA":
|
|
4835
|
+
return {
|
|
4836
|
+
name: "Ed25519"
|
|
4837
|
+
};
|
|
4838
|
+
|
|
4839
|
+
case "ML-DSA-44":
|
|
4840
|
+
case "ML-DSA-65":
|
|
4841
|
+
case "ML-DSA-87":
|
|
4842
|
+
return {
|
|
4843
|
+
name: alg
|
|
4844
|
+
};
|
|
4845
|
+
|
|
4846
|
+
default:
|
|
4847
|
+
throw new JOSENotSupported("alg ".concat(alg, " is not supported either by JOSE or your javascript runtime"));
|
|
4848
|
+
}
|
|
4849
|
+
}
|
|
4850
|
+
|
|
4851
|
+
async function getSigKey(alg, key, usage) {
|
|
4852
|
+
if (key instanceof Uint8Array) {
|
|
4853
|
+
if (!alg.startsWith("HS")) {
|
|
4854
|
+
throw new TypeError(invalidKeyInput(key, "CryptoKey", "KeyObject", "JSON Web Key"));
|
|
4641
4855
|
}
|
|
4856
|
+
return crypto.subtle.importKey("raw", key, {
|
|
4857
|
+
hash: "SHA-".concat(alg.slice(-3)),
|
|
4858
|
+
name: "HMAC"
|
|
4859
|
+
}, false, [ usage ]);
|
|
4860
|
+
}
|
|
4861
|
+
checkSigCryptoKey(key, alg, usage);
|
|
4862
|
+
return key;
|
|
4863
|
+
}
|
|
4642
4864
|
|
|
4643
|
-
|
|
4644
|
-
|
|
4645
|
-
|
|
4865
|
+
async function verify(alg, key, signature, data) {
|
|
4866
|
+
const cryptoKey = await getSigKey(alg, key, "verify");
|
|
4867
|
+
checkKeyLength(alg, cryptoKey);
|
|
4868
|
+
const algorithm = subtleAlgorithm(alg, cryptoKey.algorithm);
|
|
4869
|
+
try {
|
|
4870
|
+
return await crypto.subtle.verify(algorithm, cryptoKey, signature, data);
|
|
4871
|
+
} catch (_unused) {
|
|
4872
|
+
return false;
|
|
4873
|
+
}
|
|
4874
|
+
}
|
|
4875
|
+
|
|
4876
|
+
const unsupportedAlg = 'Invalid or unsupported JWK "alg" (Algorithm) Parameter value';
|
|
4877
|
+
|
|
4878
|
+
function subtleMapping(jwk) {
|
|
4879
|
+
let algorithm;
|
|
4880
|
+
let keyUsages;
|
|
4881
|
+
switch (jwk.kty) {
|
|
4882
|
+
case "AKP":
|
|
4646
4883
|
{
|
|
4647
|
-
|
|
4648
|
-
|
|
4649
|
-
|
|
4650
|
-
|
|
4884
|
+
switch (jwk.alg) {
|
|
4885
|
+
case "ML-DSA-44":
|
|
4886
|
+
case "ML-DSA-65":
|
|
4887
|
+
case "ML-DSA-87":
|
|
4888
|
+
algorithm = {
|
|
4889
|
+
name: jwk.alg
|
|
4890
|
+
};
|
|
4891
|
+
keyUsages = jwk.priv ? [ "sign" ] : [ "verify" ];
|
|
4892
|
+
break;
|
|
4893
|
+
|
|
4894
|
+
default:
|
|
4895
|
+
throw new JOSENotSupported(unsupportedAlg);
|
|
4896
|
+
}
|
|
4651
4897
|
break;
|
|
4652
4898
|
}
|
|
4653
4899
|
|
|
4654
|
-
case "
|
|
4655
|
-
case "EdDSA":
|
|
4900
|
+
case "RSA":
|
|
4656
4901
|
{
|
|
4657
|
-
|
|
4902
|
+
switch (jwk.alg) {
|
|
4903
|
+
case "PS256":
|
|
4904
|
+
case "PS384":
|
|
4905
|
+
case "PS512":
|
|
4906
|
+
algorithm = {
|
|
4907
|
+
name: "RSA-PSS",
|
|
4908
|
+
hash: "SHA-".concat(jwk.alg.slice(-3))
|
|
4909
|
+
};
|
|
4910
|
+
keyUsages = jwk.d ? [ "sign" ] : [ "verify" ];
|
|
4911
|
+
break;
|
|
4912
|
+
|
|
4913
|
+
case "RS256":
|
|
4914
|
+
case "RS384":
|
|
4915
|
+
case "RS512":
|
|
4916
|
+
algorithm = {
|
|
4917
|
+
name: "RSASSA-PKCS1-v1_5",
|
|
4918
|
+
hash: "SHA-".concat(jwk.alg.slice(-3))
|
|
4919
|
+
};
|
|
4920
|
+
keyUsages = jwk.d ? [ "sign" ] : [ "verify" ];
|
|
4921
|
+
break;
|
|
4922
|
+
|
|
4923
|
+
case "RSA-OAEP":
|
|
4924
|
+
case "RSA-OAEP-256":
|
|
4925
|
+
case "RSA-OAEP-384":
|
|
4926
|
+
case "RSA-OAEP-512":
|
|
4927
|
+
algorithm = {
|
|
4928
|
+
name: "RSA-OAEP",
|
|
4929
|
+
hash: "SHA-".concat(parseInt(jwk.alg.slice(-3), 10) || 1)
|
|
4930
|
+
};
|
|
4931
|
+
keyUsages = jwk.d ? [ "decrypt", "unwrapKey" ] : [ "encrypt", "wrapKey" ];
|
|
4932
|
+
break;
|
|
4933
|
+
|
|
4934
|
+
default:
|
|
4935
|
+
throw new JOSENotSupported(unsupportedAlg);
|
|
4936
|
+
}
|
|
4658
4937
|
break;
|
|
4659
4938
|
}
|
|
4660
4939
|
|
|
4661
|
-
case "
|
|
4662
|
-
case "ML-DSA-65":
|
|
4663
|
-
case "ML-DSA-87":
|
|
4940
|
+
case "EC":
|
|
4664
4941
|
{
|
|
4665
|
-
|
|
4942
|
+
switch (jwk.alg) {
|
|
4943
|
+
case "ES256":
|
|
4944
|
+
case "ES384":
|
|
4945
|
+
case "ES512":
|
|
4946
|
+
algorithm = {
|
|
4947
|
+
name: "ECDSA",
|
|
4948
|
+
namedCurve: {
|
|
4949
|
+
ES256: "P-256",
|
|
4950
|
+
ES384: "P-384",
|
|
4951
|
+
ES512: "P-521"
|
|
4952
|
+
}[jwk.alg]
|
|
4953
|
+
};
|
|
4954
|
+
keyUsages = jwk.d ? [ "sign" ] : [ "verify" ];
|
|
4955
|
+
break;
|
|
4956
|
+
|
|
4957
|
+
case "ECDH-ES":
|
|
4958
|
+
case "ECDH-ES+A128KW":
|
|
4959
|
+
case "ECDH-ES+A192KW":
|
|
4960
|
+
case "ECDH-ES+A256KW":
|
|
4961
|
+
algorithm = {
|
|
4962
|
+
name: "ECDH",
|
|
4963
|
+
namedCurve: jwk.crv
|
|
4964
|
+
};
|
|
4965
|
+
keyUsages = jwk.d ? [ "deriveBits" ] : [];
|
|
4966
|
+
break;
|
|
4967
|
+
|
|
4968
|
+
default:
|
|
4969
|
+
throw new JOSENotSupported(unsupportedAlg);
|
|
4970
|
+
}
|
|
4666
4971
|
break;
|
|
4667
4972
|
}
|
|
4668
4973
|
|
|
4669
|
-
case "
|
|
4670
|
-
case "ES384":
|
|
4671
|
-
case "ES512":
|
|
4974
|
+
case "OKP":
|
|
4672
4975
|
{
|
|
4673
|
-
|
|
4674
|
-
|
|
4675
|
-
|
|
4676
|
-
|
|
4976
|
+
switch (jwk.alg) {
|
|
4977
|
+
case "Ed25519":
|
|
4978
|
+
case "EdDSA":
|
|
4979
|
+
algorithm = {
|
|
4980
|
+
name: "Ed25519"
|
|
4981
|
+
};
|
|
4982
|
+
keyUsages = jwk.d ? [ "sign" ] : [ "verify" ];
|
|
4983
|
+
break;
|
|
4984
|
+
|
|
4985
|
+
case "ECDH-ES":
|
|
4986
|
+
case "ECDH-ES+A128KW":
|
|
4987
|
+
case "ECDH-ES+A192KW":
|
|
4988
|
+
case "ECDH-ES+A256KW":
|
|
4989
|
+
algorithm = {
|
|
4990
|
+
name: jwk.crv
|
|
4991
|
+
};
|
|
4992
|
+
keyUsages = jwk.d ? [ "deriveBits" ] : [];
|
|
4993
|
+
break;
|
|
4994
|
+
|
|
4995
|
+
default:
|
|
4996
|
+
throw new JOSENotSupported(unsupportedAlg);
|
|
4997
|
+
}
|
|
4677
4998
|
break;
|
|
4678
4999
|
}
|
|
4679
5000
|
|
|
4680
5001
|
default:
|
|
4681
|
-
throw new
|
|
5002
|
+
throw new JOSENotSupported('Invalid or unsupported JWK "kty" (Key Type) Parameter value');
|
|
4682
5003
|
}
|
|
4683
|
-
|
|
5004
|
+
return {
|
|
5005
|
+
algorithm: algorithm,
|
|
5006
|
+
keyUsages: keyUsages
|
|
5007
|
+
};
|
|
4684
5008
|
}
|
|
4685
5009
|
|
|
4686
|
-
function
|
|
4687
|
-
|
|
4688
|
-
|
|
4689
|
-
|
|
4690
|
-
types = types.filter(Boolean);
|
|
4691
|
-
if (types.length > 2) {
|
|
4692
|
-
const last = types.pop();
|
|
4693
|
-
msg += "one of type ".concat(types.join(", "), ", or ").concat(last, ".");
|
|
4694
|
-
} else if (types.length === 2) {
|
|
4695
|
-
msg += "one of type ".concat(types[0], " or ").concat(types[1], ".");
|
|
4696
|
-
} else {
|
|
4697
|
-
msg += "of type ".concat(types[0], ".");
|
|
5010
|
+
async function jwkToKey(jwk) {
|
|
5011
|
+
var _jwk$ext, _jwk$key_ops;
|
|
5012
|
+
if (!jwk.alg) {
|
|
5013
|
+
throw new TypeError('"alg" argument is required when "jwk.alg" is not present');
|
|
4698
5014
|
}
|
|
4699
|
-
|
|
4700
|
-
|
|
4701
|
-
|
|
4702
|
-
|
|
4703
|
-
} else if (typeof actual === "object" && actual != null) {
|
|
4704
|
-
var _actual$constructor;
|
|
4705
|
-
if ((_actual$constructor = actual.constructor) !== null && _actual$constructor !== void 0 && _actual$constructor.name) {
|
|
4706
|
-
msg += " Received an instance of ".concat(actual.constructor.name);
|
|
4707
|
-
}
|
|
5015
|
+
const {algorithm: algorithm, keyUsages: keyUsages} = subtleMapping(jwk);
|
|
5016
|
+
const keyData = _objectSpread2({}, jwk);
|
|
5017
|
+
if (keyData.kty !== "AKP") {
|
|
5018
|
+
delete keyData.alg;
|
|
4708
5019
|
}
|
|
4709
|
-
|
|
5020
|
+
delete keyData.use;
|
|
5021
|
+
return crypto.subtle.importKey("jwk", keyData, algorithm, (_jwk$ext = jwk.ext) !== null && _jwk$ext !== void 0 ? _jwk$ext : jwk.d || jwk.priv ? false : true, (_jwk$key_ops = jwk.key_ops) !== null && _jwk$key_ops !== void 0 ? _jwk$key_ops : keyUsages);
|
|
4710
5022
|
}
|
|
4711
5023
|
|
|
4712
|
-
const
|
|
4713
|
-
|
|
4714
|
-
|
|
5024
|
+
const unusableForAlg = "given KeyObject instance cannot be used for this algorithm";
|
|
5025
|
+
|
|
5026
|
+
let cache;
|
|
5027
|
+
|
|
5028
|
+
const handleJWK = async function handleJWK(key, jwk, alg) {
|
|
5029
|
+
let freeze = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
5030
|
+
cache || (cache = new WeakMap);
|
|
5031
|
+
let cached = cache.get(key);
|
|
5032
|
+
if (cached !== null && cached !== void 0 && cached[alg]) {
|
|
5033
|
+
return cached[alg];
|
|
4715
5034
|
}
|
|
4716
|
-
|
|
5035
|
+
const cryptoKey = await jwkToKey(_objectSpread2(_objectSpread2({}, jwk), {}, {
|
|
5036
|
+
alg: alg
|
|
5037
|
+
}));
|
|
5038
|
+
if (freeze) Object.freeze(key);
|
|
5039
|
+
if (!cached) {
|
|
5040
|
+
cache.set(key, {
|
|
5041
|
+
[alg]: cryptoKey
|
|
5042
|
+
});
|
|
5043
|
+
} else {
|
|
5044
|
+
cached[alg] = cryptoKey;
|
|
5045
|
+
}
|
|
5046
|
+
return cryptoKey;
|
|
4717
5047
|
};
|
|
4718
5048
|
|
|
4719
|
-
const
|
|
4720
|
-
|
|
4721
|
-
|
|
5049
|
+
const handleKeyObject = (keyObject, alg) => {
|
|
5050
|
+
cache || (cache = new WeakMap);
|
|
5051
|
+
let cached = cache.get(keyObject);
|
|
5052
|
+
if (cached !== null && cached !== void 0 && cached[alg]) {
|
|
5053
|
+
return cached[alg];
|
|
4722
5054
|
}
|
|
4723
|
-
|
|
4724
|
-
|
|
5055
|
+
const isPublic = keyObject.type === "public";
|
|
5056
|
+
const extractable = isPublic ? true : false;
|
|
5057
|
+
let cryptoKey;
|
|
5058
|
+
if (keyObject.asymmetricKeyType === "x25519") {
|
|
5059
|
+
switch (alg) {
|
|
5060
|
+
case "ECDH-ES":
|
|
5061
|
+
case "ECDH-ES+A128KW":
|
|
5062
|
+
case "ECDH-ES+A192KW":
|
|
5063
|
+
case "ECDH-ES+A256KW":
|
|
5064
|
+
break;
|
|
4725
5065
|
|
|
4726
|
-
|
|
4727
|
-
|
|
4728
|
-
|
|
4729
|
-
|
|
4730
|
-
}
|
|
4731
|
-
|
|
5066
|
+
default:
|
|
5067
|
+
throw new TypeError(unusableForAlg);
|
|
5068
|
+
}
|
|
5069
|
+
cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, isPublic ? [] : [ "deriveBits" ]);
|
|
5070
|
+
}
|
|
5071
|
+
if (keyObject.asymmetricKeyType === "ed25519") {
|
|
5072
|
+
if (alg !== "EdDSA" && alg !== "Ed25519") {
|
|
5073
|
+
throw new TypeError(unusableForAlg);
|
|
5074
|
+
}
|
|
5075
|
+
cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, [ isPublic ? "verify" : "sign" ]);
|
|
5076
|
+
}
|
|
5077
|
+
switch (keyObject.asymmetricKeyType) {
|
|
5078
|
+
case "ml-dsa-44":
|
|
5079
|
+
case "ml-dsa-65":
|
|
5080
|
+
case "ml-dsa-87":
|
|
5081
|
+
{
|
|
5082
|
+
if (alg !== keyObject.asymmetricKeyType.toUpperCase()) {
|
|
5083
|
+
throw new TypeError(unusableForAlg);
|
|
5084
|
+
}
|
|
5085
|
+
cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, [ isPublic ? "verify" : "sign" ]);
|
|
5086
|
+
}
|
|
5087
|
+
}
|
|
5088
|
+
if (keyObject.asymmetricKeyType === "rsa") {
|
|
5089
|
+
let hash;
|
|
5090
|
+
switch (alg) {
|
|
5091
|
+
case "RSA-OAEP":
|
|
5092
|
+
hash = "SHA-1";
|
|
5093
|
+
break;
|
|
5094
|
+
|
|
5095
|
+
case "RS256":
|
|
5096
|
+
case "PS256":
|
|
5097
|
+
case "RSA-OAEP-256":
|
|
5098
|
+
hash = "SHA-256";
|
|
5099
|
+
break;
|
|
5100
|
+
|
|
5101
|
+
case "RS384":
|
|
5102
|
+
case "PS384":
|
|
5103
|
+
case "RSA-OAEP-384":
|
|
5104
|
+
hash = "SHA-384";
|
|
5105
|
+
break;
|
|
5106
|
+
|
|
5107
|
+
case "RS512":
|
|
5108
|
+
case "PS512":
|
|
5109
|
+
case "RSA-OAEP-512":
|
|
5110
|
+
hash = "SHA-512";
|
|
5111
|
+
break;
|
|
5112
|
+
|
|
5113
|
+
default:
|
|
5114
|
+
throw new TypeError(unusableForAlg);
|
|
5115
|
+
}
|
|
5116
|
+
if (alg.startsWith("RSA-OAEP")) {
|
|
5117
|
+
return keyObject.toCryptoKey({
|
|
5118
|
+
name: "RSA-OAEP",
|
|
5119
|
+
hash: hash
|
|
5120
|
+
}, extractable, isPublic ? [ "encrypt" ] : [ "decrypt" ]);
|
|
5121
|
+
}
|
|
5122
|
+
cryptoKey = keyObject.toCryptoKey({
|
|
5123
|
+
name: alg.startsWith("PS") ? "RSA-PSS" : "RSASSA-PKCS1-v1_5",
|
|
5124
|
+
hash: hash
|
|
5125
|
+
}, extractable, [ isPublic ? "verify" : "sign" ]);
|
|
5126
|
+
}
|
|
5127
|
+
if (keyObject.asymmetricKeyType === "ec") {
|
|
5128
|
+
var _keyObject$asymmetric;
|
|
5129
|
+
const nist = new Map([ [ "prime256v1", "P-256" ], [ "secp384r1", "P-384" ], [ "secp521r1", "P-521" ] ]);
|
|
5130
|
+
const namedCurve = nist.get((_keyObject$asymmetric = keyObject.asymmetricKeyDetails) === null || _keyObject$asymmetric === void 0 ? void 0 : _keyObject$asymmetric.namedCurve);
|
|
5131
|
+
if (!namedCurve) {
|
|
5132
|
+
throw new TypeError(unusableForAlg);
|
|
5133
|
+
}
|
|
5134
|
+
const expectedCurve = {
|
|
5135
|
+
ES256: "P-256",
|
|
5136
|
+
ES384: "P-384",
|
|
5137
|
+
ES512: "P-521"
|
|
5138
|
+
};
|
|
5139
|
+
if (expectedCurve[alg] && namedCurve === expectedCurve[alg]) {
|
|
5140
|
+
cryptoKey = keyObject.toCryptoKey({
|
|
5141
|
+
name: "ECDSA",
|
|
5142
|
+
namedCurve: namedCurve
|
|
5143
|
+
}, extractable, [ isPublic ? "verify" : "sign" ]);
|
|
5144
|
+
}
|
|
5145
|
+
if (alg.startsWith("ECDH-ES")) {
|
|
5146
|
+
cryptoKey = keyObject.toCryptoKey({
|
|
5147
|
+
name: "ECDH",
|
|
5148
|
+
namedCurve: namedCurve
|
|
5149
|
+
}, extractable, isPublic ? [] : [ "deriveBits" ]);
|
|
5150
|
+
}
|
|
5151
|
+
}
|
|
5152
|
+
if (!cryptoKey) {
|
|
5153
|
+
throw new TypeError(unusableForAlg);
|
|
5154
|
+
}
|
|
5155
|
+
if (!cached) {
|
|
5156
|
+
cache.set(keyObject, {
|
|
5157
|
+
[alg]: cryptoKey
|
|
5158
|
+
});
|
|
5159
|
+
} else {
|
|
5160
|
+
cached[alg] = cryptoKey;
|
|
4732
5161
|
}
|
|
5162
|
+
return cryptoKey;
|
|
4733
5163
|
};
|
|
4734
5164
|
|
|
4735
|
-
|
|
4736
|
-
|
|
4737
|
-
|
|
4738
|
-
|
|
4739
|
-
function isDisjoint() {
|
|
4740
|
-
for (var _len = arguments.length, headers = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
4741
|
-
headers[_key] = arguments[_key];
|
|
5165
|
+
async function normalizeKey(key, alg) {
|
|
5166
|
+
if (key instanceof Uint8Array) {
|
|
5167
|
+
return key;
|
|
4742
5168
|
}
|
|
4743
|
-
|
|
4744
|
-
|
|
4745
|
-
return true;
|
|
5169
|
+
if (isCryptoKey(key)) {
|
|
5170
|
+
return key;
|
|
4746
5171
|
}
|
|
4747
|
-
|
|
4748
|
-
|
|
4749
|
-
|
|
4750
|
-
if (!acc || acc.size === 0) {
|
|
4751
|
-
acc = new Set(parameters);
|
|
4752
|
-
continue;
|
|
5172
|
+
if (isKeyObject(key)) {
|
|
5173
|
+
if (key.type === "secret") {
|
|
5174
|
+
return key.export();
|
|
4753
5175
|
}
|
|
4754
|
-
|
|
4755
|
-
|
|
4756
|
-
return
|
|
5176
|
+
if ("toCryptoKey" in key && typeof key.toCryptoKey === "function") {
|
|
5177
|
+
try {
|
|
5178
|
+
return handleKeyObject(key, alg);
|
|
5179
|
+
} catch (err) {
|
|
5180
|
+
if (err instanceof TypeError) {
|
|
5181
|
+
throw err;
|
|
5182
|
+
}
|
|
4757
5183
|
}
|
|
4758
|
-
acc.add(parameter);
|
|
4759
5184
|
}
|
|
5185
|
+
let jwk = key.export({
|
|
5186
|
+
format: "jwk"
|
|
5187
|
+
});
|
|
5188
|
+
return handleJWK(key, jwk, alg);
|
|
4760
5189
|
}
|
|
4761
|
-
|
|
4762
|
-
|
|
4763
|
-
|
|
4764
|
-
const isObjectLike = value => typeof value === "object" && value !== null;
|
|
4765
|
-
|
|
4766
|
-
function isObject(input) {
|
|
4767
|
-
if (!isObjectLike(input) || Object.prototype.toString.call(input) !== "[object Object]") {
|
|
4768
|
-
return false;
|
|
4769
|
-
}
|
|
4770
|
-
if (Object.getPrototypeOf(input) === null) {
|
|
4771
|
-
return true;
|
|
4772
|
-
}
|
|
4773
|
-
let proto = input;
|
|
4774
|
-
while (Object.getPrototypeOf(proto) !== null) {
|
|
4775
|
-
proto = Object.getPrototypeOf(proto);
|
|
4776
|
-
}
|
|
4777
|
-
return Object.getPrototypeOf(input) === proto;
|
|
4778
|
-
}
|
|
4779
|
-
|
|
4780
|
-
function checkKeyLength(alg, key) {
|
|
4781
|
-
if (alg.startsWith("RS") || alg.startsWith("PS")) {
|
|
4782
|
-
const {modulusLength: modulusLength} = key.algorithm;
|
|
4783
|
-
if (typeof modulusLength !== "number" || modulusLength < 2048) {
|
|
4784
|
-
throw new TypeError("".concat(alg, " requires key modulusLength to be 2048 bits or larger"));
|
|
5190
|
+
if (isJWK(key)) {
|
|
5191
|
+
if (key.k) {
|
|
5192
|
+
return decode(key.k);
|
|
4785
5193
|
}
|
|
5194
|
+
return handleJWK(key, key, alg, true);
|
|
4786
5195
|
}
|
|
5196
|
+
throw new Error("unreachable");
|
|
4787
5197
|
}
|
|
4788
5198
|
|
|
4789
5199
|
const bytesEqual = (a, b) => {
|
|
@@ -4933,217 +5343,61 @@ const genericImport = async (keyFormat, keyData, alg, options) => {
|
|
|
4933
5343
|
case "ECDH-ES+A128KW":
|
|
4934
5344
|
case "ECDH-ES+A192KW":
|
|
4935
5345
|
case "ECDH-ES+A256KW":
|
|
4936
|
-
{
|
|
4937
|
-
try {
|
|
4938
|
-
const namedCurve = options.getNamedCurve(keyData);
|
|
4939
|
-
algorithm = namedCurve === "X25519" ? {
|
|
4940
|
-
name: "X25519"
|
|
4941
|
-
} : {
|
|
4942
|
-
name: "ECDH",
|
|
4943
|
-
namedCurve: namedCurve
|
|
4944
|
-
};
|
|
4945
|
-
} catch (cause) {
|
|
4946
|
-
throw new JOSENotSupported("Invalid or unsupported key format");
|
|
4947
|
-
}
|
|
4948
|
-
keyUsages = isPublic ? [] : [ "deriveBits" ];
|
|
4949
|
-
break;
|
|
4950
|
-
}
|
|
4951
|
-
|
|
4952
|
-
case "Ed25519":
|
|
4953
|
-
case "EdDSA":
|
|
4954
|
-
algorithm = {
|
|
4955
|
-
name: "Ed25519"
|
|
4956
|
-
};
|
|
4957
|
-
keyUsages = getSigUsages();
|
|
4958
|
-
break;
|
|
4959
|
-
|
|
4960
|
-
case "ML-DSA-44":
|
|
4961
|
-
case "ML-DSA-65":
|
|
4962
|
-
case "ML-DSA-87":
|
|
4963
|
-
algorithm = {
|
|
4964
|
-
name: alg
|
|
4965
|
-
};
|
|
4966
|
-
keyUsages = getSigUsages();
|
|
4967
|
-
break;
|
|
4968
|
-
|
|
4969
|
-
default:
|
|
4970
|
-
throw new JOSENotSupported('Invalid or unsupported "alg" (Algorithm) value');
|
|
4971
|
-
}
|
|
4972
|
-
return crypto.subtle.importKey(keyFormat, keyData, algorithm, (_options$extractable = options === null || options === void 0 ? void 0 : options.extractable) !== null && _options$extractable !== void 0 ? _options$extractable : isPublic ? true : false, keyUsages);
|
|
4973
|
-
};
|
|
4974
|
-
|
|
4975
|
-
const processPEMData = (pem, pattern) => decodeBase64(pem.replace(pattern, ""));
|
|
4976
|
-
|
|
4977
|
-
const fromPKCS8 = (pem, alg, options) => {
|
|
4978
|
-
var _alg$startsWith;
|
|
4979
|
-
const keyData = processPEMData(pem, /(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g);
|
|
4980
|
-
let opts = options;
|
|
4981
|
-
if (alg !== null && alg !== void 0 && (_alg$startsWith = alg.startsWith) !== null && _alg$startsWith !== void 0 && _alg$startsWith.call(alg, "ECDH-ES")) {
|
|
4982
|
-
opts || (opts = {});
|
|
4983
|
-
opts.getNamedCurve = keyData => {
|
|
4984
|
-
const state = createASN1State(keyData);
|
|
4985
|
-
parsePKCS8Header(state);
|
|
4986
|
-
return parseECAlgorithmIdentifier(state);
|
|
4987
|
-
};
|
|
4988
|
-
}
|
|
4989
|
-
return genericImport("pkcs8", keyData, alg, opts);
|
|
4990
|
-
};
|
|
4991
|
-
|
|
4992
|
-
function subtleMapping(jwk) {
|
|
4993
|
-
let algorithm;
|
|
4994
|
-
let keyUsages;
|
|
4995
|
-
switch (jwk.kty) {
|
|
4996
|
-
case "AKP":
|
|
4997
|
-
{
|
|
4998
|
-
switch (jwk.alg) {
|
|
4999
|
-
case "ML-DSA-44":
|
|
5000
|
-
case "ML-DSA-65":
|
|
5001
|
-
case "ML-DSA-87":
|
|
5002
|
-
algorithm = {
|
|
5003
|
-
name: jwk.alg
|
|
5004
|
-
};
|
|
5005
|
-
keyUsages = jwk.priv ? [ "sign" ] : [ "verify" ];
|
|
5006
|
-
break;
|
|
5007
|
-
|
|
5008
|
-
default:
|
|
5009
|
-
throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
5010
|
-
}
|
|
5011
|
-
break;
|
|
5012
|
-
}
|
|
5013
|
-
|
|
5014
|
-
case "RSA":
|
|
5015
|
-
{
|
|
5016
|
-
switch (jwk.alg) {
|
|
5017
|
-
case "PS256":
|
|
5018
|
-
case "PS384":
|
|
5019
|
-
case "PS512":
|
|
5020
|
-
algorithm = {
|
|
5021
|
-
name: "RSA-PSS",
|
|
5022
|
-
hash: "SHA-".concat(jwk.alg.slice(-3))
|
|
5023
|
-
};
|
|
5024
|
-
keyUsages = jwk.d ? [ "sign" ] : [ "verify" ];
|
|
5025
|
-
break;
|
|
5026
|
-
|
|
5027
|
-
case "RS256":
|
|
5028
|
-
case "RS384":
|
|
5029
|
-
case "RS512":
|
|
5030
|
-
algorithm = {
|
|
5031
|
-
name: "RSASSA-PKCS1-v1_5",
|
|
5032
|
-
hash: "SHA-".concat(jwk.alg.slice(-3))
|
|
5033
|
-
};
|
|
5034
|
-
keyUsages = jwk.d ? [ "sign" ] : [ "verify" ];
|
|
5035
|
-
break;
|
|
5036
|
-
|
|
5037
|
-
case "RSA-OAEP":
|
|
5038
|
-
case "RSA-OAEP-256":
|
|
5039
|
-
case "RSA-OAEP-384":
|
|
5040
|
-
case "RSA-OAEP-512":
|
|
5041
|
-
algorithm = {
|
|
5042
|
-
name: "RSA-OAEP",
|
|
5043
|
-
hash: "SHA-".concat(parseInt(jwk.alg.slice(-3), 10) || 1)
|
|
5044
|
-
};
|
|
5045
|
-
keyUsages = jwk.d ? [ "decrypt", "unwrapKey" ] : [ "encrypt", "wrapKey" ];
|
|
5046
|
-
break;
|
|
5047
|
-
|
|
5048
|
-
default:
|
|
5049
|
-
throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
5050
|
-
}
|
|
5051
|
-
break;
|
|
5052
|
-
}
|
|
5053
|
-
|
|
5054
|
-
case "EC":
|
|
5055
|
-
{
|
|
5056
|
-
switch (jwk.alg) {
|
|
5057
|
-
case "ES256":
|
|
5058
|
-
algorithm = {
|
|
5059
|
-
name: "ECDSA",
|
|
5060
|
-
namedCurve: "P-256"
|
|
5061
|
-
};
|
|
5062
|
-
keyUsages = jwk.d ? [ "sign" ] : [ "verify" ];
|
|
5063
|
-
break;
|
|
5064
|
-
|
|
5065
|
-
case "ES384":
|
|
5066
|
-
algorithm = {
|
|
5067
|
-
name: "ECDSA",
|
|
5068
|
-
namedCurve: "P-384"
|
|
5069
|
-
};
|
|
5070
|
-
keyUsages = jwk.d ? [ "sign" ] : [ "verify" ];
|
|
5071
|
-
break;
|
|
5072
|
-
|
|
5073
|
-
case "ES512":
|
|
5074
|
-
algorithm = {
|
|
5075
|
-
name: "ECDSA",
|
|
5076
|
-
namedCurve: "P-521"
|
|
5077
|
-
};
|
|
5078
|
-
keyUsages = jwk.d ? [ "sign" ] : [ "verify" ];
|
|
5079
|
-
break;
|
|
5080
|
-
|
|
5081
|
-
case "ECDH-ES":
|
|
5082
|
-
case "ECDH-ES+A128KW":
|
|
5083
|
-
case "ECDH-ES+A192KW":
|
|
5084
|
-
case "ECDH-ES+A256KW":
|
|
5085
|
-
algorithm = {
|
|
5086
|
-
name: "ECDH",
|
|
5087
|
-
namedCurve: jwk.crv
|
|
5088
|
-
};
|
|
5089
|
-
keyUsages = jwk.d ? [ "deriveBits" ] : [];
|
|
5090
|
-
break;
|
|
5091
|
-
|
|
5092
|
-
default:
|
|
5093
|
-
throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
5094
|
-
}
|
|
5095
|
-
break;
|
|
5096
|
-
}
|
|
5097
|
-
|
|
5098
|
-
case "OKP":
|
|
5099
|
-
{
|
|
5100
|
-
switch (jwk.alg) {
|
|
5101
|
-
case "Ed25519":
|
|
5102
|
-
case "EdDSA":
|
|
5103
|
-
algorithm = {
|
|
5104
|
-
name: "Ed25519"
|
|
5105
|
-
};
|
|
5106
|
-
keyUsages = jwk.d ? [ "sign" ] : [ "verify" ];
|
|
5107
|
-
break;
|
|
5108
|
-
|
|
5109
|
-
case "ECDH-ES":
|
|
5110
|
-
case "ECDH-ES+A128KW":
|
|
5111
|
-
case "ECDH-ES+A192KW":
|
|
5112
|
-
case "ECDH-ES+A256KW":
|
|
5113
|
-
algorithm = {
|
|
5114
|
-
name: jwk.crv
|
|
5346
|
+
{
|
|
5347
|
+
try {
|
|
5348
|
+
const namedCurve = options.getNamedCurve(keyData);
|
|
5349
|
+
algorithm = namedCurve === "X25519" ? {
|
|
5350
|
+
name: "X25519"
|
|
5351
|
+
} : {
|
|
5352
|
+
name: "ECDH",
|
|
5353
|
+
namedCurve: namedCurve
|
|
5115
5354
|
};
|
|
5116
|
-
|
|
5117
|
-
|
|
5118
|
-
|
|
5119
|
-
default:
|
|
5120
|
-
throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value');
|
|
5355
|
+
} catch (cause) {
|
|
5356
|
+
throw new JOSENotSupported("Invalid or unsupported key format");
|
|
5121
5357
|
}
|
|
5358
|
+
keyUsages = isPublic ? [] : [ "deriveBits" ];
|
|
5122
5359
|
break;
|
|
5123
5360
|
}
|
|
5124
5361
|
|
|
5362
|
+
case "Ed25519":
|
|
5363
|
+
case "EdDSA":
|
|
5364
|
+
algorithm = {
|
|
5365
|
+
name: "Ed25519"
|
|
5366
|
+
};
|
|
5367
|
+
keyUsages = getSigUsages();
|
|
5368
|
+
break;
|
|
5369
|
+
|
|
5370
|
+
case "ML-DSA-44":
|
|
5371
|
+
case "ML-DSA-65":
|
|
5372
|
+
case "ML-DSA-87":
|
|
5373
|
+
algorithm = {
|
|
5374
|
+
name: alg
|
|
5375
|
+
};
|
|
5376
|
+
keyUsages = getSigUsages();
|
|
5377
|
+
break;
|
|
5378
|
+
|
|
5125
5379
|
default:
|
|
5126
|
-
throw new JOSENotSupported('Invalid or unsupported
|
|
5380
|
+
throw new JOSENotSupported('Invalid or unsupported "alg" (Algorithm) value');
|
|
5127
5381
|
}
|
|
5128
|
-
return
|
|
5129
|
-
|
|
5130
|
-
keyUsages: keyUsages
|
|
5131
|
-
};
|
|
5132
|
-
}
|
|
5382
|
+
return crypto.subtle.importKey(keyFormat, keyData, algorithm, (_options$extractable = options === null || options === void 0 ? void 0 : options.extractable) !== null && _options$extractable !== void 0 ? _options$extractable : isPublic ? true : false, keyUsages);
|
|
5383
|
+
};
|
|
5133
5384
|
|
|
5134
|
-
|
|
5135
|
-
|
|
5136
|
-
|
|
5137
|
-
|
|
5138
|
-
|
|
5139
|
-
|
|
5140
|
-
|
|
5141
|
-
|
|
5142
|
-
|
|
5385
|
+
const processPEMData = (pem, pattern) => decodeBase64(pem.replace(pattern, ""));
|
|
5386
|
+
|
|
5387
|
+
const fromPKCS8 = (pem, alg, options) => {
|
|
5388
|
+
var _alg$startsWith;
|
|
5389
|
+
const keyData = processPEMData(pem, /(?:-----(?:BEGIN|END) PRIVATE KEY-----|\s)/g);
|
|
5390
|
+
let opts = options;
|
|
5391
|
+
if (alg !== null && alg !== void 0 && (_alg$startsWith = alg.startsWith) !== null && _alg$startsWith !== void 0 && _alg$startsWith.call(alg, "ECDH-ES")) {
|
|
5392
|
+
opts || (opts = {});
|
|
5393
|
+
opts.getNamedCurve = keyData => {
|
|
5394
|
+
const state = createASN1State(keyData);
|
|
5395
|
+
parsePKCS8Header(state);
|
|
5396
|
+
return parseECAlgorithmIdentifier(state);
|
|
5397
|
+
};
|
|
5143
5398
|
}
|
|
5144
|
-
|
|
5145
|
-
|
|
5146
|
-
}
|
|
5399
|
+
return genericImport("pkcs8", keyData, alg, opts);
|
|
5400
|
+
};
|
|
5147
5401
|
|
|
5148
5402
|
async function importPKCS8(pkcs8, alg, options) {
|
|
5149
5403
|
if (typeof pkcs8 !== "string" || pkcs8.indexOf("-----BEGIN PRIVATE KEY-----") !== 0) {
|
|
@@ -5192,241 +5446,53 @@ async function importJWK(jwk, alg, options) {
|
|
|
5192
5446
|
case "EC":
|
|
5193
5447
|
case "OKP":
|
|
5194
5448
|
return jwkToKey(_objectSpread2(_objectSpread2({}, jwk), {}, {
|
|
5195
|
-
alg: alg,
|
|
5196
|
-
ext: ext
|
|
5197
|
-
}));
|
|
5198
|
-
|
|
5199
|
-
default:
|
|
5200
|
-
throw new JOSENotSupported('Unsupported "kty" (Key Type) Parameter value');
|
|
5201
|
-
}
|
|
5202
|
-
}
|
|
5203
|
-
|
|
5204
|
-
function validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {
|
|
5205
|
-
if (joseHeader.crit !== undefined && (protectedHeader === null || protectedHeader === void 0 ? void 0 : protectedHeader.crit) === undefined) {
|
|
5206
|
-
throw new Err('"crit" (Critical) Header Parameter MUST be integrity protected');
|
|
5207
|
-
}
|
|
5208
|
-
if (!protectedHeader || protectedHeader.crit === undefined) {
|
|
5209
|
-
return new Set;
|
|
5210
|
-
}
|
|
5211
|
-
if (!Array.isArray(protectedHeader.crit) || protectedHeader.crit.length === 0 || protectedHeader.crit.some((input => typeof input !== "string" || input.length === 0))) {
|
|
5212
|
-
throw new Err('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');
|
|
5213
|
-
}
|
|
5214
|
-
let recognized;
|
|
5215
|
-
if (recognizedOption !== undefined) {
|
|
5216
|
-
recognized = new Map([ ...Object.entries(recognizedOption), ...recognizedDefault.entries() ]);
|
|
5217
|
-
} else {
|
|
5218
|
-
recognized = recognizedDefault;
|
|
5219
|
-
}
|
|
5220
|
-
for (const parameter of protectedHeader.crit) {
|
|
5221
|
-
if (!recognized.has(parameter)) {
|
|
5222
|
-
throw new JOSENotSupported('Extension Header Parameter "'.concat(parameter, '" is not recognized'));
|
|
5223
|
-
}
|
|
5224
|
-
if (joseHeader[parameter] === undefined) {
|
|
5225
|
-
throw new Err('Extension Header Parameter "'.concat(parameter, '" is missing'));
|
|
5226
|
-
}
|
|
5227
|
-
if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {
|
|
5228
|
-
throw new Err('Extension Header Parameter "'.concat(parameter, '" MUST be integrity protected'));
|
|
5229
|
-
}
|
|
5230
|
-
}
|
|
5231
|
-
return new Set(protectedHeader.crit);
|
|
5232
|
-
}
|
|
5233
|
-
|
|
5234
|
-
function validateAlgorithms(option, algorithms) {
|
|
5235
|
-
if (algorithms !== undefined && (!Array.isArray(algorithms) || algorithms.some((s => typeof s !== "string")))) {
|
|
5236
|
-
throw new TypeError('"'.concat(option, '" option must be an array of strings'));
|
|
5237
|
-
}
|
|
5238
|
-
if (!algorithms) {
|
|
5239
|
-
return undefined;
|
|
5240
|
-
}
|
|
5241
|
-
return new Set(algorithms);
|
|
5242
|
-
}
|
|
5243
|
-
|
|
5244
|
-
const isJWK = key => isObject(key) && typeof key.kty === "string";
|
|
5245
|
-
|
|
5246
|
-
const isPrivateJWK = key => key.kty !== "oct" && (key.kty === "AKP" && typeof key.priv === "string" || typeof key.d === "string");
|
|
5247
|
-
|
|
5248
|
-
const isPublicJWK = key => key.kty !== "oct" && key.d === undefined && key.priv === undefined;
|
|
5249
|
-
|
|
5250
|
-
const isSecretJWK = key => key.kty === "oct" && typeof key.k === "string";
|
|
5251
|
-
|
|
5252
|
-
let cache;
|
|
5253
|
-
|
|
5254
|
-
const handleJWK = async function handleJWK(key, jwk, alg) {
|
|
5255
|
-
let freeze = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
5256
|
-
cache || (cache = new WeakMap);
|
|
5257
|
-
let cached = cache.get(key);
|
|
5258
|
-
if (cached !== null && cached !== void 0 && cached[alg]) {
|
|
5259
|
-
return cached[alg];
|
|
5260
|
-
}
|
|
5261
|
-
const cryptoKey = await jwkToKey(_objectSpread2(_objectSpread2({}, jwk), {}, {
|
|
5262
|
-
alg: alg
|
|
5263
|
-
}));
|
|
5264
|
-
if (freeze) Object.freeze(key);
|
|
5265
|
-
if (!cached) {
|
|
5266
|
-
cache.set(key, {
|
|
5267
|
-
[alg]: cryptoKey
|
|
5268
|
-
});
|
|
5269
|
-
} else {
|
|
5270
|
-
cached[alg] = cryptoKey;
|
|
5271
|
-
}
|
|
5272
|
-
return cryptoKey;
|
|
5273
|
-
};
|
|
5274
|
-
|
|
5275
|
-
const handleKeyObject = (keyObject, alg) => {
|
|
5276
|
-
cache || (cache = new WeakMap);
|
|
5277
|
-
let cached = cache.get(keyObject);
|
|
5278
|
-
if (cached !== null && cached !== void 0 && cached[alg]) {
|
|
5279
|
-
return cached[alg];
|
|
5280
|
-
}
|
|
5281
|
-
const isPublic = keyObject.type === "public";
|
|
5282
|
-
const extractable = isPublic ? true : false;
|
|
5283
|
-
let cryptoKey;
|
|
5284
|
-
if (keyObject.asymmetricKeyType === "x25519") {
|
|
5285
|
-
switch (alg) {
|
|
5286
|
-
case "ECDH-ES":
|
|
5287
|
-
case "ECDH-ES+A128KW":
|
|
5288
|
-
case "ECDH-ES+A192KW":
|
|
5289
|
-
case "ECDH-ES+A256KW":
|
|
5290
|
-
break;
|
|
5291
|
-
|
|
5292
|
-
default:
|
|
5293
|
-
throw new TypeError("given KeyObject instance cannot be used for this algorithm");
|
|
5294
|
-
}
|
|
5295
|
-
cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, isPublic ? [] : [ "deriveBits" ]);
|
|
5296
|
-
}
|
|
5297
|
-
if (keyObject.asymmetricKeyType === "ed25519") {
|
|
5298
|
-
if (alg !== "EdDSA" && alg !== "Ed25519") {
|
|
5299
|
-
throw new TypeError("given KeyObject instance cannot be used for this algorithm");
|
|
5300
|
-
}
|
|
5301
|
-
cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, [ isPublic ? "verify" : "sign" ]);
|
|
5302
|
-
}
|
|
5303
|
-
switch (keyObject.asymmetricKeyType) {
|
|
5304
|
-
case "ml-dsa-44":
|
|
5305
|
-
case "ml-dsa-65":
|
|
5306
|
-
case "ml-dsa-87":
|
|
5307
|
-
{
|
|
5308
|
-
if (alg !== keyObject.asymmetricKeyType.toUpperCase()) {
|
|
5309
|
-
throw new TypeError("given KeyObject instance cannot be used for this algorithm");
|
|
5310
|
-
}
|
|
5311
|
-
cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, [ isPublic ? "verify" : "sign" ]);
|
|
5312
|
-
}
|
|
5313
|
-
}
|
|
5314
|
-
if (keyObject.asymmetricKeyType === "rsa") {
|
|
5315
|
-
let hash;
|
|
5316
|
-
switch (alg) {
|
|
5317
|
-
case "RSA-OAEP":
|
|
5318
|
-
hash = "SHA-1";
|
|
5319
|
-
break;
|
|
5320
|
-
|
|
5321
|
-
case "RS256":
|
|
5322
|
-
case "PS256":
|
|
5323
|
-
case "RSA-OAEP-256":
|
|
5324
|
-
hash = "SHA-256";
|
|
5325
|
-
break;
|
|
5326
|
-
|
|
5327
|
-
case "RS384":
|
|
5328
|
-
case "PS384":
|
|
5329
|
-
case "RSA-OAEP-384":
|
|
5330
|
-
hash = "SHA-384";
|
|
5331
|
-
break;
|
|
5332
|
-
|
|
5333
|
-
case "RS512":
|
|
5334
|
-
case "PS512":
|
|
5335
|
-
case "RSA-OAEP-512":
|
|
5336
|
-
hash = "SHA-512";
|
|
5337
|
-
break;
|
|
5338
|
-
|
|
5339
|
-
default:
|
|
5340
|
-
throw new TypeError("given KeyObject instance cannot be used for this algorithm");
|
|
5341
|
-
}
|
|
5342
|
-
if (alg.startsWith("RSA-OAEP")) {
|
|
5343
|
-
return keyObject.toCryptoKey({
|
|
5344
|
-
name: "RSA-OAEP",
|
|
5345
|
-
hash: hash
|
|
5346
|
-
}, extractable, isPublic ? [ "encrypt" ] : [ "decrypt" ]);
|
|
5347
|
-
}
|
|
5348
|
-
cryptoKey = keyObject.toCryptoKey({
|
|
5349
|
-
name: alg.startsWith("PS") ? "RSA-PSS" : "RSASSA-PKCS1-v1_5",
|
|
5350
|
-
hash: hash
|
|
5351
|
-
}, extractable, [ isPublic ? "verify" : "sign" ]);
|
|
5352
|
-
}
|
|
5353
|
-
if (keyObject.asymmetricKeyType === "ec") {
|
|
5354
|
-
var _keyObject$asymmetric;
|
|
5355
|
-
const nist = new Map([ [ "prime256v1", "P-256" ], [ "secp384r1", "P-384" ], [ "secp521r1", "P-521" ] ]);
|
|
5356
|
-
const namedCurve = nist.get((_keyObject$asymmetric = keyObject.asymmetricKeyDetails) === null || _keyObject$asymmetric === void 0 ? void 0 : _keyObject$asymmetric.namedCurve);
|
|
5357
|
-
if (!namedCurve) {
|
|
5358
|
-
throw new TypeError("given KeyObject instance cannot be used for this algorithm");
|
|
5359
|
-
}
|
|
5360
|
-
if (alg === "ES256" && namedCurve === "P-256") {
|
|
5361
|
-
cryptoKey = keyObject.toCryptoKey({
|
|
5362
|
-
name: "ECDSA",
|
|
5363
|
-
namedCurve: namedCurve
|
|
5364
|
-
}, extractable, [ isPublic ? "verify" : "sign" ]);
|
|
5365
|
-
}
|
|
5366
|
-
if (alg === "ES384" && namedCurve === "P-384") {
|
|
5367
|
-
cryptoKey = keyObject.toCryptoKey({
|
|
5368
|
-
name: "ECDSA",
|
|
5369
|
-
namedCurve: namedCurve
|
|
5370
|
-
}, extractable, [ isPublic ? "verify" : "sign" ]);
|
|
5371
|
-
}
|
|
5372
|
-
if (alg === "ES512" && namedCurve === "P-521") {
|
|
5373
|
-
cryptoKey = keyObject.toCryptoKey({
|
|
5374
|
-
name: "ECDSA",
|
|
5375
|
-
namedCurve: namedCurve
|
|
5376
|
-
}, extractable, [ isPublic ? "verify" : "sign" ]);
|
|
5377
|
-
}
|
|
5378
|
-
if (alg.startsWith("ECDH-ES")) {
|
|
5379
|
-
cryptoKey = keyObject.toCryptoKey({
|
|
5380
|
-
name: "ECDH",
|
|
5381
|
-
namedCurve: namedCurve
|
|
5382
|
-
}, extractable, isPublic ? [] : [ "deriveBits" ]);
|
|
5383
|
-
}
|
|
5384
|
-
}
|
|
5385
|
-
if (!cryptoKey) {
|
|
5386
|
-
throw new TypeError("given KeyObject instance cannot be used for this algorithm");
|
|
5387
|
-
}
|
|
5388
|
-
if (!cached) {
|
|
5389
|
-
cache.set(keyObject, {
|
|
5390
|
-
[alg]: cryptoKey
|
|
5391
|
-
});
|
|
5392
|
-
} else {
|
|
5393
|
-
cached[alg] = cryptoKey;
|
|
5449
|
+
alg: alg,
|
|
5450
|
+
ext: ext
|
|
5451
|
+
}));
|
|
5452
|
+
|
|
5453
|
+
default:
|
|
5454
|
+
throw new JOSENotSupported('Unsupported "kty" (Key Type) Parameter value');
|
|
5394
5455
|
}
|
|
5395
|
-
|
|
5396
|
-
};
|
|
5456
|
+
}
|
|
5397
5457
|
|
|
5398
|
-
|
|
5399
|
-
if (
|
|
5400
|
-
|
|
5458
|
+
function validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {
|
|
5459
|
+
if (joseHeader.crit !== undefined && (protectedHeader === null || protectedHeader === void 0 ? void 0 : protectedHeader.crit) === undefined) {
|
|
5460
|
+
throw new Err('"crit" (Critical) Header Parameter MUST be integrity protected');
|
|
5401
5461
|
}
|
|
5402
|
-
if (
|
|
5403
|
-
return
|
|
5462
|
+
if (!protectedHeader || protectedHeader.crit === undefined) {
|
|
5463
|
+
return new Set;
|
|
5404
5464
|
}
|
|
5405
|
-
if (
|
|
5406
|
-
|
|
5407
|
-
|
|
5465
|
+
if (!Array.isArray(protectedHeader.crit) || protectedHeader.crit.length === 0 || protectedHeader.crit.some(input => typeof input !== "string" || input.length === 0)) {
|
|
5466
|
+
throw new Err('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');
|
|
5467
|
+
}
|
|
5468
|
+
let recognized;
|
|
5469
|
+
if (recognizedOption !== undefined) {
|
|
5470
|
+
recognized = new Map([ ...Object.entries(recognizedOption), ...recognizedDefault.entries() ]);
|
|
5471
|
+
} else {
|
|
5472
|
+
recognized = recognizedDefault;
|
|
5473
|
+
}
|
|
5474
|
+
for (const parameter of protectedHeader.crit) {
|
|
5475
|
+
if (!recognized.has(parameter)) {
|
|
5476
|
+
throw new JOSENotSupported('Extension Header Parameter "'.concat(parameter, '" is not recognized'));
|
|
5408
5477
|
}
|
|
5409
|
-
if (
|
|
5410
|
-
|
|
5411
|
-
return handleKeyObject(key, alg);
|
|
5412
|
-
} catch (err) {
|
|
5413
|
-
if (err instanceof TypeError) {
|
|
5414
|
-
throw err;
|
|
5415
|
-
}
|
|
5416
|
-
}
|
|
5478
|
+
if (joseHeader[parameter] === undefined) {
|
|
5479
|
+
throw new Err('Extension Header Parameter "'.concat(parameter, '" is missing'));
|
|
5417
5480
|
}
|
|
5418
|
-
|
|
5419
|
-
|
|
5420
|
-
});
|
|
5421
|
-
return handleJWK(key, jwk, alg);
|
|
5422
|
-
}
|
|
5423
|
-
if (isJWK(key)) {
|
|
5424
|
-
if (key.k) {
|
|
5425
|
-
return decode(key.k);
|
|
5481
|
+
if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {
|
|
5482
|
+
throw new Err('Extension Header Parameter "'.concat(parameter, '" MUST be integrity protected'));
|
|
5426
5483
|
}
|
|
5427
|
-
return handleJWK(key, key, alg, true);
|
|
5428
5484
|
}
|
|
5429
|
-
|
|
5485
|
+
return new Set(protectedHeader.crit);
|
|
5486
|
+
}
|
|
5487
|
+
|
|
5488
|
+
function validateAlgorithms(option, algorithms) {
|
|
5489
|
+
if (algorithms !== undefined && (!Array.isArray(algorithms) || algorithms.some(s => typeof s !== "string"))) {
|
|
5490
|
+
throw new TypeError('"'.concat(option, '" option must be an array of strings'));
|
|
5491
|
+
}
|
|
5492
|
+
if (!algorithms) {
|
|
5493
|
+
return undefined;
|
|
5494
|
+
}
|
|
5495
|
+
return new Set(algorithms);
|
|
5430
5496
|
}
|
|
5431
5497
|
|
|
5432
5498
|
const tag = key => key === null || key === void 0 ? void 0 : key[Symbol.toStringTag];
|
|
@@ -5566,7 +5632,7 @@ let USER_AGENT$1;
|
|
|
5566
5632
|
|
|
5567
5633
|
if (typeof navigator === "undefined" || !((_navigator$userAgent$1 = navigator.userAgent) !== null && _navigator$userAgent$1 !== void 0 && (_navigator$userAgent$$1 = _navigator$userAgent$1.startsWith) !== null && _navigator$userAgent$$1 !== void 0 && _navigator$userAgent$$1.call(_navigator$userAgent$1, "Mozilla/5.0 "))) {
|
|
5568
5634
|
const NAME = "openid-client";
|
|
5569
|
-
const VERSION = "v6.8.
|
|
5635
|
+
const VERSION = "v6.8.2";
|
|
5570
5636
|
USER_AGENT$1 = "".concat(NAME, "/").concat(VERSION);
|
|
5571
5637
|
headers = {
|
|
5572
5638
|
"user-agent": USER_AGENT$1
|
|
@@ -5778,7 +5844,7 @@ async function performDiscovery(server, options) {
|
|
|
5778
5844
|
method: "GET",
|
|
5779
5845
|
redirect: "manual",
|
|
5780
5846
|
signal: signal
|
|
5781
|
-
})).then(
|
|
5847
|
+
})).then(response => processDiscoveryResponse(_nodiscoverycheck, response)).catch(errorHandler);
|
|
5782
5848
|
if (resolve && new URL(as.issuer).href !== server.href) {
|
|
5783
5849
|
handleEntraId(server, as, options) || handleB2Clogin(server, options) || (() => {
|
|
5784
5850
|
throw new ClientError("discovered metadata issuer does not match the expected issuer", {
|
|
@@ -5953,7 +6019,7 @@ async function handleRetryAfter(response, currentInterval, signal) {
|
|
|
5953
6019
|
}
|
|
5954
6020
|
|
|
5955
6021
|
function wait(duration, signal) {
|
|
5956
|
-
return new Promise((
|
|
6022
|
+
return new Promise((resolve, reject) => {
|
|
5957
6023
|
const waitStep = remaining => {
|
|
5958
6024
|
try {
|
|
5959
6025
|
signal.throwIfAborted();
|
|
@@ -5966,10 +6032,10 @@ function wait(duration, signal) {
|
|
|
5966
6032
|
return;
|
|
5967
6033
|
}
|
|
5968
6034
|
const currentWait = Math.min(remaining, 5);
|
|
5969
|
-
setTimeout((
|
|
6035
|
+
setTimeout(() => waitStep(remaining - currentWait), currentWait * 1e3);
|
|
5970
6036
|
};
|
|
5971
6037
|
waitStep(duration);
|
|
5972
|
-
})
|
|
6038
|
+
});
|
|
5973
6039
|
}
|
|
5974
6040
|
|
|
5975
6041
|
async function initiateBackchannelAuthentication(config, parameters) {
|
|
@@ -5980,7 +6046,7 @@ async function initiateBackchannelAuthentication(config, parameters) {
|
|
|
5980
6046
|
[allowInsecureRequests$1]: !tlsOnly,
|
|
5981
6047
|
headers: new Headers(headers),
|
|
5982
6048
|
signal: signal(timeout)
|
|
5983
|
-
}).then(
|
|
6049
|
+
}).then(response => processBackchannelAuthenticationResponse(as, c, response)).catch(errorHandler);
|
|
5984
6050
|
}
|
|
5985
6051
|
|
|
5986
6052
|
async function pollBackchannelAuthenticationGrant(config, backchannelAuthenticationResponse, parameters, options) {
|
|
@@ -6307,7 +6373,7 @@ async function genericGrantRequest(config, grantType, parameters, options) {
|
|
|
6307
6373
|
DPoP: options === null || options === void 0 ? void 0 : options.DPoP,
|
|
6308
6374
|
headers: new Headers(headers),
|
|
6309
6375
|
signal: signal(timeout)
|
|
6310
|
-
}).then(
|
|
6376
|
+
}).then(response => {
|
|
6311
6377
|
let recognizedTokenTypes;
|
|
6312
6378
|
if (grantType === "urn:ietf:params:oauth:grant-type:token-exchange") {
|
|
6313
6379
|
recognizedTokenTypes = {
|
|
@@ -6318,91 +6384,11 @@ async function genericGrantRequest(config, grantType, parameters, options) {
|
|
|
6318
6384
|
[jweDecrypt]: decrypt,
|
|
6319
6385
|
recognizedTokenTypes: recognizedTokenTypes
|
|
6320
6386
|
});
|
|
6321
|
-
})
|
|
6387
|
+
}).catch(errorHandler);
|
|
6322
6388
|
addHelpers(result);
|
|
6323
6389
|
return result;
|
|
6324
6390
|
}
|
|
6325
6391
|
|
|
6326
|
-
function subtleAlgorithm(alg, algorithm) {
|
|
6327
|
-
const hash = "SHA-".concat(alg.slice(-3));
|
|
6328
|
-
switch (alg) {
|
|
6329
|
-
case "HS256":
|
|
6330
|
-
case "HS384":
|
|
6331
|
-
case "HS512":
|
|
6332
|
-
return {
|
|
6333
|
-
hash: hash,
|
|
6334
|
-
name: "HMAC"
|
|
6335
|
-
};
|
|
6336
|
-
|
|
6337
|
-
case "PS256":
|
|
6338
|
-
case "PS384":
|
|
6339
|
-
case "PS512":
|
|
6340
|
-
return {
|
|
6341
|
-
hash: hash,
|
|
6342
|
-
name: "RSA-PSS",
|
|
6343
|
-
saltLength: parseInt(alg.slice(-3), 10) >> 3
|
|
6344
|
-
};
|
|
6345
|
-
|
|
6346
|
-
case "RS256":
|
|
6347
|
-
case "RS384":
|
|
6348
|
-
case "RS512":
|
|
6349
|
-
return {
|
|
6350
|
-
hash: hash,
|
|
6351
|
-
name: "RSASSA-PKCS1-v1_5"
|
|
6352
|
-
};
|
|
6353
|
-
|
|
6354
|
-
case "ES256":
|
|
6355
|
-
case "ES384":
|
|
6356
|
-
case "ES512":
|
|
6357
|
-
return {
|
|
6358
|
-
hash: hash,
|
|
6359
|
-
name: "ECDSA",
|
|
6360
|
-
namedCurve: algorithm.namedCurve
|
|
6361
|
-
};
|
|
6362
|
-
|
|
6363
|
-
case "Ed25519":
|
|
6364
|
-
case "EdDSA":
|
|
6365
|
-
return {
|
|
6366
|
-
name: "Ed25519"
|
|
6367
|
-
};
|
|
6368
|
-
|
|
6369
|
-
case "ML-DSA-44":
|
|
6370
|
-
case "ML-DSA-65":
|
|
6371
|
-
case "ML-DSA-87":
|
|
6372
|
-
return {
|
|
6373
|
-
name: alg
|
|
6374
|
-
};
|
|
6375
|
-
|
|
6376
|
-
default:
|
|
6377
|
-
throw new JOSENotSupported("alg ".concat(alg, " is not supported either by JOSE or your javascript runtime"));
|
|
6378
|
-
}
|
|
6379
|
-
}
|
|
6380
|
-
|
|
6381
|
-
async function getSigKey(alg, key, usage) {
|
|
6382
|
-
if (key instanceof Uint8Array) {
|
|
6383
|
-
if (!alg.startsWith("HS")) {
|
|
6384
|
-
throw new TypeError(invalidKeyInput(key, "CryptoKey", "KeyObject", "JSON Web Key"));
|
|
6385
|
-
}
|
|
6386
|
-
return crypto.subtle.importKey("raw", key, {
|
|
6387
|
-
hash: "SHA-".concat(alg.slice(-3)),
|
|
6388
|
-
name: "HMAC"
|
|
6389
|
-
}, false, [ usage ]);
|
|
6390
|
-
}
|
|
6391
|
-
checkSigCryptoKey(key, alg, usage);
|
|
6392
|
-
return key;
|
|
6393
|
-
}
|
|
6394
|
-
|
|
6395
|
-
async function verify(alg, key, signature, data) {
|
|
6396
|
-
const cryptoKey = await getSigKey(alg, key, "verify");
|
|
6397
|
-
checkKeyLength(alg, cryptoKey);
|
|
6398
|
-
const algorithm = subtleAlgorithm(alg, cryptoKey.algorithm);
|
|
6399
|
-
try {
|
|
6400
|
-
return await crypto.subtle.verify(algorithm, cryptoKey, signature, data);
|
|
6401
|
-
} catch (_unused) {
|
|
6402
|
-
return false;
|
|
6403
|
-
}
|
|
6404
|
-
}
|
|
6405
|
-
|
|
6406
6392
|
async function flattenedVerify(jws, key, options) {
|
|
6407
6393
|
if (!isObject(jws)) {
|
|
6408
6394
|
throw new JWSInvalid("Flattened JWS must be an object");
|
|
@@ -6465,12 +6451,7 @@ async function flattenedVerify(jws, key, options) {
|
|
|
6465
6451
|
}
|
|
6466
6452
|
checkKeyType(alg, key, "verify");
|
|
6467
6453
|
const data = concat(jws.protected !== undefined ? encode(jws.protected) : new Uint8Array, encode("."), typeof jws.payload === "string" ? b64 ? encode(jws.payload) : encoder.encode(jws.payload) : jws.payload);
|
|
6468
|
-
|
|
6469
|
-
try {
|
|
6470
|
-
signature = decode(jws.signature);
|
|
6471
|
-
} catch (_unused2) {
|
|
6472
|
-
throw new JWSInvalid("Failed to base64url decode the signature");
|
|
6473
|
-
}
|
|
6454
|
+
const signature = decodeBase64url(jws.signature, "signature", JWSInvalid);
|
|
6474
6455
|
const k = await normalizeKey(key, alg);
|
|
6475
6456
|
const verified = await verify(alg, k, signature, data);
|
|
6476
6457
|
if (!verified) {
|
|
@@ -6478,11 +6459,7 @@ async function flattenedVerify(jws, key, options) {
|
|
|
6478
6459
|
}
|
|
6479
6460
|
let payload;
|
|
6480
6461
|
if (b64) {
|
|
6481
|
-
|
|
6482
|
-
payload = decode(jws.payload);
|
|
6483
|
-
} catch (_unused3) {
|
|
6484
|
-
throw new JWSInvalid("Failed to base64url decode the payload");
|
|
6485
|
-
}
|
|
6462
|
+
payload = decodeBase64url(jws.payload, "payload", JWSInvalid);
|
|
6486
6463
|
} else if (typeof jws.payload === "string") {
|
|
6487
6464
|
payload = encoder.encode(jws.payload);
|
|
6488
6465
|
} else {
|
|
@@ -6769,7 +6746,7 @@ class LocalJWKSet {
|
|
|
6769
6746
|
async getKey(protectedHeader, token) {
|
|
6770
6747
|
const {alg: alg, kid: kid} = _objectSpread2(_objectSpread2({}, protectedHeader), token === null || token === void 0 ? void 0 : token.header);
|
|
6771
6748
|
const kty = getKtyFromAlg(alg);
|
|
6772
|
-
const candidates = _classPrivateFieldGet2(_jwks$1, this).keys.filter(
|
|
6749
|
+
const candidates = _classPrivateFieldGet2(_jwks$1, this).keys.filter(jwk => {
|
|
6773
6750
|
let candidate = kty === jwk.kty;
|
|
6774
6751
|
if (candidate && typeof kid === "string") {
|
|
6775
6752
|
candidate = kid === jwk.kid;
|
|
@@ -6804,7 +6781,7 @@ class LocalJWKSet {
|
|
|
6804
6781
|
}
|
|
6805
6782
|
}
|
|
6806
6783
|
return candidate;
|
|
6807
|
-
})
|
|
6784
|
+
});
|
|
6808
6785
|
const {0: jwk, length: length} = candidates;
|
|
6809
6786
|
if (length === 0) {
|
|
6810
6787
|
throw new JWKSNoMatchingKey;
|
|
@@ -6812,13 +6789,13 @@ class LocalJWKSet {
|
|
|
6812
6789
|
if (length !== 1) {
|
|
6813
6790
|
const error = new JWKSMultipleMatchingKeys;
|
|
6814
6791
|
const _cached = _classPrivateFieldGet2(_cached2, this);
|
|
6815
|
-
error[Symbol.asyncIterator] = _wrapAsyncGenerator(
|
|
6792
|
+
error[Symbol.asyncIterator] = _wrapAsyncGenerator(function*() {
|
|
6816
6793
|
for (const jwk of candidates) {
|
|
6817
6794
|
try {
|
|
6818
6795
|
yield yield _awaitAsyncGenerator(importWithAlgCache(_cached, jwk, alg));
|
|
6819
6796
|
} catch (_unused) {}
|
|
6820
6797
|
}
|
|
6821
|
-
})
|
|
6798
|
+
});
|
|
6822
6799
|
throw error;
|
|
6823
6800
|
}
|
|
6824
6801
|
return importWithAlgCache(_classPrivateFieldGet2(_cached2, this), jwk, alg);
|
|
@@ -6863,7 +6840,7 @@ let USER_AGENT;
|
|
|
6863
6840
|
|
|
6864
6841
|
if (typeof navigator === "undefined" || !((_navigator$userAgent = navigator.userAgent) !== null && _navigator$userAgent !== void 0 && (_navigator$userAgent$ = _navigator$userAgent.startsWith) !== null && _navigator$userAgent$ !== void 0 && _navigator$userAgent$.call(_navigator$userAgent, "Mozilla/5.0 "))) {
|
|
6865
6842
|
const NAME = "jose";
|
|
6866
|
-
const VERSION = "v6.
|
|
6843
|
+
const VERSION = "v6.2.2";
|
|
6867
6844
|
USER_AGENT = "".concat(NAME, "/").concat(VERSION);
|
|
6868
6845
|
}
|
|
6869
6846
|
|
|
@@ -6876,12 +6853,12 @@ async function fetchJwks(url, headers, signal) {
|
|
|
6876
6853
|
signal: signal,
|
|
6877
6854
|
redirect: "manual",
|
|
6878
6855
|
headers: headers
|
|
6879
|
-
}).catch(
|
|
6856
|
+
}).catch(err => {
|
|
6880
6857
|
if (err.name === "TimeoutError") {
|
|
6881
6858
|
throw new JWKSTimeout;
|
|
6882
6859
|
}
|
|
6883
6860
|
throw err;
|
|
6884
|
-
})
|
|
6861
|
+
});
|
|
6885
6862
|
if (response.status !== 200) {
|
|
6886
6863
|
throw new JOSEError("Expected 200 OK from the JSON Web Key Set HTTP response");
|
|
6887
6864
|
}
|
|
@@ -6996,7 +6973,7 @@ class RemoteJWKSet {
|
|
|
6996
6973
|
if (_classPrivateFieldGet2(_pendingFetch, this) && isCloudflareWorkers()) {
|
|
6997
6974
|
_classPrivateFieldSet2(_pendingFetch, this, undefined);
|
|
6998
6975
|
}
|
|
6999
|
-
_classPrivateFieldGet2(_pendingFetch, this) || _classPrivateFieldSet2(_pendingFetch, this, fetchJwks(_classPrivateFieldGet2(_url, this).href, _classPrivateFieldGet2(_headers, this), AbortSignal.timeout(_classPrivateFieldGet2(_timeoutDuration, this)), _classPrivateFieldGet2(_customFetch$1, this)).then(
|
|
6976
|
+
_classPrivateFieldGet2(_pendingFetch, this) || _classPrivateFieldSet2(_pendingFetch, this, fetchJwks(_classPrivateFieldGet2(_url, this).href, _classPrivateFieldGet2(_headers, this), AbortSignal.timeout(_classPrivateFieldGet2(_timeoutDuration, this)), _classPrivateFieldGet2(_customFetch$1, this)).then(json => {
|
|
7000
6977
|
_classPrivateFieldSet2(_local, this, createLocalJWKSet(json));
|
|
7001
6978
|
if (_classPrivateFieldGet2(_cache, this)) {
|
|
7002
6979
|
_classPrivateFieldGet2(_cache, this).uat = Date.now();
|
|
@@ -7004,10 +6981,10 @@ class RemoteJWKSet {
|
|
|
7004
6981
|
}
|
|
7005
6982
|
_classPrivateFieldSet2(_jwksTimestamp, this, Date.now());
|
|
7006
6983
|
_classPrivateFieldSet2(_pendingFetch, this, undefined);
|
|
7007
|
-
})
|
|
6984
|
+
}).catch(err => {
|
|
7008
6985
|
_classPrivateFieldSet2(_pendingFetch, this, undefined);
|
|
7009
6986
|
throw err;
|
|
7010
|
-
}))
|
|
6987
|
+
}));
|
|
7011
6988
|
await _classPrivateFieldGet2(_pendingFetch, this);
|
|
7012
6989
|
}
|
|
7013
6990
|
}
|
|
@@ -7049,7 +7026,7 @@ function createRemoteJWKSet(url, options) {
|
|
|
7049
7026
|
|
|
7050
7027
|
const _excluded = [ "mfaToken" ], _excluded2 = [ "mfaToken" ];
|
|
7051
7028
|
|
|
7052
|
-
var _baseUrl, _clientId, _customFetch, _configuration, _serverMetadata, _options, _jwks,
|
|
7029
|
+
var _baseUrl, _clientId, _customFetch, _entries, _ttlMs, _maxEntries, _configuration, _serverMetadata, _clientAuthPromise, _options, _customFetch2, _jwks, _discoveryCache, _inFlightDiscovery, _jwksCache, _Class9_brand;
|
|
7053
7030
|
|
|
7054
7031
|
var NotSupportedError = class NotSupportedError extends Error {
|
|
7055
7032
|
constructor(code, message) {
|
|
@@ -7155,12 +7132,12 @@ var MissingClientAuthError = class MissingClientAuthError extends Error {
|
|
|
7155
7132
|
};
|
|
7156
7133
|
|
|
7157
7134
|
function stripUndefinedProperties(value) {
|
|
7158
|
-
return Object.entries(value).filter(
|
|
7135
|
+
return Object.entries(value).filter(_ref => {
|
|
7159
7136
|
let [, value2] = _ref;
|
|
7160
7137
|
return typeof value2 !== "undefined";
|
|
7161
|
-
})
|
|
7138
|
+
}).reduce((acc, curr) => _objectSpread2(_objectSpread2({}, acc), {}, {
|
|
7162
7139
|
[curr[0]]: curr[1]
|
|
7163
|
-
})
|
|
7140
|
+
}), {});
|
|
7164
7141
|
}
|
|
7165
7142
|
|
|
7166
7143
|
var MfaError$1 = class MfaError extends Error {
|
|
@@ -7232,7 +7209,9 @@ function transformEnrollmentResponse(api) {
|
|
|
7232
7209
|
oobChannel: api.oob_channel,
|
|
7233
7210
|
oobCode: api.oob_code,
|
|
7234
7211
|
bindingMethod: api.binding_method,
|
|
7235
|
-
id: api.id
|
|
7212
|
+
id: api.id,
|
|
7213
|
+
barcodeUri: api.barcode_uri,
|
|
7214
|
+
recoveryCodes: api.recovery_codes
|
|
7236
7215
|
};
|
|
7237
7216
|
}
|
|
7238
7217
|
throw new Error("Unexpected authenticator type: ".concat(api.authenticator_type));
|
|
@@ -7353,6 +7332,42 @@ class MfaClient {
|
|
|
7353
7332
|
}
|
|
7354
7333
|
});
|
|
7355
7334
|
|
|
7335
|
+
function createTelemetryFetch(baseFetch, config) {
|
|
7336
|
+
if (config.enabled === false) {
|
|
7337
|
+
return baseFetch;
|
|
7338
|
+
}
|
|
7339
|
+
const telemetryData = {
|
|
7340
|
+
name: config.name,
|
|
7341
|
+
version: config.version
|
|
7342
|
+
};
|
|
7343
|
+
const headerValue = btoa(JSON.stringify(telemetryData));
|
|
7344
|
+
return async (input, init) => {
|
|
7345
|
+
const headers = input instanceof Request ? new Headers(input.headers) : new Headers;
|
|
7346
|
+
if (init !== null && init !== void 0 && init.headers) {
|
|
7347
|
+
const initHeaders = new Headers(init.headers);
|
|
7348
|
+
initHeaders.forEach((value, key) => {
|
|
7349
|
+
headers.set(key, value);
|
|
7350
|
+
});
|
|
7351
|
+
}
|
|
7352
|
+
headers.set("Auth0-Client", headerValue);
|
|
7353
|
+
return baseFetch(input, _objectSpread2(_objectSpread2({}, init), {}, {
|
|
7354
|
+
headers: headers
|
|
7355
|
+
}));
|
|
7356
|
+
};
|
|
7357
|
+
}
|
|
7358
|
+
|
|
7359
|
+
function getTelemetryConfig(config) {
|
|
7360
|
+
var _config$name, _config$version;
|
|
7361
|
+
if ((config === null || config === void 0 ? void 0 : config.enabled) === false) {
|
|
7362
|
+
return config;
|
|
7363
|
+
}
|
|
7364
|
+
return {
|
|
7365
|
+
enabled: true,
|
|
7366
|
+
name: (_config$name = config === null || config === void 0 ? void 0 : config.name) !== null && _config$name !== void 0 ? _config$name : "@auth0/auth0-auth-js",
|
|
7367
|
+
version: (_config$version = config === null || config === void 0 ? void 0 : config.version) !== null && _config$version !== void 0 ? _config$version : "1.5.0"
|
|
7368
|
+
};
|
|
7369
|
+
}
|
|
7370
|
+
|
|
7356
7371
|
var TokenResponse = class _TokenResponse {
|
|
7357
7372
|
constructor(accessToken, expiresAt, idToken, refreshToken, scope, claims, authorizationDetails) {
|
|
7358
7373
|
_defineProperty(this, "accessToken", void 0);
|
|
@@ -7381,6 +7396,81 @@ var TokenResponse = class _TokenResponse {
|
|
|
7381
7396
|
}
|
|
7382
7397
|
};
|
|
7383
7398
|
|
|
7399
|
+
var LruCache = (_entries = new WeakMap, _ttlMs = new WeakMap, _maxEntries = new WeakMap,
|
|
7400
|
+
class LruCache {
|
|
7401
|
+
constructor(maxEntries, ttlMs) {
|
|
7402
|
+
_classPrivateFieldInitSpec(this, _entries, new Map);
|
|
7403
|
+
_classPrivateFieldInitSpec(this, _ttlMs, void 0);
|
|
7404
|
+
_classPrivateFieldInitSpec(this, _maxEntries, void 0);
|
|
7405
|
+
_classPrivateFieldSet2(_maxEntries, this, Math.max(1, Math.floor(maxEntries)));
|
|
7406
|
+
_classPrivateFieldSet2(_ttlMs, this, Math.max(0, Math.floor(ttlMs)));
|
|
7407
|
+
}
|
|
7408
|
+
get(key) {
|
|
7409
|
+
const entry = _classPrivateFieldGet2(_entries, this).get(key);
|
|
7410
|
+
if (!entry) {
|
|
7411
|
+
return;
|
|
7412
|
+
}
|
|
7413
|
+
if (Date.now() >= entry.expiresAt) {
|
|
7414
|
+
_classPrivateFieldGet2(_entries, this).delete(key);
|
|
7415
|
+
return;
|
|
7416
|
+
}
|
|
7417
|
+
_classPrivateFieldGet2(_entries, this).delete(key);
|
|
7418
|
+
_classPrivateFieldGet2(_entries, this).set(key, entry);
|
|
7419
|
+
return entry.value;
|
|
7420
|
+
}
|
|
7421
|
+
set(key, value) {
|
|
7422
|
+
if (_classPrivateFieldGet2(_entries, this).has(key)) {
|
|
7423
|
+
_classPrivateFieldGet2(_entries, this).delete(key);
|
|
7424
|
+
}
|
|
7425
|
+
_classPrivateFieldGet2(_entries, this).set(key, {
|
|
7426
|
+
value: value,
|
|
7427
|
+
expiresAt: Date.now() + _classPrivateFieldGet2(_ttlMs, this)
|
|
7428
|
+
});
|
|
7429
|
+
while (_classPrivateFieldGet2(_entries, this).size > _classPrivateFieldGet2(_maxEntries, this)) {
|
|
7430
|
+
const oldestKey = _classPrivateFieldGet2(_entries, this).keys().next().value;
|
|
7431
|
+
if (oldestKey === void 0) {
|
|
7432
|
+
break;
|
|
7433
|
+
}
|
|
7434
|
+
_classPrivateFieldGet2(_entries, this).delete(oldestKey);
|
|
7435
|
+
}
|
|
7436
|
+
}
|
|
7437
|
+
});
|
|
7438
|
+
|
|
7439
|
+
var globalCaches = new Map;
|
|
7440
|
+
|
|
7441
|
+
function getGlobalCache(key) {
|
|
7442
|
+
return globalCaches.get(key);
|
|
7443
|
+
}
|
|
7444
|
+
|
|
7445
|
+
function getGlobalCacheKey(maxEntries, ttlMs) {
|
|
7446
|
+
return "".concat(maxEntries, ":").concat(ttlMs);
|
|
7447
|
+
}
|
|
7448
|
+
|
|
7449
|
+
function resolveCacheConfig(options) {
|
|
7450
|
+
const ttlSeconds = typeof (options === null || options === void 0 ? void 0 : options.ttl) === "number" ? options.ttl : 600;
|
|
7451
|
+
const maxEntries = typeof (options === null || options === void 0 ? void 0 : options.maxEntries) === "number" && options.maxEntries > 0 ? options.maxEntries : 100;
|
|
7452
|
+
const ttlMs = ttlSeconds * 1e3;
|
|
7453
|
+
return {
|
|
7454
|
+
ttlMs: ttlMs,
|
|
7455
|
+
maxEntries: maxEntries
|
|
7456
|
+
};
|
|
7457
|
+
}
|
|
7458
|
+
|
|
7459
|
+
var DiscoveryCacheFactory = class {
|
|
7460
|
+
static createDiscoveryCache(config) {
|
|
7461
|
+
const cacheKey = getGlobalCacheKey(config.maxEntries, config.ttlMs);
|
|
7462
|
+
let cache = getGlobalCache(cacheKey);
|
|
7463
|
+
if (!cache) {
|
|
7464
|
+
cache = new LruCache(config.maxEntries, config.ttlMs);
|
|
7465
|
+
globalCaches.set(cacheKey, cache);
|
|
7466
|
+
}
|
|
7467
|
+
return cache;
|
|
7468
|
+
}
|
|
7469
|
+
static createJwksCache() {
|
|
7470
|
+
return {};
|
|
7471
|
+
}
|
|
7472
|
+
};
|
|
7473
|
+
|
|
7384
7474
|
var DEFAULT_SCOPES = "openid profile email offline_access";
|
|
7385
7475
|
|
|
7386
7476
|
var MAX_ARRAY_VALUES_PER_KEY = 20;
|
|
@@ -7413,9 +7503,9 @@ function appendExtraParams(params, extra) {
|
|
|
7413
7503
|
if (parameterValue.length > MAX_ARRAY_VALUES_PER_KEY) {
|
|
7414
7504
|
throw new TokenExchangeError("Parameter '".concat(parameterKey, "' exceeds maximum array size of ").concat(MAX_ARRAY_VALUES_PER_KEY));
|
|
7415
7505
|
}
|
|
7416
|
-
parameterValue.forEach(
|
|
7506
|
+
parameterValue.forEach(arrayItem => {
|
|
7417
7507
|
params.append(parameterKey, arrayItem);
|
|
7418
|
-
})
|
|
7508
|
+
});
|
|
7419
7509
|
} else {
|
|
7420
7510
|
params.append(parameterKey, parameterValue);
|
|
7421
7511
|
}
|
|
@@ -7432,39 +7522,58 @@ var SUBJECT_TYPE_ACCESS_TOKEN = "urn:ietf:params:oauth:token-type:access_token";
|
|
|
7432
7522
|
|
|
7433
7523
|
var REQUESTED_TOKEN_TYPE_FEDERATED_CONNECTION_ACCESS_TOKEN = "http://auth0.com/oauth/token-type/federated-connection-access-token";
|
|
7434
7524
|
|
|
7435
|
-
var AuthClient = (_configuration = new WeakMap, _serverMetadata = new WeakMap,
|
|
7436
|
-
|
|
7525
|
+
var AuthClient = (_configuration = new WeakMap, _serverMetadata = new WeakMap, _clientAuthPromise = new WeakMap,
|
|
7526
|
+
_options = new WeakMap, _customFetch2 = new WeakMap, _jwks = new WeakMap, _discoveryCache = new WeakMap,
|
|
7527
|
+
_inFlightDiscovery = new WeakMap, _jwksCache = new WeakMap, _Class9_brand = new WeakSet,
|
|
7528
|
+
class AuthClient {
|
|
7437
7529
|
constructor(_options2) {
|
|
7438
|
-
|
|
7530
|
+
var _options2$customFetch;
|
|
7531
|
+
_classPrivateMethodInitSpec(this, _Class9_brand);
|
|
7439
7532
|
_classPrivateFieldInitSpec(this, _configuration, void 0);
|
|
7440
7533
|
_classPrivateFieldInitSpec(this, _serverMetadata, void 0);
|
|
7534
|
+
_classPrivateFieldInitSpec(this, _clientAuthPromise, void 0);
|
|
7441
7535
|
_classPrivateFieldInitSpec(this, _options, void 0);
|
|
7536
|
+
_classPrivateFieldInitSpec(this, _customFetch2, void 0);
|
|
7442
7537
|
_classPrivateFieldInitSpec(this, _jwks, void 0);
|
|
7538
|
+
_classPrivateFieldInitSpec(this, _discoveryCache, void 0);
|
|
7539
|
+
_classPrivateFieldInitSpec(this, _inFlightDiscovery, void 0);
|
|
7540
|
+
_classPrivateFieldInitSpec(this, _jwksCache, void 0);
|
|
7443
7541
|
_defineProperty(this, "mfa", void 0);
|
|
7444
7542
|
_classPrivateFieldSet2(_options, this, _options2);
|
|
7445
7543
|
if (_options2.useMtls && !_options2.customFetch) {
|
|
7446
7544
|
throw new NotSupportedError("mtls_without_custom_fetch_not_supported", "Using mTLS without a custom fetch implementation is not supported");
|
|
7447
7545
|
}
|
|
7546
|
+
_classPrivateFieldSet2(_customFetch2, this, createTelemetryFetch((_options2$customFetch = _options2.customFetch) !== null && _options2$customFetch !== void 0 ? _options2$customFetch : function() {
|
|
7547
|
+
return fetch(...arguments);
|
|
7548
|
+
}, getTelemetryConfig(_options2.telemetry)));
|
|
7549
|
+
const cacheConfig = resolveCacheConfig(_options2.discoveryCache);
|
|
7550
|
+
_classPrivateFieldSet2(_discoveryCache, this, DiscoveryCacheFactory.createDiscoveryCache(cacheConfig));
|
|
7551
|
+
_classPrivateFieldSet2(_inFlightDiscovery, this, new Map);
|
|
7552
|
+
_classPrivateFieldSet2(_jwksCache, this, DiscoveryCacheFactory.createJwksCache());
|
|
7448
7553
|
this.mfa = new MfaClient({
|
|
7449
7554
|
domain: _classPrivateFieldGet2(_options, this).domain,
|
|
7450
7555
|
clientId: _classPrivateFieldGet2(_options, this).clientId,
|
|
7451
|
-
customFetch: _classPrivateFieldGet2(
|
|
7556
|
+
customFetch: _classPrivateFieldGet2(_customFetch2, this)
|
|
7452
7557
|
});
|
|
7453
7558
|
}
|
|
7559
|
+
async getServerMetadata() {
|
|
7560
|
+
const {serverMetadata: serverMetadata} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7561
|
+
return serverMetadata;
|
|
7562
|
+
}
|
|
7454
7563
|
async buildAuthorizationUrl(options) {
|
|
7455
|
-
const {serverMetadata: serverMetadata} = await _assertClassBrand(
|
|
7564
|
+
const {serverMetadata: serverMetadata} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7456
7565
|
if (options !== null && options !== void 0 && options.pushedAuthorizationRequests && !serverMetadata.pushed_authorization_request_endpoint) {
|
|
7457
7566
|
throw new NotSupportedError("par_not_supported_error", "The Auth0 tenant does not have pushed authorization requests enabled. Learn how to enable it here: https://auth0.com/docs/get-started/applications/configure-par");
|
|
7458
7567
|
}
|
|
7459
7568
|
try {
|
|
7460
|
-
return await _assertClassBrand(
|
|
7569
|
+
return await _assertClassBrand(_Class9_brand, this, _buildAuthorizationUrl).call(this, options);
|
|
7461
7570
|
} catch (e) {
|
|
7462
7571
|
throw new BuildAuthorizationUrlError(e);
|
|
7463
7572
|
}
|
|
7464
7573
|
}
|
|
7465
7574
|
async buildLinkUserUrl(options) {
|
|
7466
7575
|
try {
|
|
7467
|
-
const result = await _assertClassBrand(
|
|
7576
|
+
const result = await _assertClassBrand(_Class9_brand, this, _buildAuthorizationUrl).call(this, {
|
|
7468
7577
|
authorizationParams: _objectSpread2(_objectSpread2({}, options.authorizationParams), {}, {
|
|
7469
7578
|
requested_connection: options.connection,
|
|
7470
7579
|
requested_connection_scope: options.connectionScope,
|
|
@@ -7482,7 +7591,7 @@ _jwks = new WeakMap, _Class8_brand = new WeakSet, class AuthClient {
|
|
|
7482
7591
|
}
|
|
7483
7592
|
async buildUnlinkUserUrl(options) {
|
|
7484
7593
|
try {
|
|
7485
|
-
const result = await _assertClassBrand(
|
|
7594
|
+
const result = await _assertClassBrand(_Class9_brand, this, _buildAuthorizationUrl).call(this, {
|
|
7486
7595
|
authorizationParams: _objectSpread2(_objectSpread2({}, options.authorizationParams), {}, {
|
|
7487
7596
|
requested_connection: options.connection,
|
|
7488
7597
|
scope: "openid unlink_account",
|
|
@@ -7498,7 +7607,7 @@ _jwks = new WeakMap, _Class8_brand = new WeakSet, class AuthClient {
|
|
|
7498
7607
|
}
|
|
7499
7608
|
}
|
|
7500
7609
|
async backchannelAuthentication(options) {
|
|
7501
|
-
const {configuration: configuration, serverMetadata: serverMetadata} = await _assertClassBrand(
|
|
7610
|
+
const {configuration: configuration, serverMetadata: serverMetadata} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7502
7611
|
const additionalParams = stripUndefinedProperties(_objectSpread2(_objectSpread2({}, _classPrivateFieldGet2(_options, this).authorizationParams), options === null || options === void 0 ? void 0 : options.authorizationParams));
|
|
7503
7612
|
const params = new URLSearchParams(_objectSpread2(_objectSpread2({
|
|
7504
7613
|
scope: DEFAULT_SCOPES
|
|
@@ -7526,7 +7635,7 @@ _jwks = new WeakMap, _Class8_brand = new WeakSet, class AuthClient {
|
|
|
7526
7635
|
}
|
|
7527
7636
|
}
|
|
7528
7637
|
async initiateBackchannelAuthentication(options) {
|
|
7529
|
-
const {configuration: configuration, serverMetadata: serverMetadata} = await _assertClassBrand(
|
|
7638
|
+
const {configuration: configuration, serverMetadata: serverMetadata} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7530
7639
|
const additionalParams = stripUndefinedProperties(_objectSpread2(_objectSpread2({}, _classPrivateFieldGet2(_options, this).authorizationParams), options === null || options === void 0 ? void 0 : options.authorizationParams));
|
|
7531
7640
|
const params = new URLSearchParams(_objectSpread2(_objectSpread2({
|
|
7532
7641
|
scope: DEFAULT_SCOPES
|
|
@@ -7558,7 +7667,7 @@ _jwks = new WeakMap, _Class8_brand = new WeakSet, class AuthClient {
|
|
|
7558
7667
|
}
|
|
7559
7668
|
async backchannelAuthenticationGrant(_ref2) {
|
|
7560
7669
|
let {authReqId: authReqId} = _ref2;
|
|
7561
|
-
const {configuration: configuration} = await _assertClassBrand(
|
|
7670
|
+
const {configuration: configuration} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7562
7671
|
const params = new URLSearchParams({
|
|
7563
7672
|
auth_req_id: authReqId
|
|
7564
7673
|
});
|
|
@@ -7593,10 +7702,10 @@ _jwks = new WeakMap, _Class8_brand = new WeakSet, class AuthClient {
|
|
|
7593
7702
|
}
|
|
7594
7703
|
}
|
|
7595
7704
|
async exchangeToken(options) {
|
|
7596
|
-
return "connection" in options ? _assertClassBrand(
|
|
7705
|
+
return "connection" in options ? _assertClassBrand(_Class9_brand, this, _exchangeTokenVaultToken).call(this, options) : _assertClassBrand(_Class9_brand, this, _exchangeProfileToken).call(this, options);
|
|
7597
7706
|
}
|
|
7598
7707
|
async getTokenByCode(url, options) {
|
|
7599
|
-
const {configuration: configuration} = await _assertClassBrand(
|
|
7708
|
+
const {configuration: configuration} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7600
7709
|
try {
|
|
7601
7710
|
const tokenEndpointResponse = await authorizationCodeGrant(configuration, url, {
|
|
7602
7711
|
pkceCodeVerifier: options.codeVerifier
|
|
@@ -7607,16 +7716,23 @@ _jwks = new WeakMap, _Class8_brand = new WeakSet, class AuthClient {
|
|
|
7607
7716
|
}
|
|
7608
7717
|
}
|
|
7609
7718
|
async getTokenByRefreshToken(options) {
|
|
7610
|
-
const {configuration: configuration} = await _assertClassBrand(
|
|
7719
|
+
const {configuration: configuration} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7720
|
+
const additionalParameters = new URLSearchParams;
|
|
7721
|
+
if (options.audience) {
|
|
7722
|
+
additionalParameters.append("audience", options.audience);
|
|
7723
|
+
}
|
|
7724
|
+
if (options.scope) {
|
|
7725
|
+
additionalParameters.append("scope", options.scope);
|
|
7726
|
+
}
|
|
7611
7727
|
try {
|
|
7612
|
-
const tokenEndpointResponse = await refreshTokenGrant(configuration, options.refreshToken);
|
|
7728
|
+
const tokenEndpointResponse = await refreshTokenGrant(configuration, options.refreshToken, additionalParameters);
|
|
7613
7729
|
return TokenResponse.fromTokenEndpointResponse(tokenEndpointResponse);
|
|
7614
7730
|
} catch (e) {
|
|
7615
7731
|
throw new TokenByRefreshTokenError("The access token has expired and there was an error while trying to refresh it.", e);
|
|
7616
7732
|
}
|
|
7617
7733
|
}
|
|
7618
7734
|
async getTokenByClientCredentials(options) {
|
|
7619
|
-
const {configuration: configuration} = await _assertClassBrand(
|
|
7735
|
+
const {configuration: configuration} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7620
7736
|
try {
|
|
7621
7737
|
const params = new URLSearchParams({
|
|
7622
7738
|
audience: options.audience
|
|
@@ -7631,7 +7747,7 @@ _jwks = new WeakMap, _Class8_brand = new WeakSet, class AuthClient {
|
|
|
7631
7747
|
}
|
|
7632
7748
|
}
|
|
7633
7749
|
async buildLogoutUrl(options) {
|
|
7634
|
-
const {configuration: configuration, serverMetadata: serverMetadata} = await _assertClassBrand(
|
|
7750
|
+
const {configuration: configuration, serverMetadata: serverMetadata} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7635
7751
|
if (!serverMetadata.end_session_endpoint) {
|
|
7636
7752
|
const url = new URL("https://".concat(_classPrivateFieldGet2(_options, this).domain, "/v2/logout"));
|
|
7637
7753
|
url.searchParams.set("returnTo", options.returnTo);
|
|
@@ -7643,9 +7759,13 @@ _jwks = new WeakMap, _Class8_brand = new WeakSet, class AuthClient {
|
|
|
7643
7759
|
});
|
|
7644
7760
|
}
|
|
7645
7761
|
async verifyLogoutToken(options) {
|
|
7646
|
-
const {serverMetadata: serverMetadata} = await _assertClassBrand(
|
|
7647
|
-
|
|
7648
|
-
|
|
7762
|
+
const {serverMetadata: serverMetadata} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7763
|
+
const cacheConfig = resolveCacheConfig(_classPrivateFieldGet2(_options, this).discoveryCache);
|
|
7764
|
+
const jwksUri = serverMetadata.jwks_uri;
|
|
7765
|
+
_classPrivateFieldGet2(_jwks, this) || _classPrivateFieldSet2(_jwks, this, createRemoteJWKSet(new URL(jwksUri), {
|
|
7766
|
+
cacheMaxAge: cacheConfig.ttlMs,
|
|
7767
|
+
[customFetch]: _classPrivateFieldGet2(_customFetch2, this),
|
|
7768
|
+
[jwksCache]: _classPrivateFieldGet2(_jwksCache, this)
|
|
7649
7769
|
}));
|
|
7650
7770
|
const {payload: payload} = await jwtVerify(options.logoutToken, _classPrivateFieldGet2(_jwks, this), {
|
|
7651
7771
|
issuer: serverMetadata.issuer,
|
|
@@ -7684,6 +7804,18 @@ _jwks = new WeakMap, _Class8_brand = new WeakSet, class AuthClient {
|
|
|
7684
7804
|
}
|
|
7685
7805
|
});
|
|
7686
7806
|
|
|
7807
|
+
function _getDiscoveryCacheKey() {
|
|
7808
|
+
const domain = _classPrivateFieldGet2(_options, this).domain.toLowerCase();
|
|
7809
|
+
return "".concat(domain, "|mtls:").concat(_classPrivateFieldGet2(_options, this).useMtls ? "1" : "0");
|
|
7810
|
+
}
|
|
7811
|
+
|
|
7812
|
+
async function _createConfiguration(serverMetadata) {
|
|
7813
|
+
const clientAuth = await _assertClassBrand(_Class9_brand, this, _getClientAuth).call(this);
|
|
7814
|
+
const configuration = new Configuration(serverMetadata, _classPrivateFieldGet2(_options, this).clientId, _classPrivateFieldGet2(_options, this).clientSecret, clientAuth);
|
|
7815
|
+
configuration[customFetch$1] = _classPrivateFieldGet2(_customFetch2, this);
|
|
7816
|
+
return configuration;
|
|
7817
|
+
}
|
|
7818
|
+
|
|
7687
7819
|
async function _discover() {
|
|
7688
7820
|
if (_classPrivateFieldGet2(_configuration, this) && _classPrivateFieldGet2(_serverMetadata, this)) {
|
|
7689
7821
|
return {
|
|
@@ -7691,14 +7823,58 @@ async function _discover() {
|
|
|
7691
7823
|
serverMetadata: _classPrivateFieldGet2(_serverMetadata, this)
|
|
7692
7824
|
};
|
|
7693
7825
|
}
|
|
7694
|
-
const
|
|
7695
|
-
|
|
7696
|
-
|
|
7697
|
-
|
|
7698
|
-
|
|
7699
|
-
|
|
7700
|
-
|
|
7701
|
-
|
|
7826
|
+
const cacheKey = _assertClassBrand(_Class9_brand, this, _getDiscoveryCacheKey).call(this);
|
|
7827
|
+
const cached = _classPrivateFieldGet2(_discoveryCache, this).get(cacheKey);
|
|
7828
|
+
if (cached) {
|
|
7829
|
+
_classPrivateFieldSet2(_serverMetadata, this, cached.serverMetadata);
|
|
7830
|
+
_classPrivateFieldSet2(_configuration, this, await _assertClassBrand(_Class9_brand, this, _createConfiguration).call(this, cached.serverMetadata));
|
|
7831
|
+
return {
|
|
7832
|
+
configuration: _classPrivateFieldGet2(_configuration, this),
|
|
7833
|
+
serverMetadata: _classPrivateFieldGet2(_serverMetadata, this)
|
|
7834
|
+
};
|
|
7835
|
+
}
|
|
7836
|
+
const inFlight = _classPrivateFieldGet2(_inFlightDiscovery, this).get(cacheKey);
|
|
7837
|
+
if (inFlight) {
|
|
7838
|
+
const entry = await inFlight;
|
|
7839
|
+
_classPrivateFieldSet2(_serverMetadata, this, entry.serverMetadata);
|
|
7840
|
+
_classPrivateFieldSet2(_configuration, this, await _assertClassBrand(_Class9_brand, this, _createConfiguration).call(this, entry.serverMetadata));
|
|
7841
|
+
return {
|
|
7842
|
+
configuration: _classPrivateFieldGet2(_configuration, this),
|
|
7843
|
+
serverMetadata: _classPrivateFieldGet2(_serverMetadata, this)
|
|
7844
|
+
};
|
|
7845
|
+
}
|
|
7846
|
+
const discoveryPromise = (async () => {
|
|
7847
|
+
const clientAuth = await _assertClassBrand(_Class9_brand, this, _getClientAuth).call(this);
|
|
7848
|
+
const configuration = await discovery(new URL("https://".concat(_classPrivateFieldGet2(_options, this).domain)), _classPrivateFieldGet2(_options, this).clientId, {
|
|
7849
|
+
use_mtls_endpoint_aliases: _classPrivateFieldGet2(_options, this).useMtls
|
|
7850
|
+
}, clientAuth, {
|
|
7851
|
+
[customFetch$1]: _classPrivateFieldGet2(_customFetch2, this)
|
|
7852
|
+
});
|
|
7853
|
+
const serverMetadata = configuration.serverMetadata();
|
|
7854
|
+
_classPrivateFieldGet2(_discoveryCache, this).set(cacheKey, {
|
|
7855
|
+
serverMetadata: serverMetadata
|
|
7856
|
+
});
|
|
7857
|
+
return {
|
|
7858
|
+
configuration: configuration,
|
|
7859
|
+
serverMetadata: serverMetadata
|
|
7860
|
+
};
|
|
7861
|
+
})();
|
|
7862
|
+
const inFlightEntry = discoveryPromise.then(_ref3 => {
|
|
7863
|
+
let {serverMetadata: serverMetadata} = _ref3;
|
|
7864
|
+
return {
|
|
7865
|
+
serverMetadata: serverMetadata
|
|
7866
|
+
};
|
|
7867
|
+
});
|
|
7868
|
+
void inFlightEntry.catch(() => void 0);
|
|
7869
|
+
_classPrivateFieldGet2(_inFlightDiscovery, this).set(cacheKey, inFlightEntry);
|
|
7870
|
+
try {
|
|
7871
|
+
const {configuration: configuration, serverMetadata: serverMetadata} = await discoveryPromise;
|
|
7872
|
+
_classPrivateFieldSet2(_configuration, this, configuration);
|
|
7873
|
+
_classPrivateFieldSet2(_serverMetadata, this, serverMetadata);
|
|
7874
|
+
_classPrivateFieldGet2(_configuration, this)[customFetch$1] = _classPrivateFieldGet2(_customFetch2, this);
|
|
7875
|
+
} finally {
|
|
7876
|
+
_classPrivateFieldGet2(_inFlightDiscovery, this).delete(cacheKey);
|
|
7877
|
+
}
|
|
7702
7878
|
return {
|
|
7703
7879
|
configuration: _classPrivateFieldGet2(_configuration, this),
|
|
7704
7880
|
serverMetadata: _classPrivateFieldGet2(_serverMetadata, this)
|
|
@@ -7707,7 +7883,7 @@ async function _discover() {
|
|
|
7707
7883
|
|
|
7708
7884
|
async function _exchangeTokenVaultToken(options) {
|
|
7709
7885
|
var _options$subjectToken, _options$requestedTok;
|
|
7710
|
-
const {configuration: configuration} = await _assertClassBrand(
|
|
7886
|
+
const {configuration: configuration} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7711
7887
|
if ("audience" in options || "resource" in options) {
|
|
7712
7888
|
throw new TokenExchangeError("audience and resource parameters are not supported for Token Vault exchanges");
|
|
7713
7889
|
}
|
|
@@ -7734,7 +7910,7 @@ async function _exchangeTokenVaultToken(options) {
|
|
|
7734
7910
|
}
|
|
7735
7911
|
|
|
7736
7912
|
async function _exchangeProfileToken(options) {
|
|
7737
|
-
const {configuration: configuration} = await _assertClassBrand(
|
|
7913
|
+
const {configuration: configuration} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7738
7914
|
validateSubjectToken(options.subjectToken);
|
|
7739
7915
|
const tokenRequestParams = new URLSearchParams({
|
|
7740
7916
|
subject_token_type: options.subjectTokenType,
|
|
@@ -7762,21 +7938,29 @@ async function _exchangeProfileToken(options) {
|
|
|
7762
7938
|
}
|
|
7763
7939
|
|
|
7764
7940
|
async function _getClientAuth() {
|
|
7765
|
-
if (!_classPrivateFieldGet2(
|
|
7766
|
-
|
|
7767
|
-
|
|
7768
|
-
|
|
7769
|
-
|
|
7770
|
-
|
|
7771
|
-
|
|
7772
|
-
|
|
7773
|
-
|
|
7941
|
+
if (!_classPrivateFieldGet2(_clientAuthPromise, this)) {
|
|
7942
|
+
_classPrivateFieldSet2(_clientAuthPromise, this, (async () => {
|
|
7943
|
+
if (!_classPrivateFieldGet2(_options, this).clientSecret && !_classPrivateFieldGet2(_options, this).clientAssertionSigningKey && !_classPrivateFieldGet2(_options, this).useMtls) {
|
|
7944
|
+
throw new MissingClientAuthError;
|
|
7945
|
+
}
|
|
7946
|
+
if (_classPrivateFieldGet2(_options, this).useMtls) {
|
|
7947
|
+
return TlsClientAuth();
|
|
7948
|
+
}
|
|
7949
|
+
let clientPrivateKey = _classPrivateFieldGet2(_options, this).clientAssertionSigningKey;
|
|
7950
|
+
if (clientPrivateKey && !(clientPrivateKey instanceof CryptoKey)) {
|
|
7951
|
+
clientPrivateKey = await importPKCS8(clientPrivateKey, _classPrivateFieldGet2(_options, this).clientAssertionSigningAlg || "RS256");
|
|
7952
|
+
}
|
|
7953
|
+
return clientPrivateKey ? PrivateKeyJwt(clientPrivateKey) : ClientSecretPost(_classPrivateFieldGet2(_options, this).clientSecret);
|
|
7954
|
+
})().catch(error => {
|
|
7955
|
+
_classPrivateFieldSet2(_clientAuthPromise, this, void 0);
|
|
7956
|
+
throw error;
|
|
7957
|
+
}));
|
|
7774
7958
|
}
|
|
7775
|
-
return
|
|
7959
|
+
return _classPrivateFieldGet2(_clientAuthPromise, this);
|
|
7776
7960
|
}
|
|
7777
7961
|
|
|
7778
7962
|
async function _buildAuthorizationUrl(options) {
|
|
7779
|
-
const {configuration: configuration} = await _assertClassBrand(
|
|
7963
|
+
const {configuration: configuration} = await _assertClassBrand(_Class9_brand, this, _discover).call(this);
|
|
7780
7964
|
const codeChallengeMethod = "S256";
|
|
7781
7965
|
const codeVerifier = randomPKCECodeVerifier();
|
|
7782
7966
|
const codeChallenge = await calculatePKCECodeChallenge(codeVerifier);
|
|
@@ -7901,15 +8085,15 @@ class MfaApiClient {
|
|
|
7901
8085
|
if (!((_a = context === null || context === void 0 ? void 0 : context.mfaRequirements) === null || _a === void 0 ? void 0 : _a.challenge) || context.mfaRequirements.challenge.length === 0) {
|
|
7902
8086
|
throw new MfaListAuthenticatorsError("invalid_request", "challengeType is required and must contain at least one challenge type, please check mfa_required error payload");
|
|
7903
8087
|
}
|
|
7904
|
-
const challengeTypes = context.mfaRequirements.challenge.map(
|
|
8088
|
+
const challengeTypes = context.mfaRequirements.challenge.map(c => c.type);
|
|
7905
8089
|
try {
|
|
7906
8090
|
const allAuthenticators = await this.authJsMfaClient.listAuthenticators({
|
|
7907
8091
|
mfaToken: mfaToken
|
|
7908
8092
|
});
|
|
7909
|
-
return allAuthenticators.filter(
|
|
8093
|
+
return allAuthenticators.filter(auth => {
|
|
7910
8094
|
if (!auth.type) return false;
|
|
7911
8095
|
return challengeTypes.includes(auth.type);
|
|
7912
|
-
})
|
|
8096
|
+
});
|
|
7913
8097
|
} catch (error) {
|
|
7914
8098
|
if (error instanceof MfaListAuthenticatorsError$1) {
|
|
7915
8099
|
throw new MfaListAuthenticatorsError((_b = error.cause) === null || _b === void 0 ? void 0 : _b.error, error.message);
|
|
@@ -8100,6 +8284,31 @@ class Auth0Client {
|
|
|
8100
8284
|
});
|
|
8101
8285
|
}
|
|
8102
8286
|
}
|
|
8287
|
+
_extractSessionTransferToken(paramName) {
|
|
8288
|
+
const params = new URLSearchParams(window.location.search);
|
|
8289
|
+
return params.get(paramName) || undefined;
|
|
8290
|
+
}
|
|
8291
|
+
_clearSessionTransferTokenFromUrl(paramName) {
|
|
8292
|
+
try {
|
|
8293
|
+
const url = new URL(window.location.href);
|
|
8294
|
+
if (url.searchParams.has(paramName)) {
|
|
8295
|
+
url.searchParams.delete(paramName);
|
|
8296
|
+
window.history.replaceState({}, "", url.toString());
|
|
8297
|
+
}
|
|
8298
|
+
} catch (_a) {}
|
|
8299
|
+
}
|
|
8300
|
+
_applySessionTransferToken(authorizationParams) {
|
|
8301
|
+
const paramName = this.options.sessionTransferTokenQueryParamName;
|
|
8302
|
+
if (!paramName || authorizationParams.session_transfer_token) {
|
|
8303
|
+
return authorizationParams;
|
|
8304
|
+
}
|
|
8305
|
+
const token = this._extractSessionTransferToken(paramName);
|
|
8306
|
+
if (!token) return authorizationParams;
|
|
8307
|
+
this._clearSessionTransferTokenFromUrl(paramName);
|
|
8308
|
+
return Object.assign(Object.assign({}, authorizationParams), {
|
|
8309
|
+
session_transfer_token: token
|
|
8310
|
+
});
|
|
8311
|
+
}
|
|
8103
8312
|
async _prepareAuthorizeUrl(authorizationParams, authorizeOptions, fallbackRedirectUri) {
|
|
8104
8313
|
var _a;
|
|
8105
8314
|
const state = encode$2(createRandomString());
|
|
@@ -8130,7 +8339,8 @@ class Auth0Client {
|
|
|
8130
8339
|
throw new PopupOpenError;
|
|
8131
8340
|
}
|
|
8132
8341
|
}
|
|
8133
|
-
const
|
|
8342
|
+
const authorizationParams = this._applySessionTransferToken(options.authorizationParams || {});
|
|
8343
|
+
const params = await this._prepareAuthorizeUrl(authorizationParams, {
|
|
8134
8344
|
response_mode: "web_message"
|
|
8135
8345
|
}, window.location.origin);
|
|
8136
8346
|
config.popup.location.href = params.url;
|
|
@@ -8168,7 +8378,8 @@ class Auth0Client {
|
|
|
8168
8378
|
var _a;
|
|
8169
8379
|
const _b = patchOpenUrlWithOnRedirect(options), {openUrl: openUrl, fragment: fragment, appState: appState} = _b, urlOptions = __rest(_b, [ "openUrl", "fragment", "appState" ]);
|
|
8170
8380
|
const organization = ((_a = urlOptions.authorizationParams) === null || _a === void 0 ? void 0 : _a.organization) || this.options.authorizationParams.organization;
|
|
8171
|
-
const
|
|
8381
|
+
const authorizationParams = this._applySessionTransferToken(urlOptions.authorizationParams || {});
|
|
8382
|
+
const _c = await this._prepareAuthorizeUrl(authorizationParams), {url: url} = _c, transaction = __rest(_c, [ "url" ]);
|
|
8172
8383
|
this.transactionManager.create(Object.assign(Object.assign(Object.assign({}, transaction), {
|
|
8173
8384
|
appState: appState,
|
|
8174
8385
|
response_type: exports.ResponseType.Code
|
|
@@ -8275,7 +8486,7 @@ class Auth0Client {
|
|
|
8275
8486
|
scope: scopesToRequest(this.scope, (_a = options.authorizationParams) === null || _a === void 0 ? void 0 : _a.scope, ((_b = options.authorizationParams) === null || _b === void 0 ? void 0 : _b.audience) || this.options.authorizationParams.audience)
|
|
8276
8487
|
})
|
|
8277
8488
|
});
|
|
8278
|
-
const result = await singlePromise((
|
|
8489
|
+
const result = await singlePromise(() => this._getTokenSilently(localOptions), "".concat(this.options.clientId, "::").concat(localOptions.authorizationParams.audience, "::").concat(localOptions.authorizationParams.scope));
|
|
8279
8490
|
return options.detailedResponse ? result : result === null || result === void 0 ? void 0 : result.access_token;
|
|
8280
8491
|
}
|
|
8281
8492
|
async _getTokenSilently(options) {
|
|
@@ -8296,7 +8507,7 @@ class Auth0Client {
|
|
|
8296
8507
|
}
|
|
8297
8508
|
const lockKey = buildGetTokenSilentlyLockKey(this.options.clientId, getTokenOptions.authorizationParams.audience || "default");
|
|
8298
8509
|
try {
|
|
8299
|
-
return await this.lockManager.runWithLock(lockKey, 5e3,
|
|
8510
|
+
return await this.lockManager.runWithLock(lockKey, 5e3, async () => {
|
|
8300
8511
|
if (cacheMode !== "off") {
|
|
8301
8512
|
const entry = await this._getEntryFromCache({
|
|
8302
8513
|
scope: getTokenOptions.authorizationParams.scope,
|
|
@@ -8318,7 +8529,7 @@ class Auth0Client {
|
|
|
8318
8529
|
} : null), {
|
|
8319
8530
|
expires_in: expires_in
|
|
8320
8531
|
});
|
|
8321
|
-
})
|
|
8532
|
+
});
|
|
8322
8533
|
} catch (error) {
|
|
8323
8534
|
if (this._isInteractiveError(error) && this.options.interactiveErrorHandler === "popup") {
|
|
8324
8535
|
return await this._handleInteractiveErrorWithPopup(getTokenOptions);
|
|
@@ -8412,7 +8623,7 @@ class Auth0Client {
|
|
|
8412
8623
|
async _getTokenFromIFrame(options) {
|
|
8413
8624
|
const iframeLockKey = buildIframeLockKey(this.options.clientId);
|
|
8414
8625
|
try {
|
|
8415
|
-
return await this.lockManager.runWithLock(iframeLockKey, 5e3,
|
|
8626
|
+
return await this.lockManager.runWithLock(iframeLockKey, 5e3, async () => {
|
|
8416
8627
|
const params = Object.assign(Object.assign({}, options.authorizationParams), {
|
|
8417
8628
|
prompt: "none"
|
|
8418
8629
|
});
|
|
@@ -8452,7 +8663,7 @@ class Auth0Client {
|
|
|
8452
8663
|
oauthTokenScope: tokenResult.scope,
|
|
8453
8664
|
audience: audience
|
|
8454
8665
|
});
|
|
8455
|
-
})
|
|
8666
|
+
});
|
|
8456
8667
|
} catch (e) {
|
|
8457
8668
|
if (e.error === "login_required") {
|
|
8458
8669
|
const shouldSkipLogoutForMfaStepUp = e instanceof GenericError && this._isIframeMfaError(e) && this.options.interactiveErrorHandler === "popup";
|