From 037f37b9b7aee9ed86f924d7b835505f175cfdee Mon Sep 17 00:00:00 2001 From: "Ismail H. Ayaz" Date: Fri, 17 Jan 2025 17:18:27 +0300 Subject: [PATCH] chore: migrate from eslint to biome --- .babelrc | 4 +- .eslintignore | 8 - .eslintrc.js | 127 - .release-it.js | 24 +- api-extractor.json | 17 +- biome.json | 146 + dist/oidc-client.esm.js | 750 +-- dist/oidc-client.esm.js.map | 2 +- dist/oidc-client.min.js | 2 +- dist/oidc-client.min.js.map | 2 +- dist/types.d.ts | 18 +- docs/assets/hierarchy.js | 1 + docs/assets/icons.js | 18 + docs/assets/icons.svg | 1 + docs/assets/main.js | 10 +- docs/assets/navigation.js | 1 + docs/assets/search.js | 2 +- docs/assets/style.css | 2672 ++++++----- docs/classes/AuthenticationError.html | 16 +- docs/classes/EventEmitter.html | 4 +- docs/classes/InMemoryStateStore.html | 4 +- docs/classes/InteractionCancelled.html | 16 +- docs/classes/InvalidIdTokenError.html | 16 +- docs/classes/InvalidJWTError.html | 16 +- docs/classes/LocalStorageStateStore.html | 4 +- docs/classes/OIDCClient.html | 70 +- docs/classes/OIDCClientError.html | 16 +- docs/classes/StateNotFound.html | 15 + docs/classes/StateStore.html | 4 +- docs/functions/default.html | 4 +- docs/hierarchy.html | 1 + docs/index.html | 35 +- docs/interfaces/AuthRequestOptions.html | 6 +- docs/interfaces/IEndpointConfiguration.html | 4 +- docs/interfaces/IFrameOptions.html | 8 +- docs/interfaces/IPlusAuthClientOptions.html | 72 +- docs/interfaces/JWTValidationOptions.html | 8 +- docs/interfaces/LogoutRequestOptions.html | 6 +- docs/interfaces/ParsedJWT.html | 4 +- docs/interfaces/PopupOptions.html | 8 +- docs/interfaces/RevokeOptions.html | 4 +- docs/interfaces/SessionCheckerOptions.html | 6 +- docs/interfaces/SessionMonitorOptions.html | 4 +- docs/interfaces/TokenRequestOption.html | 8 +- docs/interfaces/TokenResponse.html | 4 +- docs/variables/Events.html | 2 +- examples/vue/babel.config.js | 4 +- examples/vue/package.json | 15 +- examples/vue/src/App.vue | 12 +- examples/vue/src/assets/main.css | 3 +- examples/vue/src/auth.js | 12 +- examples/vue/src/main.js | 26 +- examples/vue/src/router.js | 82 +- examples/vue/src/silent-renew.js | 4 +- examples/vue/src/views/Home.vue | 5 +- examples/vue/vue.config.js | 20 +- examples/vue3/package-lock.json | 1481 ++++-- examples/vue3/package.json | 8 +- examples/vue3/src/App.vue | 14 +- examples/vue3/src/auth.js | 23 +- examples/vue3/src/main.js | 21 +- examples/vue3/src/router.js | 88 +- examples/vue3/src/silent-renew.js | 4 +- examples/vue3/src/views/AuthCallback.vue | 6 +- examples/vue3/src/views/Home.vue | 5 +- examples/vue3/vite.config.js | 8 +- jest.config.js | 23 +- package.json | 75 +- pnpm-lock.yaml | 4558 +++++++------------ rollup.config.mjs | 64 +- src/client.ts | 869 ++-- src/constants/events.ts | 19 +- src/constants/index.ts | 2 +- src/errors.ts | 52 +- src/helpers/event_emitter.ts | 72 +- src/helpers/index.ts | 4 +- src/helpers/state_manager/in_memory.ts | 33 +- src/helpers/state_manager/index.ts | 6 +- src/helpers/state_manager/local_storage.ts | 75 +- src/helpers/state_manager/state_store.ts | 14 +- src/helpers/timer.ts | 44 +- src/index.ts | 18 +- src/interfaces/index.ts | 251 +- src/utils/check_session_iframe.ts | 70 +- src/utils/iframe.ts | 97 +- src/utils/index.ts | 10 +- src/utils/jose.ts | 266 +- src/utils/object.ts | 34 +- src/utils/oidc.ts | 8 +- src/utils/popup.ts | 80 +- src/utils/request.ts | 46 +- src/utils/tab_utils.ts | 89 +- src/utils/url.ts | 63 +- test/client.spec.ts | 1361 +++--- test/create_oidc_client.spec.ts | 16 +- test/external_client.spec.ts | 19 +- test/helpers/evet_emitter.spec.ts | 261 +- test/helpers/state_manager.spec.ts | 168 +- test/helpers/timer.spec.ts | 95 +- test/setup.tsx | 14 +- test/utils/check_sesion_iframe.spec.ts | 15 +- test/utils/iframe.spec.ts | 200 +- test/utils/jose.spec.ts | 537 ++- test/utils/popup.spec.ts | 192 +- test/utils/request.spec.ts | 103 +- test/utils/url.spec.ts | 101 +- tsconfig-doc.json | 6 +- tsconfig.json | 4 +- 108 files changed, 7821 insertions(+), 8224 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.js create mode 100644 biome.json create mode 100644 docs/assets/hierarchy.js create mode 100644 docs/assets/icons.js create mode 100644 docs/assets/icons.svg create mode 100644 docs/assets/navigation.js create mode 100644 docs/classes/StateNotFound.html create mode 100644 docs/hierarchy.html diff --git a/.babelrc b/.babelrc index ece1d87..344d6d6 100644 --- a/.babelrc +++ b/.babelrc @@ -1,5 +1,3 @@ { - "presets": [ - ["@babel/preset-env"] - ] + "presets": [["@babel/preset-env"]] } diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 4a1f2cf..0000000 --- a/.eslintignore +++ /dev/null @@ -1,8 +0,0 @@ -*.html -dist -docs -types -\.* -*\.config\.* -test -examples/**/** diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 9d4707d..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,127 +0,0 @@ -module.exports = { - root: true, - env: { - es6: true, - browser: true, - node: true - }, - parser: "@typescript-eslint/parser", - parserOptions: { - parser: "@typescript-eslint/parser", - project: "./tsconfig.json", - sourceType: "module", - }, - extends: [ - "plugin:@typescript-eslint/recommended", - "plugin:import/errors", - "plugin:import/warnings", - "plugin:import/typescript", - ], - plugins: [ - "@typescript-eslint", - "typescript-sort-keys" - ], - rules: { - "@typescript-eslint/ban-ts-ignore": "off", - "@typescript-eslint/ban-ts-comment": "off", - "@typescript-eslint/consistent-type-imports": [ - "error", - { - "prefer": "type-imports", - "disallowTypeAnnotations": false - } - ], - "@typescript-eslint/indent": [ "error", 2, { - "ArrayExpression": "first", - "FunctionDeclaration": { - "parameters": "first" - }, - "ImportDeclaration": 1, - "ObjectExpression": 1, - "SwitchCase": 1, - "VariableDeclarator": "first" - }], - "@typescript-eslint/member-ordering": ["error"], - "@typescript-eslint/interface-name-prefix": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-extra-parens": ["error"], - "@typescript-eslint/prefer-string-starts-ends-with": "error", - "@typescript-eslint/type-annotation-spacing": "error", - "array-bracket-spacing": "error", - "comma-spacing": [2, {"before": false, "after": true}], - "computed-property-spacing": ["error", "never", { "enforceForClassMembers": true }], - "import/first": "error", - "import/no-useless-path-segments": [ - "error", - { - "noUselessIndex": true - } - ], - "import/order": [ - "error", - { - "newlines-between": "always-and-inside-groups", - "alphabetize": { - "order": "asc", - "caseInsensitive": true - }, - "pathGroups": [ - { - "pattern": "~/**", - "group": "external" - } - ] - } - ], - "indent": "off", - "key-spacing": ["error", { "align": "value" }], - "keyword-spacing": ["error"], - "linebreak-style": [ - "error", - "unix" - ], - "lines-between-class-members": ["error", "always"], - "max-len": [ - "error", - { - "code": 120, - "ignoreComments": true - } - ], - "no-debugger": "error", - "no-extra-parens": "off", - "no-mixed-spaces-and-tabs": "error", - "no-multi-spaces":["error", { exceptions: { "VariableDeclarator": true } }], - "no-var": "error", - "no-whitespace-before-property": "error", - "object-curly-spacing": [ - "error", - "always", - { - "arraysInObjects": true, - "objectsInObjects": true - } - ], - "padded-blocks": ["error", "never"], - "prefer-template": "error", - "quotes": [ - "error", - "single", - { - "avoidEscape": true - } - ], - "space-before-function-paren": [ - "error", - { - "anonymous": "always", - "asyncArrow": "always", - "named": "never" - } - ], - "space-in-parens": ["error", "always"], - "template-curly-spacing": ["error", "always"], - "typescript-sort-keys/interface": "error", - "typescript-sort-keys/string-enum": "error" - } -}; diff --git a/.release-it.js b/.release-it.js index bce5001..014563a 100644 --- a/.release-it.js +++ b/.release-it.js @@ -1,23 +1,23 @@ module.exports = { - hooks:{ + hooks: { "before:init": ["npm run lint", "npm test"], "after:bump": ["npm run docs", "npm run build"], }, git: { - "commitMessage": "chore: release v${version}", - "requireCleanWorkingDir": true, - "tagAnnotation": "Release v${version}", - "tagName": "v${version}" + commitMessage: "chore: release v${version}", + requireCleanWorkingDir: true, + tagAnnotation: "Release v${version}", + tagName: "v${version}", }, github: { - "release": true, - "draft": true, - "releaseName": "v${version}" + release: true, + draft: true, + releaseName: "v${version}", }, plugins: { "@release-it/conventional-changelog": { - "preset": "angular", - "infile": "CHANGELOG.md" - } - } + preset: "angular", + infile: "CHANGELOG.md", + }, + }, } diff --git a/api-extractor.json b/api-extractor.json index 8157b7c..e5006d0 100644 --- a/api-extractor.json +++ b/api-extractor.json @@ -1,38 +1,33 @@ { "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", "mainEntryPointFilePath": "/types/index.d.ts", - "bundledPackages": [ ], - "compiler": { - }, + "bundledPackages": [], + "compiler": {}, "newlineKind": "lf", "apiReport": { "enabled": false, - // "reportFileName": ".api.md", "reportFolder": "/docs/" }, "docModel": { "enabled": true - // "apiJsonFilePath": "/temp/.api.json" }, "dtsRollup": { "enabled": true, - untrimmedFilePath: "/dist/plusauth-web.d.ts", - publicTrimmedFilePath: "/dist/plusauth-web.d.ts" + "untrimmedFilePath": "/dist/plusauth-web.d.ts", + "publicTrimmedFilePath": "/dist/plusauth-web.d.ts" }, "tsdocMetadata": { - enabled: false + "enabled": false }, "messages": { "compilerMessageReporting": { "default": { "logLevel": "warning" - // "addToApiReportFile": false } }, "extractorMessageReporting": { "default": { "logLevel": "warning" - // "addToApiReportFile": false }, "ae-missing-release-tag": { "logLevel": "none" @@ -41,9 +36,7 @@ "tsdocMessageReporting": { "default": { "logLevel": "warning" - // "addToApiReportFile": false } } } - } diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..7727be3 --- /dev/null +++ b/biome.json @@ -0,0 +1,146 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": true, + "defaultBranch": "main", + "useIgnoreFile": true, + "clientKind": "git" + }, + "files": { + "ignoreUnknown": true, + "ignore": [ + ".nx/", + "node_modules", + "**/*/node_modules", + "dist/", + "docs/", + "**/*/dist", + "*.timestamp-*", + "components.d.ts" + ] + }, + "organizeImports": { + "enabled": true + }, + "javascript": { + "formatter": { + "arrowParentheses": "always", + "bracketSameLine": false, + "bracketSpacing": true, + "jsxQuoteStyle": "double", + "quoteProperties": "asNeeded", + "semicolons": "asNeeded", + "trailingCommas": "all" + } + }, + "formatter": { + "enabled": true, + "formatWithErrors": false, + "attributePosition": "multiline", + "indentStyle": "space", + "indentWidth": 2, + "lineWidth": 100, + "lineEnding": "lf" + }, + "linter": { + "enabled": true, + "ignore": ["*.d.ts"], + "rules": { + "a11y": { + "useKeyWithClickEvents": "off" + }, + "recommended": true, + "performance": { + "noDelete": "off" + }, + "correctness": { + "noUnknownFunction": { + "level": "off" + }, + "noUnusedImports": { + "level": "error" + }, + "noSwitchDeclarations": { + "level": "error", + "fix": "safe" + } + }, + "complexity": { + "noBannedTypes": "off", + "noForEach": "off", + "useOptionalChain": { + "level": "error", + "fix": "safe" + }, + "useLiteralKeys": { + "level": "info" + } + }, + "style": { + "noArguments": "off", + "noNonNullAssertion": "off", + "noParameterAssign": "off", + "noUnusedTemplateLiteral": "off", + "noUselessElse": { + "level": "error", + "fix": "safe" + }, + "useImportType": "error", + "useSingleVarDeclarator": { + "level": "error", + "fix": "safe" + }, + "useNodejsImportProtocol": { + "level": "error", + "fix": "safe" + }, + "useTemplate": { + "level": "error", + "fix": "safe" + } + }, + "suspicious": { + "noAsyncPromiseExecutor": "off", + "noPrototypeBuiltins": "off", + "noAssignInExpressions": "off", + "noExplicitAny": "off", + "noConfusingVoidType": "off", + "noGlobalIsFinite": { + "level": "error", + "fix": "safe" + }, + "noGlobalIsNan": { + "level": "error", + "fix": "safe" + }, + "noImplicitAnyLet": "off" + } + } + }, + "overrides": [ + { + "include": ["test"], + "linter": { + "rules": { + "suspicious": { + "noImportAssign": "off" + } + } + } + }, + { + "include": ["*.vue"], + "linter": { + "rules": { + "style": { + "useImportType": "off", + "useConst": "off" + }, + "correctness": { + "noUnusedImports": "off" + } + } + } + } + ] +} diff --git a/dist/oidc-client.esm.js b/dist/oidc-client.esm.js index 05e9295..34f045d 100644 --- a/dist/oidc-client.esm.js +++ b/dist/oidc-client.esm.js @@ -1,15 +1,15 @@ /*! * @plusauth/oidc-client-js v1.4.2 * https://github.com/PlusAuth/oidc-client-js - * (c) 2024 @plusauth/oidc-client-js Contributors + * (c) 2025 @plusauth/oidc-client-js Contributors * Released under the MIT License */ /* eslint-disable @typescript-eslint/indent */ const Events = { - USER_LOGOUT: 'user_logout', - USER_LOGIN: 'user_login', - SILENT_RENEW_SUCCESS: 'silent_renew_success', - SILENT_RENEW_ERROR: 'silent_renew_error', - SESSION_CHANGE: 'session_change' + USER_LOGOUT: "user_logout", + USER_LOGIN: "user_login", + SILENT_RENEW_SUCCESS: "silent_renew_success", + SILENT_RENEW_ERROR: "silent_renew_error", + SESSION_CHANGE: "session_change" }; function _define_property$6(obj, key, value) { @@ -27,49 +27,44 @@ function _define_property$6(obj, key, value) { } class OIDCClientError extends Error { constructor(error, error_description){ - super(`${error}${error_description && ` - ${error_description}` || ''}`); - _define_property$6(this, "error", void 0); - _define_property$6(this, "error_description", void 0); - this.name = 'OIDCClientError'; + super(`${error}${error_description && ` - ${error_description}` || ""}`), _define_property$6(this, "error", undefined), _define_property$6(this, "error_description", undefined); + this.name = "OIDCClientError"; this.error = error; this.error_description = error_description; } } class AuthenticationError extends OIDCClientError { constructor(error, error_description, state, error_uri){ - super(error, error_description); - _define_property$6(this, "state", void 0); - _define_property$6(this, "error_uri", void 0); - this.name = 'AuthenticationError'; + super(error, error_description), _define_property$6(this, "state", undefined), _define_property$6(this, "error_uri", undefined); + this.name = "AuthenticationError"; this.state = state; this.error_uri = error_uri; } } class StateNotFound extends AuthenticationError { constructor(error, state){ - super(error); - _define_property$6(this, "state", void 0); - this.name = 'StateNotFound'; + super(error), _define_property$6(this, "state", undefined); + this.name = "StateNotFound"; this.state = state; } } class InvalidJWTError extends OIDCClientError { constructor(details){ super(details); - this.name = 'InvalidJWTError'; + this.name = "InvalidJWTError"; this.error_description = details; } } class InvalidIdTokenError extends InvalidJWTError { constructor(details){ super(details); - this.name = 'InvalidIdTokenError'; + this.name = "InvalidIdTokenError"; } } class InteractionCancelled extends OIDCClientError { constructor(details){ super(details); - this.name = 'InteractionCancelled'; + this.name = "InteractionCancelled"; } } @@ -86,10 +81,10 @@ function _define_property$5(obj, key, value) { } return obj; } -// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging +// biome-ignore lint/suspicious/noUnsafeDeclarationMerging: class StateStore { - constructor(prefix = ''){ - _define_property$5(this, "prefix", void 0); + constructor(prefix = ""){ + _define_property$5(this, "prefix", undefined); this.prefix = prefix; } } @@ -124,7 +119,7 @@ class LocalStorageStateStore extends StateStore { for(i = 0; i < window.localStorage.length; i++){ const key = window.localStorage.key(i); // items only created by oidc client - if ((key === null || key === void 0 ? void 0 : key.substring(0, this.prefix.length)) == this.prefix) { + if ((key === null || key === undefined ? undefined : key.substring(0, this.prefix.length)) === this.prefix) { storedKeys.push(key); } } @@ -143,7 +138,7 @@ class LocalStorageStateStore extends StateStore { resolve(); }); } - constructor(prefix = 'pa_oidc.'){ + constructor(prefix = "pa_oidc."){ super(prefix); } } @@ -170,9 +165,8 @@ class InMemoryStateStore extends StateStore { } }); return Promise.resolve(); - } else { - return Promise.resolve(this.map.clear()); } + return Promise.resolve(this.map.clear()); } del(key) { this.map.delete(key); @@ -186,8 +180,7 @@ class InMemoryStateStore extends StateStore { return Promise.resolve(); } constructor(...args){ - super(...args); - _define_property$4(this, "map", new Map()); + super(...args), _define_property$4(this, "map", new Map()); } } @@ -257,7 +250,7 @@ class EventEmitter { return this; } constructor(){ - _define_property$3(this, "callbacks", void 0); + _define_property$3(this, "callbacks", undefined); this.callbacks = {}; } } @@ -305,22 +298,22 @@ class Timer { } } constructor(currentTimeInMillisFunc = ()=>Date.now()){ - _define_property$2(this, "now", void 0); - _define_property$2(this, "_timerHandle", void 0); - _define_property$2(this, "_expiration", void 0); + _define_property$2(this, "now", undefined); + _define_property$2(this, "_timerHandle", undefined); + _define_property$2(this, "_expiration", undefined); this.now = currentTimeInMillisFunc; } } function createHiddenFrame() { - const iframe = window.document.createElement('iframe'); - iframe.style.width = '0'; - iframe.style.height = '0'; - iframe.style.position = 'absolute'; - iframe.style.visibility = 'hidden'; - iframe.style.display = 'none'; - iframe.title = '__pa_helper__hidden'; - iframe.ariaHidden = 'true'; + const iframe = window.document.createElement("iframe"); + iframe.style.width = "0"; + iframe.style.height = "0"; + iframe.style.position = "absolute"; + iframe.style.visibility = "hidden"; + iframe.style.display = "none"; + iframe.title = "__pa_helper__hidden"; + iframe.ariaHidden = "true"; return iframe; } function runIframe(url, options) { @@ -328,12 +321,12 @@ function runIframe(url, options) { let onLoadTimeoutId = null; const iframe = createHiddenFrame(); const timeoutSetTimeoutId = setTimeout(()=>{ - reject(new OIDCClientError('Timed out')); + reject(new OIDCClientError("Timed out")); removeIframe(); }, (options.timeout || 10) * 1000); const iframeEventHandler = (e)=>{ - if (e.origin != options.eventOrigin) return; - if (!e.data || e.data.type !== 'authorization_response') return; + if (e.origin !== options.eventOrigin) return; + if (!e.data || e.data.type !== "authorization_response") return; const eventSource = e.source; if (eventSource) { eventSource.close(); @@ -350,96 +343,195 @@ function runIframe(url, options) { if (window.document.body.contains(iframe)) { window.document.body.removeChild(iframe); } - window.removeEventListener('message', iframeEventHandler, false); + window.removeEventListener("message", iframeEventHandler, false); }; const onLoadTimeout = ()=>setTimeout(()=>{ - reject(new OIDCClientError('Could not complete silent authentication', url)); + reject(new OIDCClientError("Could not complete silent authentication", url)); removeIframe(); }, 300); - window.addEventListener('message', iframeEventHandler, false); + window.addEventListener("message", iframeEventHandler, false); window.document.body.appendChild(iframe); - iframe.setAttribute('src', url); + iframe.setAttribute("src", url); /** * In case of wrong client id, wrong redirect_uri, in short when redirect did not happen * we assume flow failed. - */ iframe.onload = function() { + */ iframe.onload = ()=>{ onLoadTimeoutId = onLoadTimeout(); }; }); } -var fromByteArray_1 = fromByteArray; +var base64Js = {}; -var lookup = []; +var hasRequiredBase64Js; -var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; -for (var i = 0, len = code.length; i < len; ++i) { - lookup[i] = code[i]; -} +function requireBase64Js () { + if (hasRequiredBase64Js) return base64Js; + hasRequiredBase64Js = 1; -function tripletToBase64 (num) { - return lookup[num >> 18 & 0x3F] + - lookup[num >> 12 & 0x3F] + - lookup[num >> 6 & 0x3F] + - lookup[num & 0x3F] -} + base64Js.byteLength = byteLength; + base64Js.toByteArray = toByteArray; + base64Js.fromByteArray = fromByteArray; -function encodeChunk (uint8, start, end) { - var tmp; - var output = []; - for (var i = start; i < end; i += 3) { - tmp = - ((uint8[i] << 16) & 0xFF0000) + - ((uint8[i + 1] << 8) & 0xFF00) + - (uint8[i + 2] & 0xFF); - output.push(tripletToBase64(tmp)); - } - return output.join('') -} + var lookup = []; + var revLookup = []; + var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array; + + var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i]; + revLookup[code.charCodeAt(i)] = i; + } + + // Support decoding URL-safe base64 strings, as Node.js does. + // See: https://en.wikipedia.org/wiki/Base64#URL_applications + revLookup['-'.charCodeAt(0)] = 62; + revLookup['_'.charCodeAt(0)] = 63; + + function getLens (b64) { + var len = b64.length; + + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // Trim off extra bytes after placeholder bytes are found + // See: https://github.com/beatgammit/base64-js/issues/42 + var validLen = b64.indexOf('='); + if (validLen === -1) validLen = len; + + var placeHoldersLen = validLen === len + ? 0 + : 4 - (validLen % 4); + + return [validLen, placeHoldersLen] + } + + // base64 is 4/3 + up to two characters of the original data + function byteLength (b64) { + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen + } + + function _byteLength (b64, validLen, placeHoldersLen) { + return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen + } + + function toByteArray (b64) { + var tmp; + var lens = getLens(b64); + var validLen = lens[0]; + var placeHoldersLen = lens[1]; -function fromByteArray (uint8) { - var tmp; - var len = uint8.length; - var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes - var parts = []; - var maxChunkLength = 16383; // must be multiple of 3 + var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)); - // go through the array every three bytes, we'll deal with trailing stuff later - for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { - parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))); - } + var curByte = 0; - // pad the end with zeros, but make sure to not forget the extra bytes - if (extraBytes === 1) { - tmp = uint8[len - 1]; - parts.push( - lookup[tmp >> 2] + - lookup[(tmp << 4) & 0x3F] + - '==' - ); - } else if (extraBytes === 2) { - tmp = (uint8[len - 2] << 8) + uint8[len - 1]; - parts.push( - lookup[tmp >> 10] + - lookup[(tmp >> 4) & 0x3F] + - lookup[(tmp << 2) & 0x3F] + - '=' - ); - } + // if there are placeholders, only get up to the last complete 4 chars + var len = placeHoldersLen > 0 + ? validLen - 4 + : validLen; - return parts.join('') + var i; + for (i = 0; i < len; i += 4) { + tmp = + (revLookup[b64.charCodeAt(i)] << 18) | + (revLookup[b64.charCodeAt(i + 1)] << 12) | + (revLookup[b64.charCodeAt(i + 2)] << 6) | + revLookup[b64.charCodeAt(i + 3)]; + arr[curByte++] = (tmp >> 16) & 0xFF; + arr[curByte++] = (tmp >> 8) & 0xFF; + arr[curByte++] = tmp & 0xFF; + } + + if (placeHoldersLen === 2) { + tmp = + (revLookup[b64.charCodeAt(i)] << 2) | + (revLookup[b64.charCodeAt(i + 1)] >> 4); + arr[curByte++] = tmp & 0xFF; + } + + if (placeHoldersLen === 1) { + tmp = + (revLookup[b64.charCodeAt(i)] << 10) | + (revLookup[b64.charCodeAt(i + 1)] << 4) | + (revLookup[b64.charCodeAt(i + 2)] >> 2); + arr[curByte++] = (tmp >> 8) & 0xFF; + arr[curByte++] = tmp & 0xFF; + } + + return arr + } + + function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + + lookup[num >> 12 & 0x3F] + + lookup[num >> 6 & 0x3F] + + lookup[num & 0x3F] + } + + function encodeChunk (uint8, start, end) { + var tmp; + var output = []; + for (var i = start; i < end; i += 3) { + tmp = + ((uint8[i] << 16) & 0xFF0000) + + ((uint8[i + 1] << 8) & 0xFF00) + + (uint8[i + 2] & 0xFF); + output.push(tripletToBase64(tmp)); + } + return output.join('') + } + + function fromByteArray (uint8) { + var tmp; + var len = uint8.length; + var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes + var parts = []; + var maxChunkLength = 16383; // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))); + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1]; + parts.push( + lookup[tmp >> 2] + + lookup[(tmp << 4) & 0x3F] + + '==' + ); + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + uint8[len - 1]; + parts.push( + lookup[tmp >> 10] + + lookup[(tmp >> 4) & 0x3F] + + lookup[(tmp << 2) & 0x3F] + + '=' + ); + } + + return parts.join('') + } + return base64Js; } +var base64JsExports = requireBase64Js(); + function isValidIssuer(issuer) { try { const url = new URL(issuer); if (![ - 'http:', - 'https:' + "http:", + "https:" ].includes(url.protocol)) { return false; } - if (url.search !== '' || url.hash !== '') { + if (url.search !== "" || url.hash !== "") { return false; } return true; @@ -448,44 +540,44 @@ function isValidIssuer(issuer) { } } function buildEncodedQueryString(obj, appendable = true) { - if (!obj) return ''; + if (!obj) return ""; const ret = []; for(const d in obj){ if (obj.hasOwnProperty(d) && obj[d]) { - ret.push(`${encodeURIComponent(d)}=${encodeURIComponent(typeof obj[d] === 'object' ? JSON.stringify(obj[d]) : obj[d])}`); + ret.push(`${encodeURIComponent(d)}=${encodeURIComponent(typeof obj[d] === "object" ? JSON.stringify(obj[d]) : obj[d])}`); } } - return `${appendable ? '?' : ''}${ret.join('&')}`; + return `${appendable ? "?" : ""}${ret.join("&")}`; } function parseQueryUrl(value) { const result = {}; - value = value.trim().replace(/^(\?|#|&)/, ''); - const params = value.split('&'); + value = value.trim().replace(/^(\?|#|&)/, ""); + const params = value.split("&"); for(let i = 0; i < params.length; i += 1){ const paramAndValue = params[i]; - const parts = paramAndValue.split('='); + const parts = paramAndValue.split("="); const key = decodeURIComponent(parts.shift()); - const value = parts.length > 0 ? parts.join('=') : ''; + const value = parts.length > 0 ? parts.join("=") : ""; result[key] = decodeURIComponent(value); } return result; } function urlSafe(buffer) { - const encoded = fromByteArray_1(new Uint8Array(buffer)); - return encoded.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, ''); + const encoded = base64JsExports.fromByteArray(new Uint8Array(buffer)); + return encoded.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, ""); } function request(options) { let body = null; let headers = options.headers || {}; - if (options.method === 'POST') { + if (options.method === "POST") { headers = { - 'Content-Type': options.requestType === 'form' ? 'application/x-www-form-urlencoded;charset=UTF-8' : 'application/json;charset=UTF-8', + "Content-Type": options.requestType === "form" ? "application/x-www-form-urlencoded;charset=UTF-8" : "application/json;charset=UTF-8", ...headers }; } if (options.body) { - body = options.requestType === 'form' ? buildEncodedQueryString(options.body, false) : JSON.stringify(options.body); + body = options.requestType === "form" ? buildEncodedQueryString(options.body, false) : JSON.stringify(options.body); } return new Promise((resolve, reject)=>{ fetch(options.url, { @@ -496,10 +588,11 @@ function request(options) { }); } -const CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; +const CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; function getRandomBytes(n) { // @ts-ignore - const crypto1 = self.crypto || self.msCrypto, QUOTA = 65536; + const crypto1 = self.crypto || self.msCrypto; + const QUOTA = 65536; const a = new Uint8Array(n); for(let i = 0; i < n; i += QUOTA){ crypto1.getRandomValues(a.subarray(i, i + Math.min(n - i, QUOTA))); @@ -507,7 +600,7 @@ function getRandomBytes(n) { return a; } function generateRandom(length) { - let out = ''; + let out = ""; const charsLen = CHARSET.length; const maxByte = 256 - 256 % charsLen; while(length > 0){ @@ -527,34 +620,34 @@ function deriveChallenge(code) { return Promise.reject(new OIDCClientError(`Invalid code length: ${code.length}`)); } return new Promise((resolve, reject)=>{ - crypto.subtle.digest('SHA-256', new TextEncoder().encode(code)).then((buffer)=>{ + crypto.subtle.digest("SHA-256", new TextEncoder().encode(code)).then((buffer)=>{ return resolve(urlSafe(new Uint8Array(buffer))); - }, function(error) { + }, (error)=>{ /* istanbul ignore next */ return reject(error); }); }); } // https://datatracker.ietf.org/doc/html/rfc4648#section-5 -const urlDecodeB64 = (input)=>decodeURIComponent(atob(input.replace(/_/g, '/').replace(/-/g, '+')).split('').map((c)=>{ +const urlDecodeB64 = (input)=>decodeURIComponent(atob(input.replace(/_/g, "/").replace(/-/g, "+")).split("").map((c)=>{ return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`; - }).join('')); + }).join("")); function parseJwt(jwt) { try { - const parts = jwt.split('.'); + const parts = jwt.split("."); if (parts.length !== 3) { - throw new Error('Wrong JWT format'); + throw new Error("Wrong JWT format"); } return { header: JSON.parse(urlDecodeB64(parts[0])), payload: JSON.parse(urlDecodeB64(parts[1])) }; } catch (e) { - throw new InvalidJWTError('Failed to parse jwt'); + throw new InvalidJWTError("Failed to parse jwt"); } } function validateIdToken(id_token, nonce, options) { if (!nonce) { - throw new OIDCClientError('No nonce on state'); + throw new OIDCClientError("No nonce on state"); } try { const jwt = parseJwt(id_token); @@ -563,8 +656,8 @@ function validateIdToken(id_token, nonce, options) { } validateJwt(id_token, options, true); // @ts-ignore - if (!jwt.payload['sub']) { - throw new Error('No Subject (sub) present in id_token'); + if (!jwt.payload["sub"]) { + throw new Error("No Subject (sub) present in id_token"); } return jwt.payload; } catch (e) { @@ -577,20 +670,20 @@ function validateJwt(jwt, options, isIdToken = false) { if (!clockSkew) { clockSkew = 0; } - const now = (currentTimeInMillis && currentTimeInMillis() || Date.now()) / 1000; + const now = ((currentTimeInMillis === null || currentTimeInMillis === undefined ? undefined : currentTimeInMillis()) || Date.now()) / 1000; const payload = parseJwt(jwt).payload; if (!payload.iss) { - throw new InvalidJWTError('Issuer (iss) was not provided'); + throw new InvalidJWTError("Issuer (iss) was not provided"); } if (payload.iss !== issuer) { throw new InvalidJWTError(`Invalid Issuer (iss) in token: ${payload.iss}`); } if (!payload.aud) { - throw new InvalidJWTError('Audience (aud) was not provided'); + throw new InvalidJWTError("Audience (aud) was not provided"); } // Audience must be equal to client_id in id_token // https://openid.net/specs/openid-connect-core-1_0.html#IDToken - if (Array.isArray(payload.aud) ? payload.aud.indexOf(isIdToken ? client_id : audience || client_id) == -1 : payload.aud !== (isIdToken ? client_id : audience || client_id)) { + if (Array.isArray(payload.aud) ? payload.aud.indexOf(isIdToken ? client_id : audience || client_id) === -1 : payload.aud !== (isIdToken ? client_id : audience || client_id)) { throw new InvalidJWTError(`Invalid Audience (aud) in token: ${payload.aud}`); } if (payload.azp && payload.azp !== client_id) { @@ -599,7 +692,7 @@ function validateJwt(jwt, options, isIdToken = false) { const lowerNow = Math.ceil(now + clockSkew); const upperNow = Math.floor(now - clockSkew); if (!payload.iat) { - throw new InvalidJWTError('Issued At (iat) was not provided'); + throw new InvalidJWTError("Issued At (iat) was not provided"); } if (lowerNow < Number(payload.iat)) { throw new InvalidJWTError(`Issued At (iat) is in the future: ${payload.iat}`); @@ -608,7 +701,7 @@ function validateJwt(jwt, options, isIdToken = false) { throw new InvalidJWTError(`Not Before time (nbf) is in the future: ${payload.nbf}`); } if (!payload.exp) { - throw new InvalidJWTError('Expiration Time (exp) was not provided'); + throw new InvalidJWTError("Expiration Time (exp) was not provided"); } if (Number(payload.exp) < upperNow) { throw new InvalidJWTError(`Expiration Time (exp) is in the past: ${payload.exp}`); @@ -617,59 +710,59 @@ function validateJwt(jwt, options, isIdToken = false) { } // Retrieved from https://www.iana.org/assignments/jwt/jwt.xhtml const nonUserClaims = [ - 'iss', + "iss", // 'sub', - 'aud', - 'exp', - 'nbf', - 'iat', - 'jti', - 'azp', - 'nonce', - 'auth_time', - 'at_hash', - 'c_hash', - 'acr', - 'amr', - 'sub_jwk', - 'cnf', - 'sip_from_tag', - 'sip_date', - 'sip_callid', - 'sip_cseq_num', - 'sip_via_branch', - 'orig', - 'dest', - 'mky', - 'events', - 'toe', - 'txn', - 'rph', - 'sid', - 'vot', - 'vtm', - 'attest', - 'origid', - 'act', - 'scope', - 'client_id', - 'may_act', - 'jcard', - 'at_use_nbr' + "aud", + "exp", + "nbf", + "iat", + "jti", + "azp", + "nonce", + "auth_time", + "at_hash", + "c_hash", + "acr", + "amr", + "sub_jwk", + "cnf", + "sip_from_tag", + "sip_date", + "sip_callid", + "sip_cseq_num", + "sip_via_branch", + "orig", + "dest", + "mky", + "events", + "toe", + "txn", + "rph", + "sid", + "vot", + "vtm", + "attest", + "origid", + "act", + "scope", + "client_id", + "may_act", + "jcard", + "at_use_nbr" ]; const DEFAULT_CHECK_INTERVAL = 2000; function createSessionCheckerFrame(options) { const { url, callback, client_id, checkInterval } = options; let internalSessionState; - const idx = url.indexOf('/', url.indexOf('//') + 2); + const idx = url.indexOf("/", url.indexOf("//") + 2); const frameOrigin = url.substr(0, idx); const frame = createHiddenFrame(); let timer; const load = ()=>{ return new Promise((resolve)=>{ window.document.body.appendChild(frame); - window.addEventListener('message', iframeEventHandler, false); + window.addEventListener("message", iframeEventHandler, false); frame.onload = ()=>{ resolve(null); }; @@ -697,16 +790,16 @@ function createSessionCheckerFrame(options) { }; const iframeEventHandler = (e)=>{ if (e.origin === frameOrigin && e.source === frame.contentWindow) { - if (e.data === 'error') { + if (e.data === "error") { stop(); callback(e.data); - } else if (e.data === 'changed') { + } else if (e.data === "changed") { stop(); callback(); } } }; - frame.setAttribute('src', url); + frame.setAttribute("src", url); return { stop, start @@ -717,7 +810,7 @@ function createSessionCheckerFrame(options) { * not suitable for every object but it is enough for this library * @param object */ function cleanUndefined(object) { - if (!object || typeof object !== 'object') { + if (!object || typeof object !== "object") { return object; } return JSON.parse(JSON.stringify(object)); @@ -725,7 +818,7 @@ function createSessionCheckerFrame(options) { function merge(previousValue, currentValue) { for(const p in currentValue){ if (currentValue[p] !== undefined) { - if (typeof currentValue[p] === 'object' && currentValue[p].constructor.name === 'Object') { + if (typeof currentValue[p] === "object" && currentValue[p].constructor.name === "Object") { previousValue[p] = merge(previousValue[p] || {}, currentValue[p]); } else { previousValue[p] = currentValue[p]; @@ -741,12 +834,12 @@ function mergeObjects(...objects) { } const isResponseType = (type, response_type)=>response_type && response_type.split(/\s+/g).filter((rt)=>rt === type).length > 0; -const isScopeIncluded = (scope, scopes)=>scopes && scopes.split(' ').indexOf(scope) > -1; +const isScopeIncluded = (scope, scopes)=>scopes && scopes.split(" ").indexOf(scope) > -1; const openPopup = (url, width = 400, height = 600)=>{ const left = window.screenX + (window.innerWidth - width) / 2; const top = window.screenY + (window.innerHeight - height) / 2; - return window.open(url, 'oidc-login-popup', `left=${left},top=${top},width=${width},height=${height},resizable,scrollbars=yes,status=1`); + return window.open(url, "oidc-login-popup", `left=${left},top=${top},width=${width},height=${height},resizable,scrollbars=yes,status=1`); }; function runPopup(url, options) { let popup = options.popup; @@ -756,7 +849,7 @@ function runPopup(url, options) { popup = openPopup(url); } if (!popup) { - /* istanbul ignore next */ throw new Error('Could not open popup'); + /* istanbul ignore next */ throw new Error("Could not open popup"); } let timeoutId; let closeId; @@ -764,21 +857,21 @@ function runPopup(url, options) { function clearHandlers() { clearInterval(closeId); clearTimeout(timeoutId); - window.removeEventListener('message', messageListener); + window.removeEventListener("message", messageListener); } timeoutId = setTimeout(()=>{ clearHandlers(); - reject(new OIDCClientError('Timed out')); + reject(new OIDCClientError("Timed out")); }, options.timeout || 60 * 1000); - closeId = setInterval(function() { + closeId = setInterval(()=>{ if (popup.closed) { clearHandlers(); - reject(new InteractionCancelled('user closed popup')); + reject(new InteractionCancelled("user closed popup")); } }, 300); - window.addEventListener('message', messageListener); + window.addEventListener("message", messageListener); function messageListener(e) { - if (!e.data || e.data.type !== 'authorization_response') return; + if (!e.data || e.data.type !== "authorization_response") return; clearHandlers(); popup.close(); const data = e.data.response || e.data; @@ -814,8 +907,9 @@ class TabUtils { //the lock holds for 4 seconds (in case the function is async and returns right away, for example, an ajax call intiated) //then it is cleared CallOnce(lockname, fn, timeout = 3000) { - if (!lockname) throw 'empty lockname'; + if (!lockname) throw "empty lockname"; if (!window.localStorage) { + //no local storage. old browser. screw it, just run the function fn(); return; } @@ -823,10 +917,10 @@ class TabUtils { localStorage.setItem(localStorageKey, currentTabId); //re-read after a delay (after all tabs have saved their tabIDs into ls) setTimeout(()=>{ - if (localStorage.getItem(localStorageKey) == currentTabId) fn(); + if (localStorage.getItem(localStorageKey) === currentTabId) fn(); }, 150); //cleanup - release the lock after 3 seconds and on window unload (just in case user closed the window while the lock is still held) - setTimeout(function() { + setTimeout(()=>{ localStorage.removeItem(localStorageKey); }, timeout); } @@ -834,7 +928,9 @@ class TabUtils { //now we also need to manually execute handler in the current tab too, because current tab does not get 'storage' events try { handlers[messageId](eventData); - } catch (x) {} + } catch (x) { + //"try" in case handler not found + } if (!window.localStorage) { this.events.emit(messageId, eventData); return; //no local storage. old browser @@ -842,7 +938,8 @@ class TabUtils { const data = { data: eventData, timeStamp: new Date().getTime() - }; //add timestamp because overwriting same data does not trigger the event + } //add timestamp because overwriting same data does not trigger the event + ; //this triggers 'storage' event for all other tabs except the current tab localStorage.setItem(`${this.keyPrefix}event${messageId}`, JSON.stringify(data)); //cleanup @@ -857,16 +954,16 @@ class TabUtils { return; //no local storage. old browser } //first register a handler for "storage" event that we trigger above - window.addEventListener('storage', (ev)=>{ - if (ev.key != `${this.keyPrefix}event${messageId}`) return; // ignore other keys + window.addEventListener("storage", (ev)=>{ + if (ev.key !== `${this.keyPrefix}event${messageId}`) return; // ignore other keys if (!ev.newValue) return; //called by cleanup? const messageData = JSON.parse(ev.newValue); fn(messageData.data); }); } constructor(kid, fallbackEvents){ - _define_property$1(this, "keyPrefix", void 0); - _define_property$1(this, "events", void 0); + _define_property$1(this, "keyPrefix", undefined); + _define_property$1(this, "events", undefined); this.keyPrefix = kid; this.events = fallbackEvents; } @@ -903,47 +1000,46 @@ function _define_property(obj, key, value) { } if (this.__initializePromise) { return this.__initializePromise; - } else { - this.__initializePromise = new Promise(async (resolve, reject)=>{ - try { - if (this.stateStore.init) { - await this.stateStore.init(); - } - if (this.authStore.init) { - await this.authStore.init(); - } - if (!this.options.endpoints || Object.keys(this.options.endpoints).length === 0) { - await this.fetchFromIssuer(); - } - this.initialized = true; - if (checkLogin) { - try { - var _window; - if (!((_window = window) === null || _window === void 0 ? void 0 : _window.frameElement)) { - await this.silentLogin(); - } - } catch (e) { - this.emit(Events.SILENT_RENEW_ERROR, e); - await this.authStore.clear(); - } - } else { - const localAuth = await this.authStore.get('auth'); - if (localAuth) { - await this.onUserLogin(localAuth, true); + } + this.__initializePromise = new Promise(async (resolve, reject)=>{ + try { + if (this.stateStore.init) { + await this.stateStore.init(); + } + if (this.authStore.init) { + await this.authStore.init(); + } + if (!this.options.endpoints || Object.keys(this.options.endpoints).length === 0) { + await this.fetchFromIssuer(); + } + this.initialized = true; + if (checkLogin) { + try { + var _window; + if (!((_window = window) === null || _window === void 0 ? void 0 : _window.frameElement)) { + await this.silentLogin(); } + } catch (e) { + this.emit(Events.SILENT_RENEW_ERROR, e); + await this.authStore.clear(); } - resolve(this); - } catch (e) { - if (e instanceof OIDCClientError) { - reject(e); - } else { - reject(new OIDCClientError(e.message)); + } else { + const localAuth = await this.authStore.get("auth"); + if (localAuth) { + await this.onUserLogin(localAuth, true); } - } finally{ - this.__initializePromise = undefined; } - }); - } + resolve(this); + } catch (e) { + if (e instanceof OIDCClientError) { + reject(e); + } else { + reject(new OIDCClientError(e.message)); + } + } finally{ + this.__initializePromise = undefined; + } + }); return this.__initializePromise; } /** @@ -968,13 +1064,13 @@ function _define_property(obj, key, value) { * @param popupOptions */ async loginWithPopup(options = {}, popupOptions = {}) { const url = await this.createAuthRequest({ - response_mode: 'fragment', + response_mode: "fragment", ...options, - display: 'popup', - request_type: 'p' + display: "popup", + request_type: "p" }); const { response, state } = await runPopup(url, popupOptions); - const { authParams, localState } = !state || typeof state === 'string' ? await this.loadState(state || response.state) : state; + const { authParams, localState } = !state || typeof state === "string" ? await this.loadState(state || response.state) : state; const tokenResult = await this.handleAuthResponse(response, authParams, localState); const authObject = await this.handleTokenResult(tokenResult, authParams, mergeObjects(this.options, authParams)); authObject.session_state = response.session_state; @@ -989,10 +1085,10 @@ function _define_property(obj, key, value) { * @param url Full url which contains authorization request result parameters. Defaults to `window.location.href` */ async loginCallback(url = (()=>{ var _window_location, _window; - return (_window = window) === null || _window === void 0 ? void 0 : (_window_location = _window.location) === null || _window_location === void 0 ? void 0 : _window_location.href; + return (_window = window) === null || _window === undefined ? undefined : (_window_location = _window.location) === null || _window_location === undefined ? undefined : _window_location.href; })()) { if (!url) { - return Promise.reject(new OIDCClientError('Url must be passed to handle login redirect')); + return Promise.reject(new OIDCClientError("Url must be passed to handle login redirect")); } let parsedUrl; try { @@ -1005,36 +1101,38 @@ function _define_property(obj, key, value) { const { authParams, localState, request_type } = rawStoredState; url = url || window.location.href; switch(request_type){ - case 's': + case "s": var _window; - if ((_window = window) === null || _window === void 0 ? void 0 : _window.frameElement) { + if ((_window = window) === null || _window === undefined ? undefined : _window.frameElement) { if (url) { window.parent.postMessage({ - type: 'authorization_response', + type: "authorization_response", response: responseParams, state: rawStoredState }, `${location.protocol}//${location.host}`); } } return; - case 'p': + case "p": if (window.opener && url) { window.opener.postMessage({ - type: 'authorization_response', + type: "authorization_response", response: responseParams, state: rawStoredState }, `${location.protocol}//${location.host}`); } return; default: - if (responseParams.error) { - return Promise.reject(new AuthenticationError(responseParams.error, responseParams.error_description)); + { + if (responseParams.error) { + return Promise.reject(new AuthenticationError(responseParams.error, responseParams.error_description)); + } + const tokenResult = await this.handleAuthResponse(responseParams, authParams, localState); + const authObject = await this.handleTokenResult(tokenResult, authParams, mergeObjects(this.options, authParams)); + authObject.session_state = responseParams.session_state; + this.synchronizer.BroadcastMessageToAllTabs(Events.USER_LOGIN, authObject); + return localState; } - const tokenResult = await this.handleAuthResponse(responseParams, authParams, localState); - const authObject = await this.handleTokenResult(tokenResult, authParams, mergeObjects(this.options, authParams)); - authObject.session_state = responseParams.session_state; - this.synchronizer.BroadcastMessageToAllTabs(Events.USER_LOGIN, authObject); - return localState; } } /** @@ -1043,8 +1141,8 @@ function _define_property(obj, key, value) { * @param options */ async logout(options = {}) { if (!options.localOnly) { - const storedAuth = await this.authStore.get('auth'); - const id_token_hint = options.id_token_hint || (storedAuth === null || storedAuth === void 0 ? void 0 : storedAuth.id_token_raw); + const storedAuth = await this.authStore.get("auth"); + const id_token_hint = options.id_token_hint || (storedAuth === null || storedAuth === undefined ? undefined : storedAuth.id_token_raw); window.location.assign(await this.createLogoutRequest({ ...options, id_token_hint @@ -1057,7 +1155,7 @@ function _define_property(obj, key, value) { * @param token Token to be revoked * @param type Passed token's type. It will be used to provide `token_type_hint` parameter. * @param options If necessary override options passed to `OIDCClient` by defining them here. - */ async revokeToken(token, type = 'access_token', options = {}) { + */ async revokeToken(token, type = "access_token", options = {}) { if (!this.options.endpoints.revocation_endpoint) { return Promise.reject(new OIDCClientError('"revocation_endpoint" doesn\'t exist')); } @@ -1068,8 +1166,8 @@ function _define_property(obj, key, value) { token: token }; return this.http({ - method: 'POST', - requestType: 'form', + method: "POST", + requestType: "form", url: this.options.endpoints.revocation_endpoint, body: finalOptions }); @@ -1087,17 +1185,17 @@ function _define_property(obj, key, value) { await this.initialize(false); let tokenResult; let finalState = {}; - const storedAuth = await this.authStore.get('auth') || {}; + const storedAuth = await this.authStore.get("auth") || {}; const finalOptions = mergeObjects({ - response_mode: 'query', - display: 'page', - prompt: 'none' + response_mode: "query", + display: "page", + prompt: "none" }, this.options, options); if (finalOptions.silent_redirect_uri) { finalOptions.redirect_uri = finalOptions.silent_redirect_uri; } - if (this.options.useRefreshToken && (storedAuth === null || storedAuth === void 0 ? void 0 : storedAuth.refresh_token)) { - finalState.authParams = mergeObjects((storedAuth === null || storedAuth === void 0 ? void 0 : storedAuth.authParams) || {}, finalState.authParams || {}); + if (this.options.useRefreshToken && (storedAuth === null || storedAuth === undefined ? undefined : storedAuth.refresh_token)) { + finalState.authParams = mergeObjects((storedAuth === null || storedAuth === undefined ? undefined : storedAuth.authParams) || {}, finalState.authParams || {}); tokenResult = await this.exchangeRefreshToken({ ...finalOptions, refresh_token: storedAuth.refresh_token @@ -1105,7 +1203,7 @@ function _define_property(obj, key, value) { } else { const authUrl = await this.createAuthRequest({ ...finalOptions, - request_type: 's' + request_type: "s" }, localState); const { response, state } = await runIframe(authUrl, { timeout: finalOptions.silentRequestTimeout, @@ -1124,43 +1222,43 @@ function _define_property(obj, key, value) { * Retrieve logged in user's access token if it exists. */ async getAccessToken() { var _this; - return (_this = await this.authStore.get('auth')) === null || _this === void 0 ? void 0 : _this.access_token; + return (_this = await this.authStore.get("auth")) === null || _this === undefined ? undefined : _this.access_token; } /** * Retrieve logged in user's refresh token if it exists. */ async getRefreshToken() { var _this; - return (_this = await this.authStore.get('auth')) === null || _this === void 0 ? void 0 : _this.refresh_token; + return (_this = await this.authStore.get("auth")) === null || _this === undefined ? undefined : _this.refresh_token; } /** * Retrieve logged in user's parsed id token if it exists. */ async getIdToken() { var _this; - return (_this = await this.authStore.get('auth')) === null || _this === void 0 ? void 0 : _this.id_token; + return (_this = await this.authStore.get("auth")) === null || _this === undefined ? undefined : _this.id_token; } /** * Retrieve access token's expiration. */ async getExpiresIn() { var _this; - return (_this = await this.authStore.get('auth')) === null || _this === void 0 ? void 0 : _this.expires_in; + return (_this = await this.authStore.get("auth")) === null || _this === undefined ? undefined : _this.expires_in; } /** * Retrieve logged in user's id token in raw format if it exists. */ async getIdTokenRaw() { var _this; - return (_this = await this.authStore.get('auth')) === null || _this === void 0 ? void 0 : _this.id_token_raw; + return (_this = await this.authStore.get("auth")) === null || _this === undefined ? undefined : _this.id_token_raw; } /** * Retrieve logged in user's scopes if it exists. */ async getScopes() { var _scope, _this; - return (_this = await this.authStore.get('auth')) === null || _this === void 0 ? void 0 : (_scope = _this.scope) === null || _scope === void 0 ? void 0 : _scope.split(' '); + return (_this = await this.authStore.get("auth")) === null || _this === undefined ? undefined : (_scope = _this.scope) === null || _scope === undefined ? undefined : _scope.split(" "); } /** * Retrieve logged in user's profile. */ async getUser() { var _this; - return (_this = await this.authStore.get('auth')) === null || _this === void 0 ? void 0 : _this.user; + return (_this = await this.authStore.get("auth")) === null || _this === undefined ? undefined : _this.user; } /** * If there is a user stored locally return true. Otherwise it will make a silentLogin to check if End-User is @@ -1186,8 +1284,8 @@ function _define_property(obj, key, value) { * @param localState * @private */ async createAuthRequest(options = {}, localState = {}) { - var _this_options_endpoints; - if (!((_this_options_endpoints = this.options.endpoints) === null || _this_options_endpoints === void 0 ? void 0 : _this_options_endpoints.authorization_endpoint)) { + var _this_options_endpoints, _this_options_currentTimeInMillis, _this_options; + if (!((_this_options_endpoints = this.options.endpoints) === null || _this_options_endpoints === undefined ? undefined : _this_options_endpoints.authorization_endpoint)) { await this.initialize(false); } // TODO: deep merge for extra params @@ -1200,7 +1298,7 @@ function _define_property(obj, key, value) { audience: finalOptions.audience, redirect_uri: finalOptions.redirect_uri, response_mode: finalOptions.response_mode, - response_type: finalOptions.response_type || 'code', + response_type: finalOptions.response_type || "code", ui_locales: finalOptions.ui_locales, prompt: finalOptions.prompt, display: finalOptions.display, @@ -1214,15 +1312,15 @@ function _define_property(obj, key, value) { web_message_target: finalOptions.web_message_target, ...finalOptions.extraParams && finalOptions.extraParams }; - if (isResponseType('id_token', authParams.response_type) || isScopeIncluded('openid', authParams.scope)) { + if (isResponseType("id_token", authParams.response_type) || isScopeIncluded("openid", authParams.scope)) { authParams.nonce = generateRandom(finalOptions.nonceLength); } - if (isResponseType('code', authParams.response_type)) { + if (isResponseType("code", authParams.response_type)) { authParams.code_challenge = await deriveChallenge(localState.code_verifier); - authParams.code_challenge_method = finalOptions.code_challenge_method || 'S256'; + authParams.code_challenge_method = finalOptions.code_challenge_method || "S256"; } - const now = this.options.currentTimeInMillis && this.options.currentTimeInMillis() || Date.now(); - const fragment = finalOptions.fragment ? `#${finalOptions.fragment}` : ''; + const now = ((_this_options_currentTimeInMillis = (_this_options = this.options).currentTimeInMillis) === null || _this_options_currentTimeInMillis === undefined ? undefined : _this_options_currentTimeInMillis.call(_this_options)) || Date.now(); + const fragment = finalOptions.fragment ? `#${finalOptions.fragment}` : ""; const authParamsString = buildEncodedQueryString(authParams); const url = `${this.options.endpoints.authorization_endpoint}${authParamsString}${fragment}`; // clear 1 day old state entries @@ -1242,7 +1340,7 @@ function _define_property(obj, key, value) { * @private */ async createLogoutRequest(options = {}) { var _this_options_endpoints; - if (!((_this_options_endpoints = this.options.endpoints) === null || _this_options_endpoints === void 0 ? void 0 : _this_options_endpoints.end_session_endpoint)) { + if (!((_this_options_endpoints = this.options.endpoints) === null || _this_options_endpoints === undefined ? undefined : _this_options_endpoints.end_session_endpoint)) { await this.fetchFromIssuer(); } const finalOptions = mergeObjects(this.options, options); @@ -1259,7 +1357,7 @@ function _define_property(obj, key, value) { * @private */ async exchangeAuthorizationCode(options) { var _this_options_endpoints; - if (!((_this_options_endpoints = this.options.endpoints) === null || _this_options_endpoints === void 0 ? void 0 : _this_options_endpoints.token_endpoint)) { + if (!((_this_options_endpoints = this.options.endpoints) === null || _this_options_endpoints === undefined ? undefined : _this_options_endpoints.token_endpoint)) { await this.fetchFromIssuer(); } const finalOptions = mergeObjects(this.options, options); @@ -1267,13 +1365,13 @@ function _define_property(obj, key, value) { const mergedOptions = { ...rest, ...extraTokenParams || {}, - grant_type: 'authorization_code' + grant_type: "authorization_code" }; for (const req of [ - 'code', - 'redirect_uri', - 'code_verifier', - 'client_id' + "code", + "redirect_uri", + "code_verifier", + "client_id" ]){ if (!mergedOptions[req]) { return Promise.reject(new Error(`"${req}" is required`)); @@ -1281,8 +1379,8 @@ function _define_property(obj, key, value) { } return this.http({ url: `${this.options.endpoints.token_endpoint}`, - method: 'POST', - requestType: 'form', + method: "POST", + requestType: "form", body: mergedOptions, headers: extraTokenHeaders }); @@ -1293,20 +1391,20 @@ function _define_property(obj, key, value) { * @private */ async exchangeRefreshToken(options) { var _this_options_endpoints; - if (!((_this_options_endpoints = this.options.endpoints) === null || _this_options_endpoints === void 0 ? void 0 : _this_options_endpoints.token_endpoint)) { + if (!((_this_options_endpoints = this.options.endpoints) === null || _this_options_endpoints === undefined ? undefined : _this_options_endpoints.token_endpoint)) { await this.fetchFromIssuer(); } const { extraTokenHeaders, extraTokenParams, ...rest } = options; const mergedOptions = { - grant_type: 'refresh_token', + grant_type: "refresh_token", client_id: this.options.client_id, client_secret: this.options.client_secret, ...rest, ...extraTokenParams || {} }; for (const req of [ - 'refresh_token', - 'client_id' + "refresh_token", + "client_id" ]){ if (!mergedOptions[req]) { return Promise.reject(new Error(`"${req}" is required`)); @@ -1314,8 +1412,8 @@ function _define_property(obj, key, value) { } return this.http({ url: `${this.options.endpoints.token_endpoint}`, - method: 'POST', - requestType: 'form', + method: "POST", + requestType: "form", body: mergedOptions, headers: extraTokenHeaders }); @@ -1327,20 +1425,20 @@ function _define_property(obj, key, value) { const requestUrl = `${this.options.issuer}/.well-known/openid-configuration`; const response = await this.http({ url: requestUrl, - method: 'GET', - requestType: 'json' + method: "GET", + requestType: "json" }); this.issuer_metadata = response; const endpoints = {}; for (const prop of Object.keys(this.issuer_metadata)){ - if (prop.endsWith('_endpoint') || prop.indexOf('_session') > -1 || prop.indexOf('_uri') > -1) { + if (prop.endsWith("_endpoint") || prop.indexOf("_session") > -1 || prop.indexOf("_uri") > -1) { endpoints[prop] = this.issuer_metadata[prop]; } } this.options.endpoints = endpoints; return this.issuer_metadata; } catch (e) { - throw new OIDCClientError('Loading metadata failed', e.message); + throw new OIDCClientError("Loading metadata failed", e.message); } } /** @@ -1355,12 +1453,11 @@ function _define_property(obj, key, value) { redirect_uri: finalOptions.redirect_uri, client_id: finalOptions.client_id, code_verifier: localState.code_verifier, - grant_type: 'authorization_code', + grant_type: "authorization_code", code: response.code }); - } else { - return response; } + return response; } /** * Handle OAuth2 auth request result @@ -1378,7 +1475,7 @@ function _define_property(obj, key, value) { if (tokenResult.id_token) { parsedIDToken = await validateIdToken(tokenResult.id_token, authParams.nonce, finalOptions); if (finalOptions.idTokenValidator && !await finalOptions.idTokenValidator(tokenResult.id_token)) { - return Promise.reject(new InvalidIdTokenError('Id Token validation failed')); + return Promise.reject(new InvalidIdTokenError("Id Token validation failed")); } Object.keys(parsedIDToken).forEach((key)=>{ if (!nonUserClaims.includes(key)) { @@ -1388,7 +1485,7 @@ function _define_property(obj, key, value) { } if (tokenResult.access_token) { var _this_options_endpoints; - if (finalOptions.requestUserInfo && ((_this_options_endpoints = this.options.endpoints) === null || _this_options_endpoints === void 0 ? void 0 : _this_options_endpoints.userinfo_endpoint)) { + if (finalOptions.requestUserInfo && ((_this_options_endpoints = this.options.endpoints) === null || _this_options_endpoints === undefined ? undefined : _this_options_endpoints.userinfo_endpoint)) { const userInfoResult = await this.fetchUserInfo(tokenResult.access_token); if (!userInfoResult.error) { user = { @@ -1415,10 +1512,9 @@ function _define_property(obj, key, value) { */ async loadState(state) { const rawStoredState = await this.stateStore.get(state); if (!rawStoredState) { - return Promise.reject(new StateNotFound('Local state not found', state)); - } else { - await this.stateStore.del(state); + return Promise.reject(new StateNotFound("Local state not found", state)); } + await this.stateStore.del(state); return rawStoredState; } /** @@ -1428,11 +1524,11 @@ function _define_property(obj, key, value) { * @private */ async fetchUserInfo(accessToken) { return this.http({ - method: 'GET', + method: "GET", url: `${this.options.endpoints.userinfo_endpoint}`, - requestType: 'json', + requestType: "json", headers: { - 'Authorization': `Bearer ${accessToken}` + Authorization: `Bearer ${accessToken}` } }); } @@ -1444,7 +1540,7 @@ function _define_property(obj, key, value) { * @param session_state string that represents the End-User's login state at the OP */ monitorSession({ sub, session_state }) { const { client_id, endpoints } = this.options; - if (!(endpoints === null || endpoints === void 0 ? void 0 : endpoints.check_session_iframe)) { + if (!(endpoints === null || endpoints === undefined ? undefined : endpoints.check_session_iframe)) { console.warn('"check_session_iframe" endpoint missing or session management is not supported by provider'); return; } @@ -1456,7 +1552,7 @@ function _define_property(obj, key, value) { this.emit(Events.SESSION_CHANGE); try { await this.silentLogin({}, {}); - const storedAuth = await this.authStore.get('auth'); + const storedAuth = await this.authStore.get("auth"); if (storedAuth) { var _storedAuth_user; if (((_storedAuth_user = storedAuth.user) === null || _storedAuth_user === void 0 ? void 0 : _storedAuth_user.sub) === sub && storedAuth.session_state) { @@ -1483,9 +1579,9 @@ function _define_property(obj, key, value) { async onUserLogin(authObj, isInternal = false) { var _window; const { expires_in, user, scope, access_token, id_token, refresh_token, session_state, id_token_raw } = authObj; - await this.authStore.set('auth', authObj); + await this.authStore.set("auth", authObj); this.user = user; - this.scopes = scope === null || scope === void 0 ? void 0 : scope.split(' '); + this.scopes = scope === null || scope === undefined ? undefined : scope.split(" "); this.accessToken = access_token; this.idToken = id_token; this.idTokenRaw = id_token_raw; @@ -1493,7 +1589,7 @@ function _define_property(obj, key, value) { if (!isInternal) { this.emit(Events.USER_LOGIN, authObj); } - if (!((_window = window) === null || _window === void 0 ? void 0 : _window.frameElement)) { + if (!((_window = window) === null || _window === undefined ? undefined : _window.frameElement)) { if (this.options.checkSession) { this.monitorSession({ sub: user.sub || user.id, @@ -1503,7 +1599,7 @@ function _define_property(obj, key, value) { if (expires_in !== undefined && this.options.autoSilentRenew) { const expiration = Number(expires_in) - this.options.secondsToRefreshAccessTokenBeforeExp; const renew = ()=>{ - this.synchronizer.CallOnce('silent-login', async ()=>{ + this.synchronizer.CallOnce("silent-login", async ()=>{ try { await this.silentLogin(); this.emit(Events.SILENT_RENEW_SUCCESS, null); @@ -1523,23 +1619,7 @@ function _define_property(obj, key, value) { } } constructor(options){ - super(); - _define_property(this, "options", void 0); - _define_property(this, "user", void 0); - _define_property(this, "scopes", void 0); - _define_property(this, "accessToken", void 0); - _define_property(this, "refreshToken", void 0); - _define_property(this, "idToken", void 0); - _define_property(this, "idTokenRaw", void 0); - _define_property(this, "issuer_metadata", void 0); - _define_property(this, "http", void 0); - _define_property(this, "synchronizer", void 0); - _define_property(this, "stateStore", void 0); - _define_property(this, "authStore", void 0); - _define_property(this, "sessionCheckerFrame", void 0); - _define_property(this, "_accessTokenExpireTimer", void 0); - _define_property(this, "initialized", void 0); - _define_property(this, "__initializePromise", void 0); + super(), _define_property(this, "options", undefined), _define_property(this, "user", undefined), _define_property(this, "scopes", undefined), _define_property(this, "accessToken", undefined), _define_property(this, "refreshToken", undefined), _define_property(this, "idToken", undefined), _define_property(this, "idTokenRaw", undefined), _define_property(this, "issuer_metadata", undefined), _define_property(this, "http", undefined), _define_property(this, "synchronizer", undefined), _define_property(this, "stateStore", undefined), _define_property(this, "authStore", undefined), _define_property(this, "sessionCheckerFrame", undefined), _define_property(this, "_accessTokenExpireTimer", undefined), _define_property(this, "initialized", undefined), _define_property(this, "__initializePromise", undefined); if (!isValidIssuer(options.issuer)) { throw new OIDCClientError('"issuer" must be a valid uri.'); } @@ -1552,10 +1632,10 @@ function _define_property(obj, key, value) { nonceLength: 10 }, options, { // remove last slash for consistency across the lib - issuer: options.issuer.endsWith('/') ? options.issuer.slice(0, -1) : options.issuer + issuer: options.issuer.endsWith("/") ? options.issuer.slice(0, -1) : options.issuer }); this.http = this.options.httpClient || request; - this.stateStore = this.options.stateStore || new LocalStorageStateStore('pa_oidc.state.'); + this.stateStore = this.options.stateStore || new LocalStorageStateStore("pa_oidc.state."); this.authStore = this.options.authStore || new InMemoryStateStore(); if (this.options.autoSilentRenew) { this._accessTokenExpireTimer = new Timer(); diff --git a/dist/oidc-client.esm.js.map b/dist/oidc-client.esm.js.map index c7ba440..8b63126 100644 --- a/dist/oidc-client.esm.js.map +++ b/dist/oidc-client.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"oidc-client.esm.js","sources":["../src/constants/events.ts","../src/errors.ts","../src/helpers/state_manager/state_store.ts","../src/helpers/state_manager/local_storage.ts","../src/helpers/state_manager/in_memory.ts","../src/helpers/event_emitter.ts","../src/helpers/timer.ts","../src/utils/iframe.ts","../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../src/utils/url.ts","../src/utils/request.ts","../src/utils/jose.ts","../src/utils/check_session_iframe.ts","../src/utils/object.ts","../src/utils/oidc.ts","../src/utils/popup.ts","../src/utils/tab_utils.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/indent */\nexport const Events = {\n USER_LOGOUT: 'user_logout',\n USER_LOGIN: 'user_login',\n SILENT_RENEW_SUCCESS: 'silent_renew_success',\n SILENT_RENEW_ERROR: 'silent_renew_error',\n SESSION_CHANGE: 'session_change'\n} as const\n\nexport type EventTypes = 'user_logout' | 'user_login' | 'silent_renew_success' |\n 'silent_renew_error' | 'session_change' | 'session_error'\n","export class OIDCClientError extends Error {\n error: string;\n\n error_description?: string;\n\n public constructor( error: string, error_description?: string ) {\n super( `${ error }${ error_description && ` - ${ error_description }` || '' }` );\n this.name = 'OIDCClientError'\n this.error = error\n this.error_description = error_description\n }\n}\n\nexport class AuthenticationError extends OIDCClientError {\n state?: string;\n\n error_uri?: string;\n\n constructor( error: string, error_description?: string, state?: string, error_uri?: string ) {\n super( error, error_description );\n this.name = 'AuthenticationError'\n this.state = state;\n this.error_uri = error_uri;\n }\n}\n\nexport class StateNotFound extends AuthenticationError {\n state?: string;\n\n constructor( error: string, state?: string ) {\n super( error );\n this.name = 'StateNotFound'\n this.state = state;\n }\n}\n\nexport class InvalidJWTError extends OIDCClientError {\n constructor( details: string ) {\n super( details );\n this.name = 'InvalidJWTError'\n this.error_description = details\n }\n}\n\nexport class InvalidIdTokenError extends InvalidJWTError {\n constructor( details: string ) {\n super( details );\n this.name = 'InvalidIdTokenError'\n }\n}\n\nexport class InteractionCancelled extends OIDCClientError {\n constructor( details: string ) {\n super( details );\n this.name = 'InteractionCancelled'\n }\n}\n","export interface StateStore> {\n init?(): Promise>\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport abstract class StateStore> {\n prefix: string;\n\n constructor( prefix = '' ) {\n this.prefix = prefix\n }\n\n public abstract get( key: string ): Promise;\n\n public abstract set( key: string, value: T ): Promise;\n\n public abstract del( key: string ): Promise;\n\n public abstract clear( maxAge?: number ): Promise;\n}\n","import { StateStore } from './state_store';\n\nexport class LocalStorageStateStore extends StateStore {\n constructor( prefix = 'pa_oidc.' ) {\n super( prefix )\n }\n\n get( key: string ) {\n return new Promise( ( resolve ) => {\n const value = window.localStorage.getItem( this.prefix + key );\n if ( value ) {\n resolve( JSON.parse( value ) );\n } else {\n resolve( null );\n }\n } );\n }\n\n set( key: string, value: T ) {\n return new Promise( ( resolve ) => {\n window.localStorage.setItem( this.prefix + key, JSON.stringify( value ) );\n resolve();\n } );\n }\n\n del( key: string ) {\n return new Promise( ( resolve ) => {\n window.localStorage.removeItem( this.prefix + key );\n resolve();\n } );\n }\n\n clear( before?: number ): Promise {\n return new Promise( ( resolve ) => {\n let i;\n const storedKeys: string[] = [];\n for ( i = 0; i < window.localStorage.length; i++ ) {\n const key = window.localStorage.key( i )\n // items only created by oidc client\n if ( key?.substring( 0, this.prefix.length ) == this.prefix ) {\n storedKeys.push( key );\n }\n }\n for ( i = 0; i < storedKeys.length; i++ ) {\n if ( before ) {\n try {\n const storedItem = JSON.parse( window.localStorage.getItem( storedKeys[i] )! )\n if ( storedItem.created_at < before ) {\n window.localStorage.removeItem( storedKeys[i] )\n }\n } catch ( e ) {\n }\n } else {\n window.localStorage.removeItem( storedKeys[i] )\n }\n }\n resolve();\n } );\n }\n}\n","import { StateStore } from './state_store';\n\nexport class InMemoryStateStore extends StateStore {\n map = new Map()\n\n clear( before?: number ) {\n if ( before ){\n this.map.forEach( ( val, ind ) => {\n if ( val.created_at < before ){\n this.map.delete( ind )\n }\n } )\n return Promise.resolve()\n } else {\n return Promise.resolve( this.map.clear() );\n }\n }\n\n del( key: string ) {\n this.map.delete( key )\n return Promise.resolve( );\n }\n\n get( key: string ) {\n return Promise.resolve( this.map.get( key ) || null );\n }\n\n set( key: string, value: any ) {\n this.map.set( key, value )\n return Promise.resolve();\n }\n}\n","export type Listener = ( ...args: any ) => void\n\nexport class EventEmitter{\n callbacks: Record;\n\n constructor(){\n this.callbacks = {}\n }\n\n once( event: T, fn: ( ...args: any[] ) => void ){\n function on( this: EventEmitter, ...onArgs: any[] ) {\n this.off( event, on );\n fn.apply( this, onArgs );\n }\n on.fn = fn\n this.on( event, on );\n return this;\n }\n\n on( event: T, cb: ( ...args: any[] ) => void ){\n if ( !this.callbacks[`$${ event }`] ) this.callbacks[`$${ event }`] = [];\n this.callbacks[`$${ event }`].push( cb )\n return this\n }\n\n off( event?: T, fn?: ( ...args: any[] ) => void ){\n if ( !event ) {\n this.callbacks = {};\n return this;\n }\n\n // specific event\n const callbacks = this.callbacks[`$${ event }`];\n if ( !callbacks ) return this;\n\n // remove all handlers\n if ( !fn ) {\n delete this.callbacks[`$${ event }`];\n return this;\n }\n\n for ( let i = 0; i < callbacks.length; i++ ) {\n const cb = callbacks[i];\n if ( cb === fn || cb.fn === fn ) {\n callbacks.splice( i, 1 );\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if ( callbacks.length === 0 ) {\n delete this.callbacks[`$${ event }`];\n }\n\n return this;\n }\n\n emit( event: T, ...args: any[] ){\n let cbs = this.callbacks[`$${ event }`]\n if ( cbs ) {\n cbs = cbs.slice( 0 );\n for ( let i = 0, len = cbs.length; i < len; ++i ) {\n cbs[i].apply( this, args );\n }\n }\n return this\n }\n}\n","export class Timer {\n private now: () => number;\n\n private _timerHandle: any;\n\n private _expiration!: number;\n\n constructor( currentTimeInMillisFunc = () => Date.now() ) {\n this.now = currentTimeInMillisFunc\n }\n\n start( duration: number, callback: () => void ){\n if ( duration <= 0 ) {\n duration = 1;\n }\n const expiration = this.now() / 1000 + duration;\n if ( this._expiration === expiration && this._timerHandle ) {\n return;\n }\n\n this.stop();\n\n this._expiration = expiration;\n\n // prevent device sleep and delayed timers\n let timerDuration = 5;\n if ( duration < timerDuration ) {\n timerDuration = duration;\n }\n this._timerHandle = setInterval( ()=>{\n if ( this._expiration <= this.now() / 1000 ) {\n this.stop();\n callback()\n }\n }, timerDuration * 1000 );\n }\n\n stop() {\n if ( this._timerHandle ) {\n clearInterval( this._timerHandle );\n this._timerHandle = null;\n }\n }\n}\n","import { AuthenticationError, OIDCClientError } from '../errors';\nimport type { IFrameOptions } from '../interfaces';\n\nexport function createHiddenFrame() {\n const iframe = window.document.createElement( 'iframe' );\n iframe.style.width = '0';\n iframe.style.height = '0';\n iframe.style.position = 'absolute';\n iframe.style.visibility = 'hidden';\n iframe.style.display = 'none';\n\n iframe.title = '__pa_helper__hidden'\n iframe.ariaHidden = 'true'\n\n return iframe\n}\n\nexport function runIframe(\n url: string,\n options: IFrameOptions\n) {\n return new Promise( ( resolve, reject ) => {\n let onLoadTimeoutId: any = null;\n const iframe = createHiddenFrame()\n\n const timeoutSetTimeoutId = setTimeout( () => {\n reject( new OIDCClientError( 'Timed out' ) );\n removeIframe();\n }, ( options.timeout || 10 ) * 1000 );\n\n const iframeEventHandler = ( e: MessageEvent ) => {\n if ( e.origin != options.eventOrigin ) return;\n if ( !e.data || e.data.type !== 'authorization_response' ) return;\n const eventSource = e.source;\n if ( eventSource ) {\n ( eventSource ).close();\n }\n\n const resp = e.data.response || e.data\n resp.error\n ? reject( new AuthenticationError( resp.error, resp.error_description, resp.state, resp.error_uri ) )\n : resolve( e.data );\n clearTimeout( timeoutSetTimeoutId );\n removeIframe();\n };\n\n const removeIframe = () => {\n if ( onLoadTimeoutId != null ){\n clearTimeout( onLoadTimeoutId )\n }\n if ( window.document.body.contains( iframe ) ) {\n window.document.body.removeChild( iframe );\n }\n window.removeEventListener( 'message', iframeEventHandler, false );\n };\n\n const onLoadTimeout = () => setTimeout( ()=>{\n reject( new OIDCClientError( 'Could not complete silent authentication', url ) )\n removeIframe();\n }, 300 )\n\n\n\n window.addEventListener( 'message', iframeEventHandler, false );\n window.document.body.appendChild( iframe );\n iframe.setAttribute( 'src', url );\n\n /**\n * In case of wrong client id, wrong redirect_uri, in short when redirect did not happen\n * we assume flow failed.\n */\n iframe.onload = function () {\n onLoadTimeoutId = onLoadTimeout()\n }\n } );\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","import { fromByteArray } from 'base64-js';\n\nexport function isValidIssuer( issuer: string ){\n try {\n const url = new URL( issuer )\n if ( !['http:', 'https:'].includes( url.protocol ) ){\n return false\n }\n if ( url.search !== '' || url.hash !== '' ){\n return false\n }\n return true\n } catch ( e ){\n return false\n }\n}\nexport function buildEncodedQueryString( obj?: Record,\n appendable = true, ) {\n if ( !obj ) return '';\n const ret: string[] = [];\n for ( const d in obj ) {\n if ( obj.hasOwnProperty( d ) && obj[d] ) {\n ret.push( `${\n encodeURIComponent( d )\n }=${\n encodeURIComponent( typeof obj[d] === 'object' ? JSON.stringify( obj[d] ) : obj[d]! )\n }` );\n }\n }\n return `${ appendable ? '?' : '' }${ ret.join( '&' ) }`;\n}\n\nexport function parseQueryUrl( value: string ) {\n const result: Record = {};\n value = value.trim().replace( /^(\\?|#|&)/, '' );\n const params = value.split( '&' );\n for ( let i = 0; i < params.length; i += 1 ) {\n const paramAndValue = params[i];\n const parts = paramAndValue.split( '=' );\n const key = decodeURIComponent( parts.shift()! );\n const value = parts.length > 0 ? parts.join( '=' ) : '';\n result[key] = decodeURIComponent( value );\n }\n return result;\n}\n\nexport function urlSafe( buffer: Uint8Array ): string {\n const encoded = fromByteArray( new Uint8Array( buffer ) );\n return encoded.replace( /\\+/g, '-' ).replace( /\\//g, '_' ).replace( /=/g, '' );\n}\n","import { buildEncodedQueryString } from './url';\n\nexport interface RequestOptions {\n body?: Record;\n headers?: Record,\n method: 'GET' | 'POST' | 'PATCH' | 'TRACE' | 'OPTIONS' | 'HEAD',\n requestType?: 'form' | 'json',\n url: string\n}\n\nexport function request( options: RequestOptions ): Promise{\n let body: any = null\n let headers = options.headers || {}\n if ( options.method === 'POST' ){\n headers = {\n 'Content-Type': options.requestType === 'form' ? 'application/x-www-form-urlencoded;charset=UTF-8' :\n 'application/json;charset=UTF-8',\n ...headers\n }\n }\n if ( options.body ){\n body = options.requestType === 'form' ? buildEncodedQueryString( options.body, false )\n : JSON.stringify( options.body )\n }\n\n return new Promise( ( resolve, reject ) => {\n fetch( options.url, {\n method: options.method,\n body: body,\n headers\n } )\n .then( ( value: Response ) => resolve( value.json() ) )\n .catch( reject )\n } )\n}\n","import { InvalidIdTokenError, InvalidJWTError, OIDCClientError } from '../errors';\nimport type { IPlusAuthClientOptions, JWTValidationOptions, ParsedJWT } from '../interfaces';\n\nimport { urlSafe } from './url';\n\nconst CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\nfunction getRandomBytes( n: number ){\n // @ts-ignore\n const crypto = self.crypto || self.msCrypto, QUOTA = 65536;\n const a = new Uint8Array( n );\n for ( let i = 0; i < n; i += QUOTA ) {\n crypto.getRandomValues( a.subarray( i, i + Math.min( n - i, QUOTA ) ) );\n }\n return a;\n}\n\nexport function generateRandom( length: number ){\n let out = '';\n const charsLen = CHARSET.length;\n const maxByte = 256 - 256 % charsLen;\n while ( length > 0 ) {\n const buf = getRandomBytes( Math.ceil( length * 256 / maxByte ) );\n for ( let i = 0; i < buf.length && length > 0; i++ ) {\n const randomByte = buf[i];\n if ( randomByte < maxByte ) {\n out += CHARSET.charAt( randomByte % charsLen );\n length--;\n }\n }\n }\n return out;\n}\n\n\nexport function deriveChallenge( code: string ): Promise{\n if ( code.length < 43 || code.length > 128 ) {\n return Promise.reject( new OIDCClientError( `Invalid code length: ${ code.length }` ) );\n }\n\n return new Promise( ( resolve, reject ) => {\n crypto.subtle.digest( 'SHA-256', new TextEncoder().encode( code ) )\n .then( buffer => {\n return resolve( urlSafe( new Uint8Array( buffer ) ) );\n }, function ( error ) {\n /* istanbul ignore next */\n return reject( error );\n } );\n } );\n}\n// https://datatracker.ietf.org/doc/html/rfc4648#section-5\nexport const urlDecodeB64 = ( input: string ) => decodeURIComponent(\n atob( input.replace( /_/g, '/' ).replace( /-/g, '+' ) )\n .split( '' )\n .map( c => {\n return `%${ `00${ c.charCodeAt( 0 ).toString( 16 ) }`.slice( -2 ) }`;\n } )\n .join( '' )\n);\n\n\n\nexport function parseJwt( jwt: string ): ParsedJWT {\n try {\n const parts = jwt.split( '.' )\n if ( parts.length !== 3 ){\n throw new Error( 'Wrong JWT format' )\n }\n return {\n header: JSON.parse( urlDecodeB64( parts[0] ) ),\n payload: JSON.parse( urlDecodeB64( parts[1] ) )\n }\n } catch ( e ){\n throw new InvalidJWTError( 'Failed to parse jwt' )\n }\n}\n\nexport function validateIdToken( id_token: string, nonce: string, options: IPlusAuthClientOptions ) {\n if ( !nonce ) {\n throw new OIDCClientError( 'No nonce on state' );\n }\n\n try {\n const jwt = parseJwt( id_token );\n\n if ( nonce !== jwt.payload.nonce ) {\n throw new Error( `Invalid nonce in id_token: ${ jwt.payload.nonce }` );\n }\n\n validateJwt( id_token, options, true )\n\n // @ts-ignore\n if ( !jwt.payload['sub'] ) {\n throw new Error( 'No Subject (sub) present in id_token' );\n }\n\n return jwt.payload;\n } catch ( e ){\n throw new InvalidIdTokenError( e.message )\n }\n}\n\nexport function validateJwt( jwt: string, options: JWTValidationOptions, isIdToken = false ) {\n // eslint-disable-next-line prefer-const\n let { clockSkew, currentTimeInMillis, issuer, audience, client_id } = options\n if ( !clockSkew ){\n clockSkew = 0\n }\n const now = ( currentTimeInMillis && currentTimeInMillis() || Date.now() ) / 1000;\n\n const payload = parseJwt( jwt ).payload;\n\n if ( !payload.iss ) {\n throw new InvalidJWTError( 'Issuer (iss) was not provided' );\n }\n if ( payload.iss !== issuer ) {\n throw new InvalidJWTError( `Invalid Issuer (iss) in token: ${ payload.iss }` );\n }\n\n if ( !payload.aud ) {\n throw new InvalidJWTError( 'Audience (aud) was not provided' );\n }\n\n // Audience must be equal to client_id in id_token\n // https://openid.net/specs/openid-connect-core-1_0.html#IDToken\n if ( Array.isArray( payload.aud ) ?\n payload.aud.indexOf( isIdToken ? client_id : audience || client_id ) == -1 :\n payload.aud !== ( isIdToken ? client_id : audience || client_id )\n ) {\n throw new InvalidJWTError( `Invalid Audience (aud) in token: ${ payload.aud }` );\n }\n\n if ( payload.azp && payload.azp !== client_id ) {\n throw new InvalidJWTError( `Invalid Authorized Party (azp) in token: ${ payload.azp }` );\n }\n\n const lowerNow = Math.ceil( now + clockSkew );\n const upperNow = Math.floor( now - clockSkew );\n\n if ( !payload.iat ) {\n throw new InvalidJWTError( 'Issued At (iat) was not provided' );\n }\n\n if ( lowerNow < Number( payload.iat ) ) {\n throw new InvalidJWTError( `Issued At (iat) is in the future: ${ payload.iat }` );\n }\n\n if ( payload.nbf && lowerNow < Number( payload.nbf ) ) {\n throw new InvalidJWTError( `Not Before time (nbf) is in the future: ${ payload.nbf }` );\n }\n\n if ( !payload.exp ) {\n throw new InvalidJWTError( 'Expiration Time (exp) was not provided' );\n }\n if ( Number( payload.exp ) < upperNow ) {\n throw new InvalidJWTError( `Expiration Time (exp) is in the past: ${ payload.exp }` );\n }\n\n return payload;\n}\n\n// Retrieved from https://www.iana.org/assignments/jwt/jwt.xhtml\nexport const nonUserClaims = [\n 'iss',\n // 'sub',\n 'aud',\n 'exp',\n 'nbf',\n 'iat',\n 'jti',\n 'azp',\n 'nonce',\n 'auth_time',\n 'at_hash',\n 'c_hash',\n 'acr',\n 'amr',\n 'sub_jwk',\n 'cnf',\n 'sip_from_tag',\n 'sip_date',\n 'sip_callid',\n 'sip_cseq_num',\n 'sip_via_branch',\n 'orig',\n 'dest',\n 'mky',\n 'events',\n 'toe',\n 'txn',\n 'rph',\n 'sid',\n 'vot',\n 'vtm',\n 'attest',\n 'origid',\n 'act',\n 'scope',\n 'client_id',\n 'may_act',\n 'jcard',\n 'at_use_nbr',\n] as const\n","import type { SessionChecker, SessionCheckerOptions } from '../interfaces';\n\nimport { createHiddenFrame } from './iframe';\n\nconst DEFAULT_CHECK_INTERVAL = 2000\n\nexport function createSessionCheckerFrame( options: SessionCheckerOptions ): SessionChecker{\n const { url, callback, client_id, checkInterval } = options\n let internalSessionState: string | null;\n const idx = url.indexOf( '/', url.indexOf( '//' ) + 2 );\n const frameOrigin = url.substr( 0, idx );\n\n const frame = createHiddenFrame()\n\n let timer: any\n\n const load = () => {\n return new Promise( resolve => {\n window.document.body.appendChild( frame );\n window.addEventListener( 'message', iframeEventHandler, false );\n frame.onload = () => {\n resolve( null )\n }\n } )\n }\n\n const start = ( sessionState: string ) => {\n load().then( () => {\n if ( sessionState && internalSessionState !== sessionState ) {\n stop();\n internalSessionState = sessionState;\n const send = () => {\n frame.contentWindow!.postMessage( `${ client_id } ${ internalSessionState }`, frameOrigin );\n };\n send();\n timer = window.setInterval( send, checkInterval || DEFAULT_CHECK_INTERVAL );\n }\n } )\n }\n\n const stop = () => {\n internalSessionState = null;\n if ( timer ) {\n window.clearInterval( timer );\n timer = null;\n }\n }\n\n const iframeEventHandler = ( e: MessageEvent ) => {\n if ( e.origin === frameOrigin && e.source === frame.contentWindow ) {\n if ( e.data === 'error' ) {\n stop();\n callback( e.data );\n } else if ( e.data === 'changed' ) {\n stop();\n callback();\n }\n }\n }\n\n frame.setAttribute( 'src', url );\n\n return {\n stop,\n start\n }\n}\n","type RequiredAndNotNull = {\n [P in keyof T]-?: Exclude\n}\n\n/**\n * not suitable for every object but it is enough for this library\n * @param object\n */\nexport function cleanUndefined>( object: T ) {\n if ( !object || typeof object !== 'object' ) {\n return object\n }\n return JSON.parse( JSON.stringify( object ) ) as RequiredAndNotNull\n}\n\nfunction merge( previousValue: any, currentValue: any ) {\n for ( const p in currentValue ) {\n if ( currentValue[p] !== undefined ) {\n if ( typeof currentValue[p] === 'object' && currentValue[p].constructor.name === 'Object' ) {\n previousValue[p] = merge( previousValue[p] || {}, currentValue[p] );\n } else {\n previousValue[p] = currentValue[p];\n }\n }\n }\n return previousValue\n}\nexport function mergeObjects( obj1: T, obj2: U ): RequiredAndNotNull;\nexport function mergeObjects( obj1: T, obj2: U, obj3: K ): RequiredAndNotNull;\nexport function mergeObjects( ...objects: any[] ) {\n return objects.reduce( ( previousValue, currentValue ) => {\n return merge( previousValue || {}, currentValue )\n }, {} ) as any\n}\n","export const isResponseType = ( type: string, response_type?: string ) =>\n response_type && response_type.split( /\\s+/g ).filter( rt => rt === type ).length > 0\n\nexport const isScopeIncluded = ( scope: string, scopes?: string ) =>\n scopes && scopes.split( ' ' ).indexOf( scope ) > -1\n","import { InteractionCancelled, OIDCClientError } from '../errors';\nimport type { PopupOptions } from '../interfaces';\n\nconst openPopup = ( url: string, width = 400, height = 600 ) => {\n const left = window.screenX + ( window.innerWidth - width ) / 2;\n const top = window.screenY + ( window.innerHeight - height ) / 2;\n\n return window.open(\n url,\n 'oidc-login-popup',\n `left=${ left },top=${ top },width=${ width },height=${ height },resizable,scrollbars=yes,status=1`\n );\n};\n\nexport function runPopup( url: string, options: PopupOptions ) {\n let popup = options.popup;\n\n if ( popup ) {\n popup.location.href = url;\n } else {\n popup = openPopup( url );\n }\n\n if ( !popup ) {\n /* istanbul ignore next */\n throw new Error( 'Could not open popup' );\n }\n\n let timeoutId: any ;\n let closeId: any ;\n\n return new Promise<{ response: any, state: string }>( ( resolve, reject ) => {\n function clearHandlers(){\n clearInterval( closeId );\n clearTimeout( timeoutId )\n window.removeEventListener( 'message', messageListener )\n }\n\n timeoutId = setTimeout( () => {\n clearHandlers()\n reject( new OIDCClientError( 'Timed out' ) );\n }, options.timeout || 60 * 1000 )\n\n closeId = setInterval( function () {\n if ( popup!.closed ) {\n clearHandlers()\n reject( new InteractionCancelled( 'user closed popup' ) )\n }\n }, 300 );\n\n window.addEventListener( 'message', messageListener );\n\n function messageListener( e: MessageEvent ){\n if ( !e.data || e.data.type !== 'authorization_response' ) return;\n clearHandlers();\n popup!.close();\n const data = e.data.response || e.data\n data.error ? reject( new OIDCClientError( data.error, data.error_description ) )\n : resolve( e.data );\n }\n } );\n}\n","/*\nJitbit TabUtils - helper for multiple browser tabs. version 1.0\nhttps://github.com/jitbit/TabUtils\n- executing \"interlocked\" function call - only once per multiple tabs\n- broadcasting a message to all tabs (including the current one) with some message \"data\"\n- handling a broadcasted message\nMIT license: https://github.com/jitbit/TabUtils/blob/master/LICENSE\n*/\n\nimport type { EventEmitter } from '../helpers';\n\nconst currentTabId = `${ performance.now() }:${ Math.random() * 1000000000 | 0 }`;\nconst handlers: Record = {};\n\nexport class TabUtils {\n keyPrefix: string;\n\n private events: EventEmitter;\n\n constructor( kid: string, fallbackEvents: EventEmitter ) {\n this.keyPrefix = kid;\n this.events = fallbackEvents\n }\n\n //runs code only once in multiple tabs\n //the lock holds for 4 seconds (in case the function is async and returns right away, for example, an ajax call intiated)\n //then it is cleared\n CallOnce( lockname: string, fn: () => void, timeout = 3000 ): void{\n if ( !lockname ) throw 'empty lockname';\n\n if ( !window.localStorage ) { //no local storage. old browser. screw it, just run the function\n fn();\n return;\n }\n\n const localStorageKey = this.keyPrefix + lockname;\n\n localStorage.setItem( localStorageKey, currentTabId );\n //re-read after a delay (after all tabs have saved their tabIDs into ls)\n setTimeout( () => {\n if ( localStorage.getItem( localStorageKey ) == currentTabId )\n fn();\n }, 150 );\n\n //cleanup - release the lock after 3 seconds and on window unload (just in case user closed the window while the lock is still held)\n setTimeout( function () { localStorage.removeItem( localStorageKey ); }, timeout );\n }\n\n BroadcastMessageToAllTabs( messageId: string, eventData: any ): void{\n //now we also need to manually execute handler in the current tab too, because current tab does not get 'storage' events\n try { handlers[messageId]( eventData ); } //\"try\" in case handler not found\n catch ( x ) { }\n\n if ( !window.localStorage ){\n this.events.emit( messageId, eventData )\n return; //no local storage. old browser\n }\n\n const data = {\n data: eventData,\n timeStamp: new Date().getTime()\n }; //add timestamp because overwriting same data does not trigger the event\n\n //this triggers 'storage' event for all other tabs except the current tab\n localStorage.setItem( `${ this.keyPrefix }event${ messageId }`, JSON.stringify( data ) );\n\n //cleanup\n setTimeout( () => { localStorage.removeItem( `${ this.keyPrefix }event${ messageId }` ); }, 3000 );\n }\n\n OnBroadcastMessage( messageId: string, fn: ( data: any ) => void ): void{\n handlers[messageId] = fn;\n if ( !window.localStorage ){\n this.events.on( messageId, fn )\n return; //no local storage. old browser\n }\n\n //first register a handler for \"storage\" event that we trigger above\n window.addEventListener( 'storage', ( ev ) => {\n if ( ev.key != `${ this.keyPrefix }event${ messageId }` ) return; // ignore other keys\n if ( !ev.newValue ) return; //called by cleanup?\n const messageData = JSON.parse( ev.newValue );\n fn( messageData.data );\n } );\n }\n}\n","import type { EventTypes } from './constants';\nimport { Events } from './constants';\n\nimport {\n AuthenticationError, InvalidIdTokenError,\n OIDCClientError, StateNotFound\n} from './errors';\n\nimport type {\n StateStore } from './helpers';\nimport {\n EventEmitter,\n InMemoryStateStore,\n LocalStorageStateStore\n} from './helpers';\n\n\n\nimport { Timer } from './helpers/timer';\nimport type { AuthRecord,\n AuthRequestOptions, IEndpointConfiguration,\n IPlusAuthClientOptions,\n LogoutRequestOptions, PopupOptions, RevokeOptions, SessionChecker,\n SessionMonitorOptions, StateRecord,\n TokenRequestOption, TokenResponse, TokenType\n} from './interfaces';\n\nimport type {\n RequestOptions } from './utils';\nimport {\n request,\n runIframe,\n buildEncodedQueryString,\n parseQueryUrl,\n validateIdToken,\n createSessionCheckerFrame,\n nonUserClaims, generateRandom, deriveChallenge, isValidIssuer,\n} from './utils';\nimport { cleanUndefined, mergeObjects } from './utils/object';\n\nimport { isResponseType, isScopeIncluded } from './utils/oidc';\nimport { runPopup } from './utils/popup';\nimport { TabUtils } from './utils/tab_utils';\n\n/**\n * `OIDCClient` provides methods for interacting with OIDC/OAuth2 authorization server. Those methods are signing a\n * user in, signing out, managing the user's claims, checking session and managing tokens returned from the\n * OIDC/OAuth2 provider.\n *\n */\nexport class OIDCClient extends EventEmitter{\n options: IPlusAuthClientOptions\n\n user?: any;\n\n scopes?: string[];\n\n accessToken?: string;\n\n refreshToken?: string;\n\n idToken?: string;\n\n idTokenRaw?: string;\n\n issuer_metadata?: Record;\n\n private readonly http: ( options: RequestOptions ) => Promise | never;\n\n private synchronizer: TabUtils;\n\n private stateStore: StateStore\n\n private authStore: StateStore;\n\n private sessionCheckerFrame?: SessionChecker\n\n private _accessTokenExpireTimer?: Timer;\n\n private initialized!: boolean;\n\n private __initializePromise!: Promise | undefined;\n\n constructor( options: IPlusAuthClientOptions ) {\n super()\n if ( !isValidIssuer( options.issuer ) ){\n throw new OIDCClientError( '\"issuer\" must be a valid uri.' )\n }\n\n this.synchronizer = new TabUtils( btoa( options.issuer ), this )\n\n this.options = mergeObjects( {\n secondsToRefreshAccessTokenBeforeExp: 60,\n autoSilentRenew: true,\n checkSession: true,\n stateLength: 10,\n nonceLength: 10\n }, options, {\n // remove last slash for consistency across the lib\n issuer: options.issuer.endsWith( '/' ) ? options.issuer.slice( 0, -1 ) : options.issuer\n } )\n\n this.http = this.options.httpClient || request\n this.stateStore = this.options.stateStore || new LocalStorageStateStore( 'pa_oidc.state.' )\n this.authStore = this.options.authStore || new InMemoryStateStore()\n\n\n if ( this.options.autoSilentRenew ){\n this._accessTokenExpireTimer = new Timer()\n }\n\n this.on( Events.USER_LOGOUT, async ()=>{\n this.user = undefined\n this.scopes = undefined;\n this.accessToken = undefined\n this.idToken = undefined\n this.refreshToken = undefined\n await this.authStore.clear()\n } )\n\n this.synchronizer.OnBroadcastMessage( Events.USER_LOGIN, this.onUserLogin.bind( this ) )\n }\n\n /**\n * Initialize the library with this method. It resolves issuer configuration, jwks keys which are necessary for\n * validating tokens returned from provider and checking if a user is already authenticated in provider.\n *\n * @param checkLogin Make this `false` if you don't want to check user authorization status in provider while\n * initializing. Defaults to `true`\n */\n async initialize( checkLogin = true ): Promise | never {\n if ( this.initialized ){\n return this\n }\n\n if ( this.__initializePromise ){\n return this.__initializePromise\n } else {\n this.__initializePromise = new Promise( async ( resolve, reject ) => {\n try {\n if ( this.stateStore.init ){\n await this.stateStore.init()\n }\n if ( this.authStore.init ){\n await this.authStore.init()\n }\n\n if ( !this.options.endpoints || Object.keys( this.options.endpoints ).length === 0 ){\n await this.fetchFromIssuer()\n }\n this.initialized = true\n\n if ( checkLogin ){\n try {\n if ( !window?.frameElement ){\n await this.silentLogin()\n }\n } catch ( e ) {\n this.emit( Events.SILENT_RENEW_ERROR, e )\n await this.authStore.clear()\n }\n } else {\n const localAuth = await this.authStore.get( 'auth' )\n if ( localAuth ){\n await this.onUserLogin( localAuth, true )\n }\n }\n resolve( this )\n } catch ( e ) {\n if ( e instanceof OIDCClientError ){\n reject( e )\n } else {\n reject( new OIDCClientError( e.message ) )\n }\n } finally {\n this.__initializePromise = undefined\n }\n } )\n }\n\n return this.__initializePromise\n }\n\n /**\n * Redirect to provider's authorization endpoint using provided parameters. You can override any parameter defined\n * in `OIDCClient`. If you don't provide `state`, `nonce` or `code_verifier` they will be generated automatically\n * in a random and secure way.\n *\n * @param options\n * @param localState\n */\n async login( options: Partial = {}, localState: Record = {} ){\n window.location.assign( await this.createAuthRequest( options, localState ) )\n }\n\n /**\n * Open a popup with the provider's authorization endpoint using provided parameters. You can override any\n * parameter defined in `OIDCClient`. If you don't provide `state`, `nonce` or `code_verifier` they will be\n * generated automatically in a random and secure way. You can also override popup options.\n *\n * NOTE: Most browsers block popups if they are not happened as a result of user actions. In order to display\n * login popup you must call this method in an event handler listening for a user action like button click.\n *\n * @param options\n * @param popupOptions\n */\n async loginWithPopup( options: Partial = {}, popupOptions: PopupOptions = {} ){\n const url = await this.createAuthRequest( {\n response_mode: 'fragment',\n ...options,\n display: 'popup',\n request_type: 'p'\n } )\n const { response, state } = await runPopup( url, popupOptions )\n const { authParams, localState } = !state || typeof state === 'string' ?\n await this.loadState( state || response.state )\n : state;\n const tokenResult = await this.handleAuthResponse( response, authParams, localState )\n const authObject = await this.handleTokenResult(\n tokenResult,\n authParams,\n mergeObjects( this.options, authParams )\n )\n authObject.session_state= response.session_state;\n this.synchronizer.BroadcastMessageToAllTabs( Events.USER_LOGIN, authObject )\n return localState\n }\n\n /**\n * After a user successfully authorizes an application, the authorization server will redirect the user back to\n * the application with either an authorization code or access token in the URL. In the callback page you should\n * call this method.\n *\n * @param url Full url which contains authorization request result parameters. Defaults to `window.location.href`\n */\n async loginCallback( url: string= window?.location?.href ){\n if ( !url ){\n return Promise.reject( new OIDCClientError( 'Url must be passed to handle login redirect' ) )\n }\n let parsedUrl: URL;\n try {\n parsedUrl = new URL( url )\n } catch ( e ){\n return Promise.reject( new OIDCClientError( `Invalid callback url passed: \"${ url }\"` ) )\n }\n\n const responseParams = parseQueryUrl( parsedUrl.search || parsedUrl.hash )\n const rawStoredState = await this.loadState( responseParams.state )\n const { authParams, localState, request_type } = rawStoredState\n url = url || window.location.href;\n switch ( request_type ) {\n case 's':\n if ( window?.frameElement ) {\n if ( url ) {\n window.parent.postMessage( {\n type: 'authorization_response',\n response: responseParams,\n state: rawStoredState\n }, `${ location.protocol }//${ location.host }` );\n }\n }\n return\n case 'p':\n if ( window.opener && url ){\n window.opener.postMessage( {\n type: 'authorization_response',\n response: responseParams,\n state: rawStoredState\n }, `${ location.protocol }//${ location.host }` );\n }\n return\n default:\n if ( responseParams.error ){\n return Promise.reject( new AuthenticationError( responseParams.error, responseParams.error_description ) )\n }\n const tokenResult = await this.handleAuthResponse( responseParams, authParams, localState )\n const authObject = await this.handleTokenResult(\n tokenResult,\n authParams,\n mergeObjects( this.options, authParams )\n )\n authObject.session_state= responseParams.session_state;\n this.synchronizer.BroadcastMessageToAllTabs( Events.USER_LOGIN, authObject )\n return localState\n }\n }\n\n /**\n * Redirect to provider's `end_session_endpoint` with provided parameters. After logout provider will redirect to\n * provided `post_logout_redirect_uri` if it provided.\n * @param options\n */\n async logout( options: LogoutRequestOptions = {} ){\n if ( !options.localOnly ) {\n const storedAuth = await this.authStore.get( 'auth' )\n const id_token_hint = options.id_token_hint || storedAuth?.id_token_raw\n window.location.assign( await this.createLogoutRequest( {\n ...options,\n id_token_hint\n } ) )\n }\n await this.authStore.clear()\n }\n\n /**\n * OAuth2 token revocation implementation method. See more at [tools.ietf.org/html/rfc7009](https://tools.ietf.org/html/rfc7009)\n * @param token Token to be revoked\n * @param type Passed token's type. It will be used to provide `token_type_hint` parameter.\n * @param options If necessary override options passed to `OIDCClient` by defining them here.\n */\n async revokeToken( token: string, type: TokenType = 'access_token', options: RevokeOptions = {} ){\n if ( !this.options.endpoints!.revocation_endpoint ){\n return Promise.reject( new OIDCClientError( '\"revocation_endpoint\" doesn\\'t exist' ) )\n }\n const finalOptions = {\n client_id: options.client_id || this.options.client_id,\n client_secret: options.client_secret || this.options.client_secret,\n token_type_hint: type,\n token: token\n }\n\n return this.http( {\n method: 'POST',\n requestType: 'form',\n url: this.options.endpoints!.revocation_endpoint,\n body: finalOptions\n } )\n }\n\n /**\n * Login without having an interaction. If refresh tokens are used and there is a stored refresh token it will\n * exchange refresh token to receive new access token. If not it silently makes a request the provider's\n * authorization endpoint using provided parameters. You can override any parameter defined in `OIDCClient`. If\n * you don't provide `state`, `nonce` or `code_verifier` they will be generated automatically in a random and\n * secure way.\n *\n * @param options\n * @param localState\n */\n async silentLogin( options: AuthRequestOptions = {}, localState: Record = {} ){\n await this.initialize( false )\n let tokenResult: any;\n let finalState: any = {}\n\n const storedAuth = await this.authStore.get( 'auth' ) || {}\n\n const finalOptions = mergeObjects( {\n response_mode: 'query',\n display: 'page',\n prompt: 'none'\n }, this.options, options )\n\n if ( finalOptions.silent_redirect_uri ){\n finalOptions.redirect_uri = finalOptions.silent_redirect_uri\n }\n\n if ( this.options.useRefreshToken && storedAuth?.refresh_token ){\n finalState.authParams = mergeObjects( storedAuth?.authParams || {}, finalState.authParams || {} )\n tokenResult = await this.exchangeRefreshToken( {\n ...finalOptions,\n refresh_token: storedAuth.refresh_token,\n } )\n } else {\n const authUrl = await this.createAuthRequest( {\n ...finalOptions,\n request_type: 's'\n }, localState )\n\n const { response, state } = await runIframe( authUrl, {\n timeout: finalOptions.silentRequestTimeout,\n eventOrigin: window.location.origin\n } )\n tokenResult = await this.handleAuthResponse( response, finalOptions, localState )\n storedAuth.session_state = response.session_state;\n finalState = state\n }\n\n const authObject = await this.handleTokenResult( tokenResult, finalState.authParams, finalOptions )\n authObject.session_state = storedAuth.session_state\n this.synchronizer.BroadcastMessageToAllTabs( Events.USER_LOGIN, authObject )\n return finalState.localState\n }\n\n /**\n * Retrieve logged in user's access token if it exists.\n */\n async getAccessToken(){\n return ( await this.authStore.get( 'auth' ) )?.access_token\n }\n\n\n /**\n * Retrieve logged in user's refresh token if it exists.\n */\n async getRefreshToken(){\n return ( await this.authStore.get( 'auth' ) )?.refresh_token\n }\n\n /**\n * Retrieve logged in user's parsed id token if it exists.\n */\n async getIdToken(){\n return ( await this.authStore.get( 'auth' ) )?.id_token\n }\n\n /**\n * Retrieve access token's expiration.\n */\n async getExpiresIn(){\n return ( await this.authStore.get( 'auth' ) )?.expires_in\n }\n\n /**\n * Retrieve logged in user's id token in raw format if it exists.\n */\n async getIdTokenRaw(){\n return ( await this.authStore.get( 'auth' ) )?.id_token_raw\n }\n\n\n /**\n * Retrieve logged in user's scopes if it exists.\n */\n async getScopes(){\n return ( await this.authStore.get( 'auth' ) )?.scope?.split( ' ' )\n }\n\n\n /**\n * Retrieve logged in user's profile.\n */\n async getUser(){\n return ( await this.authStore.get( 'auth' ) )?.user\n }\n\n /**\n * If there is a user stored locally return true. Otherwise it will make a silentLogin to check if End-User is\n * logged in provider.\n *\n * @param localOnly Don't check provider\n */\n async isLoggedIn( localOnly = false ){\n const existsOnLocal = !!await this.getUser()\n if ( !existsOnLocal && !localOnly ){\n try {\n await this.silentLogin()\n return true\n } catch ( e ){\n return false\n }\n }\n return existsOnLocal\n }\n\n /**\n * Create authorization request with provided options.\n *\n * @param options\n * @param localState\n * @private\n */\n private async createAuthRequest( options: Partial = {},\n localState: Record = {} ): Promise{\n if ( !this.options.endpoints?.authorization_endpoint ){\n await this.initialize( false )\n }\n // TODO: deep merge for extra params\n const finalOptions = Object.assign( {}, this.options, options )\n localState.code_verifier = generateRandom( 72 )\n\n const authParams = {\n client_id: finalOptions.client_id,\n state: generateRandom( finalOptions.stateLength! ),\n scope: finalOptions.scope,\n audience: finalOptions.audience,\n redirect_uri: finalOptions.redirect_uri,\n response_mode: finalOptions.response_mode,\n response_type: finalOptions.response_type || 'code',\n ui_locales: finalOptions.ui_locales,\n prompt: finalOptions.prompt,\n display: finalOptions.display,\n claims: finalOptions.claims,\n claims_locales: finalOptions.claims_locales,\n acr_values: finalOptions.acr_values,\n registration: finalOptions.registration,\n login_hint: finalOptions.login_hint,\n id_token_hint: finalOptions.id_token_hint,\n web_message_uri: finalOptions.web_message_uri,\n web_message_target: finalOptions.web_message_target,\n ...finalOptions.extraParams && finalOptions.extraParams\n } as AuthRequestOptions;\n\n if ( isResponseType( 'id_token', authParams.response_type ) ||\n isScopeIncluded( 'openid', authParams.scope ) ){\n authParams.nonce = generateRandom( finalOptions.nonceLength! )\n }\n\n if ( isResponseType( 'code', authParams.response_type ) ){\n authParams.code_challenge= await deriveChallenge( localState.code_verifier )\n authParams.code_challenge_method= finalOptions.code_challenge_method || 'S256'\n }\n\n const now = this.options.currentTimeInMillis && this.options.currentTimeInMillis() || Date.now()\n const fragment = finalOptions.fragment ? `#${ finalOptions.fragment }` : '';\n const authParamsString = buildEncodedQueryString( authParams )\n const url = `${ this.options.endpoints!.authorization_endpoint }${ authParamsString }${ fragment }`\n\n // clear 1 day old state entries\n this.stateStore.clear( now - 86400000 )\n\n\n await this.stateStore.set( authParams.state!, cleanUndefined( {\n created_at: now,\n authParams,\n localState,\n request_type: finalOptions.request_type\n } ) )\n return url\n }\n\n /**\n * Create a logout request with given options\n *\n * @param options\n * @private\n */\n private async createLogoutRequest( options: LogoutRequestOptions = {} ){\n if ( !this.options.endpoints?.end_session_endpoint ){\n await this.fetchFromIssuer();\n }\n const finalOptions = mergeObjects( this.options, options )\n const logoutParams = {\n id_token_hint: finalOptions.id_token_hint,\n post_logout_redirect_uri: finalOptions.post_logout_redirect_uri,\n ...finalOptions.extraLogoutParams || {}\n }\n return `${ this.options.endpoints!.end_session_endpoint }${ buildEncodedQueryString( logoutParams ) }`\n }\n\n /**\n * Exchange authorization code retrieved from auth request result.\n * @param options\n * @private\n */\n private async exchangeAuthorizationCode( options: TokenRequestOption ){\n if ( !this.options.endpoints?.token_endpoint ){\n await this.fetchFromIssuer();\n }\n const finalOptions = mergeObjects( this.options, options )\n const { extraTokenHeaders, extraTokenParams, ...rest } = finalOptions\n const mergedOptions = {\n ...rest,\n ...extraTokenParams || {},\n grant_type: 'authorization_code',\n }\n\n for ( const req of ['code', 'redirect_uri', 'code_verifier', 'client_id'] as const ){\n if ( !mergedOptions[req] ){\n return Promise.reject( new Error( `\"${ req }\" is required` ) );\n }\n }\n\n return this.http( {\n url: `${ this.options.endpoints!.token_endpoint }`,\n method: 'POST',\n requestType: 'form',\n body: mergedOptions as any,\n headers: extraTokenHeaders\n } )\n }\n\n /**\n * Exchange refresh token with given options\n * @param options\n * @private\n */\n private async exchangeRefreshToken( options: Partial ) {\n if ( !this.options.endpoints?.token_endpoint ){\n await this.fetchFromIssuer();\n }\n const { extraTokenHeaders, extraTokenParams, ...rest } = options\n const mergedOptions = {\n grant_type: 'refresh_token',\n client_id: this.options.client_id,\n client_secret: this.options.client_secret,\n ...rest,\n ...extraTokenParams || {}\n }\n\n for ( const req of ['refresh_token', 'client_id'] as const ){\n if ( !mergedOptions[req] ){\n return Promise.reject( new Error( `\"${ req }\" is required` ) );\n }\n }\n\n return this.http( {\n url: `${ this.options.endpoints!.token_endpoint }`,\n method: 'POST',\n requestType: 'form',\n body: mergedOptions as any,\n headers: extraTokenHeaders\n } );\n }\n\n /**\n * Fetch OIDC configuration from the issuer.\n */\n private async fetchFromIssuer(): Promise>{\n try {\n const requestUrl = `${ this.options.issuer }/.well-known/openid-configuration`\n const response = await this.http( {\n url: requestUrl,\n method: 'GET',\n requestType: 'json'\n } )\n this.issuer_metadata = response as Record\n const endpoints = {} as any\n for ( const prop of Object.keys( this.issuer_metadata ) ) {\n if ( prop.endsWith( '_endpoint' ) || prop.indexOf( '_session' ) > -1 || prop.indexOf( '_uri' ) > -1 ) {\n endpoints[prop as keyof IEndpointConfiguration] = this.issuer_metadata[prop];\n }\n }\n this.options.endpoints = endpoints\n return this.issuer_metadata;\n } catch ( e ) {\n throw new OIDCClientError( 'Loading metadata failed', e.message )\n }\n }\n\n /**\n * Handle auth request result. If there is `code` exchange it.\n * @param response\n * @param finalOptions\n * @param localState\n * @private\n */\n private async handleAuthResponse(\n response: any,\n finalOptions: AuthRequestOptions,\n localState: Record = {}\n ){\n if ( response.code ){\n return this.exchangeAuthorizationCode( {\n redirect_uri: finalOptions.redirect_uri,\n client_id: finalOptions.client_id,\n code_verifier: localState.code_verifier,\n grant_type: 'authorization_code',\n code: response.code,\n } );\n } else {\n return response\n }\n }\n\n /**\n * Handle OAuth2 auth request result\n * @param tokenResult\n * @param authParams\n * @param finalOptions\n * @private\n */\n private async handleTokenResult( tokenResult: TokenResponse, authParams: AuthRequestOptions,\n finalOptions: IPlusAuthClientOptions ){\n await this.initialize( false )\n let user: any = {}\n if ( tokenResult.error ){\n throw new AuthenticationError( tokenResult.error, tokenResult.error_description )\n }\n let parsedIDToken: any;\n if ( tokenResult.id_token ){\n parsedIDToken = await validateIdToken( tokenResult.id_token, authParams.nonce!, finalOptions )\n if ( finalOptions.idTokenValidator && !await finalOptions.idTokenValidator( tokenResult.id_token ) ){\n return Promise.reject( new InvalidIdTokenError( 'Id Token validation failed' ) )\n }\n Object.keys( parsedIDToken ).forEach( key => {\n if ( !nonUserClaims.includes( key as any ) ){\n user[key] = parsedIDToken[key]\n }\n } )\n }\n\n if ( tokenResult.access_token ) {\n if ( finalOptions.requestUserInfo && this.options.endpoints?.userinfo_endpoint ) {\n const userInfoResult = await this.fetchUserInfo( tokenResult.access_token )\n if ( !userInfoResult.error ){\n user = { ...user, ...userInfoResult }\n }\n }\n }\n\n return {\n authParams,\n user,\n ...tokenResult,\n id_token: parsedIDToken,\n id_token_raw: tokenResult.id_token,\n scope: tokenResult.scope || authParams.scope,\n }\n }\n\n /**\n * Load stored state\n *\n * @param state\n * @private\n */\n private async loadState( state: string ){\n const rawStoredState = await this.stateStore.get( state )\n if ( !rawStoredState ){\n return Promise.reject( new StateNotFound( 'Local state not found', state ) )\n } else {\n await this.stateStore.del( state )\n }\n return rawStoredState\n }\n\n /**\n * Load user info by making request to providers `userinfo_endpoint`\n *\n * @param accessToken\n * @private\n */\n private async fetchUserInfo( accessToken: string ){\n return this.http( {\n method: 'GET',\n url: `${ this.options.endpoints!.userinfo_endpoint }`,\n requestType: 'json',\n headers: {\n 'Authorization': `Bearer ${ accessToken }`\n }\n } )\n }\n\n /**\n * Start monitoring End-User's session if the OIDC provider supports session management. See more at [OIDC Session\n * Management](https://openid.net/specs/openid-connect-session-1_0.html)\n *\n * @param sub End-User's id to for monitoring session\n * @param session_state string that represents the End-User's login state at the OP\n */\n private monitorSession( { sub, session_state }: SessionMonitorOptions ){\n const { client_id, endpoints } = this.options\n\n if ( !endpoints?.check_session_iframe ){\n console.warn( '\"check_session_iframe\" endpoint missing or session management is not supported by provider' )\n return\n }\n if ( !this.sessionCheckerFrame ){\n const sessionCheckCallback = async ( err: any )=>{\n if ( err ){\n this.emit( Events.USER_LOGOUT )\n } else {\n this.emit( Events.SESSION_CHANGE )\n try {\n await this.silentLogin( {}, {} )\n const storedAuth = await this.authStore.get( 'auth' )\n if ( storedAuth ){\n if ( storedAuth.user?.sub === sub && storedAuth.session_state ){\n this.sessionCheckerFrame!.start( storedAuth.session_state )\n }\n } else {\n this.emit( Events.USER_LOGOUT, null )\n }\n } catch ( e ) {\n this.emit( Events.USER_LOGOUT )\n return\n }\n }\n }\n\n this.sessionCheckerFrame = createSessionCheckerFrame( {\n url: endpoints.check_session_iframe,\n client_id: client_id,\n callback: sessionCheckCallback,\n checkInterval: this.options.checkSessionInterval,\n } )\n }\n\n this.sessionCheckerFrame.start( session_state )\n }\n\n private async onUserLogin( authObj: any, isInternal = false ){\n const { expires_in, user, scope, access_token, id_token, refresh_token, session_state, id_token_raw } = authObj\n await this.authStore.set( 'auth', authObj )\n\n this.user = user\n this.scopes = scope?.split( ' ' );\n this.accessToken = access_token\n this.idToken = id_token\n this.idTokenRaw = id_token_raw\n this.refreshToken = refresh_token\n\n if ( !isInternal ){\n this.emit( Events.USER_LOGIN, authObj )\n }\n if ( !window?.frameElement ) {\n if ( this.options.checkSession ) {\n this.monitorSession( { sub: user.sub || user.id, session_state } )\n }\n\n if ( expires_in !== undefined && this.options.autoSilentRenew ){\n const expiration = Number( expires_in ) - this.options.secondsToRefreshAccessTokenBeforeExp!\n const renew = () => {\n this.synchronizer.CallOnce( 'silent-login', async () => {\n try {\n await this.silentLogin()\n this.emit( Events.SILENT_RENEW_SUCCESS, null )\n } catch ( e ) {\n this.emit( Events.SILENT_RENEW_ERROR, e )\n }\n } )\n }\n if ( expiration >= 0 ){\n this._accessTokenExpireTimer!.start( expiration, async ()=> {\n renew()\n } )\n } else {\n renew()\n }\n }\n }\n }\n}\n","import { OIDCClient } from './client';\nimport type { IPlusAuthClientOptions } from './interfaces';\n\nexport * from './interfaces'\nexport * from './client'\nexport * from './constants'\nexport * from './helpers'\nexport * from './errors'\n\n/**\n * Create OIDC client with initializing it. It resolves issuer metadata, jwks keys and check if user is\n * authenticated in OpenId Connect provider.\n */\nexport default function createOIDCClient( options: IPlusAuthClientOptions ): Promise{\n return new OIDCClient( options ).initialize()\n}\n"],"names":["Events","USER_LOGOUT","USER_LOGIN","SILENT_RENEW_SUCCESS","SILENT_RENEW_ERROR","SESSION_CHANGE","OIDCClientError","Error","error","error_description","name","AuthenticationError","constructor","state","error_uri","StateNotFound","InvalidJWTError","details","InvalidIdTokenError","InteractionCancelled","StateStore","prefix","LocalStorageStateStore","get","key","Promise","resolve","value","window","localStorage","getItem","JSON","parse","set","setItem","stringify","del","removeItem","clear","before","i","storedKeys","length","substring","push","storedItem","created_at","e","InMemoryStateStore","map","forEach","val","ind","delete","Map","EventEmitter","once","event","fn","on","onArgs","off","apply","cb","callbacks","splice","emit","args","cbs","slice","len","Timer","start","duration","callback","expiration","now","_expiration","_timerHandle","stop","timerDuration","setInterval","clearInterval","currentTimeInMillisFunc","Date","_define_property","createHiddenFrame","iframe","document","createElement","style","width","height","position","visibility","display","title","ariaHidden","runIframe","url","options","reject","onLoadTimeoutId","timeoutSetTimeoutId","setTimeout","removeIframe","timeout","iframeEventHandler","origin","eventOrigin","data","type","eventSource","source","close","resp","response","clearTimeout","body","contains","removeChild","removeEventListener","onLoadTimeout","addEventListener","appendChild","setAttribute","onload","isValidIssuer","issuer","URL","includes","protocol","search","hash","buildEncodedQueryString","obj","appendable","ret","d","hasOwnProperty","encodeURIComponent","join","parseQueryUrl","result","trim","replace","params","split","paramAndValue","parts","decodeURIComponent","shift","urlSafe","buffer","encoded","fromByteArray","Uint8Array","request","headers","method","requestType","fetch","then","json","catch","CHARSET","getRandomBytes","n","crypto","self","msCrypto","QUOTA","a","getRandomValues","subarray","Math","min","generateRandom","out","charsLen","maxByte","buf","ceil","randomByte","charAt","deriveChallenge","code","subtle","digest","TextEncoder","encode","urlDecodeB64","input","atob","c","charCodeAt","toString","parseJwt","jwt","header","payload","validateIdToken","id_token","nonce","validateJwt","message","isIdToken","clockSkew","currentTimeInMillis","audience","client_id","iss","aud","Array","isArray","indexOf","azp","lowerNow","upperNow","floor","iat","Number","nbf","exp","nonUserClaims","DEFAULT_CHECK_INTERVAL","createSessionCheckerFrame","checkInterval","internalSessionState","idx","frameOrigin","substr","frame","timer","load","sessionState","send","contentWindow","postMessage","cleanUndefined","object","merge","previousValue","currentValue","p","undefined","mergeObjects","objects","reduce","isResponseType","response_type","filter","rt","isScopeIncluded","scope","scopes","openPopup","left","screenX","innerWidth","top","screenY","innerHeight","open","runPopup","popup","location","href","timeoutId","closeId","clearHandlers","messageListener","closed","currentTabId","performance","random","handlers","TabUtils","CallOnce","lockname","localStorageKey","keyPrefix","BroadcastMessageToAllTabs","messageId","eventData","x","events","timeStamp","getTime","OnBroadcastMessage","ev","newValue","messageData","kid","fallbackEvents","OIDCClient","initialize","checkLogin","initialized","__initializePromise","stateStore","init","authStore","endpoints","Object","keys","fetchFromIssuer","frameElement","silentLogin","localAuth","onUserLogin","login","localState","assign","createAuthRequest","loginWithPopup","popupOptions","response_mode","request_type","authParams","loadState","tokenResult","handleAuthResponse","authObject","handleTokenResult","session_state","synchronizer","loginCallback","parsedUrl","responseParams","rawStoredState","parent","host","opener","logout","localOnly","storedAuth","id_token_hint","id_token_raw","createLogoutRequest","revokeToken","token","revocation_endpoint","finalOptions","client_secret","token_type_hint","http","finalState","prompt","silent_redirect_uri","redirect_uri","useRefreshToken","refresh_token","exchangeRefreshToken","authUrl","silentRequestTimeout","getAccessToken","access_token","getRefreshToken","getIdToken","getExpiresIn","expires_in","getIdTokenRaw","getScopes","getUser","user","isLoggedIn","existsOnLocal","authorization_endpoint","code_verifier","stateLength","ui_locales","claims","claims_locales","acr_values","registration","login_hint","web_message_uri","web_message_target","extraParams","nonceLength","code_challenge","code_challenge_method","fragment","authParamsString","end_session_endpoint","logoutParams","post_logout_redirect_uri","extraLogoutParams","exchangeAuthorizationCode","token_endpoint","extraTokenHeaders","extraTokenParams","rest","mergedOptions","grant_type","req","requestUrl","issuer_metadata","prop","endsWith","parsedIDToken","idTokenValidator","requestUserInfo","userinfo_endpoint","userInfoResult","fetchUserInfo","accessToken","sub","check_session_iframe","console","warn","sessionCheckerFrame","sessionCheckCallback","err","checkSessionInterval","authObj","isInternal","idToken","idTokenRaw","refreshToken","checkSession","monitorSession","id","autoSilentRenew","secondsToRefreshAccessTokenBeforeExp","renew","_accessTokenExpireTimer","btoa","httpClient","bind","createOIDCClient"],"mappings":"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","x_google_ignoreList":[8]} \ No newline at end of file +{"version":3,"file":"oidc-client.esm.js","sources":["../src/constants/events.ts","../src/errors.ts","../src/helpers/state_manager/state_store.ts","../src/helpers/state_manager/local_storage.ts","../src/helpers/state_manager/in_memory.ts","../src/helpers/event_emitter.ts","../src/helpers/timer.ts","../src/utils/iframe.ts","../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../src/utils/url.ts","../src/utils/request.ts","../src/utils/jose.ts","../src/utils/check_session_iframe.ts","../src/utils/object.ts","../src/utils/oidc.ts","../src/utils/popup.ts","../src/utils/tab_utils.ts","../src/client.ts","../src/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/indent */\nexport const Events = {\n USER_LOGOUT: \"user_logout\",\n USER_LOGIN: \"user_login\",\n SILENT_RENEW_SUCCESS: \"silent_renew_success\",\n SILENT_RENEW_ERROR: \"silent_renew_error\",\n SESSION_CHANGE: \"session_change\",\n} as const\n\nexport type EventTypes =\n | \"user_logout\"\n | \"user_login\"\n | \"silent_renew_success\"\n | \"silent_renew_error\"\n | \"session_change\"\n | \"session_error\"\n","export class OIDCClientError extends Error {\n error: string\n\n error_description?: string\n\n public constructor(error: string, error_description?: string) {\n super(`${error}${(error_description && ` - ${error_description}`) || \"\"}`)\n this.name = \"OIDCClientError\"\n this.error = error\n this.error_description = error_description\n }\n}\n\nexport class AuthenticationError extends OIDCClientError {\n state?: string\n\n error_uri?: string\n\n constructor(error: string, error_description?: string, state?: string, error_uri?: string) {\n super(error, error_description)\n this.name = \"AuthenticationError\"\n this.state = state\n this.error_uri = error_uri\n }\n}\n\nexport class StateNotFound extends AuthenticationError {\n state?: string\n\n constructor(error: string, state?: string) {\n super(error)\n this.name = \"StateNotFound\"\n this.state = state\n }\n}\n\nexport class InvalidJWTError extends OIDCClientError {\n constructor(details: string) {\n super(details)\n this.name = \"InvalidJWTError\"\n this.error_description = details\n }\n}\n\nexport class InvalidIdTokenError extends InvalidJWTError {\n constructor(details: string) {\n super(details)\n this.name = \"InvalidIdTokenError\"\n }\n}\n\nexport class InteractionCancelled extends OIDCClientError {\n constructor(details: string) {\n super(details)\n this.name = \"InteractionCancelled\"\n }\n}\n","export interface StateStore> {\n init?(): Promise>\n}\n// biome-ignore lint/suspicious/noUnsafeDeclarationMerging:\nexport abstract class StateStore> {\n prefix: string\n\n constructor(prefix = \"\") {\n this.prefix = prefix\n }\n\n public abstract get(key: string): Promise\n\n public abstract set(key: string, value: T): Promise\n\n public abstract del(key: string): Promise\n\n public abstract clear(maxAge?: number): Promise\n}\n","import { StateStore } from \"./state_store\"\n\nexport class LocalStorageStateStore extends StateStore {\n constructor(prefix = \"pa_oidc.\") {\n super(prefix)\n }\n\n get(key: string) {\n return new Promise((resolve) => {\n const value = window.localStorage.getItem(this.prefix + key)\n if (value) {\n resolve(JSON.parse(value))\n } else {\n resolve(null)\n }\n })\n }\n\n set(key: string, value: T) {\n return new Promise((resolve) => {\n window.localStorage.setItem(this.prefix + key, JSON.stringify(value))\n resolve()\n })\n }\n\n del(key: string) {\n return new Promise((resolve) => {\n window.localStorage.removeItem(this.prefix + key)\n resolve()\n })\n }\n\n clear(before?: number): Promise {\n return new Promise((resolve) => {\n let i\n const storedKeys: string[] = []\n for (i = 0; i < window.localStorage.length; i++) {\n const key = window.localStorage.key(i)\n // items only created by oidc client\n if (key?.substring(0, this.prefix.length) === this.prefix) {\n storedKeys.push(key)\n }\n }\n for (i = 0; i < storedKeys.length; i++) {\n if (before) {\n try {\n const storedItem = JSON.parse(window.localStorage.getItem(storedKeys[i])!)\n if (storedItem.created_at < before) {\n window.localStorage.removeItem(storedKeys[i])\n }\n } catch (e) {}\n } else {\n window.localStorage.removeItem(storedKeys[i])\n }\n }\n resolve()\n })\n }\n}\n","import { StateStore } from \"./state_store\"\n\nexport class InMemoryStateStore extends StateStore {\n map = new Map()\n\n clear(before?: number) {\n if (before) {\n this.map.forEach((val, ind) => {\n if (val.created_at < before) {\n this.map.delete(ind)\n }\n })\n return Promise.resolve()\n }\n return Promise.resolve(this.map.clear())\n }\n\n del(key: string) {\n this.map.delete(key)\n return Promise.resolve()\n }\n\n get(key: string) {\n return Promise.resolve(this.map.get(key) || null)\n }\n\n set(key: string, value: any) {\n this.map.set(key, value)\n return Promise.resolve()\n }\n}\n","export type Listener = (...args: any) => void\n\nexport class EventEmitter {\n callbacks: Record\n\n constructor() {\n this.callbacks = {}\n }\n\n once(event: T, fn: (...args: any[]) => void) {\n function on(this: EventEmitter, ...onArgs: any[]) {\n this.off(event, on)\n fn.apply(this, onArgs)\n }\n on.fn = fn\n this.on(event, on)\n return this\n }\n\n on(event: T, cb: (...args: any[]) => void) {\n if (!this.callbacks[`$${event}`]) this.callbacks[`$${event}`] = []\n this.callbacks[`$${event}`].push(cb)\n return this\n }\n\n off(event?: T, fn?: (...args: any[]) => void) {\n if (!event) {\n this.callbacks = {}\n return this\n }\n\n // specific event\n const callbacks = this.callbacks[`$${event}`]\n if (!callbacks) return this\n\n // remove all handlers\n if (!fn) {\n delete this.callbacks[`$${event}`]\n return this\n }\n\n for (let i = 0; i < callbacks.length; i++) {\n const cb = callbacks[i]\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1)\n break\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this.callbacks[`$${event}`]\n }\n\n return this\n }\n\n emit(event: T, ...args: any[]) {\n let cbs = this.callbacks[`$${event}`]\n if (cbs) {\n cbs = cbs.slice(0)\n for (let i = 0, len = cbs.length; i < len; ++i) {\n cbs[i].apply(this, args)\n }\n }\n return this\n }\n}\n","export class Timer {\n private now: () => number\n\n private _timerHandle: any\n\n private _expiration!: number\n\n constructor(currentTimeInMillisFunc = () => Date.now()) {\n this.now = currentTimeInMillisFunc\n }\n\n start(duration: number, callback: () => void) {\n if (duration <= 0) {\n duration = 1\n }\n const expiration = this.now() / 1000 + duration\n if (this._expiration === expiration && this._timerHandle) {\n return\n }\n\n this.stop()\n\n this._expiration = expiration\n\n // prevent device sleep and delayed timers\n let timerDuration = 5\n if (duration < timerDuration) {\n timerDuration = duration\n }\n this._timerHandle = setInterval(() => {\n if (this._expiration <= this.now() / 1000) {\n this.stop()\n callback()\n }\n }, timerDuration * 1000)\n }\n\n stop() {\n if (this._timerHandle) {\n clearInterval(this._timerHandle)\n this._timerHandle = null\n }\n }\n}\n","import { AuthenticationError, OIDCClientError } from \"../errors\"\nimport type { IFrameOptions } from \"../interfaces\"\n\nexport function createHiddenFrame() {\n const iframe = window.document.createElement(\"iframe\")\n iframe.style.width = \"0\"\n iframe.style.height = \"0\"\n iframe.style.position = \"absolute\"\n iframe.style.visibility = \"hidden\"\n iframe.style.display = \"none\"\n\n iframe.title = \"__pa_helper__hidden\"\n iframe.ariaHidden = \"true\"\n\n return iframe\n}\n\nexport function runIframe(url: string, options: IFrameOptions) {\n return new Promise((resolve, reject) => {\n let onLoadTimeoutId: any = null\n const iframe = createHiddenFrame()\n\n const timeoutSetTimeoutId = setTimeout(\n () => {\n reject(new OIDCClientError(\"Timed out\"))\n removeIframe()\n },\n (options.timeout || 10) * 1000,\n )\n\n const iframeEventHandler = (e: MessageEvent) => {\n if (e.origin !== options.eventOrigin) return\n if (!e.data || e.data.type !== \"authorization_response\") return\n const eventSource = e.source\n if (eventSource) {\n ;(eventSource).close()\n }\n\n const resp = e.data.response || e.data\n resp.error\n ? reject(\n new AuthenticationError(resp.error, resp.error_description, resp.state, resp.error_uri),\n )\n : resolve(e.data)\n clearTimeout(timeoutSetTimeoutId)\n removeIframe()\n }\n\n const removeIframe = () => {\n if (onLoadTimeoutId != null) {\n clearTimeout(onLoadTimeoutId)\n }\n if (window.document.body.contains(iframe)) {\n window.document.body.removeChild(iframe)\n }\n window.removeEventListener(\"message\", iframeEventHandler, false)\n }\n\n const onLoadTimeout = () =>\n setTimeout(() => {\n reject(new OIDCClientError(\"Could not complete silent authentication\", url))\n removeIframe()\n }, 300)\n\n window.addEventListener(\"message\", iframeEventHandler, false)\n window.document.body.appendChild(iframe)\n iframe.setAttribute(\"src\", url)\n\n /**\n * In case of wrong client id, wrong redirect_uri, in short when redirect did not happen\n * we assume flow failed.\n */\n iframe.onload = () => {\n onLoadTimeoutId = onLoadTimeout()\n }\n })\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","import { fromByteArray } from \"base64-js\"\n\nexport function isValidIssuer(issuer: string) {\n try {\n const url = new URL(issuer)\n if (![\"http:\", \"https:\"].includes(url.protocol)) {\n return false\n }\n if (url.search !== \"\" || url.hash !== \"\") {\n return false\n }\n return true\n } catch (e) {\n return false\n }\n}\nexport function buildEncodedQueryString(obj?: Record, appendable = true) {\n if (!obj) return \"\"\n const ret: string[] = []\n for (const d in obj) {\n if (obj.hasOwnProperty(d) && obj[d]) {\n ret.push(\n `${encodeURIComponent(d)}=${encodeURIComponent(\n typeof obj[d] === \"object\" ? JSON.stringify(obj[d]) : obj[d]!,\n )}`,\n )\n }\n }\n return `${appendable ? \"?\" : \"\"}${ret.join(\"&\")}`\n}\n\nexport function parseQueryUrl(value: string) {\n const result: Record = {}\n value = value.trim().replace(/^(\\?|#|&)/, \"\")\n const params = value.split(\"&\")\n for (let i = 0; i < params.length; i += 1) {\n const paramAndValue = params[i]\n const parts = paramAndValue.split(\"=\")\n const key = decodeURIComponent(parts.shift()!)\n const value = parts.length > 0 ? parts.join(\"=\") : \"\"\n result[key] = decodeURIComponent(value)\n }\n return result\n}\n\nexport function urlSafe(buffer: Uint8Array): string {\n const encoded = fromByteArray(new Uint8Array(buffer))\n return encoded.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\")\n}\n","import { buildEncodedQueryString } from \"./url\"\n\nexport interface RequestOptions {\n body?: Record\n headers?: Record\n method: \"GET\" | \"POST\" | \"PATCH\" | \"TRACE\" | \"OPTIONS\" | \"HEAD\"\n requestType?: \"form\" | \"json\"\n url: string\n}\n\nexport function request(options: RequestOptions): Promise {\n let body: any = null\n let headers = options.headers || {}\n if (options.method === \"POST\") {\n headers = {\n \"Content-Type\":\n options.requestType === \"form\"\n ? \"application/x-www-form-urlencoded;charset=UTF-8\"\n : \"application/json;charset=UTF-8\",\n ...headers,\n }\n }\n if (options.body) {\n body =\n options.requestType === \"form\"\n ? buildEncodedQueryString(options.body, false)\n : JSON.stringify(options.body)\n }\n\n return new Promise((resolve, reject) => {\n fetch(options.url, {\n method: options.method,\n body: body,\n headers,\n })\n .then((value: Response) => resolve(value.json()))\n .catch(reject)\n })\n}\n","import { InvalidIdTokenError, InvalidJWTError, OIDCClientError } from \"../errors\"\nimport type { IPlusAuthClientOptions, JWTValidationOptions, ParsedJWT } from \"../interfaces\"\n\nimport { urlSafe } from \"./url\"\n\nconst CHARSET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"\n\nfunction getRandomBytes(n: number) {\n // @ts-ignore\n const crypto = self.crypto || self.msCrypto\n const QUOTA = 65536\n const a = new Uint8Array(n)\n for (let i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(a.subarray(i, i + Math.min(n - i, QUOTA)))\n }\n return a\n}\n\nexport function generateRandom(length: number) {\n let out = \"\"\n const charsLen = CHARSET.length\n const maxByte = 256 - (256 % charsLen)\n while (length > 0) {\n const buf = getRandomBytes(Math.ceil((length * 256) / maxByte))\n for (let i = 0; i < buf.length && length > 0; i++) {\n const randomByte = buf[i]\n if (randomByte < maxByte) {\n out += CHARSET.charAt(randomByte % charsLen)\n length--\n }\n }\n }\n return out\n}\n\nexport function deriveChallenge(code: string): Promise {\n if (code.length < 43 || code.length > 128) {\n return Promise.reject(new OIDCClientError(`Invalid code length: ${code.length}`))\n }\n\n return new Promise((resolve, reject) => {\n crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(code)).then(\n (buffer) => {\n return resolve(urlSafe(new Uint8Array(buffer)))\n },\n (error) => {\n /* istanbul ignore next */\n return reject(error)\n },\n )\n })\n}\n// https://datatracker.ietf.org/doc/html/rfc4648#section-5\nexport const urlDecodeB64 = (input: string) =>\n decodeURIComponent(\n atob(input.replace(/_/g, \"/\").replace(/-/g, \"+\"))\n .split(\"\")\n .map((c) => {\n return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`\n })\n .join(\"\"),\n )\n\nexport function parseJwt(jwt: string): ParsedJWT {\n try {\n const parts = jwt.split(\".\")\n if (parts.length !== 3) {\n throw new Error(\"Wrong JWT format\")\n }\n return {\n header: JSON.parse(urlDecodeB64(parts[0])),\n payload: JSON.parse(urlDecodeB64(parts[1])),\n }\n } catch (e) {\n throw new InvalidJWTError(\"Failed to parse jwt\")\n }\n}\n\nexport function validateIdToken(id_token: string, nonce: string, options: IPlusAuthClientOptions) {\n if (!nonce) {\n throw new OIDCClientError(\"No nonce on state\")\n }\n\n try {\n const jwt = parseJwt(id_token)\n\n if (nonce !== jwt.payload.nonce) {\n throw new Error(`Invalid nonce in id_token: ${jwt.payload.nonce}`)\n }\n\n validateJwt(id_token, options, true)\n\n // @ts-ignore\n if (!jwt.payload[\"sub\"]) {\n throw new Error(\"No Subject (sub) present in id_token\")\n }\n\n return jwt.payload\n } catch (e) {\n throw new InvalidIdTokenError(e.message)\n }\n}\n\nexport function validateJwt(jwt: string, options: JWTValidationOptions, isIdToken = false) {\n // eslint-disable-next-line prefer-const\n let { clockSkew, currentTimeInMillis, issuer, audience, client_id } = options\n if (!clockSkew) {\n clockSkew = 0\n }\n const now = (currentTimeInMillis?.() || Date.now()) / 1000\n\n const payload = parseJwt(jwt).payload\n\n if (!payload.iss) {\n throw new InvalidJWTError(\"Issuer (iss) was not provided\")\n }\n if (payload.iss !== issuer) {\n throw new InvalidJWTError(`Invalid Issuer (iss) in token: ${payload.iss}`)\n }\n\n if (!payload.aud) {\n throw new InvalidJWTError(\"Audience (aud) was not provided\")\n }\n\n // Audience must be equal to client_id in id_token\n // https://openid.net/specs/openid-connect-core-1_0.html#IDToken\n if (\n Array.isArray(payload.aud)\n ? payload.aud.indexOf(isIdToken ? client_id : audience || client_id) === -1\n : payload.aud !== (isIdToken ? client_id : audience || client_id)\n ) {\n throw new InvalidJWTError(`Invalid Audience (aud) in token: ${payload.aud}`)\n }\n\n if (payload.azp && payload.azp !== client_id) {\n throw new InvalidJWTError(`Invalid Authorized Party (azp) in token: ${payload.azp}`)\n }\n\n const lowerNow = Math.ceil(now + clockSkew)\n const upperNow = Math.floor(now - clockSkew)\n\n if (!payload.iat) {\n throw new InvalidJWTError(\"Issued At (iat) was not provided\")\n }\n\n if (lowerNow < Number(payload.iat)) {\n throw new InvalidJWTError(`Issued At (iat) is in the future: ${payload.iat}`)\n }\n\n if (payload.nbf && lowerNow < Number(payload.nbf)) {\n throw new InvalidJWTError(`Not Before time (nbf) is in the future: ${payload.nbf}`)\n }\n\n if (!payload.exp) {\n throw new InvalidJWTError(\"Expiration Time (exp) was not provided\")\n }\n if (Number(payload.exp) < upperNow) {\n throw new InvalidJWTError(`Expiration Time (exp) is in the past: ${payload.exp}`)\n }\n\n return payload\n}\n\n// Retrieved from https://www.iana.org/assignments/jwt/jwt.xhtml\nexport const nonUserClaims = [\n \"iss\",\n // 'sub',\n \"aud\",\n \"exp\",\n \"nbf\",\n \"iat\",\n \"jti\",\n \"azp\",\n \"nonce\",\n \"auth_time\",\n \"at_hash\",\n \"c_hash\",\n \"acr\",\n \"amr\",\n \"sub_jwk\",\n \"cnf\",\n \"sip_from_tag\",\n \"sip_date\",\n \"sip_callid\",\n \"sip_cseq_num\",\n \"sip_via_branch\",\n \"orig\",\n \"dest\",\n \"mky\",\n \"events\",\n \"toe\",\n \"txn\",\n \"rph\",\n \"sid\",\n \"vot\",\n \"vtm\",\n \"attest\",\n \"origid\",\n \"act\",\n \"scope\",\n \"client_id\",\n \"may_act\",\n \"jcard\",\n \"at_use_nbr\",\n] as const\n","import type { SessionChecker, SessionCheckerOptions } from \"../interfaces\"\n\nimport { createHiddenFrame } from \"./iframe\"\n\nconst DEFAULT_CHECK_INTERVAL = 2000\n\nexport function createSessionCheckerFrame(options: SessionCheckerOptions): SessionChecker {\n const { url, callback, client_id, checkInterval } = options\n let internalSessionState: string | null\n const idx = url.indexOf(\"/\", url.indexOf(\"//\") + 2)\n const frameOrigin = url.substr(0, idx)\n\n const frame = createHiddenFrame()\n\n let timer: any\n\n const load = () => {\n return new Promise((resolve) => {\n window.document.body.appendChild(frame)\n window.addEventListener(\"message\", iframeEventHandler, false)\n frame.onload = () => {\n resolve(null)\n }\n })\n }\n\n const start = (sessionState: string) => {\n load().then(() => {\n if (sessionState && internalSessionState !== sessionState) {\n stop()\n internalSessionState = sessionState\n const send = () => {\n frame.contentWindow!.postMessage(`${client_id} ${internalSessionState}`, frameOrigin)\n }\n send()\n timer = window.setInterval(send, checkInterval || DEFAULT_CHECK_INTERVAL)\n }\n })\n }\n\n const stop = () => {\n internalSessionState = null\n if (timer) {\n window.clearInterval(timer)\n timer = null\n }\n }\n\n const iframeEventHandler = (e: MessageEvent) => {\n if (e.origin === frameOrigin && e.source === frame.contentWindow) {\n if (e.data === \"error\") {\n stop()\n callback(e.data)\n } else if (e.data === \"changed\") {\n stop()\n callback()\n }\n }\n }\n\n frame.setAttribute(\"src\", url)\n\n return {\n stop,\n start,\n }\n}\n","type RequiredAndNotNull = {\n [P in keyof T]-?: Exclude\n}\n\n/**\n * not suitable for every object but it is enough for this library\n * @param object\n */\nexport function cleanUndefined>(object: T) {\n if (!object || typeof object !== \"object\") {\n return object\n }\n return JSON.parse(JSON.stringify(object)) as RequiredAndNotNull\n}\n\nfunction merge(previousValue: any, currentValue: any) {\n for (const p in currentValue) {\n if (currentValue[p] !== undefined) {\n if (typeof currentValue[p] === \"object\" && currentValue[p].constructor.name === \"Object\") {\n previousValue[p] = merge(previousValue[p] || {}, currentValue[p])\n } else {\n previousValue[p] = currentValue[p]\n }\n }\n }\n return previousValue\n}\nexport function mergeObjects(obj1: T, obj2: U): RequiredAndNotNull\nexport function mergeObjects(\n obj1: T,\n obj2: U,\n obj3: K,\n): RequiredAndNotNull\nexport function mergeObjects(...objects: any[]) {\n return objects.reduce((previousValue, currentValue) => {\n return merge(previousValue || {}, currentValue)\n }, {}) as any\n}\n","export const isResponseType = (type: string, response_type?: string) =>\n response_type && response_type.split(/\\s+/g).filter((rt) => rt === type).length > 0\n\nexport const isScopeIncluded = (scope: string, scopes?: string) =>\n scopes && scopes.split(\" \").indexOf(scope) > -1\n","import { InteractionCancelled, OIDCClientError } from \"../errors\"\nimport type { PopupOptions } from \"../interfaces\"\n\nconst openPopup = (url: string, width = 400, height = 600) => {\n const left = window.screenX + (window.innerWidth - width) / 2\n const top = window.screenY + (window.innerHeight - height) / 2\n\n return window.open(\n url,\n \"oidc-login-popup\",\n `left=${left},top=${top},width=${width},height=${height},resizable,scrollbars=yes,status=1`,\n )\n}\n\nexport function runPopup(url: string, options: PopupOptions) {\n let popup = options.popup\n\n if (popup) {\n popup.location.href = url\n } else {\n popup = openPopup(url)\n }\n\n if (!popup) {\n /* istanbul ignore next */\n throw new Error(\"Could not open popup\")\n }\n\n let timeoutId: any\n let closeId: any\n\n return new Promise<{ response: any; state: string }>((resolve, reject) => {\n function clearHandlers() {\n clearInterval(closeId)\n clearTimeout(timeoutId)\n window.removeEventListener(\"message\", messageListener)\n }\n\n timeoutId = setTimeout(\n () => {\n clearHandlers()\n reject(new OIDCClientError(\"Timed out\"))\n },\n options.timeout || 60 * 1000,\n )\n\n closeId = setInterval(() => {\n if (popup!.closed) {\n clearHandlers()\n reject(new InteractionCancelled(\"user closed popup\"))\n }\n }, 300)\n\n window.addEventListener(\"message\", messageListener)\n\n function messageListener(e: MessageEvent) {\n if (!e.data || e.data.type !== \"authorization_response\") return\n clearHandlers()\n popup!.close()\n const data = e.data.response || e.data\n data.error ? reject(new OIDCClientError(data.error, data.error_description)) : resolve(e.data)\n }\n })\n}\n","/*\nJitbit TabUtils - helper for multiple browser tabs. version 1.0\nhttps://github.com/jitbit/TabUtils\n- executing \"interlocked\" function call - only once per multiple tabs\n- broadcasting a message to all tabs (including the current one) with some message \"data\"\n- handling a broadcasted message\nMIT license: https://github.com/jitbit/TabUtils/blob/master/LICENSE\n*/\n\nimport type { EventEmitter } from \"../helpers\"\n\nconst currentTabId = `${performance.now()}:${(Math.random() * 1000000000) | 0}`\nconst handlers: Record = {}\n\nexport class TabUtils {\n keyPrefix: string\n\n private events: EventEmitter\n\n constructor(kid: string, fallbackEvents: EventEmitter) {\n this.keyPrefix = kid\n this.events = fallbackEvents\n }\n\n //runs code only once in multiple tabs\n //the lock holds for 4 seconds (in case the function is async and returns right away, for example, an ajax call intiated)\n //then it is cleared\n CallOnce(lockname: string, fn: () => void, timeout = 3000): void {\n if (!lockname) throw \"empty lockname\"\n\n if (!window.localStorage) {\n //no local storage. old browser. screw it, just run the function\n fn()\n return\n }\n\n const localStorageKey = this.keyPrefix + lockname\n\n localStorage.setItem(localStorageKey, currentTabId)\n //re-read after a delay (after all tabs have saved their tabIDs into ls)\n setTimeout(() => {\n if (localStorage.getItem(localStorageKey) === currentTabId) fn()\n }, 150)\n\n //cleanup - release the lock after 3 seconds and on window unload (just in case user closed the window while the lock is still held)\n setTimeout(() => {\n localStorage.removeItem(localStorageKey)\n }, timeout)\n }\n\n BroadcastMessageToAllTabs(messageId: string, eventData: any): void {\n //now we also need to manually execute handler in the current tab too, because current tab does not get 'storage' events\n try {\n handlers[messageId](eventData)\n } catch (x) {\n //\"try\" in case handler not found\n }\n\n if (!window.localStorage) {\n this.events.emit(messageId, eventData)\n return //no local storage. old browser\n }\n\n const data = {\n data: eventData,\n timeStamp: new Date().getTime(),\n } //add timestamp because overwriting same data does not trigger the event\n\n //this triggers 'storage' event for all other tabs except the current tab\n localStorage.setItem(`${this.keyPrefix}event${messageId}`, JSON.stringify(data))\n\n //cleanup\n setTimeout(() => {\n localStorage.removeItem(`${this.keyPrefix}event${messageId}`)\n }, 3000)\n }\n\n OnBroadcastMessage(messageId: string, fn: (data: any) => void): void {\n handlers[messageId] = fn\n if (!window.localStorage) {\n this.events.on(messageId, fn)\n return //no local storage. old browser\n }\n\n //first register a handler for \"storage\" event that we trigger above\n window.addEventListener(\"storage\", (ev) => {\n if (ev.key !== `${this.keyPrefix}event${messageId}`) return // ignore other keys\n if (!ev.newValue) return //called by cleanup?\n const messageData = JSON.parse(ev.newValue)\n fn(messageData.data)\n })\n }\n}\n","import type { EventTypes } from \"./constants\"\nimport { Events } from \"./constants\"\n\nimport { AuthenticationError, InvalidIdTokenError, OIDCClientError, StateNotFound } from \"./errors\"\n\nimport type { StateStore } from \"./helpers\"\nimport { EventEmitter, InMemoryStateStore, LocalStorageStateStore } from \"./helpers\"\n\nimport { Timer } from \"./helpers/timer\"\nimport type {\n AuthRecord,\n AuthRequestOptions,\n IEndpointConfiguration,\n IPlusAuthClientOptions,\n LogoutRequestOptions,\n PopupOptions,\n RevokeOptions,\n SessionChecker,\n SessionMonitorOptions,\n StateRecord,\n TokenRequestOption,\n TokenResponse,\n TokenType,\n} from \"./interfaces\"\n\nimport type { RequestOptions } from \"./utils\"\nimport {\n buildEncodedQueryString,\n createSessionCheckerFrame,\n deriveChallenge,\n generateRandom,\n isValidIssuer,\n nonUserClaims,\n parseQueryUrl,\n request,\n runIframe,\n validateIdToken,\n} from \"./utils\"\nimport { cleanUndefined, mergeObjects } from \"./utils/object\"\n\nimport { isResponseType, isScopeIncluded } from \"./utils/oidc\"\nimport { runPopup } from \"./utils/popup\"\nimport { TabUtils } from \"./utils/tab_utils\"\n\n/**\n * `OIDCClient` provides methods for interacting with OIDC/OAuth2 authorization server. Those methods are signing a\n * user in, signing out, managing the user's claims, checking session and managing tokens returned from the\n * OIDC/OAuth2 provider.\n *\n */\nexport class OIDCClient extends EventEmitter {\n options: IPlusAuthClientOptions\n\n user?: any\n\n scopes?: string[]\n\n accessToken?: string\n\n refreshToken?: string\n\n idToken?: string\n\n idTokenRaw?: string\n\n issuer_metadata?: Record\n\n private readonly http: (options: RequestOptions) => Promise | never\n\n private synchronizer: TabUtils\n\n private stateStore: StateStore\n\n private authStore: StateStore\n\n private sessionCheckerFrame?: SessionChecker\n\n private _accessTokenExpireTimer?: Timer\n\n private initialized!: boolean\n\n private __initializePromise!: Promise | undefined\n\n constructor(options: IPlusAuthClientOptions) {\n super()\n if (!isValidIssuer(options.issuer)) {\n throw new OIDCClientError('\"issuer\" must be a valid uri.')\n }\n\n this.synchronizer = new TabUtils(btoa(options.issuer), this)\n\n this.options = mergeObjects(\n {\n secondsToRefreshAccessTokenBeforeExp: 60,\n autoSilentRenew: true,\n checkSession: true,\n stateLength: 10,\n nonceLength: 10,\n },\n options,\n {\n // remove last slash for consistency across the lib\n issuer: options.issuer.endsWith(\"/\") ? options.issuer.slice(0, -1) : options.issuer,\n },\n )\n\n this.http = this.options.httpClient || request\n this.stateStore =\n this.options.stateStore || new LocalStorageStateStore(\"pa_oidc.state.\")\n this.authStore = this.options.authStore || new InMemoryStateStore()\n\n if (this.options.autoSilentRenew) {\n this._accessTokenExpireTimer = new Timer()\n }\n\n this.on(Events.USER_LOGOUT, async () => {\n this.user = undefined\n this.scopes = undefined\n this.accessToken = undefined\n this.idToken = undefined\n this.refreshToken = undefined\n await this.authStore.clear()\n })\n\n this.synchronizer.OnBroadcastMessage(Events.USER_LOGIN, this.onUserLogin.bind(this))\n }\n\n /**\n * Initialize the library with this method. It resolves issuer configuration, jwks keys which are necessary for\n * validating tokens returned from provider and checking if a user is already authenticated in provider.\n *\n * @param checkLogin Make this `false` if you don't want to check user authorization status in provider while\n * initializing. Defaults to `true`\n */\n async initialize(checkLogin = true): Promise | never {\n if (this.initialized) {\n return this\n }\n\n if (this.__initializePromise) {\n return this.__initializePromise\n }\n this.__initializePromise = new Promise(async (resolve, reject) => {\n try {\n if (this.stateStore.init) {\n await this.stateStore.init()\n }\n if (this.authStore.init) {\n await this.authStore.init()\n }\n\n if (!this.options.endpoints || Object.keys(this.options.endpoints).length === 0) {\n await this.fetchFromIssuer()\n }\n this.initialized = true\n\n if (checkLogin) {\n try {\n if (!window?.frameElement) {\n await this.silentLogin()\n }\n } catch (e) {\n this.emit(Events.SILENT_RENEW_ERROR, e)\n await this.authStore.clear()\n }\n } else {\n const localAuth = await this.authStore.get(\"auth\")\n if (localAuth) {\n await this.onUserLogin(localAuth, true)\n }\n }\n resolve(this)\n } catch (e) {\n if (e instanceof OIDCClientError) {\n reject(e)\n } else {\n reject(new OIDCClientError(e.message))\n }\n } finally {\n this.__initializePromise = undefined\n }\n })\n\n return this.__initializePromise\n }\n\n /**\n * Redirect to provider's authorization endpoint using provided parameters. You can override any parameter defined\n * in `OIDCClient`. If you don't provide `state`, `nonce` or `code_verifier` they will be generated automatically\n * in a random and secure way.\n *\n * @param options\n * @param localState\n */\n async login(options: Partial = {}, localState: Record = {}) {\n window.location.assign(await this.createAuthRequest(options, localState))\n }\n\n /**\n * Open a popup with the provider's authorization endpoint using provided parameters. You can override any\n * parameter defined in `OIDCClient`. If you don't provide `state`, `nonce` or `code_verifier` they will be\n * generated automatically in a random and secure way. You can also override popup options.\n *\n * NOTE: Most browsers block popups if they are not happened as a result of user actions. In order to display\n * login popup you must call this method in an event handler listening for a user action like button click.\n *\n * @param options\n * @param popupOptions\n */\n async loginWithPopup(options: Partial = {}, popupOptions: PopupOptions = {}) {\n const url = await this.createAuthRequest({\n response_mode: \"fragment\",\n ...options,\n display: \"popup\",\n request_type: \"p\",\n })\n const { response, state } = await runPopup(url, popupOptions)\n const { authParams, localState } =\n !state || typeof state === \"string\" ? await this.loadState(state || response.state) : state\n const tokenResult = await this.handleAuthResponse(response, authParams, localState)\n const authObject = await this.handleTokenResult(\n tokenResult,\n authParams,\n mergeObjects(this.options, authParams),\n )\n authObject.session_state = response.session_state\n this.synchronizer.BroadcastMessageToAllTabs(Events.USER_LOGIN, authObject)\n return localState\n }\n\n /**\n * After a user successfully authorizes an application, the authorization server will redirect the user back to\n * the application with either an authorization code or access token in the URL. In the callback page you should\n * call this method.\n *\n * @param url Full url which contains authorization request result parameters. Defaults to `window.location.href`\n */\n async loginCallback(url: string = window?.location?.href) {\n if (!url) {\n return Promise.reject(new OIDCClientError(\"Url must be passed to handle login redirect\"))\n }\n let parsedUrl: URL\n try {\n parsedUrl = new URL(url)\n } catch (e) {\n return Promise.reject(new OIDCClientError(`Invalid callback url passed: \"${url}\"`))\n }\n\n const responseParams = parseQueryUrl(parsedUrl.search || parsedUrl.hash)\n const rawStoredState = await this.loadState(responseParams.state)\n const { authParams, localState, request_type } = rawStoredState\n url = url || window.location.href\n switch (request_type) {\n case \"s\":\n if (window?.frameElement) {\n if (url) {\n window.parent.postMessage(\n {\n type: \"authorization_response\",\n response: responseParams,\n state: rawStoredState,\n },\n `${location.protocol}//${location.host}`,\n )\n }\n }\n return\n case \"p\":\n if (window.opener && url) {\n window.opener.postMessage(\n {\n type: \"authorization_response\",\n response: responseParams,\n state: rawStoredState,\n },\n `${location.protocol}//${location.host}`,\n )\n }\n return\n default: {\n if (responseParams.error) {\n return Promise.reject(\n new AuthenticationError(responseParams.error, responseParams.error_description),\n )\n }\n const tokenResult = await this.handleAuthResponse(responseParams, authParams, localState)\n const authObject = await this.handleTokenResult(\n tokenResult,\n authParams,\n mergeObjects(this.options, authParams),\n )\n authObject.session_state = responseParams.session_state\n this.synchronizer.BroadcastMessageToAllTabs(Events.USER_LOGIN, authObject)\n return localState\n }\n }\n }\n\n /**\n * Redirect to provider's `end_session_endpoint` with provided parameters. After logout provider will redirect to\n * provided `post_logout_redirect_uri` if it provided.\n * @param options\n */\n async logout(options: LogoutRequestOptions = {}) {\n if (!options.localOnly) {\n const storedAuth = await this.authStore.get(\"auth\")\n const id_token_hint = options.id_token_hint || storedAuth?.id_token_raw\n window.location.assign(\n await this.createLogoutRequest({\n ...options,\n id_token_hint,\n }),\n )\n }\n await this.authStore.clear()\n }\n\n /**\n * OAuth2 token revocation implementation method. See more at [tools.ietf.org/html/rfc7009](https://tools.ietf.org/html/rfc7009)\n * @param token Token to be revoked\n * @param type Passed token's type. It will be used to provide `token_type_hint` parameter.\n * @param options If necessary override options passed to `OIDCClient` by defining them here.\n */\n async revokeToken(token: string, type: TokenType = \"access_token\", options: RevokeOptions = {}) {\n if (!this.options.endpoints!.revocation_endpoint) {\n return Promise.reject(new OIDCClientError('\"revocation_endpoint\" doesn\\'t exist'))\n }\n const finalOptions = {\n client_id: options.client_id || this.options.client_id,\n client_secret: options.client_secret || this.options.client_secret,\n token_type_hint: type,\n token: token,\n }\n\n return this.http({\n method: \"POST\",\n requestType: \"form\",\n url: this.options.endpoints!.revocation_endpoint,\n body: finalOptions,\n })\n }\n\n /**\n * Login without having an interaction. If refresh tokens are used and there is a stored refresh token it will\n * exchange refresh token to receive new access token. If not it silently makes a request the provider's\n * authorization endpoint using provided parameters. You can override any parameter defined in `OIDCClient`. If\n * you don't provide `state`, `nonce` or `code_verifier` they will be generated automatically in a random and\n * secure way.\n *\n * @param options\n * @param localState\n */\n async silentLogin(options: AuthRequestOptions = {}, localState: Record = {}) {\n await this.initialize(false)\n let tokenResult: any\n let finalState: any = {}\n\n const storedAuth = (await this.authStore.get(\"auth\")) || {}\n\n const finalOptions = mergeObjects(\n {\n response_mode: \"query\",\n display: \"page\",\n prompt: \"none\",\n },\n this.options,\n options,\n )\n\n if (finalOptions.silent_redirect_uri) {\n finalOptions.redirect_uri = finalOptions.silent_redirect_uri\n }\n\n if (this.options.useRefreshToken && storedAuth?.refresh_token) {\n finalState.authParams = mergeObjects(\n storedAuth?.authParams || {},\n finalState.authParams || {},\n )\n tokenResult = await this.exchangeRefreshToken({\n ...finalOptions,\n refresh_token: storedAuth.refresh_token,\n })\n } else {\n const authUrl = await this.createAuthRequest(\n {\n ...finalOptions,\n request_type: \"s\",\n },\n localState,\n )\n\n const { response, state } = await runIframe(authUrl, {\n timeout: finalOptions.silentRequestTimeout,\n eventOrigin: window.location.origin,\n })\n tokenResult = await this.handleAuthResponse(response, finalOptions, localState)\n storedAuth.session_state = response.session_state\n finalState = state\n }\n\n const authObject = await this.handleTokenResult(\n tokenResult,\n finalState.authParams,\n finalOptions,\n )\n authObject.session_state = storedAuth.session_state\n this.synchronizer.BroadcastMessageToAllTabs(Events.USER_LOGIN, authObject)\n return finalState.localState\n }\n\n /**\n * Retrieve logged in user's access token if it exists.\n */\n async getAccessToken() {\n return (await this.authStore.get(\"auth\"))?.access_token\n }\n\n /**\n * Retrieve logged in user's refresh token if it exists.\n */\n async getRefreshToken() {\n return (await this.authStore.get(\"auth\"))?.refresh_token\n }\n\n /**\n * Retrieve logged in user's parsed id token if it exists.\n */\n async getIdToken() {\n return (await this.authStore.get(\"auth\"))?.id_token\n }\n\n /**\n * Retrieve access token's expiration.\n */\n async getExpiresIn() {\n return (await this.authStore.get(\"auth\"))?.expires_in\n }\n\n /**\n * Retrieve logged in user's id token in raw format if it exists.\n */\n async getIdTokenRaw() {\n return (await this.authStore.get(\"auth\"))?.id_token_raw\n }\n\n /**\n * Retrieve logged in user's scopes if it exists.\n */\n async getScopes() {\n return (await this.authStore.get(\"auth\"))?.scope?.split(\" \")\n }\n\n /**\n * Retrieve logged in user's profile.\n */\n async getUser() {\n return (await this.authStore.get(\"auth\"))?.user\n }\n\n /**\n * If there is a user stored locally return true. Otherwise it will make a silentLogin to check if End-User is\n * logged in provider.\n *\n * @param localOnly Don't check provider\n */\n async isLoggedIn(localOnly = false) {\n const existsOnLocal = !!(await this.getUser())\n if (!existsOnLocal && !localOnly) {\n try {\n await this.silentLogin()\n return true\n } catch (e) {\n return false\n }\n }\n return existsOnLocal\n }\n\n /**\n * Create authorization request with provided options.\n *\n * @param options\n * @param localState\n * @private\n */\n private async createAuthRequest(\n options: Partial = {},\n localState: Record = {},\n ): Promise {\n if (!this.options.endpoints?.authorization_endpoint) {\n await this.initialize(false)\n }\n // TODO: deep merge for extra params\n const finalOptions = Object.assign({}, this.options, options)\n localState.code_verifier = generateRandom(72)\n\n const authParams = {\n client_id: finalOptions.client_id,\n state: generateRandom(finalOptions.stateLength!),\n scope: finalOptions.scope,\n audience: finalOptions.audience,\n redirect_uri: finalOptions.redirect_uri,\n response_mode: finalOptions.response_mode,\n response_type: finalOptions.response_type || \"code\",\n ui_locales: finalOptions.ui_locales,\n prompt: finalOptions.prompt,\n display: finalOptions.display,\n claims: finalOptions.claims,\n claims_locales: finalOptions.claims_locales,\n acr_values: finalOptions.acr_values,\n registration: finalOptions.registration,\n login_hint: finalOptions.login_hint,\n id_token_hint: finalOptions.id_token_hint,\n web_message_uri: finalOptions.web_message_uri,\n web_message_target: finalOptions.web_message_target,\n ...(finalOptions.extraParams && finalOptions.extraParams),\n } as AuthRequestOptions\n\n if (\n isResponseType(\"id_token\", authParams.response_type) ||\n isScopeIncluded(\"openid\", authParams.scope)\n ) {\n authParams.nonce = generateRandom(finalOptions.nonceLength!)\n }\n\n if (isResponseType(\"code\", authParams.response_type)) {\n authParams.code_challenge = await deriveChallenge(localState.code_verifier)\n authParams.code_challenge_method = finalOptions.code_challenge_method || \"S256\"\n }\n\n const now = this.options.currentTimeInMillis?.() || Date.now()\n const fragment = finalOptions.fragment ? `#${finalOptions.fragment}` : \"\"\n const authParamsString = buildEncodedQueryString(authParams)\n const url = `${this.options.endpoints!.authorization_endpoint}${authParamsString}${fragment}`\n\n // clear 1 day old state entries\n this.stateStore.clear(now - 86400000)\n\n await this.stateStore.set(\n authParams.state!,\n cleanUndefined({\n created_at: now,\n authParams,\n localState,\n request_type: finalOptions.request_type,\n }),\n )\n return url\n }\n\n /**\n * Create a logout request with given options\n *\n * @param options\n * @private\n */\n private async createLogoutRequest(options: LogoutRequestOptions = {}) {\n if (!this.options.endpoints?.end_session_endpoint) {\n await this.fetchFromIssuer()\n }\n const finalOptions = mergeObjects(this.options, options)\n const logoutParams = {\n id_token_hint: finalOptions.id_token_hint,\n post_logout_redirect_uri: finalOptions.post_logout_redirect_uri,\n ...(finalOptions.extraLogoutParams || {}),\n }\n return `${this.options.endpoints!.end_session_endpoint}${buildEncodedQueryString(logoutParams)}`\n }\n\n /**\n * Exchange authorization code retrieved from auth request result.\n * @param options\n * @private\n */\n private async exchangeAuthorizationCode(options: TokenRequestOption) {\n if (!this.options.endpoints?.token_endpoint) {\n await this.fetchFromIssuer()\n }\n const finalOptions = mergeObjects(this.options, options)\n const { extraTokenHeaders, extraTokenParams, ...rest } = finalOptions\n const mergedOptions = {\n ...rest,\n ...(extraTokenParams || {}),\n grant_type: \"authorization_code\",\n }\n\n for (const req of [\"code\", \"redirect_uri\", \"code_verifier\", \"client_id\"] as const) {\n if (!mergedOptions[req]) {\n return Promise.reject(new Error(`\"${req}\" is required`))\n }\n }\n\n return this.http({\n url: `${this.options.endpoints!.token_endpoint}`,\n method: \"POST\",\n requestType: \"form\",\n body: mergedOptions as any,\n headers: extraTokenHeaders,\n })\n }\n\n /**\n * Exchange refresh token with given options\n * @param options\n * @private\n */\n private async exchangeRefreshToken(options: Partial) {\n if (!this.options.endpoints?.token_endpoint) {\n await this.fetchFromIssuer()\n }\n const { extraTokenHeaders, extraTokenParams, ...rest } = options\n const mergedOptions = {\n grant_type: \"refresh_token\",\n client_id: this.options.client_id,\n client_secret: this.options.client_secret,\n ...rest,\n ...(extraTokenParams || {}),\n }\n\n for (const req of [\"refresh_token\", \"client_id\"] as const) {\n if (!mergedOptions[req]) {\n return Promise.reject(new Error(`\"${req}\" is required`))\n }\n }\n\n return this.http({\n url: `${this.options.endpoints!.token_endpoint}`,\n method: \"POST\",\n requestType: \"form\",\n body: mergedOptions as any,\n headers: extraTokenHeaders,\n })\n }\n\n /**\n * Fetch OIDC configuration from the issuer.\n */\n private async fetchFromIssuer(): Promise> {\n try {\n const requestUrl = `${this.options.issuer}/.well-known/openid-configuration`\n const response = await this.http({\n url: requestUrl,\n method: \"GET\",\n requestType: \"json\",\n })\n this.issuer_metadata = response as Record\n const endpoints = {} as any\n for (const prop of Object.keys(this.issuer_metadata)) {\n if (\n prop.endsWith(\"_endpoint\") ||\n prop.indexOf(\"_session\") > -1 ||\n prop.indexOf(\"_uri\") > -1\n ) {\n endpoints[prop as keyof IEndpointConfiguration] = this.issuer_metadata[prop]\n }\n }\n this.options.endpoints = endpoints\n return this.issuer_metadata\n } catch (e) {\n throw new OIDCClientError(\"Loading metadata failed\", e.message)\n }\n }\n\n /**\n * Handle auth request result. If there is `code` exchange it.\n * @param response\n * @param finalOptions\n * @param localState\n * @private\n */\n private async handleAuthResponse(\n response: any,\n finalOptions: AuthRequestOptions,\n localState: Record = {},\n ) {\n if (response.code) {\n return this.exchangeAuthorizationCode({\n redirect_uri: finalOptions.redirect_uri,\n client_id: finalOptions.client_id,\n code_verifier: localState.code_verifier,\n grant_type: \"authorization_code\",\n code: response.code,\n })\n }\n return response\n }\n\n /**\n * Handle OAuth2 auth request result\n * @param tokenResult\n * @param authParams\n * @param finalOptions\n * @private\n */\n private async handleTokenResult(\n tokenResult: TokenResponse,\n authParams: AuthRequestOptions,\n finalOptions: IPlusAuthClientOptions,\n ) {\n await this.initialize(false)\n let user: any = {}\n if (tokenResult.error) {\n throw new AuthenticationError(tokenResult.error, tokenResult.error_description)\n }\n let parsedIDToken: any\n if (tokenResult.id_token) {\n parsedIDToken = await validateIdToken(tokenResult.id_token, authParams.nonce!, finalOptions)\n if (\n finalOptions.idTokenValidator &&\n !(await finalOptions.idTokenValidator(tokenResult.id_token))\n ) {\n return Promise.reject(new InvalidIdTokenError(\"Id Token validation failed\"))\n }\n Object.keys(parsedIDToken).forEach((key) => {\n if (!nonUserClaims.includes(key as any)) {\n user[key] = parsedIDToken[key]\n }\n })\n }\n\n if (tokenResult.access_token) {\n if (finalOptions.requestUserInfo && this.options.endpoints?.userinfo_endpoint) {\n const userInfoResult = await this.fetchUserInfo(tokenResult.access_token)\n if (!userInfoResult.error) {\n user = { ...user, ...userInfoResult }\n }\n }\n }\n\n return {\n authParams,\n user,\n ...tokenResult,\n id_token: parsedIDToken,\n id_token_raw: tokenResult.id_token,\n scope: tokenResult.scope || authParams.scope,\n }\n }\n\n /**\n * Load stored state\n *\n * @param state\n * @private\n */\n private async loadState(state: string) {\n const rawStoredState = await this.stateStore.get(state)\n if (!rawStoredState) {\n return Promise.reject(new StateNotFound(\"Local state not found\", state))\n }\n await this.stateStore.del(state)\n return rawStoredState\n }\n\n /**\n * Load user info by making request to providers `userinfo_endpoint`\n *\n * @param accessToken\n * @private\n */\n private async fetchUserInfo(accessToken: string) {\n return this.http({\n method: \"GET\",\n url: `${this.options.endpoints!.userinfo_endpoint}`,\n requestType: \"json\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n }\n\n /**\n * Start monitoring End-User's session if the OIDC provider supports session management. See more at [OIDC Session\n * Management](https://openid.net/specs/openid-connect-session-1_0.html)\n *\n * @param sub End-User's id to for monitoring session\n * @param session_state string that represents the End-User's login state at the OP\n */\n private monitorSession({ sub, session_state }: SessionMonitorOptions) {\n const { client_id, endpoints } = this.options\n\n if (!endpoints?.check_session_iframe) {\n console.warn(\n '\"check_session_iframe\" endpoint missing or session management is not supported by provider',\n )\n return\n }\n if (!this.sessionCheckerFrame) {\n const sessionCheckCallback = async (err: any) => {\n if (err) {\n this.emit(Events.USER_LOGOUT)\n } else {\n this.emit(Events.SESSION_CHANGE)\n try {\n await this.silentLogin({}, {})\n const storedAuth = await this.authStore.get(\"auth\")\n if (storedAuth) {\n if (storedAuth.user?.sub === sub && storedAuth.session_state) {\n this.sessionCheckerFrame!.start(storedAuth.session_state)\n }\n } else {\n this.emit(Events.USER_LOGOUT, null)\n }\n } catch (e) {\n this.emit(Events.USER_LOGOUT)\n return\n }\n }\n }\n\n this.sessionCheckerFrame = createSessionCheckerFrame({\n url: endpoints.check_session_iframe,\n client_id: client_id,\n callback: sessionCheckCallback,\n checkInterval: this.options.checkSessionInterval,\n })\n }\n\n this.sessionCheckerFrame.start(session_state)\n }\n\n private async onUserLogin(authObj: any, isInternal = false) {\n const {\n expires_in,\n user,\n scope,\n access_token,\n id_token,\n refresh_token,\n session_state,\n id_token_raw,\n } = authObj\n await this.authStore.set(\"auth\", authObj)\n\n this.user = user\n this.scopes = scope?.split(\" \")\n this.accessToken = access_token\n this.idToken = id_token\n this.idTokenRaw = id_token_raw\n this.refreshToken = refresh_token\n\n if (!isInternal) {\n this.emit(Events.USER_LOGIN, authObj)\n }\n if (!window?.frameElement) {\n if (this.options.checkSession) {\n this.monitorSession({ sub: user.sub || user.id, session_state })\n }\n\n if (expires_in !== undefined && this.options.autoSilentRenew) {\n const expiration = Number(expires_in) - this.options.secondsToRefreshAccessTokenBeforeExp!\n const renew = () => {\n this.synchronizer.CallOnce(\"silent-login\", async () => {\n try {\n await this.silentLogin()\n this.emit(Events.SILENT_RENEW_SUCCESS, null)\n } catch (e) {\n this.emit(Events.SILENT_RENEW_ERROR, e)\n }\n })\n }\n if (expiration >= 0) {\n this._accessTokenExpireTimer!.start(expiration, async () => {\n renew()\n })\n } else {\n renew()\n }\n }\n }\n }\n}\n","import { OIDCClient } from \"./client\"\nimport type { IPlusAuthClientOptions } from \"./interfaces\"\n\nexport * from \"./interfaces\"\nexport * from \"./client\"\nexport * from \"./constants\"\nexport * from \"./helpers\"\nexport * from \"./errors\"\n\n/**\n * Create OIDC client with initializing it. It resolves issuer metadata, jwks keys and check if user is\n * authenticated in OpenId Connect provider.\n */\nexport default function createOIDCClient(options: IPlusAuthClientOptions): Promise {\n return new OIDCClient(options).initialize()\n}\n"],"names":["Events","USER_LOGOUT","USER_LOGIN","SILENT_RENEW_SUCCESS","SILENT_RENEW_ERROR","SESSION_CHANGE","OIDCClientError","Error","error","error_description","name","AuthenticationError","constructor","state","error_uri","StateNotFound","InvalidJWTError","details","InvalidIdTokenError","InteractionCancelled","StateStore","prefix","LocalStorageStateStore","get","key","Promise","resolve","value","window","localStorage","getItem","JSON","parse","set","setItem","stringify","del","removeItem","clear","before","i","storedKeys","length","substring","push","storedItem","created_at","e","InMemoryStateStore","map","forEach","val","ind","delete","Map","EventEmitter","once","event","fn","on","onArgs","off","apply","cb","callbacks","splice","emit","args","cbs","slice","len","Timer","start","duration","callback","expiration","now","_expiration","_timerHandle","stop","timerDuration","setInterval","clearInterval","currentTimeInMillisFunc","Date","_define_property","createHiddenFrame","iframe","document","createElement","style","width","height","position","visibility","display","title","ariaHidden","runIframe","url","options","reject","onLoadTimeoutId","timeoutSetTimeoutId","setTimeout","removeIframe","timeout","iframeEventHandler","origin","eventOrigin","data","type","eventSource","source","close","resp","response","clearTimeout","body","contains","removeChild","removeEventListener","onLoadTimeout","addEventListener","appendChild","setAttribute","onload","isValidIssuer","issuer","URL","includes","protocol","search","hash","buildEncodedQueryString","obj","appendable","ret","d","hasOwnProperty","encodeURIComponent","join","parseQueryUrl","result","trim","replace","params","split","paramAndValue","parts","decodeURIComponent","shift","urlSafe","buffer","encoded","fromByteArray","Uint8Array","request","headers","method","requestType","fetch","then","json","catch","CHARSET","getRandomBytes","n","crypto","self","msCrypto","QUOTA","a","getRandomValues","subarray","Math","min","generateRandom","out","charsLen","maxByte","buf","ceil","randomByte","charAt","deriveChallenge","code","subtle","digest","TextEncoder","encode","urlDecodeB64","input","atob","c","charCodeAt","toString","parseJwt","jwt","header","payload","validateIdToken","id_token","nonce","validateJwt","message","isIdToken","clockSkew","currentTimeInMillis","audience","client_id","iss","aud","Array","isArray","indexOf","azp","lowerNow","upperNow","floor","iat","Number","nbf","exp","nonUserClaims","DEFAULT_CHECK_INTERVAL","createSessionCheckerFrame","checkInterval","internalSessionState","idx","frameOrigin","substr","frame","timer","load","sessionState","send","contentWindow","postMessage","cleanUndefined","object","merge","previousValue","currentValue","p","undefined","mergeObjects","objects","reduce","isResponseType","response_type","filter","rt","isScopeIncluded","scope","scopes","openPopup","left","screenX","innerWidth","top","screenY","innerHeight","open","runPopup","popup","location","href","timeoutId","closeId","clearHandlers","messageListener","closed","currentTabId","performance","random","handlers","TabUtils","CallOnce","lockname","localStorageKey","keyPrefix","BroadcastMessageToAllTabs","messageId","eventData","x","events","timeStamp","getTime","OnBroadcastMessage","ev","newValue","messageData","kid","fallbackEvents","OIDCClient","initialize","checkLogin","initialized","__initializePromise","stateStore","init","authStore","endpoints","Object","keys","fetchFromIssuer","frameElement","silentLogin","localAuth","onUserLogin","login","localState","assign","createAuthRequest","loginWithPopup","popupOptions","response_mode","request_type","authParams","loadState","tokenResult","handleAuthResponse","authObject","handleTokenResult","session_state","synchronizer","loginCallback","parsedUrl","responseParams","rawStoredState","parent","host","opener","logout","localOnly","storedAuth","id_token_hint","id_token_raw","createLogoutRequest","revokeToken","token","revocation_endpoint","finalOptions","client_secret","token_type_hint","http","finalState","prompt","silent_redirect_uri","redirect_uri","useRefreshToken","refresh_token","exchangeRefreshToken","authUrl","silentRequestTimeout","getAccessToken","access_token","getRefreshToken","getIdToken","getExpiresIn","expires_in","getIdTokenRaw","getScopes","getUser","user","isLoggedIn","existsOnLocal","authorization_endpoint","code_verifier","stateLength","ui_locales","claims","claims_locales","acr_values","registration","login_hint","web_message_uri","web_message_target","extraParams","nonceLength","code_challenge","code_challenge_method","fragment","authParamsString","end_session_endpoint","logoutParams","post_logout_redirect_uri","extraLogoutParams","exchangeAuthorizationCode","token_endpoint","extraTokenHeaders","extraTokenParams","rest","mergedOptions","grant_type","req","requestUrl","issuer_metadata","prop","endsWith","parsedIDToken","idTokenValidator","requestUserInfo","userinfo_endpoint","userInfoResult","fetchUserInfo","accessToken","Authorization","sub","check_session_iframe","console","warn","sessionCheckerFrame","sessionCheckCallback","err","checkSessionInterval","authObj","isInternal","idToken","idTokenRaw","refreshToken","checkSession","monitorSession","id","autoSilentRenew","secondsToRefreshAccessTokenBeforeExp","renew","_accessTokenExpireTimer","btoa","httpClient","bind","createOIDCClient"],"mappings":"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","x_google_ignoreList":[8]} \ No newline at end of file diff --git a/dist/oidc-client.min.js b/dist/oidc-client.min.js index 6ec64b3..3e456c2 100644 --- a/dist/oidc-client.min.js +++ b/dist/oidc-client.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).PlusAuthOIDCClient={})}(this,function(e){"use strict";let t={USER_LOGOUT:"user_logout",USER_LOGIN:"user_login",SILENT_RENEW_SUCCESS:"silent_renew_success",SILENT_RENEW_ERROR:"silent_renew_error",SESSION_CHANGE:"session_change"};function i(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class s extends Error{constructor(e,t){super(`${e}${t&&` - ${t}`||""}`),i(this,"error",void 0),i(this,"error_description",void 0),this.name="OIDCClientError",this.error=e,this.error_description=t}}class n extends s{constructor(e,t,s,n){super(e,t),i(this,"state",void 0),i(this,"error_uri",void 0),this.name="AuthenticationError",this.state=s,this.error_uri=n}}class o extends n{constructor(e,t){super(e),i(this,"state",void 0),this.name="StateNotFound",this.state=t}}class r extends s{constructor(e){super(e),this.name="InvalidJWTError",this.error_description=e}}class a extends r{constructor(e){super(e),this.name="InvalidIdTokenError"}}class l extends s{constructor(e){super(e),this.name="InteractionCancelled"}}class h{constructor(e=""){var t,i;i=void 0,(t="prefix")in this?Object.defineProperty(this,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):this[t]=i,this.prefix=e}}class c extends h{get(e){return new Promise(t=>{let i=window.localStorage.getItem(this.prefix+e);t(i?JSON.parse(i):null)})}set(e,t){return new Promise(i=>{window.localStorage.setItem(this.prefix+e,JSON.stringify(t)),i()})}del(e){return new Promise(t=>{window.localStorage.removeItem(this.prefix+e),t()})}clear(e){return new Promise(t=>{let i;let s=[];for(i=0;i{t.created_at{this._expiration<=this.now()/1e3&&(this.stop(),t())},1e3*s)}stop(){this._timerHandle&&(clearInterval(this._timerHandle),this._timerHandle=null)}constructor(e=()=>Date.now()){p(this,"now",void 0),p(this,"_timerHandle",void 0),p(this,"_expiration",void 0),this.now=e}}function _(){let e=window.document.createElement("iframe");return e.style.width="0",e.style.height="0",e.style.position="absolute",e.style.visibility="hidden",e.style.display="none",e.title="__pa_helper__hidden",e.ariaHidden="true",e}for(var f,m,v=[],g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",y=0,S=g.length;y{fetch(e.url,{method:e.method,body:t,headers:i}).then(e=>s(e.json())).catch(n)})}let T="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function E(e){let t="",i=T.length,s=256-256%i;for(;e>0;){let n=function(e){let t=self.crypto||self.msCrypto,i=new Uint8Array(e);for(let s=0;s0;o++){let r=n[o];rdecodeURIComponent(atob(e.replace(/_/g,"/").replace(/-/g,"+")).split("").map(e=>`%${`00${e.charCodeAt(0).toString(16)}`.slice(-2)}`).join(""));function O(e){try{let t=e.split(".");if(3!==t.length)throw Error("Wrong JWT format");return{header:JSON.parse(I(t[0])),payload:JSON.parse(I(t[1]))}}catch(e){throw new r("Failed to parse jwt")}}let x=["iss","aud","exp","nbf","iat","jti","azp","nonce","auth_time","at_hash","c_hash","acr","amr","sub_jwk","cnf","sip_from_tag","sip_date","sip_callid","sip_cseq_num","sip_via_branch","orig","dest","mky","events","toe","txn","rph","sid","vot","vtm","attest","origid","act","scope","client_id","may_act","jcard","at_use_nbr"];function $(...e){return e.reduce((e,t)=>(function e(t,i){for(let s in i)void 0!==i[s]&&("object"==typeof i[s]&&"Object"===i[s].constructor.name?t[s]=e(t[s]||{},i[s]):t[s]=i[s]);return t})(e||{},t),{})}let R=(e,t)=>t&&t.split(/\s+/g).filter(t=>t===e).length>0,P=(e,t)=>t&&t.split(" ").indexOf(e)>-1,L=(e,t=400,i=600)=>{let s=window.screenX+(window.innerWidth-t)/2,n=window.screenY+(window.innerHeight-i)/2;return window.open(e,"oidc-login-popup",`left=${s},top=${n},width=${t},height=${i},resizable,scrollbars=yes,status=1`)};function C(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}let N=`${performance.now()}:${1e9*Math.random()|0}`,j={};class U{CallOnce(e,t,i=3e3){if(!e)throw"empty lockname";if(!window.localStorage){t();return}let s=this.keyPrefix+e;localStorage.setItem(s,N),setTimeout(()=>{localStorage.getItem(s)==N&&t()},150),setTimeout(function(){localStorage.removeItem(s)},i)}BroadcastMessageToAllTabs(e,t){try{j[e](t)}catch(e){}if(!window.localStorage){this.events.emit(e,t);return}let i={data:t,timeStamp:new Date().getTime()};localStorage.setItem(`${this.keyPrefix}event${e}`,JSON.stringify(i)),setTimeout(()=>{localStorage.removeItem(`${this.keyPrefix}event${e}`)},3e3)}OnBroadcastMessage(e,t){if(j[e]=t,!window.localStorage){this.events.on(e,t);return}window.addEventListener("storage",i=>{i.key==`${this.keyPrefix}event${e}`&&i.newValue&&t(JSON.parse(i.newValue).data)})}constructor(e,t){C(this,"keyPrefix",void 0),C(this,"events",void 0),this.keyPrefix=e,this.events=t}}function z(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class A extends u{async initialize(e=!0){return this.initialized?this:(this.__initializePromise||(this.__initializePromise=new Promise(async(i,n)=>{try{if(this.stateStore.init&&await this.stateStore.init(),this.authStore.init&&await this.authStore.init(),this.options.endpoints&&0!==Object.keys(this.options.endpoints).length||await this.fetchFromIssuer(),this.initialized=!0,e)try{var o;(null===(o=window)||void 0===o?void 0:o.frameElement)||await this.silentLogin()}catch(e){this.emit(t.SILENT_RENEW_ERROR,e),await this.authStore.clear()}else{let e=await this.authStore.get("auth");e&&await this.onUserLogin(e,!0)}i(this)}catch(e){n(e instanceof s?e:new s(e.message))}finally{this.__initializePromise=void 0}})),this.__initializePromise)}async login(e={},t={}){window.location.assign(await this.createAuthRequest(e,t))}async loginWithPopup(e={},i={}){let n=await this.createAuthRequest({response_mode:"fragment",...e,display:"popup",request_type:"p"}),{response:o,state:r}=await function(e,t){let i,n,o=t.popup;if(o?o.location.href=e:o=L(e),!o)throw Error("Could not open popup");return new Promise((e,r)=>{function a(){clearInterval(n),clearTimeout(i),window.removeEventListener("message",h)}function h(t){if(!t.data||"authorization_response"!==t.data.type)return;a(),o.close();let i=t.data.response||t.data;i.error?r(new s(i.error,i.error_description)):e(t.data)}i=setTimeout(()=>{a(),r(new s("Timed out"))},t.timeout||6e4),n=setInterval(function(){o.closed&&(a(),r(new l("user closed popup")))},300),window.addEventListener("message",h)})}(n,i),{authParams:a,localState:h}=r&&"string"!=typeof r?r:await this.loadState(r||o.state),c=await this.handleAuthResponse(o,a,h),d=await this.handleTokenResult(c,a,$(this.options,a));return d.session_state=o.session_state,this.synchronizer.BroadcastMessageToAllTabs(t.USER_LOGIN,d),h}async loginCallback(e=null===(m=window)||void 0===m?void 0:null===(f=m.location)||void 0===f?void 0:f.href){let i;if(!e)return Promise.reject(new s("Url must be passed to handle login redirect"));try{i=new URL(e)}catch(t){return Promise.reject(new s(`Invalid callback url passed: "${e}"`))}let o=function(e){let t={},i=(e=e.trim().replace(/^(\?|#|&)/,"")).split("&");for(let e=0;e0?s.join("="):"";t[n]=decodeURIComponent(o)}return t}(i.search||i.hash),r=await this.loadState(o.state),{authParams:a,localState:l,request_type:h}=r;switch(e=e||window.location.href,h){case"s":var c;(null===(c=window)||void 0===c?void 0:c.frameElement)&&e&&window.parent.postMessage({type:"authorization_response",response:o,state:r},`${location.protocol}//${location.host}`);return;case"p":window.opener&&e&&window.opener.postMessage({type:"authorization_response",response:o,state:r},`${location.protocol}//${location.host}`);return;default:if(o.error)return Promise.reject(new n(o.error,o.error_description));let d=await this.handleAuthResponse(o,a,l),u=await this.handleTokenResult(d,a,$(this.options,a));return u.session_state=o.session_state,this.synchronizer.BroadcastMessageToAllTabs(t.USER_LOGIN,u),l}}async logout(e={}){if(!e.localOnly){let t=await this.authStore.get("auth"),i=e.id_token_hint||(null==t?void 0:t.id_token_raw);window.location.assign(await this.createLogoutRequest({...e,id_token_hint:i}))}await this.authStore.clear()}async revokeToken(e,t="access_token",i={}){if(!this.options.endpoints.revocation_endpoint)return Promise.reject(new s('"revocation_endpoint" doesn\'t exist'));let n={client_id:i.client_id||this.options.client_id,client_secret:i.client_secret||this.options.client_secret,token_type_hint:t,token:e};return this.http({method:"POST",requestType:"form",url:this.options.endpoints.revocation_endpoint,body:n})}async silentLogin(e={},i={}){let o;await this.initialize(!1);let r={},a=await this.authStore.get("auth")||{},l=$({response_mode:"query",display:"page",prompt:"none"},this.options,e);if(l.silent_redirect_uri&&(l.redirect_uri=l.silent_redirect_uri),this.options.useRefreshToken&&(null==a?void 0:a.refresh_token))r.authParams=$((null==a?void 0:a.authParams)||{},r.authParams||{}),o=await this.exchangeRefreshToken({...l,refresh_token:a.refresh_token});else{var h;let e=await this.createAuthRequest({...l,request_type:"s"},i),{response:t,state:c}=await (h={timeout:l.silentRequestTimeout,eventOrigin:window.location.origin},new Promise((t,i)=>{let o=null,r=_(),a=setTimeout(()=>{i(new s("Timed out")),c()},1e3*(h.timeout||10)),l=e=>{if(e.origin!=h.eventOrigin||!e.data||"authorization_response"!==e.data.type)return;let s=e.source;s&&s.close();let o=e.data.response||e.data;o.error?i(new n(o.error,o.error_description,o.state,o.error_uri)):t(e.data),clearTimeout(a),c()},c=()=>{null!=o&&clearTimeout(o),window.document.body.contains(r)&&window.document.body.removeChild(r),window.removeEventListener("message",l,!1)},d=()=>setTimeout(()=>{i(new s("Could not complete silent authentication",e)),c()},300);window.addEventListener("message",l,!1),window.document.body.appendChild(r),r.setAttribute("src",e),r.onload=function(){o=d()}}));o=await this.handleAuthResponse(t,l,i),a.session_state=t.session_state,r=c}let c=await this.handleTokenResult(o,r.authParams,l);return c.session_state=a.session_state,this.synchronizer.BroadcastMessageToAllTabs(t.USER_LOGIN,c),r.localState}async getAccessToken(){var e;return null===(e=await this.authStore.get("auth"))||void 0===e?void 0:e.access_token}async getRefreshToken(){var e;return null===(e=await this.authStore.get("auth"))||void 0===e?void 0:e.refresh_token}async getIdToken(){var e;return null===(e=await this.authStore.get("auth"))||void 0===e?void 0:e.id_token}async getExpiresIn(){var e;return null===(e=await this.authStore.get("auth"))||void 0===e?void 0:e.expires_in}async getIdTokenRaw(){var e;return null===(e=await this.authStore.get("auth"))||void 0===e?void 0:e.id_token_raw}async getScopes(){var e,t;return null===(t=await this.authStore.get("auth"))||void 0===t?void 0:null===(e=t.scope)||void 0===e?void 0:e.split(" ")}async getUser(){var e;return null===(e=await this.authStore.get("auth"))||void 0===e?void 0:e.user}async isLoggedIn(e=!1){let t=!!await this.getUser();if(!t&&!e)try{return await this.silentLogin(),!0}catch(e){return!1}return t}async createAuthRequest(e={},t={}){var i,n;(null===(i=this.options.endpoints)||void 0===i?void 0:i.authorization_endpoint)||await this.initialize(!1);let o=Object.assign({},this.options,e);t.code_verifier=E(72);let r={client_id:o.client_id,state:E(o.stateLength),scope:o.scope,audience:o.audience,redirect_uri:o.redirect_uri,response_mode:o.response_mode,response_type:o.response_type||"code",ui_locales:o.ui_locales,prompt:o.prompt,display:o.display,claims:o.claims,claims_locales:o.claims_locales,acr_values:o.acr_values,registration:o.registration,login_hint:o.login_hint,id_token_hint:o.id_token_hint,web_message_uri:o.web_message_uri,web_message_target:o.web_message_target,...o.extraParams&&o.extraParams};(R("id_token",r.response_type)||P("openid",r.scope))&&(r.nonce=E(o.nonceLength)),R("code",r.response_type)&&(r.code_challenge=await ((n=t.code_verifier).length<43||n.length>128?Promise.reject(new s(`Invalid code length: ${n.length}`)):new Promise((e,t)=>{crypto.subtle.digest("SHA-256",new TextEncoder().encode(n)).then(t=>{var i;return e((i=new Uint8Array(t),(function(e){for(var t,i=e.length,s=i%3,n=[],o=0,r=i-s;o>18&63]+v[s>>12&63]+v[s>>6&63]+v[63&s]);return n.join("")}(e,o,o+16383>r?r:o+16383));return 1===s?n.push(v[(t=e[i-1])>>2]+v[t<<4&63]+"=="):2===s&&n.push(v[(t=(e[i-2]<<8)+e[i-1])>>10]+v[t>>4&63]+v[t<<2&63]+"="),n.join("")})(new Uint8Array(i)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")))},function(e){return t(e)})})),r.code_challenge_method=o.code_challenge_method||"S256");let a=this.options.currentTimeInMillis&&this.options.currentTimeInMillis()||Date.now(),l=o.fragment?`#${o.fragment}`:"",h=k(r),c=`${this.options.endpoints.authorization_endpoint}${h}${l}`;return this.stateStore.clear(a-864e5),await this.stateStore.set(r.state,JSON.parse(JSON.stringify({created_at:a,authParams:r,localState:t,request_type:o.request_type}))),c}async createLogoutRequest(e={}){var t;(null===(t=this.options.endpoints)||void 0===t?void 0:t.end_session_endpoint)||await this.fetchFromIssuer();let i=$(this.options,e),s={id_token_hint:i.id_token_hint,post_logout_redirect_uri:i.post_logout_redirect_uri,...i.extraLogoutParams||{}};return`${this.options.endpoints.end_session_endpoint}${k(s)}`}async exchangeAuthorizationCode(e){var t;(null===(t=this.options.endpoints)||void 0===t?void 0:t.token_endpoint)||await this.fetchFromIssuer();let{extraTokenHeaders:i,extraTokenParams:s,...n}=$(this.options,e),o={...n,...s||{},grant_type:"authorization_code"};for(let e of["code","redirect_uri","code_verifier","client_id"])if(!o[e])return Promise.reject(Error(`"${e}" is required`));return this.http({url:`${this.options.endpoints.token_endpoint}`,method:"POST",requestType:"form",body:o,headers:i})}async exchangeRefreshToken(e){var t;(null===(t=this.options.endpoints)||void 0===t?void 0:t.token_endpoint)||await this.fetchFromIssuer();let{extraTokenHeaders:i,extraTokenParams:s,...n}=e,o={grant_type:"refresh_token",client_id:this.options.client_id,client_secret:this.options.client_secret,...n,...s||{}};for(let e of["refresh_token","client_id"])if(!o[e])return Promise.reject(Error(`"${e}" is required`));return this.http({url:`${this.options.endpoints.token_endpoint}`,method:"POST",requestType:"form",body:o,headers:i})}async fetchFromIssuer(){try{let e=`${this.options.issuer}/.well-known/openid-configuration`,t=await this.http({url:e,method:"GET",requestType:"json"});this.issuer_metadata=t;let i={};for(let e of Object.keys(this.issuer_metadata))(e.endsWith("_endpoint")||e.indexOf("_session")>-1||e.indexOf("_uri")>-1)&&(i[e]=this.issuer_metadata[e]);return this.options.endpoints=i,this.issuer_metadata}catch(e){throw new s("Loading metadata failed",e.message)}}async handleAuthResponse(e,t,i={}){return e.code?this.exchangeAuthorizationCode({redirect_uri:t.redirect_uri,client_id:t.client_id,code_verifier:i.code_verifier,grant_type:"authorization_code",code:e.code}):e}async handleTokenResult(e,t,i){let o;await this.initialize(!1);let l={};if(e.error)throw new n(e.error,e.error_description);if(e.id_token){if(o=await function(e,t,i){if(!t)throw new s("No nonce on state");try{let s=O(e);if(t!==s.payload.nonce)throw Error(`Invalid nonce in id_token: ${s.payload.nonce}`);if(function(e,t,i=!1){let{clockSkew:s,currentTimeInMillis:n,issuer:o,audience:a,client_id:l}=t;s||(s=0);let h=(n&&n()||Date.now())/1e3,c=O(e).payload;if(!c.iss)throw new r("Issuer (iss) was not provided");if(c.iss!==o)throw new r(`Invalid Issuer (iss) in token: ${c.iss}`);if(!c.aud)throw new r("Audience (aud) was not provided");if(Array.isArray(c.aud)?-1==c.aud.indexOf(i?l:a||l):c.aud!==(i?l:a||l))throw new r(`Invalid Audience (aud) in token: ${c.aud}`);if(c.azp&&c.azp!==l)throw new r(`Invalid Authorized Party (azp) in token: ${c.azp}`);let d=Math.ceil(h+s),u=Math.floor(h-s);if(!c.iat)throw new r("Issued At (iat) was not provided");if(d{x.includes(e)||(l[e]=o[e])})}if(e.access_token){var h;if(i.requestUserInfo&&(null===(h=this.options.endpoints)||void 0===h?void 0:h.userinfo_endpoint)){let t=await this.fetchUserInfo(e.access_token);t.error||(l={...l,...t})}}return{authParams:t,user:l,...e,id_token:o,id_token_raw:e.id_token,scope:e.scope||t.scope}}async loadState(e){let t=await this.stateStore.get(e);return t?(await this.stateStore.del(e),t):Promise.reject(new o("Local state not found",e))}async fetchUserInfo(e){return this.http({method:"GET",url:`${this.options.endpoints.userinfo_endpoint}`,requestType:"json",headers:{Authorization:`Bearer ${e}`}})}monitorSession({sub:e,session_state:i}){let{client_id:s,endpoints:n}=this.options;if(!(null==n?void 0:n.check_session_iframe)){console.warn('"check_session_iframe" endpoint missing or session management is not supported by provider');return}if(!this.sessionCheckerFrame){let i=async i=>{if(i)this.emit(t.USER_LOGOUT);else{this.emit(t.SESSION_CHANGE);try{await this.silentLogin({},{});let i=await this.authStore.get("auth");if(i){var s;(null===(s=i.user)||void 0===s?void 0:s.sub)===e&&i.session_state&&this.sessionCheckerFrame.start(i.session_state)}else this.emit(t.USER_LOGOUT,null)}catch(e){this.emit(t.USER_LOGOUT);return}}};this.sessionCheckerFrame=function(e){let t,i;let{url:s,callback:n,client_id:o,checkInterval:r}=e,a=s.indexOf("/",s.indexOf("//")+2),l=s.substr(0,a),h=_(),c=()=>new Promise(e=>{window.document.body.appendChild(h),window.addEventListener("message",u,!1),h.onload=()=>{e(null)}}),d=()=>{t=null,i&&(window.clearInterval(i),i=null)},u=e=>{e.origin===l&&e.source===h.contentWindow&&("error"===e.data?(d(),n(e.data)):"changed"===e.data&&(d(),n()))};return h.setAttribute("src",s),{stop:d,start:e=>{c().then(()=>{if(e&&t!==e){d(),t=e;let s=()=>{h.contentWindow.postMessage(`${o} ${t}`,l)};s(),i=window.setInterval(s,r||2e3)}})}}}({url:n.check_session_iframe,client_id:s,callback:i,checkInterval:this.options.checkSessionInterval})}this.sessionCheckerFrame.start(i)}async onUserLogin(e,i=!1){var s;let{expires_in:n,user:o,scope:r,access_token:a,id_token:l,refresh_token:h,session_state:c,id_token_raw:d}=e;if(await this.authStore.set("auth",e),this.user=o,this.scopes=null==r?void 0:r.split(" "),this.accessToken=a,this.idToken=l,this.idTokenRaw=d,this.refreshToken=h,i||this.emit(t.USER_LOGIN,e),!(null===(s=window)||void 0===s?void 0:s.frameElement)&&(this.options.checkSession&&this.monitorSession({sub:o.sub||o.id,session_state:c}),void 0!==n&&this.options.autoSilentRenew)){let e=Number(n)-this.options.secondsToRefreshAccessTokenBeforeExp,i=()=>{this.synchronizer.CallOnce("silent-login",async()=>{try{await this.silentLogin(),this.emit(t.SILENT_RENEW_SUCCESS,null)}catch(e){this.emit(t.SILENT_RENEW_ERROR,e)}})};e>=0?this._accessTokenExpireTimer.start(e,async()=>{i()}):i()}}constructor(e){if(super(),z(this,"options",void 0),z(this,"user",void 0),z(this,"scopes",void 0),z(this,"accessToken",void 0),z(this,"refreshToken",void 0),z(this,"idToken",void 0),z(this,"idTokenRaw",void 0),z(this,"issuer_metadata",void 0),z(this,"http",void 0),z(this,"synchronizer",void 0),z(this,"stateStore",void 0),z(this,"authStore",void 0),z(this,"sessionCheckerFrame",void 0),z(this,"_accessTokenExpireTimer",void 0),z(this,"initialized",void 0),z(this,"__initializePromise",void 0),!function(e){try{let t=new URL(e);if(!["http:","https:"].includes(t.protocol)||""!==t.search||""!==t.hash)return!1;return!0}catch(e){return!1}}(e.issuer))throw new s('"issuer" must be a valid uri.');this.synchronizer=new U(btoa(e.issuer),this),this.options=$({secondsToRefreshAccessTokenBeforeExp:60,autoSilentRenew:!0,checkSession:!0,stateLength:10,nonceLength:10},e,{issuer:e.issuer.endsWith("/")?e.issuer.slice(0,-1):e.issuer}),this.http=this.options.httpClient||b,this.stateStore=this.options.stateStore||new c("pa_oidc.state."),this.authStore=this.options.authStore||new d,this.options.autoSilentRenew&&(this._accessTokenExpireTimer=new w),this.on(t.USER_LOGOUT,async()=>{this.user=void 0,this.scopes=void 0,this.accessToken=void 0,this.idToken=void 0,this.refreshToken=void 0,await this.authStore.clear()}),this.synchronizer.OnBroadcastMessage(t.USER_LOGIN,this.onUserLogin.bind(this))}}e.AuthenticationError=n,e.EventEmitter=u,e.Events=t,e.InMemoryStateStore=d,e.InteractionCancelled=l,e.InvalidIdTokenError=a,e.InvalidJWTError=r,e.LocalStorageStateStore=c,e.OIDCClient=A,e.OIDCClientError=s,e.StateNotFound=o,e.StateStore=h,e.default=function(e){return new A(e).initialize()},Object.defineProperty(e,"__esModule",{value:!0})}); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).PlusAuthOIDCClient={})}(this,function(e){"use strict";let t={USER_LOGOUT:"user_logout",USER_LOGIN:"user_login",SILENT_RENEW_SUCCESS:"silent_renew_success",SILENT_RENEW_ERROR:"silent_renew_error",SESSION_CHANGE:"session_change"};function i(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class o extends Error{constructor(e,t){super(`${e}${t&&` - ${t}`||""}`),i(this,"error",void 0),i(this,"error_description",void 0),this.name="OIDCClientError",this.error=e,this.error_description=t}}class s extends o{constructor(e,t,o,s){super(e,t),i(this,"state",void 0),i(this,"error_uri",void 0),this.name="AuthenticationError",this.state=o,this.error_uri=s}}class n extends s{constructor(e,t){super(e),i(this,"state",void 0),this.name="StateNotFound",this.state=t}}class r extends o{constructor(e){super(e),this.name="InvalidJWTError",this.error_description=e}}class a extends r{constructor(e){super(e),this.name="InvalidIdTokenError"}}class l extends o{constructor(e){super(e),this.name="InteractionCancelled"}}class h{constructor(e=""){var t,i;i=void 0,(t="prefix")in this?Object.defineProperty(this,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):this[t]=i,this.prefix=e}}class c extends h{get(e){return new Promise(t=>{let i=window.localStorage.getItem(this.prefix+e);t(i?JSON.parse(i):null)})}set(e,t){return new Promise(i=>{window.localStorage.setItem(this.prefix+e,JSON.stringify(t)),i()})}del(e){return new Promise(t=>{window.localStorage.removeItem(this.prefix+e),t()})}clear(e){return new Promise(t=>{let i;let o=[];for(i=0;i{t.created_at{this._expiration<=this.now()/1e3&&(this.stop(),t())},1e3*o)}stop(){this._timerHandle&&(clearInterval(this._timerHandle),this._timerHandle=null)}constructor(e=()=>Date.now()){p(this,"now",void 0),p(this,"_timerHandle",void 0),p(this,"_expiration",void 0),this.now=e}}function f(){let e=window.document.createElement("iframe");return e.style.width="0",e.style.height="0",e.style.position="absolute",e.style.visibility="hidden",e.style.display="none",e.title="__pa_helper__hidden",e.ariaHidden="true",e}var _,m,v,g={},y=function(){if(v)return g;v=1,g.byteLength=function(e){var t=r(e),i=t[0],o=t[1];return(i+o)*3/4-o},g.toByteArray=function(e){var o,s,n=r(e),a=n[0],l=n[1],h=new i((a+l)*3/4-l),c=0,d=l>0?a-4:a;for(s=0;s>16&255,h[c++]=o>>8&255,h[c++]=255&o;return 2===l&&(o=t[e.charCodeAt(s)]<<2|t[e.charCodeAt(s+1)]>>4,h[c++]=255&o),1===l&&(o=t[e.charCodeAt(s)]<<10|t[e.charCodeAt(s+1)]<<4|t[e.charCodeAt(s+2)]>>2,h[c++]=o>>8&255,h[c++]=255&o),h},g.fromByteArray=function(t){for(var i,o=t.length,s=o%3,n=[],r=0,a=o-s;r>18&63]+e[s>>12&63]+e[s>>6&63]+e[63&s]);return n.join("")}(t,r,r+16383>a?a:r+16383));return 1===s?n.push(e[(i=t[o-1])>>2]+e[i<<4&63]+"=="):2===s&&n.push(e[(i=(t[o-2]<<8)+t[o-1])>>10]+e[i>>4&63]+e[i<<2&63]+"="),n.join("")};for(var e=[],t=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,n=o.length;s0)throw Error("Invalid string. Length must be a multiple of 4");var i=e.indexOf("=");-1===i&&(i=t);var o=i===t?0:4-i%4;return[i,o]}return t["-".charCodeAt(0)]=62,t["_".charCodeAt(0)]=63,g}();function S(e,t=!0){if(!e)return"";let i=[];for(let t in e)e.hasOwnProperty(t)&&e[t]&&i.push(`${encodeURIComponent(t)}=${encodeURIComponent("object"==typeof e[t]?JSON.stringify(e[t]):e[t])}`);return`${t?"?":""}${i.join("&")}`}function k(e){let t=null,i=e.headers||{};return"POST"===e.method&&(i={"Content-Type":"form"===e.requestType?"application/x-www-form-urlencoded;charset=UTF-8":"application/json;charset=UTF-8",...i}),e.body&&(t="form"===e.requestType?S(e.body,!1):JSON.stringify(e.body)),new Promise((o,s)=>{fetch(e.url,{method:e.method,body:t,headers:i}).then(e=>o(e.json())).catch(s)})}let b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";function T(e){let t="",i=b.length,o=256-256%i;for(;e>0;){let s=function(e){let t=self.crypto||self.msCrypto,i=new Uint8Array(e);for(let o=0;o0;n++){let r=s[n];rdecodeURIComponent(atob(e.replace(/_/g,"/").replace(/-/g,"+")).split("").map(e=>`%${`00${e.charCodeAt(0).toString(16)}`.slice(-2)}`).join(""));function I(e){try{let t=e.split(".");if(3!==t.length)throw Error("Wrong JWT format");return{header:JSON.parse(E(t[0])),payload:JSON.parse(E(t[1]))}}catch(e){throw new r("Failed to parse jwt")}}let O=["iss","aud","exp","nbf","iat","jti","azp","nonce","auth_time","at_hash","c_hash","acr","amr","sub_jwk","cnf","sip_from_tag","sip_date","sip_callid","sip_cseq_num","sip_via_branch","orig","dest","mky","events","toe","txn","rph","sid","vot","vtm","attest","origid","act","scope","client_id","may_act","jcard","at_use_nbr"];function x(...e){return e.reduce((e,t)=>(function e(t,i){for(let o in i)void 0!==i[o]&&("object"==typeof i[o]&&"Object"===i[o].constructor.name?t[o]=e(t[o]||{},i[o]):t[o]=i[o]);return t})(e||{},t),{})}let $=(e,t)=>t&&t.split(/\s+/g).filter(t=>t===e).length>0,R=(e,t)=>t&&t.split(" ").indexOf(e)>-1,P=(e,t=400,i=600)=>{let o=window.screenX+(window.innerWidth-t)/2,s=window.screenY+(window.innerHeight-i)/2;return window.open(e,"oidc-login-popup",`left=${o},top=${s},width=${t},height=${i},resizable,scrollbars=yes,status=1`)};function A(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}let C=`${performance.now()}:${1e9*Math.random()|0}`,L={};class U{CallOnce(e,t,i=3e3){if(!e)throw"empty lockname";if(!window.localStorage){t();return}let o=this.keyPrefix+e;localStorage.setItem(o,C),setTimeout(()=>{localStorage.getItem(o)===C&&t()},150),setTimeout(()=>{localStorage.removeItem(o)},i)}BroadcastMessageToAllTabs(e,t){try{L[e](t)}catch(e){}if(!window.localStorage){this.events.emit(e,t);return}let i={data:t,timeStamp:new Date().getTime()};localStorage.setItem(`${this.keyPrefix}event${e}`,JSON.stringify(i)),setTimeout(()=>{localStorage.removeItem(`${this.keyPrefix}event${e}`)},3e3)}OnBroadcastMessage(e,t){if(L[e]=t,!window.localStorage){this.events.on(e,t);return}window.addEventListener("storage",i=>{i.key===`${this.keyPrefix}event${e}`&&i.newValue&&t(JSON.parse(i.newValue).data)})}constructor(e,t){A(this,"keyPrefix",void 0),A(this,"events",void 0),this.keyPrefix=e,this.events=t}}function N(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class j extends u{async initialize(e=!0){return this.initialized?this:(this.__initializePromise||(this.__initializePromise=new Promise(async(i,s)=>{try{if(this.stateStore.init&&await this.stateStore.init(),this.authStore.init&&await this.authStore.init(),this.options.endpoints&&0!==Object.keys(this.options.endpoints).length||await this.fetchFromIssuer(),this.initialized=!0,e)try{var n;(null===(n=window)||void 0===n?void 0:n.frameElement)||await this.silentLogin()}catch(e){this.emit(t.SILENT_RENEW_ERROR,e),await this.authStore.clear()}else{let e=await this.authStore.get("auth");e&&await this.onUserLogin(e,!0)}i(this)}catch(e){s(e instanceof o?e:new o(e.message))}finally{this.__initializePromise=void 0}})),this.__initializePromise)}async login(e={},t={}){window.location.assign(await this.createAuthRequest(e,t))}async loginWithPopup(e={},i={}){let s=await this.createAuthRequest({response_mode:"fragment",...e,display:"popup",request_type:"p"}),{response:n,state:r}=await function(e,t){let i,s,n=t.popup;if(n?n.location.href=e:n=P(e),!n)throw Error("Could not open popup");return new Promise((e,r)=>{function a(){clearInterval(s),clearTimeout(i),window.removeEventListener("message",h)}function h(t){if(!t.data||"authorization_response"!==t.data.type)return;a(),n.close();let i=t.data.response||t.data;i.error?r(new o(i.error,i.error_description)):e(t.data)}i=setTimeout(()=>{a(),r(new o("Timed out"))},t.timeout||6e4),s=setInterval(()=>{n.closed&&(a(),r(new l("user closed popup")))},300),window.addEventListener("message",h)})}(s,i),{authParams:a,localState:h}=r&&"string"!=typeof r?r:await this.loadState(r||n.state),c=await this.handleAuthResponse(n,a,h),d=await this.handleTokenResult(c,a,x(this.options,a));return d.session_state=n.session_state,this.synchronizer.BroadcastMessageToAllTabs(t.USER_LOGIN,d),h}async loginCallback(e=null===(m=window)||void 0===m?void 0:null===(_=m.location)||void 0===_?void 0:_.href){let i;if(!e)return Promise.reject(new o("Url must be passed to handle login redirect"));try{i=new URL(e)}catch(t){return Promise.reject(new o(`Invalid callback url passed: "${e}"`))}let n=function(e){let t={},i=(e=e.trim().replace(/^(\?|#|&)/,"")).split("&");for(let e=0;e0?o.join("="):"";t[s]=decodeURIComponent(n)}return t}(i.search||i.hash),r=await this.loadState(n.state),{authParams:a,localState:l,request_type:h}=r;switch(e=e||window.location.href,h){case"s":var c;(null===(c=window)||void 0===c?void 0:c.frameElement)&&e&&window.parent.postMessage({type:"authorization_response",response:n,state:r},`${location.protocol}//${location.host}`);return;case"p":window.opener&&e&&window.opener.postMessage({type:"authorization_response",response:n,state:r},`${location.protocol}//${location.host}`);return;default:{if(n.error)return Promise.reject(new s(n.error,n.error_description));let e=await this.handleAuthResponse(n,a,l),i=await this.handleTokenResult(e,a,x(this.options,a));return i.session_state=n.session_state,this.synchronizer.BroadcastMessageToAllTabs(t.USER_LOGIN,i),l}}}async logout(e={}){if(!e.localOnly){let t=await this.authStore.get("auth"),i=e.id_token_hint||(null==t?void 0:t.id_token_raw);window.location.assign(await this.createLogoutRequest({...e,id_token_hint:i}))}await this.authStore.clear()}async revokeToken(e,t="access_token",i={}){if(!this.options.endpoints.revocation_endpoint)return Promise.reject(new o('"revocation_endpoint" doesn\'t exist'));let s={client_id:i.client_id||this.options.client_id,client_secret:i.client_secret||this.options.client_secret,token_type_hint:t,token:e};return this.http({method:"POST",requestType:"form",url:this.options.endpoints.revocation_endpoint,body:s})}async silentLogin(e={},i={}){let n;await this.initialize(!1);let r={},a=await this.authStore.get("auth")||{},l=x({response_mode:"query",display:"page",prompt:"none"},this.options,e);if(l.silent_redirect_uri&&(l.redirect_uri=l.silent_redirect_uri),this.options.useRefreshToken&&(null==a?void 0:a.refresh_token))r.authParams=x((null==a?void 0:a.authParams)||{},r.authParams||{}),n=await this.exchangeRefreshToken({...l,refresh_token:a.refresh_token});else{var h;let e=await this.createAuthRequest({...l,request_type:"s"},i),{response:t,state:c}=await (h={timeout:l.silentRequestTimeout,eventOrigin:window.location.origin},new Promise((t,i)=>{let n=null,r=f(),a=setTimeout(()=>{i(new o("Timed out")),c()},1e3*(h.timeout||10)),l=e=>{if(e.origin!==h.eventOrigin||!e.data||"authorization_response"!==e.data.type)return;let o=e.source;o&&o.close();let n=e.data.response||e.data;n.error?i(new s(n.error,n.error_description,n.state,n.error_uri)):t(e.data),clearTimeout(a),c()},c=()=>{null!=n&&clearTimeout(n),window.document.body.contains(r)&&window.document.body.removeChild(r),window.removeEventListener("message",l,!1)},d=()=>setTimeout(()=>{i(new o("Could not complete silent authentication",e)),c()},300);window.addEventListener("message",l,!1),window.document.body.appendChild(r),r.setAttribute("src",e),r.onload=()=>{n=d()}}));n=await this.handleAuthResponse(t,l,i),a.session_state=t.session_state,r=c}let c=await this.handleTokenResult(n,r.authParams,l);return c.session_state=a.session_state,this.synchronizer.BroadcastMessageToAllTabs(t.USER_LOGIN,c),r.localState}async getAccessToken(){var e;return null===(e=await this.authStore.get("auth"))||void 0===e?void 0:e.access_token}async getRefreshToken(){var e;return null===(e=await this.authStore.get("auth"))||void 0===e?void 0:e.refresh_token}async getIdToken(){var e;return null===(e=await this.authStore.get("auth"))||void 0===e?void 0:e.id_token}async getExpiresIn(){var e;return null===(e=await this.authStore.get("auth"))||void 0===e?void 0:e.expires_in}async getIdTokenRaw(){var e;return null===(e=await this.authStore.get("auth"))||void 0===e?void 0:e.id_token_raw}async getScopes(){var e,t;return null===(t=await this.authStore.get("auth"))||void 0===t?void 0:null===(e=t.scope)||void 0===e?void 0:e.split(" ")}async getUser(){var e;return null===(e=await this.authStore.get("auth"))||void 0===e?void 0:e.user}async isLoggedIn(e=!1){let t=!!await this.getUser();if(!t&&!e)try{return await this.silentLogin(),!0}catch(e){return!1}return t}async createAuthRequest(e={},t={}){var i,s,n,r;(null===(i=this.options.endpoints)||void 0===i?void 0:i.authorization_endpoint)||await this.initialize(!1);let a=Object.assign({},this.options,e);t.code_verifier=T(72);let l={client_id:a.client_id,state:T(a.stateLength),scope:a.scope,audience:a.audience,redirect_uri:a.redirect_uri,response_mode:a.response_mode,response_type:a.response_type||"code",ui_locales:a.ui_locales,prompt:a.prompt,display:a.display,claims:a.claims,claims_locales:a.claims_locales,acr_values:a.acr_values,registration:a.registration,login_hint:a.login_hint,id_token_hint:a.id_token_hint,web_message_uri:a.web_message_uri,web_message_target:a.web_message_target,...a.extraParams&&a.extraParams};($("id_token",l.response_type)||R("openid",l.scope))&&(l.nonce=T(a.nonceLength)),$("code",l.response_type)&&(l.code_challenge=await ((r=t.code_verifier).length<43||r.length>128?Promise.reject(new o(`Invalid code length: ${r.length}`)):new Promise((e,t)=>{crypto.subtle.digest("SHA-256",new TextEncoder().encode(r)).then(t=>{var i;return e((i=new Uint8Array(t),y.fromByteArray(new Uint8Array(i)).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")))},e=>t(e))})),l.code_challenge_method=a.code_challenge_method||"S256");let h=(null===(s=(n=this.options).currentTimeInMillis)||void 0===s?void 0:s.call(n))||Date.now(),c=a.fragment?`#${a.fragment}`:"",d=S(l),u=`${this.options.endpoints.authorization_endpoint}${d}${c}`;return this.stateStore.clear(h-864e5),await this.stateStore.set(l.state,JSON.parse(JSON.stringify({created_at:h,authParams:l,localState:t,request_type:a.request_type}))),u}async createLogoutRequest(e={}){var t;(null===(t=this.options.endpoints)||void 0===t?void 0:t.end_session_endpoint)||await this.fetchFromIssuer();let i=x(this.options,e),o={id_token_hint:i.id_token_hint,post_logout_redirect_uri:i.post_logout_redirect_uri,...i.extraLogoutParams||{}};return`${this.options.endpoints.end_session_endpoint}${S(o)}`}async exchangeAuthorizationCode(e){var t;(null===(t=this.options.endpoints)||void 0===t?void 0:t.token_endpoint)||await this.fetchFromIssuer();let{extraTokenHeaders:i,extraTokenParams:o,...s}=x(this.options,e),n={...s,...o||{},grant_type:"authorization_code"};for(let e of["code","redirect_uri","code_verifier","client_id"])if(!n[e])return Promise.reject(Error(`"${e}" is required`));return this.http({url:`${this.options.endpoints.token_endpoint}`,method:"POST",requestType:"form",body:n,headers:i})}async exchangeRefreshToken(e){var t;(null===(t=this.options.endpoints)||void 0===t?void 0:t.token_endpoint)||await this.fetchFromIssuer();let{extraTokenHeaders:i,extraTokenParams:o,...s}=e,n={grant_type:"refresh_token",client_id:this.options.client_id,client_secret:this.options.client_secret,...s,...o||{}};for(let e of["refresh_token","client_id"])if(!n[e])return Promise.reject(Error(`"${e}" is required`));return this.http({url:`${this.options.endpoints.token_endpoint}`,method:"POST",requestType:"form",body:n,headers:i})}async fetchFromIssuer(){try{let e=`${this.options.issuer}/.well-known/openid-configuration`,t=await this.http({url:e,method:"GET",requestType:"json"});this.issuer_metadata=t;let i={};for(let e of Object.keys(this.issuer_metadata))(e.endsWith("_endpoint")||e.indexOf("_session")>-1||e.indexOf("_uri")>-1)&&(i[e]=this.issuer_metadata[e]);return this.options.endpoints=i,this.issuer_metadata}catch(e){throw new o("Loading metadata failed",e.message)}}async handleAuthResponse(e,t,i={}){return e.code?this.exchangeAuthorizationCode({redirect_uri:t.redirect_uri,client_id:t.client_id,code_verifier:i.code_verifier,grant_type:"authorization_code",code:e.code}):e}async handleTokenResult(e,t,i){let n;await this.initialize(!1);let l={};if(e.error)throw new s(e.error,e.error_description);if(e.id_token){if(n=await function(e,t,i){if(!t)throw new o("No nonce on state");try{let o=I(e);if(t!==o.payload.nonce)throw Error(`Invalid nonce in id_token: ${o.payload.nonce}`);if(function(e,t,i=!1){let{clockSkew:o,currentTimeInMillis:s,issuer:n,audience:a,client_id:l}=t;o||(o=0);let h=((null==s?void 0:s())||Date.now())/1e3,c=I(e).payload;if(!c.iss)throw new r("Issuer (iss) was not provided");if(c.iss!==n)throw new r(`Invalid Issuer (iss) in token: ${c.iss}`);if(!c.aud)throw new r("Audience (aud) was not provided");if(Array.isArray(c.aud)?-1===c.aud.indexOf(i?l:a||l):c.aud!==(i?l:a||l))throw new r(`Invalid Audience (aud) in token: ${c.aud}`);if(c.azp&&c.azp!==l)throw new r(`Invalid Authorized Party (azp) in token: ${c.azp}`);let d=Math.ceil(h+o),u=Math.floor(h-o);if(!c.iat)throw new r("Issued At (iat) was not provided");if(d{O.includes(e)||(l[e]=n[e])})}if(e.access_token){var h;if(i.requestUserInfo&&(null===(h=this.options.endpoints)||void 0===h?void 0:h.userinfo_endpoint)){let t=await this.fetchUserInfo(e.access_token);t.error||(l={...l,...t})}}return{authParams:t,user:l,...e,id_token:n,id_token_raw:e.id_token,scope:e.scope||t.scope}}async loadState(e){let t=await this.stateStore.get(e);return t?(await this.stateStore.del(e),t):Promise.reject(new n("Local state not found",e))}async fetchUserInfo(e){return this.http({method:"GET",url:`${this.options.endpoints.userinfo_endpoint}`,requestType:"json",headers:{Authorization:`Bearer ${e}`}})}monitorSession({sub:e,session_state:i}){let{client_id:o,endpoints:s}=this.options;if(!(null==s?void 0:s.check_session_iframe)){console.warn('"check_session_iframe" endpoint missing or session management is not supported by provider');return}if(!this.sessionCheckerFrame){let i=async i=>{if(i)this.emit(t.USER_LOGOUT);else{this.emit(t.SESSION_CHANGE);try{await this.silentLogin({},{});let i=await this.authStore.get("auth");if(i){var o;(null===(o=i.user)||void 0===o?void 0:o.sub)===e&&i.session_state&&this.sessionCheckerFrame.start(i.session_state)}else this.emit(t.USER_LOGOUT,null)}catch(e){this.emit(t.USER_LOGOUT);return}}};this.sessionCheckerFrame=function(e){let t,i;let{url:o,callback:s,client_id:n,checkInterval:r}=e,a=o.indexOf("/",o.indexOf("//")+2),l=o.substr(0,a),h=f(),c=()=>new Promise(e=>{window.document.body.appendChild(h),window.addEventListener("message",u,!1),h.onload=()=>{e(null)}}),d=()=>{t=null,i&&(window.clearInterval(i),i=null)},u=e=>{e.origin===l&&e.source===h.contentWindow&&("error"===e.data?(d(),s(e.data)):"changed"===e.data&&(d(),s()))};return h.setAttribute("src",o),{stop:d,start:e=>{c().then(()=>{if(e&&t!==e){d(),t=e;let o=()=>{h.contentWindow.postMessage(`${n} ${t}`,l)};o(),i=window.setInterval(o,r||2e3)}})}}}({url:s.check_session_iframe,client_id:o,callback:i,checkInterval:this.options.checkSessionInterval})}this.sessionCheckerFrame.start(i)}async onUserLogin(e,i=!1){var o;let{expires_in:s,user:n,scope:r,access_token:a,id_token:l,refresh_token:h,session_state:c,id_token_raw:d}=e;if(await this.authStore.set("auth",e),this.user=n,this.scopes=null==r?void 0:r.split(" "),this.accessToken=a,this.idToken=l,this.idTokenRaw=d,this.refreshToken=h,i||this.emit(t.USER_LOGIN,e),!(null===(o=window)||void 0===o?void 0:o.frameElement)&&(this.options.checkSession&&this.monitorSession({sub:n.sub||n.id,session_state:c}),void 0!==s&&this.options.autoSilentRenew)){let e=Number(s)-this.options.secondsToRefreshAccessTokenBeforeExp,i=()=>{this.synchronizer.CallOnce("silent-login",async()=>{try{await this.silentLogin(),this.emit(t.SILENT_RENEW_SUCCESS,null)}catch(e){this.emit(t.SILENT_RENEW_ERROR,e)}})};e>=0?this._accessTokenExpireTimer.start(e,async()=>{i()}):i()}}constructor(e){if(super(),N(this,"options",void 0),N(this,"user",void 0),N(this,"scopes",void 0),N(this,"accessToken",void 0),N(this,"refreshToken",void 0),N(this,"idToken",void 0),N(this,"idTokenRaw",void 0),N(this,"issuer_metadata",void 0),N(this,"http",void 0),N(this,"synchronizer",void 0),N(this,"stateStore",void 0),N(this,"authStore",void 0),N(this,"sessionCheckerFrame",void 0),N(this,"_accessTokenExpireTimer",void 0),N(this,"initialized",void 0),N(this,"__initializePromise",void 0),!function(e){try{let t=new URL(e);if(!["http:","https:"].includes(t.protocol)||""!==t.search||""!==t.hash)return!1;return!0}catch(e){return!1}}(e.issuer))throw new o('"issuer" must be a valid uri.');this.synchronizer=new U(btoa(e.issuer),this),this.options=x({secondsToRefreshAccessTokenBeforeExp:60,autoSilentRenew:!0,checkSession:!0,stateLength:10,nonceLength:10},e,{issuer:e.issuer.endsWith("/")?e.issuer.slice(0,-1):e.issuer}),this.http=this.options.httpClient||k,this.stateStore=this.options.stateStore||new c("pa_oidc.state."),this.authStore=this.options.authStore||new d,this.options.autoSilentRenew&&(this._accessTokenExpireTimer=new w),this.on(t.USER_LOGOUT,async()=>{this.user=void 0,this.scopes=void 0,this.accessToken=void 0,this.idToken=void 0,this.refreshToken=void 0,await this.authStore.clear()}),this.synchronizer.OnBroadcastMessage(t.USER_LOGIN,this.onUserLogin.bind(this))}}e.AuthenticationError=s,e.EventEmitter=u,e.Events=t,e.InMemoryStateStore=d,e.InteractionCancelled=l,e.InvalidIdTokenError=a,e.InvalidJWTError=r,e.LocalStorageStateStore=c,e.OIDCClient=j,e.OIDCClientError=o,e.StateNotFound=n,e.StateStore=h,e.default=function(e){return new j(e).initialize()},Object.defineProperty(e,"__esModule",{value:!0})}); //# sourceMappingURL=oidc-client.min.js.map diff --git a/dist/oidc-client.min.js.map b/dist/oidc-client.min.js.map index c7865c3..ad283f3 100644 --- a/dist/oidc-client.min.js.map +++ b/dist/oidc-client.min.js.map @@ -1 +1 @@ -{"version":3,"file":"oidc-client.min.js","sources":["../src/constants/events.ts","../src/errors.ts","../src/helpers/state_manager/state_store.ts","../src/helpers/state_manager/local_storage.ts","../src/helpers/state_manager/in_memory.ts","../src/helpers/event_emitter.ts","../src/helpers/timer.ts","../src/utils/iframe.ts","../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../src/client.ts","../src/utils/url.ts","../src/utils/request.ts","../src/utils/jose.ts","../src/utils/object.ts","../src/utils/oidc.ts","../src/utils/popup.ts","../src/utils/tab_utils.ts","../src/utils/check_session_iframe.ts","../src/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/indent */\nexport const Events = {\n USER_LOGOUT: 'user_logout',\n USER_LOGIN: 'user_login',\n SILENT_RENEW_SUCCESS: 'silent_renew_success',\n SILENT_RENEW_ERROR: 'silent_renew_error',\n SESSION_CHANGE: 'session_change'\n} as const\n\nexport type EventTypes = 'user_logout' | 'user_login' | 'silent_renew_success' |\n 'silent_renew_error' | 'session_change' | 'session_error'\n","export class OIDCClientError extends Error {\n error: string;\n\n error_description?: string;\n\n public constructor( error: string, error_description?: string ) {\n super( `${ error }${ error_description && ` - ${ error_description }` || '' }` );\n this.name = 'OIDCClientError'\n this.error = error\n this.error_description = error_description\n }\n}\n\nexport class AuthenticationError extends OIDCClientError {\n state?: string;\n\n error_uri?: string;\n\n constructor( error: string, error_description?: string, state?: string, error_uri?: string ) {\n super( error, error_description );\n this.name = 'AuthenticationError'\n this.state = state;\n this.error_uri = error_uri;\n }\n}\n\nexport class StateNotFound extends AuthenticationError {\n state?: string;\n\n constructor( error: string, state?: string ) {\n super( error );\n this.name = 'StateNotFound'\n this.state = state;\n }\n}\n\nexport class InvalidJWTError extends OIDCClientError {\n constructor( details: string ) {\n super( details );\n this.name = 'InvalidJWTError'\n this.error_description = details\n }\n}\n\nexport class InvalidIdTokenError extends InvalidJWTError {\n constructor( details: string ) {\n super( details );\n this.name = 'InvalidIdTokenError'\n }\n}\n\nexport class InteractionCancelled extends OIDCClientError {\n constructor( details: string ) {\n super( details );\n this.name = 'InteractionCancelled'\n }\n}\n","export interface StateStore> {\n init?(): Promise>\n}\n// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging\nexport abstract class StateStore> {\n prefix: string;\n\n constructor( prefix = '' ) {\n this.prefix = prefix\n }\n\n public abstract get( key: string ): Promise;\n\n public abstract set( key: string, value: T ): Promise;\n\n public abstract del( key: string ): Promise;\n\n public abstract clear( maxAge?: number ): Promise;\n}\n","import { StateStore } from './state_store';\n\nexport class LocalStorageStateStore extends StateStore {\n constructor( prefix = 'pa_oidc.' ) {\n super( prefix )\n }\n\n get( key: string ) {\n return new Promise( ( resolve ) => {\n const value = window.localStorage.getItem( this.prefix + key );\n if ( value ) {\n resolve( JSON.parse( value ) );\n } else {\n resolve( null );\n }\n } );\n }\n\n set( key: string, value: T ) {\n return new Promise( ( resolve ) => {\n window.localStorage.setItem( this.prefix + key, JSON.stringify( value ) );\n resolve();\n } );\n }\n\n del( key: string ) {\n return new Promise( ( resolve ) => {\n window.localStorage.removeItem( this.prefix + key );\n resolve();\n } );\n }\n\n clear( before?: number ): Promise {\n return new Promise( ( resolve ) => {\n let i;\n const storedKeys: string[] = [];\n for ( i = 0; i < window.localStorage.length; i++ ) {\n const key = window.localStorage.key( i )\n // items only created by oidc client\n if ( key?.substring( 0, this.prefix.length ) == this.prefix ) {\n storedKeys.push( key );\n }\n }\n for ( i = 0; i < storedKeys.length; i++ ) {\n if ( before ) {\n try {\n const storedItem = JSON.parse( window.localStorage.getItem( storedKeys[i] )! )\n if ( storedItem.created_at < before ) {\n window.localStorage.removeItem( storedKeys[i] )\n }\n } catch ( e ) {\n }\n } else {\n window.localStorage.removeItem( storedKeys[i] )\n }\n }\n resolve();\n } );\n }\n}\n","import { StateStore } from './state_store';\n\nexport class InMemoryStateStore extends StateStore {\n map = new Map()\n\n clear( before?: number ) {\n if ( before ){\n this.map.forEach( ( val, ind ) => {\n if ( val.created_at < before ){\n this.map.delete( ind )\n }\n } )\n return Promise.resolve()\n } else {\n return Promise.resolve( this.map.clear() );\n }\n }\n\n del( key: string ) {\n this.map.delete( key )\n return Promise.resolve( );\n }\n\n get( key: string ) {\n return Promise.resolve( this.map.get( key ) || null );\n }\n\n set( key: string, value: any ) {\n this.map.set( key, value )\n return Promise.resolve();\n }\n}\n","export type Listener = ( ...args: any ) => void\n\nexport class EventEmitter{\n callbacks: Record;\n\n constructor(){\n this.callbacks = {}\n }\n\n once( event: T, fn: ( ...args: any[] ) => void ){\n function on( this: EventEmitter, ...onArgs: any[] ) {\n this.off( event, on );\n fn.apply( this, onArgs );\n }\n on.fn = fn\n this.on( event, on );\n return this;\n }\n\n on( event: T, cb: ( ...args: any[] ) => void ){\n if ( !this.callbacks[`$${ event }`] ) this.callbacks[`$${ event }`] = [];\n this.callbacks[`$${ event }`].push( cb )\n return this\n }\n\n off( event?: T, fn?: ( ...args: any[] ) => void ){\n if ( !event ) {\n this.callbacks = {};\n return this;\n }\n\n // specific event\n const callbacks = this.callbacks[`$${ event }`];\n if ( !callbacks ) return this;\n\n // remove all handlers\n if ( !fn ) {\n delete this.callbacks[`$${ event }`];\n return this;\n }\n\n for ( let i = 0; i < callbacks.length; i++ ) {\n const cb = callbacks[i];\n if ( cb === fn || cb.fn === fn ) {\n callbacks.splice( i, 1 );\n break;\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if ( callbacks.length === 0 ) {\n delete this.callbacks[`$${ event }`];\n }\n\n return this;\n }\n\n emit( event: T, ...args: any[] ){\n let cbs = this.callbacks[`$${ event }`]\n if ( cbs ) {\n cbs = cbs.slice( 0 );\n for ( let i = 0, len = cbs.length; i < len; ++i ) {\n cbs[i].apply( this, args );\n }\n }\n return this\n }\n}\n","export class Timer {\n private now: () => number;\n\n private _timerHandle: any;\n\n private _expiration!: number;\n\n constructor( currentTimeInMillisFunc = () => Date.now() ) {\n this.now = currentTimeInMillisFunc\n }\n\n start( duration: number, callback: () => void ){\n if ( duration <= 0 ) {\n duration = 1;\n }\n const expiration = this.now() / 1000 + duration;\n if ( this._expiration === expiration && this._timerHandle ) {\n return;\n }\n\n this.stop();\n\n this._expiration = expiration;\n\n // prevent device sleep and delayed timers\n let timerDuration = 5;\n if ( duration < timerDuration ) {\n timerDuration = duration;\n }\n this._timerHandle = setInterval( ()=>{\n if ( this._expiration <= this.now() / 1000 ) {\n this.stop();\n callback()\n }\n }, timerDuration * 1000 );\n }\n\n stop() {\n if ( this._timerHandle ) {\n clearInterval( this._timerHandle );\n this._timerHandle = null;\n }\n }\n}\n","import { AuthenticationError, OIDCClientError } from '../errors';\nimport type { IFrameOptions } from '../interfaces';\n\nexport function createHiddenFrame() {\n const iframe = window.document.createElement( 'iframe' );\n iframe.style.width = '0';\n iframe.style.height = '0';\n iframe.style.position = 'absolute';\n iframe.style.visibility = 'hidden';\n iframe.style.display = 'none';\n\n iframe.title = '__pa_helper__hidden'\n iframe.ariaHidden = 'true'\n\n return iframe\n}\n\nexport function runIframe(\n url: string,\n options: IFrameOptions\n) {\n return new Promise( ( resolve, reject ) => {\n let onLoadTimeoutId: any = null;\n const iframe = createHiddenFrame()\n\n const timeoutSetTimeoutId = setTimeout( () => {\n reject( new OIDCClientError( 'Timed out' ) );\n removeIframe();\n }, ( options.timeout || 10 ) * 1000 );\n\n const iframeEventHandler = ( e: MessageEvent ) => {\n if ( e.origin != options.eventOrigin ) return;\n if ( !e.data || e.data.type !== 'authorization_response' ) return;\n const eventSource = e.source;\n if ( eventSource ) {\n ( eventSource ).close();\n }\n\n const resp = e.data.response || e.data\n resp.error\n ? reject( new AuthenticationError( resp.error, resp.error_description, resp.state, resp.error_uri ) )\n : resolve( e.data );\n clearTimeout( timeoutSetTimeoutId );\n removeIframe();\n };\n\n const removeIframe = () => {\n if ( onLoadTimeoutId != null ){\n clearTimeout( onLoadTimeoutId )\n }\n if ( window.document.body.contains( iframe ) ) {\n window.document.body.removeChild( iframe );\n }\n window.removeEventListener( 'message', iframeEventHandler, false );\n };\n\n const onLoadTimeout = () => setTimeout( ()=>{\n reject( new OIDCClientError( 'Could not complete silent authentication', url ) )\n removeIframe();\n }, 300 )\n\n\n\n window.addEventListener( 'message', iframeEventHandler, false );\n window.document.body.appendChild( iframe );\n iframe.setAttribute( 'src', url );\n\n /**\n * In case of wrong client id, wrong redirect_uri, in short when redirect did not happen\n * we assume flow failed.\n */\n iframe.onload = function () {\n onLoadTimeoutId = onLoadTimeout()\n }\n } );\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","import type { EventTypes } from './constants';\nimport { Events } from './constants';\n\nimport {\n AuthenticationError, InvalidIdTokenError,\n OIDCClientError, StateNotFound\n} from './errors';\n\nimport type {\n StateStore } from './helpers';\nimport {\n EventEmitter,\n InMemoryStateStore,\n LocalStorageStateStore\n} from './helpers';\n\n\n\nimport { Timer } from './helpers/timer';\nimport type { AuthRecord,\n AuthRequestOptions, IEndpointConfiguration,\n IPlusAuthClientOptions,\n LogoutRequestOptions, PopupOptions, RevokeOptions, SessionChecker,\n SessionMonitorOptions, StateRecord,\n TokenRequestOption, TokenResponse, TokenType\n} from './interfaces';\n\nimport type {\n RequestOptions } from './utils';\nimport {\n request,\n runIframe,\n buildEncodedQueryString,\n parseQueryUrl,\n validateIdToken,\n createSessionCheckerFrame,\n nonUserClaims, generateRandom, deriveChallenge, isValidIssuer,\n} from './utils';\nimport { cleanUndefined, mergeObjects } from './utils/object';\n\nimport { isResponseType, isScopeIncluded } from './utils/oidc';\nimport { runPopup } from './utils/popup';\nimport { TabUtils } from './utils/tab_utils';\n\n/**\n * `OIDCClient` provides methods for interacting with OIDC/OAuth2 authorization server. Those methods are signing a\n * user in, signing out, managing the user's claims, checking session and managing tokens returned from the\n * OIDC/OAuth2 provider.\n *\n */\nexport class OIDCClient extends EventEmitter{\n options: IPlusAuthClientOptions\n\n user?: any;\n\n scopes?: string[];\n\n accessToken?: string;\n\n refreshToken?: string;\n\n idToken?: string;\n\n idTokenRaw?: string;\n\n issuer_metadata?: Record;\n\n private readonly http: ( options: RequestOptions ) => Promise | never;\n\n private synchronizer: TabUtils;\n\n private stateStore: StateStore\n\n private authStore: StateStore;\n\n private sessionCheckerFrame?: SessionChecker\n\n private _accessTokenExpireTimer?: Timer;\n\n private initialized!: boolean;\n\n private __initializePromise!: Promise | undefined;\n\n constructor( options: IPlusAuthClientOptions ) {\n super()\n if ( !isValidIssuer( options.issuer ) ){\n throw new OIDCClientError( '\"issuer\" must be a valid uri.' )\n }\n\n this.synchronizer = new TabUtils( btoa( options.issuer ), this )\n\n this.options = mergeObjects( {\n secondsToRefreshAccessTokenBeforeExp: 60,\n autoSilentRenew: true,\n checkSession: true,\n stateLength: 10,\n nonceLength: 10\n }, options, {\n // remove last slash for consistency across the lib\n issuer: options.issuer.endsWith( '/' ) ? options.issuer.slice( 0, -1 ) : options.issuer\n } )\n\n this.http = this.options.httpClient || request\n this.stateStore = this.options.stateStore || new LocalStorageStateStore( 'pa_oidc.state.' )\n this.authStore = this.options.authStore || new InMemoryStateStore()\n\n\n if ( this.options.autoSilentRenew ){\n this._accessTokenExpireTimer = new Timer()\n }\n\n this.on( Events.USER_LOGOUT, async ()=>{\n this.user = undefined\n this.scopes = undefined;\n this.accessToken = undefined\n this.idToken = undefined\n this.refreshToken = undefined\n await this.authStore.clear()\n } )\n\n this.synchronizer.OnBroadcastMessage( Events.USER_LOGIN, this.onUserLogin.bind( this ) )\n }\n\n /**\n * Initialize the library with this method. It resolves issuer configuration, jwks keys which are necessary for\n * validating tokens returned from provider and checking if a user is already authenticated in provider.\n *\n * @param checkLogin Make this `false` if you don't want to check user authorization status in provider while\n * initializing. Defaults to `true`\n */\n async initialize( checkLogin = true ): Promise | never {\n if ( this.initialized ){\n return this\n }\n\n if ( this.__initializePromise ){\n return this.__initializePromise\n } else {\n this.__initializePromise = new Promise( async ( resolve, reject ) => {\n try {\n if ( this.stateStore.init ){\n await this.stateStore.init()\n }\n if ( this.authStore.init ){\n await this.authStore.init()\n }\n\n if ( !this.options.endpoints || Object.keys( this.options.endpoints ).length === 0 ){\n await this.fetchFromIssuer()\n }\n this.initialized = true\n\n if ( checkLogin ){\n try {\n if ( !window?.frameElement ){\n await this.silentLogin()\n }\n } catch ( e ) {\n this.emit( Events.SILENT_RENEW_ERROR, e )\n await this.authStore.clear()\n }\n } else {\n const localAuth = await this.authStore.get( 'auth' )\n if ( localAuth ){\n await this.onUserLogin( localAuth, true )\n }\n }\n resolve( this )\n } catch ( e ) {\n if ( e instanceof OIDCClientError ){\n reject( e )\n } else {\n reject( new OIDCClientError( e.message ) )\n }\n } finally {\n this.__initializePromise = undefined\n }\n } )\n }\n\n return this.__initializePromise\n }\n\n /**\n * Redirect to provider's authorization endpoint using provided parameters. You can override any parameter defined\n * in `OIDCClient`. If you don't provide `state`, `nonce` or `code_verifier` they will be generated automatically\n * in a random and secure way.\n *\n * @param options\n * @param localState\n */\n async login( options: Partial = {}, localState: Record = {} ){\n window.location.assign( await this.createAuthRequest( options, localState ) )\n }\n\n /**\n * Open a popup with the provider's authorization endpoint using provided parameters. You can override any\n * parameter defined in `OIDCClient`. If you don't provide `state`, `nonce` or `code_verifier` they will be\n * generated automatically in a random and secure way. You can also override popup options.\n *\n * NOTE: Most browsers block popups if they are not happened as a result of user actions. In order to display\n * login popup you must call this method in an event handler listening for a user action like button click.\n *\n * @param options\n * @param popupOptions\n */\n async loginWithPopup( options: Partial = {}, popupOptions: PopupOptions = {} ){\n const url = await this.createAuthRequest( {\n response_mode: 'fragment',\n ...options,\n display: 'popup',\n request_type: 'p'\n } )\n const { response, state } = await runPopup( url, popupOptions )\n const { authParams, localState } = !state || typeof state === 'string' ?\n await this.loadState( state || response.state )\n : state;\n const tokenResult = await this.handleAuthResponse( response, authParams, localState )\n const authObject = await this.handleTokenResult(\n tokenResult,\n authParams,\n mergeObjects( this.options, authParams )\n )\n authObject.session_state= response.session_state;\n this.synchronizer.BroadcastMessageToAllTabs( Events.USER_LOGIN, authObject )\n return localState\n }\n\n /**\n * After a user successfully authorizes an application, the authorization server will redirect the user back to\n * the application with either an authorization code or access token in the URL. In the callback page you should\n * call this method.\n *\n * @param url Full url which contains authorization request result parameters. Defaults to `window.location.href`\n */\n async loginCallback( url: string= window?.location?.href ){\n if ( !url ){\n return Promise.reject( new OIDCClientError( 'Url must be passed to handle login redirect' ) )\n }\n let parsedUrl: URL;\n try {\n parsedUrl = new URL( url )\n } catch ( e ){\n return Promise.reject( new OIDCClientError( `Invalid callback url passed: \"${ url }\"` ) )\n }\n\n const responseParams = parseQueryUrl( parsedUrl.search || parsedUrl.hash )\n const rawStoredState = await this.loadState( responseParams.state )\n const { authParams, localState, request_type } = rawStoredState\n url = url || window.location.href;\n switch ( request_type ) {\n case 's':\n if ( window?.frameElement ) {\n if ( url ) {\n window.parent.postMessage( {\n type: 'authorization_response',\n response: responseParams,\n state: rawStoredState\n }, `${ location.protocol }//${ location.host }` );\n }\n }\n return\n case 'p':\n if ( window.opener && url ){\n window.opener.postMessage( {\n type: 'authorization_response',\n response: responseParams,\n state: rawStoredState\n }, `${ location.protocol }//${ location.host }` );\n }\n return\n default:\n if ( responseParams.error ){\n return Promise.reject( new AuthenticationError( responseParams.error, responseParams.error_description ) )\n }\n const tokenResult = await this.handleAuthResponse( responseParams, authParams, localState )\n const authObject = await this.handleTokenResult(\n tokenResult,\n authParams,\n mergeObjects( this.options, authParams )\n )\n authObject.session_state= responseParams.session_state;\n this.synchronizer.BroadcastMessageToAllTabs( Events.USER_LOGIN, authObject )\n return localState\n }\n }\n\n /**\n * Redirect to provider's `end_session_endpoint` with provided parameters. After logout provider will redirect to\n * provided `post_logout_redirect_uri` if it provided.\n * @param options\n */\n async logout( options: LogoutRequestOptions = {} ){\n if ( !options.localOnly ) {\n const storedAuth = await this.authStore.get( 'auth' )\n const id_token_hint = options.id_token_hint || storedAuth?.id_token_raw\n window.location.assign( await this.createLogoutRequest( {\n ...options,\n id_token_hint\n } ) )\n }\n await this.authStore.clear()\n }\n\n /**\n * OAuth2 token revocation implementation method. See more at [tools.ietf.org/html/rfc7009](https://tools.ietf.org/html/rfc7009)\n * @param token Token to be revoked\n * @param type Passed token's type. It will be used to provide `token_type_hint` parameter.\n * @param options If necessary override options passed to `OIDCClient` by defining them here.\n */\n async revokeToken( token: string, type: TokenType = 'access_token', options: RevokeOptions = {} ){\n if ( !this.options.endpoints!.revocation_endpoint ){\n return Promise.reject( new OIDCClientError( '\"revocation_endpoint\" doesn\\'t exist' ) )\n }\n const finalOptions = {\n client_id: options.client_id || this.options.client_id,\n client_secret: options.client_secret || this.options.client_secret,\n token_type_hint: type,\n token: token\n }\n\n return this.http( {\n method: 'POST',\n requestType: 'form',\n url: this.options.endpoints!.revocation_endpoint,\n body: finalOptions\n } )\n }\n\n /**\n * Login without having an interaction. If refresh tokens are used and there is a stored refresh token it will\n * exchange refresh token to receive new access token. If not it silently makes a request the provider's\n * authorization endpoint using provided parameters. You can override any parameter defined in `OIDCClient`. If\n * you don't provide `state`, `nonce` or `code_verifier` they will be generated automatically in a random and\n * secure way.\n *\n * @param options\n * @param localState\n */\n async silentLogin( options: AuthRequestOptions = {}, localState: Record = {} ){\n await this.initialize( false )\n let tokenResult: any;\n let finalState: any = {}\n\n const storedAuth = await this.authStore.get( 'auth' ) || {}\n\n const finalOptions = mergeObjects( {\n response_mode: 'query',\n display: 'page',\n prompt: 'none'\n }, this.options, options )\n\n if ( finalOptions.silent_redirect_uri ){\n finalOptions.redirect_uri = finalOptions.silent_redirect_uri\n }\n\n if ( this.options.useRefreshToken && storedAuth?.refresh_token ){\n finalState.authParams = mergeObjects( storedAuth?.authParams || {}, finalState.authParams || {} )\n tokenResult = await this.exchangeRefreshToken( {\n ...finalOptions,\n refresh_token: storedAuth.refresh_token,\n } )\n } else {\n const authUrl = await this.createAuthRequest( {\n ...finalOptions,\n request_type: 's'\n }, localState )\n\n const { response, state } = await runIframe( authUrl, {\n timeout: finalOptions.silentRequestTimeout,\n eventOrigin: window.location.origin\n } )\n tokenResult = await this.handleAuthResponse( response, finalOptions, localState )\n storedAuth.session_state = response.session_state;\n finalState = state\n }\n\n const authObject = await this.handleTokenResult( tokenResult, finalState.authParams, finalOptions )\n authObject.session_state = storedAuth.session_state\n this.synchronizer.BroadcastMessageToAllTabs( Events.USER_LOGIN, authObject )\n return finalState.localState\n }\n\n /**\n * Retrieve logged in user's access token if it exists.\n */\n async getAccessToken(){\n return ( await this.authStore.get( 'auth' ) )?.access_token\n }\n\n\n /**\n * Retrieve logged in user's refresh token if it exists.\n */\n async getRefreshToken(){\n return ( await this.authStore.get( 'auth' ) )?.refresh_token\n }\n\n /**\n * Retrieve logged in user's parsed id token if it exists.\n */\n async getIdToken(){\n return ( await this.authStore.get( 'auth' ) )?.id_token\n }\n\n /**\n * Retrieve access token's expiration.\n */\n async getExpiresIn(){\n return ( await this.authStore.get( 'auth' ) )?.expires_in\n }\n\n /**\n * Retrieve logged in user's id token in raw format if it exists.\n */\n async getIdTokenRaw(){\n return ( await this.authStore.get( 'auth' ) )?.id_token_raw\n }\n\n\n /**\n * Retrieve logged in user's scopes if it exists.\n */\n async getScopes(){\n return ( await this.authStore.get( 'auth' ) )?.scope?.split( ' ' )\n }\n\n\n /**\n * Retrieve logged in user's profile.\n */\n async getUser(){\n return ( await this.authStore.get( 'auth' ) )?.user\n }\n\n /**\n * If there is a user stored locally return true. Otherwise it will make a silentLogin to check if End-User is\n * logged in provider.\n *\n * @param localOnly Don't check provider\n */\n async isLoggedIn( localOnly = false ){\n const existsOnLocal = !!await this.getUser()\n if ( !existsOnLocal && !localOnly ){\n try {\n await this.silentLogin()\n return true\n } catch ( e ){\n return false\n }\n }\n return existsOnLocal\n }\n\n /**\n * Create authorization request with provided options.\n *\n * @param options\n * @param localState\n * @private\n */\n private async createAuthRequest( options: Partial = {},\n localState: Record = {} ): Promise{\n if ( !this.options.endpoints?.authorization_endpoint ){\n await this.initialize( false )\n }\n // TODO: deep merge for extra params\n const finalOptions = Object.assign( {}, this.options, options )\n localState.code_verifier = generateRandom( 72 )\n\n const authParams = {\n client_id: finalOptions.client_id,\n state: generateRandom( finalOptions.stateLength! ),\n scope: finalOptions.scope,\n audience: finalOptions.audience,\n redirect_uri: finalOptions.redirect_uri,\n response_mode: finalOptions.response_mode,\n response_type: finalOptions.response_type || 'code',\n ui_locales: finalOptions.ui_locales,\n prompt: finalOptions.prompt,\n display: finalOptions.display,\n claims: finalOptions.claims,\n claims_locales: finalOptions.claims_locales,\n acr_values: finalOptions.acr_values,\n registration: finalOptions.registration,\n login_hint: finalOptions.login_hint,\n id_token_hint: finalOptions.id_token_hint,\n web_message_uri: finalOptions.web_message_uri,\n web_message_target: finalOptions.web_message_target,\n ...finalOptions.extraParams && finalOptions.extraParams\n } as AuthRequestOptions;\n\n if ( isResponseType( 'id_token', authParams.response_type ) ||\n isScopeIncluded( 'openid', authParams.scope ) ){\n authParams.nonce = generateRandom( finalOptions.nonceLength! )\n }\n\n if ( isResponseType( 'code', authParams.response_type ) ){\n authParams.code_challenge= await deriveChallenge( localState.code_verifier )\n authParams.code_challenge_method= finalOptions.code_challenge_method || 'S256'\n }\n\n const now = this.options.currentTimeInMillis && this.options.currentTimeInMillis() || Date.now()\n const fragment = finalOptions.fragment ? `#${ finalOptions.fragment }` : '';\n const authParamsString = buildEncodedQueryString( authParams )\n const url = `${ this.options.endpoints!.authorization_endpoint }${ authParamsString }${ fragment }`\n\n // clear 1 day old state entries\n this.stateStore.clear( now - 86400000 )\n\n\n await this.stateStore.set( authParams.state!, cleanUndefined( {\n created_at: now,\n authParams,\n localState,\n request_type: finalOptions.request_type\n } ) )\n return url\n }\n\n /**\n * Create a logout request with given options\n *\n * @param options\n * @private\n */\n private async createLogoutRequest( options: LogoutRequestOptions = {} ){\n if ( !this.options.endpoints?.end_session_endpoint ){\n await this.fetchFromIssuer();\n }\n const finalOptions = mergeObjects( this.options, options )\n const logoutParams = {\n id_token_hint: finalOptions.id_token_hint,\n post_logout_redirect_uri: finalOptions.post_logout_redirect_uri,\n ...finalOptions.extraLogoutParams || {}\n }\n return `${ this.options.endpoints!.end_session_endpoint }${ buildEncodedQueryString( logoutParams ) }`\n }\n\n /**\n * Exchange authorization code retrieved from auth request result.\n * @param options\n * @private\n */\n private async exchangeAuthorizationCode( options: TokenRequestOption ){\n if ( !this.options.endpoints?.token_endpoint ){\n await this.fetchFromIssuer();\n }\n const finalOptions = mergeObjects( this.options, options )\n const { extraTokenHeaders, extraTokenParams, ...rest } = finalOptions\n const mergedOptions = {\n ...rest,\n ...extraTokenParams || {},\n grant_type: 'authorization_code',\n }\n\n for ( const req of ['code', 'redirect_uri', 'code_verifier', 'client_id'] as const ){\n if ( !mergedOptions[req] ){\n return Promise.reject( new Error( `\"${ req }\" is required` ) );\n }\n }\n\n return this.http( {\n url: `${ this.options.endpoints!.token_endpoint }`,\n method: 'POST',\n requestType: 'form',\n body: mergedOptions as any,\n headers: extraTokenHeaders\n } )\n }\n\n /**\n * Exchange refresh token with given options\n * @param options\n * @private\n */\n private async exchangeRefreshToken( options: Partial ) {\n if ( !this.options.endpoints?.token_endpoint ){\n await this.fetchFromIssuer();\n }\n const { extraTokenHeaders, extraTokenParams, ...rest } = options\n const mergedOptions = {\n grant_type: 'refresh_token',\n client_id: this.options.client_id,\n client_secret: this.options.client_secret,\n ...rest,\n ...extraTokenParams || {}\n }\n\n for ( const req of ['refresh_token', 'client_id'] as const ){\n if ( !mergedOptions[req] ){\n return Promise.reject( new Error( `\"${ req }\" is required` ) );\n }\n }\n\n return this.http( {\n url: `${ this.options.endpoints!.token_endpoint }`,\n method: 'POST',\n requestType: 'form',\n body: mergedOptions as any,\n headers: extraTokenHeaders\n } );\n }\n\n /**\n * Fetch OIDC configuration from the issuer.\n */\n private async fetchFromIssuer(): Promise>{\n try {\n const requestUrl = `${ this.options.issuer }/.well-known/openid-configuration`\n const response = await this.http( {\n url: requestUrl,\n method: 'GET',\n requestType: 'json'\n } )\n this.issuer_metadata = response as Record\n const endpoints = {} as any\n for ( const prop of Object.keys( this.issuer_metadata ) ) {\n if ( prop.endsWith( '_endpoint' ) || prop.indexOf( '_session' ) > -1 || prop.indexOf( '_uri' ) > -1 ) {\n endpoints[prop as keyof IEndpointConfiguration] = this.issuer_metadata[prop];\n }\n }\n this.options.endpoints = endpoints\n return this.issuer_metadata;\n } catch ( e ) {\n throw new OIDCClientError( 'Loading metadata failed', e.message )\n }\n }\n\n /**\n * Handle auth request result. If there is `code` exchange it.\n * @param response\n * @param finalOptions\n * @param localState\n * @private\n */\n private async handleAuthResponse(\n response: any,\n finalOptions: AuthRequestOptions,\n localState: Record = {}\n ){\n if ( response.code ){\n return this.exchangeAuthorizationCode( {\n redirect_uri: finalOptions.redirect_uri,\n client_id: finalOptions.client_id,\n code_verifier: localState.code_verifier,\n grant_type: 'authorization_code',\n code: response.code,\n } );\n } else {\n return response\n }\n }\n\n /**\n * Handle OAuth2 auth request result\n * @param tokenResult\n * @param authParams\n * @param finalOptions\n * @private\n */\n private async handleTokenResult( tokenResult: TokenResponse, authParams: AuthRequestOptions,\n finalOptions: IPlusAuthClientOptions ){\n await this.initialize( false )\n let user: any = {}\n if ( tokenResult.error ){\n throw new AuthenticationError( tokenResult.error, tokenResult.error_description )\n }\n let parsedIDToken: any;\n if ( tokenResult.id_token ){\n parsedIDToken = await validateIdToken( tokenResult.id_token, authParams.nonce!, finalOptions )\n if ( finalOptions.idTokenValidator && !await finalOptions.idTokenValidator( tokenResult.id_token ) ){\n return Promise.reject( new InvalidIdTokenError( 'Id Token validation failed' ) )\n }\n Object.keys( parsedIDToken ).forEach( key => {\n if ( !nonUserClaims.includes( key as any ) ){\n user[key] = parsedIDToken[key]\n }\n } )\n }\n\n if ( tokenResult.access_token ) {\n if ( finalOptions.requestUserInfo && this.options.endpoints?.userinfo_endpoint ) {\n const userInfoResult = await this.fetchUserInfo( tokenResult.access_token )\n if ( !userInfoResult.error ){\n user = { ...user, ...userInfoResult }\n }\n }\n }\n\n return {\n authParams,\n user,\n ...tokenResult,\n id_token: parsedIDToken,\n id_token_raw: tokenResult.id_token,\n scope: tokenResult.scope || authParams.scope,\n }\n }\n\n /**\n * Load stored state\n *\n * @param state\n * @private\n */\n private async loadState( state: string ){\n const rawStoredState = await this.stateStore.get( state )\n if ( !rawStoredState ){\n return Promise.reject( new StateNotFound( 'Local state not found', state ) )\n } else {\n await this.stateStore.del( state )\n }\n return rawStoredState\n }\n\n /**\n * Load user info by making request to providers `userinfo_endpoint`\n *\n * @param accessToken\n * @private\n */\n private async fetchUserInfo( accessToken: string ){\n return this.http( {\n method: 'GET',\n url: `${ this.options.endpoints!.userinfo_endpoint }`,\n requestType: 'json',\n headers: {\n 'Authorization': `Bearer ${ accessToken }`\n }\n } )\n }\n\n /**\n * Start monitoring End-User's session if the OIDC provider supports session management. See more at [OIDC Session\n * Management](https://openid.net/specs/openid-connect-session-1_0.html)\n *\n * @param sub End-User's id to for monitoring session\n * @param session_state string that represents the End-User's login state at the OP\n */\n private monitorSession( { sub, session_state }: SessionMonitorOptions ){\n const { client_id, endpoints } = this.options\n\n if ( !endpoints?.check_session_iframe ){\n console.warn( '\"check_session_iframe\" endpoint missing or session management is not supported by provider' )\n return\n }\n if ( !this.sessionCheckerFrame ){\n const sessionCheckCallback = async ( err: any )=>{\n if ( err ){\n this.emit( Events.USER_LOGOUT )\n } else {\n this.emit( Events.SESSION_CHANGE )\n try {\n await this.silentLogin( {}, {} )\n const storedAuth = await this.authStore.get( 'auth' )\n if ( storedAuth ){\n if ( storedAuth.user?.sub === sub && storedAuth.session_state ){\n this.sessionCheckerFrame!.start( storedAuth.session_state )\n }\n } else {\n this.emit( Events.USER_LOGOUT, null )\n }\n } catch ( e ) {\n this.emit( Events.USER_LOGOUT )\n return\n }\n }\n }\n\n this.sessionCheckerFrame = createSessionCheckerFrame( {\n url: endpoints.check_session_iframe,\n client_id: client_id,\n callback: sessionCheckCallback,\n checkInterval: this.options.checkSessionInterval,\n } )\n }\n\n this.sessionCheckerFrame.start( session_state )\n }\n\n private async onUserLogin( authObj: any, isInternal = false ){\n const { expires_in, user, scope, access_token, id_token, refresh_token, session_state, id_token_raw } = authObj\n await this.authStore.set( 'auth', authObj )\n\n this.user = user\n this.scopes = scope?.split( ' ' );\n this.accessToken = access_token\n this.idToken = id_token\n this.idTokenRaw = id_token_raw\n this.refreshToken = refresh_token\n\n if ( !isInternal ){\n this.emit( Events.USER_LOGIN, authObj )\n }\n if ( !window?.frameElement ) {\n if ( this.options.checkSession ) {\n this.monitorSession( { sub: user.sub || user.id, session_state } )\n }\n\n if ( expires_in !== undefined && this.options.autoSilentRenew ){\n const expiration = Number( expires_in ) - this.options.secondsToRefreshAccessTokenBeforeExp!\n const renew = () => {\n this.synchronizer.CallOnce( 'silent-login', async () => {\n try {\n await this.silentLogin()\n this.emit( Events.SILENT_RENEW_SUCCESS, null )\n } catch ( e ) {\n this.emit( Events.SILENT_RENEW_ERROR, e )\n }\n } )\n }\n if ( expiration >= 0 ){\n this._accessTokenExpireTimer!.start( expiration, async ()=> {\n renew()\n } )\n } else {\n renew()\n }\n }\n }\n }\n}\n","import { fromByteArray } from 'base64-js';\n\nexport function isValidIssuer( issuer: string ){\n try {\n const url = new URL( issuer )\n if ( !['http:', 'https:'].includes( url.protocol ) ){\n return false\n }\n if ( url.search !== '' || url.hash !== '' ){\n return false\n }\n return true\n } catch ( e ){\n return false\n }\n}\nexport function buildEncodedQueryString( obj?: Record,\n appendable = true, ) {\n if ( !obj ) return '';\n const ret: string[] = [];\n for ( const d in obj ) {\n if ( obj.hasOwnProperty( d ) && obj[d] ) {\n ret.push( `${\n encodeURIComponent( d )\n }=${\n encodeURIComponent( typeof obj[d] === 'object' ? JSON.stringify( obj[d] ) : obj[d]! )\n }` );\n }\n }\n return `${ appendable ? '?' : '' }${ ret.join( '&' ) }`;\n}\n\nexport function parseQueryUrl( value: string ) {\n const result: Record = {};\n value = value.trim().replace( /^(\\?|#|&)/, '' );\n const params = value.split( '&' );\n for ( let i = 0; i < params.length; i += 1 ) {\n const paramAndValue = params[i];\n const parts = paramAndValue.split( '=' );\n const key = decodeURIComponent( parts.shift()! );\n const value = parts.length > 0 ? parts.join( '=' ) : '';\n result[key] = decodeURIComponent( value );\n }\n return result;\n}\n\nexport function urlSafe( buffer: Uint8Array ): string {\n const encoded = fromByteArray( new Uint8Array( buffer ) );\n return encoded.replace( /\\+/g, '-' ).replace( /\\//g, '_' ).replace( /=/g, '' );\n}\n","import { buildEncodedQueryString } from './url';\n\nexport interface RequestOptions {\n body?: Record;\n headers?: Record,\n method: 'GET' | 'POST' | 'PATCH' | 'TRACE' | 'OPTIONS' | 'HEAD',\n requestType?: 'form' | 'json',\n url: string\n}\n\nexport function request( options: RequestOptions ): Promise{\n let body: any = null\n let headers = options.headers || {}\n if ( options.method === 'POST' ){\n headers = {\n 'Content-Type': options.requestType === 'form' ? 'application/x-www-form-urlencoded;charset=UTF-8' :\n 'application/json;charset=UTF-8',\n ...headers\n }\n }\n if ( options.body ){\n body = options.requestType === 'form' ? buildEncodedQueryString( options.body, false )\n : JSON.stringify( options.body )\n }\n\n return new Promise( ( resolve, reject ) => {\n fetch( options.url, {\n method: options.method,\n body: body,\n headers\n } )\n .then( ( value: Response ) => resolve( value.json() ) )\n .catch( reject )\n } )\n}\n","import { InvalidIdTokenError, InvalidJWTError, OIDCClientError } from '../errors';\nimport type { IPlusAuthClientOptions, JWTValidationOptions, ParsedJWT } from '../interfaces';\n\nimport { urlSafe } from './url';\n\nconst CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n\nfunction getRandomBytes( n: number ){\n // @ts-ignore\n const crypto = self.crypto || self.msCrypto, QUOTA = 65536;\n const a = new Uint8Array( n );\n for ( let i = 0; i < n; i += QUOTA ) {\n crypto.getRandomValues( a.subarray( i, i + Math.min( n - i, QUOTA ) ) );\n }\n return a;\n}\n\nexport function generateRandom( length: number ){\n let out = '';\n const charsLen = CHARSET.length;\n const maxByte = 256 - 256 % charsLen;\n while ( length > 0 ) {\n const buf = getRandomBytes( Math.ceil( length * 256 / maxByte ) );\n for ( let i = 0; i < buf.length && length > 0; i++ ) {\n const randomByte = buf[i];\n if ( randomByte < maxByte ) {\n out += CHARSET.charAt( randomByte % charsLen );\n length--;\n }\n }\n }\n return out;\n}\n\n\nexport function deriveChallenge( code: string ): Promise{\n if ( code.length < 43 || code.length > 128 ) {\n return Promise.reject( new OIDCClientError( `Invalid code length: ${ code.length }` ) );\n }\n\n return new Promise( ( resolve, reject ) => {\n crypto.subtle.digest( 'SHA-256', new TextEncoder().encode( code ) )\n .then( buffer => {\n return resolve( urlSafe( new Uint8Array( buffer ) ) );\n }, function ( error ) {\n /* istanbul ignore next */\n return reject( error );\n } );\n } );\n}\n// https://datatracker.ietf.org/doc/html/rfc4648#section-5\nexport const urlDecodeB64 = ( input: string ) => decodeURIComponent(\n atob( input.replace( /_/g, '/' ).replace( /-/g, '+' ) )\n .split( '' )\n .map( c => {\n return `%${ `00${ c.charCodeAt( 0 ).toString( 16 ) }`.slice( -2 ) }`;\n } )\n .join( '' )\n);\n\n\n\nexport function parseJwt( jwt: string ): ParsedJWT {\n try {\n const parts = jwt.split( '.' )\n if ( parts.length !== 3 ){\n throw new Error( 'Wrong JWT format' )\n }\n return {\n header: JSON.parse( urlDecodeB64( parts[0] ) ),\n payload: JSON.parse( urlDecodeB64( parts[1] ) )\n }\n } catch ( e ){\n throw new InvalidJWTError( 'Failed to parse jwt' )\n }\n}\n\nexport function validateIdToken( id_token: string, nonce: string, options: IPlusAuthClientOptions ) {\n if ( !nonce ) {\n throw new OIDCClientError( 'No nonce on state' );\n }\n\n try {\n const jwt = parseJwt( id_token );\n\n if ( nonce !== jwt.payload.nonce ) {\n throw new Error( `Invalid nonce in id_token: ${ jwt.payload.nonce }` );\n }\n\n validateJwt( id_token, options, true )\n\n // @ts-ignore\n if ( !jwt.payload['sub'] ) {\n throw new Error( 'No Subject (sub) present in id_token' );\n }\n\n return jwt.payload;\n } catch ( e ){\n throw new InvalidIdTokenError( e.message )\n }\n}\n\nexport function validateJwt( jwt: string, options: JWTValidationOptions, isIdToken = false ) {\n // eslint-disable-next-line prefer-const\n let { clockSkew, currentTimeInMillis, issuer, audience, client_id } = options\n if ( !clockSkew ){\n clockSkew = 0\n }\n const now = ( currentTimeInMillis && currentTimeInMillis() || Date.now() ) / 1000;\n\n const payload = parseJwt( jwt ).payload;\n\n if ( !payload.iss ) {\n throw new InvalidJWTError( 'Issuer (iss) was not provided' );\n }\n if ( payload.iss !== issuer ) {\n throw new InvalidJWTError( `Invalid Issuer (iss) in token: ${ payload.iss }` );\n }\n\n if ( !payload.aud ) {\n throw new InvalidJWTError( 'Audience (aud) was not provided' );\n }\n\n // Audience must be equal to client_id in id_token\n // https://openid.net/specs/openid-connect-core-1_0.html#IDToken\n if ( Array.isArray( payload.aud ) ?\n payload.aud.indexOf( isIdToken ? client_id : audience || client_id ) == -1 :\n payload.aud !== ( isIdToken ? client_id : audience || client_id )\n ) {\n throw new InvalidJWTError( `Invalid Audience (aud) in token: ${ payload.aud }` );\n }\n\n if ( payload.azp && payload.azp !== client_id ) {\n throw new InvalidJWTError( `Invalid Authorized Party (azp) in token: ${ payload.azp }` );\n }\n\n const lowerNow = Math.ceil( now + clockSkew );\n const upperNow = Math.floor( now - clockSkew );\n\n if ( !payload.iat ) {\n throw new InvalidJWTError( 'Issued At (iat) was not provided' );\n }\n\n if ( lowerNow < Number( payload.iat ) ) {\n throw new InvalidJWTError( `Issued At (iat) is in the future: ${ payload.iat }` );\n }\n\n if ( payload.nbf && lowerNow < Number( payload.nbf ) ) {\n throw new InvalidJWTError( `Not Before time (nbf) is in the future: ${ payload.nbf }` );\n }\n\n if ( !payload.exp ) {\n throw new InvalidJWTError( 'Expiration Time (exp) was not provided' );\n }\n if ( Number( payload.exp ) < upperNow ) {\n throw new InvalidJWTError( `Expiration Time (exp) is in the past: ${ payload.exp }` );\n }\n\n return payload;\n}\n\n// Retrieved from https://www.iana.org/assignments/jwt/jwt.xhtml\nexport const nonUserClaims = [\n 'iss',\n // 'sub',\n 'aud',\n 'exp',\n 'nbf',\n 'iat',\n 'jti',\n 'azp',\n 'nonce',\n 'auth_time',\n 'at_hash',\n 'c_hash',\n 'acr',\n 'amr',\n 'sub_jwk',\n 'cnf',\n 'sip_from_tag',\n 'sip_date',\n 'sip_callid',\n 'sip_cseq_num',\n 'sip_via_branch',\n 'orig',\n 'dest',\n 'mky',\n 'events',\n 'toe',\n 'txn',\n 'rph',\n 'sid',\n 'vot',\n 'vtm',\n 'attest',\n 'origid',\n 'act',\n 'scope',\n 'client_id',\n 'may_act',\n 'jcard',\n 'at_use_nbr',\n] as const\n","type RequiredAndNotNull = {\n [P in keyof T]-?: Exclude\n}\n\n/**\n * not suitable for every object but it is enough for this library\n * @param object\n */\nexport function cleanUndefined>( object: T ) {\n if ( !object || typeof object !== 'object' ) {\n return object\n }\n return JSON.parse( JSON.stringify( object ) ) as RequiredAndNotNull\n}\n\nfunction merge( previousValue: any, currentValue: any ) {\n for ( const p in currentValue ) {\n if ( currentValue[p] !== undefined ) {\n if ( typeof currentValue[p] === 'object' && currentValue[p].constructor.name === 'Object' ) {\n previousValue[p] = merge( previousValue[p] || {}, currentValue[p] );\n } else {\n previousValue[p] = currentValue[p];\n }\n }\n }\n return previousValue\n}\nexport function mergeObjects( obj1: T, obj2: U ): RequiredAndNotNull;\nexport function mergeObjects( obj1: T, obj2: U, obj3: K ): RequiredAndNotNull;\nexport function mergeObjects( ...objects: any[] ) {\n return objects.reduce( ( previousValue, currentValue ) => {\n return merge( previousValue || {}, currentValue )\n }, {} ) as any\n}\n","export const isResponseType = ( type: string, response_type?: string ) =>\n response_type && response_type.split( /\\s+/g ).filter( rt => rt === type ).length > 0\n\nexport const isScopeIncluded = ( scope: string, scopes?: string ) =>\n scopes && scopes.split( ' ' ).indexOf( scope ) > -1\n","import { InteractionCancelled, OIDCClientError } from '../errors';\nimport type { PopupOptions } from '../interfaces';\n\nconst openPopup = ( url: string, width = 400, height = 600 ) => {\n const left = window.screenX + ( window.innerWidth - width ) / 2;\n const top = window.screenY + ( window.innerHeight - height ) / 2;\n\n return window.open(\n url,\n 'oidc-login-popup',\n `left=${ left },top=${ top },width=${ width },height=${ height },resizable,scrollbars=yes,status=1`\n );\n};\n\nexport function runPopup( url: string, options: PopupOptions ) {\n let popup = options.popup;\n\n if ( popup ) {\n popup.location.href = url;\n } else {\n popup = openPopup( url );\n }\n\n if ( !popup ) {\n /* istanbul ignore next */\n throw new Error( 'Could not open popup' );\n }\n\n let timeoutId: any ;\n let closeId: any ;\n\n return new Promise<{ response: any, state: string }>( ( resolve, reject ) => {\n function clearHandlers(){\n clearInterval( closeId );\n clearTimeout( timeoutId )\n window.removeEventListener( 'message', messageListener )\n }\n\n timeoutId = setTimeout( () => {\n clearHandlers()\n reject( new OIDCClientError( 'Timed out' ) );\n }, options.timeout || 60 * 1000 )\n\n closeId = setInterval( function () {\n if ( popup!.closed ) {\n clearHandlers()\n reject( new InteractionCancelled( 'user closed popup' ) )\n }\n }, 300 );\n\n window.addEventListener( 'message', messageListener );\n\n function messageListener( e: MessageEvent ){\n if ( !e.data || e.data.type !== 'authorization_response' ) return;\n clearHandlers();\n popup!.close();\n const data = e.data.response || e.data\n data.error ? reject( new OIDCClientError( data.error, data.error_description ) )\n : resolve( e.data );\n }\n } );\n}\n","/*\nJitbit TabUtils - helper for multiple browser tabs. version 1.0\nhttps://github.com/jitbit/TabUtils\n- executing \"interlocked\" function call - only once per multiple tabs\n- broadcasting a message to all tabs (including the current one) with some message \"data\"\n- handling a broadcasted message\nMIT license: https://github.com/jitbit/TabUtils/blob/master/LICENSE\n*/\n\nimport type { EventEmitter } from '../helpers';\n\nconst currentTabId = `${ performance.now() }:${ Math.random() * 1000000000 | 0 }`;\nconst handlers: Record = {};\n\nexport class TabUtils {\n keyPrefix: string;\n\n private events: EventEmitter;\n\n constructor( kid: string, fallbackEvents: EventEmitter ) {\n this.keyPrefix = kid;\n this.events = fallbackEvents\n }\n\n //runs code only once in multiple tabs\n //the lock holds for 4 seconds (in case the function is async and returns right away, for example, an ajax call intiated)\n //then it is cleared\n CallOnce( lockname: string, fn: () => void, timeout = 3000 ): void{\n if ( !lockname ) throw 'empty lockname';\n\n if ( !window.localStorage ) { //no local storage. old browser. screw it, just run the function\n fn();\n return;\n }\n\n const localStorageKey = this.keyPrefix + lockname;\n\n localStorage.setItem( localStorageKey, currentTabId );\n //re-read after a delay (after all tabs have saved their tabIDs into ls)\n setTimeout( () => {\n if ( localStorage.getItem( localStorageKey ) == currentTabId )\n fn();\n }, 150 );\n\n //cleanup - release the lock after 3 seconds and on window unload (just in case user closed the window while the lock is still held)\n setTimeout( function () { localStorage.removeItem( localStorageKey ); }, timeout );\n }\n\n BroadcastMessageToAllTabs( messageId: string, eventData: any ): void{\n //now we also need to manually execute handler in the current tab too, because current tab does not get 'storage' events\n try { handlers[messageId]( eventData ); } //\"try\" in case handler not found\n catch ( x ) { }\n\n if ( !window.localStorage ){\n this.events.emit( messageId, eventData )\n return; //no local storage. old browser\n }\n\n const data = {\n data: eventData,\n timeStamp: new Date().getTime()\n }; //add timestamp because overwriting same data does not trigger the event\n\n //this triggers 'storage' event for all other tabs except the current tab\n localStorage.setItem( `${ this.keyPrefix }event${ messageId }`, JSON.stringify( data ) );\n\n //cleanup\n setTimeout( () => { localStorage.removeItem( `${ this.keyPrefix }event${ messageId }` ); }, 3000 );\n }\n\n OnBroadcastMessage( messageId: string, fn: ( data: any ) => void ): void{\n handlers[messageId] = fn;\n if ( !window.localStorage ){\n this.events.on( messageId, fn )\n return; //no local storage. old browser\n }\n\n //first register a handler for \"storage\" event that we trigger above\n window.addEventListener( 'storage', ( ev ) => {\n if ( ev.key != `${ this.keyPrefix }event${ messageId }` ) return; // ignore other keys\n if ( !ev.newValue ) return; //called by cleanup?\n const messageData = JSON.parse( ev.newValue );\n fn( messageData.data );\n } );\n }\n}\n","import type { SessionChecker, SessionCheckerOptions } from '../interfaces';\n\nimport { createHiddenFrame } from './iframe';\n\nconst DEFAULT_CHECK_INTERVAL = 2000\n\nexport function createSessionCheckerFrame( options: SessionCheckerOptions ): SessionChecker{\n const { url, callback, client_id, checkInterval } = options\n let internalSessionState: string | null;\n const idx = url.indexOf( '/', url.indexOf( '//' ) + 2 );\n const frameOrigin = url.substr( 0, idx );\n\n const frame = createHiddenFrame()\n\n let timer: any\n\n const load = () => {\n return new Promise( resolve => {\n window.document.body.appendChild( frame );\n window.addEventListener( 'message', iframeEventHandler, false );\n frame.onload = () => {\n resolve( null )\n }\n } )\n }\n\n const start = ( sessionState: string ) => {\n load().then( () => {\n if ( sessionState && internalSessionState !== sessionState ) {\n stop();\n internalSessionState = sessionState;\n const send = () => {\n frame.contentWindow!.postMessage( `${ client_id } ${ internalSessionState }`, frameOrigin );\n };\n send();\n timer = window.setInterval( send, checkInterval || DEFAULT_CHECK_INTERVAL );\n }\n } )\n }\n\n const stop = () => {\n internalSessionState = null;\n if ( timer ) {\n window.clearInterval( timer );\n timer = null;\n }\n }\n\n const iframeEventHandler = ( e: MessageEvent ) => {\n if ( e.origin === frameOrigin && e.source === frame.contentWindow ) {\n if ( e.data === 'error' ) {\n stop();\n callback( e.data );\n } else if ( e.data === 'changed' ) {\n stop();\n callback();\n }\n }\n }\n\n frame.setAttribute( 'src', url );\n\n return {\n stop,\n start\n }\n}\n","import { OIDCClient } from './client';\nimport type { IPlusAuthClientOptions } from './interfaces';\n\nexport * from './interfaces'\nexport * from './client'\nexport * from './constants'\nexport * from './helpers'\nexport * from './errors'\n\n/**\n * Create OIDC client with initializing it. It resolves issuer metadata, jwks keys and check if user is\n * authenticated in OpenId Connect provider.\n */\nexport default function createOIDCClient( options: IPlusAuthClientOptions ): Promise{\n return new OIDCClient( options ).initialize()\n}\n"],"names":["Events","USER_LOGOUT","USER_LOGIN","SILENT_RENEW_SUCCESS","SILENT_RENEW_ERROR","SESSION_CHANGE","OIDCClientError","Error","constructor","error","error_description","name","AuthenticationError","state","error_uri","StateNotFound","InvalidJWTError","details","InvalidIdTokenError","InteractionCancelled","StateStore","prefix","LocalStorageStateStore","get","key","Promise","resolve","value","window","localStorage","getItem","JSON","parse","set","setItem","stringify","del","removeItem","clear","before","i","storedKeys","length","substring","push","storedItem","created_at","e","InMemoryStateStore","map","forEach","val","ind","delete","Map","EventEmitter","once","event","fn","on","onArgs","off","apply","cb","callbacks","splice","emit","args","cbs","slice","len","Timer","start","duration","callback","expiration","now","_expiration","_timerHandle","stop","timerDuration","setInterval","clearInterval","currentTimeInMillisFunc","Date","_define_property","createHiddenFrame","iframe","document","createElement","style","width","height","position","visibility","display","title","ariaHidden","lookup","code","buildEncodedQueryString","obj","appendable","ret","d","hasOwnProperty","encodeURIComponent","join","request","options","body","headers","method","requestType","reject","fetch","url","then","json","catch","CHARSET","generateRandom","out","charsLen","maxByte","buf","getRandomBytes","n","crypto","self","msCrypto","a","Uint8Array","getRandomValues","subarray","Math","min","ceil","randomByte","charAt","urlDecodeB64","input","decodeURIComponent","atob","replace","split","c","charCodeAt","toString","parseJwt","jwt","parts","header","payload","nonUserClaims","mergeObjects","objects","reduce","previousValue","currentValue","merge","p","undefined","isResponseType","type","response_type","filter","rt","isScopeIncluded","scope","scopes","indexOf","openPopup","left","screenX","innerWidth","top","screenY","innerHeight","open","currentTabId","performance","random","handlers","TabUtils","CallOnce","lockname","timeout","localStorageKey","keyPrefix","setTimeout","BroadcastMessageToAllTabs","messageId","eventData","x","events","data","timeStamp","getTime","OnBroadcastMessage","addEventListener","ev","newValue","messageData","kid","fallbackEvents","OIDCClient","initialize","checkLogin","initialized","__initializePromise","stateStore","init","authStore","endpoints","Object","keys","fetchFromIssuer","frameElement","silentLogin","localAuth","onUserLogin","message","login","localState","location","assign","createAuthRequest","loginWithPopup","popupOptions","response_mode","request_type","response","runPopup","timeoutId","closeId","popup","href","clearHandlers","clearTimeout","removeEventListener","messageListener","close","closed","authParams","loadState","tokenResult","handleAuthResponse","authObject","handleTokenResult","session_state","synchronizer","loginCallback","parsedUrl","URL","responseParams","parseQueryUrl","result","params","trim","paramAndValue","shift","search","hash","rawStoredState","parent","postMessage","protocol","host","opener","logout","localOnly","storedAuth","id_token_hint","id_token_raw","createLogoutRequest","revokeToken","token","revocation_endpoint","finalOptions","client_id","client_secret","token_type_hint","http","finalState","prompt","silent_redirect_uri","redirect_uri","useRefreshToken","refresh_token","exchangeRefreshToken","authUrl","silentRequestTimeout","eventOrigin","origin","onLoadTimeoutId","timeoutSetTimeoutId","removeIframe","iframeEventHandler","eventSource","source","resp","contains","removeChild","onLoadTimeout","appendChild","setAttribute","onload","getAccessToken","_this","access_token","getRefreshToken","getIdToken","id_token","getExpiresIn","expires_in","getIdTokenRaw","getScopes","_scope","getUser","user","isLoggedIn","existsOnLocal","_this_options_endpoints","authorization_endpoint","code_verifier","stateLength","audience","ui_locales","claims","claims_locales","acr_values","registration","login_hint","web_message_uri","web_message_target","extraParams","nonce","nonceLength","code_challenge","subtle","digest","TextEncoder","encode","buffer","encoded","fromByteArray","uint8","tmp","extraBytes","len2","encodeChunk","end","output","num","code_challenge_method","currentTimeInMillis","fragment","authParamsString","end_session_endpoint","logoutParams","post_logout_redirect_uri","extraLogoutParams","exchangeAuthorizationCode","token_endpoint","extraTokenHeaders","extraTokenParams","rest","mergedOptions","grant_type","req","requestUrl","issuer","issuer_metadata","prop","endsWith","parsedIDToken","validateIdToken","validateJwt","isIdToken","clockSkew","iss","aud","Array","isArray","azp","lowerNow","upperNow","floor","iat","Number","nbf","exp","idTokenValidator","includes","requestUserInfo","userinfo_endpoint","userInfoResult","fetchUserInfo","accessToken","monitorSession","sub","check_session_iframe","console","warn","sessionCheckerFrame","sessionCheckCallback","err","createSessionCheckerFrame","internalSessionState","timer","checkInterval","idx","frameOrigin","substr","frame","load","contentWindow","sessionState","send","checkSessionInterval","authObj","isInternal","idToken","idTokenRaw","refreshToken","checkSession","id","autoSilentRenew","secondsToRefreshAccessTokenBeforeExp","renew","_accessTokenExpireTimer","isValidIssuer","btoa","httpClient","bind"],"mappings":"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","x_google_ignoreList":[8]} \ No newline at end of file +{"version":3,"file":"oidc-client.min.js","sources":["../src/constants/events.ts","../src/errors.ts","../src/helpers/state_manager/state_store.ts","../src/helpers/state_manager/local_storage.ts","../src/helpers/state_manager/in_memory.ts","../src/helpers/event_emitter.ts","../src/helpers/timer.ts","../src/utils/iframe.ts","../src/client.ts","../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js","../src/utils/url.ts","../src/utils/request.ts","../src/utils/jose.ts","../src/utils/object.ts","../src/utils/oidc.ts","../src/utils/popup.ts","../src/utils/tab_utils.ts","../src/utils/check_session_iframe.ts","../src/index.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/indent */\nexport const Events = {\n USER_LOGOUT: \"user_logout\",\n USER_LOGIN: \"user_login\",\n SILENT_RENEW_SUCCESS: \"silent_renew_success\",\n SILENT_RENEW_ERROR: \"silent_renew_error\",\n SESSION_CHANGE: \"session_change\",\n} as const\n\nexport type EventTypes =\n | \"user_logout\"\n | \"user_login\"\n | \"silent_renew_success\"\n | \"silent_renew_error\"\n | \"session_change\"\n | \"session_error\"\n","export class OIDCClientError extends Error {\n error: string\n\n error_description?: string\n\n public constructor(error: string, error_description?: string) {\n super(`${error}${(error_description && ` - ${error_description}`) || \"\"}`)\n this.name = \"OIDCClientError\"\n this.error = error\n this.error_description = error_description\n }\n}\n\nexport class AuthenticationError extends OIDCClientError {\n state?: string\n\n error_uri?: string\n\n constructor(error: string, error_description?: string, state?: string, error_uri?: string) {\n super(error, error_description)\n this.name = \"AuthenticationError\"\n this.state = state\n this.error_uri = error_uri\n }\n}\n\nexport class StateNotFound extends AuthenticationError {\n state?: string\n\n constructor(error: string, state?: string) {\n super(error)\n this.name = \"StateNotFound\"\n this.state = state\n }\n}\n\nexport class InvalidJWTError extends OIDCClientError {\n constructor(details: string) {\n super(details)\n this.name = \"InvalidJWTError\"\n this.error_description = details\n }\n}\n\nexport class InvalidIdTokenError extends InvalidJWTError {\n constructor(details: string) {\n super(details)\n this.name = \"InvalidIdTokenError\"\n }\n}\n\nexport class InteractionCancelled extends OIDCClientError {\n constructor(details: string) {\n super(details)\n this.name = \"InteractionCancelled\"\n }\n}\n","export interface StateStore> {\n init?(): Promise>\n}\n// biome-ignore lint/suspicious/noUnsafeDeclarationMerging:\nexport abstract class StateStore> {\n prefix: string\n\n constructor(prefix = \"\") {\n this.prefix = prefix\n }\n\n public abstract get(key: string): Promise\n\n public abstract set(key: string, value: T): Promise\n\n public abstract del(key: string): Promise\n\n public abstract clear(maxAge?: number): Promise\n}\n","import { StateStore } from \"./state_store\"\n\nexport class LocalStorageStateStore extends StateStore {\n constructor(prefix = \"pa_oidc.\") {\n super(prefix)\n }\n\n get(key: string) {\n return new Promise((resolve) => {\n const value = window.localStorage.getItem(this.prefix + key)\n if (value) {\n resolve(JSON.parse(value))\n } else {\n resolve(null)\n }\n })\n }\n\n set(key: string, value: T) {\n return new Promise((resolve) => {\n window.localStorage.setItem(this.prefix + key, JSON.stringify(value))\n resolve()\n })\n }\n\n del(key: string) {\n return new Promise((resolve) => {\n window.localStorage.removeItem(this.prefix + key)\n resolve()\n })\n }\n\n clear(before?: number): Promise {\n return new Promise((resolve) => {\n let i\n const storedKeys: string[] = []\n for (i = 0; i < window.localStorage.length; i++) {\n const key = window.localStorage.key(i)\n // items only created by oidc client\n if (key?.substring(0, this.prefix.length) === this.prefix) {\n storedKeys.push(key)\n }\n }\n for (i = 0; i < storedKeys.length; i++) {\n if (before) {\n try {\n const storedItem = JSON.parse(window.localStorage.getItem(storedKeys[i])!)\n if (storedItem.created_at < before) {\n window.localStorage.removeItem(storedKeys[i])\n }\n } catch (e) {}\n } else {\n window.localStorage.removeItem(storedKeys[i])\n }\n }\n resolve()\n })\n }\n}\n","import { StateStore } from \"./state_store\"\n\nexport class InMemoryStateStore extends StateStore {\n map = new Map()\n\n clear(before?: number) {\n if (before) {\n this.map.forEach((val, ind) => {\n if (val.created_at < before) {\n this.map.delete(ind)\n }\n })\n return Promise.resolve()\n }\n return Promise.resolve(this.map.clear())\n }\n\n del(key: string) {\n this.map.delete(key)\n return Promise.resolve()\n }\n\n get(key: string) {\n return Promise.resolve(this.map.get(key) || null)\n }\n\n set(key: string, value: any) {\n this.map.set(key, value)\n return Promise.resolve()\n }\n}\n","export type Listener = (...args: any) => void\n\nexport class EventEmitter {\n callbacks: Record\n\n constructor() {\n this.callbacks = {}\n }\n\n once(event: T, fn: (...args: any[]) => void) {\n function on(this: EventEmitter, ...onArgs: any[]) {\n this.off(event, on)\n fn.apply(this, onArgs)\n }\n on.fn = fn\n this.on(event, on)\n return this\n }\n\n on(event: T, cb: (...args: any[]) => void) {\n if (!this.callbacks[`$${event}`]) this.callbacks[`$${event}`] = []\n this.callbacks[`$${event}`].push(cb)\n return this\n }\n\n off(event?: T, fn?: (...args: any[]) => void) {\n if (!event) {\n this.callbacks = {}\n return this\n }\n\n // specific event\n const callbacks = this.callbacks[`$${event}`]\n if (!callbacks) return this\n\n // remove all handlers\n if (!fn) {\n delete this.callbacks[`$${event}`]\n return this\n }\n\n for (let i = 0; i < callbacks.length; i++) {\n const cb = callbacks[i]\n if (cb === fn || cb.fn === fn) {\n callbacks.splice(i, 1)\n break\n }\n }\n\n // Remove event specific arrays for event types that no\n // one is subscribed for to avoid memory leak.\n if (callbacks.length === 0) {\n delete this.callbacks[`$${event}`]\n }\n\n return this\n }\n\n emit(event: T, ...args: any[]) {\n let cbs = this.callbacks[`$${event}`]\n if (cbs) {\n cbs = cbs.slice(0)\n for (let i = 0, len = cbs.length; i < len; ++i) {\n cbs[i].apply(this, args)\n }\n }\n return this\n }\n}\n","export class Timer {\n private now: () => number\n\n private _timerHandle: any\n\n private _expiration!: number\n\n constructor(currentTimeInMillisFunc = () => Date.now()) {\n this.now = currentTimeInMillisFunc\n }\n\n start(duration: number, callback: () => void) {\n if (duration <= 0) {\n duration = 1\n }\n const expiration = this.now() / 1000 + duration\n if (this._expiration === expiration && this._timerHandle) {\n return\n }\n\n this.stop()\n\n this._expiration = expiration\n\n // prevent device sleep and delayed timers\n let timerDuration = 5\n if (duration < timerDuration) {\n timerDuration = duration\n }\n this._timerHandle = setInterval(() => {\n if (this._expiration <= this.now() / 1000) {\n this.stop()\n callback()\n }\n }, timerDuration * 1000)\n }\n\n stop() {\n if (this._timerHandle) {\n clearInterval(this._timerHandle)\n this._timerHandle = null\n }\n }\n}\n","import { AuthenticationError, OIDCClientError } from \"../errors\"\nimport type { IFrameOptions } from \"../interfaces\"\n\nexport function createHiddenFrame() {\n const iframe = window.document.createElement(\"iframe\")\n iframe.style.width = \"0\"\n iframe.style.height = \"0\"\n iframe.style.position = \"absolute\"\n iframe.style.visibility = \"hidden\"\n iframe.style.display = \"none\"\n\n iframe.title = \"__pa_helper__hidden\"\n iframe.ariaHidden = \"true\"\n\n return iframe\n}\n\nexport function runIframe(url: string, options: IFrameOptions) {\n return new Promise((resolve, reject) => {\n let onLoadTimeoutId: any = null\n const iframe = createHiddenFrame()\n\n const timeoutSetTimeoutId = setTimeout(\n () => {\n reject(new OIDCClientError(\"Timed out\"))\n removeIframe()\n },\n (options.timeout || 10) * 1000,\n )\n\n const iframeEventHandler = (e: MessageEvent) => {\n if (e.origin !== options.eventOrigin) return\n if (!e.data || e.data.type !== \"authorization_response\") return\n const eventSource = e.source\n if (eventSource) {\n ;(eventSource).close()\n }\n\n const resp = e.data.response || e.data\n resp.error\n ? reject(\n new AuthenticationError(resp.error, resp.error_description, resp.state, resp.error_uri),\n )\n : resolve(e.data)\n clearTimeout(timeoutSetTimeoutId)\n removeIframe()\n }\n\n const removeIframe = () => {\n if (onLoadTimeoutId != null) {\n clearTimeout(onLoadTimeoutId)\n }\n if (window.document.body.contains(iframe)) {\n window.document.body.removeChild(iframe)\n }\n window.removeEventListener(\"message\", iframeEventHandler, false)\n }\n\n const onLoadTimeout = () =>\n setTimeout(() => {\n reject(new OIDCClientError(\"Could not complete silent authentication\", url))\n removeIframe()\n }, 300)\n\n window.addEventListener(\"message\", iframeEventHandler, false)\n window.document.body.appendChild(iframe)\n iframe.setAttribute(\"src\", url)\n\n /**\n * In case of wrong client id, wrong redirect_uri, in short when redirect did not happen\n * we assume flow failed.\n */\n iframe.onload = () => {\n onLoadTimeoutId = onLoadTimeout()\n }\n })\n}\n","import type { EventTypes } from \"./constants\"\nimport { Events } from \"./constants\"\n\nimport { AuthenticationError, InvalidIdTokenError, OIDCClientError, StateNotFound } from \"./errors\"\n\nimport type { StateStore } from \"./helpers\"\nimport { EventEmitter, InMemoryStateStore, LocalStorageStateStore } from \"./helpers\"\n\nimport { Timer } from \"./helpers/timer\"\nimport type {\n AuthRecord,\n AuthRequestOptions,\n IEndpointConfiguration,\n IPlusAuthClientOptions,\n LogoutRequestOptions,\n PopupOptions,\n RevokeOptions,\n SessionChecker,\n SessionMonitorOptions,\n StateRecord,\n TokenRequestOption,\n TokenResponse,\n TokenType,\n} from \"./interfaces\"\n\nimport type { RequestOptions } from \"./utils\"\nimport {\n buildEncodedQueryString,\n createSessionCheckerFrame,\n deriveChallenge,\n generateRandom,\n isValidIssuer,\n nonUserClaims,\n parseQueryUrl,\n request,\n runIframe,\n validateIdToken,\n} from \"./utils\"\nimport { cleanUndefined, mergeObjects } from \"./utils/object\"\n\nimport { isResponseType, isScopeIncluded } from \"./utils/oidc\"\nimport { runPopup } from \"./utils/popup\"\nimport { TabUtils } from \"./utils/tab_utils\"\n\n/**\n * `OIDCClient` provides methods for interacting with OIDC/OAuth2 authorization server. Those methods are signing a\n * user in, signing out, managing the user's claims, checking session and managing tokens returned from the\n * OIDC/OAuth2 provider.\n *\n */\nexport class OIDCClient extends EventEmitter {\n options: IPlusAuthClientOptions\n\n user?: any\n\n scopes?: string[]\n\n accessToken?: string\n\n refreshToken?: string\n\n idToken?: string\n\n idTokenRaw?: string\n\n issuer_metadata?: Record\n\n private readonly http: (options: RequestOptions) => Promise | never\n\n private synchronizer: TabUtils\n\n private stateStore: StateStore\n\n private authStore: StateStore\n\n private sessionCheckerFrame?: SessionChecker\n\n private _accessTokenExpireTimer?: Timer\n\n private initialized!: boolean\n\n private __initializePromise!: Promise | undefined\n\n constructor(options: IPlusAuthClientOptions) {\n super()\n if (!isValidIssuer(options.issuer)) {\n throw new OIDCClientError('\"issuer\" must be a valid uri.')\n }\n\n this.synchronizer = new TabUtils(btoa(options.issuer), this)\n\n this.options = mergeObjects(\n {\n secondsToRefreshAccessTokenBeforeExp: 60,\n autoSilentRenew: true,\n checkSession: true,\n stateLength: 10,\n nonceLength: 10,\n },\n options,\n {\n // remove last slash for consistency across the lib\n issuer: options.issuer.endsWith(\"/\") ? options.issuer.slice(0, -1) : options.issuer,\n },\n )\n\n this.http = this.options.httpClient || request\n this.stateStore =\n this.options.stateStore || new LocalStorageStateStore(\"pa_oidc.state.\")\n this.authStore = this.options.authStore || new InMemoryStateStore()\n\n if (this.options.autoSilentRenew) {\n this._accessTokenExpireTimer = new Timer()\n }\n\n this.on(Events.USER_LOGOUT, async () => {\n this.user = undefined\n this.scopes = undefined\n this.accessToken = undefined\n this.idToken = undefined\n this.refreshToken = undefined\n await this.authStore.clear()\n })\n\n this.synchronizer.OnBroadcastMessage(Events.USER_LOGIN, this.onUserLogin.bind(this))\n }\n\n /**\n * Initialize the library with this method. It resolves issuer configuration, jwks keys which are necessary for\n * validating tokens returned from provider and checking if a user is already authenticated in provider.\n *\n * @param checkLogin Make this `false` if you don't want to check user authorization status in provider while\n * initializing. Defaults to `true`\n */\n async initialize(checkLogin = true): Promise | never {\n if (this.initialized) {\n return this\n }\n\n if (this.__initializePromise) {\n return this.__initializePromise\n }\n this.__initializePromise = new Promise(async (resolve, reject) => {\n try {\n if (this.stateStore.init) {\n await this.stateStore.init()\n }\n if (this.authStore.init) {\n await this.authStore.init()\n }\n\n if (!this.options.endpoints || Object.keys(this.options.endpoints).length === 0) {\n await this.fetchFromIssuer()\n }\n this.initialized = true\n\n if (checkLogin) {\n try {\n if (!window?.frameElement) {\n await this.silentLogin()\n }\n } catch (e) {\n this.emit(Events.SILENT_RENEW_ERROR, e)\n await this.authStore.clear()\n }\n } else {\n const localAuth = await this.authStore.get(\"auth\")\n if (localAuth) {\n await this.onUserLogin(localAuth, true)\n }\n }\n resolve(this)\n } catch (e) {\n if (e instanceof OIDCClientError) {\n reject(e)\n } else {\n reject(new OIDCClientError(e.message))\n }\n } finally {\n this.__initializePromise = undefined\n }\n })\n\n return this.__initializePromise\n }\n\n /**\n * Redirect to provider's authorization endpoint using provided parameters. You can override any parameter defined\n * in `OIDCClient`. If you don't provide `state`, `nonce` or `code_verifier` they will be generated automatically\n * in a random and secure way.\n *\n * @param options\n * @param localState\n */\n async login(options: Partial = {}, localState: Record = {}) {\n window.location.assign(await this.createAuthRequest(options, localState))\n }\n\n /**\n * Open a popup with the provider's authorization endpoint using provided parameters. You can override any\n * parameter defined in `OIDCClient`. If you don't provide `state`, `nonce` or `code_verifier` they will be\n * generated automatically in a random and secure way. You can also override popup options.\n *\n * NOTE: Most browsers block popups if they are not happened as a result of user actions. In order to display\n * login popup you must call this method in an event handler listening for a user action like button click.\n *\n * @param options\n * @param popupOptions\n */\n async loginWithPopup(options: Partial = {}, popupOptions: PopupOptions = {}) {\n const url = await this.createAuthRequest({\n response_mode: \"fragment\",\n ...options,\n display: \"popup\",\n request_type: \"p\",\n })\n const { response, state } = await runPopup(url, popupOptions)\n const { authParams, localState } =\n !state || typeof state === \"string\" ? await this.loadState(state || response.state) : state\n const tokenResult = await this.handleAuthResponse(response, authParams, localState)\n const authObject = await this.handleTokenResult(\n tokenResult,\n authParams,\n mergeObjects(this.options, authParams),\n )\n authObject.session_state = response.session_state\n this.synchronizer.BroadcastMessageToAllTabs(Events.USER_LOGIN, authObject)\n return localState\n }\n\n /**\n * After a user successfully authorizes an application, the authorization server will redirect the user back to\n * the application with either an authorization code or access token in the URL. In the callback page you should\n * call this method.\n *\n * @param url Full url which contains authorization request result parameters. Defaults to `window.location.href`\n */\n async loginCallback(url: string = window?.location?.href) {\n if (!url) {\n return Promise.reject(new OIDCClientError(\"Url must be passed to handle login redirect\"))\n }\n let parsedUrl: URL\n try {\n parsedUrl = new URL(url)\n } catch (e) {\n return Promise.reject(new OIDCClientError(`Invalid callback url passed: \"${url}\"`))\n }\n\n const responseParams = parseQueryUrl(parsedUrl.search || parsedUrl.hash)\n const rawStoredState = await this.loadState(responseParams.state)\n const { authParams, localState, request_type } = rawStoredState\n url = url || window.location.href\n switch (request_type) {\n case \"s\":\n if (window?.frameElement) {\n if (url) {\n window.parent.postMessage(\n {\n type: \"authorization_response\",\n response: responseParams,\n state: rawStoredState,\n },\n `${location.protocol}//${location.host}`,\n )\n }\n }\n return\n case \"p\":\n if (window.opener && url) {\n window.opener.postMessage(\n {\n type: \"authorization_response\",\n response: responseParams,\n state: rawStoredState,\n },\n `${location.protocol}//${location.host}`,\n )\n }\n return\n default: {\n if (responseParams.error) {\n return Promise.reject(\n new AuthenticationError(responseParams.error, responseParams.error_description),\n )\n }\n const tokenResult = await this.handleAuthResponse(responseParams, authParams, localState)\n const authObject = await this.handleTokenResult(\n tokenResult,\n authParams,\n mergeObjects(this.options, authParams),\n )\n authObject.session_state = responseParams.session_state\n this.synchronizer.BroadcastMessageToAllTabs(Events.USER_LOGIN, authObject)\n return localState\n }\n }\n }\n\n /**\n * Redirect to provider's `end_session_endpoint` with provided parameters. After logout provider will redirect to\n * provided `post_logout_redirect_uri` if it provided.\n * @param options\n */\n async logout(options: LogoutRequestOptions = {}) {\n if (!options.localOnly) {\n const storedAuth = await this.authStore.get(\"auth\")\n const id_token_hint = options.id_token_hint || storedAuth?.id_token_raw\n window.location.assign(\n await this.createLogoutRequest({\n ...options,\n id_token_hint,\n }),\n )\n }\n await this.authStore.clear()\n }\n\n /**\n * OAuth2 token revocation implementation method. See more at [tools.ietf.org/html/rfc7009](https://tools.ietf.org/html/rfc7009)\n * @param token Token to be revoked\n * @param type Passed token's type. It will be used to provide `token_type_hint` parameter.\n * @param options If necessary override options passed to `OIDCClient` by defining them here.\n */\n async revokeToken(token: string, type: TokenType = \"access_token\", options: RevokeOptions = {}) {\n if (!this.options.endpoints!.revocation_endpoint) {\n return Promise.reject(new OIDCClientError('\"revocation_endpoint\" doesn\\'t exist'))\n }\n const finalOptions = {\n client_id: options.client_id || this.options.client_id,\n client_secret: options.client_secret || this.options.client_secret,\n token_type_hint: type,\n token: token,\n }\n\n return this.http({\n method: \"POST\",\n requestType: \"form\",\n url: this.options.endpoints!.revocation_endpoint,\n body: finalOptions,\n })\n }\n\n /**\n * Login without having an interaction. If refresh tokens are used and there is a stored refresh token it will\n * exchange refresh token to receive new access token. If not it silently makes a request the provider's\n * authorization endpoint using provided parameters. You can override any parameter defined in `OIDCClient`. If\n * you don't provide `state`, `nonce` or `code_verifier` they will be generated automatically in a random and\n * secure way.\n *\n * @param options\n * @param localState\n */\n async silentLogin(options: AuthRequestOptions = {}, localState: Record = {}) {\n await this.initialize(false)\n let tokenResult: any\n let finalState: any = {}\n\n const storedAuth = (await this.authStore.get(\"auth\")) || {}\n\n const finalOptions = mergeObjects(\n {\n response_mode: \"query\",\n display: \"page\",\n prompt: \"none\",\n },\n this.options,\n options,\n )\n\n if (finalOptions.silent_redirect_uri) {\n finalOptions.redirect_uri = finalOptions.silent_redirect_uri\n }\n\n if (this.options.useRefreshToken && storedAuth?.refresh_token) {\n finalState.authParams = mergeObjects(\n storedAuth?.authParams || {},\n finalState.authParams || {},\n )\n tokenResult = await this.exchangeRefreshToken({\n ...finalOptions,\n refresh_token: storedAuth.refresh_token,\n })\n } else {\n const authUrl = await this.createAuthRequest(\n {\n ...finalOptions,\n request_type: \"s\",\n },\n localState,\n )\n\n const { response, state } = await runIframe(authUrl, {\n timeout: finalOptions.silentRequestTimeout,\n eventOrigin: window.location.origin,\n })\n tokenResult = await this.handleAuthResponse(response, finalOptions, localState)\n storedAuth.session_state = response.session_state\n finalState = state\n }\n\n const authObject = await this.handleTokenResult(\n tokenResult,\n finalState.authParams,\n finalOptions,\n )\n authObject.session_state = storedAuth.session_state\n this.synchronizer.BroadcastMessageToAllTabs(Events.USER_LOGIN, authObject)\n return finalState.localState\n }\n\n /**\n * Retrieve logged in user's access token if it exists.\n */\n async getAccessToken() {\n return (await this.authStore.get(\"auth\"))?.access_token\n }\n\n /**\n * Retrieve logged in user's refresh token if it exists.\n */\n async getRefreshToken() {\n return (await this.authStore.get(\"auth\"))?.refresh_token\n }\n\n /**\n * Retrieve logged in user's parsed id token if it exists.\n */\n async getIdToken() {\n return (await this.authStore.get(\"auth\"))?.id_token\n }\n\n /**\n * Retrieve access token's expiration.\n */\n async getExpiresIn() {\n return (await this.authStore.get(\"auth\"))?.expires_in\n }\n\n /**\n * Retrieve logged in user's id token in raw format if it exists.\n */\n async getIdTokenRaw() {\n return (await this.authStore.get(\"auth\"))?.id_token_raw\n }\n\n /**\n * Retrieve logged in user's scopes if it exists.\n */\n async getScopes() {\n return (await this.authStore.get(\"auth\"))?.scope?.split(\" \")\n }\n\n /**\n * Retrieve logged in user's profile.\n */\n async getUser() {\n return (await this.authStore.get(\"auth\"))?.user\n }\n\n /**\n * If there is a user stored locally return true. Otherwise it will make a silentLogin to check if End-User is\n * logged in provider.\n *\n * @param localOnly Don't check provider\n */\n async isLoggedIn(localOnly = false) {\n const existsOnLocal = !!(await this.getUser())\n if (!existsOnLocal && !localOnly) {\n try {\n await this.silentLogin()\n return true\n } catch (e) {\n return false\n }\n }\n return existsOnLocal\n }\n\n /**\n * Create authorization request with provided options.\n *\n * @param options\n * @param localState\n * @private\n */\n private async createAuthRequest(\n options: Partial = {},\n localState: Record = {},\n ): Promise {\n if (!this.options.endpoints?.authorization_endpoint) {\n await this.initialize(false)\n }\n // TODO: deep merge for extra params\n const finalOptions = Object.assign({}, this.options, options)\n localState.code_verifier = generateRandom(72)\n\n const authParams = {\n client_id: finalOptions.client_id,\n state: generateRandom(finalOptions.stateLength!),\n scope: finalOptions.scope,\n audience: finalOptions.audience,\n redirect_uri: finalOptions.redirect_uri,\n response_mode: finalOptions.response_mode,\n response_type: finalOptions.response_type || \"code\",\n ui_locales: finalOptions.ui_locales,\n prompt: finalOptions.prompt,\n display: finalOptions.display,\n claims: finalOptions.claims,\n claims_locales: finalOptions.claims_locales,\n acr_values: finalOptions.acr_values,\n registration: finalOptions.registration,\n login_hint: finalOptions.login_hint,\n id_token_hint: finalOptions.id_token_hint,\n web_message_uri: finalOptions.web_message_uri,\n web_message_target: finalOptions.web_message_target,\n ...(finalOptions.extraParams && finalOptions.extraParams),\n } as AuthRequestOptions\n\n if (\n isResponseType(\"id_token\", authParams.response_type) ||\n isScopeIncluded(\"openid\", authParams.scope)\n ) {\n authParams.nonce = generateRandom(finalOptions.nonceLength!)\n }\n\n if (isResponseType(\"code\", authParams.response_type)) {\n authParams.code_challenge = await deriveChallenge(localState.code_verifier)\n authParams.code_challenge_method = finalOptions.code_challenge_method || \"S256\"\n }\n\n const now = this.options.currentTimeInMillis?.() || Date.now()\n const fragment = finalOptions.fragment ? `#${finalOptions.fragment}` : \"\"\n const authParamsString = buildEncodedQueryString(authParams)\n const url = `${this.options.endpoints!.authorization_endpoint}${authParamsString}${fragment}`\n\n // clear 1 day old state entries\n this.stateStore.clear(now - 86400000)\n\n await this.stateStore.set(\n authParams.state!,\n cleanUndefined({\n created_at: now,\n authParams,\n localState,\n request_type: finalOptions.request_type,\n }),\n )\n return url\n }\n\n /**\n * Create a logout request with given options\n *\n * @param options\n * @private\n */\n private async createLogoutRequest(options: LogoutRequestOptions = {}) {\n if (!this.options.endpoints?.end_session_endpoint) {\n await this.fetchFromIssuer()\n }\n const finalOptions = mergeObjects(this.options, options)\n const logoutParams = {\n id_token_hint: finalOptions.id_token_hint,\n post_logout_redirect_uri: finalOptions.post_logout_redirect_uri,\n ...(finalOptions.extraLogoutParams || {}),\n }\n return `${this.options.endpoints!.end_session_endpoint}${buildEncodedQueryString(logoutParams)}`\n }\n\n /**\n * Exchange authorization code retrieved from auth request result.\n * @param options\n * @private\n */\n private async exchangeAuthorizationCode(options: TokenRequestOption) {\n if (!this.options.endpoints?.token_endpoint) {\n await this.fetchFromIssuer()\n }\n const finalOptions = mergeObjects(this.options, options)\n const { extraTokenHeaders, extraTokenParams, ...rest } = finalOptions\n const mergedOptions = {\n ...rest,\n ...(extraTokenParams || {}),\n grant_type: \"authorization_code\",\n }\n\n for (const req of [\"code\", \"redirect_uri\", \"code_verifier\", \"client_id\"] as const) {\n if (!mergedOptions[req]) {\n return Promise.reject(new Error(`\"${req}\" is required`))\n }\n }\n\n return this.http({\n url: `${this.options.endpoints!.token_endpoint}`,\n method: \"POST\",\n requestType: \"form\",\n body: mergedOptions as any,\n headers: extraTokenHeaders,\n })\n }\n\n /**\n * Exchange refresh token with given options\n * @param options\n * @private\n */\n private async exchangeRefreshToken(options: Partial) {\n if (!this.options.endpoints?.token_endpoint) {\n await this.fetchFromIssuer()\n }\n const { extraTokenHeaders, extraTokenParams, ...rest } = options\n const mergedOptions = {\n grant_type: \"refresh_token\",\n client_id: this.options.client_id,\n client_secret: this.options.client_secret,\n ...rest,\n ...(extraTokenParams || {}),\n }\n\n for (const req of [\"refresh_token\", \"client_id\"] as const) {\n if (!mergedOptions[req]) {\n return Promise.reject(new Error(`\"${req}\" is required`))\n }\n }\n\n return this.http({\n url: `${this.options.endpoints!.token_endpoint}`,\n method: \"POST\",\n requestType: \"form\",\n body: mergedOptions as any,\n headers: extraTokenHeaders,\n })\n }\n\n /**\n * Fetch OIDC configuration from the issuer.\n */\n private async fetchFromIssuer(): Promise> {\n try {\n const requestUrl = `${this.options.issuer}/.well-known/openid-configuration`\n const response = await this.http({\n url: requestUrl,\n method: \"GET\",\n requestType: \"json\",\n })\n this.issuer_metadata = response as Record\n const endpoints = {} as any\n for (const prop of Object.keys(this.issuer_metadata)) {\n if (\n prop.endsWith(\"_endpoint\") ||\n prop.indexOf(\"_session\") > -1 ||\n prop.indexOf(\"_uri\") > -1\n ) {\n endpoints[prop as keyof IEndpointConfiguration] = this.issuer_metadata[prop]\n }\n }\n this.options.endpoints = endpoints\n return this.issuer_metadata\n } catch (e) {\n throw new OIDCClientError(\"Loading metadata failed\", e.message)\n }\n }\n\n /**\n * Handle auth request result. If there is `code` exchange it.\n * @param response\n * @param finalOptions\n * @param localState\n * @private\n */\n private async handleAuthResponse(\n response: any,\n finalOptions: AuthRequestOptions,\n localState: Record = {},\n ) {\n if (response.code) {\n return this.exchangeAuthorizationCode({\n redirect_uri: finalOptions.redirect_uri,\n client_id: finalOptions.client_id,\n code_verifier: localState.code_verifier,\n grant_type: \"authorization_code\",\n code: response.code,\n })\n }\n return response\n }\n\n /**\n * Handle OAuth2 auth request result\n * @param tokenResult\n * @param authParams\n * @param finalOptions\n * @private\n */\n private async handleTokenResult(\n tokenResult: TokenResponse,\n authParams: AuthRequestOptions,\n finalOptions: IPlusAuthClientOptions,\n ) {\n await this.initialize(false)\n let user: any = {}\n if (tokenResult.error) {\n throw new AuthenticationError(tokenResult.error, tokenResult.error_description)\n }\n let parsedIDToken: any\n if (tokenResult.id_token) {\n parsedIDToken = await validateIdToken(tokenResult.id_token, authParams.nonce!, finalOptions)\n if (\n finalOptions.idTokenValidator &&\n !(await finalOptions.idTokenValidator(tokenResult.id_token))\n ) {\n return Promise.reject(new InvalidIdTokenError(\"Id Token validation failed\"))\n }\n Object.keys(parsedIDToken).forEach((key) => {\n if (!nonUserClaims.includes(key as any)) {\n user[key] = parsedIDToken[key]\n }\n })\n }\n\n if (tokenResult.access_token) {\n if (finalOptions.requestUserInfo && this.options.endpoints?.userinfo_endpoint) {\n const userInfoResult = await this.fetchUserInfo(tokenResult.access_token)\n if (!userInfoResult.error) {\n user = { ...user, ...userInfoResult }\n }\n }\n }\n\n return {\n authParams,\n user,\n ...tokenResult,\n id_token: parsedIDToken,\n id_token_raw: tokenResult.id_token,\n scope: tokenResult.scope || authParams.scope,\n }\n }\n\n /**\n * Load stored state\n *\n * @param state\n * @private\n */\n private async loadState(state: string) {\n const rawStoredState = await this.stateStore.get(state)\n if (!rawStoredState) {\n return Promise.reject(new StateNotFound(\"Local state not found\", state))\n }\n await this.stateStore.del(state)\n return rawStoredState\n }\n\n /**\n * Load user info by making request to providers `userinfo_endpoint`\n *\n * @param accessToken\n * @private\n */\n private async fetchUserInfo(accessToken: string) {\n return this.http({\n method: \"GET\",\n url: `${this.options.endpoints!.userinfo_endpoint}`,\n requestType: \"json\",\n headers: {\n Authorization: `Bearer ${accessToken}`,\n },\n })\n }\n\n /**\n * Start monitoring End-User's session if the OIDC provider supports session management. See more at [OIDC Session\n * Management](https://openid.net/specs/openid-connect-session-1_0.html)\n *\n * @param sub End-User's id to for monitoring session\n * @param session_state string that represents the End-User's login state at the OP\n */\n private monitorSession({ sub, session_state }: SessionMonitorOptions) {\n const { client_id, endpoints } = this.options\n\n if (!endpoints?.check_session_iframe) {\n console.warn(\n '\"check_session_iframe\" endpoint missing or session management is not supported by provider',\n )\n return\n }\n if (!this.sessionCheckerFrame) {\n const sessionCheckCallback = async (err: any) => {\n if (err) {\n this.emit(Events.USER_LOGOUT)\n } else {\n this.emit(Events.SESSION_CHANGE)\n try {\n await this.silentLogin({}, {})\n const storedAuth = await this.authStore.get(\"auth\")\n if (storedAuth) {\n if (storedAuth.user?.sub === sub && storedAuth.session_state) {\n this.sessionCheckerFrame!.start(storedAuth.session_state)\n }\n } else {\n this.emit(Events.USER_LOGOUT, null)\n }\n } catch (e) {\n this.emit(Events.USER_LOGOUT)\n return\n }\n }\n }\n\n this.sessionCheckerFrame = createSessionCheckerFrame({\n url: endpoints.check_session_iframe,\n client_id: client_id,\n callback: sessionCheckCallback,\n checkInterval: this.options.checkSessionInterval,\n })\n }\n\n this.sessionCheckerFrame.start(session_state)\n }\n\n private async onUserLogin(authObj: any, isInternal = false) {\n const {\n expires_in,\n user,\n scope,\n access_token,\n id_token,\n refresh_token,\n session_state,\n id_token_raw,\n } = authObj\n await this.authStore.set(\"auth\", authObj)\n\n this.user = user\n this.scopes = scope?.split(\" \")\n this.accessToken = access_token\n this.idToken = id_token\n this.idTokenRaw = id_token_raw\n this.refreshToken = refresh_token\n\n if (!isInternal) {\n this.emit(Events.USER_LOGIN, authObj)\n }\n if (!window?.frameElement) {\n if (this.options.checkSession) {\n this.monitorSession({ sub: user.sub || user.id, session_state })\n }\n\n if (expires_in !== undefined && this.options.autoSilentRenew) {\n const expiration = Number(expires_in) - this.options.secondsToRefreshAccessTokenBeforeExp!\n const renew = () => {\n this.synchronizer.CallOnce(\"silent-login\", async () => {\n try {\n await this.silentLogin()\n this.emit(Events.SILENT_RENEW_SUCCESS, null)\n } catch (e) {\n this.emit(Events.SILENT_RENEW_ERROR, e)\n }\n })\n }\n if (expiration >= 0) {\n this._accessTokenExpireTimer!.start(expiration, async () => {\n renew()\n })\n } else {\n renew()\n }\n }\n }\n }\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","import { fromByteArray } from \"base64-js\"\n\nexport function isValidIssuer(issuer: string) {\n try {\n const url = new URL(issuer)\n if (![\"http:\", \"https:\"].includes(url.protocol)) {\n return false\n }\n if (url.search !== \"\" || url.hash !== \"\") {\n return false\n }\n return true\n } catch (e) {\n return false\n }\n}\nexport function buildEncodedQueryString(obj?: Record, appendable = true) {\n if (!obj) return \"\"\n const ret: string[] = []\n for (const d in obj) {\n if (obj.hasOwnProperty(d) && obj[d]) {\n ret.push(\n `${encodeURIComponent(d)}=${encodeURIComponent(\n typeof obj[d] === \"object\" ? JSON.stringify(obj[d]) : obj[d]!,\n )}`,\n )\n }\n }\n return `${appendable ? \"?\" : \"\"}${ret.join(\"&\")}`\n}\n\nexport function parseQueryUrl(value: string) {\n const result: Record = {}\n value = value.trim().replace(/^(\\?|#|&)/, \"\")\n const params = value.split(\"&\")\n for (let i = 0; i < params.length; i += 1) {\n const paramAndValue = params[i]\n const parts = paramAndValue.split(\"=\")\n const key = decodeURIComponent(parts.shift()!)\n const value = parts.length > 0 ? parts.join(\"=\") : \"\"\n result[key] = decodeURIComponent(value)\n }\n return result\n}\n\nexport function urlSafe(buffer: Uint8Array): string {\n const encoded = fromByteArray(new Uint8Array(buffer))\n return encoded.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\")\n}\n","import { buildEncodedQueryString } from \"./url\"\n\nexport interface RequestOptions {\n body?: Record\n headers?: Record\n method: \"GET\" | \"POST\" | \"PATCH\" | \"TRACE\" | \"OPTIONS\" | \"HEAD\"\n requestType?: \"form\" | \"json\"\n url: string\n}\n\nexport function request(options: RequestOptions): Promise {\n let body: any = null\n let headers = options.headers || {}\n if (options.method === \"POST\") {\n headers = {\n \"Content-Type\":\n options.requestType === \"form\"\n ? \"application/x-www-form-urlencoded;charset=UTF-8\"\n : \"application/json;charset=UTF-8\",\n ...headers,\n }\n }\n if (options.body) {\n body =\n options.requestType === \"form\"\n ? buildEncodedQueryString(options.body, false)\n : JSON.stringify(options.body)\n }\n\n return new Promise((resolve, reject) => {\n fetch(options.url, {\n method: options.method,\n body: body,\n headers,\n })\n .then((value: Response) => resolve(value.json()))\n .catch(reject)\n })\n}\n","import { InvalidIdTokenError, InvalidJWTError, OIDCClientError } from \"../errors\"\nimport type { IPlusAuthClientOptions, JWTValidationOptions, ParsedJWT } from \"../interfaces\"\n\nimport { urlSafe } from \"./url\"\n\nconst CHARSET = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\"\n\nfunction getRandomBytes(n: number) {\n // @ts-ignore\n const crypto = self.crypto || self.msCrypto\n const QUOTA = 65536\n const a = new Uint8Array(n)\n for (let i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(a.subarray(i, i + Math.min(n - i, QUOTA)))\n }\n return a\n}\n\nexport function generateRandom(length: number) {\n let out = \"\"\n const charsLen = CHARSET.length\n const maxByte = 256 - (256 % charsLen)\n while (length > 0) {\n const buf = getRandomBytes(Math.ceil((length * 256) / maxByte))\n for (let i = 0; i < buf.length && length > 0; i++) {\n const randomByte = buf[i]\n if (randomByte < maxByte) {\n out += CHARSET.charAt(randomByte % charsLen)\n length--\n }\n }\n }\n return out\n}\n\nexport function deriveChallenge(code: string): Promise {\n if (code.length < 43 || code.length > 128) {\n return Promise.reject(new OIDCClientError(`Invalid code length: ${code.length}`))\n }\n\n return new Promise((resolve, reject) => {\n crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(code)).then(\n (buffer) => {\n return resolve(urlSafe(new Uint8Array(buffer)))\n },\n (error) => {\n /* istanbul ignore next */\n return reject(error)\n },\n )\n })\n}\n// https://datatracker.ietf.org/doc/html/rfc4648#section-5\nexport const urlDecodeB64 = (input: string) =>\n decodeURIComponent(\n atob(input.replace(/_/g, \"/\").replace(/-/g, \"+\"))\n .split(\"\")\n .map((c) => {\n return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}`\n })\n .join(\"\"),\n )\n\nexport function parseJwt(jwt: string): ParsedJWT {\n try {\n const parts = jwt.split(\".\")\n if (parts.length !== 3) {\n throw new Error(\"Wrong JWT format\")\n }\n return {\n header: JSON.parse(urlDecodeB64(parts[0])),\n payload: JSON.parse(urlDecodeB64(parts[1])),\n }\n } catch (e) {\n throw new InvalidJWTError(\"Failed to parse jwt\")\n }\n}\n\nexport function validateIdToken(id_token: string, nonce: string, options: IPlusAuthClientOptions) {\n if (!nonce) {\n throw new OIDCClientError(\"No nonce on state\")\n }\n\n try {\n const jwt = parseJwt(id_token)\n\n if (nonce !== jwt.payload.nonce) {\n throw new Error(`Invalid nonce in id_token: ${jwt.payload.nonce}`)\n }\n\n validateJwt(id_token, options, true)\n\n // @ts-ignore\n if (!jwt.payload[\"sub\"]) {\n throw new Error(\"No Subject (sub) present in id_token\")\n }\n\n return jwt.payload\n } catch (e) {\n throw new InvalidIdTokenError(e.message)\n }\n}\n\nexport function validateJwt(jwt: string, options: JWTValidationOptions, isIdToken = false) {\n // eslint-disable-next-line prefer-const\n let { clockSkew, currentTimeInMillis, issuer, audience, client_id } = options\n if (!clockSkew) {\n clockSkew = 0\n }\n const now = (currentTimeInMillis?.() || Date.now()) / 1000\n\n const payload = parseJwt(jwt).payload\n\n if (!payload.iss) {\n throw new InvalidJWTError(\"Issuer (iss) was not provided\")\n }\n if (payload.iss !== issuer) {\n throw new InvalidJWTError(`Invalid Issuer (iss) in token: ${payload.iss}`)\n }\n\n if (!payload.aud) {\n throw new InvalidJWTError(\"Audience (aud) was not provided\")\n }\n\n // Audience must be equal to client_id in id_token\n // https://openid.net/specs/openid-connect-core-1_0.html#IDToken\n if (\n Array.isArray(payload.aud)\n ? payload.aud.indexOf(isIdToken ? client_id : audience || client_id) === -1\n : payload.aud !== (isIdToken ? client_id : audience || client_id)\n ) {\n throw new InvalidJWTError(`Invalid Audience (aud) in token: ${payload.aud}`)\n }\n\n if (payload.azp && payload.azp !== client_id) {\n throw new InvalidJWTError(`Invalid Authorized Party (azp) in token: ${payload.azp}`)\n }\n\n const lowerNow = Math.ceil(now + clockSkew)\n const upperNow = Math.floor(now - clockSkew)\n\n if (!payload.iat) {\n throw new InvalidJWTError(\"Issued At (iat) was not provided\")\n }\n\n if (lowerNow < Number(payload.iat)) {\n throw new InvalidJWTError(`Issued At (iat) is in the future: ${payload.iat}`)\n }\n\n if (payload.nbf && lowerNow < Number(payload.nbf)) {\n throw new InvalidJWTError(`Not Before time (nbf) is in the future: ${payload.nbf}`)\n }\n\n if (!payload.exp) {\n throw new InvalidJWTError(\"Expiration Time (exp) was not provided\")\n }\n if (Number(payload.exp) < upperNow) {\n throw new InvalidJWTError(`Expiration Time (exp) is in the past: ${payload.exp}`)\n }\n\n return payload\n}\n\n// Retrieved from https://www.iana.org/assignments/jwt/jwt.xhtml\nexport const nonUserClaims = [\n \"iss\",\n // 'sub',\n \"aud\",\n \"exp\",\n \"nbf\",\n \"iat\",\n \"jti\",\n \"azp\",\n \"nonce\",\n \"auth_time\",\n \"at_hash\",\n \"c_hash\",\n \"acr\",\n \"amr\",\n \"sub_jwk\",\n \"cnf\",\n \"sip_from_tag\",\n \"sip_date\",\n \"sip_callid\",\n \"sip_cseq_num\",\n \"sip_via_branch\",\n \"orig\",\n \"dest\",\n \"mky\",\n \"events\",\n \"toe\",\n \"txn\",\n \"rph\",\n \"sid\",\n \"vot\",\n \"vtm\",\n \"attest\",\n \"origid\",\n \"act\",\n \"scope\",\n \"client_id\",\n \"may_act\",\n \"jcard\",\n \"at_use_nbr\",\n] as const\n","type RequiredAndNotNull = {\n [P in keyof T]-?: Exclude\n}\n\n/**\n * not suitable for every object but it is enough for this library\n * @param object\n */\nexport function cleanUndefined>(object: T) {\n if (!object || typeof object !== \"object\") {\n return object\n }\n return JSON.parse(JSON.stringify(object)) as RequiredAndNotNull\n}\n\nfunction merge(previousValue: any, currentValue: any) {\n for (const p in currentValue) {\n if (currentValue[p] !== undefined) {\n if (typeof currentValue[p] === \"object\" && currentValue[p].constructor.name === \"Object\") {\n previousValue[p] = merge(previousValue[p] || {}, currentValue[p])\n } else {\n previousValue[p] = currentValue[p]\n }\n }\n }\n return previousValue\n}\nexport function mergeObjects(obj1: T, obj2: U): RequiredAndNotNull\nexport function mergeObjects(\n obj1: T,\n obj2: U,\n obj3: K,\n): RequiredAndNotNull\nexport function mergeObjects(...objects: any[]) {\n return objects.reduce((previousValue, currentValue) => {\n return merge(previousValue || {}, currentValue)\n }, {}) as any\n}\n","export const isResponseType = (type: string, response_type?: string) =>\n response_type && response_type.split(/\\s+/g).filter((rt) => rt === type).length > 0\n\nexport const isScopeIncluded = (scope: string, scopes?: string) =>\n scopes && scopes.split(\" \").indexOf(scope) > -1\n","import { InteractionCancelled, OIDCClientError } from \"../errors\"\nimport type { PopupOptions } from \"../interfaces\"\n\nconst openPopup = (url: string, width = 400, height = 600) => {\n const left = window.screenX + (window.innerWidth - width) / 2\n const top = window.screenY + (window.innerHeight - height) / 2\n\n return window.open(\n url,\n \"oidc-login-popup\",\n `left=${left},top=${top},width=${width},height=${height},resizable,scrollbars=yes,status=1`,\n )\n}\n\nexport function runPopup(url: string, options: PopupOptions) {\n let popup = options.popup\n\n if (popup) {\n popup.location.href = url\n } else {\n popup = openPopup(url)\n }\n\n if (!popup) {\n /* istanbul ignore next */\n throw new Error(\"Could not open popup\")\n }\n\n let timeoutId: any\n let closeId: any\n\n return new Promise<{ response: any; state: string }>((resolve, reject) => {\n function clearHandlers() {\n clearInterval(closeId)\n clearTimeout(timeoutId)\n window.removeEventListener(\"message\", messageListener)\n }\n\n timeoutId = setTimeout(\n () => {\n clearHandlers()\n reject(new OIDCClientError(\"Timed out\"))\n },\n options.timeout || 60 * 1000,\n )\n\n closeId = setInterval(() => {\n if (popup!.closed) {\n clearHandlers()\n reject(new InteractionCancelled(\"user closed popup\"))\n }\n }, 300)\n\n window.addEventListener(\"message\", messageListener)\n\n function messageListener(e: MessageEvent) {\n if (!e.data || e.data.type !== \"authorization_response\") return\n clearHandlers()\n popup!.close()\n const data = e.data.response || e.data\n data.error ? reject(new OIDCClientError(data.error, data.error_description)) : resolve(e.data)\n }\n })\n}\n","/*\nJitbit TabUtils - helper for multiple browser tabs. version 1.0\nhttps://github.com/jitbit/TabUtils\n- executing \"interlocked\" function call - only once per multiple tabs\n- broadcasting a message to all tabs (including the current one) with some message \"data\"\n- handling a broadcasted message\nMIT license: https://github.com/jitbit/TabUtils/blob/master/LICENSE\n*/\n\nimport type { EventEmitter } from \"../helpers\"\n\nconst currentTabId = `${performance.now()}:${(Math.random() * 1000000000) | 0}`\nconst handlers: Record = {}\n\nexport class TabUtils {\n keyPrefix: string\n\n private events: EventEmitter\n\n constructor(kid: string, fallbackEvents: EventEmitter) {\n this.keyPrefix = kid\n this.events = fallbackEvents\n }\n\n //runs code only once in multiple tabs\n //the lock holds for 4 seconds (in case the function is async and returns right away, for example, an ajax call intiated)\n //then it is cleared\n CallOnce(lockname: string, fn: () => void, timeout = 3000): void {\n if (!lockname) throw \"empty lockname\"\n\n if (!window.localStorage) {\n //no local storage. old browser. screw it, just run the function\n fn()\n return\n }\n\n const localStorageKey = this.keyPrefix + lockname\n\n localStorage.setItem(localStorageKey, currentTabId)\n //re-read after a delay (after all tabs have saved their tabIDs into ls)\n setTimeout(() => {\n if (localStorage.getItem(localStorageKey) === currentTabId) fn()\n }, 150)\n\n //cleanup - release the lock after 3 seconds and on window unload (just in case user closed the window while the lock is still held)\n setTimeout(() => {\n localStorage.removeItem(localStorageKey)\n }, timeout)\n }\n\n BroadcastMessageToAllTabs(messageId: string, eventData: any): void {\n //now we also need to manually execute handler in the current tab too, because current tab does not get 'storage' events\n try {\n handlers[messageId](eventData)\n } catch (x) {\n //\"try\" in case handler not found\n }\n\n if (!window.localStorage) {\n this.events.emit(messageId, eventData)\n return //no local storage. old browser\n }\n\n const data = {\n data: eventData,\n timeStamp: new Date().getTime(),\n } //add timestamp because overwriting same data does not trigger the event\n\n //this triggers 'storage' event for all other tabs except the current tab\n localStorage.setItem(`${this.keyPrefix}event${messageId}`, JSON.stringify(data))\n\n //cleanup\n setTimeout(() => {\n localStorage.removeItem(`${this.keyPrefix}event${messageId}`)\n }, 3000)\n }\n\n OnBroadcastMessage(messageId: string, fn: (data: any) => void): void {\n handlers[messageId] = fn\n if (!window.localStorage) {\n this.events.on(messageId, fn)\n return //no local storage. old browser\n }\n\n //first register a handler for \"storage\" event that we trigger above\n window.addEventListener(\"storage\", (ev) => {\n if (ev.key !== `${this.keyPrefix}event${messageId}`) return // ignore other keys\n if (!ev.newValue) return //called by cleanup?\n const messageData = JSON.parse(ev.newValue)\n fn(messageData.data)\n })\n }\n}\n","import type { SessionChecker, SessionCheckerOptions } from \"../interfaces\"\n\nimport { createHiddenFrame } from \"./iframe\"\n\nconst DEFAULT_CHECK_INTERVAL = 2000\n\nexport function createSessionCheckerFrame(options: SessionCheckerOptions): SessionChecker {\n const { url, callback, client_id, checkInterval } = options\n let internalSessionState: string | null\n const idx = url.indexOf(\"/\", url.indexOf(\"//\") + 2)\n const frameOrigin = url.substr(0, idx)\n\n const frame = createHiddenFrame()\n\n let timer: any\n\n const load = () => {\n return new Promise((resolve) => {\n window.document.body.appendChild(frame)\n window.addEventListener(\"message\", iframeEventHandler, false)\n frame.onload = () => {\n resolve(null)\n }\n })\n }\n\n const start = (sessionState: string) => {\n load().then(() => {\n if (sessionState && internalSessionState !== sessionState) {\n stop()\n internalSessionState = sessionState\n const send = () => {\n frame.contentWindow!.postMessage(`${client_id} ${internalSessionState}`, frameOrigin)\n }\n send()\n timer = window.setInterval(send, checkInterval || DEFAULT_CHECK_INTERVAL)\n }\n })\n }\n\n const stop = () => {\n internalSessionState = null\n if (timer) {\n window.clearInterval(timer)\n timer = null\n }\n }\n\n const iframeEventHandler = (e: MessageEvent) => {\n if (e.origin === frameOrigin && e.source === frame.contentWindow) {\n if (e.data === \"error\") {\n stop()\n callback(e.data)\n } else if (e.data === \"changed\") {\n stop()\n callback()\n }\n }\n }\n\n frame.setAttribute(\"src\", url)\n\n return {\n stop,\n start,\n }\n}\n","import { OIDCClient } from \"./client\"\nimport type { IPlusAuthClientOptions } from \"./interfaces\"\n\nexport * from \"./interfaces\"\nexport * from \"./client\"\nexport * from \"./constants\"\nexport * from \"./helpers\"\nexport * from \"./errors\"\n\n/**\n * Create OIDC client with initializing it. It resolves issuer metadata, jwks keys and check if user is\n * authenticated in OpenId Connect provider.\n */\nexport default function createOIDCClient(options: IPlusAuthClientOptions): Promise {\n return new OIDCClient(options).initialize()\n}\n"],"names":["Events","USER_LOGOUT","USER_LOGIN","SILENT_RENEW_SUCCESS","SILENT_RENEW_ERROR","SESSION_CHANGE","OIDCClientError","Error","constructor","error","error_description","name","AuthenticationError","state","error_uri","StateNotFound","InvalidJWTError","details","InvalidIdTokenError","InteractionCancelled","StateStore","prefix","LocalStorageStateStore","get","key","Promise","resolve","value","window","localStorage","getItem","JSON","parse","set","setItem","stringify","del","removeItem","clear","before","i","storedKeys","length","substring","push","storedItem","created_at","e","InMemoryStateStore","map","forEach","val","ind","delete","Map","EventEmitter","once","event","fn","on","onArgs","off","apply","cb","callbacks","splice","emit","args","cbs","slice","len","Timer","start","duration","callback","expiration","now","_expiration","_timerHandle","stop","timerDuration","setInterval","clearInterval","currentTimeInMillisFunc","Date","_define_property","undefined","createHiddenFrame","iframe","document","createElement","style","width","height","position","visibility","display","title","ariaHidden","base64Js","byteLength","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","arr","Arr","curByte","revLookup","charCodeAt","fromByteArray","uint8","extraBytes","parts","len2","encodeChunk","end","output","lookup","num","join","Uint8Array","Array","code","indexOf","buildEncodedQueryString","obj","appendable","ret","d","hasOwnProperty","encodeURIComponent","request","options","body","headers","method","requestType","reject","fetch","url","then","json","catch","CHARSET","generateRandom","out","charsLen","maxByte","buf","getRandomBytes","n","crypto","self","msCrypto","a","getRandomValues","subarray","Math","min","ceil","randomByte","charAt","urlDecodeB64","input","decodeURIComponent","atob","replace","split","c","toString","parseJwt","jwt","header","payload","nonUserClaims","mergeObjects","objects","reduce","previousValue","currentValue","merge","p","isResponseType","type","response_type","filter","rt","isScopeIncluded","scope","scopes","openPopup","left","screenX","innerWidth","top","screenY","innerHeight","open","currentTabId","performance","random","handlers","TabUtils","CallOnce","lockname","timeout","localStorageKey","keyPrefix","setTimeout","BroadcastMessageToAllTabs","messageId","eventData","x","events","data","timeStamp","getTime","OnBroadcastMessage","addEventListener","ev","newValue","messageData","kid","fallbackEvents","OIDCClient","initialize","checkLogin","initialized","__initializePromise","stateStore","init","authStore","endpoints","Object","keys","fetchFromIssuer","frameElement","silentLogin","localAuth","onUserLogin","message","login","localState","location","assign","createAuthRequest","loginWithPopup","popupOptions","response_mode","request_type","response","runPopup","timeoutId","closeId","popup","href","clearHandlers","clearTimeout","removeEventListener","messageListener","close","closed","authParams","loadState","tokenResult","handleAuthResponse","authObject","handleTokenResult","session_state","synchronizer","loginCallback","parsedUrl","URL","responseParams","parseQueryUrl","result","params","trim","paramAndValue","shift","search","hash","rawStoredState","parent","postMessage","protocol","host","opener","logout","localOnly","storedAuth","id_token_hint","id_token_raw","createLogoutRequest","revokeToken","token","revocation_endpoint","finalOptions","client_id","client_secret","token_type_hint","http","finalState","prompt","silent_redirect_uri","redirect_uri","useRefreshToken","refresh_token","exchangeRefreshToken","authUrl","silentRequestTimeout","eventOrigin","origin","onLoadTimeoutId","timeoutSetTimeoutId","removeIframe","iframeEventHandler","eventSource","source","resp","contains","removeChild","onLoadTimeout","appendChild","setAttribute","onload","getAccessToken","_this","access_token","getRefreshToken","getIdToken","id_token","getExpiresIn","expires_in","getIdTokenRaw","getScopes","_scope","getUser","user","isLoggedIn","existsOnLocal","_this_options_endpoints","_this_options_currentTimeInMillis","_this_options","authorization_endpoint","code_verifier","stateLength","audience","ui_locales","claims","claims_locales","acr_values","registration","login_hint","web_message_uri","web_message_target","extraParams","nonce","nonceLength","code_challenge","subtle","digest","TextEncoder","encode","buffer","encoded","code_challenge_method","currentTimeInMillis","call","fragment","authParamsString","end_session_endpoint","logoutParams","post_logout_redirect_uri","extraLogoutParams","exchangeAuthorizationCode","token_endpoint","extraTokenHeaders","extraTokenParams","rest","mergedOptions","grant_type","req","requestUrl","issuer","issuer_metadata","prop","endsWith","parsedIDToken","validateIdToken","validateJwt","isIdToken","clockSkew","iss","aud","isArray","azp","lowerNow","upperNow","floor","iat","Number","nbf","exp","idTokenValidator","includes","requestUserInfo","userinfo_endpoint","userInfoResult","fetchUserInfo","accessToken","Authorization","monitorSession","sub","check_session_iframe","console","warn","sessionCheckerFrame","sessionCheckCallback","err","createSessionCheckerFrame","internalSessionState","timer","checkInterval","idx","frameOrigin","substr","frame","load","contentWindow","sessionState","send","checkSessionInterval","authObj","isInternal","idToken","idTokenRaw","refreshToken","checkSession","id","autoSilentRenew","secondsToRefreshAccessTokenBeforeExp","renew","_accessTokenExpireTimer","isValidIssuer","btoa","httpClient","bind"],"mappings":"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","x_google_ignoreList":[9]} \ No newline at end of file diff --git a/dist/types.d.ts b/dist/types.d.ts index b8fd9d2..4a25668 100644 --- a/dist/types.d.ts +++ b/dist/types.d.ts @@ -5,7 +5,7 @@ declare const Events: { readonly SILENT_RENEW_ERROR: "silent_renew_error"; readonly SESSION_CHANGE: "session_change"; }; -type EventTypes = 'user_logout' | 'user_login' | 'silent_renew_success' | 'silent_renew_error' | 'session_change' | 'session_error'; +type EventTypes = "user_logout" | "user_login" | "silent_renew_success" | "silent_renew_error" | "session_change" | "session_error"; interface StateStore> { init?(): Promise>; @@ -48,14 +48,14 @@ declare class EventEmitter { interface RequestOptions { body?: Record; headers?: Record; - method: 'GET' | 'POST' | 'PATCH' | 'TRACE' | 'OPTIONS' | 'HEAD'; - requestType?: 'form' | 'json'; + method: "GET" | "POST" | "PATCH" | "TRACE" | "OPTIONS" | "HEAD"; + requestType?: "form" | "json"; url: string; } declare const nonUserClaims: readonly ["iss", "aud", "exp", "nbf", "iat", "jti", "azp", "nonce", "auth_time", "at_hash", "c_hash", "acr", "amr", "sub_jwk", "cnf", "sip_from_tag", "sip_date", "sip_callid", "sip_cseq_num", "sip_via_branch", "orig", "dest", "mky", "events", "toe", "txn", "rph", "sid", "vot", "vtm", "attest", "origid", "act", "scope", "client_id", "may_act", "jcard", "at_use_nbr"]; -type JWTHeaderField = 'typ' | 'cty' | 'alg' | 'zip' | 'jku' | 'jwk' | 'kid' | 'x5u' | 'x5c' | 'x5t' | 'x5t#S256' | 'crit' | 'exp'; +type JWTHeaderField = "typ" | "cty" | "alg" | "zip" | "jku" | "jwk" | "kid" | "x5u" | "x5c" | "x5t" | "x5t#S256" | "crit" | "exp"; interface AuthRequestOptions { acr_values?: string; audience?: string; @@ -76,7 +76,7 @@ interface AuthRequestOptions { prompt?: string; redirect_uri?: string; registration?: string; - request_type?: 's' | 'p' | 'd'; + request_type?: "s" | "p" | "d"; response_mode?: string; response_type?: string; scope?: string; @@ -110,7 +110,7 @@ interface IEndpointConfiguration { token_endpoint?: string; userinfo_endpoint?: string; } -interface IPlusAuthClientOptions extends Omit, Omit { +interface IPlusAuthClientOptions extends Omit, Omit { authStore?: StateStore; /** * Enable/disable automatic access token renewal. If enabled, access tokens will be refreshed by using silent @@ -214,10 +214,10 @@ interface IFrameOptions { } interface ParsedJWT { header: Partial>; - payload: Readonly>; + payload: Readonly>; signature?: string; } -type TokenType = 'access_token' | 'refresh_token'; +type TokenType = "access_token" | "refresh_token"; interface RevokeOptions { client_id?: string; client_secret?: string; @@ -253,7 +253,7 @@ type StateRecord = { authParams: AuthRequestOptions; created_at: number; localState: Record; - request_type: 'p' | 's' | any; + request_type: "p" | "s" | any; }; type AuthRecord = { access_token?: string; diff --git a/docs/assets/hierarchy.js b/docs/assets/hierarchy.js new file mode 100644 index 0000000..8351b80 --- /dev/null +++ b/docs/assets/hierarchy.js @@ -0,0 +1 @@ +window.hierarchyData = "eJyVlE9rwkAQxb/LnNfWJJOw5lasBUv/HBR6EA9LMq3BzS5sRqGI371EKUYN2eQUSN7O773ZRw7grOUK0hUGkUBEEWG4FuDoW1PGhTUVpAcIJmH9MKokSOFz/jyd6oIMg4BtYXJIg1AK2DkNKWRaVRVVjxfVw4ZLDeL8BVLgKh/Vx0bnF0cBETbnL1gxLdg66pp/UXnmC8g2hc4dGUhXUYIiksm6hibYgL7ZTOl6nPqhfgbaT/QIK5MGd27eqbTutx/zXu3nYRA1eLM9GZ6VBTO5LlJTN2TBwSSsl4uIrY2ZOWc7uTfSIWhMUMTBWMQoTxau7vdpxxsyXGSqbrXXRot8kBV5tiDlba8/LL/Yncm91f4X+i84DsZXhdorXeSvX0tvyBvpkIBxOKkDxuHkHj3Pl3ZL/h23yHuERXlFZHLq9KOaKpOR1tS52Ta9j3k8/gFcj7EW" \ No newline at end of file diff --git a/docs/assets/icons.js b/docs/assets/icons.js new file mode 100644 index 0000000..58882d7 --- /dev/null +++ b/docs/assets/icons.js @@ -0,0 +1,18 @@ +(function() { + addIcons(); + function addIcons() { + if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons); + const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg")); + svg.innerHTML = `MMNEPVFCICPMFPCPTTAAATR`; + svg.style.display = "none"; + if (location.protocol === "file:") updateUseElements(); + } + + function updateUseElements() { + document.querySelectorAll("use").forEach(el => { + if (el.getAttribute("href").includes("#icon-")) { + el.setAttribute("href", el.getAttribute("href").replace(/.*#/, "#")); + } + }); + } +})() \ No newline at end of file diff --git a/docs/assets/icons.svg b/docs/assets/icons.svg new file mode 100644 index 0000000..50ad579 --- /dev/null +++ b/docs/assets/icons.svg @@ -0,0 +1 @@ +MMNEPVFCICPMFPCPTTAAATR \ No newline at end of file diff --git a/docs/assets/main.js b/docs/assets/main.js index 21a5d74..4f59cd9 100644 --- a/docs/assets/main.js +++ b/docs/assets/main.js @@ -1,9 +1,9 @@ "use strict"; -window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings."}; -"use strict";(()=>{var Pe=Object.create;var ie=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var _e=Object.getOwnPropertyNames;var Re=Object.getPrototypeOf,Me=Object.prototype.hasOwnProperty;var Fe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var De=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of _e(e))!Me.call(t,i)&&i!==n&&ie(t,i,{get:()=>e[i],enumerable:!(r=Oe(e,i))||r.enumerable});return t};var Ae=(t,e,n)=>(n=t!=null?Pe(Re(t)):{},De(e||!t||!t.__esModule?ie(n,"default",{value:t,enumerable:!0}):n,t));var ue=Fe((ae,le)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[u+1]*i[d+1],u+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),p;m in s.node.edges?p=s.node.edges[m]:(p=new t.TokenSet,s.node.edges[m]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof ae=="object"?le.exports=n():e.lunr=n()}(this,function(){return t})})()});var se=[];function G(t,e){se.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){se.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!Ve(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function Ve(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var oe=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var pe=Ae(ue());async function ce(t,e){if(!window.searchData)return;let n=await fetch(window.searchData),r=new Blob([await n.arrayBuffer()]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();t.data=i,t.index=pe.Index.load(i.index),e.classList.remove("loading"),e.classList.add("ready")}function fe(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:t.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{ce(e,t)}),ce(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");i.addEventListener("mouseup",()=>{te(t)}),r.addEventListener("focus",()=>t.classList.add("has-focus")),He(t,i,r,e)}function He(t,e,n,r){n.addEventListener("input",oe(()=>{Ne(t,e,n,r)},200)),n.addEventListener("keydown",i=>{i.key=="Enter"?Be(e,t):i.key=="ArrowUp"?(de(e,n,-1),i.preventDefault()):i.key==="ArrowDown"&&(de(e,n,1),i.preventDefault())}),document.body.addEventListener("keypress",i=>{i.altKey||i.ctrlKey||i.metaKey||!n.matches(":focus")&&i.key==="/"&&(i.preventDefault(),n.focus())}),document.body.addEventListener("keyup",i=>{t.classList.contains("has-focus")&&(i.key==="Escape"||!e.matches(":focus-within")&&!n.matches(":focus"))&&(n.blur(),te(t))})}function te(t){t.classList.remove("has-focus")}function Ne(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=he(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` - ${he(l.parent,i)}.${d}`);let m=document.createElement("li");m.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=u+d,m.append(p),p.addEventListener("focus",()=>{e.querySelector(".current")?.classList.remove("current"),m.classList.add("current")}),e.appendChild(m)}}function de(t,e,n){let r=t.querySelector(".current");if(!r)r=t.querySelector(n==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let i=r;if(n===1)do i=i.nextElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);else do i=i.previousElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);i?(r.classList.remove("current"),i.classList.add("current")):n===-1&&(r.classList.remove("current"),e.focus())}}function Be(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),te(e)}}function he(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ee(t.substring(s,o)),`${ee(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ee(t.substring(s))),i.join("")}var je={"&":"&","<":"<",">":">","'":"'",'"':"""};function ee(t){return t.replace(/[&<>"'"]/g,e=>je[e])}var I=class{constructor(e){this.el=e.el,this.app=e.app}};var F="mousedown",ye="mousemove",N="mouseup",J={x:0,y:0},me=!1,ne=!1,qe=!1,D=!1,ve=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(ve?"is-mobile":"not-mobile");ve&&"ontouchstart"in document.documentElement&&(qe=!0,F="touchstart",ye="touchmove",N="touchend");document.addEventListener(F,t=>{ne=!0,D=!1;let e=F=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(ye,t=>{if(ne&&!D){let e=F=="touchstart"?t.targetTouches[0]:t,n=J.x-(e.pageX||0),r=J.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(N,()=>{ne=!1});document.addEventListener("click",t=>{me&&(t.preventDefault(),t.stopImmediatePropagation(),me=!1)});var X=class extends I{constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(N,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(F,n=>this.onDocumentPointerDown(n)),document.addEventListener(N,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var re;try{re=localStorage}catch{re={getItem(){return null},setItem(){}}}var Q=re;var ge=document.head.appendChild(document.createElement("style"));ge.dataset.for="filters";var Y=class extends I{constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),ge.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=Q.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){Q.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var Z=class extends I{constructor(e){super(e),this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update());let r=this.summary.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)}),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function Ee(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,xe(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),xe(t.value)})}function xe(t){document.documentElement.dataset.theme=t}var K;function we(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Le),Le())}async function Le(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let n=await(await fetch(window.navigationData)).arrayBuffer(),r=new Blob([n]).stream().pipeThrough(new DecompressionStream("gzip")),i=await new Response(r).json();K=t.dataset.base,K.endsWith("/")||(K+="/"),t.innerHTML="";for(let s of i)Se(s,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Se(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',be(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let u of t.children)Se(u,l,i)}else be(t,r,t.class)}function be(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=K+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else e.appendChild(document.createElement("span")).textContent=t.text}G(X,"a[data-toggle]");G(Z,".tsd-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var Te=document.getElementById("tsd-theme");Te&&Ee(Te);var $e=new U;Object.defineProperty(window,"app",{value:$e});fe();we();})(); +window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings.","hierarchy_expand":"Expand","hierarchy_collapse":"Collapse"}; +"use strict";(()=>{var De=Object.create;var le=Object.defineProperty;var Fe=Object.getOwnPropertyDescriptor;var Ne=Object.getOwnPropertyNames;var Ve=Object.getPrototypeOf,Be=Object.prototype.hasOwnProperty;var qe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var je=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ne(e))!Be.call(t,i)&&i!==n&&le(t,i,{get:()=>e[i],enumerable:!(r=Fe(e,i))||r.enumerable});return t};var $e=(t,e,n)=>(n=t!=null?De(Ve(t)):{},je(e||!t||!t.__esModule?le(n,"default",{value:t,enumerable:!0}):n,t));var pe=qe((de,he)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,c],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[c+1]*i[d+1],c+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}s.str.length==1&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),p;m in s.node.edges?p=s.node.edges[m]:(p=new t.TokenSet,s.node.edges[m]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof de=="object"?he.exports=n():e.lunr=n()}(this,function(){return t})})()});window.translations||={copy:"Copy",copied:"Copied!",normally_hidden:"This member is normally hidden due to your filter settings.",hierarchy_expand:"Expand",hierarchy_collapse:"Collapse"};var ce=[];function G(t,e){ce.push({selector:e,constructor:t})}var J=class{alwaysVisibleMember=null;constructor(){this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){ce.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!ze(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function ze(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var ue=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var ge=$e(pe(),1);async function H(t){let e=Uint8Array.from(atob(t),s=>s.charCodeAt(0)),r=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")),i=await new Response(r).text();return JSON.parse(i)}async function fe(t,e){if(!window.searchData)return;let n=await H(window.searchData);t.data=n,t.index=ge.Index.load(n.index),e.classList.remove("loading"),e.classList.add("ready")}function ve(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:document.documentElement.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{fe(e,t)}),fe(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");i.addEventListener("mouseup",()=>{re(t)}),r.addEventListener("focus",()=>t.classList.add("has-focus")),We(t,i,r,e)}function We(t,e,n,r){n.addEventListener("input",ue(()=>{Ue(t,e,n,r)},200)),n.addEventListener("keydown",i=>{i.key=="Enter"?Je(e,t):i.key=="ArrowUp"?(me(e,n,-1),i.preventDefault()):i.key==="ArrowDown"&&(me(e,n,1),i.preventDefault())}),document.body.addEventListener("keypress",i=>{i.altKey||i.ctrlKey||i.metaKey||!n.matches(":focus")&&i.key==="/"&&(i.preventDefault(),n.focus())}),document.body.addEventListener("keyup",i=>{t.classList.contains("has-focus")&&(i.key==="Escape"||!e.matches(":focus-within")&&!n.matches(":focus"))&&(n.blur(),re(t))})}function re(t){t.classList.remove("has-focus")}function Ue(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ye(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ye(l.parent,i)}.${d}`);let m=document.createElement("li");m.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=c+d,m.append(p),p.addEventListener("focus",()=>{e.querySelector(".current")?.classList.remove("current"),m.classList.add("current")}),e.appendChild(m)}}function me(t,e,n){let r=t.querySelector(".current");if(!r)r=t.querySelector(n==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let i=r;if(n===1)do i=i.nextElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);else do i=i.previousElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);i?(r.classList.remove("current"),i.classList.add("current")):n===-1&&(r.classList.remove("current"),e.focus())}}function Je(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),re(e)}}function ye(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ne(t.substring(s,o)),`${ne(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ne(t.substring(s))),i.join("")}var Ge={"&":"&","<":"<",">":">","'":"'",'"':"""};function ne(t){return t.replace(/[&<>"'"]/g,e=>Ge[e])}var I=class{el;app;constructor(e){this.el=e.el,this.app=e.app}};var A="mousedown",Ee="mousemove",B="mouseup",X={x:0,y:0},xe=!1,ie=!1,Xe=!1,D=!1,Le=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(Le?"is-mobile":"not-mobile");Le&&"ontouchstart"in document.documentElement&&(Xe=!0,A="touchstart",Ee="touchmove",B="touchend");document.addEventListener(A,t=>{ie=!0,D=!1;let e=A=="touchstart"?t.targetTouches[0]:t;X.y=e.pageY||0,X.x=e.pageX||0});document.addEventListener(Ee,t=>{if(ie&&!D){let e=A=="touchstart"?t.targetTouches[0]:t,n=X.x-(e.pageX||0),r=X.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ie=!1});document.addEventListener("click",t=>{xe&&(t.preventDefault(),t.stopImmediatePropagation(),xe=!1)});var Y=class extends I{active;className;constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(A,n=>this.onDocumentPointerDown(n)),document.addEventListener(B,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var se;try{se=localStorage}catch{se={getItem(){return null},setItem(){}}}var C=se;var be=document.head.appendChild(document.createElement("style"));be.dataset.for="filters";var Z=class extends I{key;value;constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),be.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=C.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){C.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var oe=new Map,ae=class{open;accordions=[];key;constructor(e,n){this.key=e,this.open=n}add(e){this.accordions.push(e),e.open=this.open,e.addEventListener("toggle",()=>{this.toggle(e.open)})}toggle(e){for(let n of this.accordions)n.open=e;C.setItem(this.key,e.toString())}},K=class extends I{constructor(e){super(e);let n=this.el.querySelector("summary"),r=n.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)});let i=`tsd-accordion-${n.dataset.key??n.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`,s;if(oe.has(i))s=oe.get(i);else{let o=C.getItem(i),a=o?o==="true":this.el.open;s=new ae(i,a),oe.set(i,s)}s.add(this.el)}};function Se(t){let e=C.getItem("tsd-theme")||"os";t.value=e,we(e),t.addEventListener("change",()=>{C.setItem("tsd-theme",t.value),we(t.value)})}function we(t){document.documentElement.dataset.theme=t}var ee;function Ce(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Te),Te())}async function Te(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let e=await H(window.navigationData);ee=document.documentElement.dataset.base,ee.endsWith("/")||(ee+="/"),t.innerHTML="";for(let n of e)Ie(n,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Ie(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',ke(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let c of t.children)Ie(c,l,i)}else ke(t,r,t.class)}function ke(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));r.href=ee+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&r.classList.add("current"),t.kind&&(r.innerHTML=``),r.appendChild(document.createElement("span")).textContent=t.text}else{let r=e.appendChild(document.createElement("span"));r.innerHTML='',r.appendChild(document.createElement("span")).textContent=t.text}}var te=document.documentElement.dataset.base;te.endsWith("/")||(te+="/");function Pe(){document.querySelector(".tsd-full-hierarchy")?Ye():document.querySelector(".tsd-hierarchy")&&Ze()}function Ye(){document.addEventListener("click",r=>{let i=r.target;for(;i.parentElement&&i.parentElement.tagName!="LI";)i=i.parentElement;i.dataset.dropdown&&(i.dataset.dropdown=String(i.dataset.dropdown!=="true"))});let t=new Map,e=new Set;for(let r of document.querySelectorAll(".tsd-full-hierarchy [data-refl]")){let i=r.querySelector("ul");t.has(r.dataset.refl)?e.add(r.dataset.refl):i&&t.set(r.dataset.refl,i)}for(let r of e)n(r);function n(r){let i=t.get(r).cloneNode(!0);i.querySelectorAll("[id]").forEach(s=>{s.removeAttribute("id")}),i.querySelectorAll("[data-dropdown]").forEach(s=>{s.dataset.dropdown="false"});for(let s of document.querySelectorAll(`[data-refl="${r}"]`)){let o=tt(),a=s.querySelector("ul");s.insertBefore(o,a),o.dataset.dropdown=String(!!a),a||s.appendChild(i.cloneNode(!0))}}}function Ze(){let t=document.getElementById("tsd-hierarchy-script");t&&(t.addEventListener("load",Qe),Qe())}async function Qe(){let t=document.querySelector(".tsd-panel.tsd-hierarchy:has(h4 a)");if(!t||!window.hierarchyData)return;let e=+t.dataset.refl,n=await H(window.hierarchyData),r=t.querySelector("ul"),i=document.createElement("ul");if(i.classList.add("tsd-hierarchy"),Ke(i,n,e),r.querySelectorAll("li").length==i.querySelectorAll("li").length)return;let s=document.createElement("span");s.classList.add("tsd-hierarchy-toggle"),s.textContent=window.translations.hierarchy_expand,t.querySelector("h4 a")?.insertAdjacentElement("afterend",s),s.insertAdjacentText("beforebegin",", "),s.addEventListener("click",()=>{s.textContent===window.translations.hierarchy_expand?(r.insertAdjacentElement("afterend",i),r.remove(),s.textContent=window.translations.hierarchy_collapse):(i.insertAdjacentElement("afterend",r),i.remove(),s.textContent=window.translations.hierarchy_expand)})}function Ke(t,e,n){let r=e.roots.filter(i=>et(e,i,n));for(let i of r)t.appendChild(Oe(e,i,n))}function Oe(t,e,n,r=new Set){if(r.has(e))return;r.add(e);let i=t.reflections[e],s=document.createElement("li");if(s.classList.add("tsd-hierarchy-item"),e===n){let o=s.appendChild(document.createElement("span"));o.textContent=i.name,o.classList.add("tsd-hierarchy-target")}else{for(let a of i.uniqueNameParents||[]){let l=t.reflections[a],c=s.appendChild(document.createElement("a"));c.textContent=l.name,c.href=te+l.url,c.className=l.class+" tsd-signature-type",s.append(document.createTextNode("."))}let o=s.appendChild(document.createElement("a"));o.textContent=t.reflections[e].name,o.href=te+i.url,o.className=i.class+" tsd-signature-type"}if(i.children){let o=s.appendChild(document.createElement("ul"));o.classList.add("tsd-hierarchy");for(let a of i.children){let l=Oe(t,a,n,r);l&&o.appendChild(l)}}return r.delete(e),s}function et(t,e,n){if(e===n)return!0;let r=new Set,i=[t.reflections[e]];for(;i.length;){let s=i.pop();if(!r.has(s)){r.add(s);for(let o of s.children||[]){if(o===n)return!0;i.push(t.reflections[o])}}}return!1}function tt(){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("width","20"),t.setAttribute("height","20"),t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.innerHTML='',t}G(Y,"a[data-toggle]");G(K,".tsd-accordion");G(Z,".tsd-filter-item input[type=checkbox]");var _e=document.getElementById("tsd-theme");_e&&Se(_e);var nt=new J;Object.defineProperty(window,"app",{value:nt});ve();Ce();Pe();})(); /*! Bundled license information: lunr/lunr.js: diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js new file mode 100644 index 0000000..3f0d8bd --- /dev/null +++ b/docs/assets/navigation.js @@ -0,0 +1 @@ +window.navigationData = "eJyN1lFv2jAQB/Dv4me0rmztWt4mChqIrlWJysO0Bzc5wMLYmX1Grap+98mhgJ2YS165v3+yfbbDn3eG8IpswH46XINCkXMUWo2M0Yb1WMlxzQYsl9xasBeJ0Jc1biXrsY1QBRtc9m8+ekdztAOFo61AhAQWVillou5hq83bHDnCHLWBptXM0CKC4blfw5CrHKSEImU2U7S641IUkyLTGzi3g4lQB3O6yGjvEKCsmc659HvDV0DtZTpHyQ+Tu+FQClDY1E61bsKZddYClFXN+bfGsXYq0dao3Oqc2aNu++KvyxP8c2DxofTnyJ4k4U/XkueftyqOxWj/6jo8EiNVlFooHGq1FCtnqruYhNNREh8bvgVqslGCpB6ls35p+7aRZjJK4dNF9uzPfbUgik4FKXimV9phh6alghT8yI0Ff0+T2rFKErp0JTWnMEBBT7DTG7LLUYKi5mCtfyDXkG/AUGQy2YG+10qg7kLHSYquHt+od0m3GeuA2lIrC5S3T1DU/kXItQneL3wrj2+Fr9TGf739cXnVr398Mz+obpwqbcZ0kf0CXoAZC5CNucTVNmsmLIIK/wjslcPvbePj81NX4mqr5Z/v9AYHpTalaqffx7pxLHTqUdCfHTeCv8hDj2r9+RYOLWDJnQw+uEunqv8q9uKzFA++/v7x9z/6BWoU" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index 0ea20cc..08373a6 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = "data:application/octet-stream;base64,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"; \ No newline at end of file +window.searchData = "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"; \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css index 9d619a6..7f80f3d 100644 --- a/docs/assets/style.css +++ b/docs/assets/style.css @@ -1,91 +1,247 @@ -:root { - /* Light */ - --light-color-background: #f2f4f8; - --light-color-background-secondary: #eff0f1; - --light-color-warning-text: #222; - --light-color-background-warning: #e6e600; - --light-color-icon-background: var(--light-color-background); - --light-color-accent: #c5c7c9; - --light-color-active-menu-item: var(--light-color-accent); - --light-color-text: #222; - --light-color-text-aside: #6e6e6e; - --light-color-link: #1f70c2; - --light-color-focus-outline: #3584e4; - - --light-color-ts-keyword: #056bd6; - --light-color-ts-project: #b111c9; - --light-color-ts-module: var(--light-color-ts-project); - --light-color-ts-namespace: var(--light-color-ts-project); - --light-color-ts-enum: #7e6f15; - --light-color-ts-enum-member: var(--light-color-ts-enum); - --light-color-ts-variable: #4760ec; - --light-color-ts-function: #572be7; - --light-color-ts-class: #1f70c2; - --light-color-ts-interface: #108024; - --light-color-ts-constructor: var(--light-color-ts-class); - --light-color-ts-property: var(--light-color-ts-variable); - --light-color-ts-method: var(--light-color-ts-function); - --light-color-ts-call-signature: var(--light-color-ts-method); - --light-color-ts-index-signature: var(--light-color-ts-property); - --light-color-ts-constructor-signature: var(--light-color-ts-constructor); - --light-color-ts-parameter: var(--light-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: #a55c0e; - --light-color-ts-accessor: var(--light-color-ts-property); - --light-color-ts-get-signature: var(--light-color-ts-accessor); - --light-color-ts-set-signature: var(--light-color-ts-accessor); - --light-color-ts-type-alias: #d51270; - /* reference not included as links will be colored with the kind that it points to */ - --light-color-document: #000000; - - --light-external-icon: url("data:image/svg+xml;utf8,"); - --light-color-scheme: light; - - /* Dark */ - --dark-color-background: #2b2e33; - --dark-color-background-secondary: #1e2024; - --dark-color-background-warning: #bebe00; - --dark-color-warning-text: #222; - --dark-color-icon-background: var(--dark-color-background-secondary); - --dark-color-accent: #9096a2; - --dark-color-active-menu-item: #5d5d6a; - --dark-color-text: #f5f5f5; - --dark-color-text-aside: #dddddd; - --dark-color-link: #00aff4; - --dark-color-focus-outline: #4c97f2; - - --dark-color-ts-keyword: #3399ff; - --dark-color-ts-project: #e358ff; - --dark-color-ts-module: var(--dark-color-ts-project); - --dark-color-ts-namespace: var(--dark-color-ts-project); - --dark-color-ts-enum: #f4d93e; - --dark-color-ts-enum-member: var(--dark-color-ts-enum); - --dark-color-ts-variable: #798dff; - --dark-color-ts-function: #a280ff; - --dark-color-ts-class: #8ac4ff; - --dark-color-ts-interface: #6cff87; - --dark-color-ts-constructor: var(--dark-color-ts-class); - --dark-color-ts-property: var(--dark-color-ts-variable); - --dark-color-ts-method: var(--dark-color-ts-function); - --dark-color-ts-call-signature: var(--dark-color-ts-method); - --dark-color-ts-index-signature: var(--dark-color-ts-property); - --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); - --dark-color-ts-parameter: var(--dark-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: #e07d13; - --dark-color-ts-accessor: var(--dark-color-ts-property); - --dark-color-ts-get-signature: var(--dark-color-ts-accessor); - --dark-color-ts-set-signature: var(--dark-color-ts-accessor); - --dark-color-ts-type-alias: #ff6492; - /* reference not included as links will be colored with the kind that it points to */ - --dark-color-document: #ffffff; - - --dark-external-icon: url("data:image/svg+xml;utf8,"); - --dark-color-scheme: dark; -} - -@media (prefers-color-scheme: light) { +@layer typedoc { :root { + /* Light */ + --light-color-background: #f2f4f8; + --light-color-background-secondary: #eff0f1; + --light-color-warning-text: #222; + --light-color-background-warning: #e6e600; + --light-color-accent: #c5c7c9; + --light-color-active-menu-item: var(--light-color-accent); + --light-color-text: #222; + --light-color-text-aside: #6e6e6e; + + --light-color-icon-background: var(--light-color-background); + --light-color-icon-text: var(--light-color-text); + + --light-color-comment-tag-text: var(--light-color-text); + --light-color-comment-tag: var(--light-color-background); + + --light-color-link: #1f70c2; + --light-color-focus-outline: #3584e4; + + --light-color-ts-keyword: #056bd6; + --light-color-ts-project: #b111c9; + --light-color-ts-module: var(--light-color-ts-project); + --light-color-ts-namespace: var(--light-color-ts-project); + --light-color-ts-enum: #7e6f15; + --light-color-ts-enum-member: var(--light-color-ts-enum); + --light-color-ts-variable: #4760ec; + --light-color-ts-function: #572be7; + --light-color-ts-class: #1f70c2; + --light-color-ts-interface: #108024; + --light-color-ts-constructor: var(--light-color-ts-class); + --light-color-ts-property: #9f5f30; + --light-color-ts-method: #be3989; + --light-color-ts-reference: #ff4d82; + --light-color-ts-call-signature: var(--light-color-ts-method); + --light-color-ts-index-signature: var(--light-color-ts-property); + --light-color-ts-constructor-signature: var( + --light-color-ts-constructor + ); + --light-color-ts-parameter: var(--light-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --light-color-ts-type-parameter: #a55c0e; + --light-color-ts-accessor: #c73c3c; + --light-color-ts-get-signature: var(--light-color-ts-accessor); + --light-color-ts-set-signature: var(--light-color-ts-accessor); + --light-color-ts-type-alias: #d51270; + /* reference not included as links will be colored with the kind that it points to */ + --light-color-document: #000000; + + --light-color-alert-note: #0969d9; + --light-color-alert-tip: #1a7f37; + --light-color-alert-important: #8250df; + --light-color-alert-warning: #9a6700; + --light-color-alert-caution: #cf222e; + + --light-external-icon: url("data:image/svg+xml;utf8,"); + --light-color-scheme: light; + + /* Dark */ + --dark-color-background: #2b2e33; + --dark-color-background-secondary: #1e2024; + --dark-color-background-warning: #bebe00; + --dark-color-warning-text: #222; + --dark-color-accent: #9096a2; + --dark-color-active-menu-item: #5d5d6a; + --dark-color-text: #f5f5f5; + --dark-color-text-aside: #dddddd; + + --dark-color-icon-background: var(--dark-color-background-secondary); + --dark-color-icon-text: var(--dark-color-text); + + --dark-color-comment-tag-text: var(--dark-color-text); + --dark-color-comment-tag: var(--dark-color-background); + + --dark-color-link: #00aff4; + --dark-color-focus-outline: #4c97f2; + + --dark-color-ts-keyword: #3399ff; + --dark-color-ts-project: #e358ff; + --dark-color-ts-module: var(--dark-color-ts-project); + --dark-color-ts-namespace: var(--dark-color-ts-project); + --dark-color-ts-enum: #f4d93e; + --dark-color-ts-enum-member: var(--dark-color-ts-enum); + --dark-color-ts-variable: #798dff; + --dark-color-ts-function: #a280ff; + --dark-color-ts-class: #8ac4ff; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-constructor: var(--dark-color-ts-class); + --dark-color-ts-property: #ff984d; + --dark-color-ts-method: #ff4db8; + --dark-color-ts-reference: #ff4d82; + --dark-color-ts-call-signature: var(--dark-color-ts-method); + --dark-color-ts-index-signature: var(--dark-color-ts-property); + --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); + --dark-color-ts-parameter: var(--dark-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --dark-color-ts-type-parameter: #e07d13; + --dark-color-ts-accessor: #ff6060; + --dark-color-ts-get-signature: var(--dark-color-ts-accessor); + --dark-color-ts-set-signature: var(--dark-color-ts-accessor); + --dark-color-ts-type-alias: #ff6492; + /* reference not included as links will be colored with the kind that it points to */ + --dark-color-document: #ffffff; + + --dark-color-alert-note: #0969d9; + --dark-color-alert-tip: #1a7f37; + --dark-color-alert-important: #8250df; + --dark-color-alert-warning: #9a6700; + --dark-color-alert-caution: #cf222e; + + --dark-external-icon: url("data:image/svg+xml;utf8,"); + --dark-color-scheme: dark; + } + + @media (prefers-color-scheme: light) { + :root { + --color-background: var(--light-color-background); + --color-background-secondary: var( + --light-color-background-secondary + ); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + + --color-icon-background: var(--light-color-icon-background); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --color-alert-note: var(--light-color-alert-note); + --color-alert-tip: var(--light-color-alert-tip); + --color-alert-important: var(--light-color-alert-important); + --color-alert-warning: var(--light-color-alert-warning); + --color-alert-caution: var(--light-color-alert-caution); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } + } + + @media (prefers-color-scheme: dark) { + :root { + --color-background: var(--dark-color-background); + --color-background-secondary: var( + --dark-color-background-secondary + ); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + + --color-icon-background: var(--dark-color-icon-background); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --color-alert-note: var(--dark-color-alert-note); + --color-alert-tip: var(--dark-color-alert-tip); + --color-alert-important: var(--dark-color-alert-important); + --color-alert-warning: var(--dark-color-alert-warning); + --color-alert-caution: var(--dark-color-alert-caution); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } + } + + html { + color-scheme: var(--color-scheme); + } + + body { + margin: 0; + } + + :root[data-theme="light"] { --color-background: var(--light-color-background); --color-background-secondary: var(--light-color-background-secondary); --color-background-warning: var(--light-color-background-warning); @@ -95,10 +251,16 @@ --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + --color-link: var(--light-color-link); --color-focus-outline: var(--light-color-focus-outline); --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); --color-ts-enum: var(--light-color-ts-enum); @@ -110,6 +272,7 @@ --color-ts-constructor: var(--light-color-ts-constructor); --color-ts-property: var(--light-color-ts-property); --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); --color-ts-call-signature: var(--light-color-ts-call-signature); --color-ts-index-signature: var(--light-color-ts-index-signature); --color-ts-constructor-signature: var( @@ -123,13 +286,17 @@ --color-ts-type-alias: var(--light-color-ts-type-alias); --color-document: var(--light-color-document); + --color-note: var(--light-color-note); + --color-tip: var(--light-color-tip); + --color-important: var(--light-color-important); + --color-warning: var(--light-color-warning); + --color-caution: var(--light-color-caution); + --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); } -} -@media (prefers-color-scheme: dark) { - :root { + :root[data-theme="dark"] { --color-background: var(--dark-color-background); --color-background-secondary: var(--dark-color-background-secondary); --color-background-warning: var(--dark-color-background-warning); @@ -139,10 +306,16 @@ --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + --color-link: var(--dark-color-link); --color-focus-outline: var(--dark-color-focus-outline); --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); --color-ts-enum: var(--dark-color-ts-enum); @@ -154,6 +327,7 @@ --color-ts-constructor: var(--dark-color-ts-constructor); --color-ts-property: var(--dark-color-ts-property); --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); --color-ts-call-signature: var(--dark-color-ts-call-signature); --color-ts-index-signature: var(--dark-color-ts-index-signature); --color-ts-constructor-signature: var( @@ -167,1282 +341,1270 @@ --color-ts-type-alias: var(--dark-color-ts-type-alias); --color-document: var(--dark-color-document); + --color-note: var(--dark-color-note); + --color-tip: var(--dark-color-tip); + --color-important: var(--dark-color-important); + --color-warning: var(--dark-color-warning); + --color-caution: var(--dark-color-caution); + --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } -} - -html { - color-scheme: var(--color-scheme); -} -body { - margin: 0; -} + *:focus-visible, + .tsd-accordion-summary:focus-visible svg { + outline: 2px solid var(--color-focus-outline); + } -:root[data-theme="light"] { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - --color-focus-outline: var(--light-color-focus-outline); - - --color-ts-keyword: var(--light-color-ts-keyword); - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - --color-document: var(--light-color-document); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); -} + .always-visible, + .always-visible .tsd-signatures { + display: inherit !important; + } -:root[data-theme="dark"] { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - --color-focus-outline: var(--dark-color-focus-outline); - - --color-ts-keyword: var(--dark-color-ts-keyword); - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - --color-document: var(--dark-color-document); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); -} + h1, + h2, + h3, + h4, + h5, + h6 { + line-height: 1.2; + } -*:focus-visible, -.tsd-accordion-summary:focus-visible svg { - outline: 2px solid var(--color-focus-outline); -} + h1 { + font-size: 1.875rem; + margin: 0.67rem 0; + } -.always-visible, -.always-visible .tsd-signatures { - display: inherit !important; -} + h2 { + font-size: 1.5rem; + margin: 0.83rem 0; + } -h1, -h2, -h3, -h4, -h5, -h6 { - line-height: 1.2; -} + h3 { + font-size: 1.25rem; + margin: 1rem 0; + } -h1 { - font-size: 1.875rem; - margin: 0.67rem 0; -} + h4 { + font-size: 1.05rem; + margin: 1.33rem 0; + } -h2 { - font-size: 1.5rem; - margin: 0.83rem 0; -} + h5 { + font-size: 1rem; + margin: 1.5rem 0; + } -h3 { - font-size: 1.25rem; - margin: 1rem 0; -} + h6 { + font-size: 0.875rem; + margin: 2.33rem 0; + } -h4 { - font-size: 1.05rem; - margin: 1.33rem 0; -} + dl, + menu, + ol, + ul { + margin: 1em 0; + } -h5 { - font-size: 1rem; - margin: 1.5rem 0; -} + dd { + margin: 0 0 0 34px; + } -h6 { - font-size: 0.875rem; - margin: 2.33rem 0; -} + .container { + max-width: 1700px; + padding: 0 2rem; + } -dl, -menu, -ol, -ul { - margin: 1em 0; -} + /* Footer */ + footer { + border-top: 1px solid var(--color-accent); + padding-top: 1rem; + padding-bottom: 1rem; + max-height: 3.5rem; + } + footer > p { + margin: 0 1em; + } -dd { - margin: 0 0 0 40px; -} + .container-main { + margin: 0 auto; + /* toolbar, footer, margin */ + min-height: calc(100vh - 41px - 56px - 4rem); + } -.container { - max-width: 1700px; - padding: 0 2rem; -} + @keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } + } + @keyframes fade-out { + from { + opacity: 1; + visibility: visible; + } + to { + opacity: 0; + } + } + @keyframes fade-in-delayed { + 0% { + opacity: 0; + } + 33% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fade-out-delayed { + 0% { + opacity: 1; + visibility: visible; + } + 66% { + opacity: 0; + } + 100% { + opacity: 0; + } + } + @keyframes pop-in-from-right { + from { + transform: translate(100%, 0); + } + to { + transform: translate(0, 0); + } + } + @keyframes pop-out-to-right { + from { + transform: translate(0, 0); + visibility: visible; + } + to { + transform: translate(100%, 0); + } + } + body { + background: var(--color-background); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; + font-size: 16px; + color: var(--color-text); + } -/* Footer */ -footer { - border-top: 1px solid var(--color-accent); - padding-top: 1rem; - padding-bottom: 1rem; - max-height: 3.5rem; -} -footer > p { - margin: 0 1em; -} + a { + color: var(--color-link); + text-decoration: none; + } + a:hover { + text-decoration: underline; + } + a.external[target="_blank"] { + background-image: var(--external-icon); + background-position: top 3px right; + background-repeat: no-repeat; + padding-right: 13px; + } + a.tsd-anchor-link { + color: var(--color-text); + } -.container-main { - margin: 0 auto; - /* toolbar, footer, margin */ - min-height: calc(100vh - 41px - 56px - 4rem); -} + code, + pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 0.875rem; + border-radius: 0.8em; + } -@keyframes fade-in { - from { + pre { + position: relative; + white-space: pre-wrap; + word-wrap: break-word; + padding: 10px; + border: 1px solid var(--color-accent); + margin-bottom: 8px; + } + pre code { + padding: 0; + font-size: 100%; + } + pre > button { + position: absolute; + top: 10px; + right: 10px; opacity: 0; + transition: opacity 0.1s; + box-sizing: border-box; } - to { + pre:hover > button, + pre > button.visible { opacity: 1; } -} -@keyframes fade-out { - from { - opacity: 1; - visibility: visible; + + blockquote { + margin: 1em 0; + padding-left: 1em; + border-left: 4px solid gray; } - to { - opacity: 0; + + .tsd-typography { + line-height: 1.333em; } -} -@keyframes fade-in-delayed { - 0% { - opacity: 0; + .tsd-typography ul { + list-style: square; + padding: 0 0 0 20px; + margin: 0; } - 33% { - opacity: 0; + .tsd-typography .tsd-index-panel h3, + .tsd-index-panel .tsd-typography h3, + .tsd-typography h4, + .tsd-typography h5, + .tsd-typography h6 { + font-size: 1em; } - 100% { - opacity: 1; + .tsd-typography h5, + .tsd-typography h6 { + font-weight: normal; } -} -@keyframes fade-out-delayed { - 0% { - opacity: 1; - visibility: visible; + .tsd-typography p, + .tsd-typography ul, + .tsd-typography ol { + margin: 1em 0; } - 66% { - opacity: 0; + .tsd-typography table { + border-collapse: collapse; + border: none; } - 100% { - opacity: 0; + .tsd-typography td, + .tsd-typography th { + padding: 6px 13px; + border: 1px solid var(--color-accent); } -} -@keyframes pop-in-from-right { - from { - transform: translate(100%, 0); + .tsd-typography thead, + .tsd-typography tr:nth-child(even) { + background-color: var(--color-background-secondary); } - to { - transform: translate(0, 0); + + .tsd-alert { + padding: 8px 16px; + margin-bottom: 16px; + border-left: 0.25em solid var(--alert-color); } -} -@keyframes pop-out-to-right { - from { - transform: translate(0, 0); - visibility: visible; + .tsd-alert blockquote > :last-child, + .tsd-alert > :last-child { + margin-bottom: 0; } - to { - transform: translate(100%, 0); + .tsd-alert-title { + color: var(--alert-color); + display: inline-flex; + align-items: center; + } + .tsd-alert-title span { + margin-left: 4px; } -} -body { - background: var(--color-background); - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", - Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; - font-size: 16px; - color: var(--color-text); -} -a { - color: var(--color-link); - text-decoration: none; -} -a:hover { - text-decoration: underline; -} -a.external[target="_blank"] { - background-image: var(--external-icon); - background-position: top 3px right; - background-repeat: no-repeat; - padding-right: 13px; -} -a.tsd-anchor-link { - color: var(--color-text); -} + .tsd-alert-note { + --alert-color: var(--color-alert-note); + } + .tsd-alert-tip { + --alert-color: var(--color-alert-tip); + } + .tsd-alert-important { + --alert-color: var(--color-alert-important); + } + .tsd-alert-warning { + --alert-color: var(--color-alert-warning); + } + .tsd-alert-caution { + --alert-color: var(--color-alert-caution); + } -code, -pre { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - padding: 0.2em; - margin: 0; - font-size: 0.875rem; - border-radius: 0.8em; -} + .tsd-breadcrumb { + margin: 0; + padding: 0; + color: var(--color-text-aside); + } + .tsd-breadcrumb a { + color: var(--color-text-aside); + text-decoration: none; + } + .tsd-breadcrumb a:hover { + text-decoration: underline; + } + .tsd-breadcrumb li { + display: inline; + } + .tsd-breadcrumb li:after { + content: " / "; + } -pre { - position: relative; - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; - padding: 10px; - border: 1px solid var(--color-accent); -} -pre code { - padding: 0; - font-size: 100%; -} -pre > button { - position: absolute; - top: 10px; - right: 10px; - opacity: 0; - transition: opacity 0.1s; - box-sizing: border-box; -} -pre:hover > button, -pre > button.visible { - opacity: 1; -} + .tsd-comment-tags { + display: flex; + flex-direction: column; + } + dl.tsd-comment-tag-group { + display: flex; + align-items: center; + overflow: hidden; + margin: 0.5em 0; + } + dl.tsd-comment-tag-group dt { + display: flex; + margin-right: 0.5em; + font-size: 0.875em; + font-weight: normal; + } + dl.tsd-comment-tag-group dd { + margin: 0; + } + code.tsd-tag { + padding: 0.25em 0.4em; + border: 0.1em solid var(--color-accent); + margin-right: 0.25em; + font-size: 70%; + } + h1 code.tsd-tag:first-of-type { + margin-left: 0.25em; + } -blockquote { - margin: 1em 0; - padding-left: 1em; - border-left: 4px solid gray; -} + dl.tsd-comment-tag-group dd:before, + dl.tsd-comment-tag-group dd:after { + content: " "; + } + dl.tsd-comment-tag-group dd pre, + dl.tsd-comment-tag-group dd:after { + clear: both; + } + dl.tsd-comment-tag-group p { + margin: 0; + } -.tsd-typography { - line-height: 1.333em; -} -.tsd-typography ul { - list-style: square; - padding: 0 0 0 20px; - margin: 0; -} -.tsd-typography .tsd-index-panel h3, -.tsd-index-panel .tsd-typography h3, -.tsd-typography h4, -.tsd-typography h5, -.tsd-typography h6 { - font-size: 1em; -} -.tsd-typography h5, -.tsd-typography h6 { - font-weight: normal; -} -.tsd-typography p, -.tsd-typography ul, -.tsd-typography ol { - margin: 1em 0; -} -.tsd-typography table { - border-collapse: collapse; - border: none; -} -.tsd-typography td, -.tsd-typography th { - padding: 6px 13px; - border: 1px solid var(--color-accent); -} -.tsd-typography thead, -.tsd-typography tr:nth-child(even) { - background-color: var(--color-background-secondary); -} + .tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; + } + .tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; + } -.tsd-breadcrumb { - margin: 0; - padding: 0; - color: var(--color-text-aside); -} -.tsd-breadcrumb a { - color: var(--color-text-aside); - text-decoration: none; -} -.tsd-breadcrumb a:hover { - text-decoration: underline; -} -.tsd-breadcrumb li { - display: inline; -} -.tsd-breadcrumb li:after { - content: " / "; -} + .tsd-filter-visibility h4 { + font-size: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.5rem; + margin: 0; + } + .tsd-filter-item:not(:last-child) { + margin-bottom: 0.5rem; + } + .tsd-filter-input { + display: flex; + width: -moz-fit-content; + width: fit-content; + align-items: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + } + .tsd-filter-input input[type="checkbox"] { + cursor: pointer; + position: absolute; + width: 1.5em; + height: 1.5em; + opacity: 0; + } + .tsd-filter-input input[type="checkbox"]:disabled { + pointer-events: none; + } + .tsd-filter-input svg { + cursor: pointer; + width: 1.5em; + height: 1.5em; + margin-right: 0.5em; + border-radius: 0.33em; + /* Leaving this at full opacity breaks event listeners on Firefox. + Don't remove unless you know what you're doing. */ + opacity: 0.99; + } + .tsd-filter-input input[type="checkbox"]:focus-visible + svg { + outline: 2px solid var(--color-focus-outline); + } + .tsd-checkbox-background { + fill: var(--color-accent); + } + input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { + stroke: var(--color-text); + } + .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { + fill: var(--color-background); + stroke: var(--color-accent); + stroke-width: 0.25rem; + } + .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { + stroke: var(--color-accent); + } -.tsd-comment-tags { - display: flex; - flex-direction: column; -} -dl.tsd-comment-tag-group { - display: flex; - align-items: center; - overflow: hidden; - margin: 0.5em 0; -} -dl.tsd-comment-tag-group dt { - display: flex; - margin-right: 0.5em; - font-size: 0.875em; - font-weight: normal; -} -dl.tsd-comment-tag-group dd { - margin: 0; -} -code.tsd-tag { - padding: 0.25em 0.4em; - border: 0.1em solid var(--color-accent); - margin-right: 0.25em; - font-size: 70%; -} -h1 code.tsd-tag:first-of-type { - margin-left: 0.25em; -} + .settings-label { + font-weight: bold; + text-transform: uppercase; + display: inline-block; + } -dl.tsd-comment-tag-group dd:before, -dl.tsd-comment-tag-group dd:after { - content: " "; -} -dl.tsd-comment-tag-group dd pre, -dl.tsd-comment-tag-group dd:after { - clear: both; -} -dl.tsd-comment-tag-group p { - margin: 0; -} + .tsd-filter-visibility .settings-label { + margin: 0.75rem 0 0.5rem 0; + } -.tsd-panel.tsd-comment .lead { - font-size: 1.1em; - line-height: 1.333em; - margin-bottom: 2em; -} -.tsd-panel.tsd-comment .lead:last-child { - margin-bottom: 0; -} + .tsd-theme-toggle .settings-label { + margin: 0.75rem 0.75rem 0 0; + } -.tsd-filter-visibility h4 { - font-size: 1rem; - padding-top: 0.75rem; - padding-bottom: 0.5rem; - margin: 0; -} -.tsd-filter-item:not(:last-child) { - margin-bottom: 0.5rem; -} -.tsd-filter-input { - display: flex; - width: -moz-fit-content; - width: fit-content; - align-items: center; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - cursor: pointer; -} -.tsd-filter-input input[type="checkbox"] { - cursor: pointer; - position: absolute; - width: 1.5em; - height: 1.5em; - opacity: 0; -} -.tsd-filter-input input[type="checkbox"]:disabled { - pointer-events: none; -} -.tsd-filter-input svg { - cursor: pointer; - width: 1.5em; - height: 1.5em; - margin-right: 0.5em; - border-radius: 0.33em; - /* Leaving this at full opacity breaks event listeners on Firefox. - Don't remove unless you know what you're doing. */ - opacity: 0.99; -} -.tsd-filter-input input[type="checkbox"]:focus-visible + svg { - outline: 2px solid var(--color-focus-outline); -} -.tsd-checkbox-background { - fill: var(--color-accent); -} -input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { - stroke: var(--color-text); -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { - fill: var(--color-background); - stroke: var(--color-accent); - stroke-width: 0.25rem; -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { - stroke: var(--color-accent); -} + .tsd-hierarchy h4 label:hover span { + text-decoration: underline; + } -.settings-label { - font-weight: bold; - text-transform: uppercase; - display: inline-block; -} + .tsd-hierarchy { + list-style: square; + margin: 0; + } + .tsd-hierarchy-target { + font-weight: bold; + } + .tsd-hierarchy-toggle { + color: var(--color-link); + cursor: pointer; + } -.tsd-filter-visibility .settings-label { - margin: 0.75rem 0 0.5rem 0; -} + .tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); + } + .tsd-full-hierarchy, + .tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; + } + .tsd-full-hierarchy ul { + padding-left: 1.5rem; + } + .tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); + } + .tsd-full-hierarchy svg[data-dropdown] { + cursor: pointer; + } + .tsd-full-hierarchy svg[data-dropdown="false"] { + transform: rotate(-90deg); + } + .tsd-full-hierarchy svg[data-dropdown="false"] ~ ul { + display: none; + } -.tsd-theme-toggle .settings-label { - margin: 0.75rem 0.75rem 0 0; -} + .tsd-panel-group.tsd-index-group { + margin-bottom: 0; + } + .tsd-index-panel .tsd-index-list { + list-style: none; + line-height: 1.333em; + margin: 0; + padding: 0.25rem 0 0 0; + overflow: hidden; + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 1rem; + grid-template-rows: auto; + } + @media (max-width: 1024px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(2, 1fr); + } + } + @media (max-width: 768px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(1, 1fr); + } + } + .tsd-index-panel .tsd-index-list li { + -webkit-page-break-inside: avoid; + -moz-page-break-inside: avoid; + -ms-page-break-inside: avoid; + -o-page-break-inside: avoid; + page-break-inside: avoid; + } -.tsd-hierarchy { - list-style: square; - margin: 0; -} -.tsd-hierarchy .target { - font-weight: bold; -} + .tsd-flag { + display: inline-block; + padding: 0.25em 0.4em; + border-radius: 4px; + color: var(--color-comment-tag-text); + background-color: var(--color-comment-tag); + text-indent: 0; + font-size: 75%; + line-height: 1; + font-weight: normal; + } -.tsd-full-hierarchy:not(:last-child) { - margin-bottom: 1em; - padding-bottom: 1em; - border-bottom: 1px solid var(--color-accent); -} -.tsd-full-hierarchy, -.tsd-full-hierarchy ul { - list-style: none; - margin: 0; - padding: 0; -} -.tsd-full-hierarchy ul { - padding-left: 1.5rem; -} -.tsd-full-hierarchy a { - padding: 0.25rem 0 !important; - font-size: 1rem; - display: inline-flex; - align-items: center; - color: var(--color-text); -} + .tsd-anchor { + position: relative; + top: -100px; + } -.tsd-panel-group.tsd-index-group { - margin-bottom: 0; -} -.tsd-index-panel .tsd-index-list { - list-style: none; - line-height: 1.333em; - margin: 0; - padding: 0.25rem 0 0 0; - overflow: hidden; - display: grid; - grid-template-columns: repeat(3, 1fr); - column-gap: 1rem; - grid-template-rows: auto; -} -@media (max-width: 1024px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(2, 1fr); + .tsd-member { + position: relative; } -} -@media (max-width: 768px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(1, 1fr); + .tsd-member .tsd-anchor + h3 { + display: flex; + align-items: center; + margin-top: 0; + margin-bottom: 0; + border-bottom: none; } -} -.tsd-index-panel .tsd-index-list li { - -webkit-page-break-inside: avoid; - -moz-page-break-inside: avoid; - -ms-page-break-inside: avoid; - -o-page-break-inside: avoid; - page-break-inside: avoid; -} -.tsd-flag { - display: inline-block; - padding: 0.25em 0.4em; - border-radius: 4px; - color: var(--color-comment-tag-text); - background-color: var(--color-comment-tag); - text-indent: 0; - font-size: 75%; - line-height: 1; - font-weight: normal; -} + .tsd-navigation.settings { + margin: 1rem 0; + } + .tsd-navigation > a, + .tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.25rem); + display: flex; + align-items: center; + } + .tsd-navigation a, + .tsd-navigation summary > span, + .tsd-page-navigation a { + display: flex; + width: calc(100% - 0.25rem); + align-items: center; + padding: 0.25rem; + color: var(--color-text); + text-decoration: none; + box-sizing: border-box; + } + .tsd-navigation a.current, + .tsd-page-navigation a.current { + background: var(--color-active-menu-item); + } + .tsd-navigation a:hover, + .tsd-page-navigation a:hover { + text-decoration: underline; + } + .tsd-navigation ul, + .tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; + padding: 0; + list-style: none; + } + .tsd-navigation li, + .tsd-page-navigation li { + padding: 0; + max-width: 100%; + } + .tsd-navigation .tsd-nav-link { + display: none; + } + .tsd-nested-navigation { + margin-left: 3rem; + } + .tsd-nested-navigation > li > details { + margin-left: -1.5rem; + } + .tsd-small-nested-navigation { + margin-left: 1.5rem; + } + .tsd-small-nested-navigation > li > details { + margin-left: -1.5rem; + } -.tsd-anchor { - position: relative; - top: -100px; -} + .tsd-page-navigation-section { + margin-left: 10px; + } + .tsd-page-navigation-section > summary { + padding: 0.25rem; + } + .tsd-page-navigation-section > div { + margin-left: 20px; + } + .tsd-page-navigation ul { + padding-left: 1.75rem; + } -.tsd-member { - position: relative; -} -.tsd-member .tsd-anchor + h3 { - display: flex; - align-items: center; - margin-top: 0; - margin-bottom: 0; - border-bottom: none; -} + #tsd-sidebar-links a { + margin-top: 0; + margin-bottom: 0.5rem; + line-height: 1.25rem; + } + #tsd-sidebar-links a:last-of-type { + margin-bottom: 0; + } -.tsd-navigation.settings { - margin: 1rem 0; -} -.tsd-navigation > a, -.tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.25rem); - display: flex; - align-items: center; -} -.tsd-navigation a, -.tsd-navigation summary > span, -.tsd-page-navigation a { - display: flex; - width: calc(100% - 0.25rem); - align-items: center; - padding: 0.25rem; - color: var(--color-text); - text-decoration: none; - box-sizing: border-box; -} -.tsd-navigation a.current, -.tsd-page-navigation a.current { - background: var(--color-active-menu-item); -} -.tsd-navigation a:hover, -.tsd-page-navigation a:hover { - text-decoration: underline; -} -.tsd-navigation ul, -.tsd-page-navigation ul { - margin-top: 0; - margin-bottom: 0; - padding: 0; - list-style: none; -} -.tsd-navigation li, -.tsd-page-navigation li { - padding: 0; - max-width: 100%; -} -.tsd-navigation .tsd-nav-link { - display: none; -} -.tsd-nested-navigation { - margin-left: 3rem; -} -.tsd-nested-navigation > li > details { - margin-left: -1.5rem; -} -.tsd-small-nested-navigation { - margin-left: 1.5rem; -} -.tsd-small-nested-navigation > li > details { - margin-left: -1.5rem; -} - -.tsd-page-navigation-section { - margin-left: 10px; -} -.tsd-page-navigation-section > summary { - padding: 0.25rem; -} -.tsd-page-navigation-section > div { - margin-left: 20px; -} -.tsd-page-navigation ul { - padding-left: 1.75rem; -} - -#tsd-sidebar-links a { - margin-top: 0; - margin-bottom: 0.5rem; - line-height: 1.25rem; -} -#tsd-sidebar-links a:last-of-type { - margin-bottom: 0; -} - -a.tsd-index-link { - padding: 0.25rem 0 !important; - font-size: 1rem; - line-height: 1.25rem; - display: inline-flex; - align-items: center; - color: var(--color-text); -} -.tsd-accordion-summary { - list-style-type: none; /* hide marker on non-safari */ - outline: none; /* broken on safari, so just hide it */ -} -.tsd-accordion-summary::-webkit-details-marker { - display: none; /* hide marker on safari */ -} -.tsd-accordion-summary, -.tsd-accordion-summary a { - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none; - - cursor: pointer; -} -.tsd-accordion-summary a { - width: calc(100% - 1.5rem); -} -.tsd-accordion-summary > * { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} -.tsd-accordion .tsd-accordion-summary > svg { - margin-left: 0.25rem; - vertical-align: text-top; -} -.tsd-index-content > :not(:first-child) { - margin-top: 0.75rem; -} -.tsd-index-heading { - margin-top: 1.5rem; - margin-bottom: 0.75rem; -} - -.tsd-kind-icon { - margin-right: 0.5rem; - width: 1.25rem; - height: 1.25rem; - min-width: 1.25rem; - min-height: 1.25rem; -} -.tsd-kind-icon path { - transform-origin: center; - transform: scale(1.1); -} -.tsd-signature > .tsd-kind-icon { - margin-right: 0.8rem; -} - -.tsd-panel { - margin-bottom: 2.5rem; -} -.tsd-panel.tsd-member { - margin-bottom: 4rem; -} -.tsd-panel:empty { - display: none; -} -.tsd-panel > h1, -.tsd-panel > h2, -.tsd-panel > h3 { - margin: 1.5rem -1.5rem 0.75rem -1.5rem; - padding: 0 1.5rem 0.75rem 1.5rem; -} -.tsd-panel > h1.tsd-before-signature, -.tsd-panel > h2.tsd-before-signature, -.tsd-panel > h3.tsd-before-signature { - margin-bottom: 0; - border-bottom: none; -} - -.tsd-panel-group { - margin: 2rem 0; -} -.tsd-panel-group.tsd-index-group { - margin: 2rem 0; -} -.tsd-panel-group.tsd-index-group details { - margin: 2rem 0; -} -.tsd-panel-group > .tsd-accordion-summary { - margin-bottom: 1rem; -} - -#tsd-search { - transition: background-color 0.2s; -} -#tsd-search .title { - position: relative; - z-index: 2; -} -#tsd-search .field { - position: absolute; - left: 0; - top: 0; - right: 2.5rem; - height: 100%; -} -#tsd-search .field input { - box-sizing: border-box; - position: relative; - top: -50px; - z-index: 1; - width: 100%; - padding: 0 10px; - opacity: 0; - outline: 0; - border: 0; - background: transparent; - color: var(--color-text); -} -#tsd-search .field label { - position: absolute; - overflow: hidden; - right: -40px; -} -#tsd-search .field input, -#tsd-search .title, -#tsd-toolbar-links a { - transition: opacity 0.2s; -} -#tsd-search .results { - position: absolute; - visibility: hidden; - top: 40px; - width: 100%; - margin: 0; - padding: 0; - list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -} -#tsd-search .results li { - background-color: var(--color-background); - line-height: initial; - padding: 4px; -} -#tsd-search .results li:nth-child(even) { - background-color: var(--color-background-secondary); -} -#tsd-search .results li.state { - display: none; -} -#tsd-search .results li.current:not(.no-results), -#tsd-search .results li:hover:not(.no-results) { - background-color: var(--color-accent); -} -#tsd-search .results a { - display: flex; - align-items: center; - padding: 0.25rem; - box-sizing: border-box; -} -#tsd-search .results a:before { - top: 10px; -} -#tsd-search .results span.parent { - color: var(--color-text-aside); - font-weight: normal; -} -#tsd-search.has-focus { - background-color: var(--color-accent); -} -#tsd-search.has-focus .field input { - top: 0; - opacity: 1; -} -#tsd-search.has-focus .title, -#tsd-search.has-focus #tsd-toolbar-links a { - z-index: 0; - opacity: 0; -} -#tsd-search.has-focus .results { - visibility: visible; -} -#tsd-search.loading .results li.state.loading { - display: block; -} -#tsd-search.failure .results li.state.failure { - display: block; -} - -#tsd-toolbar-links { - position: absolute; - top: 0; - right: 2rem; - height: 100%; - display: flex; - align-items: center; - justify-content: flex-end; -} -#tsd-toolbar-links a { - margin-left: 1.5rem; -} -#tsd-toolbar-links a:hover { - text-decoration: underline; -} - -.tsd-signature { - margin: 0 0 1rem 0; - padding: 1rem 0.5rem; - border: 1px solid var(--color-accent); - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - font-size: 14px; - overflow-x: auto; -} - -.tsd-signature-keyword { - color: var(--color-ts-keyword); - font-weight: normal; -} - -.tsd-signature-symbol { - color: var(--color-text-aside); - font-weight: normal; -} - -.tsd-signature-type { - font-style: italic; - font-weight: normal; -} - -.tsd-signatures { - padding: 0; - margin: 0 0 1em 0; - list-style-type: none; -} -.tsd-signatures .tsd-signature { - margin: 0; - border-color: var(--color-accent); - border-width: 1px 0; - transition: background-color 0.1s; -} -.tsd-signatures .tsd-index-signature:not(:last-child) { - margin-bottom: 1em; -} -.tsd-signatures .tsd-index-signature .tsd-signature { - border-width: 1px; -} -.tsd-description .tsd-signatures .tsd-signature { - border-width: 1px; -} - -ul.tsd-parameter-list, -ul.tsd-type-parameter-list { - list-style: square; - margin: 0; - padding-left: 20px; -} -ul.tsd-parameter-list > li.tsd-parameter-signature, -ul.tsd-type-parameter-list > li.tsd-parameter-signature { - list-style: none; - margin-left: -20px; -} -ul.tsd-parameter-list h5, -ul.tsd-type-parameter-list h5 { - font-size: 16px; - margin: 1em 0 0.5em 0; -} -.tsd-sources { - margin-top: 1rem; - font-size: 0.875em; -} -.tsd-sources a { - color: var(--color-text-aside); - text-decoration: underline; -} -.tsd-sources ul { - list-style: none; - padding: 0; -} - -.tsd-page-toolbar { - position: sticky; - z-index: 1; - top: 0; - left: 0; - width: 100%; - color: var(--color-text); - background: var(--color-background-secondary); - border-bottom: 1px var(--color-accent) solid; - transition: transform 0.3s ease-in-out; -} -.tsd-page-toolbar a { - color: var(--color-text); - text-decoration: none; -} -.tsd-page-toolbar a.title { - font-weight: bold; -} -.tsd-page-toolbar a.title:hover { - text-decoration: underline; -} -.tsd-page-toolbar .tsd-toolbar-contents { - display: flex; - justify-content: space-between; - height: 2.5rem; - margin: 0 auto; -} -.tsd-page-toolbar .table-cell { - position: relative; - white-space: nowrap; - line-height: 40px; -} -.tsd-page-toolbar .table-cell:first-child { - width: 100%; -} -.tsd-page-toolbar .tsd-toolbar-icon { - box-sizing: border-box; - line-height: 0; - padding: 12px 0; -} - -.tsd-widget { - display: inline-block; - overflow: hidden; - opacity: 0.8; - height: 40px; - transition: - opacity 0.1s, - background-color 0.2s; - vertical-align: bottom; - cursor: pointer; -} -.tsd-widget:hover { - opacity: 0.9; -} -.tsd-widget.active { - opacity: 1; - background-color: var(--color-accent); -} -.tsd-widget.no-caption { - width: 40px; -} -.tsd-widget.no-caption:before { - margin: 0; -} + a.tsd-index-link { + padding: 0.25rem 0 !important; + font-size: 1rem; + line-height: 1.25rem; + display: inline-flex; + align-items: center; + color: var(--color-text); + } + .tsd-accordion-summary { + list-style-type: none; /* hide marker on non-safari */ + outline: none; /* broken on safari, so just hide it */ + } + .tsd-accordion-summary::-webkit-details-marker { + display: none; /* hide marker on safari */ + } + .tsd-accordion-summary, + .tsd-accordion-summary a { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + + cursor: pointer; + } + .tsd-accordion-summary a { + width: calc(100% - 1.5rem); + } + .tsd-accordion-summary > * { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; + } + .tsd-accordion .tsd-accordion-summary > svg { + margin-left: 0.25rem; + vertical-align: text-top; + } + /* + We need to be careful to target the arrow indicating whether the accordion + is open, but not any other SVGs included in the details element. +*/ + .tsd-accordion:not([open]) > .tsd-accordion-summary > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h1 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h2 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h3 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h4 > svg:first-child { + transform: rotate(-90deg); + } + .tsd-index-content > :not(:first-child) { + margin-top: 0.75rem; + } + .tsd-index-heading { + margin-top: 1.5rem; + margin-bottom: 0.75rem; + } -.tsd-widget.options, -.tsd-widget.menu { - display: none; -} -input[type="checkbox"] + .tsd-widget:before { - background-position: -120px 0; -} -input[type="checkbox"]:checked + .tsd-widget:before { - background-position: -160px 0; -} + .tsd-no-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + .tsd-kind-icon { + margin-right: 0.5rem; + width: 1.25rem; + height: 1.25rem; + min-width: 1.25rem; + min-height: 1.25rem; + } + .tsd-signature > .tsd-kind-icon { + margin-right: 0.8rem; + } -img { - max-width: 100%; -} + .tsd-panel { + margin-bottom: 2.5rem; + } + .tsd-panel.tsd-member { + margin-bottom: 4rem; + } + .tsd-panel:empty { + display: none; + } + .tsd-panel > h1, + .tsd-panel > h2, + .tsd-panel > h3 { + margin: 1.5rem -1.5rem 0.75rem -1.5rem; + padding: 0 1.5rem 0.75rem 1.5rem; + } + .tsd-panel > h1.tsd-before-signature, + .tsd-panel > h2.tsd-before-signature, + .tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: none; + } -.tsd-anchor-icon { - display: inline-flex; - align-items: center; - margin-left: 0.5rem; - vertical-align: middle; - color: var(--color-text); -} + .tsd-panel-group { + margin: 2rem 0; + } + .tsd-panel-group.tsd-index-group { + margin: 2rem 0; + } + .tsd-panel-group.tsd-index-group details { + margin: 2rem 0; + } + .tsd-panel-group > .tsd-accordion-summary { + margin-bottom: 1rem; + } -.tsd-anchor-icon svg { - width: 1em; - height: 1em; - visibility: hidden; -} + #tsd-search { + transition: background-color 0.2s; + } + #tsd-search .title { + position: relative; + z-index: 2; + } + #tsd-search .field { + position: absolute; + left: 0; + top: 0; + right: 2.5rem; + height: 100%; + } + #tsd-search .field input { + box-sizing: border-box; + position: relative; + top: -50px; + z-index: 1; + width: 100%; + padding: 0 10px; + opacity: 0; + outline: 0; + border: 0; + background: transparent; + color: var(--color-text); + } + #tsd-search .field label { + position: absolute; + overflow: hidden; + right: -40px; + } + #tsd-search .field input, + #tsd-search .title, + #tsd-toolbar-links a { + transition: opacity 0.2s; + } + #tsd-search .results { + position: absolute; + visibility: hidden; + top: 40px; + width: 100%; + margin: 0; + padding: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); + } + #tsd-search .results li { + background-color: var(--color-background); + line-height: initial; + padding: 4px; + } + #tsd-search .results li:nth-child(even) { + background-color: var(--color-background-secondary); + } + #tsd-search .results li.state { + display: none; + } + #tsd-search .results li.current:not(.no-results), + #tsd-search .results li:hover:not(.no-results) { + background-color: var(--color-accent); + } + #tsd-search .results a { + display: flex; + align-items: center; + padding: 0.25rem; + box-sizing: border-box; + } + #tsd-search .results a:before { + top: 10px; + } + #tsd-search .results span.parent { + color: var(--color-text-aside); + font-weight: normal; + } + #tsd-search.has-focus { + background-color: var(--color-accent); + } + #tsd-search.has-focus .field input { + top: 0; + opacity: 1; + } + #tsd-search.has-focus .title, + #tsd-search.has-focus #tsd-toolbar-links a { + z-index: 0; + opacity: 0; + } + #tsd-search.has-focus .results { + visibility: visible; + } + #tsd-search.loading .results li.state.loading { + display: block; + } + #tsd-search.failure .results li.state.failure { + display: block; + } -.tsd-anchor-link:hover > .tsd-anchor-icon svg { - visibility: visible; -} + #tsd-toolbar-links { + position: absolute; + top: 0; + right: 2rem; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-end; + } + #tsd-toolbar-links a { + margin-left: 1.5rem; + } + #tsd-toolbar-links a:hover { + text-decoration: underline; + } -.deprecated { - text-decoration: line-through !important; -} + .tsd-signature { + margin: 0 0 1rem 0; + padding: 1rem 0.5rem; + border: 1px solid var(--color-accent); + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; + } -.warning { - padding: 1rem; - color: var(--color-warning-text); - background: var(--color-background-warning); -} + .tsd-signature-keyword { + color: var(--color-ts-keyword); + font-weight: normal; + } -.tsd-kind-project { - color: var(--color-ts-project); -} -.tsd-kind-module { - color: var(--color-ts-module); -} -.tsd-kind-namespace { - color: var(--color-ts-namespace); -} -.tsd-kind-enum { - color: var(--color-ts-enum); -} -.tsd-kind-enum-member { - color: var(--color-ts-enum-member); -} -.tsd-kind-variable { - color: var(--color-ts-variable); -} -.tsd-kind-function { - color: var(--color-ts-function); -} -.tsd-kind-class { - color: var(--color-ts-class); -} -.tsd-kind-interface { - color: var(--color-ts-interface); -} -.tsd-kind-constructor { - color: var(--color-ts-constructor); -} -.tsd-kind-property { - color: var(--color-ts-property); -} -.tsd-kind-method { - color: var(--color-ts-method); -} -.tsd-kind-call-signature { - color: var(--color-ts-call-signature); -} -.tsd-kind-index-signature { - color: var(--color-ts-index-signature); -} -.tsd-kind-constructor-signature { - color: var(--color-ts-constructor-signature); -} -.tsd-kind-parameter { - color: var(--color-ts-parameter); -} -.tsd-kind-type-literal { - color: var(--color-ts-type-literal); -} -.tsd-kind-type-parameter { - color: var(--color-ts-type-parameter); -} -.tsd-kind-accessor { - color: var(--color-ts-accessor); -} -.tsd-kind-get-signature { - color: var(--color-ts-get-signature); -} -.tsd-kind-set-signature { - color: var(--color-ts-set-signature); -} -.tsd-kind-type-alias { - color: var(--color-ts-type-alias); -} + .tsd-signature-symbol { + color: var(--color-text-aside); + font-weight: normal; + } -/* if we have a kind icon, don't color the text by kind */ -.tsd-kind-icon ~ span { - color: var(--color-text); -} + .tsd-signature-type { + font-style: italic; + font-weight: normal; + } -* { - scrollbar-width: thin; - scrollbar-color: var(--color-accent) var(--color-icon-background); -} + .tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + list-style-type: none; + } + .tsd-signatures .tsd-signature { + margin: 0; + border-color: var(--color-accent); + border-width: 1px 0; + transition: background-color 0.1s; + } + .tsd-signatures .tsd-index-signature:not(:last-child) { + margin-bottom: 1em; + } + .tsd-signatures .tsd-index-signature .tsd-signature { + border-width: 1px; + } + .tsd-description .tsd-signatures .tsd-signature { + border-width: 1px; + } -*::-webkit-scrollbar { - width: 0.75rem; -} + ul.tsd-parameter-list, + ul.tsd-type-parameter-list { + list-style: square; + margin: 0; + padding-left: 20px; + } + ul.tsd-parameter-list > li.tsd-parameter-signature, + ul.tsd-type-parameter-list > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; + } + ul.tsd-parameter-list h5, + ul.tsd-type-parameter-list h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; + } + .tsd-sources { + margin-top: 1rem; + font-size: 0.875em; + } + .tsd-sources a { + color: var(--color-text-aside); + text-decoration: underline; + } + .tsd-sources ul { + list-style: none; + padding: 0; + } -*::-webkit-scrollbar-track { - background: var(--color-icon-background); -} + .tsd-page-toolbar { + position: sticky; + z-index: 1; + top: 0; + left: 0; + width: 100%; + color: var(--color-text); + background: var(--color-background-secondary); + border-bottom: 1px var(--color-accent) solid; + transition: transform 0.3s ease-in-out; + } + .tsd-page-toolbar a { + color: var(--color-text); + text-decoration: none; + } + .tsd-page-toolbar a.title { + font-weight: bold; + } + .tsd-page-toolbar a.title:hover { + text-decoration: underline; + } + .tsd-page-toolbar .tsd-toolbar-contents { + display: flex; + justify-content: space-between; + height: 2.5rem; + margin: 0 auto; + } + .tsd-page-toolbar .table-cell { + position: relative; + white-space: nowrap; + line-height: 40px; + } + .tsd-page-toolbar .table-cell:first-child { + width: 100%; + } + .tsd-page-toolbar .tsd-toolbar-icon { + box-sizing: border-box; + line-height: 0; + padding: 12px 0; + } -*::-webkit-scrollbar-thumb { - background-color: var(--color-accent); - border-radius: 999rem; - border: 0.25rem solid var(--color-icon-background); -} + .tsd-widget { + display: inline-block; + overflow: hidden; + opacity: 0.8; + height: 40px; + transition: + opacity 0.1s, + background-color 0.2s; + vertical-align: bottom; + cursor: pointer; + } + .tsd-widget:hover { + opacity: 0.9; + } + .tsd-widget.active { + opacity: 1; + background-color: var(--color-accent); + } + .tsd-widget.no-caption { + width: 40px; + } + .tsd-widget.no-caption:before { + margin: 0; + } -/* mobile */ -@media (max-width: 769px) { .tsd-widget.options, .tsd-widget.menu { - display: inline-block; + display: none; } - - .container-main { - display: flex; + input[type="checkbox"] + .tsd-widget:before { + background-position: -120px 0; } - html .col-content { - float: none; + input[type="checkbox"]:checked + .tsd-widget:before { + background-position: -160px 0; + } + + img { max-width: 100%; - width: 100%; } - html .col-sidebar { - position: fixed !important; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - padding: 1.5rem 1.5rem 0 0; - width: 75vw; - visibility: hidden; - background-color: var(--color-background); - transform: translate(100%, 0); + + .tsd-member-summary-name { + display: inline-flex; + align-items: center; + padding: 0.25rem; + text-decoration: none; } - html .col-sidebar > *:last-child { - padding-bottom: 20px; + + .tsd-anchor-icon { + display: inline-flex; + align-items: center; + margin-left: 0.5rem; + color: var(--color-text); } - html .overlay { - content: ""; - display: block; - position: fixed; - z-index: 1023; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); + + .tsd-anchor-icon svg { + width: 1em; + height: 1em; visibility: hidden; } - .to-has-menu .overlay { - animation: fade-in 0.4s; + .tsd-member-summary-name:hover > .tsd-anchor-icon svg, + .tsd-anchor-link:hover > .tsd-anchor-icon svg { + visibility: visible; } - .to-has-menu .col-sidebar { - animation: pop-in-from-right 0.4s; + .deprecated { + text-decoration: line-through !important; } - .from-has-menu .overlay { - animation: fade-out 0.4s; + .warning { + padding: 1rem; + color: var(--color-warning-text); + background: var(--color-background-warning); } - .from-has-menu .col-sidebar { - animation: pop-out-to-right 0.4s; + .tsd-kind-project { + color: var(--color-ts-project); } - - .has-menu body { - overflow: hidden; + .tsd-kind-module { + color: var(--color-ts-module); } - .has-menu .overlay { - visibility: visible; + .tsd-kind-namespace { + color: var(--color-ts-namespace); } - .has-menu .col-sidebar { - visibility: visible; - transform: translate(0, 0); - display: flex; - flex-direction: column; - gap: 1.5rem; - max-height: 100vh; - padding: 1rem 2rem; + .tsd-kind-enum { + color: var(--color-ts-enum); } - .has-menu .tsd-navigation { - max-height: 100%; + .tsd-kind-enum-member { + color: var(--color-ts-enum-member); } - #tsd-toolbar-links { - display: none; + .tsd-kind-variable { + color: var(--color-ts-variable); } - .tsd-navigation .tsd-nav-link { - display: flex; + .tsd-kind-function { + color: var(--color-ts-function); } -} - -/* one sidebar */ -@media (min-width: 770px) { - .container-main { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); - grid-template-areas: "sidebar content"; - margin: 2rem auto; + .tsd-kind-class { + color: var(--color-ts-class); } - - .col-sidebar { - grid-area: sidebar; + .tsd-kind-interface { + color: var(--color-ts-interface); } - .col-content { - grid-area: content; - padding: 0 1rem; + .tsd-kind-constructor { + color: var(--color-ts-constructor); } -} -@media (min-width: 770px) and (max-width: 1399px) { - .col-sidebar { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - padding-top: 1rem; + .tsd-kind-property { + color: var(--color-ts-property); } - .site-menu { - margin-top: 1rem; + .tsd-kind-method { + color: var(--color-ts-method); + } + .tsd-kind-reference { + color: var(--color-ts-reference); + } + .tsd-kind-call-signature { + color: var(--color-ts-call-signature); + } + .tsd-kind-index-signature { + color: var(--color-ts-index-signature); + } + .tsd-kind-constructor-signature { + color: var(--color-ts-constructor-signature); + } + .tsd-kind-parameter { + color: var(--color-ts-parameter); + } + .tsd-kind-type-parameter { + color: var(--color-ts-type-parameter); + } + .tsd-kind-accessor { + color: var(--color-ts-accessor); + } + .tsd-kind-get-signature { + color: var(--color-ts-get-signature); + } + .tsd-kind-set-signature { + color: var(--color-ts-set-signature); + } + .tsd-kind-type-alias { + color: var(--color-ts-type-alias); } -} -/* two sidebars */ -@media (min-width: 1200px) { - .container-main { - grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); - grid-template-areas: "sidebar content toc"; + /* if we have a kind icon, don't color the text by kind */ + .tsd-kind-icon ~ span { + color: var(--color-text); } - .col-sidebar { - display: contents; + * { + scrollbar-width: thin; + scrollbar-color: var(--color-accent) var(--color-icon-background); } - .page-menu { - grid-area: toc; - padding-left: 1rem; + *::-webkit-scrollbar { + width: 0.75rem; } - .site-menu { - grid-area: sidebar; + + *::-webkit-scrollbar-track { + background: var(--color-icon-background); } - .site-menu { - margin-top: 1rem 0; + *::-webkit-scrollbar-thumb { + background-color: var(--color-accent); + border-radius: 999rem; + border: 0.25rem solid var(--color-icon-background); } - .page-menu, - .site-menu { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; + /* mobile */ + @media (max-width: 769px) { + .tsd-widget.options, + .tsd-widget.menu { + display: inline-block; + } + + .container-main { + display: flex; + } + html .col-content { + float: none; + max-width: 100%; + width: 100%; + } + html .col-sidebar { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + width: 75vw; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-sidebar > *:last-child { + padding-bottom: 20px; + } + html .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu .col-sidebar { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu .col-sidebar { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu .col-sidebar { + visibility: visible; + transform: translate(0, 0); + display: flex; + flex-direction: column; + gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } + #tsd-toolbar-links { + display: none; + } + .tsd-navigation .tsd-nav-link { + display: flex; + } + } + + /* one sidebar */ + @media (min-width: 770px) { + .container-main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); + grid-template-areas: "sidebar content"; + margin: 2rem auto; + } + + .col-sidebar { + grid-area: sidebar; + } + .col-content { + grid-area: content; + padding: 0 1rem; + } + } + @media (min-width: 770px) and (max-width: 1399px) { + .col-sidebar { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + padding-top: 1rem; + } + .site-menu { + margin-top: 1rem; + } + } + + /* two sidebars */ + @media (min-width: 1200px) { + .container-main { + grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax( + 0, + 20rem + ); + grid-template-areas: "sidebar content toc"; + } + + .col-sidebar { + display: contents; + } + + .page-menu { + grid-area: toc; + padding-left: 1rem; + } + .site-menu { + grid-area: sidebar; + } + + .site-menu { + margin-top: 1rem; + } + + .page-menu, + .site-menu { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + } } } diff --git a/docs/classes/AuthenticationError.html b/docs/classes/AuthenticationError.html index 6023edb..bc27470 100644 --- a/docs/classes/AuthenticationError.html +++ b/docs/classes/AuthenticationError.html @@ -1,4 +1,4 @@ -AuthenticationError | PAOIDCClient

Class AuthenticationError

Hierarchy (view full)

Constructors

constructor +AuthenticationError | PAOIDCClient

Class AuthenticationError

Hierarchy (View Summary)

Constructors

Properties

error: string
error_description?: string
error_uri?: string
message: string
name: string
stack?: string
state?: string
prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

Optional override for formatting stack traces

-
stackTraceLimit: number

Methods

  • Create .stack property on a target object

    -

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

+prepareStackTrace? +stackTraceLimit +

Methods

Constructors

Properties

error: string
error_description?: string
error_uri?: string
message: string
name: string
stack?: string
state?: string
prepareStackTrace?: (err: Error, stackTraces: CallSite[]) => any

Optional override for formatting stack traces

+
stackTraceLimit: number

Methods

  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/EventEmitter.html b/docs/classes/EventEmitter.html index a4cd942..265cf99 100644 --- a/docs/classes/EventEmitter.html +++ b/docs/classes/EventEmitter.html @@ -1,7 +1,7 @@ -EventEmitter | PAOIDCClient

Class EventEmitter<T>

Type Parameters

  • T extends string

Hierarchy (view full)

Constructors

constructor +EventEmitter | PAOIDCClient

Class EventEmitter<T>

Type Parameters

  • T extends string

Hierarchy (View Summary)

Constructors

Properties

Methods

Constructors

Properties

callbacks: Record<string, any[]>

Methods

+

Constructors

Properties

callbacks: Record<string, any[]>

Methods

diff --git a/docs/classes/InMemoryStateStore.html b/docs/classes/InMemoryStateStore.html index dbfbb67..ce2ca1a 100644 --- a/docs/classes/InMemoryStateStore.html +++ b/docs/classes/InMemoryStateStore.html @@ -1,4 +1,4 @@ -InMemoryStateStore | PAOIDCClient

Class InMemoryStateStore<T>

Type Parameters

  • T = any

Hierarchy (view full)

Constructors

constructor +InMemoryStateStore | PAOIDCClient

Class InMemoryStateStore<T>

Type Parameters

  • T = any

Hierarchy (View Summary)

Constructors

Properties

Methods

clear @@ -6,4 +6,4 @@ get init? set -

Constructors

Properties

map: Map<any, any> = ...
prefix: string

Methods

+

Constructors

Properties

map: Map<any, any> = ...
prefix: string

Methods

diff --git a/docs/classes/InteractionCancelled.html b/docs/classes/InteractionCancelled.html index d396e41..ee120af 100644 --- a/docs/classes/InteractionCancelled.html +++ b/docs/classes/InteractionCancelled.html @@ -1,13 +1,13 @@ -InteractionCancelled | PAOIDCClient

Class InteractionCancelled

Hierarchy (view full)

Constructors

constructor +InteractionCancelled | PAOIDCClient

Class InteractionCancelled

Hierarchy (View Summary)

Constructors

Properties

error: string
error_description?: string
message: string
name: string
stack?: string
prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

Optional override for formatting stack traces

-
stackTraceLimit: number

Methods

  • Create .stack property on a target object

    -

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

+prepareStackTrace? +stackTraceLimit +

Methods

Constructors

Properties

error: string
error_description?: string
message: string
name: string
stack?: string
prepareStackTrace?: (err: Error, stackTraces: CallSite[]) => any

Optional override for formatting stack traces

+
stackTraceLimit: number

Methods

  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/InvalidIdTokenError.html b/docs/classes/InvalidIdTokenError.html index 5ed6be6..9c36cb2 100644 --- a/docs/classes/InvalidIdTokenError.html +++ b/docs/classes/InvalidIdTokenError.html @@ -1,13 +1,13 @@ -InvalidIdTokenError | PAOIDCClient

Class InvalidIdTokenError

Hierarchy (view full)

Constructors

constructor +InvalidIdTokenError | PAOIDCClient

Class InvalidIdTokenError

Hierarchy (View Summary)

Constructors

Properties

error: string
error_description?: string
message: string
name: string
stack?: string
prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

Optional override for formatting stack traces

-
stackTraceLimit: number

Methods

  • Create .stack property on a target object

    -

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

+prepareStackTrace? +stackTraceLimit +

Methods

Constructors

Properties

error: string
error_description?: string
message: string
name: string
stack?: string
prepareStackTrace?: (err: Error, stackTraces: CallSite[]) => any

Optional override for formatting stack traces

+
stackTraceLimit: number

Methods

  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/InvalidJWTError.html b/docs/classes/InvalidJWTError.html index b686de6..c76b348 100644 --- a/docs/classes/InvalidJWTError.html +++ b/docs/classes/InvalidJWTError.html @@ -1,13 +1,13 @@ -InvalidJWTError | PAOIDCClient

Class InvalidJWTError

Hierarchy (view full)

Constructors

constructor +InvalidJWTError | PAOIDCClient

Class InvalidJWTError

Hierarchy (View Summary)

Constructors

Properties

error: string
error_description?: string
message: string
name: string
stack?: string
prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

Optional override for formatting stack traces

-
stackTraceLimit: number

Methods

  • Create .stack property on a target object

    -

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

+prepareStackTrace? +stackTraceLimit +

Methods

Constructors

Properties

error: string
error_description?: string
message: string
name: string
stack?: string
prepareStackTrace?: (err: Error, stackTraces: CallSite[]) => any

Optional override for formatting stack traces

+
stackTraceLimit: number

Methods

  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/LocalStorageStateStore.html b/docs/classes/LocalStorageStateStore.html index 2b48c83..5c45195 100644 --- a/docs/classes/LocalStorageStateStore.html +++ b/docs/classes/LocalStorageStateStore.html @@ -1,8 +1,8 @@ -LocalStorageStateStore | PAOIDCClient

Class LocalStorageStateStore<T>

Type Parameters

  • T = any

Hierarchy (view full)

Constructors

constructor +LocalStorageStateStore | PAOIDCClient

Class LocalStorageStateStore<T>

Type Parameters

  • T = any

Hierarchy (View Summary)

Constructors

Properties

Methods

Constructors

Properties

prefix: string

Methods

+

Constructors

Properties

prefix: string

Methods

diff --git a/docs/classes/OIDCClient.html b/docs/classes/OIDCClient.html index 7f60045..e4de8cf 100644 --- a/docs/classes/OIDCClient.html +++ b/docs/classes/OIDCClient.html @@ -1,70 +1,70 @@ -OIDCClient | PAOIDCClient

Class OIDCClient

OIDCClient provides methods for interacting with OIDC/OAuth2 authorization server. Those methods are signing a +OIDCClient | PAOIDCClient

Class OIDCClient

OIDCClient provides methods for interacting with OIDC/OAuth2 authorization server. Those methods are signing a user in, signing out, managing the user's claims, checking session and managing tokens returned from the OIDC/OAuth2 provider.

-

Hierarchy (view full)

Constructors

Properties

Hierarchy (View Summary)

Constructors

Properties

accessToken?: string
callbacks: Record<string, any[]>
idToken?: string
idTokenRaw?: string
issuer_metadata?: Record<string, any>
refreshToken?: string
scopes?: string[]
user?: any

Methods

  • Retrieve logged in user's access token if it exists.

    -

    Returns Promise<undefined | string>

  • Retrieve access token's expiration.

    -

    Returns Promise<undefined | number>

  • Retrieve logged in user's parsed id token if it exists.

    -

    Returns Promise<undefined | Record<string, any>>

  • Retrieve logged in user's id token in raw format if it exists.

    -

    Returns Promise<undefined | string>

  • Retrieve logged in user's refresh token if it exists.

    -

    Returns Promise<undefined | string>

  • Retrieve logged in user's scopes if it exists.

    -

    Returns Promise<undefined | string[]>

  • Retrieve logged in user's profile.

    -

    Returns Promise<undefined | Record<string, any>>

  • Initialize the library with this method. It resolves issuer configuration, jwks keys which are necessary for +revokeToken +silentLogin +

Constructors

Properties

accessToken?: string
callbacks: Record<string, any[]>
idToken?: string
idTokenRaw?: string
issuer_metadata?: Record<string, any>
refreshToken?: string
scopes?: string[]
user?: any

Methods

  • Retrieve logged in user's access token if it exists.

    +

    Returns Promise<undefined | string>

  • Retrieve access token's expiration.

    +

    Returns Promise<undefined | number>

  • Retrieve logged in user's parsed id token if it exists.

    +

    Returns Promise<undefined | Record<string, any>>

  • Retrieve logged in user's id token in raw format if it exists.

    +

    Returns Promise<undefined | string>

  • Retrieve logged in user's refresh token if it exists.

    +

    Returns Promise<undefined | string>

  • Retrieve logged in user's scopes if it exists.

    +

    Returns Promise<undefined | string[]>

  • Retrieve logged in user's profile.

    +

    Returns Promise<undefined | Record<string, any>>

  • Initialize the library with this method. It resolves issuer configuration, jwks keys which are necessary for validating tokens returned from provider and checking if a user is already authenticated in provider.

    Parameters

    • checkLogin: boolean = true

      Make this false if you don't want to check user authorization status in provider while initializing. Defaults to true

      -

    Returns Promise<OIDCClient>

  • If there is a user stored locally return true. Otherwise it will make a silentLogin to check if End-User is +

Returns Promise<OIDCClient>

  • If there is a user stored locally return true. Otherwise it will make a silentLogin to check if End-User is logged in provider.

    Parameters

    • localOnly: boolean = false

      Don't check provider

      -

    Returns Promise<boolean>

  • Redirect to provider's authorization endpoint using provided parameters. You can override any parameter defined +

Returns Promise<boolean>

  • Redirect to provider's authorization endpoint using provided parameters. You can override any parameter defined in OIDCClient. If you don't provide state, nonce or code_verifier they will be generated automatically in a random and secure way.

    -

    Parameters

    Returns Promise<void>

  • After a user successfully authorizes an application, the authorization server will redirect the user back to +

    Parameters

    Returns Promise<void>

  • After a user successfully authorizes an application, the authorization server will redirect the user back to the application with either an authorization code or access token in the URL. In the callback page you should call this method.

    Parameters

    • url: string = window.location.href

      Full url which contains authorization request result parameters. Defaults to window.location.href

      -

    Returns Promise<undefined | Record<string, any>>

  • Open a popup with the provider's authorization endpoint using provided parameters. You can override any +

Returns Promise<undefined | Record<string, any>>

  • Open a popup with the provider's authorization endpoint using provided parameters. You can override any parameter defined in OIDCClient. If you don't provide state, nonce or code_verifier they will be generated automatically in a random and secure way. You can also override popup options.

    NOTE: Most browsers block popups if they are not happened as a result of user actions. In order to display login popup you must call this method in an event handler listening for a user action like button click.

    -

    Parameters

    Returns Promise<Record<string, any>>

  • Redirect to provider's end_session_endpoint with provided parameters. After logout provider will redirect to +

    Parameters

    Returns Promise<Record<string, any>>

  • Redirect to provider's end_session_endpoint with provided parameters. After logout provider will redirect to provided post_logout_redirect_uri if it provided.

    -

    Parameters

    Returns Promise<void>

  • OAuth2 token revocation implementation method. See more at tools.ietf.org/html/rfc7009

    Parameters

    • token: string

      Token to be revoked

      -
    • type: TokenType = 'access_token'

      Passed token's type. It will be used to provide token_type_hint parameter.

      +
    • type: TokenType = "access_token"

      Passed token's type. It will be used to provide token_type_hint parameter.

    • options: RevokeOptions = {}

      If necessary override options passed to OIDCClient by defining them here.

      -

    Returns Promise<any>

  • Login without having an interaction. If refresh tokens are used and there is a stored refresh token it will +

Returns Promise<any>

  • Login without having an interaction. If refresh tokens are used and there is a stored refresh token it will exchange refresh token to receive new access token. If not it silently makes a request the provider's authorization endpoint using provided parameters. You can override any parameter defined in OIDCClient. If you don't provide state, nonce or code_verifier they will be generated automatically in a random and secure way.

    -

    Parameters

    Returns Promise<any>

+

Parameters

Returns Promise<any>

diff --git a/docs/classes/OIDCClientError.html b/docs/classes/OIDCClientError.html index 15019ff..7ce06b8 100644 --- a/docs/classes/OIDCClientError.html +++ b/docs/classes/OIDCClientError.html @@ -1,13 +1,13 @@ -OIDCClientError | PAOIDCClient

Class OIDCClientError

Hierarchy (view full)

Constructors

constructor +OIDCClientError | PAOIDCClient

Class OIDCClientError

Hierarchy (View Summary)

Constructors

Properties

error: string
error_description?: string
message: string
name: string
stack?: string
prepareStackTrace?: ((err: Error, stackTraces: CallSite[]) => any)

Optional override for formatting stack traces

-
stackTraceLimit: number

Methods

  • Create .stack property on a target object

    -

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

+prepareStackTrace? +stackTraceLimit +

Methods

Constructors

Properties

error: string
error_description?: string
message: string
name: string
stack?: string
prepareStackTrace?: (err: Error, stackTraces: CallSite[]) => any

Optional override for formatting stack traces

+
stackTraceLimit: number

Methods

  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/StateNotFound.html b/docs/classes/StateNotFound.html new file mode 100644 index 0000000..3ae9869 --- /dev/null +++ b/docs/classes/StateNotFound.html @@ -0,0 +1,15 @@ +StateNotFound | PAOIDCClient

Class StateNotFound

Hierarchy (View Summary)

Constructors

Properties

error: string
error_description?: string
error_uri?: string
message: string
name: string
stack?: string
state?: string
prepareStackTrace?: (err: Error, stackTraces: CallSite[]) => any

Optional override for formatting stack traces

+
stackTraceLimit: number

Methods

  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/StateStore.html b/docs/classes/StateStore.html index 118afb7..1db10a9 100644 --- a/docs/classes/StateStore.html +++ b/docs/classes/StateStore.html @@ -1,8 +1,8 @@ -StateStore | PAOIDCClient

Class StateStore<T>Abstract

Type Parameters

  • T = Record<string, any>

Hierarchy (view full)

Constructors

constructor +StateStore | PAOIDCClient

Class StateStore<T>Abstract

Type Parameters

  • T = Record<string, any>

Hierarchy (View Summary)

Constructors

Properties

Methods

Constructors

Properties

prefix: string

Methods

+

Constructors

Properties

prefix: string

Methods

diff --git a/docs/functions/default.html b/docs/functions/default.html index ffea592..abf1905 100644 --- a/docs/functions/default.html +++ b/docs/functions/default.html @@ -1,3 +1,3 @@ -default | PAOIDCClient

Function default

  • Create OIDC client with initializing it. It resolves issuer metadata, jwks keys and check if user is +default | PAOIDCClient

    Function default

    +

    Parameters

    Returns Promise<OIDCClient>

diff --git a/docs/hierarchy.html b/docs/hierarchy.html new file mode 100644 index 0000000..95354dd --- /dev/null +++ b/docs/hierarchy.html @@ -0,0 +1 @@ +PAOIDCClient
diff --git a/docs/index.html b/docs/index.html index 27c75c3..44087a3 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,34 +1 @@ -PAOIDCClient
+PAOIDCClient
diff --git a/docs/interfaces/AuthRequestOptions.html b/docs/interfaces/AuthRequestOptions.html index c69c7ad..86638cd 100644 --- a/docs/interfaces/AuthRequestOptions.html +++ b/docs/interfaces/AuthRequestOptions.html @@ -1,4 +1,4 @@ -AuthRequestOptions | PAOIDCClient

Interface AuthRequestOptions

interface AuthRequestOptions {
    acr_values?: string;
    audience?: string;
    claims?: Record<string, any>;
    claims_locales?: string;
    client_id?: string;
    code_challenge?: string;
    code_challenge_method?: string;
    code_verifier?: string;
    display?: string;
    extraParams?: {
        [key: string]: any;
    };
    fragment?: string;
    id_token_hint?: string;
    login_hint?: string;
    nonce?: string;
    prompt?: string;
    redirect_uri?: string;
    registration?: string;
    request_type?: "d" | "p" | "s";
    response_mode?: string;
    response_type?: string;
    scope?: string;
    state?: string;
    ui_locales?: string;
    web_message_target?: string;
    web_message_uri?: string;
}

Properties

acr_values? +AuthRequestOptions | PAOIDCClient

Interface AuthRequestOptions

interface AuthRequestOptions {
    acr_values?: string;
    audience?: string;
    claims?: Record<string, any>;
    claims_locales?: string;
    client_id?: string;
    code_challenge?: string;
    code_challenge_method?: string;
    code_verifier?: string;
    display?: string;
    extraParams?: { [key: string]: any };
    fragment?: string;
    id_token_hint?: string;
    login_hint?: string;
    nonce?: string;
    prompt?: string;
    redirect_uri?: string;
    registration?: string;
    request_type?: "d" | "p" | "s";
    response_mode?: string;
    response_type?: string;
    scope?: string;
    state?: string;
    ui_locales?: string;
    web_message_target?: string;
    web_message_uri?: string;
}

Properties

acr_values?: string
audience?: string
claims?: Record<string, any>
claims_locales?: string
client_id?: string
code_challenge?: string
code_challenge_method?: string
code_verifier?: string
display?: string
extraParams?: {
    [key: string]: any;
}
fragment?: string
id_token_hint?: string
login_hint?: string
nonce?: string
prompt?: string
redirect_uri?: string
registration?: string
request_type?: "d" | "p" | "s"
response_mode?: string
response_type?: string
scope?: string
state?: string
ui_locales?: string
web_message_target?: string
web_message_uri?: string
+

Properties

acr_values?: string
audience?: string
claims?: Record<string, any>
claims_locales?: string
client_id?: string
code_challenge?: string
code_challenge_method?: string
code_verifier?: string
display?: string
extraParams?: { [key: string]: any }
fragment?: string
id_token_hint?: string
login_hint?: string
nonce?: string
prompt?: string
redirect_uri?: string
registration?: string
request_type?: "d" | "p" | "s"
response_mode?: string
response_type?: string
scope?: string
state?: string
ui_locales?: string
web_message_target?: string
web_message_uri?: string
diff --git a/docs/interfaces/IEndpointConfiguration.html b/docs/interfaces/IEndpointConfiguration.html index c0b4e17..31218ce 100644 --- a/docs/interfaces/IEndpointConfiguration.html +++ b/docs/interfaces/IEndpointConfiguration.html @@ -1,4 +1,4 @@ -IEndpointConfiguration | PAOIDCClient

Interface IEndpointConfiguration

interface IEndpointConfiguration {
    authorization_endpoint?: string;
    check_session_iframe?: string;
    device_authorization_endpoint?: string;
    end_session_endpoint?: string;
    introspection_endpoint?: string;
    jwks_uri?: string;
    mfa_endpoint?: string;
    registration_endpoint?: string;
    revocation_endpoint?: string;
    token_endpoint?: string;
    userinfo_endpoint?: string;
}

Properties

authorization_endpoint? +IEndpointConfiguration | PAOIDCClient

Interface IEndpointConfiguration

interface IEndpointConfiguration {
    authorization_endpoint?: string;
    check_session_iframe?: string;
    device_authorization_endpoint?: string;
    end_session_endpoint?: string;
    introspection_endpoint?: string;
    jwks_uri?: string;
    mfa_endpoint?: string;
    registration_endpoint?: string;
    revocation_endpoint?: string;
    token_endpoint?: string;
    userinfo_endpoint?: string;
}

Properties

authorization_endpoint?: string
check_session_iframe?: string
device_authorization_endpoint?: string
end_session_endpoint?: string
introspection_endpoint?: string
jwks_uri?: string
mfa_endpoint?: string
registration_endpoint?: string
revocation_endpoint?: string
token_endpoint?: string
userinfo_endpoint?: string
+

Properties

authorization_endpoint?: string
check_session_iframe?: string
device_authorization_endpoint?: string
end_session_endpoint?: string
introspection_endpoint?: string
jwks_uri?: string
mfa_endpoint?: string
registration_endpoint?: string
revocation_endpoint?: string
token_endpoint?: string
userinfo_endpoint?: string
diff --git a/docs/interfaces/IFrameOptions.html b/docs/interfaces/IFrameOptions.html index 6023e54..a7b4cca 100644 --- a/docs/interfaces/IFrameOptions.html +++ b/docs/interfaces/IFrameOptions.html @@ -1,7 +1,7 @@ -IFrameOptions | PAOIDCClient

Interface IFrameOptions

interface IFrameOptions {
    eventOrigin: string;
    timeout?: number;
}

Properties

eventOrigin +IFrameOptions | PAOIDCClient

Interface IFrameOptions

interface IFrameOptions {
    eventOrigin: string;
    timeout?: number;
}

Properties

Properties

eventOrigin: string
timeout?: number

Iframe response timeout in milliseconds.

-
60000
+

Properties

eventOrigin: string
timeout?: number

Iframe response timeout in milliseconds.

+
60000
 
-
+
diff --git a/docs/interfaces/IPlusAuthClientOptions.html b/docs/interfaces/IPlusAuthClientOptions.html index 22256fc..4d1165a 100644 --- a/docs/interfaces/IPlusAuthClientOptions.html +++ b/docs/interfaces/IPlusAuthClientOptions.html @@ -1,75 +1,75 @@ -IPlusAuthClientOptions | PAOIDCClient

Interface IPlusAuthClientOptions

interface IPlusAuthClientOptions {
    acr_values?: string;
    audience?: string;
    authStore?: StateStore<any>;
    autoSilentRenew?: boolean;
    checkSession?: boolean;
    checkSessionInterval?: number;
    claims?: Record<string, any>;
    claims_locales?: string;
    client_id: string;
    client_secret?: string;
    clockSkew?: number;
    code_challenge?: string;
    code_challenge_method?: string;
    code_verifier?: string;
    currentTimeInMillis?: (() => number);
    display?: string;
    endpoints?: IEndpointConfiguration;
    extraLogoutParams?: {
        [key: string]: string;
    };
    extraParams?: {
        [key: string]: any;
    };
    fragment?: string;
    httpClient?: ((options: RequestOptions) => Promise<any>);
    idTokenValidator?: ((idToken: string) => Promise<boolean>);
    id_token_hint?: string;
    issuer: string;
    login_hint?: string;
    nonce?: string;
    nonceLength?: number;
    post_logout_redirect_uri?: string;
    prompt?: string;
    redirect_uri?: string;
    registration?: string;
    requestUserInfo?: boolean;
    response_mode?: string;
    response_type?: string;
    scope?: string;
    secondsToRefreshAccessTokenBeforeExp?: number;
    silentRequestTimeout?: number;
    silent_redirect_uri?: string;
    state?: string;
    stateLength?: number;
    stateStore?: StateStore<any>;
    ui_locales?: string;
    useRefreshToken?: boolean;
    web_message_target?: string;
    web_message_uri?: string;
}

Hierarchy

Properties

acr_values? +IPlusAuthClientOptions | PAOIDCClient

Interface IPlusAuthClientOptions

interface IPlusAuthClientOptions {
    acr_values?: string;
    audience?: string;
    authStore?: StateStore<any>;
    autoSilentRenew?: boolean;
    checkSession?: boolean;
    checkSessionInterval?: number;
    claims?: Record<string, any>;
    claims_locales?: string;
    client_id: string;
    client_secret?: string;
    clockSkew?: number;
    code_challenge?: string;
    code_challenge_method?: string;
    code_verifier?: string;
    currentTimeInMillis?: () => number;
    display?: string;
    endpoints?: IEndpointConfiguration;
    extraLogoutParams?: { [key: string]: string };
    extraParams?: { [key: string]: any };
    fragment?: string;
    httpClient?: (options: RequestOptions) => Promise<any>;
    id_token_hint?: string;
    idTokenValidator?: (idToken: string) => Promise<boolean>;
    issuer: string;
    login_hint?: string;
    nonce?: string;
    nonceLength?: number;
    post_logout_redirect_uri?: string;
    prompt?: string;
    redirect_uri?: string;
    registration?: string;
    requestUserInfo?: boolean;
    response_mode?: string;
    response_type?: string;
    scope?: string;
    secondsToRefreshAccessTokenBeforeExp?: number;
    silent_redirect_uri?: string;
    silentRequestTimeout?: number;
    state?: string;
    stateLength?: number;
    stateStore?: StateStore<any>;
    ui_locales?: string;
    useRefreshToken?: boolean;
    web_message_target?: string;
    web_message_uri?: string;
}

Hierarchy

Properties

acr_values?: string
audience?: string
authStore?: StateStore<any>
autoSilentRenew?: boolean

Enable/disable automatic access token renewal. If enabled, access tokens will be refreshed by using silent +

Properties

acr_values?: string
audience?: string
authStore?: StateStore<any>
autoSilentRenew?: boolean

Enable/disable automatic access token renewal. If enabled, access tokens will be refreshed by using silent login in an iframe before they expire.

-

Also see secondsToRefreshAccessTokenBeforeExp

-
checkSession?: boolean

Enable/Disable session monitoring.

-
checkSessionInterval?: number

Session checking interval in milliseconds. Defaults to 2000

-
claims?: Record<string, any>
claims_locales?: string
client_id: string
client_secret?: string
clockSkew?: number

The amount of clock skew tolerated for time comparisons between the Authorization server and client in seconds.

-
code_challenge?: string
code_challenge_method?: string
code_verifier?: string
currentTimeInMillis?: (() => number)

Custom current time function to be used for time related operations. If client clock is far ahead or far before +

Also see secondsToRefreshAccessTokenBeforeExp

+
checkSession?: boolean

Enable/Disable session monitoring.

+
checkSessionInterval?: number

Session checking interval in milliseconds. Defaults to 2000

+
claims?: Record<string, any>
claims_locales?: string
client_id: string
client_secret?: string
clockSkew?: number

The amount of clock skew tolerated for time comparisons between the Authorization server and client in seconds.

+
code_challenge?: string
code_challenge_method?: string
code_verifier?: string
currentTimeInMillis?: () => number

Custom current time function to be used for time related operations. If client clock is far ahead or far before from authorization server's time, token validations will fail. If any Network Time Protocol service used, use this method to provide current time to the library.

-
display?: string
extraLogoutParams?: {
    [key: string]: string;
}
extraParams?: {
    [key: string]: any;
}
fragment?: string
httpClient?: ((options: RequestOptions) => Promise<any>)
idTokenValidator?: ((idToken: string) => Promise<boolean>)

Additional id token validator. By default only payload fields validated. If you need additional validations, +

display?: string
extraLogoutParams?: { [key: string]: string }
extraParams?: { [key: string]: any }
fragment?: string
httpClient?: (options: RequestOptions) => Promise<any>
id_token_hint?: string
idTokenValidator?: (idToken: string) => Promise<boolean>

Additional id token validator. By default only payload fields validated. If you need additional validations, like signature validation, you should implement and provide it with this option.

-

Type declaration

    • (idToken): Promise<boolean>
    • Parameters

      • idToken: string

        raw id token string

        -

      Returns Promise<boolean>

id_token_hint?: string
issuer: string
login_hint?: string
nonce?: string
nonceLength?: number

Generated nonce length. Defaults to 10

-
10
+

Type declaration

    • (idToken: string): Promise<boolean>
    • Parameters

      • idToken: string

        raw id token string

        +

      Returns Promise<boolean>

issuer: string
login_hint?: string
nonce?: string
nonceLength?: number

Generated nonce length. Defaults to 10

+
10
 
-
post_logout_redirect_uri?: string
prompt?: string
redirect_uri?: string
registration?: string
requestUserInfo?: boolean

Fetch user profile by using UserInfo +

post_logout_redirect_uri?: string
prompt?: string
redirect_uri?: string
registration?: string
requestUserInfo?: boolean

Fetch user profile by using UserInfo Request after successful authorization. Usually this wouldn't not be necessary if id token is received.

-
response_mode?: string
response_type?: string
scope?: string
secondsToRefreshAccessTokenBeforeExp?: number

The number of seconds before an access token is to expire to renew it automatically. Related to autoSilentRenew

-
silentRequestTimeout?: number

Number of seconds to wait for the silent renew to return before assuming it has failed or timed out (default: 10). Related to autoSilentRenew

-
silent_redirect_uri?: string
state?: string
stateLength?: number

Generated state length. Defaults to 10

-
10
+
response_mode?: string
response_type?: string
scope?: string
secondsToRefreshAccessTokenBeforeExp?: number

The number of seconds before an access token is to expire to renew it automatically. Related to autoSilentRenew

+
silent_redirect_uri?: string
silentRequestTimeout?: number

Number of seconds to wait for the silent renew to return before assuming it has failed or timed out (default: 10). Related to autoSilentRenew

+
state?: string
stateLength?: number

Generated state length. Defaults to 10

+
10
 
-
stateStore?: StateStore<any>

Custom state store. See StateStore

-
ui_locales?: string
useRefreshToken?: boolean

If true, refresh tokens will be used for renewing access token. If false, authorization request will be +

stateStore?: StateStore<any>

Custom state store. See StateStore

+
ui_locales?: string
useRefreshToken?: boolean

If true, refresh tokens will be used for renewing access token. If false, authorization request will be performed silently in an iframe.

-
web_message_target?: string
web_message_uri?: string
+
web_message_target?: string
web_message_uri?: string
diff --git a/docs/interfaces/JWTValidationOptions.html b/docs/interfaces/JWTValidationOptions.html index 07ba2e7..ece6ce0 100644 --- a/docs/interfaces/JWTValidationOptions.html +++ b/docs/interfaces/JWTValidationOptions.html @@ -1,6 +1,6 @@ -JWTValidationOptions | PAOIDCClient

Interface JWTValidationOptions

interface JWTValidationOptions {
    audience?: string;
    client_id: string;
    clockSkew?: number;
    currentTimeInMillis?: (() => number);
    issuer: string;
}

Properties

audience? +JWTValidationOptions | PAOIDCClient

Interface JWTValidationOptions

interface JWTValidationOptions {
    audience?: string;
    client_id: string;
    clockSkew?: number;
    currentTimeInMillis?: () => number;
    issuer: string;
}

Properties

audience?: string
client_id: string
clockSkew?: number
currentTimeInMillis?: (() => number)
issuer: string
+

Properties

audience?: string
client_id: string
clockSkew?: number
currentTimeInMillis?: () => number
issuer: string
diff --git a/docs/interfaces/LogoutRequestOptions.html b/docs/interfaces/LogoutRequestOptions.html index 1bade5f..f5ba3b5 100644 --- a/docs/interfaces/LogoutRequestOptions.html +++ b/docs/interfaces/LogoutRequestOptions.html @@ -1,5 +1,5 @@ -LogoutRequestOptions | PAOIDCClient

Interface LogoutRequestOptions

interface LogoutRequestOptions {
    extraLogoutParams?: {
        [key: string]: string;
    };
    id_token_hint?: string;
    localOnly?: boolean;
    post_logout_redirect_uri?: string;
}

Properties

extraLogoutParams? +LogoutRequestOptions | PAOIDCClient

Interface LogoutRequestOptions

interface LogoutRequestOptions {
    extraLogoutParams?: { [key: string]: string };
    id_token_hint?: string;
    localOnly?: boolean;
    post_logout_redirect_uri?: string;
}

Properties

extraLogoutParams?: {
    [key: string]: string;
}
id_token_hint?: string
localOnly?: boolean
post_logout_redirect_uri?: string
+

Properties

extraLogoutParams?: { [key: string]: string }
id_token_hint?: string
localOnly?: boolean
post_logout_redirect_uri?: string
diff --git a/docs/interfaces/ParsedJWT.html b/docs/interfaces/ParsedJWT.html index e99e30b..dca10e8 100644 --- a/docs/interfaces/ParsedJWT.html +++ b/docs/interfaces/ParsedJWT.html @@ -1,4 +1,4 @@ -ParsedJWT | PAOIDCClient

Interface ParsedJWT

interface ParsedJWT {
    header: Partial<Record<JWTHeaderField, any>>;
    payload: Readonly<Record<
        | "nonce"
        | "exp"
        | "iss"
        | "aud"
        | "nbf"
        | "iat"
        | "jti"
        | "azp"
        | "auth_time"
        | "at_hash"
        | "c_hash"
        | "acr"
        | "amr"
        | "sub_jwk"
        | "cnf"
        | "sip_from_tag"
        | "sip_date"
        | "sip_callid"
        | "sip_cseq_num"
        | "sip_via_branch"
        | "orig"
        | "dest"
        | "mky"
        | "events"
        | "toe"
        | "txn"
        | "rph"
        | "sid"
        | "vot"
        | "vtm"
        | "attest"
        | "origid"
        | "act"
        | "scope"
        | "client_id"
        | "may_act"
        | "jcard"
        | "at_use_nbr", string | number>>;
    signature?: string;
}

Properties

header +ParsedJWT | PAOIDCClient

Interface ParsedJWT

interface ParsedJWT {
    header: Partial<Record<JWTHeaderField, any>>;
    payload: Readonly<
        Record<
            | "nonce"
            | "exp"
            | "iss"
            | "aud"
            | "nbf"
            | "iat"
            | "jti"
            | "azp"
            | "auth_time"
            | "at_hash"
            | "c_hash"
            | "acr"
            | "amr"
            | "sub_jwk"
            | "cnf"
            | "sip_from_tag"
            | "sip_date"
            | "sip_callid"
            | "sip_cseq_num"
            | "sip_via_branch"
            | "orig"
            | "dest"
            | "mky"
            | "events"
            | "toe"
            | "txn"
            | "rph"
            | "sid"
            | "vot"
            | "vtm"
            | "attest"
            | "origid"
            | "act"
            | "scope"
            | "client_id"
            | "may_act"
            | "jcard"
            | "at_use_nbr",
            string
            | number,
        >,
    >;
    signature?: string;
}

Properties

header: Partial<Record<JWTHeaderField, any>>
payload: Readonly<Record<
    | "nonce"
    | "exp"
    | "iss"
    | "aud"
    | "nbf"
    | "iat"
    | "jti"
    | "azp"
    | "auth_time"
    | "at_hash"
    | "c_hash"
    | "acr"
    | "amr"
    | "sub_jwk"
    | "cnf"
    | "sip_from_tag"
    | "sip_date"
    | "sip_callid"
    | "sip_cseq_num"
    | "sip_via_branch"
    | "orig"
    | "dest"
    | "mky"
    | "events"
    | "toe"
    | "txn"
    | "rph"
    | "sid"
    | "vot"
    | "vtm"
    | "attest"
    | "origid"
    | "act"
    | "scope"
    | "client_id"
    | "may_act"
    | "jcard"
    | "at_use_nbr", string | number>>
signature?: string
+

Properties

header: Partial<Record<JWTHeaderField, any>>
payload: Readonly<
    Record<
        | "nonce"
        | "exp"
        | "iss"
        | "aud"
        | "nbf"
        | "iat"
        | "jti"
        | "azp"
        | "auth_time"
        | "at_hash"
        | "c_hash"
        | "acr"
        | "amr"
        | "sub_jwk"
        | "cnf"
        | "sip_from_tag"
        | "sip_date"
        | "sip_callid"
        | "sip_cseq_num"
        | "sip_via_branch"
        | "orig"
        | "dest"
        | "mky"
        | "events"
        | "toe"
        | "txn"
        | "rph"
        | "sid"
        | "vot"
        | "vtm"
        | "attest"
        | "origid"
        | "act"
        | "scope"
        | "client_id"
        | "may_act"
        | "jcard"
        | "at_use_nbr",
        string
        | number,
    >,
>
signature?: string
diff --git a/docs/interfaces/PopupOptions.html b/docs/interfaces/PopupOptions.html index f01ac63..609d526 100644 --- a/docs/interfaces/PopupOptions.html +++ b/docs/interfaces/PopupOptions.html @@ -1,7 +1,7 @@ -PopupOptions | PAOIDCClient

Interface PopupOptions

interface PopupOptions {
    popup?: null | Window;
    timeout?: number;
}

Properties

popup? +PopupOptions | PAOIDCClient

Interface PopupOptions

interface PopupOptions {
    popup?: null | Window;
    timeout?: number;
}

Properties

Properties

popup?: null | Window
timeout?: number

Popup response timeout in milliseconds

-
60000
+

Properties

popup?: null | Window
timeout?: number

Popup response timeout in milliseconds

+
60000
 
-
+
diff --git a/docs/interfaces/RevokeOptions.html b/docs/interfaces/RevokeOptions.html index f953ad7..0ad51c3 100644 --- a/docs/interfaces/RevokeOptions.html +++ b/docs/interfaces/RevokeOptions.html @@ -1,3 +1,3 @@ -RevokeOptions | PAOIDCClient

Interface RevokeOptions

interface RevokeOptions {
    client_id?: string;
    client_secret?: string;
}

Properties

client_id? +RevokeOptions | PAOIDCClient

Interface RevokeOptions

interface RevokeOptions {
    client_id?: string;
    client_secret?: string;
}

Properties

client_id?: string
client_secret?: string
+

Properties

client_id?: string
client_secret?: string
diff --git a/docs/interfaces/SessionCheckerOptions.html b/docs/interfaces/SessionCheckerOptions.html index 5d77d77..40a29fa 100644 --- a/docs/interfaces/SessionCheckerOptions.html +++ b/docs/interfaces/SessionCheckerOptions.html @@ -1,5 +1,5 @@ -SessionCheckerOptions | PAOIDCClient

Interface SessionCheckerOptions

interface SessionCheckerOptions {
    callback: ((...args: any) => void);
    checkInterval?: number;
    client_id: string;
    url: string;
}

Properties

callback -checkInterval? +SessionCheckerOptions | PAOIDCClient

Interface SessionCheckerOptions

interface SessionCheckerOptions {
    callback: (...args: any) => void;
    checkInterval?: number;
    client_id: string;
    url: string;
}

Properties

callback: ((...args: any) => void)
checkInterval?: number
client_id: string
url: string
+

Properties

callback: (...args: any) => void
checkInterval?: number
client_id: string
url: string
diff --git a/docs/interfaces/SessionMonitorOptions.html b/docs/interfaces/SessionMonitorOptions.html index 0cc3878..61efbcc 100644 --- a/docs/interfaces/SessionMonitorOptions.html +++ b/docs/interfaces/SessionMonitorOptions.html @@ -1,3 +1,3 @@ -SessionMonitorOptions | PAOIDCClient

Interface SessionMonitorOptions

interface SessionMonitorOptions {
    session_state: string;
    sub: string;
}

Properties

session_state +SessionMonitorOptions | PAOIDCClient

Interface SessionMonitorOptions

interface SessionMonitorOptions {
    session_state: string;
    sub: string;
}

Properties

Properties

session_state: string
sub: string
+

Properties

session_state: string
sub: string
diff --git a/docs/interfaces/TokenRequestOption.html b/docs/interfaces/TokenRequestOption.html index d35c8f3..5328ec7 100644 --- a/docs/interfaces/TokenRequestOption.html +++ b/docs/interfaces/TokenRequestOption.html @@ -1,10 +1,10 @@ -TokenRequestOption | PAOIDCClient

Interface TokenRequestOption

interface TokenRequestOption {
    client_id?: string;
    client_secret?: string;
    code?: string;
    code_verifier?: string;
    extraTokenHeaders?: Record<string, string>;
    extraTokenParams?: Record<string, string>;
    grant_type?: string;
    redirect_uri?: string;
    refresh_token?: string;
}

Properties

client_id? +TokenRequestOption | PAOIDCClient

Interface TokenRequestOption

interface TokenRequestOption {
    client_id?: string;
    client_secret?: string;
    code?: string;
    code_verifier?: string;
    extraTokenHeaders?: Record<string, string>;
    extraTokenParams?: Record<string, string>;
    grant_type?: string;
    redirect_uri?: string;
    refresh_token?: string;
}

Properties

client_id?: string
client_secret?: string
code?: string
code_verifier?: string
extraTokenHeaders?: Record<string, string>
extraTokenParams?: Record<string, string>
grant_type?: string
redirect_uri?: string
refresh_token?: string
+

Properties

client_id?: string
client_secret?: string
code?: string
code_verifier?: string
extraTokenHeaders?: Record<string, string>
extraTokenParams?: Record<string, string>
grant_type?: string
redirect_uri?: string
refresh_token?: string
diff --git a/docs/interfaces/TokenResponse.html b/docs/interfaces/TokenResponse.html index 18823ac..79b1082 100644 --- a/docs/interfaces/TokenResponse.html +++ b/docs/interfaces/TokenResponse.html @@ -1,4 +1,4 @@ -TokenResponse | PAOIDCClient

Interface TokenResponse

interface TokenResponse {
    access_token?: string;
    error?: string;
    error_description?: string;
    expires_in?: number;
    id_token?: string;
    refresh_token?: string;
    scope?: string;
    session_state?: string;
}

Properties

access_token? +TokenResponse | PAOIDCClient

Interface TokenResponse

interface TokenResponse {
    access_token?: string;
    error?: string;
    error_description?: string;
    expires_in?: number;
    id_token?: string;
    refresh_token?: string;
    scope?: string;
    session_state?: string;
}

Properties

access_token?: string
error?: string
error_description?: string
expires_in?: number
id_token?: string
refresh_token?: string
scope?: string
session_state?: string
+

Properties

access_token?: string
error?: string
error_description?: string
expires_in?: number
id_token?: string
refresh_token?: string
scope?: string
session_state?: string
diff --git a/docs/variables/Events.html b/docs/variables/Events.html index 47e3962..db0f432 100644 --- a/docs/variables/Events.html +++ b/docs/variables/Events.html @@ -1 +1 @@ -Events | PAOIDCClient

Variable EventsConst

Events: {
    SESSION_CHANGE: "session_change";
    SILENT_RENEW_ERROR: "silent_renew_error";
    SILENT_RENEW_SUCCESS: "silent_renew_success";
    USER_LOGIN: "user_login";
    USER_LOGOUT: "user_logout";
} = ...
+Events | PAOIDCClient

Variable EventsConst

Events: {
    SESSION_CHANGE: "session_change";
    SILENT_RENEW_ERROR: "silent_renew_error";
    SILENT_RENEW_SUCCESS: "silent_renew_success";
    USER_LOGIN: "user_login";
    USER_LOGOUT: "user_logout";
} = ...

Type declaration

  • ReadonlySESSION_CHANGE: "session_change"
  • ReadonlySILENT_RENEW_ERROR: "silent_renew_error"
  • ReadonlySILENT_RENEW_SUCCESS: "silent_renew_success"
  • ReadonlyUSER_LOGIN: "user_login"
  • ReadonlyUSER_LOGOUT: "user_logout"
diff --git a/examples/vue/babel.config.js b/examples/vue/babel.config.js index e955840..2cd190f 100644 --- a/examples/vue/babel.config.js +++ b/examples/vue/babel.config.js @@ -1,5 +1,3 @@ module.exports = { - presets: [ - '@vue/cli-plugin-babel/preset' - ] + presets: ["@vue/cli-plugin-babel/preset"], } diff --git a/examples/vue/package.json b/examples/vue/package.json index 51055c6..1996def 100644 --- a/examples/vue/package.json +++ b/examples/vue/package.json @@ -8,9 +8,9 @@ "lint": "vue-cli-service lint" }, "dependencies": { - "core-js": "^3.38.1", + "core-js": "^3.40.0", "vue": "^2.6.11", - "vue-router": "^4.4.3" + "vue-router": "^4.5.0" }, "devDependencies": { "@vue/cli-plugin-babel": "~5.0.8", @@ -25,18 +25,11 @@ "env": { "node": true }, - "extends": [ - "plugin:vue/essential", - "eslint:recommended" - ], + "extends": ["plugin:vue/essential", "eslint:recommended"], "parserOptions": { "parser": "babel-eslint" }, "rules": {} }, - "browserslist": [ - "> 1%", - "last 2 versions", - "not dead" - ] + "browserslist": ["> 1%", "last 2 versions", "not dead"] } diff --git a/examples/vue/src/App.vue b/examples/vue/src/App.vue index 2dfd415..d1650c1 100644 --- a/examples/vue/src/App.vue +++ b/examples/vue/src/App.vue @@ -11,21 +11,21 @@ diff --git a/examples/vue/vue.config.js b/examples/vue/vue.config.js index 18fe048..3b1197a 100644 --- a/examples/vue/vue.config.js +++ b/examples/vue/vue.config.js @@ -1,20 +1,20 @@ module.exports = { lintOnSave: false, configureWebpack: { - target: 'web' + target: "web", }, pages: { app: { - entry: 'src/main.js', - template: 'public/index.html', - filename: 'index.html', - excludeChunks: ['silent-renew'] + entry: "src/main.js", + template: "public/index.html", + filename: "index.html", + excludeChunks: ["silent-renew"], }, silentrenew: { - entry: 'src/silent-renew.js', - template: 'public/silent-renew.html', - filename: 'silent-renew.html', - excludeChunks: ['app'] - } + entry: "src/silent-renew.js", + template: "public/silent-renew.html", + filename: "silent-renew.html", + excludeChunks: ["app"], + }, }, } diff --git a/examples/vue3/package-lock.json b/examples/vue3/package-lock.json index 65f074c..7e1d636 100644 --- a/examples/vue3/package-lock.json +++ b/examples/vue3/package-lock.json @@ -9,18 +9,40 @@ "version": "0.0.0", "dependencies": { "vue": "^3.2.47", - "vue-router": "^4.1.6" + "vue-router": "^4.4.3" }, "devDependencies": { - "@vitejs/plugin-vue": "^4.1.0", - "@vue/compiler-sfc": "^3.2.47", - "vite": "^4.2.1" + "@vitejs/plugin-vue": "^5.1.2", + "@vue/compiler-sfc": "^3.4.38", + "vite": "^5.4.1" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.16.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.6.tgz", - "integrity": "sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.0" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -28,14 +50,45 @@ "node": ">=6.0.0" } }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.14.tgz", - "integrity": "sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -45,13 +98,14 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.14.tgz", - "integrity": "sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -61,13 +115,14 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.14.tgz", - "integrity": "sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -77,13 +132,14 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.14.tgz", - "integrity": "sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -93,13 +149,14 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.14.tgz", - "integrity": "sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -109,13 +166,14 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.14.tgz", - "integrity": "sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -125,13 +183,14 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.14.tgz", - "integrity": "sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -141,13 +200,14 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.14.tgz", - "integrity": "sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -157,13 +217,14 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.14.tgz", - "integrity": "sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -173,13 +234,14 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.14.tgz", - "integrity": "sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -189,13 +251,14 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.14.tgz", - "integrity": "sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -205,13 +268,14 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.14.tgz", - "integrity": "sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -221,13 +285,14 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.14.tgz", - "integrity": "sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -237,13 +302,14 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.14.tgz", - "integrity": "sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -253,13 +319,14 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.14.tgz", - "integrity": "sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -269,13 +336,14 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.14.tgz", - "integrity": "sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -285,13 +353,14 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.14.tgz", - "integrity": "sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -301,13 +370,14 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.14.tgz", - "integrity": "sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -317,13 +387,14 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.14.tgz", - "integrity": "sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -333,13 +404,14 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.14.tgz", - "integrity": "sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -349,13 +421,14 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.14.tgz", - "integrity": "sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -365,13 +438,14 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.14.tgz", - "integrity": "sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -380,16 +454,283 @@ "node": ">=12" } }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.25.0.tgz", + "integrity": "sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.25.0.tgz", + "integrity": "sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.25.0.tgz", + "integrity": "sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.25.0.tgz", + "integrity": "sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.25.0.tgz", + "integrity": "sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.25.0.tgz", + "integrity": "sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.25.0.tgz", + "integrity": "sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.25.0.tgz", + "integrity": "sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.25.0.tgz", + "integrity": "sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.25.0.tgz", + "integrity": "sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.25.0.tgz", + "integrity": "sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.25.0.tgz", + "integrity": "sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.25.0.tgz", + "integrity": "sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.25.0.tgz", + "integrity": "sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.25.0.tgz", + "integrity": "sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.25.0.tgz", + "integrity": "sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.25.0.tgz", + "integrity": "sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.25.0.tgz", + "integrity": "sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, "node_modules/@vitejs/plugin-vue": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.1.0.tgz", - "integrity": "sha512-++9JOAFdcXI3lyer9UKUV4rfoQ3T1RN8yDqoCLar86s0xQct5yblxAE+yWgRnU5/0FOlVCpTZpYSBV/bGWrSrQ==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.5.tgz", + "integrity": "sha512-dlnib73G05CDBAUR/YpuZcQQ47fpjihnnNouAAqN62z+oqSsWJ+kh52GRzIxpkgFG3q11eXK7Di7RMmoCwISZA==", "dev": true, + "license": "MIT", "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "peerDependencies": { - "vite": "^4.0.0", + "vite": "^5.0.0", "vue": "^3.2.25" } }, @@ -414,22 +755,66 @@ } }, "node_modules/@vue/compiler-sfc": { - "version": "3.2.47", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", - "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz", + "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.47", - "@vue/compiler-dom": "3.2.47", - "@vue/compiler-ssr": "3.2.47", - "@vue/reactivity-transform": "3.2.47", - "@vue/shared": "3.2.47", + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.12", + "@vue/compiler-dom": "3.5.12", + "@vue/compiler-ssr": "3.5.12", + "@vue/shared": "3.5.12", "estree-walker": "^2.0.2", - "magic-string": "^0.25.7", - "postcss": "^8.1.10", - "source-map": "^0.6.1" + "magic-string": "^0.30.11", + "postcss": "^8.4.47", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-core": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz", + "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.12", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" } }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-dom": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz", + "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.12", + "@vue/shared": "3.5.12" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/compiler-ssr": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz", + "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.12", + "@vue/shared": "3.5.12" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/@vue/shared": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz", + "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==", + "dev": true, + "license": "MIT" + }, "node_modules/@vue/compiler-ssr": { "version": "3.2.47", "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.47.tgz", @@ -440,9 +825,10 @@ } }, "node_modules/@vue/devtools-api": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", - "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" }, "node_modules/@vue/reactivity": { "version": "3.2.47", @@ -456,6 +842,7 @@ "version": "3.2.47", "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.47.tgz", "integrity": "sha512-m8lGXw8rdnPVVIdIFhf0LeQ/ixyHkH5plYuS83yop5n7ggVJU+z5v0zecwEnX7fa7HNLBhh2qngJJkxpwEEmYA==", + "license": "MIT", "dependencies": { "@babel/parser": "^7.16.4", "@vue/compiler-core": "3.2.47", @@ -464,6 +851,15 @@ "magic-string": "^0.25.7" } }, + "node_modules/@vue/reactivity-transform/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, "node_modules/@vue/runtime-core": { "version": "3.2.47", "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.47.tgz", @@ -505,12 +901,26 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/esbuild": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.14.tgz", - "integrity": "sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -518,28 +928,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.17.14", - "@esbuild/android-arm64": "0.17.14", - "@esbuild/android-x64": "0.17.14", - "@esbuild/darwin-arm64": "0.17.14", - "@esbuild/darwin-x64": "0.17.14", - "@esbuild/freebsd-arm64": "0.17.14", - "@esbuild/freebsd-x64": "0.17.14", - "@esbuild/linux-arm": "0.17.14", - "@esbuild/linux-arm64": "0.17.14", - "@esbuild/linux-ia32": "0.17.14", - "@esbuild/linux-loong64": "0.17.14", - "@esbuild/linux-mips64el": "0.17.14", - "@esbuild/linux-ppc64": "0.17.14", - "@esbuild/linux-riscv64": "0.17.14", - "@esbuild/linux-s390x": "0.17.14", - "@esbuild/linux-x64": "0.17.14", - "@esbuild/netbsd-x64": "0.17.14", - "@esbuild/openbsd-x64": "0.17.14", - "@esbuild/sunos-x64": "0.17.14", - "@esbuild/win32-arm64": "0.17.14", - "@esbuild/win32-ia32": "0.17.14", - "@esbuild/win32-x64": "0.17.14" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/estree-walker": { @@ -548,11 +959,12 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -561,54 +973,27 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "dev": true, + "license": "MIT", "dependencies": { - "sourcemap-codec": "^1.4.8" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -616,21 +1001,16 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "version": "8.4.48", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.48.tgz", + "integrity": "sha512-GCRK8F6+Dl7xYniR5a4FYbpBzU8XnZVeowqsQFYdcXuSbChgiks7qybSkbvnaeqv0G0B+dd9/jJgH8kkLDQeEA==", "funding": [ { "type": "opencollective", @@ -639,47 +1019,57 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "node_modules/rollup": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.25.0.tgz", + "integrity": "sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "@types/estree": "1.0.6" }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup": { - "version": "3.20.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.2.tgz", - "integrity": "sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==", - "dev": true, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.25.0", + "@rollup/rollup-android-arm64": "4.25.0", + "@rollup/rollup-darwin-arm64": "4.25.0", + "@rollup/rollup-darwin-x64": "4.25.0", + "@rollup/rollup-freebsd-arm64": "4.25.0", + "@rollup/rollup-freebsd-x64": "4.25.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.25.0", + "@rollup/rollup-linux-arm-musleabihf": "4.25.0", + "@rollup/rollup-linux-arm64-gnu": "4.25.0", + "@rollup/rollup-linux-arm64-musl": "4.25.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.25.0", + "@rollup/rollup-linux-riscv64-gnu": "4.25.0", + "@rollup/rollup-linux-s390x-gnu": "4.25.0", + "@rollup/rollup-linux-x64-gnu": "4.25.0", + "@rollup/rollup-linux-x64-musl": "4.25.0", + "@rollup/rollup-win32-arm64-msvc": "4.25.0", + "@rollup/rollup-win32-ia32-msvc": "4.25.0", + "@rollup/rollup-win32-x64-msvc": "4.25.0", "fsevents": "~2.3.2" } }, @@ -692,9 +1082,10 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -703,44 +1094,38 @@ "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead" - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "license": "MIT" }, "node_modules/vite": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.1.tgz", - "integrity": "sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==", + "version": "5.4.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", + "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", "dev": true, + "license": "MIT", "dependencies": { - "esbuild": "^0.17.5", - "postcss": "^8.4.21", - "resolve": "^1.22.1", - "rollup": "^3.18.0" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", + "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -752,9 +1137,15 @@ "less": { "optional": true }, + "lightningcss": { + "optional": true + }, "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -779,11 +1170,12 @@ } }, "node_modules/vue-router": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz", - "integrity": "sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.5.tgz", + "integrity": "sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==", + "license": "MIT", "dependencies": { - "@vue/devtools-api": "^6.4.5" + "@vue/devtools-api": "^6.6.4" }, "funding": { "url": "https://github.com/sponsors/posva" @@ -791,172 +1183,366 @@ "peerDependencies": { "vue": "^3.2.0" } + }, + "node_modules/vue/node_modules/@vue/compiler-sfc": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", + "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-ssr": "3.2.47", + "@vue/reactivity-transform": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/vue/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } } }, "dependencies": { + "@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==" + }, + "@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==" + }, "@babel/parser": { - "version": "7.16.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.6.tgz", - "integrity": "sha512-Gr86ujcNuPDnNOY8mi383Hvi8IYrJVJYuf3XcuBM/Dgd+bINn/7tHqsj+tKkoreMbmGsFLsltI/JJd8fOFWGDQ==" + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "requires": { + "@babel/types": "^7.26.0" + } + }, + "@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "requires": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + } + }, + "@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "dev": true, + "optional": true }, "@esbuild/android-arm": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.14.tgz", - "integrity": "sha512-0CnlwnjDU8cks0yJLXfkaU/uoLyRf9VZJs4p1PskBr2AlAHeEsFEwJEo0of/Z3g+ilw5mpyDwThlxzNEIxOE4g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "dev": true, "optional": true }, "@esbuild/android-arm64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.14.tgz", - "integrity": "sha512-eLOpPO1RvtsP71afiFTvS7tVFShJBCT0txiv/xjFBo5a7R7Gjw7X0IgIaFoLKhqXYAXhahoXm7qAmRXhY4guJg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "dev": true, "optional": true }, "@esbuild/android-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.14.tgz", - "integrity": "sha512-nrfQYWBfLGfSGLvRVlt6xi63B5IbfHm3tZCdu/82zuFPQ7zez4XjmRtF/wIRYbJQ/DsZrxJdEvYFE67avYXyng==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "dev": true, "optional": true }, "@esbuild/darwin-arm64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.14.tgz", - "integrity": "sha512-eoSjEuDsU1ROwgBH/c+fZzuSyJUVXQTOIN9xuLs9dE/9HbV/A5IqdXHU1p2OfIMwBwOYJ9SFVGGldxeRCUJFyw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "dev": true, "optional": true }, "@esbuild/darwin-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.14.tgz", - "integrity": "sha512-zN0U8RWfrDttdFNkHqFYZtOH8hdi22z0pFm0aIJPsNC4QQZv7je8DWCX5iA4Zx6tRhS0CCc0XC2m7wKsbWEo5g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "dev": true, "optional": true }, "@esbuild/freebsd-arm64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.14.tgz", - "integrity": "sha512-z0VcD4ibeZWVQCW1O7szaLxGsx54gcCnajEJMdYoYjLiq4g1jrP2lMq6pk71dbS5+7op/L2Aod+erw+EUr28/A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "dev": true, "optional": true }, "@esbuild/freebsd-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.14.tgz", - "integrity": "sha512-hd9mPcxfTgJlolrPlcXkQk9BMwNBvNBsVaUe5eNUqXut6weDQH8whcNaKNF2RO8NbpT6GY8rHOK2A9y++s+ehw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "dev": true, "optional": true }, "@esbuild/linux-arm": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.14.tgz", - "integrity": "sha512-BNTl+wSJ1omsH8s3TkQmIIIQHwvwJrU9u1ggb9XU2KTVM4TmthRIVyxSp2qxROJHhZuW/r8fht46/QE8hU8Qvg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "dev": true, "optional": true }, "@esbuild/linux-arm64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.14.tgz", - "integrity": "sha512-FhAMNYOq3Iblcj9i+K0l1Fp/MHt+zBeRu/Qkf0LtrcFu3T45jcwB6A1iMsemQ42vR3GBhjNZJZTaCe3VFPbn9g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "dev": true, "optional": true }, "@esbuild/linux-ia32": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.14.tgz", - "integrity": "sha512-91OK/lQ5y2v7AsmnFT+0EyxdPTNhov3y2CWMdizyMfxSxRqHazXdzgBKtlmkU2KYIc+9ZK3Vwp2KyXogEATYxQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "dev": true, "optional": true }, "@esbuild/linux-loong64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.14.tgz", - "integrity": "sha512-vp15H+5NR6hubNgMluqqKza85HcGJgq7t6rMH7O3Y6ApiOWPkvW2AJfNojUQimfTp6OUrACUXfR4hmpcENXoMQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "dev": true, "optional": true }, "@esbuild/linux-mips64el": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.14.tgz", - "integrity": "sha512-90TOdFV7N+fgi6c2+GO9ochEkmm9kBAKnuD5e08GQMgMINOdOFHuYLPQ91RYVrnWwQ5683sJKuLi9l4SsbJ7Hg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "dev": true, "optional": true }, "@esbuild/linux-ppc64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.14.tgz", - "integrity": "sha512-NnBGeoqKkTugpBOBZZoktQQ1Yqb7aHKmHxsw43NddPB2YWLAlpb7THZIzsRsTr0Xw3nqiPxbA1H31ZMOG+VVPQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "dev": true, "optional": true }, "@esbuild/linux-riscv64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.14.tgz", - "integrity": "sha512-0qdlKScLXA8MGVy21JUKvMzCYWovctuP8KKqhtE5A6IVPq4onxXhSuhwDd2g5sRCzNDlDjitc5sX31BzDoL5Fw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "dev": true, "optional": true }, "@esbuild/linux-s390x": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.14.tgz", - "integrity": "sha512-Hdm2Jo1yaaOro4v3+6/zJk6ygCqIZuSDJHdHaf8nVH/tfOuoEX5Riv03Ka15LmQBYJObUTNS1UdyoMk0WUn9Ww==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "dev": true, "optional": true }, "@esbuild/linux-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.14.tgz", - "integrity": "sha512-8KHF17OstlK4DuzeF/KmSgzrTWQrkWj5boluiiq7kvJCiQVzUrmSkaBvcLB2UgHpKENO2i6BthPkmUhNDaJsVw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "dev": true, "optional": true }, "@esbuild/netbsd-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.14.tgz", - "integrity": "sha512-nVwpqvb3yyXztxIT2+VsxJhB5GCgzPdk1n0HHSnchRAcxqKO6ghXwHhJnr0j/B+5FSyEqSxF4q03rbA2fKXtUQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "dev": true, "optional": true }, "@esbuild/openbsd-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.14.tgz", - "integrity": "sha512-1RZ7uQQ9zcy/GSAJL1xPdN7NDdOOtNEGiJalg/MOzeakZeTrgH/DoCkbq7TaPDiPhWqnDF+4bnydxRqQD7il6g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "dev": true, "optional": true }, "@esbuild/sunos-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.14.tgz", - "integrity": "sha512-nqMjDsFwv7vp7msrwWRysnM38Sd44PKmW8EzV01YzDBTcTWUpczQg6mGao9VLicXSgW/iookNK6AxeogNVNDZA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "dev": true, "optional": true }, "@esbuild/win32-arm64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.14.tgz", - "integrity": "sha512-xrD0mccTKRBBIotrITV7WVQAwNJ5+1va6L0H9zN92v2yEdjfAN7864cUaZwJS7JPEs53bDTzKFbfqVlG2HhyKQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "dev": true, "optional": true }, "@esbuild/win32-ia32": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.14.tgz", - "integrity": "sha512-nXpkz9bbJrLLyUTYtRotSS3t5b+FOuljg8LgLdINWFs3FfqZMtbnBCZFUmBzQPyxqU87F8Av+3Nco/M3hEcu1w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "dev": true, "optional": true }, "@esbuild/win32-x64": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.14.tgz", - "integrity": "sha512-gPQmsi2DKTaEgG14hc3CHXHp62k8g6qr0Pas+I4lUxRMugGSATh/Bi8Dgusoz9IQ0IfdrvLpco6kujEIBoaogA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "dev": true, + "optional": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.25.0.tgz", + "integrity": "sha512-CC/ZqFZwlAIbU1wUPisHyV/XRc5RydFrNLtgl3dGYskdwPZdt4HERtKm50a/+DtTlKeCq9IXFEWR+P6blwjqBA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.25.0.tgz", + "integrity": "sha512-/Y76tmLGUJqVBXXCfVS8Q8FJqYGhgH4wl4qTA24E9v/IJM0XvJCGQVSW1QZ4J+VURO9h8YCa28sTFacZXwK7Rg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.25.0.tgz", + "integrity": "sha512-YVT6L3UrKTlC0FpCZd0MGA7NVdp7YNaEqkENbWQ7AOVOqd/7VzyHpgIpc1mIaxRAo1ZsJRH45fq8j4N63I/vvg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.25.0.tgz", + "integrity": "sha512-ZRL+gexs3+ZmmWmGKEU43Bdn67kWnMeWXLFhcVv5Un8FQcx38yulHBA7XR2+KQdYIOtD0yZDWBCudmfj6lQJoA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-arm64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.25.0.tgz", + "integrity": "sha512-xpEIXhiP27EAylEpreCozozsxWQ2TJbOLSivGfXhU4G1TBVEYtUPi2pOZBnvGXHyOdLAUUhPnJzH3ah5cqF01g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-x64": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.25.0.tgz", + "integrity": "sha512-sC5FsmZGlJv5dOcURrsnIK7ngc3Kirnx3as2XU9uER+zjfyqIjdcMVgzy4cOawhsssqzoAX19qmxgJ8a14Qrqw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.25.0.tgz", + "integrity": "sha512-uD/dbLSs1BEPzg564TpRAQ/YvTnCds2XxyOndAO8nJhaQcqQGFgv/DAVko/ZHap3boCvxnzYMa3mTkV/B/3SWA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.25.0.tgz", + "integrity": "sha512-ZVt/XkrDlQWegDWrwyC3l0OfAF7yeJUF4fq5RMS07YM72BlSfn2fQQ6lPyBNjt+YbczMguPiJoCfaQC2dnflpQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.25.0.tgz", + "integrity": "sha512-qboZ+T0gHAW2kkSDPHxu7quaFaaBlynODXpBVnPxUgvWYaE84xgCKAPEYE+fSMd3Zv5PyFZR+L0tCdYCMAtG0A==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.25.0.tgz", + "integrity": "sha512-ndWTSEmAaKr88dBuogGH2NZaxe7u2rDoArsejNslugHZ+r44NfWiwjzizVS1nUOHo+n1Z6qV3X60rqE/HlISgw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.25.0.tgz", + "integrity": "sha512-BVSQvVa2v5hKwJSy6X7W1fjDex6yZnNKy3Kx1JGimccHft6HV0THTwNtC2zawtNXKUu+S5CjXslilYdKBAadzA==", "dev": true, "optional": true }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.25.0.tgz", + "integrity": "sha512-G4hTREQrIdeV0PE2JruzI+vXdRnaK1pg64hemHq2v5fhv8C7WjVaeXc9P5i4Q5UC06d/L+zA0mszYIKl+wY8oA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.25.0.tgz", + "integrity": "sha512-9T/w0kQ+upxdkFL9zPVB6zy9vWW1deA3g8IauJxojN4bnz5FwSsUAD034KpXIVX5j5p/rn6XqumBMxfRkcHapQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.25.0.tgz", + "integrity": "sha512-ThcnU0EcMDn+J4B9LD++OgBYxZusuA7iemIIiz5yzEcFg04VZFzdFjuwPdlURmYPZw+fgVrFzj4CA64jSTG4Ig==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.25.0.tgz", + "integrity": "sha512-zx71aY2oQxGxAT1JShfhNG79PnjYhMC6voAjzpu/xmMjDnKNf6Nl/xv7YaB/9SIa9jDYf8RBPWEnjcdlhlv1rQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.25.0.tgz", + "integrity": "sha512-JT8tcjNocMs4CylWY/CxVLnv8e1lE7ff1fi6kbGocWwxDq9pj30IJ28Peb+Y8yiPNSF28oad42ApJB8oUkwGww==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.25.0.tgz", + "integrity": "sha512-dRLjLsO3dNOfSN6tjyVlG+Msm4IiZnGkuZ7G5NmpzwF9oOc582FZG05+UdfTbz5Jd4buK/wMb6UeHFhG18+OEg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.25.0.tgz", + "integrity": "sha512-/RqrIFtLB926frMhZD0a5oDa4eFIbyNEwLLloMTEjmqfwZWXywwVVOVmwTsuyhC9HKkVEZcOOi+KV4U9wmOdlg==", + "dev": true, + "optional": true + }, + "@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, "@vitejs/plugin-vue": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.1.0.tgz", - "integrity": "sha512-++9JOAFdcXI3lyer9UKUV4rfoQ3T1RN8yDqoCLar86s0xQct5yblxAE+yWgRnU5/0FOlVCpTZpYSBV/bGWrSrQ==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.5.tgz", + "integrity": "sha512-dlnib73G05CDBAUR/YpuZcQQ47fpjihnnNouAAqN62z+oqSsWJ+kh52GRzIxpkgFG3q11eXK7Di7RMmoCwISZA==", "dev": true, "requires": {} }, @@ -981,20 +1567,61 @@ } }, "@vue/compiler-sfc": { - "version": "3.2.47", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", - "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz", + "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==", + "dev": true, "requires": { - "@babel/parser": "^7.16.4", - "@vue/compiler-core": "3.2.47", - "@vue/compiler-dom": "3.2.47", - "@vue/compiler-ssr": "3.2.47", - "@vue/reactivity-transform": "3.2.47", - "@vue/shared": "3.2.47", + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.12", + "@vue/compiler-dom": "3.5.12", + "@vue/compiler-ssr": "3.5.12", + "@vue/shared": "3.5.12", "estree-walker": "^2.0.2", - "magic-string": "^0.25.7", - "postcss": "^8.1.10", - "source-map": "^0.6.1" + "magic-string": "^0.30.11", + "postcss": "^8.4.47", + "source-map-js": "^1.2.0" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz", + "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==", + "dev": true, + "requires": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.12", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "@vue/compiler-dom": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz", + "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==", + "dev": true, + "requires": { + "@vue/compiler-core": "3.5.12", + "@vue/shared": "3.5.12" + } + }, + "@vue/compiler-ssr": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz", + "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==", + "dev": true, + "requires": { + "@vue/compiler-dom": "3.5.12", + "@vue/shared": "3.5.12" + } + }, + "@vue/shared": { + "version": "3.5.12", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz", + "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==", + "dev": true + } } }, "@vue/compiler-ssr": { @@ -1007,9 +1634,9 @@ } }, "@vue/devtools-api": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz", - "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==" + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" }, "@vue/reactivity": { "version": "3.2.47", @@ -1029,6 +1656,16 @@ "@vue/shared": "3.2.47", "estree-walker": "^2.0.2", "magic-string": "^0.25.7" + }, + "dependencies": { + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + } } }, "@vue/runtime-core": { @@ -1069,34 +1706,41 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, "esbuild": { - "version": "0.17.14", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.14.tgz", - "integrity": "sha512-vOO5XhmVj/1XQR9NQ1UPq6qvMYL7QFJU57J5fKBKBKxp17uDt5PgxFDb4A2nEiXhr1qQs4x0F5+66hVVw4ruNw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "requires": { - "@esbuild/android-arm": "0.17.14", - "@esbuild/android-arm64": "0.17.14", - "@esbuild/android-x64": "0.17.14", - "@esbuild/darwin-arm64": "0.17.14", - "@esbuild/darwin-x64": "0.17.14", - "@esbuild/freebsd-arm64": "0.17.14", - "@esbuild/freebsd-x64": "0.17.14", - "@esbuild/linux-arm": "0.17.14", - "@esbuild/linux-arm64": "0.17.14", - "@esbuild/linux-ia32": "0.17.14", - "@esbuild/linux-loong64": "0.17.14", - "@esbuild/linux-mips64el": "0.17.14", - "@esbuild/linux-ppc64": "0.17.14", - "@esbuild/linux-riscv64": "0.17.14", - "@esbuild/linux-s390x": "0.17.14", - "@esbuild/linux-x64": "0.17.14", - "@esbuild/netbsd-x64": "0.17.14", - "@esbuild/openbsd-x64": "0.17.14", - "@esbuild/sunos-x64": "0.17.14", - "@esbuild/win32-arm64": "0.17.14", - "@esbuild/win32-ia32": "0.17.14", - "@esbuild/win32-x64": "0.17.14" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "estree-walker": { @@ -1105,87 +1749,66 @@ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" }, "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "optional": true }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "dev": true, "requires": { - "sourcemap-codec": "^1.4.8" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, + "version": "8.4.48", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.48.tgz", + "integrity": "sha512-GCRK8F6+Dl7xYniR5a4FYbpBzU8XnZVeowqsQFYdcXuSbChgiks7qybSkbvnaeqv0G0B+dd9/jJgH8kkLDQeEA==", "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" } }, "rollup": { - "version": "3.20.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.20.2.tgz", - "integrity": "sha512-3zwkBQl7Ai7MFYQE0y1MeQ15+9jsi7XxfrqwTb/9EK8D9C9+//EBR4M+CuA1KODRaNbFez/lWxA5vhEGZp4MUg==", + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.25.0.tgz", + "integrity": "sha512-uVbClXmR6wvx5R1M3Od4utyLUxrmOcEm3pAtMphn73Apq19PDtHpgZoEvqH2YnnaNUuvKmg2DgRd2Sqv+odyqg==", "dev": true, "requires": { + "@rollup/rollup-android-arm-eabi": "4.25.0", + "@rollup/rollup-android-arm64": "4.25.0", + "@rollup/rollup-darwin-arm64": "4.25.0", + "@rollup/rollup-darwin-x64": "4.25.0", + "@rollup/rollup-freebsd-arm64": "4.25.0", + "@rollup/rollup-freebsd-x64": "4.25.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.25.0", + "@rollup/rollup-linux-arm-musleabihf": "4.25.0", + "@rollup/rollup-linux-arm64-gnu": "4.25.0", + "@rollup/rollup-linux-arm64-musl": "4.25.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.25.0", + "@rollup/rollup-linux-riscv64-gnu": "4.25.0", + "@rollup/rollup-linux-s390x-gnu": "4.25.0", + "@rollup/rollup-linux-x64-gnu": "4.25.0", + "@rollup/rollup-linux-x64-musl": "4.25.0", + "@rollup/rollup-win32-arm64-msvc": "4.25.0", + "@rollup/rollup-win32-ia32-msvc": "4.25.0", + "@rollup/rollup-win32-x64-msvc": "4.25.0", + "@types/estree": "1.0.6", "fsevents": "~2.3.2" } }, @@ -1195,32 +1818,25 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" }, "sourcemap-codec": { "version": "1.4.8", "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, "vite": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.2.1.tgz", - "integrity": "sha512-7MKhqdy0ISo4wnvwtqZkjke6XN4taqQ2TBaTccLIpOKv7Vp2h4Y+NpmWCnGDeSvvn45KxvWgGyb0MkHvY1vgbg==", + "version": "5.4.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.10.tgz", + "integrity": "sha512-1hvaPshuPUtxeQ0hsVH3Mud0ZanOLwVTneA1EgbAM5LhaZEqyPWGRQ7BtaMvUrTDeEaC8pxtj6a6jku3x4z6SQ==", "dev": true, "requires": { - "esbuild": "^0.17.5", - "fsevents": "~2.3.2", - "postcss": "^8.4.21", - "resolve": "^1.22.1", - "rollup": "^3.18.0" + "esbuild": "^0.21.3", + "fsevents": "~2.3.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" } }, "vue": { @@ -1233,14 +1849,41 @@ "@vue/runtime-dom": "3.2.47", "@vue/server-renderer": "3.2.47", "@vue/shared": "3.2.47" + }, + "dependencies": { + "@vue/compiler-sfc": { + "version": "3.2.47", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.47.tgz", + "integrity": "sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.47", + "@vue/compiler-dom": "3.2.47", + "@vue/compiler-ssr": "3.2.47", + "@vue/reactivity-transform": "3.2.47", + "@vue/shared": "3.2.47", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + } } }, "vue-router": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.6.tgz", - "integrity": "sha512-DYWYwsG6xNPmLq/FmZn8Ip+qrhFEzA14EI12MsMgVxvHFDYvlr4NXpVF5hrRH1wVcDP8fGi5F4rxuJSl8/r+EQ==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.5.tgz", + "integrity": "sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==", "requires": { - "@vue/devtools-api": "^6.4.5" + "@vue/devtools-api": "^6.6.4" } } } diff --git a/examples/vue3/package.json b/examples/vue3/package.json index d7cc09b..ac3a673 100644 --- a/examples/vue3/package.json +++ b/examples/vue3/package.json @@ -8,11 +8,11 @@ }, "dependencies": { "vue": "^3.2.47", - "vue-router": "^4.4.3" + "vue-router": "^4.5.0" }, "devDependencies": { - "@vitejs/plugin-vue": "^5.1.2", - "@vue/compiler-sfc": "^3.4.38", - "vite": "^5.4.1" + "@vitejs/plugin-vue": "^5.2.1", + "@vue/compiler-sfc": "^3.5.13", + "vite": "^6.0.7" } } diff --git a/examples/vue3/src/App.vue b/examples/vue3/src/App.vue index 9d61968..09ca136 100644 --- a/examples/vue3/src/App.vue +++ b/examples/vue3/src/App.vue @@ -11,24 +11,24 @@ diff --git a/examples/vue3/src/auth.js b/examples/vue3/src/auth.js index 8e02c52..26692e1 100644 --- a/examples/vue3/src/auth.js +++ b/examples/vue3/src/auth.js @@ -1,20 +1,21 @@ -import { OIDCClient } from "../../../src/index"; +import { OIDCClient } from "../../../src/index" -const auth= new OIDCClient({ +const auth = new OIDCClient({ issuer: import.meta.env.VITE_OIDC_ISSUER, client_id: import.meta.env.VITE_OIDC_CLIENT_ID, - redirect_uri: 'http://localhost:3001/callback', - post_logout_redirect_uri: 'http://localhost:3001', + redirect_uri: "http://localhost:3001/callback", + post_logout_redirect_uri: "http://localhost:3001", autoSilentRenew: true, checkSession: true, - audience: 'http://exampleapp1-backend.com', + audience: "http://exampleapp1-backend.com", requestUserInfo: true, - scope: 'openid profile secure read:user write:user af:admin:secret admin af:user:test af:workflow:test', - silent_redirect_uri: 'http://localhost:3001/silent-renew.html' + scope: + "openid profile secure read:user write:user af:admin:secret admin af:user:test af:workflow:test", + silent_redirect_uri: "http://localhost:3001/silent-renew.html", }) -auth.on('silent_renew_error', console.error) -auth.on('session_change', console.debug) -auth.on('session_error', console.error) -auth.on('silent_renew_success', console.debug) +auth.on("silent_renew_error", console.error) +auth.on("session_change", console.debug) +auth.on("session_error", console.error) +auth.on("silent_renew_success", console.debug) export default auth diff --git a/examples/vue3/src/main.js b/examples/vue3/src/main.js index 9ad8e6f..6f5a590 100644 --- a/examples/vue3/src/main.js +++ b/examples/vue3/src/main.js @@ -1,12 +1,15 @@ -import {createApp} from 'vue' -import App from './App.vue' -import router from "./router.js"; -import auth from "./auth"; +import { createApp } from "vue" +import App from "./App.vue" +import auth from "./auth" +import router from "./router.js" const app = createApp(App) app.config.globalProperties.$auth = auth -auth.initialize().then( () => { -}).catch(console.error).finally(() => { - app.use(router) - app.mount('#app') -}) +auth + .initialize() + .then(() => {}) + .catch(console.error) + .finally(() => { + app.use(router) + app.mount("#app") + }) diff --git a/examples/vue3/src/router.js b/examples/vue3/src/router.js index f3e2602..c3b8dc2 100644 --- a/examples/vue3/src/router.js +++ b/examples/vue3/src/router.js @@ -1,78 +1,76 @@ -import * as VueRouter from 'vue-router' -import Home from './views/Home.vue' -import AuthCallback from './views/AuthCallback.vue' -import SilentRenew from "./views/SilentRenew.vue"; -import UserProfile from "./views/UserProfile.vue"; -import Secured from "./views/Secured.vue"; -import Public from "./views/Public.vue"; -import Unauthorized from "./views/Unauthorized.vue"; -import NotFound from "./views/NotFound.vue"; +import * as VueRouter from "vue-router" +import AuthCallback from "./views/AuthCallback.vue" +import Home from "./views/Home.vue" +import NotFound from "./views/NotFound.vue" +import Public from "./views/Public.vue" +import Secured from "./views/Secured.vue" +import SilentRenew from "./views/SilentRenew.vue" +import Unauthorized from "./views/Unauthorized.vue" +import UserProfile from "./views/UserProfile.vue" -import auth from "./auth.js"; +import auth from "./auth.js" const routes = [ { - path: '/', - name: 'Home', - component: Home + path: "/", + name: "Home", + component: Home, }, { - path: '/secured', + path: "/secured", meta: { - auth: 'secure' + auth: "secure", }, - name: 'SecuredPage', - component: Secured + name: "SecuredPage", + component: Secured, }, { - path: '/public', - name: 'PublicPage', - component: Public + path: "/public", + name: "PublicPage", + component: Public, }, { - path: '/me', - name: 'UserProfile', - component: UserProfile + path: "/me", + name: "UserProfile", + component: UserProfile, }, { - path: '/callback', - name: 'AuthCallback', - component: AuthCallback + path: "/callback", + name: "AuthCallback", + component: AuthCallback, }, { - path: '/silent-renew.html', - name: 'SilentRenew', - component: SilentRenew + path: "/silent-renew.html", + name: "SilentRenew", + component: SilentRenew, }, { - path: '/401', - name: 'Unauthorized', - component: Unauthorized + path: "/401", + name: "Unauthorized", + component: Unauthorized, }, { - path: '/:pathMatch(.*)*', - name: 'NotFound', - component: NotFound - } + path: "/:pathMatch(.*)*", + name: "NotFound", + component: NotFound, + }, ] const router = VueRouter.createRouter({ - history: VueRouter.createWebHistory('/'), + history: VueRouter.createWebHistory("/"), routes, }) -router.beforeEach( async (to, from, next) => { - if(to.meta.auth){ - if (await auth.isLoggedIn(true)){ +router.beforeEach(async (to, from, next) => { + if (to.meta.auth) { + if (await auth.isLoggedIn(true)) { const scopes = await auth.getScopes() - if(scopes.includes(to.meta.auth)){ + if (scopes.includes(to.meta.auth)) { return next() - }else{ - return next({ name: 'Unauthorized'}) } - }else { - return next({ name: 'Unauthorized'}) + return next({ name: "Unauthorized" }) } + return next({ name: "Unauthorized" }) } return next() }) diff --git a/examples/vue3/src/silent-renew.js b/examples/vue3/src/silent-renew.js index db697b3..b0d3faa 100644 --- a/examples/vue3/src/silent-renew.js +++ b/examples/vue3/src/silent-renew.js @@ -1,5 +1,5 @@ -import { OIDCClient } from '../../../src/index'; +import { OIDCClient } from "../../../src/index" new OIDCClient({ issuer: import.meta.env.VITE_OIDC_ISSUER, -}).loginCallback(); +}).loginCallback() diff --git a/examples/vue3/src/views/AuthCallback.vue b/examples/vue3/src/views/AuthCallback.vue index 254b5b6..1603990 100644 --- a/examples/vue3/src/views/AuthCallback.vue +++ b/examples/vue3/src/views/AuthCallback.vue @@ -7,15 +7,15 @@ export default { async mounted() { try { const localState = await this.$auth.loginCallback(window.location.href) - if (localState && localState.location) { + if (localState?.location) { window.location.replace(localState.location) } else { - this.$router.replace('/') + this.$router.replace("/") } } catch (e) { console.error(e) } - } + }, } diff --git a/examples/vue3/src/views/Home.vue b/examples/vue3/src/views/Home.vue index f9b7eb8..c3f25e4 100644 --- a/examples/vue3/src/views/Home.vue +++ b/examples/vue3/src/views/Home.vue @@ -6,8 +6,7 @@ diff --git a/examples/vue3/vite.config.js b/examples/vue3/vite.config.js index 446cb3a..da357e5 100644 --- a/examples/vue3/vite.config.js +++ b/examples/vue3/vite.config.js @@ -1,10 +1,10 @@ -import { defineConfig } from 'vite' -import vue from '@vitejs/plugin-vue' +import vue from "@vitejs/plugin-vue" +import { defineConfig } from "vite" // https://vitejs.dev/config/ export default defineConfig({ server: { - port: 3001 + port: 3001, }, - plugins: [vue()] + plugins: [vue()], }) diff --git a/jest.config.js b/jest.config.js index e21adfe..09e32f9 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,18 +1,11 @@ module.exports = { testEnvironment: "jsdom", - rootDir: './', - moduleFileExtensions: ['ts', 'js'], - coveragePathIgnorePatterns: [ - '/node_modules/', - './jest.config.js' - ], - reporters: [ - 'default' - ], - "watchPathIgnorePatterns": [ - "/node_modules/" - ], + rootDir: "./", + moduleFileExtensions: ["ts", "js"], + coveragePathIgnorePatterns: ["/node_modules/", "./jest.config.js"], + reporters: ["default"], + watchPathIgnorePatterns: ["/node_modules/"], setupFilesAfterEnv: ["/test/setup.tsx"], - coverageReporters: ['lcov', 'text', 'text-summary'], - preset: 'ts-jest', -}; + coverageReporters: ["lcov", "text", "text-summary"], + preset: "ts-jest", +} diff --git a/package.json b/package.json index 34c5e46..79ee9dc 100644 --- a/package.json +++ b/package.json @@ -10,16 +10,8 @@ "types": "./dist/types.d.ts", "jsdelivr": "./dist/oidc-client.min.js", "unpkg": "./dist/oidc-client.min.js", - "files": [ - "dist" - ], - "keywords": [ - "openid-connect", - "oidc", - "oidc client", - "oauth2", - "plusauth" - ], + "files": ["dist"], + "keywords": ["openid-connect", "oidc", "oidc client", "oauth2", "plusauth"], "repository": { "type": "git", "url": "https://github.com/PlusAuth/oidc-client-js" @@ -27,13 +19,13 @@ "bugs": { "url": "https://github.com/PlusAuth/oidc-client-js/issues" }, - "packageManager": "pnpm@9.7.1", + "packageManager": "pnpm@9.15.4", "scripts": { "test": "jest --forceExit", "test:coverage": "jest --coverage --forceExit", "build": "rollup -c", "docs": "typedoc --tsconfig tsconfig-doc.json src/index.ts", - "lint": "eslint . --ext .ts --fix --quiet", + "lint": "biome check --fix", "release": "cross-env GITHUB_TOKEN=$GITHUB_TOKEN release-it", "prepare": "husky install" }, @@ -41,45 +33,40 @@ "base64-js": "^1.5.1" }, "devDependencies": { - "@commitlint/cli": "^19.4.0", - "@commitlint/config-conventional": "^19.2.2", - "@microsoft/api-extractor": "^7.47.6", + "@biomejs/biome": "^1.9.4", + "@commitlint/cli": "^19.6.1", + "@commitlint/config-conventional": "^19.6.0", + "@microsoft/api-extractor": "^7.49.1", "@peculiar/webcrypto": "^1.5.0", - "@release-it/conventional-changelog": "^8.0.1", - "@rollup/plugin-commonjs": "^26.0.1", + "@release-it/conventional-changelog": "^10.0.0", + "@rollup/plugin-commonjs": "^28.0.2", "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^15.2.3", - "@swc/core": "^1.7.14", + "@rollup/plugin-node-resolve": "^16.0.0", + "@swc/core": "^1.10.7", "@types/base64-js": "^1.3.2", - "@types/jest": "^29.5.12", - "@types/jsonwebtoken": "^9.0.6", - "@typescript-eslint/eslint-plugin": "~7.18.0", - "@typescript-eslint/parser": "~7.18.0", + "@types/jest": "^29.5.14", + "@types/jsonwebtoken": "^9.0.7", + "@types/node": "^22.10.7", "cross-env": "^7.0.3", - "eslint": "8.57.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-typescript-sort-keys": "^3.2.0", - "husky": "^9.1.4", + "husky": "^9.1.7", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "jsonwebtoken": "^9.0.2", - "lint-staged": "^15.2.9", + "lint-staged": "^15.4.1", "pem": "^1.14.8", - "release-it": "^17.6.0", - "rollup": "^4.21.0", + "release-it": "^18.1.1", + "rollup": "^4.30.1", "rollup-plugin-cleanup": "^3.2.1", "rollup-plugin-dts": "^6.1.1", - "rollup-plugin-swc3": "^0.11.2", - "ts-jest": "^29.2.4", - "typedoc": "^0.26.6", - "typescript": "^5.5.4", - "vite": "^5.4.1", + "rollup-plugin-swc3": "^0.12.1", + "ts-jest": "^29.2.5", + "typedoc": "^0.27.6", + "typescript": "^5.7.3", + "vite": "^6.0.7", "whatwg-fetch": "^3.6.20" }, "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ], + "extends": ["@commitlint/config-conventional"], "rules": { "type-enum": [ 2, @@ -99,18 +86,12 @@ "types" ] ], - "header-max-length": [ - 0, - "always", - 100 - ], - "scope-case": [ - 0 - ] + "header-max-length": [0, "always", 100], + "scope-case": [0] } }, "lint-staged": { - "*.ts": "eslint --fix" + "*": "biome check --fix --diagnostic-level=error --no-errors-on-unmatched --files-ignore-unknown=true --colors=off" }, "publishConfig": { "registry": "https://registry.npmjs.org/", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 32548dc..7af3a04 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,66 +12,57 @@ importers: specifier: ^1.5.1 version: 1.5.1 devDependencies: + '@biomejs/biome': + specifier: ^1.9.4 + version: 1.9.4 '@commitlint/cli': - specifier: ^19.4.0 - version: 19.4.0(@types/node@20.5.9)(typescript@5.5.4) + specifier: ^19.6.1 + version: 19.6.1(@types/node@22.10.7)(typescript@5.7.3) '@commitlint/config-conventional': - specifier: ^19.2.2 - version: 19.2.2 + specifier: ^19.6.0 + version: 19.6.0 '@microsoft/api-extractor': - specifier: ^7.47.6 - version: 7.47.6(@types/node@20.5.9) + specifier: ^7.49.1 + version: 7.49.1(@types/node@22.10.7) '@peculiar/webcrypto': specifier: ^1.5.0 version: 1.5.0 '@release-it/conventional-changelog': - specifier: ^8.0.1 - version: 8.0.1(release-it@17.6.0(typescript@5.5.4)) + specifier: ^10.0.0 + version: 10.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)(release-it@18.1.1(@types/node@22.10.7)(typescript@5.7.3)) '@rollup/plugin-commonjs': - specifier: ^26.0.1 - version: 26.0.1(rollup@4.21.0) + specifier: ^28.0.2 + version: 28.0.2(rollup@4.30.1) '@rollup/plugin-json': specifier: ^6.1.0 - version: 6.1.0(rollup@4.21.0) + version: 6.1.0(rollup@4.30.1) '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.21.0) + specifier: ^16.0.0 + version: 16.0.0(rollup@4.30.1) '@swc/core': - specifier: ^1.7.14 - version: 1.7.14 + specifier: ^1.10.7 + version: 1.10.7 '@types/base64-js': specifier: ^1.3.2 version: 1.3.2 '@types/jest': - specifier: ^29.5.12 - version: 29.5.12 + specifier: ^29.5.14 + version: 29.5.14 '@types/jsonwebtoken': - specifier: ^9.0.6 - version: 9.0.6 - '@typescript-eslint/eslint-plugin': - specifier: ~7.18.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/parser': - specifier: ~7.18.0 - version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) + specifier: ^9.0.7 + version: 9.0.7 + '@types/node': + specifier: ^22.10.7 + version: 22.10.7 cross-env: specifier: ^7.0.3 version: 7.0.3 - eslint: - specifier: 8.57.0 - version: 8.57.0 - eslint-plugin-import: - specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0) - eslint-plugin-typescript-sort-keys: - specifier: ^3.2.0 - version: 3.2.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) husky: - specifier: ^9.1.4 - version: 9.1.4 + specifier: ^9.1.7 + version: 9.1.7 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.5.9) + version: 29.7.0(@types/node@22.10.7) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 @@ -79,48 +70,44 @@ importers: specifier: ^9.0.2 version: 9.0.2 lint-staged: - specifier: ^15.2.9 - version: 15.2.9 + specifier: ^15.4.1 + version: 15.4.1 pem: specifier: ^1.14.8 version: 1.14.8 release-it: - specifier: ^17.6.0 - version: 17.6.0(typescript@5.5.4) + specifier: ^18.1.1 + version: 18.1.1(@types/node@22.10.7)(typescript@5.7.3) rollup: - specifier: ^4.21.0 - version: 4.21.0 + specifier: ^4.30.1 + version: 4.30.1 rollup-plugin-cleanup: specifier: ^3.2.1 - version: 3.2.1(rollup@4.21.0) + version: 3.2.1(rollup@4.30.1) rollup-plugin-dts: specifier: ^6.1.1 - version: 6.1.1(rollup@4.21.0)(typescript@5.5.4) + version: 6.1.1(rollup@4.30.1)(typescript@5.7.3) rollup-plugin-swc3: - specifier: ^0.11.2 - version: 0.11.2(@swc/core@1.7.14)(rollup@4.21.0) + specifier: ^0.12.1 + version: 0.12.1(@swc/core@1.10.7)(rollup@4.30.1) ts-jest: - specifier: ^29.2.4 - version: 29.2.4(@babel/core@7.22.15)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.22.15))(jest@29.7.0(@types/node@20.5.9))(typescript@5.5.4) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.22.15)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.22.15))(jest@29.7.0(@types/node@22.10.7))(typescript@5.7.3) typedoc: - specifier: ^0.26.6 - version: 0.26.6(typescript@5.5.4) + specifier: ^0.27.6 + version: 0.27.6(typescript@5.7.3) typescript: - specifier: ^5.5.4 - version: 5.5.4 + specifier: ^5.7.3 + version: 5.7.3 vite: - specifier: ^5.4.1 - version: 5.4.1(@types/node@20.5.9) + specifier: ^6.0.7 + version: 6.0.7(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0) whatwg-fetch: specifier: ^3.6.20 version: 3.6.20 packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - '@ampproject/remapping@2.2.1': resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -304,265 +291,385 @@ packages: '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@commitlint/cli@19.4.0': - resolution: {integrity: sha512-sJX4J9UioVwZHq7JWM9tjT5bgWYaIN3rC4FP7YwfEwBYiIO+wMyRttRvQLNkow0vCdM0D67r9NEWU0Ui03I4Eg==} + '@biomejs/biome@1.9.4': + resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@1.9.4': + resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@1.9.4': + resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@1.9.4': + resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@1.9.4': + resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@1.9.4': + resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@1.9.4': + resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@1.9.4': + resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@1.9.4': + resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@commitlint/cli@19.6.1': + resolution: {integrity: sha512-8hcyA6ZoHwWXC76BoC8qVOSr8xHy00LZhZpauiD0iO0VYbVhMnED0da85lTfIULxl7Lj4c6vZgF0Wu/ed1+jlQ==} engines: {node: '>=v18'} hasBin: true - '@commitlint/config-conventional@19.2.2': - resolution: {integrity: sha512-mLXjsxUVLYEGgzbxbxicGPggDuyWNkf25Ht23owXIH+zV2pv1eJuzLK3t1gDY5Gp6pxdE60jZnWUY5cvgL3ufw==} + '@commitlint/config-conventional@19.6.0': + resolution: {integrity: sha512-DJT40iMnTYtBtUfw9ApbsLZFke1zKh6llITVJ+x9mtpHD08gsNXaIRqHTmwTZL3dNX5+WoyK7pCN/5zswvkBCQ==} engines: {node: '>=v18'} - '@commitlint/config-validator@19.0.3': - resolution: {integrity: sha512-2D3r4PKjoo59zBc2auodrSCaUnCSALCx54yveOFwwP/i2kfEAQrygwOleFWswLqK0UL/F9r07MFi5ev2ohyM4Q==} + '@commitlint/config-validator@19.5.0': + resolution: {integrity: sha512-CHtj92H5rdhKt17RmgALhfQt95VayrUo2tSqY9g2w+laAXyk7K/Ef6uPm9tn5qSIwSmrLjKaXK9eiNuxmQrDBw==} engines: {node: '>=v18'} - '@commitlint/ensure@19.0.3': - resolution: {integrity: sha512-SZEpa/VvBLoT+EFZVb91YWbmaZ/9rPH3ESrINOl0HD2kMYsjvl0tF7nMHh0EpTcv4+gTtZBAe1y/SS6/OhfZzQ==} + '@commitlint/ensure@19.5.0': + resolution: {integrity: sha512-Kv0pYZeMrdg48bHFEU5KKcccRfKmISSm9MvgIgkpI6m+ohFTB55qZlBW6eYqh/XDfRuIO0x4zSmvBjmOwWTwkg==} engines: {node: '>=v18'} - '@commitlint/execute-rule@19.0.0': - resolution: {integrity: sha512-mtsdpY1qyWgAO/iOK0L6gSGeR7GFcdW7tIjcNFxcWkfLDF5qVbPHKuGATFqRMsxcO8OUKNj0+3WOHB7EHm4Jdw==} + '@commitlint/execute-rule@19.5.0': + resolution: {integrity: sha512-aqyGgytXhl2ejlk+/rfgtwpPexYyri4t8/n4ku6rRJoRhGZpLFMqrZ+YaubeGysCP6oz4mMA34YSTaSOKEeNrg==} engines: {node: '>=v18'} - '@commitlint/format@19.3.0': - resolution: {integrity: sha512-luguk5/aF68HiF4H23ACAfk8qS8AHxl4LLN5oxPc24H+2+JRPsNr1OS3Gaea0CrH7PKhArBMKBz5RX9sA5NtTg==} + '@commitlint/format@19.5.0': + resolution: {integrity: sha512-yNy088miE52stCI3dhG/vvxFo9e4jFkU1Mj3xECfzp/bIS/JUay4491huAlVcffOoMK1cd296q0W92NlER6r3A==} engines: {node: '>=v18'} - '@commitlint/is-ignored@19.2.2': - resolution: {integrity: sha512-eNX54oXMVxncORywF4ZPFtJoBm3Tvp111tg1xf4zWXGfhBPKpfKG6R+G3G4v5CPlRROXpAOpQ3HMhA9n1Tck1g==} + '@commitlint/is-ignored@19.6.0': + resolution: {integrity: sha512-Ov6iBgxJQFR9koOupDPHvcHU9keFupDgtB3lObdEZDroiG4jj1rzky60fbQozFKVYRTUdrBGICHG0YVmRuAJmw==} engines: {node: '>=v18'} - '@commitlint/lint@19.2.2': - resolution: {integrity: sha512-xrzMmz4JqwGyKQKTpFzlN0dx0TAiT7Ran1fqEBgEmEj+PU98crOFtysJgY+QdeSagx6EDRigQIXJVnfrI0ratA==} + '@commitlint/lint@19.6.0': + resolution: {integrity: sha512-LRo7zDkXtcIrpco9RnfhOKeg8PAnE3oDDoalnrVU/EVaKHYBWYL1DlRR7+3AWn0JiBqD8yKOfetVxJGdEtZ0tg==} engines: {node: '>=v18'} - '@commitlint/load@19.4.0': - resolution: {integrity: sha512-I4lCWaEZYQJ1y+Y+gdvbGAx9pYPavqZAZ3/7/8BpWh+QjscAn8AjsUpLV2PycBsEx7gupq5gM4BViV9xwTIJuw==} + '@commitlint/load@19.6.1': + resolution: {integrity: sha512-kE4mRKWWNju2QpsCWt428XBvUH55OET2N4QKQ0bF85qS/XbsRGG1MiTByDNlEVpEPceMkDr46LNH95DtRwcsfA==} engines: {node: '>=v18'} - '@commitlint/message@19.0.0': - resolution: {integrity: sha512-c9czf6lU+9oF9gVVa2lmKaOARJvt4soRsVmbR7Njwp9FpbBgste5i7l/2l5o8MmbwGh4yE1snfnsy2qyA2r/Fw==} + '@commitlint/message@19.5.0': + resolution: {integrity: sha512-R7AM4YnbxN1Joj1tMfCyBryOC5aNJBdxadTZkuqtWi3Xj0kMdutq16XQwuoGbIzL2Pk62TALV1fZDCv36+JhTQ==} engines: {node: '>=v18'} - '@commitlint/parse@19.0.3': - resolution: {integrity: sha512-Il+tNyOb8VDxN3P6XoBBwWJtKKGzHlitEuXA5BP6ir/3loWlsSqDr5aecl6hZcC/spjq4pHqNh0qPlfeWu38QA==} + '@commitlint/parse@19.5.0': + resolution: {integrity: sha512-cZ/IxfAlfWYhAQV0TwcbdR1Oc0/r0Ik1GEessDJ3Lbuma/MRO8FRQX76eurcXtmhJC//rj52ZSZuXUg0oIX0Fw==} engines: {node: '>=v18'} - '@commitlint/read@19.4.0': - resolution: {integrity: sha512-r95jLOEZzKDakXtnQub+zR3xjdnrl2XzerPwm7ch1/cc5JGq04tyaNpa6ty0CRCWdVrk4CZHhqHozb8yZwy2+g==} + '@commitlint/read@19.5.0': + resolution: {integrity: sha512-TjS3HLPsLsxFPQj6jou8/CZFAmOP2y+6V4PGYt3ihbQKTY1Jnv0QG28WRKl/d1ha6zLODPZqsxLEov52dhR9BQ==} engines: {node: '>=v18'} - '@commitlint/resolve-extends@19.1.0': - resolution: {integrity: sha512-z2riI+8G3CET5CPgXJPlzftH+RiWYLMYv4C9tSLdLXdr6pBNimSKukYP9MS27ejmscqCTVA4almdLh0ODD2KYg==} + '@commitlint/resolve-extends@19.5.0': + resolution: {integrity: sha512-CU/GscZhCUsJwcKTJS9Ndh3AKGZTNFIOoQB2n8CmFnizE0VnEuJoum+COW+C1lNABEeqk6ssfc1Kkalm4bDklA==} engines: {node: '>=v18'} - '@commitlint/rules@19.0.3': - resolution: {integrity: sha512-TspKb9VB6svklxNCKKwxhELn7qhtY1rFF8ls58DcFd0F97XoG07xugPjjbVnLqmMkRjZDbDIwBKt9bddOfLaPw==} + '@commitlint/rules@19.6.0': + resolution: {integrity: sha512-1f2reW7lbrI0X0ozZMesS/WZxgPa4/wi56vFuJENBmed6mWq5KsheN/nxqnl/C23ioxpPO/PL6tXpiiFy5Bhjw==} engines: {node: '>=v18'} - '@commitlint/to-lines@19.0.0': - resolution: {integrity: sha512-vkxWo+VQU5wFhiP9Ub9Sre0FYe019JxFikrALVoD5UGa8/t3yOJEpEhxC5xKiENKKhUkTpEItMTRAjHw2SCpZw==} + '@commitlint/to-lines@19.5.0': + resolution: {integrity: sha512-R772oj3NHPkodOSRZ9bBVNq224DOxQtNef5Pl8l2M8ZnkkzQfeSTr4uxawV2Sd3ui05dUVzvLNnzenDBO1KBeQ==} engines: {node: '>=v18'} - '@commitlint/top-level@19.0.0': - resolution: {integrity: sha512-KKjShd6u1aMGNkCkaX4aG1jOGdn7f8ZI8TR1VEuNqUOjWTOdcDSsmglinglJ18JTjuBX5I1PtjrhQCRcixRVFQ==} + '@commitlint/top-level@19.5.0': + resolution: {integrity: sha512-IP1YLmGAk0yWrImPRRc578I3dDUI5A2UBJx9FbSOjxe9sTlzFiwVJ+zeMLgAtHMtGZsC8LUnzmW1qRemkFU4ng==} engines: {node: '>=v18'} - '@commitlint/types@19.0.3': - resolution: {integrity: sha512-tpyc+7i6bPG9mvaBbtKUeghfyZSDgWquIDfMgqYtTbmZ9Y9VzEm2je9EYcQ0aoz5o7NvGS+rcDec93yO08MHYA==} + '@commitlint/types@19.5.0': + resolution: {integrity: sha512-DSHae2obMSMkAtTBSOulg5X7/z+rGLxcXQIkg3OmWvY6wifojge5uVMydfhUvs7yQj+V7jNmRZ2Xzl8GJyqRgg==} engines: {node: '>=v18'} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} + '@conventional-changelog/git-client@1.0.1': + resolution: {integrity: sha512-PJEqBwAleffCMETaVm/fUgHldzBE35JFk3/9LL6NUA5EXa3qednu+UT6M7E5iBu3zIQZCULYIiZ90fBYHt6xUw==} + engines: {node: '>=18'} + peerDependencies: + conventional-commits-filter: ^5.0.0 + conventional-commits-parser: ^6.0.0 + peerDependenciesMeta: + conventional-commits-filter: + optional: true + conventional-commits-parser: + optional: true + + '@dual-bundle/import-meta-resolve@4.1.0': + resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} + + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@fastify/deepmerge@2.0.1': + resolution: {integrity: sha512-hx+wJQr9Ph1hY/dyzY0SxqjumMyqZDlIF6oe71dpRKDHUg7dFQfjG94qqwQ274XRjmUrwKiYadex8XplNHx3CA==} + + '@gerrit0/mini-shiki@1.27.2': + resolution: {integrity: sha512-GeWyHz8ao2gBiUW4OJnQDxXQnFgZQwwQk05t/CVVgNBN7/rK8XZ7xY6YhLVv9tH3VppWWmr9DCl3MwemB/i+Og==} + + '@hutson/parse-repository-url@5.0.0': + resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==} + engines: {node: '>=10.13.0'} + + '@iarna/toml@2.2.5': + resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + + '@inquirer/checkbox@4.0.6': + resolution: {integrity: sha512-PgP35JfmGjHU0LSXOyRew0zHuA9N6OJwOlos1fZ20b7j8ISeAdib3L+n0jIxBtX958UeEpte6xhG/gxJ5iUqMw==} + engines: {node: '>=18'} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@types/node': '>=18' - '@eslint-community/regexpp@4.11.0': - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@inquirer/confirm@5.1.3': + resolution: {integrity: sha512-fuF9laMmHoOgWapF9h9hv6opA5WvmGFHsTYGCmuFxcghIhEhb3dN0CdQR4BUMqa2H506NCj8cGX4jwMsE4t6dA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + + '@inquirer/core@10.1.4': + resolution: {integrity: sha512-5y4/PUJVnRb4bwWY67KLdebWOhOc7xj5IP2J80oWXa64mVag24rwQ1VAdnj7/eDY/odhguW0zQ1Mp1pj6fO/2w==} + engines: {node: '>=18'} - '@eslint-community/regexpp@4.8.0': - resolution: {integrity: sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@inquirer/editor@4.2.3': + resolution: {integrity: sha512-S9KnIOJuTZpb9upeRSBBhoDZv7aSV3pG9TECrBj0f+ZsFwccz886hzKBrChGrXMJwd4NKY+pOA9Vy72uqnd6Eg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@inquirer/expand@4.0.6': + resolution: {integrity: sha512-TRTfi1mv1GeIZGyi9PQmvAaH65ZlG4/FACq6wSzs7Vvf1z5dnNWsAAXBjWMHt76l+1hUY8teIqJFrWBk5N6gsg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@inquirer/figures@1.0.9': + resolution: {integrity: sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==} + engines: {node: '>=18'} - '@fastify/deepmerge@1.3.0': - resolution: {integrity: sha512-J8TOSBq3SoZbDhM9+R/u77hP93gz/rajSA+K2kGyijPpORPWUXHUpTaleoj+92As0S9uPRP7Oi8IqMf0u+ro6A==} + '@inquirer/input@4.1.3': + resolution: {integrity: sha512-zeo++6f7hxaEe7OjtMzdGZPHiawsfmCZxWB9X1NpmYgbeoyerIbWemvlBxxl+sQIlHC0WuSAG19ibMq3gbhaqQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@inquirer/number@3.0.6': + resolution: {integrity: sha512-xO07lftUHk1rs1gR0KbqB+LJPhkUNkyzV/KhH+937hdkMazmAYHLm1OIrNKpPelppeV1FgWrgFDjdUD8mM+XUg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + '@inquirer/password@4.0.6': + resolution: {integrity: sha512-QLF0HmMpHZPPMp10WGXh6F+ZPvzWE7LX6rNoccdktv/Rov0B+0f+eyXkAcgqy5cH9V+WSpbLxu2lo3ysEVK91w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' - '@humanwhocodes/object-schema@2.0.2': - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - deprecated: Use @eslint/object-schema instead + '@inquirer/prompts@7.2.3': + resolution: {integrity: sha512-hzfnm3uOoDySDXfDNOm9usOuYIaQvTgKp/13l1uJoe6UNY+Zpcn2RYt0jXz3yA+yemGHvDOxVzqWl3S5sQq53Q==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' - '@hutson/parse-repository-url@5.0.0': - resolution: {integrity: sha512-e5+YUKENATs1JgYHMzTr2MW/NDcXGfYFAuOQU8gJgF/kEh4EqKgfGrfLI67bMD4tbhZVlkigz/9YYwWcbOFthg==} - engines: {node: '>=10.13.0'} + '@inquirer/rawlist@4.0.6': + resolution: {integrity: sha512-QoE4s1SsIPx27FO4L1b1mUjVcoHm1pWE/oCmm4z/Hl+V1Aw5IXl8FYYzGmfXaBT0l/sWr49XmNSiq7kg3Kd/Lg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' - '@iarna/toml@2.2.5': - resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + '@inquirer/search@3.0.6': + resolution: {integrity: sha512-eFZ2hiAq0bZcFPuFFBmZEtXU1EarHLigE+ENCtpO+37NHCl4+Yokq1P/d09kUblObaikwfo97w+0FtG/EXl5Ng==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' - '@inquirer/figures@1.0.5': - resolution: {integrity: sha512-79hP/VWdZ2UVc9bFGJnoQ/lQMpL74mGgzSYX1xUqCVk7/v73vJCMw1VuyWN1jGkZ9B3z7THAbySqGbCNefcjfA==} + '@inquirer/select@4.0.6': + resolution: {integrity: sha512-yANzIiNZ8fhMm4NORm+a74+KFYHmf7BZphSOBovIzYPVLquseTGEkU5l2UTnBOf5k0VLmTgPighNDLE9QtbViQ==} engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@inquirer/type@3.0.2': + resolution: {integrity: sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} @@ -589,10 +696,6 @@ packages: resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/expect-utils@29.6.4': - resolution: {integrity: sha512-FEhkJhqtvBwgSpiTrocquJCdXPsyvNKcl/n7A3u7X4pVoF4bswm11c9d4AV+kfq2Gpv/mM8x7E7DsRvH+djkrg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jest/expect-utils@29.7.0': resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -663,18 +766,18 @@ packages: '@jridgewell/trace-mapping@0.3.19': resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} - '@microsoft/api-extractor-model@7.29.5': - resolution: {integrity: sha512-axMwj4pgtYH6/IclP9ly33laSwTym1kBwSUcoHElc2LYAE5NNlhGT78ucEpIZtqEZaGgA8yxGXIyS17XCC2Iuw==} + '@microsoft/api-extractor-model@7.30.2': + resolution: {integrity: sha512-3/t2F+WhkJgBzSNwlkTIL0tBgUoBqDqL66pT+nh2mPbM0NIDGVGtpqbGWPgHIzn/mn7kGS/Ep8D8po58e8UUIw==} - '@microsoft/api-extractor@7.47.6': - resolution: {integrity: sha512-saI7n319+PdJ8PAePr14LWeIPOW2fHSr3KZfYFqJ2VUpIc1TTSh6ATFZfLPWI1LK7eZHun8+FpNsuxonyvxTgQ==} + '@microsoft/api-extractor@7.49.1': + resolution: {integrity: sha512-jRTR/XbQF2kb+dYn8hfYSicOGA99+Fo00GrsdMwdfE3eIgLtKdH6Qa2M3wZV9S2XmbgCaGX1OdPtYctbfu5jQg==} hasBin: true - '@microsoft/tsdoc-config@0.17.0': - resolution: {integrity: sha512-v/EYRXnCAIHxOHW+Plb6OWuUoMotxTN0GLatnpOb1xq0KuTNw/WI3pamJx/UbsoJP5k9MCw1QxvvhPcF9pH3Zg==} + '@microsoft/tsdoc-config@0.17.1': + resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==} - '@microsoft/tsdoc@0.15.0': - resolution: {integrity: sha512-HZpPoABogPvjeJOdzCOSJsXeL/SMCBgBZMVC3X3d7YYp2gf31MfxhUoYUNwf1ERPJOnQc0wkFn9trqI6ZEdZuA==} + '@microsoft/tsdoc@0.15.1': + resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -688,39 +791,39 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@octokit/auth-token@4.0.0': - resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} + '@octokit/auth-token@5.1.1': + resolution: {integrity: sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==} engines: {node: '>= 18'} - '@octokit/core@5.1.0': - resolution: {integrity: sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==} + '@octokit/core@6.1.3': + resolution: {integrity: sha512-z+j7DixNnfpdToYsOutStDgeRzJSMnbj8T1C/oQjB6Aa+kRfNjs/Fn7W6c8bmlt6mfy3FkgeKBRnDjxQow5dow==} engines: {node: '>= 18'} - '@octokit/endpoint@9.0.4': - resolution: {integrity: sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==} + '@octokit/endpoint@10.1.2': + resolution: {integrity: sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA==} engines: {node: '>= 18'} - '@octokit/graphql@7.0.2': - resolution: {integrity: sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==} + '@octokit/graphql@8.1.2': + resolution: {integrity: sha512-bdlj/CJVjpaz06NBpfHhp4kGJaRZfz7AzC+6EwUImRtrwIw8dIgJ63Xg0OzV9pRn3rIzrt5c2sa++BL0JJ8GLw==} engines: {node: '>= 18'} - '@octokit/openapi-types@20.0.0': - resolution: {integrity: sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==} - '@octokit/openapi-types@22.2.0': resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} + '@octokit/openapi-types@23.0.1': + resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} + '@octokit/plugin-paginate-rest@11.3.1': resolution: {integrity: sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==} engines: {node: '>= 18'} peerDependencies: '@octokit/core': '5' - '@octokit/plugin-request-log@4.0.1': - resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==} + '@octokit/plugin-request-log@5.3.1': + resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} engines: {node: '>= 18'} peerDependencies: - '@octokit/core': '5' + '@octokit/core': '>=6' '@octokit/plugin-rest-endpoint-methods@13.2.2': resolution: {integrity: sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==} @@ -728,24 +831,24 @@ packages: peerDependencies: '@octokit/core': ^5 - '@octokit/request-error@5.0.1': - resolution: {integrity: sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==} + '@octokit/request-error@6.1.6': + resolution: {integrity: sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg==} engines: {node: '>= 18'} - '@octokit/request@8.2.0': - resolution: {integrity: sha512-exPif6x5uwLqv1N1irkLG1zZNJkOtj8bZxuVHd71U5Ftuxf2wGNvAJyNBcPbPC+EBzwYEbBDdSFb8EPcjpYxPQ==} + '@octokit/request@9.2.0': + resolution: {integrity: sha512-kXLfcxhC4ozCnAXy2ff+cSxpcF0A1UqxjvYMqNuPIeOAzJbVWQ+dy5G2fTylofB/gTbObT8O6JORab+5XtA1Kw==} engines: {node: '>= 18'} - '@octokit/rest@20.1.1': - resolution: {integrity: sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==} + '@octokit/rest@21.0.2': + resolution: {integrity: sha512-+CiLisCoyWmYicH25y1cDfCrv41kRSvTq6pPWtRroRJzhsCZWZyCqGyI8foJT5LmScADSwRAnr/xo+eewL04wQ==} engines: {node: '>= 18'} - '@octokit/types@12.6.0': - resolution: {integrity: sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==} - '@octokit/types@13.5.0': resolution: {integrity: sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==} + '@octokit/types@13.7.0': + resolution: {integrity: sha512-BXfRP+3P3IN6fd4uF3SniaHKOO4UXWBfkdR3vA8mIvaoO/wLjGN5qivUtW0QRitBHHMcfC41SLhNVYIZZE+wkA==} + '@peculiar/asn1-schema@2.3.8': resolution: {integrity: sha512-ULB1XqHKx1WBU/tTFIA+uARuRoBVZ4pNdOA878RDrRbBfBGcSzi5HBkdScC6ZbHn8z7L8gmKCgPC1LHRrP46tA==} @@ -757,10 +860,6 @@ packages: resolution: {integrity: sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==} engines: {node: '>=10.12.0'} - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - '@pnpm/config.env-replace@1.1.0': resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} engines: {node: '>=12.22.0'} @@ -773,14 +872,14 @@ packages: resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} - '@release-it/conventional-changelog@8.0.1': - resolution: {integrity: sha512-pwc9jaBYDaSX5TXw6rEnPfqDkKJN2sFBhYpON1kBi9T3sA9EOBncC4ed0Bv3L1ciNb6eqEJXPfp+tQMqVlv/eg==} - engines: {node: '>=18'} + '@release-it/conventional-changelog@10.0.0': + resolution: {integrity: sha512-49qf9phGmPUIGpY2kwfgehs9en1znbPv2zdNn1WMLAH9DtHUh4m6KNSB+mLFGAMUhv24JhsA8ruYRYgluc2UJw==} + engines: {node: ^20.9.0 || >=22.0.0} peerDependencies: - release-it: ^17.0.0 + release-it: ^18.0.0 - '@rollup/plugin-commonjs@26.0.1': - resolution: {integrity: sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==} + '@rollup/plugin-commonjs@28.0.2': + resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -797,8 +896,8 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@15.2.3': - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + '@rollup/plugin-node-resolve@16.0.0': + resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -806,17 +905,17 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.0.4': - resolution: {integrity: sha512-0KJnIoRI8A+a1dqOYLxH8vBf8bphDmty5QvIm2hqm7oFCFYKCAZWWd2hXgMibaPsNDhI0AtpYfQZJG47pt/k4g==} + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 peerDependenciesMeta: rollup: optional: true - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -824,88 +923,103 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.21.0': - resolution: {integrity: sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==} + '@rollup/rollup-android-arm-eabi@4.30.1': + resolution: {integrity: sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.21.0': - resolution: {integrity: sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==} + '@rollup/rollup-android-arm64@4.30.1': + resolution: {integrity: sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.21.0': - resolution: {integrity: sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==} + '@rollup/rollup-darwin-arm64@4.30.1': + resolution: {integrity: sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.21.0': - resolution: {integrity: sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==} + '@rollup/rollup-darwin-x64@4.30.1': + resolution: {integrity: sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.21.0': - resolution: {integrity: sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==} + '@rollup/rollup-freebsd-arm64@4.30.1': + resolution: {integrity: sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.30.1': + resolution: {integrity: sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.30.1': + resolution: {integrity: sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.21.0': - resolution: {integrity: sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==} + '@rollup/rollup-linux-arm-musleabihf@4.30.1': + resolution: {integrity: sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.21.0': - resolution: {integrity: sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==} + '@rollup/rollup-linux-arm64-gnu@4.30.1': + resolution: {integrity: sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.21.0': - resolution: {integrity: sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==} + '@rollup/rollup-linux-arm64-musl@4.30.1': + resolution: {integrity: sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': - resolution: {integrity: sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==} + '@rollup/rollup-linux-loongarch64-gnu@4.30.1': + resolution: {integrity: sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.30.1': + resolution: {integrity: sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.21.0': - resolution: {integrity: sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==} + '@rollup/rollup-linux-riscv64-gnu@4.30.1': + resolution: {integrity: sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.21.0': - resolution: {integrity: sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==} + '@rollup/rollup-linux-s390x-gnu@4.30.1': + resolution: {integrity: sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.21.0': - resolution: {integrity: sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==} + '@rollup/rollup-linux-x64-gnu@4.30.1': + resolution: {integrity: sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.21.0': - resolution: {integrity: sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==} + '@rollup/rollup-linux-x64-musl@4.30.1': + resolution: {integrity: sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.21.0': - resolution: {integrity: sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==} + '@rollup/rollup-win32-arm64-msvc@4.30.1': + resolution: {integrity: sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.21.0': - resolution: {integrity: sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==} + '@rollup/rollup-win32-ia32-msvc@4.30.1': + resolution: {integrity: sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.21.0': - resolution: {integrity: sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==} + '@rollup/rollup-win32-x64-msvc@4.30.1': + resolution: {integrity: sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==} cpu: [x64] os: [win32] - '@rushstack/node-core-library@5.6.0': - resolution: {integrity: sha512-3ixIcEHseqU1sbnvoQkvxvfTYWbi1IIhnq/vexJcex7j6D8lnQCiYnd/E2oXbUH0Zv48CjtfslC/2MVFd71mpg==} + '@rushstack/node-core-library@5.10.2': + resolution: {integrity: sha512-xOF/2gVJZTfjTxbo4BDj9RtQq/HFnrrKdtem4JkyRLnwsRz2UDTg8gA1/et10fBx5RxmZD9bYVGST69W8ME5OQ==} peerDependencies: '@types/node': '*' peerDependenciesMeta: @@ -915,99 +1029,108 @@ packages: '@rushstack/rig-package@0.5.3': resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} - '@rushstack/terminal@0.13.4': - resolution: {integrity: sha512-h7g2RuffpqBCDKOijlUmvQ0b2O9kpIOK9TWCX9IR+2kvudp6MdtCYDu29zeqweWwCSWUnuAaUfB5HT88s0YCiw==} + '@rushstack/terminal@0.14.5': + resolution: {integrity: sha512-TEOpNwwmsZVrkp0omnuTUTGZRJKTr6n6m4OITiNjkqzLAkcazVpwR1SOtBg6uzpkIBLgrcNHETqI8rbw3uiUfw==} peerDependencies: '@types/node': '*' peerDependenciesMeta: '@types/node': optional: true - '@rushstack/ts-command-line@4.22.5': - resolution: {integrity: sha512-eFm+5DJboPHAy3epLNQtmG+hDlBzS950g26nZPbciMQeXmZ5shGGNe6ERjV77wnr5IuxfLhYGJ4ZjPy8Z56MBA==} + '@rushstack/ts-command-line@4.23.3': + resolution: {integrity: sha512-HazKL8fv4HMQMzrKJCrOrhyBPPdzk7iajUXgsASwjQ8ROo1cmgyqxt/k9+SdmrNLGE1zATgRqMUH3s/6smbRMA==} + + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@shikijs/engine-oniguruma@1.27.2': + resolution: {integrity: sha512-FZYKD1KN7srvpkz4lbGLOYWlyDU4Rd+2RtuKfABTkafAPOFr+J6umfIwY/TzOQqfNtWjL7SAwPAO0dcOraRLaQ==} - '@shikijs/core@1.14.1': - resolution: {integrity: sha512-KyHIIpKNaT20FtFPFjCQB5WVSTpLR/n+jQXhWHWVUMm9MaOaG9BGOG0MSyt7yA4+Lm+4c9rTc03tt3nYzeYSfw==} + '@shikijs/types@1.27.2': + resolution: {integrity: sha512-DM9OWUyjmdYdnKDpaGB/GEn9XkToyK1tqxuqbmc5PV+5K8WjjwfygL3+cIvbkSw2v1ySwHDgqATq/+98pJ4Kyg==} + + '@shikijs/vscode-textmate@10.0.1': + resolution: {integrity: sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==} '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@sindresorhus/is@5.6.0': - resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} - engines: {node: '>=14.16'} - '@sindresorhus/merge-streams@2.3.0': resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + '@sinonjs/commons@3.0.0': resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@swc/core-darwin-arm64@1.7.14': - resolution: {integrity: sha512-V0OUXjOH+hdGxDYG8NkQzy25mKOpcNKFpqtZEzLe5V/CpLJPnpg1+pMz70m14s9ZFda9OxsjlvPbg1FLUwhgIQ==} + '@swc/core-darwin-arm64@1.10.7': + resolution: {integrity: sha512-SI0OFg987P6hcyT0Dbng3YRISPS9uhLX1dzW4qRrfqQdb0i75lPJ2YWe9CN47HBazrIA5COuTzrD2Dc0TcVsSQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.7.14': - resolution: {integrity: sha512-9iFvUnxG6FC3An5ogp5jbBfQuUmTTwy8KMB+ZddUoPB3NR1eV+Y9vOh/tfWcenSJbgOKDLgYC5D/b1mHAprsrQ==} + '@swc/core-darwin-x64@1.10.7': + resolution: {integrity: sha512-RFIAmWVicD/l3RzxgHW0R/G1ya/6nyMspE2cAeDcTbjHi0I5qgdhBWd6ieXOaqwEwiCd0Mot1g2VZrLGoBLsjQ==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.7.14': - resolution: {integrity: sha512-zGJsef9qPivKSH8Vv4F/HiBXBTHZ5Hs3ZjVGo/UIdWPJF8fTL9OVADiRrl34Q7zOZEtGXRwEKLUW1SCQcbDvZA==} + '@swc/core-linux-arm-gnueabihf@1.10.7': + resolution: {integrity: sha512-QP8vz7yELWfop5mM5foN6KkLylVO7ZUgWSF2cA0owwIaziactB2hCPZY5QU690coJouk9KmdFsPWDnaCFUP8tg==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.7.14': - resolution: {integrity: sha512-AxV3MPsoI7i4B8FXOew3dx3N8y00YoJYvIPfxelw07RegeCEH3aHp2U2DtgbP/NV1ugZMx0TL2Z2DEvocmA51g==} + '@swc/core-linux-arm64-gnu@1.10.7': + resolution: {integrity: sha512-NgUDBGQcOeLNR+EOpmUvSDIP/F7i/OVOKxst4wOvT5FTxhnkWrW+StJGKj+DcUVSK5eWOYboSXr1y+Hlywwokw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.7.14': - resolution: {integrity: sha512-JDLdNjUj3zPehd4+DrQD8Ltb3B5lD8D05IwePyDWw+uR/YPc7w/TX1FUVci5h3giJnlMCJRvi1IQYV7K1n7KtQ==} + '@swc/core-linux-arm64-musl@1.10.7': + resolution: {integrity: sha512-gp5Un3EbeSThBIh6oac5ZArV/CsSmTKj5jNuuUAuEsML3VF9vqPO+25VuxCvsRf/z3py+xOWRaN2HY/rjMeZog==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.7.14': - resolution: {integrity: sha512-Siy5OvPCLLWmMdx4msnEs8HvEVUEigSn0+3pbLjv78iwzXd0qSBNHUPZyC1xeurVaUbpNDxZTpPRIwpqNE2+Og==} + '@swc/core-linux-x64-gnu@1.10.7': + resolution: {integrity: sha512-k/OxLLMl/edYqbZyUNg6/bqEHTXJT15l9WGqsl/2QaIGwWGvles8YjruQYQ9d4h/thSXLT9gd8bExU2D0N+bUA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.7.14': - resolution: {integrity: sha512-FtEGm9mwtRYQNK43WMtUIadxHs/ja2rnDurB99os0ZoFTGG2IHuht2zD97W0wB8JbqEabT1XwSG9Y5wmN+ciEQ==} + '@swc/core-linux-x64-musl@1.10.7': + resolution: {integrity: sha512-XeDoURdWt/ybYmXLCEE8aSiTOzEn0o3Dx5l9hgt0IZEmTts7HgHHVeRgzGXbR4yDo0MfRuX5nE1dYpTmCz0uyA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.7.14': - resolution: {integrity: sha512-Jp8KDlfq7Ntt2/BXr0y344cYgB1zf0DaLzDZ1ZJR6rYlAzWYSccLYcxHa97VGnsYhhPspMpmCvHid97oe2hl4A==} + '@swc/core-win32-arm64-msvc@1.10.7': + resolution: {integrity: sha512-nYAbi/uLS+CU0wFtBx8TquJw2uIMKBnl04LBmiVoFrsIhqSl+0MklaA9FVMGA35NcxSJfcm92Prl2W2LfSnTqQ==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.7.14': - resolution: {integrity: sha512-I+cFsXF0OU0J9J4zdWiQKKLURO5dvCujH9Jr8N0cErdy54l9d4gfIxdctfTF+7FyXtWKLTCkp+oby9BQhkFGWA==} + '@swc/core-win32-ia32-msvc@1.10.7': + resolution: {integrity: sha512-+aGAbsDsIxeLxw0IzyQLtvtAcI1ctlXVvVcXZMNXIXtTURM876yNrufRo4ngoXB3jnb1MLjIIjgXfFs/eZTUSw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.7.14': - resolution: {integrity: sha512-NNrprQCK6d28mG436jVo2TD+vACHseUECacEBGZ9Ef0qfOIWS1XIt2MisQKG0Oea2VvLFl6tF/V4Lnx/H0Sn3Q==} + '@swc/core-win32-x64-msvc@1.10.7': + resolution: {integrity: sha512-TBf4clpDBjF/UUnkKrT0/th76/zwvudk5wwobiTFqDywMApHip5O0VpBgZ+4raY2TM8k5+ujoy7bfHb22zu17Q==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.7.14': - resolution: {integrity: sha512-9aeXeifnyuvc2pcuuhPQgVUwdpGEzZ+9nJu0W8/hNl/aESFsJGR5i9uQJRGu0atoNr01gK092fvmqMmQAPcKow==} + '@swc/core@1.10.7': + resolution: {integrity: sha512-py91kjI1jV5D5W/Q+PurBdGsdU5TFbrzamP7zSCqLdMcHkKi3rQEM5jkQcZr0MXXSJTaayLxS3MWYTBIkzPDrg==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -1018,12 +1141,8 @@ packages: '@swc/counter@0.1.3': resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/types@0.1.12': - resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} - - '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} + '@swc/types@0.1.17': + resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==} '@tootallnate/once@2.0.0': resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} @@ -1059,15 +1178,15 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/graceful-fs@4.1.6': resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/http-cache-semantics@4.0.1': - resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} - '@types/istanbul-lib-coverage@2.0.4': resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} @@ -1077,32 +1196,29 @@ packages: '@types/istanbul-reports@3.0.1': resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} - '@types/jest@29.5.12': - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} '@types/jsdom@20.0.1': resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} - '@types/json-schema@7.0.12': - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + '@types/jsonwebtoken@9.0.7': + resolution: {integrity: sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg==} - '@types/jsonwebtoken@9.0.6': - resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==} + '@types/node@22.10.7': + resolution: {integrity: sha512-V09KvXxFiutGp6B7XkpaDXlNadZxrzajcY50EuoLIpQ6WWYCSvf19lVIazzfIzQvhUN2HjX12spLojTnhuKlGg==} - '@types/node@20.5.9': - resolution: {integrity: sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==} + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/normalize-package-data@2.4.1': - resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} + '@types/parse-path@7.0.3': + resolution: {integrity: sha512-LriObC2+KYZD3FzCrgWGv/qufdUy4eXrxcLgQMfYXgPbLIecKIsVBaQgUPmxSSLcjmYbDTQbMgr6qr6l/eb7Bg==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/semver@7.5.1': - resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} '@types/stack-utils@2.0.1': resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} @@ -1119,100 +1235,6 @@ packages: '@types/yargs@17.0.24': resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} - '@typescript-eslint/eslint-plugin@7.18.0': - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/experimental-utils@5.62.0': - resolution: {integrity: sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - - '@typescript-eslint/parser@7.18.0': - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/scope-manager@5.62.0': - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/scope-manager@7.18.0': - resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/type-utils@7.18.0': - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/types@7.18.0': - resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@typescript-eslint/typescript-estree@5.62.0': - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@7.18.0': - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/utils@5.62.0': - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - - '@typescript-eslint/utils@7.18.0': - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - - '@typescript-eslint/visitor-keys@5.62.0': - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - '@typescript-eslint/visitor-keys@7.18.0': - resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -1224,11 +1246,6 @@ packages: acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} @@ -1245,8 +1262,8 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} - agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} ajv-draft-04@1.0.0: @@ -1265,9 +1282,6 @@ packages: ajv: optional: true - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} @@ -1319,36 +1333,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} - asn1js@3.0.5: resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} engines: {node: '>=12.0.0'} @@ -1366,9 +1353,8 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} + atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} @@ -1405,15 +1391,12 @@ packages: resolution: {integrity: sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==} engines: {node: '>=10.0.0'} - before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + before-after-hook@3.0.2: + resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} - boxen@7.1.1: - resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} - engines: {node: '>=14.16'} + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -1447,28 +1430,10 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} - cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} - - cacheable-request@10.2.13: - resolution: {integrity: sha512-3SD4rrMu1msNGEtNSt8Od6enwdo//U9s4ykmXfA2TD58kcLkCobtCDiby7kNyj7a/Q7lz/mAesAFI54rTdnvBA==} - engines: {node: '>=14.16'} - - call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -1481,9 +1446,9 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} caniuse-lite@1.0.30001527: resolution: {integrity: sha512-YkJi7RwPgWtXVSgK4lG9AHH57nSzvvOp9MesgXmw4Q7n0C3H04L0foHqfxcmSAm5AcWb8dW9AYj2tR7/5GnddQ==} @@ -1500,6 +1465,10 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -1514,6 +1483,10 @@ packages: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} + ci-info@4.1.0: + resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} + engines: {node: '>=8'} + cjs-module-lexer@1.2.3: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} @@ -1521,14 +1494,6 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - cli-cursor@5.0.0: resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} engines: {node: '>=18'} @@ -1549,10 +1514,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -1600,75 +1561,88 @@ packages: config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - configstore@6.0.0: - resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} - engines: {node: '>=12'} + configstore@7.0.0: + resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==} + engines: {node: '>=18'} conventional-changelog-angular@7.0.0: resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} engines: {node: '>=16'} - conventional-changelog-atom@4.0.0: - resolution: {integrity: sha512-q2YtiN7rnT1TGwPTwjjBSIPIzDJCRE+XAUahWxnh+buKK99Kks4WLMHoexw38GXx9OUxAsrp44f9qXe5VEMYhw==} - engines: {node: '>=16'} + conventional-changelog-angular@8.0.0: + resolution: {integrity: sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==} + engines: {node: '>=18'} - conventional-changelog-codemirror@4.0.0: - resolution: {integrity: sha512-hQSojc/5imn1GJK3A75m9hEZZhc3urojA5gMpnar4JHmgLnuM3CUIARPpEk86glEKr3c54Po3WV/vCaO/U8g3Q==} - engines: {node: '>=16'} + conventional-changelog-atom@5.0.0: + resolution: {integrity: sha512-WfzCaAvSCFPkznnLgLnfacRAzjgqjLUjvf3MftfsJzQdDICqkOOpcMtdJF3wTerxSpv2IAAjX8doM3Vozqle3g==} + engines: {node: '>=18'} + + conventional-changelog-codemirror@5.0.0: + resolution: {integrity: sha512-8gsBDI5Y3vrKUCxN6Ue8xr6occZ5nsDEc4C7jO/EovFGozx8uttCAyfhRrvoUAWi2WMm3OmYs+0mPJU7kQdYWQ==} + engines: {node: '>=18'} conventional-changelog-conventionalcommits@7.0.2: resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} engines: {node: '>=16'} - conventional-changelog-core@7.0.0: - resolution: {integrity: sha512-UYgaB1F/COt7VFjlYKVE/9tTzfU3VUq47r6iWf6lM5T7TlOxr0thI63ojQueRLIpVbrtHK4Ffw+yQGduw2Bhdg==} - engines: {node: '>=16'} + conventional-changelog-conventionalcommits@8.0.0: + resolution: {integrity: sha512-eOvlTO6OcySPyyyk8pKz2dP4jjElYunj9hn9/s0OB+gapTO8zwS9UQWrZ1pmF2hFs3vw1xhonOLGcGjy/zgsuA==} + engines: {node: '>=18'} - conventional-changelog-ember@4.0.0: - resolution: {integrity: sha512-D0IMhwcJUg1Y8FSry6XAplEJcljkHVlvAZddhhsdbL1rbsqRsMfGx/PIkPYq0ru5aDgn+OxhQ5N5yR7P9mfsvA==} - engines: {node: '>=16'} + conventional-changelog-core@8.0.0: + resolution: {integrity: sha512-EATUx5y9xewpEe10UEGNpbSHRC6cVZgO+hXQjofMqpy+gFIrcGvH3Fl6yk2VFKh7m+ffenup2N7SZJYpyD9evw==} + engines: {node: '>=18'} - conventional-changelog-eslint@5.0.0: - resolution: {integrity: sha512-6JtLWqAQIeJLn/OzUlYmzd9fKeNSWmQVim9kql+v4GrZwLx807kAJl3IJVc3jTYfVKWLxhC3BGUxYiuVEcVjgA==} - engines: {node: '>=16'} + conventional-changelog-ember@5.0.0: + resolution: {integrity: sha512-RPflVfm5s4cSO33GH/Ey26oxhiC67akcxSKL8CLRT3kQX2W3dbE19sSOM56iFqUJYEwv9mD9r6k79weWe1urfg==} + engines: {node: '>=18'} - conventional-changelog-express@4.0.0: - resolution: {integrity: sha512-yWyy5c7raP9v7aTvPAWzqrztACNO9+FEI1FSYh7UP7YT1AkWgv5UspUeB5v3Ibv4/o60zj2o9GF2tqKQ99lIsw==} - engines: {node: '>=16'} + conventional-changelog-eslint@6.0.0: + resolution: {integrity: sha512-eiUyULWjzq+ybPjXwU6NNRflApDWlPEQEHvI8UAItYW/h22RKkMnOAtfCZxMmrcMO1OKUWtcf2MxKYMWe9zJuw==} + engines: {node: '>=18'} - conventional-changelog-jquery@5.0.0: - resolution: {integrity: sha512-slLjlXLRNa/icMI3+uGLQbtrgEny3RgITeCxevJB+p05ExiTgHACP5p3XiMKzjBn80n+Rzr83XMYfRInEtCPPw==} - engines: {node: '>=16'} + conventional-changelog-express@5.0.0: + resolution: {integrity: sha512-D8Q6WctPkQpvr2HNCCmwU5GkX22BVHM0r4EW8vN0230TSyS/d6VQJDAxGb84lbg0dFjpO22MwmsikKL++Oo/oQ==} + engines: {node: '>=18'} - conventional-changelog-jshint@4.0.0: - resolution: {integrity: sha512-LyXq1bbl0yG0Ai1SbLxIk8ZxUOe3AjnlwE6sVRQmMgetBk+4gY9EO3d00zlEt8Y8gwsITytDnPORl8al7InTjg==} - engines: {node: '>=16'} + conventional-changelog-jquery@6.0.0: + resolution: {integrity: sha512-2kxmVakyehgyrho2ZHBi90v4AHswkGzHuTaoH40bmeNqUt20yEkDOSpw8HlPBfvEQBwGtbE+5HpRwzj6ac2UfA==} + engines: {node: '>=18'} - conventional-changelog-preset-loader@4.1.0: - resolution: {integrity: sha512-HozQjJicZTuRhCRTq4rZbefaiCzRM2pr6u2NL3XhrmQm4RMnDXfESU6JKu/pnKwx5xtdkYfNCsbhN5exhiKGJA==} - engines: {node: '>=16'} + conventional-changelog-jshint@5.0.0: + resolution: {integrity: sha512-gGNphSb/opc76n2eWaO6ma4/Wqu3tpa2w7i9WYqI6Cs2fncDSI2/ihOfMvXveeTTeld0oFvwMVNV+IYQIk3F3g==} + engines: {node: '>=18'} - conventional-changelog-writer@7.0.0: - resolution: {integrity: sha512-9/6vTDd3wDbH9yayZNOq53UWI4QqYlbiLBtWf+alsQA/bBFHG+k3KnQ8Fu/xzHqsbQfzPg3w1H1piWYn/GD9Tw==} - engines: {node: '>=16'} + conventional-changelog-preset-loader@5.0.0: + resolution: {integrity: sha512-SetDSntXLk8Jh1NOAl1Gu5uLiCNSYenB5tm0YVeZKePRIgDW9lQImromTwLa3c/Gae298tsgOM+/CYT9XAl0NA==} + engines: {node: '>=18'} + + conventional-changelog-writer@8.0.0: + resolution: {integrity: sha512-TQcoYGRatlAnT2qEWDON/XSfnVG38JzA7E0wcGScu7RElQBkg9WWgZd1peCWFcWDh1xfb2CfsrcvOn1bbSzztA==} + engines: {node: '>=18'} hasBin: true - conventional-changelog@5.1.0: - resolution: {integrity: sha512-aWyE/P39wGYRPllcCEZDxTVEmhyLzTc9XA6z6rVfkuCD2UBnhV/sgSOKbQrEG5z9mEZJjnopjgQooTKxEg8mAg==} - engines: {node: '>=16'} + conventional-changelog@6.0.0: + resolution: {integrity: sha512-tuUH8H/19VjtD9Ig7l6TQRh+Z0Yt0NZ6w/cCkkyzUbGQTnUEmKfGtkC9gGfVgCfOL1Rzno5NgNF4KY8vR+Jo3w==} + engines: {node: '>=18'} - conventional-commits-filter@4.0.0: - resolution: {integrity: sha512-rnpnibcSOdFcdclpFwWa+pPlZJhXE7l+XK04zxhbWrhgpR96h33QLz8hITTXbcYICxVr3HZFtbtUAQ+4LdBo9A==} - engines: {node: '>=16'} + conventional-commits-filter@5.0.0: + resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} + engines: {node: '>=18'} conventional-commits-parser@5.0.0: resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} engines: {node: '>=16'} hasBin: true - conventional-recommended-bump@9.0.0: - resolution: {integrity: sha512-HR1yD0G5HgYAu6K0wJjLd7QGRK8MQDqqj6Tn1n/ja1dFwBCE6QmV+iSgQ5F7hkx7OUR/8bHpxJqYtXj2f/opPQ==} - engines: {node: '>=16'} + conventional-commits-parser@6.0.0: + resolution: {integrity: sha512-TbsINLp48XeMXR8EvGjTnKGsZqBemisPoyWESlpRyR8lif0lcwzqz+NMtYSj1ooF/WYjSuu7wX0CtdeeMEQAmA==} + engines: {node: '>=18'} + hasBin: true + + conventional-recommended-bump@10.0.0: + resolution: {integrity: sha512-RK/fUnc2btot0oEVtrj3p2doImDSs7iiz/bftFCDzels0Qs1mxLghp+DFHMaOC0qiCI6sWzlTDyBFSYuot6pRA==} + engines: {node: '>=18'} hasBin: true convert-source-map@1.9.0: @@ -1677,13 +1651,13 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cosmiconfig-typescript-loader@5.0.0: - resolution: {integrity: sha512-+8cK7jRAReYkMwMiG+bxhcNKiHJDM6bR9FD/nGBXOWdMLuYawjF5cGrtLilJ+LGd3ZjCXnJjR5DkfWPoIVlqJA==} - engines: {node: '>=v16'} + cosmiconfig-typescript-loader@6.1.0: + resolution: {integrity: sha512-tJ1w35ZRUiM5FeTzT7DtYWAFFv37ZLqSRkGi2oeCK1gPhvaWjkAtfXvLmvE1pRfxxp9aQo6ba/Pvg1dKj05D4g==} + engines: {node: '>=v18'} peerDependencies: '@types/node': '*' - cosmiconfig: '>=8.2' - typescript: '>=4' + cosmiconfig: '>=9' + typescript: '>=5' cosmiconfig@9.0.0: resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} @@ -1711,10 +1685,6 @@ packages: crypt@0.0.2: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} - crypto-random-string@4.0.0: - resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} - engines: {node: '>=12'} - cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} @@ -1729,10 +1699,6 @@ packages: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} - data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - data-uri-to-buffer@5.0.1: resolution: {integrity: sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==} engines: {node: '>= 14'} @@ -1741,16 +1707,8 @@ packages: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1758,8 +1716,8 @@ packages: supports-color: optional: true - debug@4.3.6: - resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1770,10 +1728,6 @@ packages: decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - dedent@1.5.1: resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} peerDependencies: @@ -1786,9 +1740,6 @@ packages: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -1801,21 +1752,10 @@ packages: resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} engines: {node: '>=18'} - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - define-lazy-prop@3.0.0: resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} engines: {node: '>=12'} - define-properties@1.2.0: - resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} - engines: {node: '>= 0.4'} - degenerator@5.0.1: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} @@ -1824,9 +1764,6 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -1835,18 +1772,6 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} @@ -1856,12 +1781,9 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} - dot-prop@6.0.1: - resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} - engines: {node: '>=10'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} @@ -1884,9 +1806,6 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -1902,28 +1821,13 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.22.1: - resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.0: - resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - es6-promisify@7.0.0: resolution: {integrity: sha512-ginqzK3J90Rd4/Yz7qRrqUeIpe3TwSXTPPZtPne7tGBPeAaQiU8qt4fpKApnxHcq1AwtUdHVg5P77x/yrggG8Q==} engines: {node: '>=6'} - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} hasBin: true escalade@3.1.1: @@ -1942,95 +1846,16 @@ packages: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} hasBin: true - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-module-utils@2.8.0: - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-typescript-sort-keys@3.2.0: - resolution: {integrity: sha512-GutszvriaVtwmn7pQjuj9/9o0iXhD7XZs0/424+zsozdRr/fdg5e8206t478Vnqnqi1GjuxcAolj1kf74KnhPA==} - engines: {node: '>= 16'} - peerDependencies: - '@typescript-eslint/parser': ^6 || ^7 - eslint: ^7 || ^8 - typescript: ^3 || ^4 || ^5 - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - engines: {node: '>=0.10'} - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -2056,14 +1881,14 @@ packages: resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} engines: {node: '>=16.17'} + execa@9.5.2: + resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} + engines: {node: ^18.19.0 || >=20.5.0} + exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} - expect@29.6.4: - resolution: {integrity: sha512-F2W2UyQ8XYyftHT57dtfg8Ue3X5qLgm2sSug0ivvLRH/VKNRL/pDxg/TH7zVzbQB0tu80clNFy6LU7OS/VSEKA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2072,6 +1897,9 @@ packages: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} engines: {node: '>=4'} + fast-content-type-parse@2.0.1: + resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2082,22 +1910,23 @@ packages: fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} @@ -2110,48 +1939,22 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + find-up-simple@1.0.0: + resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==} + engines: {node: '>=18'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - find-up@7.0.0: resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} engines: {node: '>=18'} - flat-cache@3.1.0: - resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} - engines: {node: '>=12.0.0'} - - flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} - - form-data-encoder@2.1.4: - resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} - engines: {node: '>= 14.17'} - form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} - formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} - fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -2168,19 +1971,9 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -2193,9 +1986,6 @@ packages: resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} engines: {node: '>=18'} - get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} - get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} @@ -2208,12 +1998,12 @@ packages: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} - get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} - get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} get-uri@6.0.1: resolution: {integrity: sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==} @@ -2224,29 +2014,26 @@ packages: engines: {node: '>=16'} hasBin: true - git-semver-tags@7.0.1: - resolution: {integrity: sha512-NY0ZHjJzyyNXHTDZmj+GG7PyuAKtMsyWSwh07CR2hOZFa+/yoTsXci/nF2obzL8UDhakFNkD9gNdt/Ed+cxh2Q==} - engines: {node: '>=16'} + git-raw-commits@5.0.0: + resolution: {integrity: sha512-I2ZXrXeOc0KrCvC7swqtIFXFN+rbjnC7b2T943tvemIOVNl+XP8YnA9UVwqFhzzLClnSA60KR/qEjLpXzs73Qg==} + engines: {node: '>=18'} + hasBin: true + + git-semver-tags@8.0.0: + resolution: {integrity: sha512-N7YRIklvPH3wYWAR2vysaqGLPRcpwQ0GKdlqTiVN5w1UmCdaeY3K8s6DMKRCh54DDdzyt/OAB6C8jgVtb7Y2Fg==} + engines: {node: '>=18'} hasBin: true - git-up@7.0.0: - resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} + git-up@8.0.0: + resolution: {integrity: sha512-uBI8Zdt1OZlrYfGcSVroLJKgyNNXlgusYFzHk614lTasz35yg2PVpL1RMy0LOO2dcvF9msYW3pRfUSmafZNrjg==} - git-url-parse@14.0.0: - resolution: {integrity: sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==} + git-url-parse@16.0.0: + resolution: {integrity: sha512-Y8iAF0AmCaqXc6a5GYgPQW9ESbncNLOL+CeQAJRhmWUOmnPkKpBYeWYp4mFd3LA5j53CdGDdslzX12yEBVHQQg==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -2258,46 +2045,21 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.21.0: - resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==} - engines: {node: '>=8'} - - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - globby@14.0.2: resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} engines: {node: '>=18'} - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - got@13.0.0: - resolution: {integrity: sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==} - engines: {node: '>=16'} - graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} hasBin: true - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -2306,25 +2068,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} - - has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - - has@1.0.3: - resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} - engines: {node: '>= 0.4.0'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -2340,9 +2083,6 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - http-proxy-agent@5.0.0: resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} engines: {node: '>= 6'} @@ -2351,16 +2091,12 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} - http2-wrapper@2.2.0: - resolution: {integrity: sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==} - engines: {node: '>=10.19.0'} - https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} - https-proxy-agent@7.0.4: - resolution: {integrity: sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} human-signals@2.1.0: @@ -2371,8 +2107,12 @@ packages: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} engines: {node: '>=16.17.0'} - husky@9.1.4: - resolution: {integrity: sha512-bho94YyReb4JV7LYWRWxZ/xr6TtOTt8cMfmQ39MQYJ7f/YE268s3GdghGwi+y4zAeqewE5zYLvuhV0M0ijsDEA==} + human-signals@8.0.0: + resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} + engines: {node: '>=18.18.0'} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} engines: {node: '>=18'} hasBin: true @@ -2384,13 +2124,6 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} - engines: {node: '>= 4'} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -2415,6 +2148,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + index-to-position@0.1.2: + resolution: {integrity: sha512-MWDKS3AS1bGCHLBA2VLImJz42f7bJh8wQsTGCzI3j519/CASStoDONUBVz2I/VID0MpiX3SGSnbOD2xUalbE5g==} + engines: {node: '>=18'} + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} @@ -2428,62 +2165,29 @@ packages: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - inquirer@9.3.2: - resolution: {integrity: sha512-+ynEbhWKhyomnaX0n2aLIMSkgSlGB5RrWbNXnEqj6mdaIydu6y40MdBjL38SAB0JcdmOaIaMua1azdjLEr3sdw==} + inquirer@12.3.0: + resolution: {integrity: sha512-3NixUXq+hM8ezj2wc7wC37b32/rHq1MwNZDYdvx+d6jokOD+r+i8Q4Pkylh9tISYP114A128LCX8RKhopC5RfQ==} engines: {node: '>=18'} - - internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} - engines: {node: '>= 0.4'} + peerDependencies: + '@types/node': '>=18' interpret@1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} - ip@1.1.8: - resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} - - ip@2.0.0: - resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} - - is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true - - is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} - is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - is-docker@3.0.0: resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2513,8 +2217,8 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-in-ci@0.1.0: - resolution: {integrity: sha512-d9PXLEY0v1iJ64xLiQMJ51J128EYHAaOR4yZqQi8aHGfw6KgifM3/Viw1oZZ1GCVmb3gBuyhLyHj0HgR2DhSXQ==} + is-in-ci@1.0.0: + resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} engines: {node: '>=18'} hasBin: true @@ -2527,10 +2231,6 @@ packages: resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} engines: {node: '>=18'} - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - is-interactive@2.0.0: resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} engines: {node: '>=12'} @@ -2538,18 +2238,10 @@ packages: is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - is-npm@6.0.0: resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -2558,27 +2250,20 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-path-inside@4.0.0: resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} engines: {node: '>=12'} + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - is-ssh@1.4.0: resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} @@ -2590,29 +2275,14 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} is-text-path@2.0.0: resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} engines: {node: '>=8'} - is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - - is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - is-unicode-supported@1.3.0: resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} engines: {node: '>=12'} @@ -2621,16 +2291,10 @@ packages: resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} engines: {node: '>=18'} - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - is-wsl@3.1.0: resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} engines: {node: '>=16'} - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -2662,9 +2326,6 @@ packages: resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} engines: {node: '>=8'} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jake@10.9.2: resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} engines: {node: '>=10'} @@ -2700,10 +2361,6 @@ packages: ts-node: optional: true - jest-diff@29.6.4: - resolution: {integrity: sha512-9F48UxR9e4XOEZvoUXEHSWY4qC4zERJaOfrbBg9JpbJOO43R1vN76REt/aMGZoY6GD5g84nnJiBIVlscegefpw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-diff@29.7.0: resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2741,18 +2398,10 @@ packages: resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-matcher-utils@29.6.4: - resolution: {integrity: sha512-KSzwyzGvK4HcfnserYqJHYi7sZVqdREJ9DMPAKVbS98JsIAvumihaNUbjrWw0St7p9IY7A9UskCW5MYlGmBQFQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-matcher-utils@29.7.0: resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-message-util@29.6.3: - resolution: {integrity: sha512-FtzaEEHzjDpQp51HX4UMkPZjy46ati4T5pEMyM6Ik48ztu4T9LQplZ6OsimHx7EuM9dfEh5HJa6D3trEftu3dA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-message-util@29.7.0: resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2794,10 +2443,6 @@ packages: resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-util@29.6.3: - resolution: {integrity: sha512-QUjna/xSy4B32fzcKTSz1w7YYzgiHrjjJjevdRf61HYk998R5vVMMNmrHESYZVDS5DSWs+1srPLPKxXPkeSDOA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-util@29.7.0: resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -2824,8 +2469,8 @@ packages: node-notifier: optional: true - jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true jju@1.4.0: @@ -2846,6 +2491,9 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + jsdom@20.0.3: resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} engines: {node: '>=14'} @@ -2860,35 +2508,12 @@ packages: engines: {node: '>=4'} hasBin: true - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -2911,9 +2536,6 @@ packages: jws@3.2.2: resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} - kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} @@ -2930,41 +2552,29 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - lilconfig@3.1.2: - resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lines-and-columns@2.0.3: - resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - lint-staged@15.2.9: - resolution: {integrity: sha512-BZAt8Lk3sEnxw7tfxM7jeZlPRuT4M68O0/CwZhhaw6eeWu0Lz5eERE3m386InivXB64fp/mDID452h48tvKlRQ==} + lint-staged@15.4.1: + resolution: {integrity: sha512-P8yJuVRyLrm5KxCtFx+gjI5Bil+wO7wnTl7C3bXhvtTaAFGirzeB24++D0wGoUwxrUKecNiehemgCob9YL39NA==} engines: {node: '>=18.12.0'} hasBin: true - listr2@8.2.4: - resolution: {integrity: sha512-opevsywziHd3zHCVQGAj8zu+Z3yHNkkoYhWIGnq54RrCVwLz0MozotJEDnKsIBLvkfLGN6BLOyAeRrYI0pKA4g==} + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} engines: {node: '>=18.0.0'} locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - locate-path@7.2.0: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3029,10 +2639,6 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - log-symbols@6.0.0: resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} engines: {node: '>=18'} @@ -3041,14 +2647,6 @@ packages: resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} engines: {node: '>=18'} - lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - lru-cache@10.0.1: - resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} - engines: {node: 14 || >=16.14} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -3076,10 +2674,6 @@ packages: magic-string@0.30.11: resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} - magic-string@0.30.8: - resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} - engines: {node: '>=12'} - make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -3104,6 +2698,10 @@ packages: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -3119,6 +2717,10 @@ packages: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -3139,14 +2741,6 @@ packages: resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} engines: {node: '>=18'} - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - mimic-response@4.0.0: - resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - minimatch@3.0.8: resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} @@ -3164,28 +2758,21 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -3200,14 +2787,6 @@ packages: resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - - node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -3222,10 +2801,6 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-url@8.0.0: - resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} - engines: {node: '>=14.16'} - npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -3234,31 +2809,13 @@ packages: resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + nwsapi@2.2.7: resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} - object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} - - object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3278,30 +2835,18 @@ packages: resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} engines: {node: '>=18'} - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - - ora@8.0.1: - resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} + ora@8.1.1: + resolution: {integrity: sha512-YWielGi1XzG1UTvOaCFaNgEnuhZVMSHYkW/FQ7UX8O26PtlpdM84c0f7wLPlkvx2RfiQmnzd61d/MGxmpQeJPw==} engines: {node: '>=18'} - os-name@5.1.0: - resolution: {integrity: sha512-YEIoAnM6zFmzw3PQ201gCVCIWbXNyKObGlVvpAVvraAeOHnlYVKFssbA/riRX5R40WA6kKrZ7Dr7dWzO3nKSeQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + os-name@6.0.0: + resolution: {integrity: sha512-bv608E0UX86atYi2GMGjDe0vF/X1TJjemNS8oEW6z22YW1Rc3QykSYoGfkQbX0zZX9H0ZB6CQP/3GTf1I5hURg==} + engines: {node: '>=18'} os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - p-cancelable@3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} - p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -3318,10 +2863,6 @@ packages: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - p-locate@6.0.0: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3330,17 +2871,14 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - pac-proxy-agent@7.0.1: - resolution: {integrity: sha512-ASV8yU4LLKBAjqIPMbrgtaKIvxQri/yh2OpI+S6hVa9JRkUI3Y3NPFbfngDtY7oFtSMD3w31Xns89mDa3Feo5A==} + pac-proxy-agent@7.1.0: + resolution: {integrity: sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==} engines: {node: '>= 14'} - pac-resolver@7.0.0: - resolution: {integrity: sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==} + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} engines: {node: '>= 14'} - package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} - package-json@10.0.1: resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} engines: {node: '>=18'} @@ -3353,15 +2891,20 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse-json@7.1.0: - resolution: {integrity: sha512-ihtdrgbqdONYD156Ap6qTcaGcGdkdAxodO1wLqQ/j7HP1u2sFYppINiq4jyC8F+Nm+4fVufylCV00QmkTHkSUg==} - engines: {node: '>=16'} + parse-json@8.1.0: + resolution: {integrity: sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==} + engines: {node: '>=18'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} parse-path@7.0.0: resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} - parse-url@8.1.0: - resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} + parse-url@9.2.0: + resolution: {integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==} + engines: {node: '>=14.13.0'} parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} @@ -3389,14 +2932,6 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - path-type@5.0.0: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} @@ -3415,10 +2950,17 @@ packages: picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + pidtree@0.6.0: resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} engines: {node: '>=0.10'} @@ -3432,22 +2974,18 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - postcss@8.4.41: - resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} + postcss@8.5.1: + resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} engines: {node: ^10 || ^12 || >=14} - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - pretty-format@29.6.3: - resolution: {integrity: sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -3458,8 +2996,8 @@ packages: protocols@2.0.1: resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} - proxy-agent@6.4.0: - resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} engines: {node: '>= 14'} proxy-from-env@1.1.0: @@ -3496,10 +3034,6 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -3507,13 +3041,13 @@ packages: react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - read-pkg-up@10.1.0: - resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==} - engines: {node: '>=16'} + read-package-up@11.0.0: + resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} + engines: {node: '>=18'} - read-pkg@8.1.0: - resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} - engines: {node: '>=16'} + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} @@ -3523,10 +3057,6 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} - regexp.prototype.flags@1.5.0: - resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} - engines: {node: '>= 0.4'} - registry-auth-token@5.0.2: resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} @@ -3535,9 +3065,9 @@ packages: resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} engines: {node: '>=12'} - release-it@17.6.0: - resolution: {integrity: sha512-EE34dtRPL7BHpYQC7E+zAU8kjkyxFHxLk5Iqnmn/5nGcjgOQu34Au29M2V9YvxiP3tZbIlEn4gItEzu7vAPRbw==} - engines: {node: ^18.18.0 || ^20.9.0 || ^22.0.0} + release-it@18.1.1: + resolution: {integrity: sha512-rC/iVKri7U/Kp/Myujmsf7HG2gPq8My/LBVB72TbZZYKD14fmgDZC4Eyn8DD7Yh2h/G/YCCsRe1QQPrjXj9Mzg==} + engines: {node: ^20.9.0 || >=22.0.0} hasBin: true require-directory@2.1.1: @@ -3551,9 +3081,6 @@ packages: requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - resolve-cwd@3.0.0: resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} engines: {node: '>=8'} @@ -3577,18 +3104,6 @@ packages: resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==} hasBin: true - responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - restore-cursor@5.1.0: resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} engines: {node: '>=18'} @@ -3604,11 +3119,6 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rollup-plugin-cleanup@3.2.1: resolution: {integrity: sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ==} engines: {node: ^10.14.2 || >=12.0.0} @@ -3622,9 +3132,9 @@ packages: rollup: ^3.29.4 || ^4 typescript: ^4.5 || ^5.0 - rollup-plugin-swc3@0.11.2: - resolution: {integrity: sha512-o1ih9B806fV2wBSNk46T0cYfTF2eiiKmYXRpWw3K4j/Cp3tCAt10UCVsTqvUhGP58pcB3/GZcAVl5e7TCSKN6Q==} - engines: {node: '>=12'} + rollup-plugin-swc3@0.12.1: + resolution: {integrity: sha512-iNV1T432XvyejZ19/41C2gLbXxEOiiJynPPAFF0WzwwFT5FHx7SstAp0yjJRLyrbZjfIhoWJVl3hX3c3Stv/GQ==} + engines: {node: '>=16'} peerDependencies: '@swc/core': '>=1.2.165' rollup: ^2.0.0 || ^3.0.0 || ^4.0.0 @@ -3632,13 +3142,13 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup-preserve-directives@1.1.1: - resolution: {integrity: sha512-+eQafbuEfDPfxQ9hQPlwaROfin4yiVRxap8hnrvvvcSGoukv1tTiYpAW9mvm3uR8J+fe4xd8FdVd5rz9q7jZ+Q==} + rollup-preserve-directives@1.1.3: + resolution: {integrity: sha512-oXqxd6ZzkoQej8Qt0k+S/yvO2+S4CEVEVv2g85oL15o0cjAKTKEuo2MzyA8FcsBBXbtytBzBMFAbhvQg4YyPUQ==} peerDependencies: rollup: ^2.0.0 || ^3.0.0 || ^4.0.0 - rollup@4.21.0: - resolution: {integrity: sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==} + rollup@4.30.1: + resolution: {integrity: sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3656,16 +3166,9 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} - safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -3673,10 +3176,6 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - semver-diff@4.0.0: - resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} - engines: {node: '>=12'} - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -3686,13 +3185,13 @@ packages: engines: {node: '>=10'} hasBin: true - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} engines: {node: '>=10'} hasBin: true - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -3709,12 +3208,6 @@ packages: engines: {node: '>=4'} hasBin: true - shiki@1.14.1: - resolution: {integrity: sha512-FujAN40NEejeXdzPt+3sZ3F2dx1U24BY2XTY01+MG8mbxCiA2XukXdcbyMyLAHJ/1AUUnQd1tZlvIjefWWEJeA==} - - side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -3749,16 +3242,16 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - socks-proxy-agent@8.0.2: - resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==} + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} source-map-support@0.5.13: @@ -3791,6 +3284,9 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -3811,23 +3307,13 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - string-width@7.1.0: resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} engines: {node: '>=18'} - string.prototype.trim@1.2.7: - resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.6: - resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} - - string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -3840,10 +3326,6 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - strip-bom@4.0.0: resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} engines: {node: '>=8'} @@ -3856,6 +3338,10 @@ packages: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} engines: {node: '>=12'} + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} @@ -3864,6 +3350,9 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -3891,12 +3380,12 @@ packages: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -3920,14 +3409,8 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' - - ts-jest@29.2.4: - resolution: {integrity: sha512-3d6tgDyhCI29HlpwIq87sNuI+3Q6GLTTCeYRHCs7vDz+/3GCMwEtV9jezLyl4ZtnBgx00I7hm8PCP8cTksMGrw==} + ts-jest@29.2.5: + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -3950,88 +3433,42 @@ packages: esbuild: optional: true - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - type-fest@2.19.0: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} - engines: {node: '>=14.16'} - - type-fest@4.3.1: - resolution: {integrity: sha512-pphNW/msgOUSkJbH58x8sqpq8uQj6b0ZKGxEsLKMUnGorRcDjrUaLS+39+/ub41JNTwrrMyJcUB8+YZs3mbwqw==} + type-fest@4.32.0: + resolution: {integrity: sha512-rfgpoi08xagF3JSdtJlCwMq9DGNDE0IMh3Mkpc1wUypg9vPi786AiqeBBKcqvIkq42azsBM85N490fyZjeUftw==} engines: {node: '>=16'} - typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - - typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typedoc@0.26.6: - resolution: {integrity: sha512-SfEU3SH3wHNaxhFPjaZE2kNl/NFtLNW5c1oHsg7mti7GjmUj1Roq6osBQeMd+F4kL0BoRBBr8gQAuqBlfFu8LA==} + typedoc@0.27.6: + resolution: {integrity: sha512-oBFRoh2Px6jFx366db0lLlihcalq/JzyCVp7Vaq1yphL/tbgx2e+bkpkCgJPunaPvPwoTOXSwasfklWHm7GfAw==} engines: {node: '>= 18'} hasBin: true peerDependencies: - typescript: 4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x - typescript@5.4.2: - resolution: {integrity: sha512-+2/g0Fds1ERlP6JsakQQDXjZdZMM+rqpamFZJEKh4kwTIn3iDkgKtby0CeNd5ATNZ4Ry1ax15TMx0W2V+miizQ==} + typescript@5.7.2: + resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} engines: {node: '>=14.17'} hasBin: true - typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true @@ -4043,19 +3480,23 @@ packages: engines: {node: '>=0.8.0'} hasBin: true - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + undici@6.21.0: + resolution: {integrity: sha512-BUgJXc752Kou3oOIuU1i+yZZypyZRqNPW0vqoMPl8VaoalSfeR0D8/t4iAS3yirs79SSMTxTag+ZC86uswv+Cw==} + engines: {node: '>=18.17'} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} - unique-string@3.0.0: - resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} - engines: {node: '>=12'} + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} - universal-user-agent@6.0.0: - resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==} + universal-user-agent@7.0.2: + resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} @@ -4071,8 +3512,8 @@ packages: peerDependencies: browserslist: '>= 4.21.0' - update-notifier@7.1.0: - resolution: {integrity: sha512-8SV3rIqVY6EFC1WxH6L0j55s0MO79MFBS1pivmInRJg3pCEDgWHBj1Q6XByTtCLOZIFA0f6zoG9ZWf2Ks9lvTA==} + update-notifier@7.3.1: + resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} engines: {node: '>=18'} uri-js@4.4.1: @@ -4095,22 +3536,27 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - vite@5.4.1: - resolution: {integrity: sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==} - engines: {node: ^18.0.0 || >=20.0.0} + vite@6.0.7: + resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' less: '*' lightningcss: ^1.21.0 sass: '*' sass-embedded: '*' stylus: '*' sugarss: '*' - terser: ^5.4.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: '@types/node': optional: true + jiti: + optional: true less: optional: true lightningcss: @@ -4125,6 +3571,10 @@ packages: optional: true terser: optional: true + tsx: + optional: true + yaml: + optional: true w3c-xmlserializer@4.0.0: resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} @@ -4133,13 +3583,6 @@ packages: walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - - web-streams-polyfill@3.2.1: - resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} - engines: {node: '>= 8'} - webcrypto-core@1.8.0: resolution: {integrity: sha512-kR1UQNH8MD42CYuLzvibfakG5Ew5seG85dMMoAM/1LqvckxaF6pUiidLuraIu4V+YCIFabYecUZAW0TuxAoaqw==} @@ -4162,28 +3605,24 @@ packages: resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} engines: {node: '>=12'} - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} - engines: {node: '>= 0.4'} + when-exit@2.1.4: + resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true - widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} - wildcard-match@5.1.3: - resolution: {integrity: sha512-a95hPUk+BNzSGLntNXYxsjz2Hooi5oL7xOfJR6CKwSsSALh7vUNuTlzsrZowtYy38JNduYFRVhFv19ocqNOZlg==} + wildcard-match@5.1.4: + resolution: {integrity: sha512-wldeCaczs8XXq7hj+5d/F38JE2r7EXgb6WQDM84RVwxy81T/sxB5e9+uZLK9Q9oNz1mlvjut+QtvgaOQFPVq/g==} - windows-release@5.1.1: - resolution: {integrity: sha512-NMD00arvqcq2nwqc5Q6KtrSRHK+fVD31erE5FEMahAw5PmVCgD7MUXodq3pdZSUkqA9Cda2iWx6s1XYwiJWRmw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + windows-release@6.0.1: + resolution: {integrity: sha512-MS3BzG8QK33dAyqwxfYJCJ03arkwKaddUOvvnnlFdXLudflsQF6I8yAxrLBeQk4yO8wjdH/+ax0YzxJEDrOftg==} + engines: {node: '>=18'} wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -4196,10 +3635,6 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - wrap-ansi@9.0.0: resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} engines: {node: '>=18'} @@ -4207,9 +3642,6 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - write-file-atomic@4.0.2: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} @@ -4247,8 +3679,13 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.5.0: - resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} + yaml@2.6.1: + resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} + engines: {node: '>= 14'} + hasBin: true + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} engines: {node: '>= 14'} hasBin: true @@ -4272,9 +3709,11 @@ packages: resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} engines: {node: '>=18'} -snapshots: + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} - '@aashutoshrathi/word-wrap@1.2.6': {} +snapshots: '@ampproject/remapping@2.2.1': dependencies: @@ -4290,7 +3729,6 @@ snapshots: dependencies: '@babel/highlight': 7.24.7 picocolors: 1.0.0 - optional: true '@babel/compat-data@7.22.9': {} @@ -4307,7 +3745,7 @@ snapshots: '@babel/traverse': 7.22.15 '@babel/types': 7.22.15 convert-source-map: 1.9.0 - debug: 4.3.6 + debug: 4.4.0 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -4367,8 +3805,7 @@ snapshots: '@babel/helper-validator-identifier@7.22.15': {} - '@babel/helper-validator-identifier@7.24.7': - optional: true + '@babel/helper-validator-identifier@7.24.7': {} '@babel/helper-validator-option@7.22.15': {} @@ -4392,7 +3829,6 @@ snapshots: chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 - optional: true '@babel/parser@7.22.15': dependencies: @@ -4484,7 +3920,7 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.15 '@babel/types': 7.22.15 - debug: 4.3.6 + debug: 4.4.0 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -4497,66 +3933,101 @@ snapshots: '@bcoe/v8-coverage@0.2.3': {} - '@commitlint/cli@19.4.0(@types/node@20.5.9)(typescript@5.5.4)': + '@biomejs/biome@1.9.4': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.9.4 + '@biomejs/cli-darwin-x64': 1.9.4 + '@biomejs/cli-linux-arm64': 1.9.4 + '@biomejs/cli-linux-arm64-musl': 1.9.4 + '@biomejs/cli-linux-x64': 1.9.4 + '@biomejs/cli-linux-x64-musl': 1.9.4 + '@biomejs/cli-win32-arm64': 1.9.4 + '@biomejs/cli-win32-x64': 1.9.4 + + '@biomejs/cli-darwin-arm64@1.9.4': + optional: true + + '@biomejs/cli-darwin-x64@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64@1.9.4': + optional: true + + '@biomejs/cli-linux-x64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-x64@1.9.4': + optional: true + + '@biomejs/cli-win32-arm64@1.9.4': + optional: true + + '@biomejs/cli-win32-x64@1.9.4': + optional: true + + '@commitlint/cli@19.6.1(@types/node@22.10.7)(typescript@5.7.3)': dependencies: - '@commitlint/format': 19.3.0 - '@commitlint/lint': 19.2.2 - '@commitlint/load': 19.4.0(@types/node@20.5.9)(typescript@5.5.4) - '@commitlint/read': 19.4.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 + '@commitlint/format': 19.5.0 + '@commitlint/lint': 19.6.0 + '@commitlint/load': 19.6.1(@types/node@22.10.7)(typescript@5.7.3) + '@commitlint/read': 19.5.0 + '@commitlint/types': 19.5.0 + tinyexec: 0.3.2 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' - typescript - '@commitlint/config-conventional@19.2.2': + '@commitlint/config-conventional@19.6.0': dependencies: - '@commitlint/types': 19.0.3 + '@commitlint/types': 19.5.0 conventional-changelog-conventionalcommits: 7.0.2 - '@commitlint/config-validator@19.0.3': + '@commitlint/config-validator@19.5.0': dependencies: - '@commitlint/types': 19.0.3 - ajv: 8.12.0 + '@commitlint/types': 19.5.0 + ajv: 8.13.0 - '@commitlint/ensure@19.0.3': + '@commitlint/ensure@19.5.0': dependencies: - '@commitlint/types': 19.0.3 + '@commitlint/types': 19.5.0 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 lodash.startcase: 4.4.0 lodash.upperfirst: 4.3.1 - '@commitlint/execute-rule@19.0.0': {} + '@commitlint/execute-rule@19.5.0': {} - '@commitlint/format@19.3.0': + '@commitlint/format@19.5.0': dependencies: - '@commitlint/types': 19.0.3 + '@commitlint/types': 19.5.0 chalk: 5.3.0 - '@commitlint/is-ignored@19.2.2': + '@commitlint/is-ignored@19.6.0': dependencies: - '@commitlint/types': 19.0.3 - semver: 7.6.0 + '@commitlint/types': 19.5.0 + semver: 7.6.2 - '@commitlint/lint@19.2.2': + '@commitlint/lint@19.6.0': dependencies: - '@commitlint/is-ignored': 19.2.2 - '@commitlint/parse': 19.0.3 - '@commitlint/rules': 19.0.3 - '@commitlint/types': 19.0.3 + '@commitlint/is-ignored': 19.6.0 + '@commitlint/parse': 19.5.0 + '@commitlint/rules': 19.6.0 + '@commitlint/types': 19.5.0 - '@commitlint/load@19.4.0(@types/node@20.5.9)(typescript@5.5.4)': + '@commitlint/load@19.6.1(@types/node@22.10.7)(typescript@5.7.3)': dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/execute-rule': 19.0.0 - '@commitlint/resolve-extends': 19.1.0 - '@commitlint/types': 19.0.3 + '@commitlint/config-validator': 19.5.0 + '@commitlint/execute-rule': 19.5.0 + '@commitlint/resolve-extends': 19.5.0 + '@commitlint/types': 19.5.0 chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.5.4) - cosmiconfig-typescript-loader: 5.0.0(@types/node@20.5.9)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4) + cosmiconfig: 9.0.0(typescript@5.7.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.10.7)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -4564,172 +4035,251 @@ snapshots: - '@types/node' - typescript - '@commitlint/message@19.0.0': {} + '@commitlint/message@19.5.0': {} - '@commitlint/parse@19.0.3': + '@commitlint/parse@19.5.0': dependencies: - '@commitlint/types': 19.0.3 + '@commitlint/types': 19.5.0 conventional-changelog-angular: 7.0.0 conventional-commits-parser: 5.0.0 - '@commitlint/read@19.4.0': + '@commitlint/read@19.5.0': dependencies: - '@commitlint/top-level': 19.0.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 + '@commitlint/top-level': 19.5.0 + '@commitlint/types': 19.5.0 git-raw-commits: 4.0.0 minimist: 1.2.8 + tinyexec: 0.3.2 - '@commitlint/resolve-extends@19.1.0': + '@commitlint/resolve-extends@19.5.0': dependencies: - '@commitlint/config-validator': 19.0.3 - '@commitlint/types': 19.0.3 + '@commitlint/config-validator': 19.5.0 + '@commitlint/types': 19.5.0 global-directory: 4.0.1 import-meta-resolve: 4.0.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 - '@commitlint/rules@19.0.3': + '@commitlint/rules@19.6.0': dependencies: - '@commitlint/ensure': 19.0.3 - '@commitlint/message': 19.0.0 - '@commitlint/to-lines': 19.0.0 - '@commitlint/types': 19.0.3 - execa: 8.0.1 + '@commitlint/ensure': 19.5.0 + '@commitlint/message': 19.5.0 + '@commitlint/to-lines': 19.5.0 + '@commitlint/types': 19.5.0 - '@commitlint/to-lines@19.0.0': {} + '@commitlint/to-lines@19.5.0': {} - '@commitlint/top-level@19.0.0': + '@commitlint/top-level@19.5.0': dependencies: find-up: 7.0.0 - '@commitlint/types@19.0.3': + '@commitlint/types@19.5.0': dependencies: '@types/conventional-commits-parser': 5.0.0 chalk: 5.3.0 - '@esbuild/aix-ppc64@0.21.5': + '@conventional-changelog/git-client@1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)': + dependencies: + '@types/semver': 7.5.8 + semver: 7.6.3 + optionalDependencies: + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.0.0 + + '@dual-bundle/import-meta-resolve@4.1.0': {} + + '@esbuild/aix-ppc64@0.24.2': + optional: true + + '@esbuild/android-arm64@0.24.2': + optional: true + + '@esbuild/android-arm@0.24.2': optional: true - '@esbuild/android-arm64@0.21.5': + '@esbuild/android-x64@0.24.2': optional: true - '@esbuild/android-arm@0.21.5': + '@esbuild/darwin-arm64@0.24.2': optional: true - '@esbuild/android-x64@0.21.5': + '@esbuild/darwin-x64@0.24.2': optional: true - '@esbuild/darwin-arm64@0.21.5': + '@esbuild/freebsd-arm64@0.24.2': optional: true - '@esbuild/darwin-x64@0.21.5': + '@esbuild/freebsd-x64@0.24.2': optional: true - '@esbuild/freebsd-arm64@0.21.5': + '@esbuild/linux-arm64@0.24.2': optional: true - '@esbuild/freebsd-x64@0.21.5': + '@esbuild/linux-arm@0.24.2': optional: true - '@esbuild/linux-arm64@0.21.5': + '@esbuild/linux-ia32@0.24.2': optional: true - '@esbuild/linux-arm@0.21.5': + '@esbuild/linux-loong64@0.24.2': optional: true - '@esbuild/linux-ia32@0.21.5': + '@esbuild/linux-mips64el@0.24.2': optional: true - '@esbuild/linux-loong64@0.21.5': + '@esbuild/linux-ppc64@0.24.2': optional: true - '@esbuild/linux-mips64el@0.21.5': + '@esbuild/linux-riscv64@0.24.2': optional: true - '@esbuild/linux-ppc64@0.21.5': + '@esbuild/linux-s390x@0.24.2': optional: true - '@esbuild/linux-riscv64@0.21.5': + '@esbuild/linux-x64@0.24.2': optional: true - '@esbuild/linux-s390x@0.21.5': + '@esbuild/netbsd-arm64@0.24.2': optional: true - '@esbuild/linux-x64@0.21.5': + '@esbuild/netbsd-x64@0.24.2': optional: true - '@esbuild/netbsd-x64@0.21.5': + '@esbuild/openbsd-arm64@0.24.2': optional: true - '@esbuild/openbsd-x64@0.21.5': + '@esbuild/openbsd-x64@0.24.2': optional: true - '@esbuild/sunos-x64@0.21.5': + '@esbuild/sunos-x64@0.24.2': optional: true - '@esbuild/win32-arm64@0.21.5': + '@esbuild/win32-arm64@0.24.2': optional: true - '@esbuild/win32-ia32@0.21.5': + '@esbuild/win32-ia32@0.24.2': optional: true - '@esbuild/win32-x64@0.21.5': + '@esbuild/win32-x64@0.24.2': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@fastify/deepmerge@2.0.1': {} + + '@gerrit0/mini-shiki@1.27.2': dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 + '@shikijs/engine-oniguruma': 1.27.2 + '@shikijs/types': 1.27.2 + '@shikijs/vscode-textmate': 10.0.1 - '@eslint-community/regexpp@4.11.0': {} + '@hutson/parse-repository-url@5.0.0': {} - '@eslint-community/regexpp@4.8.0': {} + '@iarna/toml@2.2.5': {} - '@eslint/eslintrc@2.1.4': + '@inquirer/checkbox@4.0.6(@types/node@22.10.7)': dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.21.0 - ignore: 5.2.4 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 + '@inquirer/core': 10.1.4(@types/node@22.10.7) + '@inquirer/figures': 1.0.9 + '@inquirer/type': 3.0.2(@types/node@22.10.7) + '@types/node': 22.10.7 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + + '@inquirer/confirm@5.1.3(@types/node@22.10.7)': + dependencies: + '@inquirer/core': 10.1.4(@types/node@22.10.7) + '@inquirer/type': 3.0.2(@types/node@22.10.7) + '@types/node': 22.10.7 + + '@inquirer/core@10.1.4(@types/node@22.10.7)': + dependencies: + '@inquirer/figures': 1.0.9 + '@inquirer/type': 3.0.2(@types/node@22.10.7) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + strip-ansi: 6.0.1 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 transitivePeerDependencies: - - supports-color + - '@types/node' - '@eslint/js@8.57.0': {} + '@inquirer/editor@4.2.3(@types/node@22.10.7)': + dependencies: + '@inquirer/core': 10.1.4(@types/node@22.10.7) + '@inquirer/type': 3.0.2(@types/node@22.10.7) + '@types/node': 22.10.7 + external-editor: 3.1.0 + + '@inquirer/expand@4.0.6(@types/node@22.10.7)': + dependencies: + '@inquirer/core': 10.1.4(@types/node@22.10.7) + '@inquirer/type': 3.0.2(@types/node@22.10.7) + '@types/node': 22.10.7 + yoctocolors-cjs: 2.1.2 - '@fastify/deepmerge@1.3.0': {} + '@inquirer/figures@1.0.9': {} - '@humanwhocodes/config-array@0.11.14': + '@inquirer/input@4.1.3(@types/node@22.10.7)': dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@inquirer/core': 10.1.4(@types/node@22.10.7) + '@inquirer/type': 3.0.2(@types/node@22.10.7) + '@types/node': 22.10.7 - '@humanwhocodes/module-importer@1.0.1': {} + '@inquirer/number@3.0.6(@types/node@22.10.7)': + dependencies: + '@inquirer/core': 10.1.4(@types/node@22.10.7) + '@inquirer/type': 3.0.2(@types/node@22.10.7) + '@types/node': 22.10.7 - '@humanwhocodes/object-schema@2.0.2': {} + '@inquirer/password@4.0.6(@types/node@22.10.7)': + dependencies: + '@inquirer/core': 10.1.4(@types/node@22.10.7) + '@inquirer/type': 3.0.2(@types/node@22.10.7) + '@types/node': 22.10.7 + ansi-escapes: 4.3.2 - '@hutson/parse-repository-url@5.0.0': {} + '@inquirer/prompts@7.2.3(@types/node@22.10.7)': + dependencies: + '@inquirer/checkbox': 4.0.6(@types/node@22.10.7) + '@inquirer/confirm': 5.1.3(@types/node@22.10.7) + '@inquirer/editor': 4.2.3(@types/node@22.10.7) + '@inquirer/expand': 4.0.6(@types/node@22.10.7) + '@inquirer/input': 4.1.3(@types/node@22.10.7) + '@inquirer/number': 3.0.6(@types/node@22.10.7) + '@inquirer/password': 4.0.6(@types/node@22.10.7) + '@inquirer/rawlist': 4.0.6(@types/node@22.10.7) + '@inquirer/search': 3.0.6(@types/node@22.10.7) + '@inquirer/select': 4.0.6(@types/node@22.10.7) + '@types/node': 22.10.7 + + '@inquirer/rawlist@4.0.6(@types/node@22.10.7)': + dependencies: + '@inquirer/core': 10.1.4(@types/node@22.10.7) + '@inquirer/type': 3.0.2(@types/node@22.10.7) + '@types/node': 22.10.7 + yoctocolors-cjs: 2.1.2 - '@iarna/toml@2.2.5': {} + '@inquirer/search@3.0.6(@types/node@22.10.7)': + dependencies: + '@inquirer/core': 10.1.4(@types/node@22.10.7) + '@inquirer/figures': 1.0.9 + '@inquirer/type': 3.0.2(@types/node@22.10.7) + '@types/node': 22.10.7 + yoctocolors-cjs: 2.1.2 - '@inquirer/figures@1.0.5': {} + '@inquirer/select@4.0.6(@types/node@22.10.7)': + dependencies: + '@inquirer/core': 10.1.4(@types/node@22.10.7) + '@inquirer/figures': 1.0.9 + '@inquirer/type': 3.0.2(@types/node@22.10.7) + '@types/node': 22.10.7 + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 - '@isaacs/cliui@8.0.2': + '@inquirer/type@3.0.2(@types/node@22.10.7)': dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 + '@types/node': 22.10.7 '@istanbuljs/load-nyc-config@1.1.0': dependencies: @@ -4744,7 +4294,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 22.10.7 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -4757,14 +4307,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 22.10.7 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.5.9) + jest-config: 29.7.0(@types/node@22.10.7) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -4789,13 +4339,9 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 22.10.7 jest-mock: 29.7.0 - '@jest/expect-utils@29.6.4': - dependencies: - jest-get-type: 29.6.3 - '@jest/expect-utils@29.7.0': dependencies: jest-get-type: 29.6.3 @@ -4811,7 +4357,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.5.9 + '@types/node': 22.10.7 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -4833,7 +4379,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.19 - '@types/node': 20.5.9 + '@types/node': 22.10.7 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -4903,7 +4449,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.5.9 + '@types/node': 22.10.7 '@types/yargs': 17.0.24 chalk: 4.1.2 @@ -4926,40 +4472,40 @@ snapshots: '@jridgewell/resolve-uri': 3.1.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@microsoft/api-extractor-model@7.29.5(@types/node@20.5.9)': + '@microsoft/api-extractor-model@7.30.2(@types/node@22.10.7)': dependencies: - '@microsoft/tsdoc': 0.15.0 - '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.6.0(@types/node@20.5.9) + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.10.2(@types/node@22.10.7) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.47.6(@types/node@20.5.9)': + '@microsoft/api-extractor@7.49.1(@types/node@22.10.7)': dependencies: - '@microsoft/api-extractor-model': 7.29.5(@types/node@20.5.9) - '@microsoft/tsdoc': 0.15.0 - '@microsoft/tsdoc-config': 0.17.0 - '@rushstack/node-core-library': 5.6.0(@types/node@20.5.9) + '@microsoft/api-extractor-model': 7.30.2(@types/node@22.10.7) + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.10.2(@types/node@22.10.7) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.13.4(@types/node@20.5.9) - '@rushstack/ts-command-line': 4.22.5(@types/node@20.5.9) + '@rushstack/terminal': 0.14.5(@types/node@22.10.7) + '@rushstack/ts-command-line': 4.23.3(@types/node@22.10.7) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.4 semver: 7.5.4 source-map: 0.6.1 - typescript: 5.4.2 + typescript: 5.7.2 transitivePeerDependencies: - '@types/node' - '@microsoft/tsdoc-config@0.17.0': + '@microsoft/tsdoc-config@0.17.1': dependencies: - '@microsoft/tsdoc': 0.15.0 + '@microsoft/tsdoc': 0.15.1 ajv: 8.12.0 jju: 1.4.0 resolve: 1.22.4 - '@microsoft/tsdoc@0.15.0': {} + '@microsoft/tsdoc@0.15.1': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -4973,75 +4519,74 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.15.0 - '@octokit/auth-token@4.0.0': {} + '@octokit/auth-token@5.1.1': {} - '@octokit/core@5.1.0': + '@octokit/core@6.1.3': dependencies: - '@octokit/auth-token': 4.0.0 - '@octokit/graphql': 7.0.2 - '@octokit/request': 8.2.0 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.6.0 - before-after-hook: 2.2.3 - universal-user-agent: 6.0.0 + '@octokit/auth-token': 5.1.1 + '@octokit/graphql': 8.1.2 + '@octokit/request': 9.2.0 + '@octokit/request-error': 6.1.6 + '@octokit/types': 13.7.0 + before-after-hook: 3.0.2 + universal-user-agent: 7.0.2 - '@octokit/endpoint@9.0.4': + '@octokit/endpoint@10.1.2': dependencies: - '@octokit/types': 12.6.0 - universal-user-agent: 6.0.0 + '@octokit/types': 13.7.0 + universal-user-agent: 7.0.2 - '@octokit/graphql@7.0.2': + '@octokit/graphql@8.1.2': dependencies: - '@octokit/request': 8.2.0 - '@octokit/types': 12.6.0 - universal-user-agent: 6.0.0 - - '@octokit/openapi-types@20.0.0': {} + '@octokit/request': 9.2.0 + '@octokit/types': 13.7.0 + universal-user-agent: 7.0.2 '@octokit/openapi-types@22.2.0': {} - '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@5.1.0)': + '@octokit/openapi-types@23.0.1': {} + + '@octokit/plugin-paginate-rest@11.3.1(@octokit/core@6.1.3)': dependencies: - '@octokit/core': 5.1.0 + '@octokit/core': 6.1.3 '@octokit/types': 13.5.0 - '@octokit/plugin-request-log@4.0.1(@octokit/core@5.1.0)': + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.3)': dependencies: - '@octokit/core': 5.1.0 + '@octokit/core': 6.1.3 - '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@5.1.0)': + '@octokit/plugin-rest-endpoint-methods@13.2.2(@octokit/core@6.1.3)': dependencies: - '@octokit/core': 5.1.0 + '@octokit/core': 6.1.3 '@octokit/types': 13.5.0 - '@octokit/request-error@5.0.1': - dependencies: - '@octokit/types': 12.6.0 - deprecation: 2.3.1 - once: 1.4.0 - - '@octokit/request@8.2.0': + '@octokit/request-error@6.1.6': dependencies: - '@octokit/endpoint': 9.0.4 - '@octokit/request-error': 5.0.1 - '@octokit/types': 12.6.0 - universal-user-agent: 6.0.0 + '@octokit/types': 13.7.0 - '@octokit/rest@20.1.1': + '@octokit/request@9.2.0': dependencies: - '@octokit/core': 5.1.0 - '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@5.1.0) - '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.1.0) - '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@5.1.0) + '@octokit/endpoint': 10.1.2 + '@octokit/request-error': 6.1.6 + '@octokit/types': 13.7.0 + fast-content-type-parse: 2.0.1 + universal-user-agent: 7.0.2 - '@octokit/types@12.6.0': + '@octokit/rest@21.0.2': dependencies: - '@octokit/openapi-types': 20.0.0 + '@octokit/core': 6.1.3 + '@octokit/plugin-paginate-rest': 11.3.1(@octokit/core@6.1.3) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.3) + '@octokit/plugin-rest-endpoint-methods': 13.2.2(@octokit/core@6.1.3) '@octokit/types@13.5.0': dependencies: '@octokit/openapi-types': 22.2.0 + '@octokit/types@13.7.0': + dependencies: + '@octokit/openapi-types': 23.0.1 + '@peculiar/asn1-schema@2.3.8': dependencies: asn1js: 3.0.5 @@ -5060,9 +4605,6 @@ snapshots: tslib: 2.6.2 webcrypto-core: 1.8.0 - '@pkgjs/parseargs@0.11.0': - optional: true - '@pnpm/config.env-replace@1.1.0': {} '@pnpm/network.ca-file@1.0.2': @@ -5075,107 +4617,120 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - '@release-it/conventional-changelog@8.0.1(release-it@17.6.0(typescript@5.5.4))': + '@release-it/conventional-changelog@10.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)(release-it@18.1.1(@types/node@22.10.7)(typescript@5.7.3))': dependencies: concat-stream: 2.0.0 - conventional-changelog: 5.1.0 - conventional-recommended-bump: 9.0.0 - release-it: 17.6.0(typescript@5.5.4) - semver: 7.5.4 + conventional-changelog: 6.0.0(conventional-commits-filter@5.0.0) + conventional-recommended-bump: 10.0.0 + git-semver-tags: 8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) + release-it: 18.1.1(@types/node@22.10.7)(typescript@5.7.3) + semver: 7.6.3 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser - '@rollup/plugin-commonjs@26.0.1(rollup@4.21.0)': + '@rollup/plugin-commonjs@28.0.2(rollup@4.30.1)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.0) + '@rollup/pluginutils': 5.1.0(rollup@4.30.1) commondir: 1.0.1 estree-walker: 2.0.2 - glob: 10.4.5 + fdir: 6.4.3(picomatch@4.0.2) is-reference: 1.2.1 - magic-string: 0.30.8 + magic-string: 0.30.11 + picomatch: 4.0.2 optionalDependencies: - rollup: 4.21.0 + rollup: 4.30.1 - '@rollup/plugin-json@6.1.0(rollup@4.21.0)': + '@rollup/plugin-json@6.1.0(rollup@4.30.1)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.21.0) + '@rollup/pluginutils': 5.1.0(rollup@4.30.1) optionalDependencies: - rollup: 4.21.0 + rollup: 4.30.1 - '@rollup/plugin-node-resolve@15.2.3(rollup@4.21.0)': + '@rollup/plugin-node-resolve@16.0.0(rollup@4.30.1)': dependencies: - '@rollup/pluginutils': 5.0.4(rollup@4.21.0) + '@rollup/pluginutils': 5.1.0(rollup@4.30.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 - is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.4 optionalDependencies: - rollup: 4.21.0 + rollup: 4.30.1 - '@rollup/pluginutils@5.0.4(rollup@4.21.0)': + '@rollup/pluginutils@5.1.0(rollup@4.30.1)': dependencies: '@types/estree': 1.0.1 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.21.0 + rollup: 4.30.1 - '@rollup/pluginutils@5.1.0(rollup@4.21.0)': + '@rollup/pluginutils@5.1.4(rollup@4.30.1)': dependencies: - '@types/estree': 1.0.1 + '@types/estree': 1.0.5 estree-walker: 2.0.2 - picomatch: 2.3.1 + picomatch: 4.0.2 optionalDependencies: - rollup: 4.21.0 + rollup: 4.30.1 + + '@rollup/rollup-android-arm-eabi@4.30.1': + optional: true + + '@rollup/rollup-android-arm64@4.30.1': + optional: true + + '@rollup/rollup-darwin-arm64@4.30.1': + optional: true - '@rollup/rollup-android-arm-eabi@4.21.0': + '@rollup/rollup-darwin-x64@4.30.1': optional: true - '@rollup/rollup-android-arm64@4.21.0': + '@rollup/rollup-freebsd-arm64@4.30.1': optional: true - '@rollup/rollup-darwin-arm64@4.21.0': + '@rollup/rollup-freebsd-x64@4.30.1': optional: true - '@rollup/rollup-darwin-x64@4.21.0': + '@rollup/rollup-linux-arm-gnueabihf@4.30.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.21.0': + '@rollup/rollup-linux-arm-musleabihf@4.30.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.21.0': + '@rollup/rollup-linux-arm64-gnu@4.30.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.21.0': + '@rollup/rollup-linux-arm64-musl@4.30.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.21.0': + '@rollup/rollup-linux-loongarch64-gnu@4.30.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.30.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.21.0': + '@rollup/rollup-linux-riscv64-gnu@4.30.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.21.0': + '@rollup/rollup-linux-s390x-gnu@4.30.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.21.0': + '@rollup/rollup-linux-x64-gnu@4.30.1': optional: true - '@rollup/rollup-linux-x64-musl@4.21.0': + '@rollup/rollup-linux-x64-musl@4.30.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.21.0': + '@rollup/rollup-win32-arm64-msvc@4.30.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.21.0': + '@rollup/rollup-win32-ia32-msvc@4.30.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.21.0': + '@rollup/rollup-win32-x64-msvc@4.30.1': optional: true - '@rushstack/node-core-library@5.6.0(@types/node@20.5.9)': + '@rushstack/node-core-library@5.10.2(@types/node@22.10.7)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -5186,39 +4741,49 @@ snapshots: resolve: 1.22.4 semver: 7.5.4 optionalDependencies: - '@types/node': 20.5.9 + '@types/node': 22.10.7 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.4 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.13.4(@types/node@20.5.9)': + '@rushstack/terminal@0.14.5(@types/node@22.10.7)': dependencies: - '@rushstack/node-core-library': 5.6.0(@types/node@20.5.9) + '@rushstack/node-core-library': 5.10.2(@types/node@22.10.7) supports-color: 8.1.1 optionalDependencies: - '@types/node': 20.5.9 + '@types/node': 22.10.7 - '@rushstack/ts-command-line@4.22.5(@types/node@20.5.9)': + '@rushstack/ts-command-line@4.23.3(@types/node@22.10.7)': dependencies: - '@rushstack/terminal': 0.13.4(@types/node@20.5.9) + '@rushstack/terminal': 0.14.5(@types/node@22.10.7) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 transitivePeerDependencies: - '@types/node' - '@shikijs/core@1.14.1': + '@sec-ant/readable-stream@0.4.1': {} + + '@shikijs/engine-oniguruma@1.27.2': + dependencies: + '@shikijs/types': 1.27.2 + '@shikijs/vscode-textmate': 10.0.1 + + '@shikijs/types@1.27.2': dependencies: + '@shikijs/vscode-textmate': 10.0.1 '@types/hast': 3.0.4 - '@sinclair/typebox@0.27.8': {} + '@shikijs/vscode-textmate@10.0.1': {} - '@sindresorhus/is@5.6.0': {} + '@sinclair/typebox@0.27.8': {} '@sindresorhus/merge-streams@2.3.0': {} + '@sindresorhus/merge-streams@4.0.0': {} + '@sinonjs/commons@3.0.0': dependencies: type-detect: 4.0.8 @@ -5227,62 +4792,58 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.0 - '@swc/core-darwin-arm64@1.7.14': + '@swc/core-darwin-arm64@1.10.7': optional: true - '@swc/core-darwin-x64@1.7.14': + '@swc/core-darwin-x64@1.10.7': optional: true - '@swc/core-linux-arm-gnueabihf@1.7.14': + '@swc/core-linux-arm-gnueabihf@1.10.7': optional: true - '@swc/core-linux-arm64-gnu@1.7.14': + '@swc/core-linux-arm64-gnu@1.10.7': optional: true - '@swc/core-linux-arm64-musl@1.7.14': + '@swc/core-linux-arm64-musl@1.10.7': optional: true - '@swc/core-linux-x64-gnu@1.7.14': + '@swc/core-linux-x64-gnu@1.10.7': optional: true - '@swc/core-linux-x64-musl@1.7.14': + '@swc/core-linux-x64-musl@1.10.7': optional: true - '@swc/core-win32-arm64-msvc@1.7.14': + '@swc/core-win32-arm64-msvc@1.10.7': optional: true - '@swc/core-win32-ia32-msvc@1.7.14': + '@swc/core-win32-ia32-msvc@1.10.7': optional: true - '@swc/core-win32-x64-msvc@1.7.14': + '@swc/core-win32-x64-msvc@1.10.7': optional: true - '@swc/core@1.7.14': + '@swc/core@1.10.7': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.12 + '@swc/types': 0.1.17 optionalDependencies: - '@swc/core-darwin-arm64': 1.7.14 - '@swc/core-darwin-x64': 1.7.14 - '@swc/core-linux-arm-gnueabihf': 1.7.14 - '@swc/core-linux-arm64-gnu': 1.7.14 - '@swc/core-linux-arm64-musl': 1.7.14 - '@swc/core-linux-x64-gnu': 1.7.14 - '@swc/core-linux-x64-musl': 1.7.14 - '@swc/core-win32-arm64-msvc': 1.7.14 - '@swc/core-win32-ia32-msvc': 1.7.14 - '@swc/core-win32-x64-msvc': 1.7.14 + '@swc/core-darwin-arm64': 1.10.7 + '@swc/core-darwin-x64': 1.10.7 + '@swc/core-linux-arm-gnueabihf': 1.10.7 + '@swc/core-linux-arm64-gnu': 1.10.7 + '@swc/core-linux-arm64-musl': 1.10.7 + '@swc/core-linux-x64-gnu': 1.10.7 + '@swc/core-linux-x64-musl': 1.10.7 + '@swc/core-win32-arm64-msvc': 1.10.7 + '@swc/core-win32-ia32-msvc': 1.10.7 + '@swc/core-win32-x64-msvc': 1.10.7 '@swc/counter@0.1.3': {} - '@swc/types@0.1.12': + '@swc/types@0.1.17': dependencies: '@swc/counter': 0.1.3 - '@szmarczak/http-timer@5.0.1': - dependencies: - defer-to-connect: 2.0.1 - '@tootallnate/once@2.0.0': {} '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -5314,22 +4875,22 @@ snapshots: '@types/conventional-commits-parser@5.0.0': dependencies: - '@types/node': 20.5.9 + '@types/node': 22.10.7 '@types/estree@1.0.1': {} '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} + '@types/graceful-fs@4.1.6': dependencies: - '@types/node': 20.5.9 + '@types/node': 22.10.7 '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 - '@types/http-cache-semantics@4.0.1': {} - '@types/istanbul-lib-coverage@2.0.4': {} '@types/istanbul-lib-report@3.0.0': @@ -5340,32 +4901,32 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.0 - '@types/jest@29.5.12': + '@types/jest@29.5.14': dependencies: - expect: 29.6.4 - pretty-format: 29.6.3 + expect: 29.7.0 + pretty-format: 29.7.0 '@types/jsdom@20.0.1': dependencies: - '@types/node': 20.5.9 + '@types/node': 22.10.7 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 - '@types/json-schema@7.0.12': {} - - '@types/json5@0.0.29': {} + '@types/jsonwebtoken@9.0.7': + dependencies: + '@types/node': 22.10.7 - '@types/jsonwebtoken@9.0.6': + '@types/node@22.10.7': dependencies: - '@types/node': 20.5.9 + undici-types: 6.20.0 - '@types/node@20.5.9': {} + '@types/normalize-package-data@2.4.4': {} - '@types/normalize-package-data@2.4.1': {} + '@types/parse-path@7.0.3': {} '@types/resolve@1.20.2': {} - '@types/semver@7.5.1': {} + '@types/semver@7.5.8': {} '@types/stack-utils@2.0.1': {} @@ -5379,142 +4940,10 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.0 - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': + JSONStream@1.3.5: dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.2 - natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/experimental-utils@5.62.0(eslint@8.57.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.6 - eslint: 8.57.0 - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - - '@typescript-eslint/scope-manager@7.18.0': - dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 - - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - debug: 4.3.6 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@5.62.0': {} - - '@typescript-eslint/types@7.18.0': {} - - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4)': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.6 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.6.2 - tsutils: 3.21.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': - dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.3.6 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.1 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) - eslint: 8.57.0 - eslint-scope: 5.1.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - eslint: 8.57.0 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@7.18.0': - dependencies: - '@typescript-eslint/types': 7.18.0 - eslint-visitor-keys: 3.4.3 - - '@ungap/structured-clone@1.2.0': {} - - JSONStream@1.3.5: - dependencies: - jsonparse: 1.3.1 - through: 2.3.8 + jsonparse: 1.3.1 + through: 2.3.8 abab@2.0.6: {} @@ -5523,10 +4952,6 @@ snapshots: acorn: 8.10.0 acorn-walk: 8.2.0 - acorn-jsx@5.3.2(acorn@8.10.0): - dependencies: - acorn: 8.10.0 - acorn-walk@8.2.0: {} acorn@8.10.0: {} @@ -5535,15 +4960,11 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.6 + debug: 4.4.0 transitivePeerDependencies: - supports-color - agent-base@7.1.0: - dependencies: - debug: 4.3.6 - transitivePeerDependencies: - - supports-color + agent-base@7.1.3: {} ajv-draft-04@1.0.0(ajv@8.13.0): optionalDependencies: @@ -5553,13 +4974,6 @@ snapshots: optionalDependencies: ajv: 8.13.0 - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ajv@8.12.0: dependencies: fast-deep-equal: 3.1.3 @@ -5613,55 +5027,8 @@ snapshots: argparse@2.0.1: {} - array-buffer-byte-length@1.0.0: - dependencies: - call-bind: 1.0.2 - is-array-buffer: 3.0.2 - array-ify@1.0.0: {} - array-includes@3.1.7: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 - is-string: 1.0.7 - - array-union@2.1.0: {} - - array.prototype.findlastindex@1.2.3: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - get-intrinsic: 1.2.1 - - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - - array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - es-shim-unscopables: 1.0.0 - - arraybuffer.prototype.slice@1.0.2: - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - asn1js@3.0.5: dependencies: pvtsutils: 1.3.5 @@ -5680,7 +5047,10 @@ snapshots: asynckit@0.4.0: {} - available-typed-arrays@1.0.5: {} + atomically@2.0.3: + dependencies: + stubborn-fs: 1.2.5 + when-exit: 2.1.4 babel-jest@29.7.0(@babel/core@7.22.15): dependencies: @@ -5740,24 +5110,18 @@ snapshots: basic-ftp@5.0.3: {} - before-after-hook@2.2.3: {} + before-after-hook@3.0.2: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - - boxen@7.1.1: + boxen@8.0.1: dependencies: ansi-align: 3.0.1 - camelcase: 7.0.1 - chalk: 5.3.0 + camelcase: 8.0.0 + chalk: 5.4.1 cli-boxes: 3.0.0 - string-width: 5.1.2 - type-fest: 2.19.0 - widest-line: 4.0.1 - wrap-ansi: 8.1.0 + string-width: 7.2.0 + type-fest: 4.32.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.0 brace-expansion@1.1.11: dependencies: @@ -5795,41 +5159,17 @@ snapshots: buffer-from@1.1.2: {} - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - builtin-modules@3.3.0: {} - bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 - cacheable-lookup@7.0.0: {} - - cacheable-request@10.2.13: - dependencies: - '@types/http-cache-semantics': 4.0.1 - get-stream: 6.0.1 - http-cache-semantics: 4.1.1 - keyv: 4.5.3 - mimic-response: 4.0.0 - normalize-url: 8.0.0 - responselike: 3.0.0 - - call-bind@1.0.2: - dependencies: - function-bind: 1.1.1 - get-intrinsic: 1.2.1 - callsites@3.1.0: {} camelcase@5.3.1: {} camelcase@6.3.0: {} - camelcase@7.0.1: {} + camelcase@8.0.0: {} caniuse-lite@1.0.30001527: {} @@ -5846,6 +5186,8 @@ snapshots: chalk@5.3.0: {} + chalk@5.4.1: {} + char-regex@1.0.2: {} chardet@0.7.0: {} @@ -5854,18 +5196,12 @@ snapshots: ci-info@3.8.0: {} + ci-info@4.1.0: {} + cjs-module-lexer@1.2.3: {} cli-boxes@3.0.0: {} - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-cursor@4.0.0: - dependencies: - restore-cursor: 4.0.0 - cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 @@ -5885,8 +5221,6 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone@1.0.4: {} - co@4.6.0: {} collect-v8-coverage@1.0.2: {} @@ -5932,77 +5266,87 @@ snapshots: ini: 1.3.8 proto-list: 1.2.4 - configstore@6.0.0: + configstore@7.0.0: dependencies: - dot-prop: 6.0.1 + atomically: 2.0.3 + dot-prop: 9.0.0 graceful-fs: 4.2.11 - unique-string: 3.0.0 - write-file-atomic: 3.0.3 xdg-basedir: 5.1.0 conventional-changelog-angular@7.0.0: dependencies: compare-func: 2.0.0 - conventional-changelog-atom@4.0.0: {} + conventional-changelog-angular@8.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-atom@5.0.0: {} - conventional-changelog-codemirror@4.0.0: {} + conventional-changelog-codemirror@5.0.0: {} conventional-changelog-conventionalcommits@7.0.2: dependencies: compare-func: 2.0.0 - conventional-changelog-core@7.0.0: + conventional-changelog-conventionalcommits@8.0.0: + dependencies: + compare-func: 2.0.0 + + conventional-changelog-core@8.0.0(conventional-commits-filter@5.0.0): dependencies: '@hutson/parse-repository-url': 5.0.0 add-stream: 1.0.0 - conventional-changelog-writer: 7.0.0 - conventional-commits-parser: 5.0.0 - git-raw-commits: 4.0.0 - git-semver-tags: 7.0.1 + conventional-changelog-writer: 8.0.0 + conventional-commits-parser: 6.0.0 + git-raw-commits: 5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) + git-semver-tags: 8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) hosted-git-info: 7.0.0 normalize-package-data: 6.0.0 - read-pkg: 8.1.0 - read-pkg-up: 10.1.0 + read-package-up: 11.0.0 + read-pkg: 9.0.1 + transitivePeerDependencies: + - conventional-commits-filter - conventional-changelog-ember@4.0.0: {} + conventional-changelog-ember@5.0.0: {} - conventional-changelog-eslint@5.0.0: {} + conventional-changelog-eslint@6.0.0: {} - conventional-changelog-express@4.0.0: {} + conventional-changelog-express@5.0.0: {} - conventional-changelog-jquery@5.0.0: {} + conventional-changelog-jquery@6.0.0: {} - conventional-changelog-jshint@4.0.0: + conventional-changelog-jshint@5.0.0: dependencies: compare-func: 2.0.0 - conventional-changelog-preset-loader@4.1.0: {} + conventional-changelog-preset-loader@5.0.0: {} - conventional-changelog-writer@7.0.0: + conventional-changelog-writer@8.0.0: dependencies: - conventional-commits-filter: 4.0.0 + '@types/semver': 7.5.8 + conventional-commits-filter: 5.0.0 handlebars: 4.7.8 - json-stringify-safe: 5.0.1 - meow: 12.1.1 - semver: 7.6.2 - split2: 4.2.0 - - conventional-changelog@5.1.0: - dependencies: - conventional-changelog-angular: 7.0.0 - conventional-changelog-atom: 4.0.0 - conventional-changelog-codemirror: 4.0.0 - conventional-changelog-conventionalcommits: 7.0.2 - conventional-changelog-core: 7.0.0 - conventional-changelog-ember: 4.0.0 - conventional-changelog-eslint: 5.0.0 - conventional-changelog-express: 4.0.0 - conventional-changelog-jquery: 5.0.0 - conventional-changelog-jshint: 4.0.0 - conventional-changelog-preset-loader: 4.1.0 + meow: 13.2.0 + semver: 7.6.3 + + conventional-changelog@6.0.0(conventional-commits-filter@5.0.0): + dependencies: + conventional-changelog-angular: 8.0.0 + conventional-changelog-atom: 5.0.0 + conventional-changelog-codemirror: 5.0.0 + conventional-changelog-conventionalcommits: 8.0.0 + conventional-changelog-core: 8.0.0(conventional-commits-filter@5.0.0) + conventional-changelog-ember: 5.0.0 + conventional-changelog-eslint: 6.0.0 + conventional-changelog-express: 5.0.0 + conventional-changelog-jquery: 6.0.0 + conventional-changelog-jshint: 5.0.0 + conventional-changelog-preset-loader: 5.0.0 + transitivePeerDependencies: + - conventional-commits-filter - conventional-commits-filter@4.0.0: {} + conventional-commits-filter@5.0.0: {} conventional-commits-parser@5.0.0: dependencies: @@ -6011,42 +5355,45 @@ snapshots: meow: 12.1.1 split2: 4.2.0 - conventional-recommended-bump@9.0.0: + conventional-commits-parser@6.0.0: dependencies: - conventional-changelog-preset-loader: 4.1.0 - conventional-commits-filter: 4.0.0 - conventional-commits-parser: 5.0.0 - git-raw-commits: 4.0.0 - git-semver-tags: 7.0.1 - meow: 12.1.1 + meow: 13.2.0 + + conventional-recommended-bump@10.0.0: + dependencies: + '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) + conventional-changelog-preset-loader: 5.0.0 + conventional-commits-filter: 5.0.0 + conventional-commits-parser: 6.0.0 + meow: 13.2.0 convert-source-map@1.9.0: {} convert-source-map@2.0.0: {} - cosmiconfig-typescript-loader@5.0.0(@types/node@20.5.9)(cosmiconfig@9.0.0(typescript@5.5.4))(typescript@5.5.4): + cosmiconfig-typescript-loader@6.1.0(@types/node@22.10.7)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3): dependencies: - '@types/node': 20.5.9 - cosmiconfig: 9.0.0(typescript@5.5.4) - jiti: 1.21.0 - typescript: 5.5.4 + '@types/node': 22.10.7 + cosmiconfig: 9.0.0(typescript@5.7.3) + jiti: 2.4.2 + typescript: 5.7.3 - cosmiconfig@9.0.0(typescript@5.5.4): + cosmiconfig@9.0.0(typescript@5.7.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.5.4 + typescript: 5.7.3 - create-jest@29.7.0(@types/node@20.5.9): + create-jest@29.7.0(@types/node@22.10.7): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.5.9) + jest-config: 29.7.0(@types/node@22.10.7) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -6067,10 +5414,6 @@ snapshots: crypt@0.0.2: {} - crypto-random-string@4.0.0: - dependencies: - type-fest: 1.4.0 - cssom@0.3.8: {} cssom@0.5.0: {} @@ -6081,8 +5424,6 @@ snapshots: dargs@8.1.0: {} - data-uri-to-buffer@4.0.1: {} - data-uri-to-buffer@5.0.1: {} data-urls@3.0.2: @@ -6091,30 +5432,20 @@ snapshots: whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - debug@3.2.7: - dependencies: - ms: 2.1.3 - - debug@4.3.4: + debug@4.3.6: dependencies: ms: 2.1.2 - debug@4.3.6: + debug@4.4.0: dependencies: - ms: 2.1.2 + ms: 2.1.3 decimal.js@10.4.3: {} - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - dedent@1.5.1: {} deep-extend@0.6.0: {} - deep-is@0.1.4: {} - deepmerge@4.3.1: {} default-browser-id@5.0.0: {} @@ -6124,19 +5455,8 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.0 - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - defer-to-connect@2.0.1: {} - define-lazy-prop@3.0.0: {} - define-properties@1.2.0: - dependencies: - has-property-descriptors: 1.0.0 - object-keys: 1.1.1 - degenerator@5.0.1: dependencies: ast-types: 0.13.4 @@ -6145,24 +5465,10 @@ snapshots: delayed-stream@1.0.0: {} - deprecation@2.3.1: {} - detect-newline@3.1.0: {} diff-sequences@29.6.3: {} - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - domexception@4.0.0: dependencies: webidl-conversions: 7.0.0 @@ -6171,11 +5477,9 @@ snapshots: dependencies: is-obj: 2.0.0 - dot-prop@6.0.1: + dot-prop@9.0.0: dependencies: - is-obj: 2.0.0 - - eastasianwidth@0.2.0: {} + type-fest: 4.32.0 ecdsa-sig-formatter@1.0.11: dependencies: @@ -6193,8 +5497,6 @@ snapshots: emoji-regex@8.0.0: {} - emoji-regex@9.2.2: {} - entities@4.5.0: {} env-paths@2.2.1: {} @@ -6205,91 +5507,35 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.22.1: - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.1 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has: 1.0.3 - has-property-descriptors: 1.0.0 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.5 - is-array-buffer: 3.0.2 - is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-typed-array: 1.1.12 - is-weakref: 1.0.2 - object-inspect: 1.12.3 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.0 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.7 - string.prototype.trimend: 1.0.6 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 - - es-set-tostringtag@2.0.1: - dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 - has-tostringtag: 1.0.0 - - es-shim-unscopables@1.0.0: - dependencies: - has: 1.0.3 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - es6-promisify@7.0.0: {} - esbuild@0.21.5: + esbuild@0.24.2: optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 escalade@3.1.1: {} @@ -6299,8 +5545,6 @@ snapshots: escape-string-regexp@2.0.0: {} - escape-string-regexp@4.0.0: {} - escodegen@2.1.0: dependencies: esprima: 4.0.1 @@ -6309,135 +5553,8 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.4 - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0): - dependencies: - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) - hasown: 2.0.2 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - - eslint-plugin-typescript-sort-keys@3.2.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4): - dependencies: - '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 - json-schema: 0.4.0 - natural-compare-lite: 1.4.0 - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - eslint-scope@5.1.1: - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint@8.57.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.8.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.21.0 - graphemer: 1.4.0 - ignore: 5.2.4 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@9.6.1: - dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) - eslint-visitor-keys: 3.4.3 - esprima@4.0.1: {} - esquery@1.5.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@4.3.0: {} - estraverse@5.3.0: {} estree-walker@0.6.1: {} @@ -6472,15 +5589,22 @@ snapshots: signal-exit: 4.1.0 strip-final-newline: 3.0.0 - exit@0.1.2: {} - - expect@29.6.4: + execa@9.5.2: dependencies: - '@jest/expect-utils': 29.6.4 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.6.4 - jest-message-util: 29.6.3 - jest-util: 29.6.3 + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.3 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.0 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + + exit@0.1.2: {} expect@29.7.0: dependencies: @@ -6496,6 +5620,8 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 + fast-content-type-parse@2.0.1: {} + fast-deep-equal@3.1.3: {} fast-glob@3.3.2: @@ -6504,12 +5630,10 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.7 fast-json-stable-stringify@2.1.0: {} - fast-levenshtein@2.0.6: {} - fastq@1.15.0: dependencies: reusify: 1.0.4 @@ -6518,14 +5642,13 @@ snapshots: dependencies: bser: 2.1.1 - fetch-blob@3.2.0: - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 3.2.1 + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 - file-entry-cache@6.0.1: + figures@6.1.0: dependencies: - flat-cache: 3.1.0 + is-unicode-supported: 2.0.0 filelist@1.0.4: dependencies: @@ -6539,56 +5662,25 @@ snapshots: dependencies: to-regex-range: 5.0.1 + find-up-simple@1.0.0: {} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - find-up@6.3.0: - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - find-up@7.0.0: dependencies: locate-path: 7.2.0 path-exists: 5.0.0 unicorn-magic: 0.1.0 - flat-cache@3.1.0: - dependencies: - flatted: 3.2.7 - keyv: 4.5.3 - rimraf: 3.0.2 - - flatted@3.2.7: {} - - for-each@0.3.3: - dependencies: - is-callable: 1.2.7 - - foreground-child@3.3.0: - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 - - form-data-encoder@2.1.4: {} - form-data@4.0.0: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - formdata-polyfill@4.0.10: - dependencies: - fetch-blob: 3.2.0 - fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -6606,44 +5698,26 @@ snapshots: fsevents@2.3.3: optional: true - function-bind@1.1.1: {} - function-bind@1.1.2: {} - function.prototype.name@1.1.6: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - functions-have-names: 1.2.3 - - functions-have-names@1.2.3: {} - gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} get-east-asian-width@1.2.0: {} - get-intrinsic@1.2.1: - dependencies: - function-bind: 1.1.1 - has: 1.0.3 - has-proto: 1.0.1 - has-symbols: 1.0.3 - get-package-type@0.1.0: {} get-stream@6.0.1: {} get-stream@8.0.1: {} - get-symbol-description@1.0.0: + get-stream@9.0.1: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 - get-tsconfig@4.7.3: + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -6651,7 +5725,7 @@ snapshots: dependencies: basic-ftp: 5.0.3 data-uri-to-buffer: 5.0.1 - debug: 4.3.6 + debug: 4.4.0 fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -6662,37 +5736,35 @@ snapshots: meow: 12.1.1 split2: 4.2.0 - git-semver-tags@7.0.1: + git-raw-commits@5.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0): dependencies: - meow: 12.1.1 - semver: 7.5.4 + '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) + meow: 13.2.0 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser - git-up@7.0.0: + git-semver-tags@8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0): dependencies: - is-ssh: 1.4.0 - parse-url: 8.1.0 + '@conventional-changelog/git-client': 1.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) + meow: 13.2.0 + transitivePeerDependencies: + - conventional-commits-filter + - conventional-commits-parser - git-url-parse@14.0.0: + git-up@8.0.0: dependencies: - git-up: 7.0.0 + is-ssh: 1.4.0 + parse-url: 9.2.0 - glob-parent@5.1.2: + git-url-parse@16.0.0: dependencies: - is-glob: 4.0.3 + git-up: 8.0.0 - glob-parent@6.0.2: + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - glob@10.4.5: - dependencies: - foreground-child: 3.3.0 - jackspeak: 3.4.3 - minimatch: 9.0.5 - minipass: 7.1.2 - package-json-from-dist: 1.0.0 - path-scurry: 1.11.1 - glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -6708,23 +5780,6 @@ snapshots: globals@11.12.0: {} - globals@13.21.0: - dependencies: - type-fest: 0.20.2 - - globalthis@1.0.3: - dependencies: - define-properties: 1.2.0 - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.2 - merge2: 1.4.1 - slash: 3.0.0 - globby@14.0.2: dependencies: '@sindresorhus/merge-streams': 2.3.0 @@ -6734,30 +5789,10 @@ snapshots: slash: 5.1.0 unicorn-magic: 0.1.0 - gopd@1.0.1: - dependencies: - get-intrinsic: 1.2.1 - - got@13.0.0: - dependencies: - '@sindresorhus/is': 5.6.0 - '@szmarczak/http-timer': 5.0.1 - cacheable-lookup: 7.0.0 - cacheable-request: 10.2.13 - decompress-response: 6.0.0 - form-data-encoder: 2.1.4 - get-stream: 6.0.1 - http2-wrapper: 2.2.0 - lowercase-keys: 3.0.0 - p-cancelable: 3.0.0 - responselike: 3.0.0 - graceful-fs@4.2.10: {} graceful-fs@4.2.11: {} - graphemer@1.4.0: {} - handlebars@4.7.8: dependencies: minimist: 1.2.8 @@ -6767,35 +5802,17 @@ snapshots: optionalDependencies: uglify-js: 3.17.4 - has-bigints@1.0.2: {} - has-flag@3.0.0: {} has-flag@4.0.0: {} - has-property-descriptors@1.0.0: - dependencies: - get-intrinsic: 1.2.1 - - has-proto@1.0.1: {} - - has-symbols@1.0.3: {} - - has-tostringtag@1.0.0: - dependencies: - has-symbols: 1.0.3 - - has@1.0.3: - dependencies: - function-bind: 1.1.1 - hasown@2.0.2: dependencies: function-bind: 1.1.2 hosted-git-info@7.0.0: dependencies: - lru-cache: 10.0.1 + lru-cache: 10.4.3 html-encoding-sniffer@3.0.0: dependencies: @@ -6803,39 +5820,32 @@ snapshots: html-escaper@2.0.2: {} - http-cache-semantics@4.1.1: {} - http-proxy-agent@5.0.0: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.6 + debug: 4.4.0 transitivePeerDependencies: - supports-color http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.0 - debug: 4.3.6 + agent-base: 7.1.3 + debug: 4.4.0 transitivePeerDependencies: - supports-color - http2-wrapper@2.2.0: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.6 + debug: 4.4.0 transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.4: + https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.0 - debug: 4.3.6 + agent-base: 7.1.3 + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -6843,7 +5853,9 @@ snapshots: human-signals@5.0.0: {} - husky@9.1.4: {} + human-signals@8.0.0: {} + + husky@9.1.7: {} iconv-lite@0.4.24: dependencies: @@ -6853,10 +5865,6 @@ snapshots: dependencies: safer-buffer: 2.1.2 - ieee754@1.2.1: {} - - ignore@5.2.4: {} - ignore@5.3.2: {} import-fresh@3.3.0: @@ -6875,6 +5883,8 @@ snapshots: imurmurhash@0.1.4: {} + index-to-position@0.1.2: {} + inflight@1.0.6: dependencies: once: 1.4.0 @@ -6886,74 +5896,32 @@ snapshots: ini@4.1.1: {} - inquirer@9.3.2: + inquirer@12.3.0(@types/node@22.10.7): dependencies: - '@inquirer/figures': 1.0.5 + '@inquirer/core': 10.1.4(@types/node@22.10.7) + '@inquirer/prompts': 7.2.3(@types/node@22.10.7) + '@inquirer/type': 3.0.2(@types/node@22.10.7) + '@types/node': 22.10.7 ansi-escapes: 4.3.2 - cli-width: 4.1.0 - external-editor: 3.1.0 - mute-stream: 1.0.0 - ora: 5.4.1 + mute-stream: 2.0.0 run-async: 3.0.0 rxjs: 7.8.1 - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 - - internal-slot@1.0.5: - dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 - side-channel: 1.0.4 - - interpret@1.4.0: {} - - ip@1.1.8: {} - - ip@2.0.0: {} - - is-array-buffer@3.0.2: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 - - is-arrayish@0.2.1: {} - - is-bigint@1.0.4: - dependencies: - has-bigints: 1.0.2 - - is-boolean-object@1.1.2: - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - is-buffer@1.1.6: {} + interpret@1.4.0: {} - is-builtin-module@3.2.1: + ip-address@9.0.5: dependencies: - builtin-modules: 3.3.0 + jsbn: 1.1.0 + sprintf-js: 1.1.3 - is-callable@1.2.7: {} - - is-ci@3.0.1: - dependencies: - ci-info: 3.8.0 + is-arrayish@0.2.1: {} - is-core-module@2.13.0: - dependencies: - has: 1.0.3 + is-buffer@1.1.6: {} is-core-module@2.13.1: dependencies: hasown: 2.0.2 - is-date-object@1.0.5: - dependencies: - has-tostringtag: 1.0.0 - is-docker@3.0.0: {} is-extglob@2.1.1: {} @@ -6972,7 +5940,7 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-in-ci@0.1.0: {} + is-in-ci@1.0.0: {} is-inside-container@1.0.0: dependencies: @@ -6983,43 +5951,26 @@ snapshots: global-directory: 4.0.1 is-path-inside: 4.0.0 - is-interactive@1.0.0: {} - is-interactive@2.0.0: {} is-module@1.0.0: {} - is-negative-zero@2.0.2: {} - is-npm@6.0.0: {} - is-number-object@1.0.7: - dependencies: - has-tostringtag: 1.0.0 - is-number@7.0.0: {} is-obj@2.0.0: {} - is-path-inside@3.0.3: {} - is-path-inside@4.0.0: {} + is-plain-obj@4.1.0: {} + is-potential-custom-element-name@1.0.1: {} is-reference@1.2.1: dependencies: '@types/estree': 1.0.5 - is-regex@1.1.4: - dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 - - is-shared-array-buffer@1.0.2: - dependencies: - call-bind: 1.0.2 - is-ssh@1.4.0: dependencies: protocols: 2.0.1 @@ -7028,40 +5979,20 @@ snapshots: is-stream@3.0.0: {} - is-string@1.0.7: - dependencies: - has-tostringtag: 1.0.0 - - is-symbol@1.0.4: - dependencies: - has-symbols: 1.0.3 + is-stream@4.0.1: {} is-text-path@2.0.0: dependencies: text-extensions: 2.4.0 - is-typed-array@1.1.12: - dependencies: - which-typed-array: 1.1.11 - - is-typedarray@1.0.0: {} - - is-unicode-supported@0.1.0: {} - is-unicode-supported@1.3.0: {} is-unicode-supported@2.0.0: {} - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.2 - is-wsl@3.1.0: dependencies: is-inside-container: 1.0.0 - isarray@2.0.5: {} - isexe@2.0.0: {} issue-parser@7.0.1: @@ -7102,7 +6033,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.6 + debug: 4.4.0 istanbul-lib-coverage: 3.2.0 source-map: 0.6.1 transitivePeerDependencies: @@ -7113,12 +6044,6 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jake@10.9.2: dependencies: async: 3.2.6 @@ -7138,7 +6063,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 22.10.7 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -7158,16 +6083,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.5.9): + jest-cli@29.7.0(@types/node@22.10.7): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.5.9) + create-jest: 29.7.0(@types/node@22.10.7) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.5.9) + jest-config: 29.7.0(@types/node@22.10.7) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -7177,7 +6102,7 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.5.9): + jest-config@29.7.0(@types/node@22.10.7): dependencies: '@babel/core': 7.22.15 '@jest/test-sequencer': 29.7.0 @@ -7202,18 +6127,11 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.5.9 + '@types/node': 22.10.7 transitivePeerDependencies: - babel-plugin-macros - supports-color - jest-diff@29.6.4: - dependencies: - chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.6.3 - jest-diff@29.7.0: dependencies: chalk: 4.1.2 @@ -7239,7 +6157,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.5.9 + '@types/node': 22.10.7 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -7253,7 +6171,7 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 22.10.7 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -7263,7 +6181,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.6 - '@types/node': 20.5.9 + '@types/node': 22.10.7 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -7280,13 +6198,6 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 - jest-matcher-utils@29.6.4: - dependencies: - chalk: 4.1.2 - jest-diff: 29.6.4 - jest-get-type: 29.6.3 - pretty-format: 29.6.3 - jest-matcher-utils@29.7.0: dependencies: chalk: 4.1.2 @@ -7294,18 +6205,6 @@ snapshots: jest-get-type: 29.6.3 pretty-format: 29.7.0 - jest-message-util@29.6.3: - dependencies: - '@babel/code-frame': 7.22.13 - '@jest/types': 29.6.3 - '@types/stack-utils': 2.0.1 - chalk: 4.1.2 - graceful-fs: 4.2.11 - micromatch: 4.0.5 - pretty-format: 29.6.3 - slash: 3.0.0 - stack-utils: 2.0.6 - jest-message-util@29.7.0: dependencies: '@babel/code-frame': 7.22.13 @@ -7321,7 +6220,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 22.10.7 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -7356,7 +6255,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 22.10.7 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -7384,7 +6283,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 22.10.7 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -7427,19 +6326,10 @@ snapshots: transitivePeerDependencies: - supports-color - jest-util@29.6.3: - dependencies: - '@jest/types': 29.6.3 - '@types/node': 20.5.9 - chalk: 4.1.2 - ci-info: 3.8.0 - graceful-fs: 4.2.11 - picomatch: 2.3.1 - jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 22.10.7 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -7458,7 +6348,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.5.9 + '@types/node': 22.10.7 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -7467,24 +6357,24 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 20.5.9 + '@types/node': 22.10.7 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.5.9): + jest@29.7.0(@types/node@22.10.7): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.5.9) + jest-cli: 29.7.0(@types/node@22.10.7) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jiti@1.21.0: {} + jiti@2.4.2: {} jju@1.4.0: {} @@ -7505,6 +6395,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsbn@1.1.0: {} + jsdom@20.0.3: dependencies: abab: 2.0.6 @@ -7540,26 +6432,10 @@ snapshots: jsesc@2.5.2: {} - json-buffer@3.0.1: {} - json-parse-even-better-errors@2.3.1: {} - json-parse-even-better-errors@3.0.0: {} - - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-schema@0.4.0: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - json-stringify-safe@5.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - json5@2.2.3: {} jsonfile@4.0.0: @@ -7592,10 +6468,6 @@ snapshots: jwa: 1.4.1 safe-buffer: 5.2.1 - keyv@4.5.3: - dependencies: - json-buffer: 3.0.1 - kleur@3.0.3: {} ky@1.7.0: {} @@ -7606,37 +6478,30 @@ snapshots: leven@3.1.0: {} - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - lilconfig@3.1.2: {} + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} - lines-and-columns@2.0.3: {} - linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 - lint-staged@15.2.9: + lint-staged@15.4.1: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 commander: 12.1.0 - debug: 4.3.6 + debug: 4.4.0 execa: 8.0.1 - lilconfig: 3.1.2 - listr2: 8.2.4 - micromatch: 4.0.7 + lilconfig: 3.1.3 + listr2: 8.2.5 + micromatch: 4.0.8 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.5.0 + yaml: 2.6.1 transitivePeerDependencies: - supports-color - listr2@8.2.4: + listr2@8.2.5: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -7649,10 +6514,6 @@ snapshots: dependencies: p-locate: 4.1.0 - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - locate-path@7.2.0: dependencies: p-locate: 6.0.0 @@ -7697,14 +6558,9 @@ snapshots: lodash@4.17.21: {} - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - log-symbols@6.0.0: dependencies: - chalk: 5.3.0 + chalk: 5.4.1 is-unicode-supported: 1.3.0 log-update@6.1.0: @@ -7715,10 +6571,6 @@ snapshots: strip-ansi: 7.1.0 wrap-ansi: 9.0.0 - lowercase-keys@3.0.0: {} - - lru-cache@10.0.1: {} - lru-cache@10.4.3: {} lru-cache@5.1.1: @@ -7743,10 +6595,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.8: - dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 - make-dir@4.0.0: dependencies: semver: 7.6.2 @@ -7776,6 +6624,8 @@ snapshots: meow@12.1.1: {} + meow@13.2.0: {} + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -7790,6 +6640,11 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + mime-db@1.52.0: {} mime-types@2.1.35: @@ -7802,10 +6657,6 @@ snapshots: mimic-function@5.0.1: {} - mimic-response@3.1.0: {} - - mimic-response@4.0.0: {} - minimatch@3.0.8: dependencies: brace-expansion: 1.1.11 @@ -7824,17 +6675,13 @@ snapshots: minimist@1.2.8: {} - minipass@7.1.2: {} - ms@2.1.2: {} ms@2.1.3: {} - mute-stream@1.0.0: {} - - nanoid@3.3.7: {} + mute-stream@2.0.0: {} - natural-compare-lite@1.4.0: {} + nanoid@3.3.8: {} natural-compare@1.4.0: {} @@ -7846,14 +6693,6 @@ snapshots: dependencies: type-fest: 2.19.0 - node-domexception@1.0.0: {} - - node-fetch@3.3.2: - dependencies: - data-uri-to-buffer: 4.0.1 - fetch-blob: 3.2.0 - formdata-polyfill: 4.0.10 - node-int64@0.4.0: {} node-releases@2.0.13: {} @@ -7862,13 +6701,11 @@ snapshots: dependencies: hosted-git-info: 7.0.0 is-core-module: 2.13.1 - semver: 7.6.2 + semver: 7.6.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} - normalize-url@8.0.0: {} - npm-run-path@4.0.1: dependencies: path-key: 3.1.1 @@ -7877,37 +6714,12 @@ snapshots: dependencies: path-key: 4.0.0 - nwsapi@2.2.7: {} - - object-inspect@1.12.3: {} - - object-keys@1.1.1: {} - - object.assign@4.1.4: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - has-symbols: 1.0.3 - object-keys: 1.1.1 - - object.fromentries@2.0.7: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - - object.groupby@1.0.1: + npm-run-path@6.0.0: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - get-intrinsic: 1.2.1 + path-key: 4.0.0 + unicorn-magic: 0.3.0 - object.values@1.1.7: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + nwsapi@2.2.7: {} once@1.4.0: dependencies: @@ -7932,48 +6744,25 @@ snapshots: is-inside-container: 1.0.0 is-wsl: 3.1.0 - optionator@0.9.3: - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - - ora@5.4.1: - dependencies: - bl: 4.1.0 - chalk: 4.1.2 - cli-cursor: 3.1.0 - cli-spinners: 2.9.2 - is-interactive: 1.0.0 - is-unicode-supported: 0.1.0 - log-symbols: 4.1.0 - strip-ansi: 6.0.1 - wcwidth: 1.0.1 - - ora@8.0.1: + ora@8.1.1: dependencies: - chalk: 5.3.0 - cli-cursor: 4.0.0 + chalk: 5.4.1 + cli-cursor: 5.0.0 cli-spinners: 2.9.2 is-interactive: 2.0.0 is-unicode-supported: 2.0.0 log-symbols: 6.0.0 stdin-discarder: 0.2.2 - string-width: 7.1.0 + string-width: 7.2.0 strip-ansi: 7.1.0 - os-name@5.1.0: + os-name@6.0.0: dependencies: macos-release: 3.2.0 - windows-release: 5.1.1 + windows-release: 6.0.1 os-tmpdir@1.0.2: {} - p-cancelable@3.0.0: {} - p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -7990,43 +6779,36 @@ snapshots: dependencies: p-limit: 2.3.0 - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - p-locate@6.0.0: dependencies: p-limit: 4.0.0 p-try@2.2.0: {} - pac-proxy-agent@7.0.1: + pac-proxy-agent@7.1.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.0 - debug: 4.3.6 + agent-base: 7.1.3 + debug: 4.4.0 get-uri: 6.0.1 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.4 - pac-resolver: 7.0.0 - socks-proxy-agent: 8.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color - pac-resolver@7.0.0: + pac-resolver@7.0.1: dependencies: degenerator: 5.0.1 - ip: 1.1.8 netmask: 2.0.2 - package-json-from-dist@1.0.0: {} - package-json@10.0.1: dependencies: ky: 1.7.0 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.6.2 + semver: 7.6.3 parent-module@1.0.1: dependencies: @@ -8039,20 +6821,21 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse-json@7.1.0: + parse-json@8.1.0: dependencies: - '@babel/code-frame': 7.22.13 - error-ex: 1.3.2 - json-parse-even-better-errors: 3.0.0 - lines-and-columns: 2.0.3 - type-fest: 3.13.1 + '@babel/code-frame': 7.24.7 + index-to-position: 0.1.2 + type-fest: 4.32.0 + + parse-ms@4.0.0: {} parse-path@7.0.0: dependencies: protocols: 2.0.1 - parse-url@8.1.0: + parse-url@9.2.0: dependencies: + '@types/parse-path': 7.0.3 parse-path: 7.0.0 parse5@7.1.2: @@ -8071,13 +6854,6 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.2 - - path-type@4.0.0: {} - path-type@5.0.0: {} pem@1.14.8: @@ -8093,8 +6869,12 @@ snapshots: picocolors@1.0.1: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} + picomatch@4.0.2: {} + pidtree@0.6.0: {} pirates@4.0.6: {} @@ -8103,25 +6883,21 @@ snapshots: dependencies: find-up: 4.1.0 - postcss@8.4.41: + postcss@8.5.1: dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 - prelude-ls@1.2.1: {} - - pretty-format@29.6.3: + pretty-format@29.7.0: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 react-is: 18.2.0 - pretty-format@29.7.0: + pretty-ms@9.2.0: dependencies: - '@jest/schemas': 29.6.3 - ansi-styles: 5.2.0 - react-is: 18.2.0 + parse-ms: 4.0.0 prompts@2.4.2: dependencies: @@ -8132,16 +6908,16 @@ snapshots: protocols@2.0.1: {} - proxy-agent@6.4.0: + proxy-agent@6.5.0: dependencies: - agent-base: 7.1.0 - debug: 4.3.4 + agent-base: 7.1.3 + debug: 4.3.6 http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.4 + https-proxy-agent: 7.0.6 lru-cache: 7.18.3 - pac-proxy-agent: 7.0.1 + pac-proxy-agent: 7.1.0 proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.2 + socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color @@ -8169,8 +6945,6 @@ snapshots: queue-microtask@1.2.3: {} - quick-lru@5.1.1: {} - rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -8180,18 +6954,19 @@ snapshots: react-is@18.2.0: {} - read-pkg-up@10.1.0: + read-package-up@11.0.0: dependencies: - find-up: 6.3.0 - read-pkg: 8.1.0 - type-fest: 4.3.1 + find-up-simple: 1.0.0 + read-pkg: 9.0.1 + type-fest: 4.32.0 - read-pkg@8.1.0: + read-pkg@9.0.1: dependencies: - '@types/normalize-package-data': 2.4.1 + '@types/normalize-package-data': 2.4.4 normalize-package-data: 6.0.0 - parse-json: 7.1.0 - type-fest: 4.3.1 + parse-json: 8.1.0 + type-fest: 4.32.0 + unicorn-magic: 0.1.0 readable-stream@3.6.2: dependencies: @@ -8203,12 +6978,6 @@ snapshots: dependencies: resolve: 1.22.4 - regexp.prototype.flags@1.5.0: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - functions-have-names: 1.2.3 - registry-auth-token@5.0.2: dependencies: '@pnpm/npm-conf': 2.2.2 @@ -8217,35 +6986,35 @@ snapshots: dependencies: rc: 1.2.8 - release-it@17.6.0(typescript@5.5.4): + release-it@18.1.1(@types/node@22.10.7)(typescript@5.7.3): dependencies: '@iarna/toml': 2.2.5 - '@octokit/rest': 20.1.1 + '@octokit/rest': 21.0.2 async-retry: 1.3.3 - chalk: 5.3.0 - cosmiconfig: 9.0.0(typescript@5.5.4) - execa: 8.0.1 - git-url-parse: 14.0.0 + chalk: 5.4.1 + ci-info: 4.1.0 + cosmiconfig: 9.0.0(typescript@5.7.3) + execa: 9.5.2 + git-url-parse: 16.0.0 globby: 14.0.2 - got: 13.0.0 - inquirer: 9.3.2 - is-ci: 3.0.1 + inquirer: 12.3.0(@types/node@22.10.7) issue-parser: 7.0.1 lodash: 4.17.21 mime-types: 2.1.35 new-github-release-url: 2.0.0 - node-fetch: 3.3.2 open: 10.1.0 - ora: 8.0.1 - os-name: 5.1.0 - proxy-agent: 6.4.0 - semver: 7.6.2 + ora: 8.1.1 + os-name: 6.0.0 + proxy-agent: 6.5.0 + semver: 7.6.3 shelljs: 0.8.5 - update-notifier: 7.1.0 + undici: 6.21.0 + update-notifier: 7.3.1 url-join: 5.0.0 - wildcard-match: 5.1.3 + wildcard-match: 5.1.4 yargs-parser: 21.1.1 transitivePeerDependencies: + - '@types/node' - supports-color - typescript @@ -8255,8 +7024,6 @@ snapshots: requires-port@1.0.0: {} - resolve-alpn@1.2.1: {} - resolve-cwd@3.0.0: dependencies: resolve-from: 5.0.0 @@ -8271,24 +7038,10 @@ snapshots: resolve@1.22.4: dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - responselike@3.0.0: - dependencies: - lowercase-keys: 3.0.0 - - restore-cursor@3.1.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - - restore-cursor@4.0.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - restore-cursor@5.1.0: dependencies: onetime: 7.0.0 @@ -8300,62 +7053,62 @@ snapshots: rfdc@1.4.1: {} - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - rollup-plugin-cleanup@3.2.1(rollup@4.21.0): + rollup-plugin-cleanup@3.2.1(rollup@4.30.1): dependencies: js-cleanup: 1.2.0 - rollup: 4.21.0 + rollup: 4.30.1 rollup-pluginutils: 2.8.2 - rollup-plugin-dts@6.1.1(rollup@4.21.0)(typescript@5.5.4): + rollup-plugin-dts@6.1.1(rollup@4.30.1)(typescript@5.7.3): dependencies: magic-string: 0.30.11 - rollup: 4.21.0 - typescript: 5.5.4 + rollup: 4.30.1 + typescript: 5.7.3 optionalDependencies: '@babel/code-frame': 7.24.7 - rollup-plugin-swc3@0.11.2(@swc/core@1.7.14)(rollup@4.21.0): + rollup-plugin-swc3@0.12.1(@swc/core@1.10.7)(rollup@4.30.1): dependencies: - '@fastify/deepmerge': 1.3.0 - '@rollup/pluginutils': 5.1.0(rollup@4.21.0) - '@swc/core': 1.7.14 - get-tsconfig: 4.7.3 - rollup: 4.21.0 - rollup-preserve-directives: 1.1.1(rollup@4.21.0) + '@dual-bundle/import-meta-resolve': 4.1.0 + '@fastify/deepmerge': 2.0.1 + '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + '@swc/core': 1.10.7 + get-tsconfig: 4.8.1 + rollup: 4.30.1 + rollup-preserve-directives: 1.1.3(rollup@4.30.1) rollup-pluginutils@2.8.2: dependencies: estree-walker: 0.6.1 - rollup-preserve-directives@1.1.1(rollup@4.21.0): + rollup-preserve-directives@1.1.3(rollup@4.30.1): dependencies: - magic-string: 0.30.8 - rollup: 4.21.0 + magic-string: 0.30.11 + rollup: 4.30.1 - rollup@4.21.0: + rollup@4.30.1: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.21.0 - '@rollup/rollup-android-arm64': 4.21.0 - '@rollup/rollup-darwin-arm64': 4.21.0 - '@rollup/rollup-darwin-x64': 4.21.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.21.0 - '@rollup/rollup-linux-arm-musleabihf': 4.21.0 - '@rollup/rollup-linux-arm64-gnu': 4.21.0 - '@rollup/rollup-linux-arm64-musl': 4.21.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.21.0 - '@rollup/rollup-linux-riscv64-gnu': 4.21.0 - '@rollup/rollup-linux-s390x-gnu': 4.21.0 - '@rollup/rollup-linux-x64-gnu': 4.21.0 - '@rollup/rollup-linux-x64-musl': 4.21.0 - '@rollup/rollup-win32-arm64-msvc': 4.21.0 - '@rollup/rollup-win32-ia32-msvc': 4.21.0 - '@rollup/rollup-win32-x64-msvc': 4.21.0 + '@rollup/rollup-android-arm-eabi': 4.30.1 + '@rollup/rollup-android-arm64': 4.30.1 + '@rollup/rollup-darwin-arm64': 4.30.1 + '@rollup/rollup-darwin-x64': 4.30.1 + '@rollup/rollup-freebsd-arm64': 4.30.1 + '@rollup/rollup-freebsd-x64': 4.30.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.30.1 + '@rollup/rollup-linux-arm-musleabihf': 4.30.1 + '@rollup/rollup-linux-arm64-gnu': 4.30.1 + '@rollup/rollup-linux-arm64-musl': 4.30.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.30.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.30.1 + '@rollup/rollup-linux-riscv64-gnu': 4.30.1 + '@rollup/rollup-linux-s390x-gnu': 4.30.1 + '@rollup/rollup-linux-x64-gnu': 4.30.1 + '@rollup/rollup-linux-x64-musl': 4.30.1 + '@rollup/rollup-win32-arm64-msvc': 4.30.1 + '@rollup/rollup-win32-ia32-msvc': 4.30.1 + '@rollup/rollup-win32-x64-msvc': 4.30.1 fsevents: 2.3.3 run-applescript@7.0.0: {} @@ -8370,43 +7123,24 @@ snapshots: dependencies: tslib: 2.6.2 - safe-array-concat@1.0.1: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - has-symbols: 1.0.3 - isarray: 2.0.5 - safe-buffer@5.2.1: {} - safe-regex-test@1.0.0: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-regex: 1.1.4 - safer-buffer@2.1.2: {} saxes@6.0.0: dependencies: xmlchars: 2.2.0 - semver-diff@4.0.0: - dependencies: - semver: 7.6.2 - semver@6.3.1: {} semver@7.5.4: dependencies: lru-cache: 6.0.0 - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 - semver@7.6.2: {} + semver@7.6.3: {} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -8419,17 +7153,6 @@ snapshots: interpret: 1.4.0 rechoir: 0.6.2 - shiki@1.14.1: - dependencies: - '@shikijs/core': 1.14.1 - '@types/hast': 3.0.4 - - side-channel@1.0.4: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 - signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -8454,20 +7177,20 @@ snapshots: smart-buffer@4.2.0: {} - socks-proxy-agent@8.0.2: + socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.0 - debug: 4.3.6 - socks: 2.7.1 + agent-base: 7.1.3 + debug: 4.4.0 + socks: 2.8.3 transitivePeerDependencies: - supports-color - socks@2.7.1: + socks@2.8.3: dependencies: - ip: 2.0.0 + ip-address: 9.0.5 smart-buffer: 4.2.0 - source-map-js@1.2.0: {} + source-map-js@1.2.1: {} source-map-support@0.5.13: dependencies: @@ -8496,6 +7219,8 @@ snapshots: sprintf-js@1.0.3: {} + sprintf-js@1.1.3: {} + stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 @@ -8515,35 +7240,17 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - string-width@7.1.0: dependencies: emoji-regex: 10.3.0 get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 - string.prototype.trim@1.2.7: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - - string.prototype.trimend@1.0.6: - dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 - - string.prototype.trimstart@1.0.7: + string-width@7.2.0: dependencies: - call-bind: 1.0.2 - define-properties: 1.2.0 - es-abstract: 1.22.1 + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 string_decoder@1.3.0: dependencies: @@ -8557,18 +7264,20 @@ snapshots: dependencies: ansi-regex: 6.0.1 - strip-bom@3.0.0: {} - strip-bom@4.0.0: {} strip-final-newline@2.0.0: {} strip-final-newline@3.0.0: {} + strip-final-newline@4.0.0: {} + strip-json-comments@2.0.1: {} strip-json-comments@3.1.1: {} + stubborn-fs@1.2.5: {} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -8593,10 +7302,10 @@ snapshots: text-extensions@2.4.0: {} - text-table@0.2.0: {} - through@2.3.8: {} + tinyexec@0.3.2: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -8620,22 +7329,18 @@ snapshots: dependencies: punycode: 2.3.0 - ts-api-utils@1.3.0(typescript@5.5.4): - dependencies: - typescript: 5.5.4 - - ts-jest@29.2.4(@babel/core@7.22.15)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.22.15))(jest@29.7.0(@types/node@20.5.9))(typescript@5.5.4): + ts-jest@29.2.5(@babel/core@7.22.15)(@jest/transform@29.7.0)(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.22.15))(jest@29.7.0(@types/node@22.10.7))(typescript@5.7.3): dependencies: bs-logger: 0.2.6 ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.5.9) + jest: 29.7.0(@types/node@22.10.7) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.6.0 - typescript: 5.5.4 + semver: 7.6.3 + typescript: 5.7.3 yargs-parser: 21.1.1 optionalDependencies: '@babel/core': 7.22.15 @@ -8643,105 +7348,45 @@ snapshots: '@jest/types': 29.6.3 babel-jest: 29.7.0(@babel/core@7.22.15) - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - - tslib@1.14.1: {} - tslib@2.6.2: {} - tsutils@3.21.0(typescript@5.5.4): - dependencies: - tslib: 1.14.1 - typescript: 5.5.4 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - type-detect@4.0.8: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} - type-fest@1.4.0: {} - type-fest@2.19.0: {} - type-fest@3.13.1: {} - - type-fest@4.3.1: {} - - typed-array-buffer@1.0.0: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 - - typed-array-byte-length@1.0.0: - dependencies: - call-bind: 1.0.2 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - - typed-array-byte-offset@1.0.0: - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 - - typed-array-length@1.0.4: - dependencies: - call-bind: 1.0.2 - for-each: 0.3.3 - is-typed-array: 1.1.12 - - typedarray-to-buffer@3.1.5: - dependencies: - is-typedarray: 1.0.0 + type-fest@4.32.0: {} typedarray@0.0.6: {} - typedoc@0.26.6(typescript@5.5.4): + typedoc@0.27.6(typescript@5.7.3): dependencies: + '@gerrit0/mini-shiki': 1.27.2 lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 - shiki: 1.14.1 - typescript: 5.5.4 - yaml: 2.5.0 + typescript: 5.7.3 + yaml: 2.7.0 - typescript@5.4.2: {} + typescript@5.7.2: {} - typescript@5.5.4: {} + typescript@5.7.3: {} uc.micro@2.1.0: {} uglify-js@3.17.4: optional: true - unbox-primitive@1.0.2: - dependencies: - call-bind: 1.0.2 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 + undici-types@6.20.0: {} + + undici@6.21.0: {} unicorn-magic@0.1.0: {} - unique-string@3.0.0: - dependencies: - crypto-random-string: 4.0.0 + unicorn-magic@0.3.0: {} - universal-user-agent@6.0.0: {} + universal-user-agent@7.0.2: {} universalify@0.1.2: {} @@ -8751,21 +7396,19 @@ snapshots: dependencies: browserslist: 4.21.10 escalade: 3.1.1 - picocolors: 1.0.0 + picocolors: 1.0.1 - update-notifier@7.1.0: + update-notifier@7.3.1: dependencies: - boxen: 7.1.1 - chalk: 5.3.0 - configstore: 6.0.0 - import-lazy: 4.0.0 - is-in-ci: 0.1.0 + boxen: 8.0.1 + chalk: 5.4.1 + configstore: 7.0.0 + is-in-ci: 1.0.0 is-installed-globally: 1.0.0 is-npm: 6.0.0 latest-version: 9.0.0 pupa: 3.1.0 - semver: 7.6.2 - semver-diff: 4.0.0 + semver: 7.6.3 xdg-basedir: 5.1.0 uri-js@4.4.1: @@ -8792,14 +7435,16 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - vite@5.4.1(@types/node@20.5.9): + vite@6.0.7(@types/node@22.10.7)(jiti@2.4.2)(yaml@2.7.0): dependencies: - esbuild: 0.21.5 - postcss: 8.4.41 - rollup: 4.21.0 + esbuild: 0.24.2 + postcss: 8.5.1 + rollup: 4.30.1 optionalDependencies: - '@types/node': 20.5.9 + '@types/node': 22.10.7 fsevents: 2.3.3 + jiti: 2.4.2 + yaml: 2.7.0 w3c-xmlserializer@4.0.0: dependencies: @@ -8809,12 +7454,6 @@ snapshots: dependencies: makeerror: 1.0.12 - wcwidth@1.0.1: - dependencies: - defaults: 1.0.4 - - web-streams-polyfill@3.2.1: {} - webcrypto-core@1.8.0: dependencies: '@peculiar/asn1-schema': 2.3.8 @@ -8838,35 +7477,21 @@ snapshots: tr46: 3.0.0 webidl-conversions: 7.0.0 - which-boxed-primitive@1.0.2: - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - - which-typed-array@1.1.11: - dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.0 + when-exit@2.1.4: {} which@2.0.2: dependencies: isexe: 2.0.0 - widest-line@4.0.1: + widest-line@5.0.0: dependencies: - string-width: 5.1.2 + string-width: 7.2.0 - wildcard-match@5.1.3: {} + wildcard-match@5.1.4: {} - windows-release@5.1.1: + windows-release@6.0.1: dependencies: - execa: 5.1.1 + execa: 8.0.1 wordwrap@1.0.0: {} @@ -8882,12 +7507,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 @@ -8896,13 +7515,6 @@ snapshots: wrappy@1.0.2: {} - write-file-atomic@3.0.3: - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - write-file-atomic@4.0.2: dependencies: imurmurhash: 0.1.4 @@ -8922,7 +7534,9 @@ snapshots: yallist@4.0.0: {} - yaml@2.5.0: {} + yaml@2.6.1: {} + + yaml@2.7.0: {} yargs-parser@21.1.1: {} @@ -8941,3 +7555,5 @@ snapshots: yocto-queue@1.0.0: {} yoctocolors-cjs@2.1.2: {} + + yoctocolors@2.1.1: {} diff --git a/rollup.config.mjs b/rollup.config.mjs index 0256157..f889167 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -1,43 +1,43 @@ -import commonjs from '@rollup/plugin-commonjs' -import json from '@rollup/plugin-json' -import { nodeResolve } from '@rollup/plugin-node-resolve' -import {swc, minify} from 'rollup-plugin-swc3'; -import dts from 'rollup-plugin-dts'; -import {readFileSync} from 'fs'; +import { readFileSync } from "node:fs" +import commonjs from "@rollup/plugin-commonjs" +import json from "@rollup/plugin-json" +import { nodeResolve } from "@rollup/plugin-node-resolve" +import dts from "rollup-plugin-dts" +import { minify, swc } from "rollup-plugin-swc3" -const {version, homepage, browser, module, types} = JSON.parse(readFileSync('./package.json')); +const { version, homepage, browser, module, types } = JSON.parse(readFileSync("./package.json")) const banner = `/*! * @plusauth/oidc-client-js v${version} * ${homepage} - * (c) ${(new Date(process.env.SOURCE_DATE_EPOCH ? (process.env.SOURCE_DATE_EPOCH * 1000) : new Date().getTime())).getFullYear()} @plusauth/oidc-client-js Contributors + * (c) ${(new Date(process.env.SOURCE_DATE_EPOCH ? process.env.SOURCE_DATE_EPOCH * 1000 : new Date().getTime())).getFullYear()} @plusauth/oidc-client-js Contributors * Released under the MIT License - */`; -const plugins = (min) => - [ - commonjs(), - nodeResolve({ - browser: true - }), - json(), - swc({ - sourceMaps: true - }), - min && minify({ + */` +const plugins = (min) => [ + commonjs(), + nodeResolve({ + browser: true, + }), + json(), + swc({ + sourceMaps: true, + }), + min && + minify({ sourceMap: true, - compress: true - }) - ]; + compress: true, + }), +] export default [ // UMD build { - input: 'src/index.ts', + input: "src/index.ts", plugins: plugins(true), output: { - name: 'PlusAuthOIDCClient', + name: "PlusAuthOIDCClient", file: browser, - format: 'umd', + format: "umd", indent: false, sourcemap: true, }, @@ -45,12 +45,12 @@ export default [ // ES build { - input: 'src/index.ts', + input: "src/index.ts", plugins: plugins(), output: { file: module, banner, - format: 'esm', + format: "esm", indent: false, sourcemap: true, }, @@ -63,7 +63,7 @@ export default [ plugins: [dts()], output: { file: types, - format: 'es' - } - } -]; + format: "es", + }, + }, +] diff --git a/src/client.ts b/src/client.ts index bb4880e..f9b6ddc 100644 --- a/src/client.ts +++ b/src/client.ts @@ -1,46 +1,46 @@ -import type { EventTypes } from './constants'; -import { Events } from './constants'; +import type { EventTypes } from "./constants" +import { Events } from "./constants" -import { - AuthenticationError, InvalidIdTokenError, - OIDCClientError, StateNotFound -} from './errors'; - -import type { - StateStore } from './helpers'; -import { - EventEmitter, - InMemoryStateStore, - LocalStorageStateStore -} from './helpers'; +import { AuthenticationError, InvalidIdTokenError, OIDCClientError, StateNotFound } from "./errors" +import type { StateStore } from "./helpers" +import { EventEmitter, InMemoryStateStore, LocalStorageStateStore } from "./helpers" - -import { Timer } from './helpers/timer'; -import type { AuthRecord, - AuthRequestOptions, IEndpointConfiguration, - IPlusAuthClientOptions, - LogoutRequestOptions, PopupOptions, RevokeOptions, SessionChecker, - SessionMonitorOptions, StateRecord, - TokenRequestOption, TokenResponse, TokenType -} from './interfaces'; - +import { Timer } from "./helpers/timer" import type { - RequestOptions } from './utils'; + AuthRecord, + AuthRequestOptions, + IEndpointConfiguration, + IPlusAuthClientOptions, + LogoutRequestOptions, + PopupOptions, + RevokeOptions, + SessionChecker, + SessionMonitorOptions, + StateRecord, + TokenRequestOption, + TokenResponse, + TokenType, +} from "./interfaces" + +import type { RequestOptions } from "./utils" import { - request, - runIframe, buildEncodedQueryString, + createSessionCheckerFrame, + deriveChallenge, + generateRandom, + isValidIssuer, + nonUserClaims, parseQueryUrl, + request, + runIframe, validateIdToken, - createSessionCheckerFrame, - nonUserClaims, generateRandom, deriveChallenge, isValidIssuer, -} from './utils'; -import { cleanUndefined, mergeObjects } from './utils/object'; +} from "./utils" +import { cleanUndefined, mergeObjects } from "./utils/object" -import { isResponseType, isScopeIncluded } from './utils/oidc'; -import { runPopup } from './utils/popup'; -import { TabUtils } from './utils/tab_utils'; +import { isResponseType, isScopeIncluded } from "./utils/oidc" +import { runPopup } from "./utils/popup" +import { TabUtils } from "./utils/tab_utils" /** * `OIDCClient` provides methods for interacting with OIDC/OAuth2 authorization server. Those methods are signing a @@ -48,77 +48,81 @@ import { TabUtils } from './utils/tab_utils'; * OIDC/OAuth2 provider. * */ -export class OIDCClient extends EventEmitter{ +export class OIDCClient extends EventEmitter { options: IPlusAuthClientOptions - user?: any; + user?: any - scopes?: string[]; + scopes?: string[] - accessToken?: string; + accessToken?: string - refreshToken?: string; + refreshToken?: string - idToken?: string; + idToken?: string - idTokenRaw?: string; + idTokenRaw?: string - issuer_metadata?: Record; + issuer_metadata?: Record - private readonly http: ( options: RequestOptions ) => Promise | never; + private readonly http: (options: RequestOptions) => Promise | never - private synchronizer: TabUtils; + private synchronizer: TabUtils private stateStore: StateStore - private authStore: StateStore; + private authStore: StateStore private sessionCheckerFrame?: SessionChecker - private _accessTokenExpireTimer?: Timer; + private _accessTokenExpireTimer?: Timer - private initialized!: boolean; + private initialized!: boolean - private __initializePromise!: Promise | undefined; + private __initializePromise!: Promise | undefined - constructor( options: IPlusAuthClientOptions ) { + constructor(options: IPlusAuthClientOptions) { super() - if ( !isValidIssuer( options.issuer ) ){ - throw new OIDCClientError( '"issuer" must be a valid uri.' ) - } - - this.synchronizer = new TabUtils( btoa( options.issuer ), this ) - - this.options = mergeObjects( { - secondsToRefreshAccessTokenBeforeExp: 60, - autoSilentRenew: true, - checkSession: true, - stateLength: 10, - nonceLength: 10 - }, options, { - // remove last slash for consistency across the lib - issuer: options.issuer.endsWith( '/' ) ? options.issuer.slice( 0, -1 ) : options.issuer - } ) + if (!isValidIssuer(options.issuer)) { + throw new OIDCClientError('"issuer" must be a valid uri.') + } + + this.synchronizer = new TabUtils(btoa(options.issuer), this) + + this.options = mergeObjects( + { + secondsToRefreshAccessTokenBeforeExp: 60, + autoSilentRenew: true, + checkSession: true, + stateLength: 10, + nonceLength: 10, + }, + options, + { + // remove last slash for consistency across the lib + issuer: options.issuer.endsWith("/") ? options.issuer.slice(0, -1) : options.issuer, + }, + ) this.http = this.options.httpClient || request - this.stateStore = this.options.stateStore || new LocalStorageStateStore( 'pa_oidc.state.' ) + this.stateStore = + this.options.stateStore || new LocalStorageStateStore("pa_oidc.state.") this.authStore = this.options.authStore || new InMemoryStateStore() - - if ( this.options.autoSilentRenew ){ + if (this.options.autoSilentRenew) { this._accessTokenExpireTimer = new Timer() } - this.on( Events.USER_LOGOUT, async ()=>{ + this.on(Events.USER_LOGOUT, async () => { this.user = undefined - this.scopes = undefined; + this.scopes = undefined this.accessToken = undefined this.idToken = undefined this.refreshToken = undefined await this.authStore.clear() - } ) + }) - this.synchronizer.OnBroadcastMessage( Events.USER_LOGIN, this.onUserLogin.bind( this ) ) + this.synchronizer.OnBroadcastMessage(Events.USER_LOGIN, this.onUserLogin.bind(this)) } /** @@ -128,55 +132,54 @@ export class OIDCClient extends EventEmitter{ * @param checkLogin Make this `false` if you don't want to check user authorization status in provider while * initializing. Defaults to `true` */ - async initialize( checkLogin = true ): Promise | never { - if ( this.initialized ){ + async initialize(checkLogin = true): Promise | never { + if (this.initialized) { return this } - if ( this.__initializePromise ){ + if (this.__initializePromise) { return this.__initializePromise - } else { - this.__initializePromise = new Promise( async ( resolve, reject ) => { - try { - if ( this.stateStore.init ){ - await this.stateStore.init() - } - if ( this.authStore.init ){ - await this.authStore.init() - } + } + this.__initializePromise = new Promise(async (resolve, reject) => { + try { + if (this.stateStore.init) { + await this.stateStore.init() + } + if (this.authStore.init) { + await this.authStore.init() + } - if ( !this.options.endpoints || Object.keys( this.options.endpoints ).length === 0 ){ - await this.fetchFromIssuer() - } - this.initialized = true + if (!this.options.endpoints || Object.keys(this.options.endpoints).length === 0) { + await this.fetchFromIssuer() + } + this.initialized = true - if ( checkLogin ){ - try { - if ( !window?.frameElement ){ - await this.silentLogin() - } - } catch ( e ) { - this.emit( Events.SILENT_RENEW_ERROR, e ) - await this.authStore.clear() - } - } else { - const localAuth = await this.authStore.get( 'auth' ) - if ( localAuth ){ - await this.onUserLogin( localAuth, true ) + if (checkLogin) { + try { + if (!window?.frameElement) { + await this.silentLogin() } + } catch (e) { + this.emit(Events.SILENT_RENEW_ERROR, e) + await this.authStore.clear() } - resolve( this ) - } catch ( e ) { - if ( e instanceof OIDCClientError ){ - reject( e ) - } else { - reject( new OIDCClientError( e.message ) ) + } else { + const localAuth = await this.authStore.get("auth") + if (localAuth) { + await this.onUserLogin(localAuth, true) } - } finally { - this.__initializePromise = undefined } - } ) - } + resolve(this) + } catch (e) { + if (e instanceof OIDCClientError) { + reject(e) + } else { + reject(new OIDCClientError(e.message)) + } + } finally { + this.__initializePromise = undefined + } + }) return this.__initializePromise } @@ -189,8 +192,8 @@ export class OIDCClient extends EventEmitter{ * @param options * @param localState */ - async login( options: Partial = {}, localState: Record = {} ){ - window.location.assign( await this.createAuthRequest( options, localState ) ) + async login(options: Partial = {}, localState: Record = {}) { + window.location.assign(await this.createAuthRequest(options, localState)) } /** @@ -204,25 +207,24 @@ export class OIDCClient extends EventEmitter{ * @param options * @param popupOptions */ - async loginWithPopup( options: Partial = {}, popupOptions: PopupOptions = {} ){ - const url = await this.createAuthRequest( { - response_mode: 'fragment', + async loginWithPopup(options: Partial = {}, popupOptions: PopupOptions = {}) { + const url = await this.createAuthRequest({ + response_mode: "fragment", ...options, - display: 'popup', - request_type: 'p' - } ) - const { response, state } = await runPopup( url, popupOptions ) - const { authParams, localState } = !state || typeof state === 'string' ? - await this.loadState( state || response.state ) - : state; - const tokenResult = await this.handleAuthResponse( response, authParams, localState ) + display: "popup", + request_type: "p", + }) + const { response, state } = await runPopup(url, popupOptions) + const { authParams, localState } = + !state || typeof state === "string" ? await this.loadState(state || response.state) : state + const tokenResult = await this.handleAuthResponse(response, authParams, localState) const authObject = await this.handleTokenResult( tokenResult, authParams, - mergeObjects( this.options, authParams ) + mergeObjects(this.options, authParams), ) - authObject.session_state= response.session_state; - this.synchronizer.BroadcastMessageToAllTabs( Events.USER_LOGIN, authObject ) + authObject.session_state = response.session_state + this.synchronizer.BroadcastMessageToAllTabs(Events.USER_LOGIN, authObject) return localState } @@ -233,55 +235,64 @@ export class OIDCClient extends EventEmitter{ * * @param url Full url which contains authorization request result parameters. Defaults to `window.location.href` */ - async loginCallback( url: string= window?.location?.href ){ - if ( !url ){ - return Promise.reject( new OIDCClientError( 'Url must be passed to handle login redirect' ) ) + async loginCallback(url: string = window?.location?.href) { + if (!url) { + return Promise.reject(new OIDCClientError("Url must be passed to handle login redirect")) } - let parsedUrl: URL; + let parsedUrl: URL try { - parsedUrl = new URL( url ) - } catch ( e ){ - return Promise.reject( new OIDCClientError( `Invalid callback url passed: "${ url }"` ) ) + parsedUrl = new URL(url) + } catch (e) { + return Promise.reject(new OIDCClientError(`Invalid callback url passed: "${url}"`)) } - const responseParams = parseQueryUrl( parsedUrl.search || parsedUrl.hash ) - const rawStoredState = await this.loadState( responseParams.state ) + const responseParams = parseQueryUrl(parsedUrl.search || parsedUrl.hash) + const rawStoredState = await this.loadState(responseParams.state) const { authParams, localState, request_type } = rawStoredState - url = url || window.location.href; - switch ( request_type ) { - case 's': - if ( window?.frameElement ) { - if ( url ) { - window.parent.postMessage( { - type: 'authorization_response', - response: responseParams, - state: rawStoredState - }, `${ location.protocol }//${ location.host }` ); + url = url || window.location.href + switch (request_type) { + case "s": + if (window?.frameElement) { + if (url) { + window.parent.postMessage( + { + type: "authorization_response", + response: responseParams, + state: rawStoredState, + }, + `${location.protocol}//${location.host}`, + ) } } return - case 'p': - if ( window.opener && url ){ - window.opener.postMessage( { - type: 'authorization_response', - response: responseParams, - state: rawStoredState - }, `${ location.protocol }//${ location.host }` ); + case "p": + if (window.opener && url) { + window.opener.postMessage( + { + type: "authorization_response", + response: responseParams, + state: rawStoredState, + }, + `${location.protocol}//${location.host}`, + ) } return - default: - if ( responseParams.error ){ - return Promise.reject( new AuthenticationError( responseParams.error, responseParams.error_description ) ) + default: { + if (responseParams.error) { + return Promise.reject( + new AuthenticationError(responseParams.error, responseParams.error_description), + ) } - const tokenResult = await this.handleAuthResponse( responseParams, authParams, localState ) + const tokenResult = await this.handleAuthResponse(responseParams, authParams, localState) const authObject = await this.handleTokenResult( tokenResult, authParams, - mergeObjects( this.options, authParams ) + mergeObjects(this.options, authParams), ) - authObject.session_state= responseParams.session_state; - this.synchronizer.BroadcastMessageToAllTabs( Events.USER_LOGIN, authObject ) + authObject.session_state = responseParams.session_state + this.synchronizer.BroadcastMessageToAllTabs(Events.USER_LOGIN, authObject) return localState + } } } @@ -290,14 +301,16 @@ export class OIDCClient extends EventEmitter{ * provided `post_logout_redirect_uri` if it provided. * @param options */ - async logout( options: LogoutRequestOptions = {} ){ - if ( !options.localOnly ) { - const storedAuth = await this.authStore.get( 'auth' ) + async logout(options: LogoutRequestOptions = {}) { + if (!options.localOnly) { + const storedAuth = await this.authStore.get("auth") const id_token_hint = options.id_token_hint || storedAuth?.id_token_raw - window.location.assign( await this.createLogoutRequest( { - ...options, - id_token_hint - } ) ) + window.location.assign( + await this.createLogoutRequest({ + ...options, + id_token_hint, + }), + ) } await this.authStore.clear() } @@ -308,23 +321,23 @@ export class OIDCClient extends EventEmitter{ * @param type Passed token's type. It will be used to provide `token_type_hint` parameter. * @param options If necessary override options passed to `OIDCClient` by defining them here. */ - async revokeToken( token: string, type: TokenType = 'access_token', options: RevokeOptions = {} ){ - if ( !this.options.endpoints!.revocation_endpoint ){ - return Promise.reject( new OIDCClientError( '"revocation_endpoint" doesn\'t exist' ) ) + async revokeToken(token: string, type: TokenType = "access_token", options: RevokeOptions = {}) { + if (!this.options.endpoints!.revocation_endpoint) { + return Promise.reject(new OIDCClientError('"revocation_endpoint" doesn\'t exist')) } const finalOptions = { - client_id: options.client_id || this.options.client_id, - client_secret: options.client_secret || this.options.client_secret, + client_id: options.client_id || this.options.client_id, + client_secret: options.client_secret || this.options.client_secret, token_type_hint: type, - token: token + token: token, } - return this.http( { - method: 'POST', - requestType: 'form', - url: this.options.endpoints!.revocation_endpoint, - body: finalOptions - } ) + return this.http({ + method: "POST", + requestType: "form", + url: this.options.endpoints!.revocation_endpoint, + body: finalOptions, + }) } /** @@ -337,100 +350,111 @@ export class OIDCClient extends EventEmitter{ * @param options * @param localState */ - async silentLogin( options: AuthRequestOptions = {}, localState: Record = {} ){ - await this.initialize( false ) - let tokenResult: any; + async silentLogin(options: AuthRequestOptions = {}, localState: Record = {}) { + await this.initialize(false) + let tokenResult: any let finalState: any = {} - const storedAuth = await this.authStore.get( 'auth' ) || {} + const storedAuth = (await this.authStore.get("auth")) || {} - const finalOptions = mergeObjects( { - response_mode: 'query', - display: 'page', - prompt: 'none' - }, this.options, options ) + const finalOptions = mergeObjects( + { + response_mode: "query", + display: "page", + prompt: "none", + }, + this.options, + options, + ) - if ( finalOptions.silent_redirect_uri ){ + if (finalOptions.silent_redirect_uri) { finalOptions.redirect_uri = finalOptions.silent_redirect_uri } - if ( this.options.useRefreshToken && storedAuth?.refresh_token ){ - finalState.authParams = mergeObjects( storedAuth?.authParams || {}, finalState.authParams || {} ) - tokenResult = await this.exchangeRefreshToken( { + if (this.options.useRefreshToken && storedAuth?.refresh_token) { + finalState.authParams = mergeObjects( + storedAuth?.authParams || {}, + finalState.authParams || {}, + ) + tokenResult = await this.exchangeRefreshToken({ ...finalOptions, refresh_token: storedAuth.refresh_token, - } ) + }) } else { - const authUrl = await this.createAuthRequest( { - ...finalOptions, - request_type: 's' - }, localState ) - - const { response, state } = await runIframe( authUrl, { - timeout: finalOptions.silentRequestTimeout, - eventOrigin: window.location.origin - } ) - tokenResult = await this.handleAuthResponse( response, finalOptions, localState ) - storedAuth.session_state = response.session_state; + const authUrl = await this.createAuthRequest( + { + ...finalOptions, + request_type: "s", + }, + localState, + ) + + const { response, state } = await runIframe(authUrl, { + timeout: finalOptions.silentRequestTimeout, + eventOrigin: window.location.origin, + }) + tokenResult = await this.handleAuthResponse(response, finalOptions, localState) + storedAuth.session_state = response.session_state finalState = state } - const authObject = await this.handleTokenResult( tokenResult, finalState.authParams, finalOptions ) + const authObject = await this.handleTokenResult( + tokenResult, + finalState.authParams, + finalOptions, + ) authObject.session_state = storedAuth.session_state - this.synchronizer.BroadcastMessageToAllTabs( Events.USER_LOGIN, authObject ) + this.synchronizer.BroadcastMessageToAllTabs(Events.USER_LOGIN, authObject) return finalState.localState } /** * Retrieve logged in user's access token if it exists. */ - async getAccessToken(){ - return ( await this.authStore.get( 'auth' ) )?.access_token + async getAccessToken() { + return (await this.authStore.get("auth"))?.access_token } - /** * Retrieve logged in user's refresh token if it exists. */ - async getRefreshToken(){ - return ( await this.authStore.get( 'auth' ) )?.refresh_token + async getRefreshToken() { + return (await this.authStore.get("auth"))?.refresh_token } /** * Retrieve logged in user's parsed id token if it exists. */ - async getIdToken(){ - return ( await this.authStore.get( 'auth' ) )?.id_token + async getIdToken() { + return (await this.authStore.get("auth"))?.id_token } /** * Retrieve access token's expiration. */ - async getExpiresIn(){ - return ( await this.authStore.get( 'auth' ) )?.expires_in + async getExpiresIn() { + return (await this.authStore.get("auth"))?.expires_in } /** * Retrieve logged in user's id token in raw format if it exists. */ - async getIdTokenRaw(){ - return ( await this.authStore.get( 'auth' ) )?.id_token_raw + async getIdTokenRaw() { + return (await this.authStore.get("auth"))?.id_token_raw } - /** * Retrieve logged in user's scopes if it exists. */ - async getScopes(){ - return ( await this.authStore.get( 'auth' ) )?.scope?.split( ' ' ) + async getScopes() { + return (await this.authStore.get("auth"))?.scope?.split(" ") } - /** * Retrieve logged in user's profile. */ - async getUser(){ - return ( await this.authStore.get( 'auth' ) )?.user + async getUser() { + return (await this.authStore.get("auth"))?.user } /** @@ -439,13 +463,13 @@ export class OIDCClient extends EventEmitter{ * * @param localOnly Don't check provider */ - async isLoggedIn( localOnly = false ){ - const existsOnLocal = !!await this.getUser() - if ( !existsOnLocal && !localOnly ){ + async isLoggedIn(localOnly = false) { + const existsOnLocal = !!(await this.getUser()) + if (!existsOnLocal && !localOnly) { try { await this.silentLogin() return true - } catch ( e ){ + } catch (e) { return false } } @@ -459,62 +483,68 @@ export class OIDCClient extends EventEmitter{ * @param localState * @private */ - private async createAuthRequest( options: Partial = {}, - localState: Record = {} ): Promise{ - if ( !this.options.endpoints?.authorization_endpoint ){ - await this.initialize( false ) + private async createAuthRequest( + options: Partial = {}, + localState: Record = {}, + ): Promise { + if (!this.options.endpoints?.authorization_endpoint) { + await this.initialize(false) } // TODO: deep merge for extra params - const finalOptions = Object.assign( {}, this.options, options ) - localState.code_verifier = generateRandom( 72 ) + const finalOptions = Object.assign({}, this.options, options) + localState.code_verifier = generateRandom(72) const authParams = { - client_id: finalOptions.client_id, - state: generateRandom( finalOptions.stateLength! ), - scope: finalOptions.scope, - audience: finalOptions.audience, - redirect_uri: finalOptions.redirect_uri, - response_mode: finalOptions.response_mode, - response_type: finalOptions.response_type || 'code', - ui_locales: finalOptions.ui_locales, - prompt: finalOptions.prompt, - display: finalOptions.display, - claims: finalOptions.claims, - claims_locales: finalOptions.claims_locales, - acr_values: finalOptions.acr_values, - registration: finalOptions.registration, - login_hint: finalOptions.login_hint, - id_token_hint: finalOptions.id_token_hint, - web_message_uri: finalOptions.web_message_uri, + client_id: finalOptions.client_id, + state: generateRandom(finalOptions.stateLength!), + scope: finalOptions.scope, + audience: finalOptions.audience, + redirect_uri: finalOptions.redirect_uri, + response_mode: finalOptions.response_mode, + response_type: finalOptions.response_type || "code", + ui_locales: finalOptions.ui_locales, + prompt: finalOptions.prompt, + display: finalOptions.display, + claims: finalOptions.claims, + claims_locales: finalOptions.claims_locales, + acr_values: finalOptions.acr_values, + registration: finalOptions.registration, + login_hint: finalOptions.login_hint, + id_token_hint: finalOptions.id_token_hint, + web_message_uri: finalOptions.web_message_uri, web_message_target: finalOptions.web_message_target, - ...finalOptions.extraParams && finalOptions.extraParams - } as AuthRequestOptions; + ...(finalOptions.extraParams && finalOptions.extraParams), + } as AuthRequestOptions - if ( isResponseType( 'id_token', authParams.response_type ) || - isScopeIncluded( 'openid', authParams.scope ) ){ - authParams.nonce = generateRandom( finalOptions.nonceLength! ) + if ( + isResponseType("id_token", authParams.response_type) || + isScopeIncluded("openid", authParams.scope) + ) { + authParams.nonce = generateRandom(finalOptions.nonceLength!) } - if ( isResponseType( 'code', authParams.response_type ) ){ - authParams.code_challenge= await deriveChallenge( localState.code_verifier ) - authParams.code_challenge_method= finalOptions.code_challenge_method || 'S256' + if (isResponseType("code", authParams.response_type)) { + authParams.code_challenge = await deriveChallenge(localState.code_verifier) + authParams.code_challenge_method = finalOptions.code_challenge_method || "S256" } - const now = this.options.currentTimeInMillis && this.options.currentTimeInMillis() || Date.now() - const fragment = finalOptions.fragment ? `#${ finalOptions.fragment }` : ''; - const authParamsString = buildEncodedQueryString( authParams ) - const url = `${ this.options.endpoints!.authorization_endpoint }${ authParamsString }${ fragment }` + const now = this.options.currentTimeInMillis?.() || Date.now() + const fragment = finalOptions.fragment ? `#${finalOptions.fragment}` : "" + const authParamsString = buildEncodedQueryString(authParams) + const url = `${this.options.endpoints!.authorization_endpoint}${authParamsString}${fragment}` // clear 1 day old state entries - this.stateStore.clear( now - 86400000 ) - - - await this.stateStore.set( authParams.state!, cleanUndefined( { - created_at: now, - authParams, - localState, - request_type: finalOptions.request_type - } ) ) + this.stateStore.clear(now - 86400000) + + await this.stateStore.set( + authParams.state!, + cleanUndefined({ + created_at: now, + authParams, + localState, + request_type: finalOptions.request_type, + }), + ) return url } @@ -524,17 +554,17 @@ export class OIDCClient extends EventEmitter{ * @param options * @private */ - private async createLogoutRequest( options: LogoutRequestOptions = {} ){ - if ( !this.options.endpoints?.end_session_endpoint ){ - await this.fetchFromIssuer(); + private async createLogoutRequest(options: LogoutRequestOptions = {}) { + if (!this.options.endpoints?.end_session_endpoint) { + await this.fetchFromIssuer() } - const finalOptions = mergeObjects( this.options, options ) + const finalOptions = mergeObjects(this.options, options) const logoutParams = { - id_token_hint: finalOptions.id_token_hint, + id_token_hint: finalOptions.id_token_hint, post_logout_redirect_uri: finalOptions.post_logout_redirect_uri, - ...finalOptions.extraLogoutParams || {} + ...(finalOptions.extraLogoutParams || {}), } - return `${ this.options.endpoints!.end_session_endpoint }${ buildEncodedQueryString( logoutParams ) }` + return `${this.options.endpoints!.end_session_endpoint}${buildEncodedQueryString(logoutParams)}` } /** @@ -542,31 +572,31 @@ export class OIDCClient extends EventEmitter{ * @param options * @private */ - private async exchangeAuthorizationCode( options: TokenRequestOption ){ - if ( !this.options.endpoints?.token_endpoint ){ - await this.fetchFromIssuer(); + private async exchangeAuthorizationCode(options: TokenRequestOption) { + if (!this.options.endpoints?.token_endpoint) { + await this.fetchFromIssuer() } - const finalOptions = mergeObjects( this.options, options ) + const finalOptions = mergeObjects(this.options, options) const { extraTokenHeaders, extraTokenParams, ...rest } = finalOptions const mergedOptions = { ...rest, - ...extraTokenParams || {}, - grant_type: 'authorization_code', + ...(extraTokenParams || {}), + grant_type: "authorization_code", } - for ( const req of ['code', 'redirect_uri', 'code_verifier', 'client_id'] as const ){ - if ( !mergedOptions[req] ){ - return Promise.reject( new Error( `"${ req }" is required` ) ); + for (const req of ["code", "redirect_uri", "code_verifier", "client_id"] as const) { + if (!mergedOptions[req]) { + return Promise.reject(new Error(`"${req}" is required`)) } } - return this.http( { - url: `${ this.options.endpoints!.token_endpoint }`, - method: 'POST', - requestType: 'form', - body: mergedOptions as any, - headers: extraTokenHeaders - } ) + return this.http({ + url: `${this.options.endpoints!.token_endpoint}`, + method: "POST", + requestType: "form", + body: mergedOptions as any, + headers: extraTokenHeaders, + }) } /** @@ -574,56 +604,60 @@ export class OIDCClient extends EventEmitter{ * @param options * @private */ - private async exchangeRefreshToken( options: Partial ) { - if ( !this.options.endpoints?.token_endpoint ){ - await this.fetchFromIssuer(); + private async exchangeRefreshToken(options: Partial) { + if (!this.options.endpoints?.token_endpoint) { + await this.fetchFromIssuer() } const { extraTokenHeaders, extraTokenParams, ...rest } = options const mergedOptions = { - grant_type: 'refresh_token', - client_id: this.options.client_id, + grant_type: "refresh_token", + client_id: this.options.client_id, client_secret: this.options.client_secret, ...rest, - ...extraTokenParams || {} + ...(extraTokenParams || {}), } - for ( const req of ['refresh_token', 'client_id'] as const ){ - if ( !mergedOptions[req] ){ - return Promise.reject( new Error( `"${ req }" is required` ) ); + for (const req of ["refresh_token", "client_id"] as const) { + if (!mergedOptions[req]) { + return Promise.reject(new Error(`"${req}" is required`)) } } - return this.http( { - url: `${ this.options.endpoints!.token_endpoint }`, - method: 'POST', - requestType: 'form', - body: mergedOptions as any, - headers: extraTokenHeaders - } ); + return this.http({ + url: `${this.options.endpoints!.token_endpoint}`, + method: "POST", + requestType: "form", + body: mergedOptions as any, + headers: extraTokenHeaders, + }) } /** * Fetch OIDC configuration from the issuer. */ - private async fetchFromIssuer(): Promise>{ + private async fetchFromIssuer(): Promise> { try { - const requestUrl = `${ this.options.issuer }/.well-known/openid-configuration` - const response = await this.http( { - url: requestUrl, - method: 'GET', - requestType: 'json' - } ) + const requestUrl = `${this.options.issuer}/.well-known/openid-configuration` + const response = await this.http({ + url: requestUrl, + method: "GET", + requestType: "json", + }) this.issuer_metadata = response as Record const endpoints = {} as any - for ( const prop of Object.keys( this.issuer_metadata ) ) { - if ( prop.endsWith( '_endpoint' ) || prop.indexOf( '_session' ) > -1 || prop.indexOf( '_uri' ) > -1 ) { - endpoints[prop as keyof IEndpointConfiguration] = this.issuer_metadata[prop]; + for (const prop of Object.keys(this.issuer_metadata)) { + if ( + prop.endsWith("_endpoint") || + prop.indexOf("_session") > -1 || + prop.indexOf("_uri") > -1 + ) { + endpoints[prop as keyof IEndpointConfiguration] = this.issuer_metadata[prop] } } this.options.endpoints = endpoints - return this.issuer_metadata; - } catch ( e ) { - throw new OIDCClientError( 'Loading metadata failed', e.message ) + return this.issuer_metadata + } catch (e) { + throw new OIDCClientError("Loading metadata failed", e.message) } } @@ -637,19 +671,18 @@ export class OIDCClient extends EventEmitter{ private async handleAuthResponse( response: any, finalOptions: AuthRequestOptions, - localState: Record = {} - ){ - if ( response.code ){ - return this.exchangeAuthorizationCode( { - redirect_uri: finalOptions.redirect_uri, - client_id: finalOptions.client_id, + localState: Record = {}, + ) { + if (response.code) { + return this.exchangeAuthorizationCode({ + redirect_uri: finalOptions.redirect_uri, + client_id: finalOptions.client_id, code_verifier: localState.code_verifier, - grant_type: 'authorization_code', - code: response.code, - } ); - } else { - return response + grant_type: "authorization_code", + code: response.code, + }) } + return response } /** @@ -659,30 +692,36 @@ export class OIDCClient extends EventEmitter{ * @param finalOptions * @private */ - private async handleTokenResult( tokenResult: TokenResponse, authParams: AuthRequestOptions, - finalOptions: IPlusAuthClientOptions ){ - await this.initialize( false ) + private async handleTokenResult( + tokenResult: TokenResponse, + authParams: AuthRequestOptions, + finalOptions: IPlusAuthClientOptions, + ) { + await this.initialize(false) let user: any = {} - if ( tokenResult.error ){ - throw new AuthenticationError( tokenResult.error, tokenResult.error_description ) - } - let parsedIDToken: any; - if ( tokenResult.id_token ){ - parsedIDToken = await validateIdToken( tokenResult.id_token, authParams.nonce!, finalOptions ) - if ( finalOptions.idTokenValidator && !await finalOptions.idTokenValidator( tokenResult.id_token ) ){ - return Promise.reject( new InvalidIdTokenError( 'Id Token validation failed' ) ) + if (tokenResult.error) { + throw new AuthenticationError(tokenResult.error, tokenResult.error_description) + } + let parsedIDToken: any + if (tokenResult.id_token) { + parsedIDToken = await validateIdToken(tokenResult.id_token, authParams.nonce!, finalOptions) + if ( + finalOptions.idTokenValidator && + !(await finalOptions.idTokenValidator(tokenResult.id_token)) + ) { + return Promise.reject(new InvalidIdTokenError("Id Token validation failed")) } - Object.keys( parsedIDToken ).forEach( key => { - if ( !nonUserClaims.includes( key as any ) ){ + Object.keys(parsedIDToken).forEach((key) => { + if (!nonUserClaims.includes(key as any)) { user[key] = parsedIDToken[key] } - } ) + }) } - if ( tokenResult.access_token ) { - if ( finalOptions.requestUserInfo && this.options.endpoints?.userinfo_endpoint ) { - const userInfoResult = await this.fetchUserInfo( tokenResult.access_token ) - if ( !userInfoResult.error ){ + if (tokenResult.access_token) { + if (finalOptions.requestUserInfo && this.options.endpoints?.userinfo_endpoint) { + const userInfoResult = await this.fetchUserInfo(tokenResult.access_token) + if (!userInfoResult.error) { user = { ...user, ...userInfoResult } } } @@ -692,9 +731,9 @@ export class OIDCClient extends EventEmitter{ authParams, user, ...tokenResult, - id_token: parsedIDToken, + id_token: parsedIDToken, id_token_raw: tokenResult.id_token, - scope: tokenResult.scope || authParams.scope, + scope: tokenResult.scope || authParams.scope, } } @@ -704,13 +743,12 @@ export class OIDCClient extends EventEmitter{ * @param state * @private */ - private async loadState( state: string ){ - const rawStoredState = await this.stateStore.get( state ) - if ( !rawStoredState ){ - return Promise.reject( new StateNotFound( 'Local state not found', state ) ) - } else { - await this.stateStore.del( state ) + private async loadState(state: string) { + const rawStoredState = await this.stateStore.get(state) + if (!rawStoredState) { + return Promise.reject(new StateNotFound("Local state not found", state)) } + await this.stateStore.del(state) return rawStoredState } @@ -720,15 +758,15 @@ export class OIDCClient extends EventEmitter{ * @param accessToken * @private */ - private async fetchUserInfo( accessToken: string ){ - return this.http( { - method: 'GET', - url: `${ this.options.endpoints!.userinfo_endpoint }`, - requestType: 'json', - headers: { - 'Authorization': `Bearer ${ accessToken }` - } - } ) + private async fetchUserInfo(accessToken: string) { + return this.http({ + method: "GET", + url: `${this.options.endpoints!.userinfo_endpoint}`, + requestType: "json", + headers: { + Authorization: `Bearer ${accessToken}`, + }, + }) } /** @@ -738,82 +776,93 @@ export class OIDCClient extends EventEmitter{ * @param sub End-User's id to for monitoring session * @param session_state string that represents the End-User's login state at the OP */ - private monitorSession( { sub, session_state }: SessionMonitorOptions ){ + private monitorSession({ sub, session_state }: SessionMonitorOptions) { const { client_id, endpoints } = this.options - if ( !endpoints?.check_session_iframe ){ - console.warn( '"check_session_iframe" endpoint missing or session management is not supported by provider' ) + if (!endpoints?.check_session_iframe) { + console.warn( + '"check_session_iframe" endpoint missing or session management is not supported by provider', + ) return } - if ( !this.sessionCheckerFrame ){ - const sessionCheckCallback = async ( err: any )=>{ - if ( err ){ - this.emit( Events.USER_LOGOUT ) + if (!this.sessionCheckerFrame) { + const sessionCheckCallback = async (err: any) => { + if (err) { + this.emit(Events.USER_LOGOUT) } else { - this.emit( Events.SESSION_CHANGE ) + this.emit(Events.SESSION_CHANGE) try { - await this.silentLogin( {}, {} ) - const storedAuth = await this.authStore.get( 'auth' ) - if ( storedAuth ){ - if ( storedAuth.user?.sub === sub && storedAuth.session_state ){ - this.sessionCheckerFrame!.start( storedAuth.session_state ) + await this.silentLogin({}, {}) + const storedAuth = await this.authStore.get("auth") + if (storedAuth) { + if (storedAuth.user?.sub === sub && storedAuth.session_state) { + this.sessionCheckerFrame!.start(storedAuth.session_state) } } else { - this.emit( Events.USER_LOGOUT, null ) + this.emit(Events.USER_LOGOUT, null) } - } catch ( e ) { - this.emit( Events.USER_LOGOUT ) + } catch (e) { + this.emit(Events.USER_LOGOUT) return } } } - this.sessionCheckerFrame = createSessionCheckerFrame( { - url: endpoints.check_session_iframe, - client_id: client_id, - callback: sessionCheckCallback, + this.sessionCheckerFrame = createSessionCheckerFrame({ + url: endpoints.check_session_iframe, + client_id: client_id, + callback: sessionCheckCallback, checkInterval: this.options.checkSessionInterval, - } ) + }) } - this.sessionCheckerFrame.start( session_state ) + this.sessionCheckerFrame.start(session_state) } - private async onUserLogin( authObj: any, isInternal = false ){ - const { expires_in, user, scope, access_token, id_token, refresh_token, session_state, id_token_raw } = authObj - await this.authStore.set( 'auth', authObj ) + private async onUserLogin(authObj: any, isInternal = false) { + const { + expires_in, + user, + scope, + access_token, + id_token, + refresh_token, + session_state, + id_token_raw, + } = authObj + await this.authStore.set("auth", authObj) this.user = user - this.scopes = scope?.split( ' ' ); + this.scopes = scope?.split(" ") this.accessToken = access_token this.idToken = id_token this.idTokenRaw = id_token_raw this.refreshToken = refresh_token - if ( !isInternal ){ - this.emit( Events.USER_LOGIN, authObj ) + if (!isInternal) { + this.emit(Events.USER_LOGIN, authObj) } - if ( !window?.frameElement ) { - if ( this.options.checkSession ) { - this.monitorSession( { sub: user.sub || user.id, session_state } ) + if (!window?.frameElement) { + if (this.options.checkSession) { + this.monitorSession({ sub: user.sub || user.id, session_state }) } - if ( expires_in !== undefined && this.options.autoSilentRenew ){ - const expiration = Number( expires_in ) - this.options.secondsToRefreshAccessTokenBeforeExp! + if (expires_in !== undefined && this.options.autoSilentRenew) { + const expiration = Number(expires_in) - this.options.secondsToRefreshAccessTokenBeforeExp! const renew = () => { - this.synchronizer.CallOnce( 'silent-login', async () => { + this.synchronizer.CallOnce("silent-login", async () => { try { await this.silentLogin() - this.emit( Events.SILENT_RENEW_SUCCESS, null ) - } catch ( e ) { - this.emit( Events.SILENT_RENEW_ERROR, e ) + this.emit(Events.SILENT_RENEW_SUCCESS, null) + } catch (e) { + this.emit(Events.SILENT_RENEW_ERROR, e) } - } ) + }) } - if ( expiration >= 0 ){ - this._accessTokenExpireTimer!.start( expiration, async ()=> { + if (expiration >= 0) { + this._accessTokenExpireTimer!.start(expiration, async () => { renew() - } ) + }) } else { renew() } diff --git a/src/constants/events.ts b/src/constants/events.ts index 2831a6a..9bccc67 100644 --- a/src/constants/events.ts +++ b/src/constants/events.ts @@ -1,11 +1,16 @@ /* eslint-disable @typescript-eslint/indent */ export const Events = { - USER_LOGOUT: 'user_logout', - USER_LOGIN: 'user_login', - SILENT_RENEW_SUCCESS: 'silent_renew_success', - SILENT_RENEW_ERROR: 'silent_renew_error', - SESSION_CHANGE: 'session_change' + USER_LOGOUT: "user_logout", + USER_LOGIN: "user_login", + SILENT_RENEW_SUCCESS: "silent_renew_success", + SILENT_RENEW_ERROR: "silent_renew_error", + SESSION_CHANGE: "session_change", } as const -export type EventTypes = 'user_logout' | 'user_login' | 'silent_renew_success' | - 'silent_renew_error' | 'session_change' | 'session_error' +export type EventTypes = + | "user_logout" + | "user_login" + | "silent_renew_success" + | "silent_renew_error" + | "session_change" + | "session_error" diff --git a/src/constants/index.ts b/src/constants/index.ts index def94ce..92c2484 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -1 +1 @@ -export * from './events' +export * from "./events" diff --git a/src/errors.ts b/src/errors.ts index ddef58b..15d6fbb 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -1,57 +1,57 @@ export class OIDCClientError extends Error { - error: string; + error: string - error_description?: string; + error_description?: string - public constructor( error: string, error_description?: string ) { - super( `${ error }${ error_description && ` - ${ error_description }` || '' }` ); - this.name = 'OIDCClientError' + public constructor(error: string, error_description?: string) { + super(`${error}${(error_description && ` - ${error_description}`) || ""}`) + this.name = "OIDCClientError" this.error = error this.error_description = error_description } } export class AuthenticationError extends OIDCClientError { - state?: string; + state?: string - error_uri?: string; + error_uri?: string - constructor( error: string, error_description?: string, state?: string, error_uri?: string ) { - super( error, error_description ); - this.name = 'AuthenticationError' - this.state = state; - this.error_uri = error_uri; + constructor(error: string, error_description?: string, state?: string, error_uri?: string) { + super(error, error_description) + this.name = "AuthenticationError" + this.state = state + this.error_uri = error_uri } } export class StateNotFound extends AuthenticationError { - state?: string; + state?: string - constructor( error: string, state?: string ) { - super( error ); - this.name = 'StateNotFound' - this.state = state; + constructor(error: string, state?: string) { + super(error) + this.name = "StateNotFound" + this.state = state } } export class InvalidJWTError extends OIDCClientError { - constructor( details: string ) { - super( details ); - this.name = 'InvalidJWTError' + constructor(details: string) { + super(details) + this.name = "InvalidJWTError" this.error_description = details } } export class InvalidIdTokenError extends InvalidJWTError { - constructor( details: string ) { - super( details ); - this.name = 'InvalidIdTokenError' + constructor(details: string) { + super(details) + this.name = "InvalidIdTokenError" } } export class InteractionCancelled extends OIDCClientError { - constructor( details: string ) { - super( details ); - this.name = 'InteractionCancelled' + constructor(details: string) { + super(details) + this.name = "InteractionCancelled" } } diff --git a/src/helpers/event_emitter.ts b/src/helpers/event_emitter.ts index cac8164..97bbd16 100644 --- a/src/helpers/event_emitter.ts +++ b/src/helpers/event_emitter.ts @@ -1,67 +1,67 @@ -export type Listener = ( ...args: any ) => void +export type Listener = (...args: any) => void -export class EventEmitter{ - callbacks: Record; +export class EventEmitter { + callbacks: Record - constructor(){ + constructor() { this.callbacks = {} } - once( event: T, fn: ( ...args: any[] ) => void ){ - function on( this: EventEmitter, ...onArgs: any[] ) { - this.off( event, on ); - fn.apply( this, onArgs ); + once(event: T, fn: (...args: any[]) => void) { + function on(this: EventEmitter, ...onArgs: any[]) { + this.off(event, on) + fn.apply(this, onArgs) } on.fn = fn - this.on( event, on ); - return this; + this.on(event, on) + return this } - on( event: T, cb: ( ...args: any[] ) => void ){ - if ( !this.callbacks[`$${ event }`] ) this.callbacks[`$${ event }`] = []; - this.callbacks[`$${ event }`].push( cb ) + on(event: T, cb: (...args: any[]) => void) { + if (!this.callbacks[`$${event}`]) this.callbacks[`$${event}`] = [] + this.callbacks[`$${event}`].push(cb) return this } - off( event?: T, fn?: ( ...args: any[] ) => void ){ - if ( !event ) { - this.callbacks = {}; - return this; + off(event?: T, fn?: (...args: any[]) => void) { + if (!event) { + this.callbacks = {} + return this } // specific event - const callbacks = this.callbacks[`$${ event }`]; - if ( !callbacks ) return this; + const callbacks = this.callbacks[`$${event}`] + if (!callbacks) return this // remove all handlers - if ( !fn ) { - delete this.callbacks[`$${ event }`]; - return this; + if (!fn) { + delete this.callbacks[`$${event}`] + return this } - for ( let i = 0; i < callbacks.length; i++ ) { - const cb = callbacks[i]; - if ( cb === fn || cb.fn === fn ) { - callbacks.splice( i, 1 ); - break; + for (let i = 0; i < callbacks.length; i++) { + const cb = callbacks[i] + if (cb === fn || cb.fn === fn) { + callbacks.splice(i, 1) + break } } // Remove event specific arrays for event types that no // one is subscribed for to avoid memory leak. - if ( callbacks.length === 0 ) { - delete this.callbacks[`$${ event }`]; + if (callbacks.length === 0) { + delete this.callbacks[`$${event}`] } - return this; + return this } - emit( event: T, ...args: any[] ){ - let cbs = this.callbacks[`$${ event }`] - if ( cbs ) { - cbs = cbs.slice( 0 ); - for ( let i = 0, len = cbs.length; i < len; ++i ) { - cbs[i].apply( this, args ); + emit(event: T, ...args: any[]) { + let cbs = this.callbacks[`$${event}`] + if (cbs) { + cbs = cbs.slice(0) + for (let i = 0, len = cbs.length; i < len; ++i) { + cbs[i].apply(this, args) } } return this diff --git a/src/helpers/index.ts b/src/helpers/index.ts index 4d8de0b..d7b5afa 100644 --- a/src/helpers/index.ts +++ b/src/helpers/index.ts @@ -1,2 +1,2 @@ -export * from './state_manager' -export * from './event_emitter' +export * from "./state_manager" +export * from "./event_emitter" diff --git a/src/helpers/state_manager/in_memory.ts b/src/helpers/state_manager/in_memory.ts index dfda54d..6d36b55 100644 --- a/src/helpers/state_manager/in_memory.ts +++ b/src/helpers/state_manager/in_memory.ts @@ -1,32 +1,31 @@ -import { StateStore } from './state_store'; +import { StateStore } from "./state_store" export class InMemoryStateStore extends StateStore { map = new Map() - clear( before?: number ) { - if ( before ){ - this.map.forEach( ( val, ind ) => { - if ( val.created_at < before ){ - this.map.delete( ind ) + clear(before?: number) { + if (before) { + this.map.forEach((val, ind) => { + if (val.created_at < before) { + this.map.delete(ind) } - } ) + }) return Promise.resolve() - } else { - return Promise.resolve( this.map.clear() ); } + return Promise.resolve(this.map.clear()) } - del( key: string ) { - this.map.delete( key ) - return Promise.resolve( ); + del(key: string) { + this.map.delete(key) + return Promise.resolve() } - get( key: string ) { - return Promise.resolve( this.map.get( key ) || null ); + get(key: string) { + return Promise.resolve(this.map.get(key) || null) } - set( key: string, value: any ) { - this.map.set( key, value ) - return Promise.resolve(); + set(key: string, value: any) { + this.map.set(key, value) + return Promise.resolve() } } diff --git a/src/helpers/state_manager/index.ts b/src/helpers/state_manager/index.ts index 5a3bd32..8165bf0 100644 --- a/src/helpers/state_manager/index.ts +++ b/src/helpers/state_manager/index.ts @@ -1,3 +1,3 @@ -export * from './state_store' -export * from './local_storage' -export * from './in_memory' +export * from "./state_store" +export * from "./local_storage" +export * from "./in_memory" diff --git a/src/helpers/state_manager/local_storage.ts b/src/helpers/state_manager/local_storage.ts index ce94811..771e973 100644 --- a/src/helpers/state_manager/local_storage.ts +++ b/src/helpers/state_manager/local_storage.ts @@ -1,60 +1,59 @@ -import { StateStore } from './state_store'; +import { StateStore } from "./state_store" export class LocalStorageStateStore extends StateStore { - constructor( prefix = 'pa_oidc.' ) { - super( prefix ) + constructor(prefix = "pa_oidc.") { + super(prefix) } - get( key: string ) { - return new Promise( ( resolve ) => { - const value = window.localStorage.getItem( this.prefix + key ); - if ( value ) { - resolve( JSON.parse( value ) ); + get(key: string) { + return new Promise((resolve) => { + const value = window.localStorage.getItem(this.prefix + key) + if (value) { + resolve(JSON.parse(value)) } else { - resolve( null ); + resolve(null) } - } ); + }) } - set( key: string, value: T ) { - return new Promise( ( resolve ) => { - window.localStorage.setItem( this.prefix + key, JSON.stringify( value ) ); - resolve(); - } ); + set(key: string, value: T) { + return new Promise((resolve) => { + window.localStorage.setItem(this.prefix + key, JSON.stringify(value)) + resolve() + }) } - del( key: string ) { - return new Promise( ( resolve ) => { - window.localStorage.removeItem( this.prefix + key ); - resolve(); - } ); + del(key: string) { + return new Promise((resolve) => { + window.localStorage.removeItem(this.prefix + key) + resolve() + }) } - clear( before?: number ): Promise { - return new Promise( ( resolve ) => { - let i; - const storedKeys: string[] = []; - for ( i = 0; i < window.localStorage.length; i++ ) { - const key = window.localStorage.key( i ) + clear(before?: number): Promise { + return new Promise((resolve) => { + let i + const storedKeys: string[] = [] + for (i = 0; i < window.localStorage.length; i++) { + const key = window.localStorage.key(i) // items only created by oidc client - if ( key?.substring( 0, this.prefix.length ) == this.prefix ) { - storedKeys.push( key ); + if (key?.substring(0, this.prefix.length) === this.prefix) { + storedKeys.push(key) } } - for ( i = 0; i < storedKeys.length; i++ ) { - if ( before ) { + for (i = 0; i < storedKeys.length; i++) { + if (before) { try { - const storedItem = JSON.parse( window.localStorage.getItem( storedKeys[i] )! ) - if ( storedItem.created_at < before ) { - window.localStorage.removeItem( storedKeys[i] ) + const storedItem = JSON.parse(window.localStorage.getItem(storedKeys[i])!) + if (storedItem.created_at < before) { + window.localStorage.removeItem(storedKeys[i]) } - } catch ( e ) { - } + } catch (e) {} } else { - window.localStorage.removeItem( storedKeys[i] ) + window.localStorage.removeItem(storedKeys[i]) } } - resolve(); - } ); + resolve() + }) } } diff --git a/src/helpers/state_manager/state_store.ts b/src/helpers/state_manager/state_store.ts index 6a9a376..5abbac6 100644 --- a/src/helpers/state_manager/state_store.ts +++ b/src/helpers/state_manager/state_store.ts @@ -1,19 +1,19 @@ export interface StateStore> { init?(): Promise> } -// eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging +// biome-ignore lint/suspicious/noUnsafeDeclarationMerging: export abstract class StateStore> { - prefix: string; + prefix: string - constructor( prefix = '' ) { + constructor(prefix = "") { this.prefix = prefix } - public abstract get( key: string ): Promise; + public abstract get(key: string): Promise - public abstract set( key: string, value: T ): Promise; + public abstract set(key: string, value: T): Promise - public abstract del( key: string ): Promise; + public abstract del(key: string): Promise - public abstract clear( maxAge?: number ): Promise; + public abstract clear(maxAge?: number): Promise } diff --git a/src/helpers/timer.ts b/src/helpers/timer.ts index f3650fc..7e88c33 100644 --- a/src/helpers/timer.ts +++ b/src/helpers/timer.ts @@ -1,44 +1,44 @@ export class Timer { - private now: () => number; + private now: () => number - private _timerHandle: any; + private _timerHandle: any - private _expiration!: number; + private _expiration!: number - constructor( currentTimeInMillisFunc = () => Date.now() ) { + constructor(currentTimeInMillisFunc = () => Date.now()) { this.now = currentTimeInMillisFunc } - start( duration: number, callback: () => void ){ - if ( duration <= 0 ) { - duration = 1; + start(duration: number, callback: () => void) { + if (duration <= 0) { + duration = 1 } - const expiration = this.now() / 1000 + duration; - if ( this._expiration === expiration && this._timerHandle ) { - return; + const expiration = this.now() / 1000 + duration + if (this._expiration === expiration && this._timerHandle) { + return } - this.stop(); + this.stop() - this._expiration = expiration; + this._expiration = expiration // prevent device sleep and delayed timers - let timerDuration = 5; - if ( duration < timerDuration ) { - timerDuration = duration; + let timerDuration = 5 + if (duration < timerDuration) { + timerDuration = duration } - this._timerHandle = setInterval( ()=>{ - if ( this._expiration <= this.now() / 1000 ) { - this.stop(); + this._timerHandle = setInterval(() => { + if (this._expiration <= this.now() / 1000) { + this.stop() callback() } - }, timerDuration * 1000 ); + }, timerDuration * 1000) } stop() { - if ( this._timerHandle ) { - clearInterval( this._timerHandle ); - this._timerHandle = null; + if (this._timerHandle) { + clearInterval(this._timerHandle) + this._timerHandle = null } } } diff --git a/src/index.ts b/src/index.ts index f00d204..4b1d90b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,16 +1,16 @@ -import { OIDCClient } from './client'; -import type { IPlusAuthClientOptions } from './interfaces'; +import { OIDCClient } from "./client" +import type { IPlusAuthClientOptions } from "./interfaces" -export * from './interfaces' -export * from './client' -export * from './constants' -export * from './helpers' -export * from './errors' +export * from "./interfaces" +export * from "./client" +export * from "./constants" +export * from "./helpers" +export * from "./errors" /** * Create OIDC client with initializing it. It resolves issuer metadata, jwks keys and check if user is * authenticated in OpenId Connect provider. */ -export default function createOIDCClient( options: IPlusAuthClientOptions ): Promise{ - return new OIDCClient( options ).initialize() +export default function createOIDCClient(options: IPlusAuthClientOptions): Promise { + return new OIDCClient(options).initialize() } diff --git a/src/interfaces/index.ts b/src/interfaces/index.ts index a1eef75..b5c927a 100644 --- a/src/interfaces/index.ts +++ b/src/interfaces/index.ts @@ -1,92 +1,105 @@ -import type { StateStore } from '../helpers'; -import type { nonUserClaims, RequestOptions } from '../utils'; +import type { StateStore } from "../helpers" +import type { RequestOptions, nonUserClaims } from "../utils" // https://tools.ietf.org/html/draft-ietf-jose-json-web-encryption-40 // https://tools.ietf.org/html/draft-ietf-jose-json-web-signature-41 -export type JWTHeaderField = 'typ' | 'cty' | 'alg' | 'zip' | 'jku' | 'jwk' | -'kid' | 'x5u' | 'x5c' | 'x5t' | 'x5t#S256' | 'crit' | 'exp' +export type JWTHeaderField = + | "typ" + | "cty" + | "alg" + | "zip" + | "jku" + | "jwk" + | "kid" + | "x5u" + | "x5c" + | "x5t" + | "x5t#S256" + | "crit" + | "exp" export interface AuthRequestOptions { - acr_values?: string; - audience?: string; - claims?: Record; - claims_locales?: string; - client_id?: string; - code_challenge?: string; - code_challenge_method?: string; - code_verifier?: string; - display?: string; - extraParams?: { [key: string]: any }; - fragment?: string; - id_token_hint?: string, - login_hint?: string, - nonce?: string; - prompt?: string; - redirect_uri?: string; - registration?: string; - request_type?: 's' | 'p' | 'd', - response_mode?: string; - response_type?: string; - scope?: string; - state?: string; - ui_locales?: string; - web_message_target?: string; - web_message_uri?: string; + acr_values?: string + audience?: string + claims?: Record + claims_locales?: string + client_id?: string + code_challenge?: string + code_challenge_method?: string + code_verifier?: string + display?: string + extraParams?: { [key: string]: any } + fragment?: string + id_token_hint?: string + login_hint?: string + nonce?: string + prompt?: string + redirect_uri?: string + registration?: string + request_type?: "s" | "p" | "d" + response_mode?: string + response_type?: string + scope?: string + state?: string + ui_locales?: string + web_message_target?: string + web_message_uri?: string } export interface SessionMonitorOptions { - session_state: string, - sub: string; + session_state: string + sub: string } export interface LogoutRequestOptions { - extraLogoutParams?: { [key: string]: string }, - id_token_hint?: string; - localOnly?: boolean, - post_logout_redirect_uri?: string; + extraLogoutParams?: { [key: string]: string } + id_token_hint?: string + localOnly?: boolean + post_logout_redirect_uri?: string } export interface IEndpointConfiguration { - authorization_endpoint?: string, - check_session_iframe?: string, - device_authorization_endpoint?: string, - end_session_endpoint?: string, - introspection_endpoint?: string, - jwks_uri?: string; - mfa_endpoint?: string, - registration_endpoint?: string, - revocation_endpoint?: string, - token_endpoint?: string, + authorization_endpoint?: string + check_session_iframe?: string + device_authorization_endpoint?: string + end_session_endpoint?: string + introspection_endpoint?: string + jwks_uri?: string + mfa_endpoint?: string + registration_endpoint?: string + revocation_endpoint?: string + token_endpoint?: string userinfo_endpoint?: string } -export interface IPlusAuthClientOptions extends Omit, - Omit { - authStore?: StateStore; +export interface IPlusAuthClientOptions + extends Omit, + Omit { + authStore?: StateStore /** * Enable/disable automatic access token renewal. If enabled, access tokens will be refreshed by using silent * login in an iframe before they expire. * * Also see {@link secondsToRefreshAccessTokenBeforeExp} */ - autoSilentRenew?: boolean; + autoSilentRenew?: boolean /** * Enable/Disable session monitoring. */ - checkSession?: boolean; + checkSession?: boolean /** * Session checking interval in milliseconds. Defaults to 2000 */ - checkSessionInterval?: number; + checkSessionInterval?: number - client_id: string; + client_id: string - client_secret?: string; + client_secret?: string /** * The amount of clock skew tolerated for time comparisons between the Authorization server and client in seconds. */ - clockSkew?: number; + clockSkew?: number /** * Custom current time function to be used for time related operations. If client clock is far ahead or far before @@ -94,152 +107,150 @@ export interface IPlusAuthClientOptions extends Omit number; + currentTimeInMillis?: () => number - endpoints?: IEndpointConfiguration, + endpoints?: IEndpointConfiguration - httpClient?: ( options: RequestOptions ) => Promise; + httpClient?: (options: RequestOptions) => Promise /** * Additional id token validator. By default only payload fields validated. If you need additional validations, * like signature validation, you should implement and provide it with this option. * * @param idToken raw id token string */ - idTokenValidator?: ( idToken: string ) => Promise; - issuer: string; + idTokenValidator?: (idToken: string) => Promise + issuer: string /** * Generated nonce length. Defaults to 10 * @default 10 */ - nonceLength?: number; + nonceLength?: number /** * Fetch user profile by using [UserInfo * Request](https://openid.net/specs/openid-connect-core-1_0.html#UserInfoRequest) after successful authorization. * Usually this wouldn't not be necessary if id token is received. */ - requestUserInfo?: boolean; + requestUserInfo?: boolean /** * The number of seconds before an access token is to expire to renew it automatically. Related to {@link autoSilentRenew} */ - secondsToRefreshAccessTokenBeforeExp?: number; + secondsToRefreshAccessTokenBeforeExp?: number /** * Number of seconds to wait for the silent renew to return before assuming it has failed or timed out (default: 10). Related to {@link autoSilentRenew} */ - silentRequestTimeout?: number; + silentRequestTimeout?: number - silent_redirect_uri?: string; + silent_redirect_uri?: string /** * Generated state length. Defaults to 10 * @default 10 */ - stateLength?: number; + stateLength?: number /** * Custom state store. See {@link StateStore} */ - stateStore?: StateStore; + stateStore?: StateStore /** * If `true`, refresh tokens will be used for renewing access token. If `false`, authorization request will be * performed silently in an iframe. */ - useRefreshToken?: boolean; + useRefreshToken?: boolean } export interface TokenRequestOption { - client_id?: string; - client_secret?: string; - code?: string; - code_verifier?: string; - extraTokenHeaders?: Record; - extraTokenParams?: Record; - grant_type?: string; - redirect_uri?: string; - refresh_token?: string; + client_id?: string + client_secret?: string + code?: string + code_verifier?: string + extraTokenHeaders?: Record + extraTokenParams?: Record + grant_type?: string + redirect_uri?: string + refresh_token?: string } export interface PopupOptions { - popup?: Window | null; + popup?: Window | null /** * Popup response timeout in milliseconds * @default 60000 */ - timeout?: number; + timeout?: number } export interface IFrameOptions { - eventOrigin: string, + eventOrigin: string /** * Iframe response timeout in milliseconds. * @default 60000 */ - timeout?: number; - + timeout?: number } export interface ParsedJWT { - header: Partial>; - payload: Readonly>, - signature?: string; + header: Partial> + payload: Readonly> + signature?: string } -export type TokenType = 'access_token' | 'refresh_token' +export type TokenType = "access_token" | "refresh_token" -export interface RevokeOptions{ - client_id?: string; - client_secret?: string; +export interface RevokeOptions { + client_id?: string + client_secret?: string } export interface TokenResponse { - access_token?: string; - error?: string; - error_description?: string, - expires_in?: number; - id_token?: string; - refresh_token?: string; - scope?: string; - session_state?: string; + access_token?: string + error?: string + error_description?: string + expires_in?: number + id_token?: string + refresh_token?: string + scope?: string + session_state?: string } export interface JWTValidationOptions { - audience?: string; - client_id: string; - clockSkew?: number; - currentTimeInMillis?: () => number; - issuer: string; + audience?: string + client_id: string + clockSkew?: number + currentTimeInMillis?: () => number + issuer: string } export interface SessionCheckerOptions { - callback: ( ...args: any ) => void, - checkInterval?: number, - client_id: string; - url: string; + callback: (...args: any) => void + checkInterval?: number + client_id: string + url: string } export type SessionChecker = { - start: ( session_state: string ) => void; - stop: () => void; + start: (session_state: string) => void + stop: () => void } - export type StateRecord = { - authParams: AuthRequestOptions, - created_at: number, - localState: Record, - request_type: 'p' | 's' | any + authParams: AuthRequestOptions + created_at: number + localState: Record + request_type: "p" | "s" | any } export type AuthRecord = { - access_token?: string, - authParams?: IPlusAuthClientOptions, - expires_in?: number, - id_token?: Record, - id_token_raw?: string, - refresh_token?: string, - scope?: string, - session_state?: string, + access_token?: string + authParams?: IPlusAuthClientOptions + expires_in?: number + id_token?: Record + id_token_raw?: string + refresh_token?: string + scope?: string + session_state?: string user?: Record } diff --git a/src/utils/check_session_iframe.ts b/src/utils/check_session_iframe.ts index 8bea6b7..11b924b 100644 --- a/src/utils/check_session_iframe.ts +++ b/src/utils/check_session_iframe.ts @@ -1,67 +1,67 @@ -import type { SessionChecker, SessionCheckerOptions } from '../interfaces'; +import type { SessionChecker, SessionCheckerOptions } from "../interfaces" -import { createHiddenFrame } from './iframe'; +import { createHiddenFrame } from "./iframe" const DEFAULT_CHECK_INTERVAL = 2000 -export function createSessionCheckerFrame( options: SessionCheckerOptions ): SessionChecker{ +export function createSessionCheckerFrame(options: SessionCheckerOptions): SessionChecker { const { url, callback, client_id, checkInterval } = options - let internalSessionState: string | null; - const idx = url.indexOf( '/', url.indexOf( '//' ) + 2 ); - const frameOrigin = url.substr( 0, idx ); + let internalSessionState: string | null + const idx = url.indexOf("/", url.indexOf("//") + 2) + const frameOrigin = url.substr(0, idx) const frame = createHiddenFrame() let timer: any const load = () => { - return new Promise( resolve => { - window.document.body.appendChild( frame ); - window.addEventListener( 'message', iframeEventHandler, false ); + return new Promise((resolve) => { + window.document.body.appendChild(frame) + window.addEventListener("message", iframeEventHandler, false) frame.onload = () => { - resolve( null ) + resolve(null) } - } ) + }) } - const start = ( sessionState: string ) => { - load().then( () => { - if ( sessionState && internalSessionState !== sessionState ) { - stop(); - internalSessionState = sessionState; + const start = (sessionState: string) => { + load().then(() => { + if (sessionState && internalSessionState !== sessionState) { + stop() + internalSessionState = sessionState const send = () => { - frame.contentWindow!.postMessage( `${ client_id } ${ internalSessionState }`, frameOrigin ); - }; - send(); - timer = window.setInterval( send, checkInterval || DEFAULT_CHECK_INTERVAL ); + frame.contentWindow!.postMessage(`${client_id} ${internalSessionState}`, frameOrigin) + } + send() + timer = window.setInterval(send, checkInterval || DEFAULT_CHECK_INTERVAL) } - } ) + }) } const stop = () => { - internalSessionState = null; - if ( timer ) { - window.clearInterval( timer ); - timer = null; + internalSessionState = null + if (timer) { + window.clearInterval(timer) + timer = null } } - const iframeEventHandler = ( e: MessageEvent ) => { - if ( e.origin === frameOrigin && e.source === frame.contentWindow ) { - if ( e.data === 'error' ) { - stop(); - callback( e.data ); - } else if ( e.data === 'changed' ) { - stop(); - callback(); + const iframeEventHandler = (e: MessageEvent) => { + if (e.origin === frameOrigin && e.source === frame.contentWindow) { + if (e.data === "error") { + stop() + callback(e.data) + } else if (e.data === "changed") { + stop() + callback() } } } - frame.setAttribute( 'src', url ); + frame.setAttribute("src", url) return { stop, - start + start, } } diff --git a/src/utils/iframe.ts b/src/utils/iframe.ts index 081fe53..a19fae5 100644 --- a/src/utils/iframe.ts +++ b/src/utils/iframe.ts @@ -1,76 +1,77 @@ -import { AuthenticationError, OIDCClientError } from '../errors'; -import type { IFrameOptions } from '../interfaces'; +import { AuthenticationError, OIDCClientError } from "../errors" +import type { IFrameOptions } from "../interfaces" export function createHiddenFrame() { - const iframe = window.document.createElement( 'iframe' ); - iframe.style.width = '0'; - iframe.style.height = '0'; - iframe.style.position = 'absolute'; - iframe.style.visibility = 'hidden'; - iframe.style.display = 'none'; + const iframe = window.document.createElement("iframe") + iframe.style.width = "0" + iframe.style.height = "0" + iframe.style.position = "absolute" + iframe.style.visibility = "hidden" + iframe.style.display = "none" - iframe.title = '__pa_helper__hidden' - iframe.ariaHidden = 'true' + iframe.title = "__pa_helper__hidden" + iframe.ariaHidden = "true" return iframe } -export function runIframe( - url: string, - options: IFrameOptions -) { - return new Promise( ( resolve, reject ) => { - let onLoadTimeoutId: any = null; +export function runIframe(url: string, options: IFrameOptions) { + return new Promise((resolve, reject) => { + let onLoadTimeoutId: any = null const iframe = createHiddenFrame() - const timeoutSetTimeoutId = setTimeout( () => { - reject( new OIDCClientError( 'Timed out' ) ); - removeIframe(); - }, ( options.timeout || 10 ) * 1000 ); + const timeoutSetTimeoutId = setTimeout( + () => { + reject(new OIDCClientError("Timed out")) + removeIframe() + }, + (options.timeout || 10) * 1000, + ) - const iframeEventHandler = ( e: MessageEvent ) => { - if ( e.origin != options.eventOrigin ) return; - if ( !e.data || e.data.type !== 'authorization_response' ) return; - const eventSource = e.source; - if ( eventSource ) { - ( eventSource ).close(); + const iframeEventHandler = (e: MessageEvent) => { + if (e.origin !== options.eventOrigin) return + if (!e.data || e.data.type !== "authorization_response") return + const eventSource = e.source + if (eventSource) { + ;(eventSource).close() } const resp = e.data.response || e.data resp.error - ? reject( new AuthenticationError( resp.error, resp.error_description, resp.state, resp.error_uri ) ) - : resolve( e.data ); - clearTimeout( timeoutSetTimeoutId ); - removeIframe(); - }; + ? reject( + new AuthenticationError(resp.error, resp.error_description, resp.state, resp.error_uri), + ) + : resolve(e.data) + clearTimeout(timeoutSetTimeoutId) + removeIframe() + } const removeIframe = () => { - if ( onLoadTimeoutId != null ){ - clearTimeout( onLoadTimeoutId ) + if (onLoadTimeoutId != null) { + clearTimeout(onLoadTimeoutId) } - if ( window.document.body.contains( iframe ) ) { - window.document.body.removeChild( iframe ); + if (window.document.body.contains(iframe)) { + window.document.body.removeChild(iframe) } - window.removeEventListener( 'message', iframeEventHandler, false ); - }; - - const onLoadTimeout = () => setTimeout( ()=>{ - reject( new OIDCClientError( 'Could not complete silent authentication', url ) ) - removeIframe(); - }, 300 ) - + window.removeEventListener("message", iframeEventHandler, false) + } + const onLoadTimeout = () => + setTimeout(() => { + reject(new OIDCClientError("Could not complete silent authentication", url)) + removeIframe() + }, 300) - window.addEventListener( 'message', iframeEventHandler, false ); - window.document.body.appendChild( iframe ); - iframe.setAttribute( 'src', url ); + window.addEventListener("message", iframeEventHandler, false) + window.document.body.appendChild(iframe) + iframe.setAttribute("src", url) /** * In case of wrong client id, wrong redirect_uri, in short when redirect did not happen * we assume flow failed. */ - iframe.onload = function () { + iframe.onload = () => { onLoadTimeoutId = onLoadTimeout() } - } ); + }) } diff --git a/src/utils/index.ts b/src/utils/index.ts index fb3a1ff..97c2ff8 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,5 +1,5 @@ -export * from './iframe' -export * from './request' -export * from './url' -export * from './jose' -export * from './check_session_iframe' +export * from "./iframe" +export * from "./request" +export * from "./url" +export * from "./jose" +export * from "./check_session_iframe" diff --git a/src/utils/jose.ts b/src/utils/jose.ts index 773df57..040af64 100644 --- a/src/utils/jose.ts +++ b/src/utils/jose.ts @@ -1,203 +1,205 @@ -import { InvalidIdTokenError, InvalidJWTError, OIDCClientError } from '../errors'; -import type { IPlusAuthClientOptions, JWTValidationOptions, ParsedJWT } from '../interfaces'; +import { InvalidIdTokenError, InvalidJWTError, OIDCClientError } from "../errors" +import type { IPlusAuthClientOptions, JWTValidationOptions, ParsedJWT } from "../interfaces" -import { urlSafe } from './url'; +import { urlSafe } from "./url" -const CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; +const CHARSET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" -function getRandomBytes( n: number ){ +function getRandomBytes(n: number) { // @ts-ignore - const crypto = self.crypto || self.msCrypto, QUOTA = 65536; - const a = new Uint8Array( n ); - for ( let i = 0; i < n; i += QUOTA ) { - crypto.getRandomValues( a.subarray( i, i + Math.min( n - i, QUOTA ) ) ); + const crypto = self.crypto || self.msCrypto + const QUOTA = 65536 + const a = new Uint8Array(n) + for (let i = 0; i < n; i += QUOTA) { + crypto.getRandomValues(a.subarray(i, i + Math.min(n - i, QUOTA))) } - return a; + return a } -export function generateRandom( length: number ){ - let out = ''; - const charsLen = CHARSET.length; - const maxByte = 256 - 256 % charsLen; - while ( length > 0 ) { - const buf = getRandomBytes( Math.ceil( length * 256 / maxByte ) ); - for ( let i = 0; i < buf.length && length > 0; i++ ) { - const randomByte = buf[i]; - if ( randomByte < maxByte ) { - out += CHARSET.charAt( randomByte % charsLen ); - length--; +export function generateRandom(length: number) { + let out = "" + const charsLen = CHARSET.length + const maxByte = 256 - (256 % charsLen) + while (length > 0) { + const buf = getRandomBytes(Math.ceil((length * 256) / maxByte)) + for (let i = 0; i < buf.length && length > 0; i++) { + const randomByte = buf[i] + if (randomByte < maxByte) { + out += CHARSET.charAt(randomByte % charsLen) + length-- } } } - return out; + return out } - -export function deriveChallenge( code: string ): Promise{ - if ( code.length < 43 || code.length > 128 ) { - return Promise.reject( new OIDCClientError( `Invalid code length: ${ code.length }` ) ); +export function deriveChallenge(code: string): Promise { + if (code.length < 43 || code.length > 128) { + return Promise.reject(new OIDCClientError(`Invalid code length: ${code.length}`)) } - return new Promise( ( resolve, reject ) => { - crypto.subtle.digest( 'SHA-256', new TextEncoder().encode( code ) ) - .then( buffer => { - return resolve( urlSafe( new Uint8Array( buffer ) ) ); - }, function ( error ) { + return new Promise((resolve, reject) => { + crypto.subtle.digest("SHA-256", new TextEncoder().encode(code)).then( + (buffer) => { + return resolve(urlSafe(new Uint8Array(buffer))) + }, + (error) => { /* istanbul ignore next */ - return reject( error ); - } ); - } ); + return reject(error) + }, + ) + }) } // https://datatracker.ietf.org/doc/html/rfc4648#section-5 -export const urlDecodeB64 = ( input: string ) => decodeURIComponent( - atob( input.replace( /_/g, '/' ).replace( /-/g, '+' ) ) - .split( '' ) - .map( c => { - return `%${ `00${ c.charCodeAt( 0 ).toString( 16 ) }`.slice( -2 ) }`; - } ) - .join( '' ) -); - - - -export function parseJwt( jwt: string ): ParsedJWT { +export const urlDecodeB64 = (input: string) => + decodeURIComponent( + atob(input.replace(/_/g, "/").replace(/-/g, "+")) + .split("") + .map((c) => { + return `%${`00${c.charCodeAt(0).toString(16)}`.slice(-2)}` + }) + .join(""), + ) + +export function parseJwt(jwt: string): ParsedJWT { try { - const parts = jwt.split( '.' ) - if ( parts.length !== 3 ){ - throw new Error( 'Wrong JWT format' ) + const parts = jwt.split(".") + if (parts.length !== 3) { + throw new Error("Wrong JWT format") } return { - header: JSON.parse( urlDecodeB64( parts[0] ) ), - payload: JSON.parse( urlDecodeB64( parts[1] ) ) + header: JSON.parse(urlDecodeB64(parts[0])), + payload: JSON.parse(urlDecodeB64(parts[1])), } - } catch ( e ){ - throw new InvalidJWTError( 'Failed to parse jwt' ) + } catch (e) { + throw new InvalidJWTError("Failed to parse jwt") } } -export function validateIdToken( id_token: string, nonce: string, options: IPlusAuthClientOptions ) { - if ( !nonce ) { - throw new OIDCClientError( 'No nonce on state' ); +export function validateIdToken(id_token: string, nonce: string, options: IPlusAuthClientOptions) { + if (!nonce) { + throw new OIDCClientError("No nonce on state") } try { - const jwt = parseJwt( id_token ); + const jwt = parseJwt(id_token) - if ( nonce !== jwt.payload.nonce ) { - throw new Error( `Invalid nonce in id_token: ${ jwt.payload.nonce }` ); + if (nonce !== jwt.payload.nonce) { + throw new Error(`Invalid nonce in id_token: ${jwt.payload.nonce}`) } - validateJwt( id_token, options, true ) + validateJwt(id_token, options, true) // @ts-ignore - if ( !jwt.payload['sub'] ) { - throw new Error( 'No Subject (sub) present in id_token' ); + if (!jwt.payload["sub"]) { + throw new Error("No Subject (sub) present in id_token") } - return jwt.payload; - } catch ( e ){ - throw new InvalidIdTokenError( e.message ) + return jwt.payload + } catch (e) { + throw new InvalidIdTokenError(e.message) } } -export function validateJwt( jwt: string, options: JWTValidationOptions, isIdToken = false ) { +export function validateJwt(jwt: string, options: JWTValidationOptions, isIdToken = false) { // eslint-disable-next-line prefer-const let { clockSkew, currentTimeInMillis, issuer, audience, client_id } = options - if ( !clockSkew ){ + if (!clockSkew) { clockSkew = 0 } - const now = ( currentTimeInMillis && currentTimeInMillis() || Date.now() ) / 1000; + const now = (currentTimeInMillis?.() || Date.now()) / 1000 - const payload = parseJwt( jwt ).payload; + const payload = parseJwt(jwt).payload - if ( !payload.iss ) { - throw new InvalidJWTError( 'Issuer (iss) was not provided' ); + if (!payload.iss) { + throw new InvalidJWTError("Issuer (iss) was not provided") } - if ( payload.iss !== issuer ) { - throw new InvalidJWTError( `Invalid Issuer (iss) in token: ${ payload.iss }` ); + if (payload.iss !== issuer) { + throw new InvalidJWTError(`Invalid Issuer (iss) in token: ${payload.iss}`) } - if ( !payload.aud ) { - throw new InvalidJWTError( 'Audience (aud) was not provided' ); + if (!payload.aud) { + throw new InvalidJWTError("Audience (aud) was not provided") } // Audience must be equal to client_id in id_token // https://openid.net/specs/openid-connect-core-1_0.html#IDToken - if ( Array.isArray( payload.aud ) ? - payload.aud.indexOf( isIdToken ? client_id : audience || client_id ) == -1 : - payload.aud !== ( isIdToken ? client_id : audience || client_id ) + if ( + Array.isArray(payload.aud) + ? payload.aud.indexOf(isIdToken ? client_id : audience || client_id) === -1 + : payload.aud !== (isIdToken ? client_id : audience || client_id) ) { - throw new InvalidJWTError( `Invalid Audience (aud) in token: ${ payload.aud }` ); + throw new InvalidJWTError(`Invalid Audience (aud) in token: ${payload.aud}`) } - if ( payload.azp && payload.azp !== client_id ) { - throw new InvalidJWTError( `Invalid Authorized Party (azp) in token: ${ payload.azp }` ); + if (payload.azp && payload.azp !== client_id) { + throw new InvalidJWTError(`Invalid Authorized Party (azp) in token: ${payload.azp}`) } - const lowerNow = Math.ceil( now + clockSkew ); - const upperNow = Math.floor( now - clockSkew ); + const lowerNow = Math.ceil(now + clockSkew) + const upperNow = Math.floor(now - clockSkew) - if ( !payload.iat ) { - throw new InvalidJWTError( 'Issued At (iat) was not provided' ); + if (!payload.iat) { + throw new InvalidJWTError("Issued At (iat) was not provided") } - if ( lowerNow < Number( payload.iat ) ) { - throw new InvalidJWTError( `Issued At (iat) is in the future: ${ payload.iat }` ); + if (lowerNow < Number(payload.iat)) { + throw new InvalidJWTError(`Issued At (iat) is in the future: ${payload.iat}`) } - if ( payload.nbf && lowerNow < Number( payload.nbf ) ) { - throw new InvalidJWTError( `Not Before time (nbf) is in the future: ${ payload.nbf }` ); + if (payload.nbf && lowerNow < Number(payload.nbf)) { + throw new InvalidJWTError(`Not Before time (nbf) is in the future: ${payload.nbf}`) } - if ( !payload.exp ) { - throw new InvalidJWTError( 'Expiration Time (exp) was not provided' ); + if (!payload.exp) { + throw new InvalidJWTError("Expiration Time (exp) was not provided") } - if ( Number( payload.exp ) < upperNow ) { - throw new InvalidJWTError( `Expiration Time (exp) is in the past: ${ payload.exp }` ); + if (Number(payload.exp) < upperNow) { + throw new InvalidJWTError(`Expiration Time (exp) is in the past: ${payload.exp}`) } - return payload; + return payload } // Retrieved from https://www.iana.org/assignments/jwt/jwt.xhtml export const nonUserClaims = [ - 'iss', + "iss", // 'sub', - 'aud', - 'exp', - 'nbf', - 'iat', - 'jti', - 'azp', - 'nonce', - 'auth_time', - 'at_hash', - 'c_hash', - 'acr', - 'amr', - 'sub_jwk', - 'cnf', - 'sip_from_tag', - 'sip_date', - 'sip_callid', - 'sip_cseq_num', - 'sip_via_branch', - 'orig', - 'dest', - 'mky', - 'events', - 'toe', - 'txn', - 'rph', - 'sid', - 'vot', - 'vtm', - 'attest', - 'origid', - 'act', - 'scope', - 'client_id', - 'may_act', - 'jcard', - 'at_use_nbr', + "aud", + "exp", + "nbf", + "iat", + "jti", + "azp", + "nonce", + "auth_time", + "at_hash", + "c_hash", + "acr", + "amr", + "sub_jwk", + "cnf", + "sip_from_tag", + "sip_date", + "sip_callid", + "sip_cseq_num", + "sip_via_branch", + "orig", + "dest", + "mky", + "events", + "toe", + "txn", + "rph", + "sid", + "vot", + "vtm", + "attest", + "origid", + "act", + "scope", + "client_id", + "may_act", + "jcard", + "at_use_nbr", ] as const diff --git a/src/utils/object.ts b/src/utils/object.ts index 9015df4..8f2520a 100644 --- a/src/utils/object.ts +++ b/src/utils/object.ts @@ -6,29 +6,33 @@ type RequiredAndNotNull = { * not suitable for every object but it is enough for this library * @param object */ -export function cleanUndefined>( object: T ) { - if ( !object || typeof object !== 'object' ) { +export function cleanUndefined>(object: T) { + if (!object || typeof object !== "object") { return object } - return JSON.parse( JSON.stringify( object ) ) as RequiredAndNotNull + return JSON.parse(JSON.stringify(object)) as RequiredAndNotNull } -function merge( previousValue: any, currentValue: any ) { - for ( const p in currentValue ) { - if ( currentValue[p] !== undefined ) { - if ( typeof currentValue[p] === 'object' && currentValue[p].constructor.name === 'Object' ) { - previousValue[p] = merge( previousValue[p] || {}, currentValue[p] ); +function merge(previousValue: any, currentValue: any) { + for (const p in currentValue) { + if (currentValue[p] !== undefined) { + if (typeof currentValue[p] === "object" && currentValue[p].constructor.name === "Object") { + previousValue[p] = merge(previousValue[p] || {}, currentValue[p]) } else { - previousValue[p] = currentValue[p]; + previousValue[p] = currentValue[p] } } } return previousValue } -export function mergeObjects( obj1: T, obj2: U ): RequiredAndNotNull; -export function mergeObjects( obj1: T, obj2: U, obj3: K ): RequiredAndNotNull; -export function mergeObjects( ...objects: any[] ) { - return objects.reduce( ( previousValue, currentValue ) => { - return merge( previousValue || {}, currentValue ) - }, {} ) as any +export function mergeObjects(obj1: T, obj2: U): RequiredAndNotNull +export function mergeObjects( + obj1: T, + obj2: U, + obj3: K, +): RequiredAndNotNull +export function mergeObjects(...objects: any[]) { + return objects.reduce((previousValue, currentValue) => { + return merge(previousValue || {}, currentValue) + }, {}) as any } diff --git a/src/utils/oidc.ts b/src/utils/oidc.ts index cf4fec2..07c0650 100644 --- a/src/utils/oidc.ts +++ b/src/utils/oidc.ts @@ -1,5 +1,5 @@ -export const isResponseType = ( type: string, response_type?: string ) => - response_type && response_type.split( /\s+/g ).filter( rt => rt === type ).length > 0 +export const isResponseType = (type: string, response_type?: string) => + response_type && response_type.split(/\s+/g).filter((rt) => rt === type).length > 0 -export const isScopeIncluded = ( scope: string, scopes?: string ) => - scopes && scopes.split( ' ' ).indexOf( scope ) > -1 +export const isScopeIncluded = (scope: string, scopes?: string) => + scopes && scopes.split(" ").indexOf(scope) > -1 diff --git a/src/utils/popup.ts b/src/utils/popup.ts index a37fd0c..04047c9 100644 --- a/src/utils/popup.ts +++ b/src/utils/popup.ts @@ -1,62 +1,64 @@ -import { InteractionCancelled, OIDCClientError } from '../errors'; -import type { PopupOptions } from '../interfaces'; +import { InteractionCancelled, OIDCClientError } from "../errors" +import type { PopupOptions } from "../interfaces" -const openPopup = ( url: string, width = 400, height = 600 ) => { - const left = window.screenX + ( window.innerWidth - width ) / 2; - const top = window.screenY + ( window.innerHeight - height ) / 2; +const openPopup = (url: string, width = 400, height = 600) => { + const left = window.screenX + (window.innerWidth - width) / 2 + const top = window.screenY + (window.innerHeight - height) / 2 return window.open( url, - 'oidc-login-popup', - `left=${ left },top=${ top },width=${ width },height=${ height },resizable,scrollbars=yes,status=1` - ); -}; + "oidc-login-popup", + `left=${left},top=${top},width=${width},height=${height},resizable,scrollbars=yes,status=1`, + ) +} -export function runPopup( url: string, options: PopupOptions ) { - let popup = options.popup; +export function runPopup(url: string, options: PopupOptions) { + let popup = options.popup - if ( popup ) { - popup.location.href = url; + if (popup) { + popup.location.href = url } else { - popup = openPopup( url ); + popup = openPopup(url) } - if ( !popup ) { + if (!popup) { /* istanbul ignore next */ - throw new Error( 'Could not open popup' ); + throw new Error("Could not open popup") } - let timeoutId: any ; - let closeId: any ; + let timeoutId: any + let closeId: any - return new Promise<{ response: any, state: string }>( ( resolve, reject ) => { - function clearHandlers(){ - clearInterval( closeId ); - clearTimeout( timeoutId ) - window.removeEventListener( 'message', messageListener ) + return new Promise<{ response: any; state: string }>((resolve, reject) => { + function clearHandlers() { + clearInterval(closeId) + clearTimeout(timeoutId) + window.removeEventListener("message", messageListener) } - timeoutId = setTimeout( () => { - clearHandlers() - reject( new OIDCClientError( 'Timed out' ) ); - }, options.timeout || 60 * 1000 ) + timeoutId = setTimeout( + () => { + clearHandlers() + reject(new OIDCClientError("Timed out")) + }, + options.timeout || 60 * 1000, + ) - closeId = setInterval( function () { - if ( popup!.closed ) { + closeId = setInterval(() => { + if (popup!.closed) { clearHandlers() - reject( new InteractionCancelled( 'user closed popup' ) ) + reject(new InteractionCancelled("user closed popup")) } - }, 300 ); + }, 300) - window.addEventListener( 'message', messageListener ); + window.addEventListener("message", messageListener) - function messageListener( e: MessageEvent ){ - if ( !e.data || e.data.type !== 'authorization_response' ) return; - clearHandlers(); - popup!.close(); + function messageListener(e: MessageEvent) { + if (!e.data || e.data.type !== "authorization_response") return + clearHandlers() + popup!.close() const data = e.data.response || e.data - data.error ? reject( new OIDCClientError( data.error, data.error_description ) ) - : resolve( e.data ); + data.error ? reject(new OIDCClientError(data.error, data.error_description)) : resolve(e.data) } - } ); + }) } diff --git a/src/utils/request.ts b/src/utils/request.ts index 3dc4159..e344911 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,35 +1,39 @@ -import { buildEncodedQueryString } from './url'; +import { buildEncodedQueryString } from "./url" export interface RequestOptions { - body?: Record; - headers?: Record, - method: 'GET' | 'POST' | 'PATCH' | 'TRACE' | 'OPTIONS' | 'HEAD', - requestType?: 'form' | 'json', + body?: Record + headers?: Record + method: "GET" | "POST" | "PATCH" | "TRACE" | "OPTIONS" | "HEAD" + requestType?: "form" | "json" url: string } -export function request( options: RequestOptions ): Promise{ +export function request(options: RequestOptions): Promise { let body: any = null let headers = options.headers || {} - if ( options.method === 'POST' ){ + if (options.method === "POST") { headers = { - 'Content-Type': options.requestType === 'form' ? 'application/x-www-form-urlencoded;charset=UTF-8' : - 'application/json;charset=UTF-8', - ...headers + "Content-Type": + options.requestType === "form" + ? "application/x-www-form-urlencoded;charset=UTF-8" + : "application/json;charset=UTF-8", + ...headers, } } - if ( options.body ){ - body = options.requestType === 'form' ? buildEncodedQueryString( options.body, false ) - : JSON.stringify( options.body ) + if (options.body) { + body = + options.requestType === "form" + ? buildEncodedQueryString(options.body, false) + : JSON.stringify(options.body) } - return new Promise( ( resolve, reject ) => { - fetch( options.url, { + return new Promise((resolve, reject) => { + fetch(options.url, { method: options.method, - body: body, - headers - } ) - .then( ( value: Response ) => resolve( value.json() ) ) - .catch( reject ) - } ) + body: body, + headers, + }) + .then((value: Response) => resolve(value.json())) + .catch(reject) + }) } diff --git a/src/utils/tab_utils.ts b/src/utils/tab_utils.ts index cd0dd57..9e8ba02 100644 --- a/src/utils/tab_utils.ts +++ b/src/utils/tab_utils.ts @@ -7,80 +7,87 @@ https://github.com/jitbit/TabUtils MIT license: https://github.com/jitbit/TabUtils/blob/master/LICENSE */ -import type { EventEmitter } from '../helpers'; +import type { EventEmitter } from "../helpers" -const currentTabId = `${ performance.now() }:${ Math.random() * 1000000000 | 0 }`; -const handlers: Record = {}; +const currentTabId = `${performance.now()}:${(Math.random() * 1000000000) | 0}` +const handlers: Record = {} export class TabUtils { - keyPrefix: string; + keyPrefix: string - private events: EventEmitter; + private events: EventEmitter - constructor( kid: string, fallbackEvents: EventEmitter ) { - this.keyPrefix = kid; + constructor(kid: string, fallbackEvents: EventEmitter) { + this.keyPrefix = kid this.events = fallbackEvents } //runs code only once in multiple tabs //the lock holds for 4 seconds (in case the function is async and returns right away, for example, an ajax call intiated) //then it is cleared - CallOnce( lockname: string, fn: () => void, timeout = 3000 ): void{ - if ( !lockname ) throw 'empty lockname'; + CallOnce(lockname: string, fn: () => void, timeout = 3000): void { + if (!lockname) throw "empty lockname" - if ( !window.localStorage ) { //no local storage. old browser. screw it, just run the function - fn(); - return; + if (!window.localStorage) { + //no local storage. old browser. screw it, just run the function + fn() + return } - const localStorageKey = this.keyPrefix + lockname; + const localStorageKey = this.keyPrefix + lockname - localStorage.setItem( localStorageKey, currentTabId ); + localStorage.setItem(localStorageKey, currentTabId) //re-read after a delay (after all tabs have saved their tabIDs into ls) - setTimeout( () => { - if ( localStorage.getItem( localStorageKey ) == currentTabId ) - fn(); - }, 150 ); + setTimeout(() => { + if (localStorage.getItem(localStorageKey) === currentTabId) fn() + }, 150) //cleanup - release the lock after 3 seconds and on window unload (just in case user closed the window while the lock is still held) - setTimeout( function () { localStorage.removeItem( localStorageKey ); }, timeout ); + setTimeout(() => { + localStorage.removeItem(localStorageKey) + }, timeout) } - BroadcastMessageToAllTabs( messageId: string, eventData: any ): void{ + BroadcastMessageToAllTabs(messageId: string, eventData: any): void { //now we also need to manually execute handler in the current tab too, because current tab does not get 'storage' events - try { handlers[messageId]( eventData ); } //"try" in case handler not found - catch ( x ) { } + try { + handlers[messageId](eventData) + } catch (x) { + //"try" in case handler not found + } - if ( !window.localStorage ){ - this.events.emit( messageId, eventData ) - return; //no local storage. old browser + if (!window.localStorage) { + this.events.emit(messageId, eventData) + return //no local storage. old browser } const data = { - data: eventData, - timeStamp: new Date().getTime() - }; //add timestamp because overwriting same data does not trigger the event + data: eventData, + timeStamp: new Date().getTime(), + } //add timestamp because overwriting same data does not trigger the event //this triggers 'storage' event for all other tabs except the current tab - localStorage.setItem( `${ this.keyPrefix }event${ messageId }`, JSON.stringify( data ) ); + localStorage.setItem(`${this.keyPrefix}event${messageId}`, JSON.stringify(data)) //cleanup - setTimeout( () => { localStorage.removeItem( `${ this.keyPrefix }event${ messageId }` ); }, 3000 ); + setTimeout(() => { + localStorage.removeItem(`${this.keyPrefix}event${messageId}`) + }, 3000) } - OnBroadcastMessage( messageId: string, fn: ( data: any ) => void ): void{ - handlers[messageId] = fn; - if ( !window.localStorage ){ - this.events.on( messageId, fn ) - return; //no local storage. old browser + OnBroadcastMessage(messageId: string, fn: (data: any) => void): void { + handlers[messageId] = fn + if (!window.localStorage) { + this.events.on(messageId, fn) + return //no local storage. old browser } //first register a handler for "storage" event that we trigger above - window.addEventListener( 'storage', ( ev ) => { - if ( ev.key != `${ this.keyPrefix }event${ messageId }` ) return; // ignore other keys - if ( !ev.newValue ) return; //called by cleanup? - const messageData = JSON.parse( ev.newValue ); - fn( messageData.data ); - } ); + window.addEventListener("storage", (ev) => { + if (ev.key !== `${this.keyPrefix}event${messageId}`) return // ignore other keys + if (!ev.newValue) return //called by cleanup? + const messageData = JSON.parse(ev.newValue) + fn(messageData.data) + }) } } diff --git a/src/utils/url.ts b/src/utils/url.ts index f996d0e..0704616 100644 --- a/src/utils/url.ts +++ b/src/utils/url.ts @@ -1,50 +1,49 @@ -import { fromByteArray } from 'base64-js'; +import { fromByteArray } from "base64-js" -export function isValidIssuer( issuer: string ){ +export function isValidIssuer(issuer: string) { try { - const url = new URL( issuer ) - if ( !['http:', 'https:'].includes( url.protocol ) ){ + const url = new URL(issuer) + if (!["http:", "https:"].includes(url.protocol)) { return false } - if ( url.search !== '' || url.hash !== '' ){ + if (url.search !== "" || url.hash !== "") { return false } return true - } catch ( e ){ + } catch (e) { return false } } -export function buildEncodedQueryString( obj?: Record, - appendable = true, ) { - if ( !obj ) return ''; - const ret: string[] = []; - for ( const d in obj ) { - if ( obj.hasOwnProperty( d ) && obj[d] ) { - ret.push( `${ - encodeURIComponent( d ) - }=${ - encodeURIComponent( typeof obj[d] === 'object' ? JSON.stringify( obj[d] ) : obj[d]! ) - }` ); +export function buildEncodedQueryString(obj?: Record, appendable = true) { + if (!obj) return "" + const ret: string[] = [] + for (const d in obj) { + if (obj.hasOwnProperty(d) && obj[d]) { + ret.push( + `${encodeURIComponent(d)}=${encodeURIComponent( + typeof obj[d] === "object" ? JSON.stringify(obj[d]) : obj[d]!, + )}`, + ) } } - return `${ appendable ? '?' : '' }${ ret.join( '&' ) }`; + return `${appendable ? "?" : ""}${ret.join("&")}` } -export function parseQueryUrl( value: string ) { - const result: Record = {}; - value = value.trim().replace( /^(\?|#|&)/, '' ); - const params = value.split( '&' ); - for ( let i = 0; i < params.length; i += 1 ) { - const paramAndValue = params[i]; - const parts = paramAndValue.split( '=' ); - const key = decodeURIComponent( parts.shift()! ); - const value = parts.length > 0 ? parts.join( '=' ) : ''; - result[key] = decodeURIComponent( value ); +export function parseQueryUrl(value: string) { + const result: Record = {} + value = value.trim().replace(/^(\?|#|&)/, "") + const params = value.split("&") + for (let i = 0; i < params.length; i += 1) { + const paramAndValue = params[i] + const parts = paramAndValue.split("=") + const key = decodeURIComponent(parts.shift()!) + const value = parts.length > 0 ? parts.join("=") : "" + result[key] = decodeURIComponent(value) } - return result; + return result } -export function urlSafe( buffer: Uint8Array ): string { - const encoded = fromByteArray( new Uint8Array( buffer ) ); - return encoded.replace( /\+/g, '-' ).replace( /\//g, '_' ).replace( /=/g, '' ); +export function urlSafe(buffer: Uint8Array): string { + const encoded = fromByteArray(new Uint8Array(buffer)) + return encoded.replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "") } diff --git a/test/client.spec.ts b/test/client.spec.ts index acf1e1b..83738f5 100644 --- a/test/client.spec.ts +++ b/test/client.spec.ts @@ -1,70 +1,73 @@ -import * as joseUtils from '../src/utils/jose' -import * as popupUtils from '../src/utils/popup' -import * as iframeUtils from '../src/utils/iframe' -import * as checkSessionUtils from '../src/utils/check_session_iframe' - -window.fetch = jest.fn().mockReturnValue(new Promise(resolve => { - resolve({ - json: () => ({}) - }) -})) +import * as checkSessionUtils from "../src/utils/check_session_iframe" +import * as iframeUtils from "../src/utils/iframe" +import * as joseUtils from "../src/utils/jose" +import * as popupUtils from "../src/utils/popup" + +window.fetch = jest.fn().mockReturnValue( + new Promise((resolve) => { + resolve({ + json: () => ({}), + }) + }), +) import { AuthenticationError, Events, - InMemoryStateStore, InteractionCancelled, + InMemoryStateStore, + InteractionCancelled, InvalidIdTokenError, LocalStorageStateStore, OIDCClient, - OIDCClientError, StateNotFound, StateStore -} from "../src"; -import {Timer} from "../src/helpers/timer"; -import {deriveChallenge} from "../src/utils/jose"; - + OIDCClientError, + StateNotFound, + StateStore, +} from "../src" +import { Timer } from "../src/helpers/timer" +import { deriveChallenge } from "../src/utils/jose" const mockedFetch = fetch const dummyOpts = { - issuer: 'https://test.plusauth.com/', - client_id: 'test', + issuer: "https://test.plusauth.com/", + client_id: "test", endpoints: { - authorization_endpoint: 'dummy_auth', - token_endpoint: 'dummy_token', - end_session_endpoint: 'dummy_end_session', - } + authorization_endpoint: "dummy_auth", + token_endpoint: "dummy_token", + end_session_endpoint: "dummy_end_session", + }, } -describe('oidc client', function () { +describe("oidc client", () => { afterEach(() => { mockedFetch.mockClear() }) - describe('[constructor]', function () { - - it('should accept valid issuer', function (done) { + describe("[constructor]", () => { + it("should accept valid issuer", (done) => { const validIssuers = [ - 'http://openid.net/specs/connect/1.0/issuer', - 'http://localhost:45543/specs/connect/1.0/issuer', - 'http://example.co:8000', - 'http://localhost:45543', - 'https://example.org', - 'https://a.b.example.com', - 'https://example.co', - 'https://example.io', - 'https://example.co:8000', - 'https://test.plusauth.com', + "http://openid.net/specs/connect/1.0/issuer", + "http://localhost:45543/specs/connect/1.0/issuer", + "http://example.co:8000", + "http://localhost:45543", + "https://example.org", + "https://a.b.example.com", + "https://example.co", + "https://example.io", + "https://example.co:8000", + "https://test.plusauth.com", ] - validIssuers.forEach(issuer => { + validIssuers.forEach((issuer) => { try { - new OIDCClient({issuer, client_id: ''}) + new OIDCClient({ issuer, client_id: "" }) } catch (e) { - done(e + ' : ' + issuer) + done(`${e} : ${issuer}`) } }) done() - }); + }) - it('should fail with invalid issuers', function (done) { + it("should fail with invalid issuers", (done) => { const invalidIssuers = [ "ftp://something", "something.co", @@ -76,33 +79,33 @@ describe('oidc client', function () { "http://www.example.com?test=search", "http://www.example.com#hashquery", ] - invalidIssuers.forEach(issuer => { + invalidIssuers.forEach((issuer) => { try { - new OIDCClient({issuer, client_id: ''}) - done('should fail with: ' + issuer) + new OIDCClient({ issuer, client_id: "" }) + done(`should fail with: ${issuer}`) } catch (e) { expect(e).toBeInstanceOf(OIDCClientError) expect(e.message).toBe('"issuer" must be a valid uri.') } }) done() - }); + }) - it('should remove last slash from issuer uri', function () { + it("should remove last slash from issuer uri", () => { const oidc = new OIDCClient(dummyOpts) - expect(oidc.options.issuer).toBe('https://test.plusauth.com') - }); + expect(oidc.options.issuer).toBe("https://test.plusauth.com") + }) - it('should be an event source', function () { + it("should be an event source", () => { const oidc = new OIDCClient(dummyOpts) - expect(oidc).toHaveProperty('emit') - expect(oidc).toHaveProperty('on') - expect(oidc).toHaveProperty('once') - expect(oidc).toHaveProperty('off') - }); + expect(oidc).toHaveProperty("emit") + expect(oidc).toHaveProperty("on") + expect(oidc).toHaveProperty("once") + expect(oidc).toHaveProperty("off") + }) - it('should apply defaults', function () { + it("should apply defaults", () => { const oidc = new OIDCClient(dummyOpts) expect(oidc.options.stateLength).toBe(10) @@ -114,17 +117,15 @@ describe('oidc client', function () { expect(oidc.authStore).toBeInstanceOf(InMemoryStateStore) // @ts-expect-error expect(oidc.stateStore).toBeInstanceOf(LocalStorageStateStore) + }) - }); - - it('should create access token timer if `autoSilentRenew` enabled', function () { - const oidc = new OIDCClient({...dummyOpts, autoSilentRenew: true}) + it("should create access token timer if `autoSilentRenew` enabled", () => { + const oidc = new OIDCClient({ ...dummyOpts, autoSilentRenew: true }) // @ts-expect-error expect(oidc._accessTokenExpireTimer).toBeInstanceOf(Timer) - }); - - it('should allow custom state stores', function () { + }) + it("should allow custom state stores", () => { class CustomStateStore extends StateStore { get = jest.fn() set = jest.fn() @@ -132,15 +133,14 @@ describe('oidc client', function () { del = jest.fn() } const oidcClient = new OIDCClient({ - issuer: 'https://testoidcuri.com', - client_id: 'test', - stateStore: new CustomStateStore() + issuer: "https://testoidcuri.com", + client_id: "test", + stateStore: new CustomStateStore(), }) expect(oidcClient.options.stateStore).toBeInstanceOf(CustomStateStore) - }); - - it('should allow custom auth stores', function () { + }) + it("should allow custom auth stores", () => { class CustomStateStore extends StateStore { get = jest.fn() set = jest.fn() @@ -148,16 +148,23 @@ describe('oidc client', function () { del = jest.fn() } const oidcClient = new OIDCClient({ - issuer: 'https://testoidcuri.com', - client_id: 'test', - authStore: new CustomStateStore() + issuer: "https://testoidcuri.com", + client_id: "test", + authStore: new CustomStateStore(), }) expect(oidcClient.options.authStore).toBeInstanceOf(CustomStateStore) - }); + }) - it('should set/clear direct variables on login/logout', function (done) { + it("should set/clear direct variables on login/logout", (done) => { const oidc = new OIDCClient(dummyOpts) - const authObj = {expires_in: 'e', user: 'u', scope: 's', access_token: 'at', id_token: 'it', refresh_token: 'rt'} + const authObj = { + expires_in: "e", + user: "u", + scope: "s", + access_token: "at", + id_token: "it", + refresh_token: "rt", + } // @ts-expect-error oidc.onUserLogin(authObj) setTimeout(() => { @@ -167,7 +174,7 @@ describe('oidc client', function () { expect(oidc.scopes).toBeTruthy() expect(oidc.refreshToken).toBeTruthy() - oidc.emit('user_logout') + oidc.emit("user_logout") setTimeout(() => { expect(oidc.user).toBeFalsy() @@ -178,13 +185,13 @@ describe('oidc client', function () { done() }) }) - }); + }) - it('should start accessTokenRefresh timer when "autoSilentRenew" = true', function (done) { + it('should start accessTokenRefresh timer when "autoSilentRenew" = true', (done) => { const oidc = new OIDCClient({ ...dummyOpts, autoSilentRenew: true, - secondsToRefreshAccessTokenBeforeExp: 120 + secondsToRefreshAccessTokenBeforeExp: 120, }) // @ts-expect-error const origFn = oidc.synchronizer.CallOnce @@ -198,11 +205,11 @@ describe('oidc client', function () { oidc._accessTokenExpireTimer = { start: jest.fn((exp, cb) => { cb() - }) + }), } // @ts-expect-error - oidc.onUserLogin({access_token: 'dummyToken', expires_in: 120, user: {}}) + oidc.onUserLogin({ access_token: "dummyToken", expires_in: 120, user: {} }) setTimeout(() => { //@ts-expect-error expect(oidc._accessTokenExpireTimer.start).toBeCalled() @@ -213,229 +220,254 @@ describe('oidc client', function () { // @ts-expect-error oidc.synchronizer.CallOnce = origFn }) - }); - + }) }) - describe('[getters]', function () { - it('should work', async function () { - + describe("[getters]", () => { + it("should work", async () => { const getters = [ - 'getAccessToken', - 'getRefreshToken', - 'getIdToken', - 'getIdTokenRaw', - 'getScopes', - 'getExpiresIn', - 'getUser', + "getAccessToken", + "getRefreshToken", + "getIdToken", + "getIdTokenRaw", + "getScopes", + "getExpiresIn", + "getUser", ] const oidc = new OIDCClient(dummyOpts) as any - const storeEntry ={ - "authParams": { - "client_id": "test", - "state": "TyqL9Uztfx", - "scope": "scope scope1", - "redirect_uri": "https://test", - "response_mode": "fragment", - "response_type": "id_token token", - "nonce": "zw5kXFU6C0" + const storeEntry = { + authParams: { + client_id: "test", + state: "TyqL9Uztfx", + scope: "scope scope1", + redirect_uri: "https://test", + response_mode: "fragment", + response_type: "id_token token", + nonce: "zw5kXFU6C0", }, - "user": { - "sub": "123123", - "name": null, - "username": null, - "updated_at": 1693991194, - "email": "john@doe.com", - "email_verified": true, - "s_hash": "gnH0mJ8qkfFp6nwoxo5GmA" + user: { + sub: "123123", + name: null, + username: null, + updated_at: 1693991194, + email: "john@doe.com", + email_verified: true, + s_hash: "gnH0mJ8qkfFp6nwoxo5GmA", }, - "id_token": { - "sub": "123123", - "name": null, - "username": null, - "updated_at": 1693991194, - "email": "john@doe.com", - "email_verified": true, - "nonce": "zw5kXFU6C0", - "at_hash": "10GcVFUGFN-0hBy17UJBKQ", - "s_hash": "gnH0mJ8qkfFp6nwoxo5GmA", - "exp": 1693994893, - "iat": 1693991293, - "iss": "https://test.issuer.com" + id_token: { + sub: "123123", + name: null, + username: null, + updated_at: 1693991194, + email: "john@doe.com", + email_verified: true, + nonce: "zw5kXFU6C0", + at_hash: "10GcVFUGFN-0hBy17UJBKQ", + s_hash: "gnH0mJ8qkfFp6nwoxo5GmA", + exp: 1693994893, + iat: 1693991293, + iss: "https://test.issuer.com", }, - "access_token": "acc_token", - "expires_in": "7200", - "token_type": "Bearer", - "scope": "scope scope1", - "state": "TyqL9Uztfx", - "session_state": "uWqBtGfPDBMQH14R5RNx1Vv49dA-abJ4XqXdzKeAaDs", - "id_token_raw": "test", - "refresh_token": "test", + access_token: "acc_token", + expires_in: "7200", + token_type: "Bearer", + scope: "scope scope1", + state: "TyqL9Uztfx", + session_state: "uWqBtGfPDBMQH14R5RNx1Vv49dA-abJ4XqXdzKeAaDs", + id_token_raw: "test", + refresh_token: "test", } oidc.authStore.get = jest.fn(() => Promise.resolve(storeEntry)) - for (let getter of getters) { + for (const getter of getters) { expect(oidc).toHaveProperty(getter) expect(await oidc[getter]()).toBeTruthy() } expect(oidc.authStore.get).toBeCalledTimes(getters.length) - }); + }) }) - describe('.initialize()', function () { - it('should return initialized instance if it is already initialized', function (done) { - const oidc = new OIDCClient({issuer: 'http://test.com', client_id: 'test'}) + describe(".initialize()", () => { + it("should return initialized instance if it is already initialized", (done) => { + const oidc = new OIDCClient({ issuer: "http://test.com", client_id: "test" }) // @ts-expect-error expect(oidc.initialized).toBeFalsy() // @ts-expect-error oidc.fetchFromIssuer = jest.fn(async () => ({})) - oidc.initialize(false).then(client => { - // @ts-expect-error - expect(oidc.initialized).toBe(true) - - oidc.initialize(false).then(newClient => { + oidc + .initialize(false) + .then((client) => { // @ts-expect-error - expect(oidc.fetchFromIssuer).toBeCalledTimes(1) - done() - }).catch(done) - }).catch(done) - - }); + expect(oidc.initialized).toBe(true) + + oidc + .initialize(false) + .then((newClient) => { + // @ts-expect-error + expect(oidc.fetchFromIssuer).toBeCalledTimes(1) + done() + }) + .catch(done) + }) + .catch(done) + }) - it('should fetch issuer metadata when endpoints not provided', function (done) { - const oidc = new OIDCClient({issuer: 'http://test.com', client_id: 'test'}) + it("should fetch issuer metadata when endpoints not provided", (done) => { + const oidc = new OIDCClient({ issuer: "http://test.com", client_id: "test" }) // @ts-expect-error oidc.fetchFromIssuer = jest.fn(async () => ({})) - oidc.initialize(false).then(() => { - // @ts-expect-error - expect(oidc.fetchFromIssuer).toBeCalled() - done() - }).catch(done) - }); + oidc + .initialize(false) + .then(() => { + // @ts-expect-error + expect(oidc.fetchFromIssuer).toBeCalled() + done() + }) + .catch(done) + }) - it('should fail when metadata loading fails', function (done) { - const oidc = new OIDCClient({issuer: 'http://test.com', client_id: 'test'}) + it("should fail when metadata loading fails", (done) => { + const oidc = new OIDCClient({ issuer: "http://test.com", client_id: "test" }) // @ts-expect-error expect(oidc.initialized).toBeFalsy() // @ts-expect-error oidc.fetchFromIssuer = jest.fn(async () => { - throw new OIDCClientError('failed') + throw new OIDCClientError("failed") }) - oidc.initialize(false).then(client => { - done('should fail') - }).catch((err) => { - expect(err).toBeInstanceOf(OIDCClientError) - expect(err).toHaveProperty('error', 'failed') - done() - }) - }); + oidc + .initialize(false) + .then((client) => { + done("should fail") + }) + .catch((err) => { + expect(err).toBeInstanceOf(OIDCClientError) + expect(err).toHaveProperty("error", "failed") + done() + }) + }) - it('should fail with generic error', function (done) { - const oidc = new OIDCClient({issuer: 'http://test.com', client_id: 'test'}) + it("should fail with generic error", (done) => { + const oidc = new OIDCClient({ issuer: "http://test.com", client_id: "test" }) // @ts-expect-error expect(oidc.initialized).toBeFalsy() // @ts-expect-error oidc.fetchFromIssuer = jest.fn(async () => { - throw new Error('fails') + throw new Error("fails") }) - oidc.initialize(false).then(client => { - done('should fail') - }).catch((err) => { - expect(err).toBeInstanceOf(OIDCClientError) - expect(err).toHaveProperty('error', 'fails') - done() - }) - }); + oidc + .initialize(false) + .then((client) => { + done("should fail") + }) + .catch((err) => { + expect(err).toBeInstanceOf(OIDCClientError) + expect(err).toHaveProperty("error", "fails") + done() + }) + }) - it('should initialize stores', function (done) { + it("should initialize stores", (done) => { // @ts-ignore - const mockedModule = jest.genMockFromModule('../src').LocalStorageStateStore as any + const mockedModule = jest.genMockFromModule("../src").LocalStorageStateStore as any const mockStore = new mockedModule() mockStore.init = jest.fn() const oidc = new OIDCClient({ ...dummyOpts, stateStore: mockStore, - authStore: mockStore + authStore: mockStore, }) - oidc.initialize(false) - .then(value => { + oidc + .initialize(false) + .then((value) => { expect(mockStore.init).toBeCalledTimes(2) done() - }).catch(done) - }); + }) + .catch(done) + }) - it('should silentLogin if `checkLogin` true', function (done) { + it("should silentLogin if `checkLogin` true", (done) => { const oidc = new OIDCClient(dummyOpts) oidc.silentLogin = jest.fn(async () => { return Promise.resolve() }) - oidc.initialize() + oidc + .initialize() .then(() => { expect(oidc.silentLogin).toBeCalled() done() - }).catch(done) - }); - it('should clear authStore if login check fails', function (done) { + }) + .catch(done) + }) + it("should clear authStore if login check fails", (done) => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error oidc.authStore.clear = jest.fn() oidc.silentLogin = jest.fn(async () => { return Promise.reject() }) - oidc.initialize() + oidc + .initialize() .then(() => { expect(oidc.silentLogin).toBeCalled() // @ts-expect-error expect(oidc.authStore.clear).toBeCalled() done() - }).catch(done) - }); + }) + .catch(done) + }) }) - describe('.isLoggedIn()', function () { - it('should return local user if it exists', function (done) { + describe(".isLoggedIn()", () => { + it("should return local user if it exists", (done) => { const oidc = new OIDCClient(dummyOpts) - oidc.getUser = jest.fn(() => Promise.resolve({user: 'x'})) - - oidc.isLoggedIn().then((value) => { - expect(oidc.getUser).toBeCalled() - expect(value).toBe(true) - done() - }).catch(done) - }); + oidc.getUser = jest.fn(() => Promise.resolve({ user: "x" })) - it('should silent login if local user does not exist', function (done) { + oidc + .isLoggedIn() + .then((value) => { + expect(oidc.getUser).toBeCalled() + expect(value).toBe(true) + done() + }) + .catch(done) + }) + it("should silent login if local user does not exist", (done) => { const oidc = new OIDCClient(dummyOpts) - oidc.silentLogin = jest.fn(() => Promise.resolve({user: 'x'})) - - oidc.isLoggedIn().then((value) => { - expect(oidc.silentLogin).toBeCalled() - expect(value).toBe(true) - done() - }).catch(done) - }); + oidc.silentLogin = jest.fn(() => Promise.resolve({ user: "x" })) - it('should return false when silent login fails', function (done) { + oidc + .isLoggedIn() + .then((value) => { + expect(oidc.silentLogin).toBeCalled() + expect(value).toBe(true) + done() + }) + .catch(done) + }) + it("should return false when silent login fails", (done) => { const oidc = new OIDCClient(dummyOpts) oidc.silentLogin = jest.fn(() => Promise.reject()) - oidc.isLoggedIn().then((value) => { - expect(oidc.silentLogin).toBeCalled() - expect(value).toBe(false) - done() - }).catch(done) - }); + oidc + .isLoggedIn() + .then((value) => { + expect(oidc.silentLogin).toBeCalled() + expect(value).toBe(false) + done() + }) + .catch(done) + }) }) - describe('.createAuthRequest()', function () { - it('should try to fetch authorization endpoint uri', function (done) { - const oidc = new OIDCClient({...dummyOpts, endpoints: {}}) + describe(".createAuthRequest()", () => { + it("should try to fetch authorization endpoint uri", (done) => { + const oidc = new OIDCClient({ ...dummyOpts, endpoints: {} }) // @ts-expect-error oidc.fetchFromIssuer = jest.fn(() => { oidc.options.endpoints = dummyOpts.endpoints @@ -447,411 +479,445 @@ describe('oidc client', function () { expect(oidc.fetchFromIssuer).toBeCalledTimes(1) done() }) - }); - it('should build uri', function (done) { + }) + it("should build uri", (done) => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error - oidc.createAuthRequest().then(uri => { + oidc.createAuthRequest().then((uri) => { expect(typeof uri).toBe("string") done() }) - }); - it('should store to state store', function (done) { + }) + it("should store to state store", (done) => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error oidc.stateStore.set = jest.fn() // @ts-expect-error - oidc.createAuthRequest().then(uri => { + oidc.createAuthRequest().then((uri) => { // @ts-expect-error expect(oidc.stateStore.set).toBeCalled() done() }) - }); + }) - it('should generate nonce if response type includes "id_token"', function (done) { - const oidc = new OIDCClient({...dummyOpts, response_type: 'id_token'}) + it('should generate nonce if response type includes "id_token"', (done) => { + const oidc = new OIDCClient({ ...dummyOpts, response_type: "id_token" }) // @ts-expect-error - oidc.createAuthRequest().then(uri => { + oidc.createAuthRequest().then((uri) => { expect(uri).toMatch(/\&nonce=\w+\&?/) done() }) - }); + }) - it('should use provided state length', (done) => { - const oidc = new OIDCClient({...dummyOpts, stateLength: 16, response_type: 'id_token'}) + it("should use provided state length", (done) => { + const oidc = new OIDCClient({ ...dummyOpts, stateLength: 16, response_type: "id_token" }) // @ts-expect-error - oidc.createAuthRequest().then(uri => { + oidc.createAuthRequest().then((uri) => { expect(uri).toMatch(/\&state=\w+\&?/) expect(uri.match(/\&state=(\w+)\&?/)![1].length).toBe(16) done() }) - }); + }) - it('should use provided nonce length', (done) => { - const oidc = new OIDCClient({...dummyOpts, nonceLength: 16, response_type: 'id_token'}) + it("should use provided nonce length", (done) => { + const oidc = new OIDCClient({ ...dummyOpts, nonceLength: 16, response_type: "id_token" }) // @ts-expect-error - oidc.createAuthRequest().then(uri => { + oidc.createAuthRequest().then((uri) => { expect(uri).toMatch(/\&nonce=\w+\&?/) expect(uri.match(/\&nonce=(\w+)\&?/)![1].length).toBe(16) done() }) - }); + }) - it('should generate nonce if scope includes "openid"', function (done) { - const oidc = new OIDCClient({...dummyOpts, response_type: 'code', scope: 'openid profile'}) + it('should generate nonce if scope includes "openid"', (done) => { + const oidc = new OIDCClient({ ...dummyOpts, response_type: "code", scope: "openid profile" }) // @ts-expect-error - oidc.createAuthRequest().then(uri => { + oidc.createAuthRequest().then((uri) => { expect(uri).toMatch(/\&nonce=\w+\&?/) done() }) - }); + }) - it('should include passed options in request', function (done) { + it("should include passed options in request", (done) => { const authParams: Record = { - acr_values: 'test', - audience: 'test', - claims_locales: 'test', - client_id: 'test', - code_challenge_method: 'test', - display: 'test', - prompt: 'test', - redirect_uri: 'test', - registration: 'test', - response_mode: 'test', - response_type: 'code', - scope: 'test', - ui_locales: 'test', - web_message_target: 'test', - web_message_uri: 'test', + acr_values: "test", + audience: "test", + claims_locales: "test", + client_id: "test", + code_challenge_method: "test", + display: "test", + prompt: "test", + redirect_uri: "test", + registration: "test", + response_mode: "test", + response_type: "code", + scope: "test", + ui_locales: "test", + web_message_target: "test", + web_message_uri: "test", } const oidc = new OIDCClient({ ...dummyOpts, - ...authParams + ...authParams, }) // @ts-expect-error - oidc.createAuthRequest().then(uri => { - Object.keys(authParams).forEach(param => { + oidc.createAuthRequest().then((uri) => { + Object.keys(authParams).forEach((param) => { expect(uri).toMatch(new RegExp(`\\&?${param}=${authParams[param]}\\&?`)) }) done() }) - }); + }) - it('should include extra params in auth query', function (done) { + it("should include extra params in auth query", (done) => { const extraParams: Record = { test: 1, - test2: 2 + test2: 2, } const oidc = new OIDCClient({ ...dummyOpts, - extraParams + extraParams, }) // @ts-expect-error - oidc.createAuthRequest().then(uri => { - Object.keys(extraParams).forEach(param => { + oidc.createAuthRequest().then((uri) => { + Object.keys(extraParams).forEach((param) => { expect(uri).toMatch(new RegExp(`\\&?${param}=${extraParams[param]}\\&?`)) }) done() }) - }); + }) - it('should generate code_challenge if response type includes "code"', function (done) { + it('should generate code_challenge if response type includes "code"', (done) => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error oidc.stateStore.set = jest.fn() // @ts-ignore deriveChallenge = jest.fn(async () => "code_challenge") - // @ts-expect-error - oidc.createAuthRequest().then(uri => { - expect(uri).toMatch(/\&code_challenge=code_challenge\&/) - expect(uri).toMatch(/\&code_challenge_method=S256+\&?/) - expect(deriveChallenge).toBeCalled() - // @ts-ignore - deriveChallenge.mockRestore() - done() - }).catch(() => { - // @ts-ignore - deriveChallenge.mockRestore() - }) - }); + oidc + // @ts-expect-error + .createAuthRequest() + .then((uri) => { + expect(uri).toMatch(/\&code_challenge=code_challenge\&/) + expect(uri).toMatch(/\&code_challenge_method=S256+\&?/) + expect(deriveChallenge).toBeCalled() + // @ts-ignore + deriveChallenge.mockRestore() + done() + }) + .catch(() => { + // @ts-ignore + deriveChallenge.mockRestore() + }) + }) }) - describe('.createLogoutRequest()', function () { - it('should build uri', async function () { + describe(".createLogoutRequest()", () => { + it("should build uri", async () => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error const uri = await oidc.createLogoutRequest() expect(typeof uri).toBe("string") - }); + }) }) - describe('.exchangeAuthorizationCode()', function () { - - it('should fail without `code`', function (done) { + describe(".exchangeAuthorizationCode()", () => { + it("should fail without `code`", (done) => { const oidc = new OIDCClient(dummyOpts) - // @ts-expect-error - oidc.exchangeAuthorizationCode({}) - .then(done.bind(null, 'should not succeed')) - .catch(err => { + oidc + // @ts-expect-error + .exchangeAuthorizationCode({}) + .then(done.bind(null, "should not succeed")) + .catch((err) => { expect(err).toBeInstanceOf(Error) expect(err.message).toBe('"code" is required') done() }) - }); + }) - it('should fail without `redirect_uri`', function (done) { + it("should fail without `redirect_uri`", (done) => { const oidc = new OIDCClient(dummyOpts) - // @ts-expect-error - oidc.exchangeAuthorizationCode({code: 'test'}) - .then(done.bind(null, 'should not succeed')) - .catch(err => { + oidc + // @ts-expect-error + .exchangeAuthorizationCode({ code: "test" }) + .then(done.bind(null, "should not succeed")) + .catch((err) => { expect(err).toBeInstanceOf(Error) expect(err.message).toBe('"redirect_uri" is required') done() }) - }); + }) - it('should fail without `code_verifier`', function (done) { + it("should fail without `code_verifier`", (done) => { const oidc = new OIDCClient(dummyOpts) - // @ts-expect-error - oidc.exchangeAuthorizationCode({code: 'test', redirect_uri: 'test'}) - .then(done.bind(null, 'should not succeed')) - .catch(err => { + oidc + // @ts-expect-error + .exchangeAuthorizationCode({ code: "test", redirect_uri: "test" }) + .then(done.bind(null, "should not succeed")) + .catch((err) => { expect(err).toBeInstanceOf(Error) expect(err.message).toBe('"code_verifier" is required') done() }) - }); + }) - it('should fail without `client_id`', function (done) { + it("should fail without `client_id`", (done) => { // @ts-expect-error - const oidc = new OIDCClient({issuer: 'http://test.com/'}) - // @ts-expect-error - oidc.exchangeAuthorizationCode({code: 'test', redirect_uri: 'test', code_verifier: 'test'}) - .then(done.bind(null, 'should not succeed')) - .catch(err => { + const oidc = new OIDCClient({ issuer: "http://test.com/" }) + oidc + // @ts-expect-error + .exchangeAuthorizationCode({ code: "test", redirect_uri: "test", code_verifier: "test" }) + .then(done.bind(null, "should not succeed")) + .catch((err) => { expect(err).toBeInstanceOf(Error) expect(err.message).toBe('"client_id" is required') done() }) - }); + }) - it('should exchange code', function (done) { + it("should exchange code", (done) => { const oidc = new OIDCClient(dummyOpts) - // @ts-expect-error - oidc.exchangeAuthorizationCode({code: 'test', redirect_uri: 'test', code_verifier: 'test'}) + oidc + // @ts-expect-error + .exchangeAuthorizationCode({ code: "test", redirect_uri: "test", code_verifier: "test" }) .then(() => { expect(mockedFetch).toBeCalledTimes(1) done() - }).catch(done) - }); + }) + .catch(done) + }) - it('should use client_secret', function (done) { - const oidc = new OIDCClient({...dummyOpts, client_secret: 'test_secret', redirect_uri: 'http://localhost:8080'}) + it("should use client_secret", (done) => { + const oidc = new OIDCClient({ + ...dummyOpts, + client_secret: "test_secret", + redirect_uri: "http://localhost:8080", + }) - // @ts-expect-error - oidc.handleAuthResponse({code: 'test'}, {}, {code_verifier: 'test'}) + oidc + // @ts-expect-error + .handleAuthResponse({ code: "test" }, {}, { code_verifier: "test" }) .then(() => { expect(mockedFetch).toBeCalledTimes(1) done() - }).catch(done) - }); - + }) + .catch(done) + }) }) - describe('.exchangeRefreshToken()', function () { - - it('should fail without `refresh_token`', function (done) { + describe(".exchangeRefreshToken()", () => { + it("should fail without `refresh_token`", (done) => { const oidc = new OIDCClient(dummyOpts) - // @ts-expect-error - oidc.exchangeRefreshToken({}) - .then(() => done('should not succeed')) - .catch(err => { + oidc + // @ts-expect-error + .exchangeRefreshToken({}) + .then(() => done("should not succeed")) + .catch((err) => { expect(err).toBeInstanceOf(Error) expect(err.message).toBe('"refresh_token" is required') done() }) - }); - + }) - it('should fail without `client_id`', function (done) { - // @ts-expect-error - const oidc = new OIDCClient({issuer: 'http://test.com/'}) + it("should fail without `client_id`", (done) => { // @ts-expect-error - oidc.exchangeRefreshToken({refresh_token: 'test'}) - .then(() => done('should not succeed')) - .catch(err => { + const oidc = new OIDCClient({ issuer: "http://test.com/" }) + oidc + // @ts-expect-error + .exchangeRefreshToken({ refresh_token: "test" }) + .then(() => done("should not succeed")) + .catch((err) => { expect(err).toBeInstanceOf(Error) expect(err.message).toBe('"client_id" is required') done() }) - }); + }) - it('should exchange refresh token', function (done) { + it("should exchange refresh token", (done) => { const oidc = new OIDCClient(dummyOpts) - // @ts-expect-error - oidc.exchangeRefreshToken({refresh_token: 'test'}) + oidc + // @ts-expect-error + .exchangeRefreshToken({ refresh_token: "test" }) .then(() => { expect(mockedFetch).toBeCalledTimes(1) done() - }).catch(done) - }); - + }) + .catch(done) + }) }) - describe('.fetchFromIssuer()', function () { - it('should fetch', function () { + describe(".fetchFromIssuer()", () => { + it("should fetch", () => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error oidc.fetchFromIssuer().then(() => { expect(mockedFetch).toBeCalledTimes(1) }) - }); + }) - it('should fail with generic error', function (done) { + it("should fail with generic error", (done) => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error oidc.http = jest.fn(async () => { - throw new Error('fails') + throw new Error("fails") }) - // @ts-expect-error - oidc.fetchFromIssuer().then(() => { - done('should not succeed') - }).catch(err => { - expect(err).toBeInstanceOf(OIDCClientError) - expect(err).toHaveProperty('error', 'Loading metadata failed') - expect(err).toHaveProperty('error_description', 'fails') - done() - }) - }); + oidc + // @ts-expect-error + .fetchFromIssuer() + .then(() => { + done("should not succeed") + }) + .catch((err) => { + expect(err).toBeInstanceOf(OIDCClientError) + expect(err).toHaveProperty("error", "Loading metadata failed") + expect(err).toHaveProperty("error_description", "fails") + done() + }) + }) }) - describe('.fetchUserInfo()', function () { - it('should fetch', function () { + describe(".fetchUserInfo()", () => { + it("should fetch", () => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error - oidc.fetchUserInfo('token').then(() => { + oidc.fetchUserInfo("token").then(() => { expect(mockedFetch).toBeCalledTimes(1) }) - }); + }) }) - describe('.revokeToken()', function () { - it('should revoke', function (done) { + describe(".revokeToken()", () => { + it("should revoke", (done) => { const oidc = new OIDCClient({ - ...dummyOpts, endpoints: { - revocation_endpoint: 'dummy_revoke' - } + ...dummyOpts, + endpoints: { + revocation_endpoint: "dummy_revoke", + }, }) - oidc.revokeToken('token').then(() => { - expect(mockedFetch).toBeCalledTimes(1) - done() - }).catch(done) - }); + oidc + .revokeToken("token") + .then(() => { + expect(mockedFetch).toBeCalledTimes(1) + done() + }) + .catch(done) + }) - it('should fail without "revocation_endpoint"', function (done) { + it('should fail without "revocation_endpoint"', (done) => { const oidc = new OIDCClient(dummyOpts) - oidc.revokeToken('token') - .then(() => done('should not succeed')) + oidc + .revokeToken("token") + .then(() => done("should not succeed")) .catch((err) => { expect(err).toBeInstanceOf(OIDCClientError) expect(err.message).toBe('"revocation_endpoint" doesn\'t exist') done() }) - }); + }) }) - describe('.loadState()', function () { - it('should retrieve stored state', function (done) { + describe(".loadState()", () => { + it("should retrieve stored state", (done) => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error - const mockedGet = oidc.stateStore.get = jest.fn(async (state) => { - if (state === 'exist') { + const mockedGet = (oidc.stateStore.get = jest.fn(async (state) => { + if (state === "exist") { return true } return false - }) + })) // @ts-expect-error - const mockedDel = oidc.stateStore.del = jest.fn(async (state) => { - if (state === 'exist') { + const mockedDel = (oidc.stateStore.del = jest.fn(async (state) => { + if (state === "exist") { return true } return false - }) + })) - // @ts-expect-error - oidc.loadState('exist').then((storedState) => { - expect(mockedGet).toBeCalled() - expect(mockedDel).toBeCalled() - done() - }).catch(done) - }); + oidc + // @ts-expect-error + .loadState("exist") + .then((storedState) => { + expect(mockedGet).toBeCalled() + expect(mockedDel).toBeCalled() + done() + }) + .catch(done) + }) - it('should fail if state does not exist', function (done) { + it("should fail if state does not exist", (done) => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error - const mockedGet = oidc.stateStore.get = jest.fn(async (state) => { - if (state === 'exist') { + const mockedGet = (oidc.stateStore.get = jest.fn(async (state) => { + if (state === "exist") { return true } return false - }) + })) - // @ts-expect-error - oidc.loadState('notExists').then(done).catch((err) => { - expect(mockedGet).toBeCalled() - expect(err).toBeInstanceOf(StateNotFound) - expect(err.message).toBe('Local state not found') - done() - }) - }); + oidc + // @ts-expect-error + .loadState("notExists") + .then(done) + .catch((err) => { + expect(mockedGet).toBeCalled() + expect(err).toBeInstanceOf(StateNotFound) + expect(err.message).toBe("Local state not found") + done() + }) + }) }) - describe('.handleAuthResponse()', function () { - it('should handle', function (done) { + describe(".handleAuthResponse()", () => { + it("should handle", (done) => { const oidc = new OIDCClient(dummyOpts) - // @ts-expect-error - oidc.handleAuthResponse({param: 'value'}, {}, {}) - .then(resp => { - expect(resp).toStrictEqual({param: 'value'}) + oidc + // @ts-expect-error + .handleAuthResponse({ param: "value" }, {}, {}) + .then((resp) => { + expect(resp).toStrictEqual({ param: "value" }) done() - }).catch(done) - }); + }) + .catch(done) + }) - it('should exchange code', function (done) { + it("should exchange code", (done) => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error oidc.exchangeAuthorizationCode = jest.fn(async () => ({})) - // @ts-expect-error - oidc.handleAuthResponse({code: 'code'}, {}, {}) - .then(resp => { + oidc + // @ts-expect-error + .handleAuthResponse({ code: "code" }, {}, {}) + .then((resp) => { // @ts-expect-error expect(oidc.exchangeAuthorizationCode).toBeCalled() done() - }).catch(done) - }); + }) + .catch(done) + }) }) - describe('.handleTokenResult()', function () { - let mockedValidator: jest.Mock; + describe(".handleTokenResult()", () => { + let mockedValidator: jest.Mock beforeAll(() => { - mockedValidator = jest.fn().mockReturnValue(Promise.resolve({ - nonce: 'nonUserClaim', - first_name: 'first' - })); + mockedValidator = jest.fn().mockReturnValue( + Promise.resolve({ + nonce: "nonUserClaim", + first_name: "first", + }), + ) // @ts-ignore joseUtils.validateIdToken = mockedValidator }) @@ -859,136 +925,150 @@ describe('oidc client', function () { afterEach(() => mockedValidator.mockClear()) afterAll(() => mockedValidator.mockRestore()) - it('should handle', function (done) { + it("should handle", (done) => { const oidc = new OIDCClient(dummyOpts) - // @ts-expect-error - oidc.handleTokenResult({}, {}, {}) - .then(resp => { - expect(resp).toEqual({authParams: {}, scope: undefined, user: {}}) + oidc + // @ts-expect-error + .handleTokenResult({}, {}, {}) + .then((resp) => { + expect(resp).toEqual({ authParams: {}, scope: undefined, user: {} }) done() - }).catch(done) - }); + }) + .catch(done) + }) - it('should handle "id_token"', function (done) { + it('should handle "id_token"', (done) => { const oidc = new OIDCClient(dummyOpts) - // @ts-expect-error - oidc.handleTokenResult({id_token: 'test'}, {}, {}) - .then(resp => { + oidc + // @ts-expect-error + .handleTokenResult({ id_token: "test" }, {}, {}) + .then((resp) => { expect(mockedValidator).toBeCalled() expect(resp).toEqual({ - authParams: {}, - id_token_raw: "test", - id_token: { - "first_name": "first", - "nonce": "nonUserClaim", - }, - scope: undefined, - user: { - first_name: 'first' - } - } - ) + authParams: {}, + id_token_raw: "test", + id_token: { + first_name: "first", + nonce: "nonUserClaim", + }, + scope: undefined, + user: { + first_name: "first", + }, + }) done() - }).catch(done) - }); + }) + .catch(done) + }) - it('should call custom "idTokenValidator"', function (done) { + it('should call custom "idTokenValidator"', (done) => { const customValidator = jest.fn(async () => Promise.resolve(false)) const oidc = new OIDCClient(dummyOpts) - // @ts-expect-error - oidc.handleTokenResult({id_token: 'test'}, {}, {idTokenValidator: customValidator}) - .then(() => done('should not succeed')) - .catch(err => { + oidc + // @ts-expect-error + .handleTokenResult({ id_token: "test" }, {}, { idTokenValidator: customValidator }) + .then(() => done("should not succeed")) + .catch((err) => { expect(mockedValidator).toBeCalled() expect(customValidator).toBeCalled() expect(err).toBeInstanceOf(InvalidIdTokenError) - expect(err.message).toBe('Id Token validation failed') + expect(err.message).toBe("Id Token validation failed") done() }) - }); - it('should handle "access_token"', function (done) { + }) + it('should handle "access_token"', (done) => { const oidc = new OIDCClient(dummyOpts) - // @ts-expect-error - oidc.handleTokenResult({access_token: 'test'}, {}, {}) - .then(resp => { + oidc + // @ts-expect-error + .handleTokenResult({ access_token: "test" }, {}, {}) + .then((resp) => { expect(resp).toEqual({ - authParams: {}, - access_token: "test", - scope: undefined, - user: {} - } - ) + authParams: {}, + access_token: "test", + scope: undefined, + user: {}, + }) done() - }).catch(done) - }); + }) + .catch(done) + }) - it('should fetch user info when "requestUserInfo" = true', function (done) { + it('should fetch user info when "requestUserInfo" = true', (done) => { const oidc = new OIDCClient({ - ...dummyOpts, endpoints: { - userinfo_endpoint: 'user_info_endpoint' - } + ...dummyOpts, + endpoints: { + userinfo_endpoint: "user_info_endpoint", + }, }) // @ts-expect-error - oidc.fetchUserInfo = jest.fn().mockReturnValue({sub: 'test'}) - // @ts-expect-error - oidc.handleTokenResult({access_token: 'dummyToken'}, {}, { - requestUserInfo: true - }) - .then(resp => { + oidc.fetchUserInfo = jest.fn().mockReturnValue({ sub: "test" }) + oidc + // @ts-expect-error + .handleTokenResult( + { access_token: "dummyToken" }, + {}, + // @ts-expect-error + { + requestUserInfo: true, + }, + ) + .then((resp) => { // @ts-expect-error - expect(oidc.fetchUserInfo).toBeCalledWith('dummyToken') + expect(oidc.fetchUserInfo).toBeCalledWith("dummyToken") expect(resp).toEqual({ - authParams: {}, - access_token: "dummyToken", - scope: undefined, - user: {sub: 'test'} - } - ) + authParams: {}, + access_token: "dummyToken", + scope: undefined, + user: { sub: "test" }, + }) done() - }).catch(done) - }); + }) + .catch(done) + }) - it('should fail on error response', function (done) { + it("should fail on error response", (done) => { const oidc = new OIDCClient(dummyOpts) - // @ts-expect-error - oidc.handleTokenResult({error: 'error', error_description: 'invalid_client'}, {}, {}) - .then(() => done).catch(err => { - expect(err).toBeInstanceOf(AuthenticationError) - expect(err).toMatchObject({error: 'error', error_description: 'invalid_client'}) - done() - }) - }); + oidc + // @ts-expect-error + .handleTokenResult({ error: "error", error_description: "invalid_client" }, {}, {}) + .then(() => done) + .catch((err) => { + expect(err).toBeInstanceOf(AuthenticationError) + expect(err).toMatchObject({ error: "error", error_description: "invalid_client" }) + done() + }) + }) }) - describe('.login()', function () { + describe(".login()", () => { beforeAll(() => { // @ts-ignore delete window.location // @ts-ignore - window.location = {assign: jest.fn()} - jest.spyOn(window.location, 'assign') + window.location = { assign: jest.fn() } + jest.spyOn(window.location, "assign") }) - it('should navigate the window to auth request', function (done) { + it("should navigate the window to auth request", (done) => { const oidc = new OIDCClient(dummyOpts) - oidc.login().then(function () { + oidc.login().then(() => { expect(window.location.assign).toBeCalled() done() }) - }); + }) }) - describe('.loginWithPopup()', function () { - it('should execute popup and handle auth result', function (done) { + describe(".loginWithPopup()", () => { + it("should execute popup and handle auth result", (done) => { const mockedRunPopup = jest.fn(async () => { - return {response: {state: 'test'}, state: {authParams: {}, localState: {}}} + return { response: { state: "test" }, state: { authParams: {}, localState: {} } } }) // @ts-expect-error popupUtils["runPopup"] = mockedRunPopup const oidc = new OIDCClient(dummyOpts) - const authResult = {user: 'x'} + const authResult = { user: "x" } // @ts-ignore oidc.exchangeAuthorizationCode = jest.fn(async () => ({})) @@ -997,52 +1077,53 @@ describe('oidc client', function () { const onLogin = jest.fn() oidc.on(Events.USER_LOGIN, onLogin) - oidc.loginWithPopup().then(function () { + oidc.loginWithPopup().then(() => { expect(mockedRunPopup).toBeCalled() expect(onLogin).toBeCalledWith(authResult) done() }) - }); + }) - it('should throw interaction error when user closes popup', function (done) { + it("should throw interaction error when user closes popup", (done) => { const mockedRunPopup = jest.fn(async () => { - throw new InteractionCancelled('user closed') + throw new InteractionCancelled("user closed") }) // @ts-expect-error popupUtils["runPopup"] = mockedRunPopup const oidc = new OIDCClient(dummyOpts) - const authResult = {user: 'x'} + const authResult = { user: "x" } // @ts-ignore oidc.exchangeAuthorizationCode = jest.fn(async () => ({})) // @ts-ignore oidc.handleTokenResult = jest.fn(async () => authResult) - oidc.loginWithPopup().catch(function (err) { - expect(err).toBeInstanceOf(InteractionCancelled) - done() - return 'passed' - }).then((v) => v !== 'passed' && done(new Error('login with popup should fail'))) - }); - + oidc + .loginWithPopup() + .catch((err) => { + expect(err).toBeInstanceOf(InteractionCancelled) + done() + return "passed" + }) + .then((v) => v !== "passed" && done(new Error("login with popup should fail"))) + }) }) - describe('.monitorSession()', function () { + describe(".monitorSession()", () => { const originalFn = checkSessionUtils["createSessionCheckerFrame"] const mockedChecker = jest.fn(() => { - return {start: mockedStart, stop: mockedStop} + return { start: mockedStart, stop: mockedStop } }) const mockedStart = jest.fn() const mockedStop = jest.fn() const oidcOpts = { ...dummyOpts, endpoints: { - check_session_iframe: "http://example.com/example" - } + check_session_iframe: "http://example.com/example", + }, } beforeEach(() => { - // @ts-expect-error checkSessionUtils["createSessionCheckerFrame"] = mockedChecker }) @@ -1051,58 +1132,58 @@ describe('oidc client', function () { checkSessionUtils["createSessionCheckerFrame"] = originalFn }) - - it('should not run if "check_session_iframe" not exists', function () { + it('should not run if "check_session_iframe" not exists', () => { const oidc = new OIDCClient(dummyOpts) - jest.spyOn(console, 'warn') + jest.spyOn(console, "warn") // @ts-expect-error oidc.monitorSession({}) - expect(console.warn).toBeCalledWith('"check_session_iframe" endpoint missing or session management is not supported by provider') - }); + expect(console.warn).toBeCalledWith( + '"check_session_iframe" endpoint missing or session management is not supported by provider', + ) + }) - it('should should create session checker if not exists', function () { + it("should should create session checker if not exists", () => { const oidc = new OIDCClient(oidcOpts) - const session_state = 'state' + const session_state = "state" // @ts-expect-error - oidc.monitorSession({sub: 's', session_state}) + oidc.monitorSession({ sub: "s", session_state }) expect(checkSessionUtils["createSessionCheckerFrame"]).toBeCalled() expect(mockedStart).toBeCalledWith(session_state) - }); + }) }) - describe('.loginCallback()', function () { - - it('should fail if no url is passed', function (done) { + describe(".loginCallback()", () => { + it("should fail if no url is passed", (done) => { const oidc = new OIDCClient(dummyOpts) - const oldWindow = window.location; + const oldWindow = window.location // @ts-ignore - delete window.location; - oidc.loginCallback().catch(e => { + delete window.location + oidc.loginCallback().catch((e) => { expect(e).toBeInstanceOf(OIDCClientError) - expect(e.message).toBe('Url must be passed to handle login redirect') + expect(e.message).toBe("Url must be passed to handle login redirect") done() }) window.location = oldWindow - }); - it('should fail if wrong url is passed', function (done) { + }) + it("should fail if wrong url is passed", (done) => { const oidc = new OIDCClient(dummyOpts) - oidc.loginCallback('wrongUrlformat#asdasdasd').catch(e => { + oidc.loginCallback("wrongUrlformat#asdasdasd").catch((e) => { expect(e).toBeInstanceOf(OIDCClientError) expect(e.message).toBe('Invalid callback url passed: "wrongUrlformat#asdasdasd"') done() }) - }); + }) - it('should exchange auth code ', function (done) { - const authObj = {user: {sub: 'test'}} + it("should exchange auth code ", (done) => { + const authObj = { user: { sub: "test" } } const oidc = new OIDCClient(dummyOpts) // @ts-expect-error - oidc.loadState = jest.fn(async () => ({authParams: {}, localState: {}, request_type: 'd'})) + oidc.loadState = jest.fn(async () => ({ authParams: {}, localState: {}, request_type: "d" })) // @ts-expect-error oidc.exchangeAuthorizationCode = jest.fn() // @ts-expect-error @@ -1111,96 +1192,98 @@ describe('oidc client', function () { const onLogin = jest.fn() oidc.on(Events.USER_LOGIN, onLogin) - oidc.loginCallback('http://example.com?code=1q2w3e4r&state=123456') - .then(() => { - // @ts-expect-error - expect(oidc.loadState).toBeCalledWith('123456') - expect(onLogin).toBeCalledWith(authObj) - done() - }) - }); - it('should fail if auth request failed', function (done) { + oidc.loginCallback("http://example.com?code=1q2w3e4r&state=123456").then(() => { + // @ts-expect-error + expect(oidc.loadState).toBeCalledWith("123456") + expect(onLogin).toBeCalledWith(authObj) + done() + }) + }) + it("should fail if auth request failed", (done) => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error - oidc.loadState = jest.fn(async () => ({authParams: {}, localState: {}, request_type: 'd'})) + oidc.loadState = jest.fn(async () => ({ authParams: {}, localState: {}, request_type: "d" })) - oidc.loginCallback('http://example.com?error=auth_error&error_description=failed&state=123456') + oidc + .loginCallback("http://example.com?error=auth_error&error_description=failed&state=123456") .catch((e) => { // @ts-expect-error - expect(oidc.loadState).toBeCalledWith('123456') + expect(oidc.loadState).toBeCalledWith("123456") expect(e).toBeInstanceOf(AuthenticationError) done() }) - }); + }) - it('should notify parent if it is called from embedded document', function (done) { - Object.defineProperty(window, 'frameElement', { - value: '123' - }); + it("should notify parent if it is called from embedded document", (done) => { + Object.defineProperty(window, "frameElement", { + value: "123", + }) const oidc = new OIDCClient(dummyOpts) // @ts-expect-error - oidc.loadState = jest.fn(async () => ({authParams: {}, localState: {}, request_type: 's'})) + oidc.loadState = jest.fn(async () => ({ authParams: {}, localState: {}, request_type: "s" })) window.parent.postMessage = jest.fn() - oidc.loginCallback('http://example.com?code=1q2w3e4r&state=123456') - .then(() => { - // @ts-expect-error - expect(oidc.loadState).toBeCalledWith('123456') - expect(window.parent.postMessage).toBeCalledWith({ - type: 'authorization_response', - response: {code: '1q2w3e4r', state: '123456'}, - state: {authParams: {}, localState: {}, request_type: 's'} - }, window.location.protocol + "//" + window.location.host) - done() - }) - }); + oidc.loginCallback("http://example.com?code=1q2w3e4r&state=123456").then(() => { + // @ts-expect-error + expect(oidc.loadState).toBeCalledWith("123456") + expect(window.parent.postMessage).toBeCalledWith( + { + type: "authorization_response", + response: { code: "1q2w3e4r", state: "123456" }, + state: { authParams: {}, localState: {}, request_type: "s" }, + }, + `${window.location.protocol}//${window.location.host}`, + ) + done() + }) + }) - it('should notify parent if it is called from popup', function (done) { - Object.defineProperty(window, 'opener', { - value: {} - }); + it("should notify parent if it is called from popup", (done) => { + Object.defineProperty(window, "opener", { + value: {}, + }) const oidc = new OIDCClient(dummyOpts) - const state = {authParams: {}, localState: {}, request_type: 'p'} + const state = { authParams: {}, localState: {}, request_type: "p" } // @ts-expect-error oidc.loadState = jest.fn(async () => state) window.opener!.postMessage = jest.fn() - oidc.loginCallback('http://example.com?code=1q2w3e4r&state=123456') - .then(() => { - // @ts-expect-error - expect(oidc.loadState).toBeCalledWith('123456') - expect(window.opener!.postMessage).toBeCalledWith({ - type: 'authorization_response', - response: {code: '1q2w3e4r', state: '123456'}, - state - }, window.location.protocol + "//" + window.location.host) - done() - }) - }); + oidc.loginCallback("http://example.com?code=1q2w3e4r&state=123456").then(() => { + // @ts-expect-error + expect(oidc.loadState).toBeCalledWith("123456") + expect(window.opener!.postMessage).toBeCalledWith( + { + type: "authorization_response", + response: { code: "1q2w3e4r", state: "123456" }, + state, + }, + `${window.location.protocol}//${window.location.host}`, + ) + done() + }) + }) }) - describe('.silentLogin()', function () { + describe(".silentLogin()", () => { + it("should use refresh_token if there is one", (done) => { + const oidc = new OIDCClient({ ...dummyOpts, useRefreshToken: true }) - it('should use refresh_token if there is one', function (done) { - const oidc = new OIDCClient({...dummyOpts, useRefreshToken: true}) - - const authObj = {user: {sub: 'test'}} + const authObj = { user: { sub: "test" } } // @ts-expect-error oidc.exchangeRefreshToken = jest.fn() // @ts-expect-error oidc.handleTokenResult = jest.fn(async () => authObj) // @ts-expect-error - oidc.authStore.set('auth', {refresh_token: 'dummyToken'}) - + oidc.authStore.set("auth", { refresh_token: "dummyToken" }) const onLogin = jest.fn() oidc.on(Events.USER_LOGIN, onLogin) - oidc.silentLogin().then(function () { + oidc.silentLogin().then(() => { // @ts-expect-error expect(oidc.exchangeRefreshToken).toBeCalled() // @ts-expect-error @@ -1208,24 +1291,24 @@ describe('oidc client', function () { expect(onLogin).toBeCalledWith(authObj) done() }) - }); + }) - it('should use silent_redirect_uri as redirect_uri if passed', function (done) { + it("should use silent_redirect_uri as redirect_uri if passed", (done) => { const mockedRunIFrame = jest.fn(async () => { - return {response: {state: 'test'}, state: {}} + return { response: { state: "test" }, state: {} } }) // @ts-expect-error iframeUtils["runIframe"] = mockedRunIFrame const oidc = new OIDCClient({ ...dummyOpts, - silent_redirect_uri: 'silent_redirect_uri', - redirect_uri: 'redirect_uri' + silent_redirect_uri: "silent_redirect_uri", + redirect_uri: "redirect_uri", }) - const authObj = {user: {sub: 'test'}} + const authObj = { user: { sub: "test" } } // @ts-expect-error oidc.createAuthRequest = jest.fn((opts) => { - expect(opts!.redirect_uri).toBe('silent_redirect_uri') + expect(opts!.redirect_uri).toBe("silent_redirect_uri") return }) // @ts-expect-error @@ -1234,32 +1317,33 @@ describe('oidc client', function () { oidc.handleTokenResult = jest.fn(async () => authObj) // @ts-expect-error - oidc.authStore.set('auth', {}) + oidc.authStore.set("auth", {}) const onLogin = jest.fn() oidc.on(Events.USER_LOGIN, onLogin) - oidc.silentLogin().then(function () { - // @ts-expect-error - expect(oidc.createAuthRequest).toBeCalled() - // @ts-expect-error - expect(oidc.handleTokenResult).toBeCalled() - expect(onLogin).toBeCalledWith(authObj) - done() - }).catch(done) - }); - - - it('should make auth request if refresh tokens are not used', function (done) { + oidc + .silentLogin() + .then(() => { + // @ts-expect-error + expect(oidc.createAuthRequest).toBeCalled() + // @ts-expect-error + expect(oidc.handleTokenResult).toBeCalled() + expect(onLogin).toBeCalledWith(authObj) + done() + }) + .catch(done) + }) + it("should make auth request if refresh tokens are not used", (done) => { const mockedRunIFrame = jest.fn(async () => { - return {response: {state: 'test'}, state: {}} + return { response: { state: "test" }, state: {} } }) // @ts-expect-error iframeUtils["runIframe"] = mockedRunIFrame const oidc = new OIDCClient(dummyOpts) - const authObj = {user: {sub: 'test'}} + const authObj = { user: { sub: "test" } } // @ts-expect-error oidc.createAuthRequest = jest.fn() // @ts-expect-error @@ -1269,12 +1353,11 @@ describe('oidc client', function () { // @ts-expect-error oidc.handleTokenResult = jest.fn(async () => authObj) // @ts-expect-error - oidc.authStore.set('auth', {}) - + oidc.authStore.set("auth", {}) const onLogin = jest.fn() oidc.on(Events.USER_LOGIN, onLogin) - oidc.silentLogin().then(function () { + oidc.silentLogin().then(() => { // @ts-expect-error expect(oidc.handleAuthResponse).toBeCalled() // @ts-expect-error @@ -1282,7 +1365,7 @@ describe('oidc client', function () { expect(onLogin).toBeCalledWith(authObj) done() }) - }); + }) // it('should clear auth store on any error', function (done) { // const oidc = new OIDCClient({...dummyOpts, useRefreshToken: true}) @@ -1307,38 +1390,38 @@ describe('oidc client', function () { // }); }) - describe('.logout()', function () { + describe(".logout()", () => { const oldLocation = window.location beforeEach(() => { // @ts-ignore delete window.location // @ts-ignore - window.location = {assign: jest.fn()} - jest.spyOn(window.location, 'assign') + window.location = { assign: jest.fn() } + jest.spyOn(window.location, "assign") }) afterEach(() => { window.location = oldLocation }) - it('should redirect window to logout uri', function (done) { + it("should redirect window to logout uri", (done) => { const oidc = new OIDCClient(dummyOpts) - oidc.logout().then(function () { + oidc.logout().then(() => { expect(window.location.assign).toBeCalled() done() }) - }); + }) - it('should clear only from local if "localOnly" = true', function (done) { + it('should clear only from local if "localOnly" = true', (done) => { const oidc = new OIDCClient(dummyOpts) // @ts-expect-error jest.spyOn(oidc.authStore, "clear") - oidc.logout({localOnly: true}).then(function () { + oidc.logout({ localOnly: true }).then(() => { // @ts-expect-error expect(oidc.authStore.clear).toBeCalled() expect(window.location.assign).not.toBeCalled() done() }) - }); + }) }) }) diff --git a/test/create_oidc_client.spec.ts b/test/create_oidc_client.spec.ts index 53edb30..67c805b 100644 --- a/test/create_oidc_client.spec.ts +++ b/test/create_oidc_client.spec.ts @@ -1,17 +1,17 @@ -import createOIDCClient, {OIDCClient} from "../src"; +import createOIDCClient, { OIDCClient } from "../src" -describe('createOidcClient', function () { - it('should create oidc client and initialize it', function (done) { - const initMock = jest.fn( async () => ({})) +describe("createOidcClient", () => { + it("should create oidc client and initialize it", (done) => { + const initMock = jest.fn(async () => ({})) // @ts-ignore OIDCClient.prototype.initialize = initMock createOIDCClient({ - issuer: 'https://test.plusauth.com/', - client_id: 'test', - endpoints: { authorization_endpoint: 'dummy_auth'} + issuer: "https://test.plusauth.com/", + client_id: "test", + endpoints: { authorization_endpoint: "dummy_auth" }, }).then(() => { expect(initMock).toBeCalled() done() }) - }); + }) }) diff --git a/test/external_client.spec.ts b/test/external_client.spec.ts index 7a26a6b..e84ac91 100644 --- a/test/external_client.spec.ts +++ b/test/external_client.spec.ts @@ -1,11 +1,14 @@ import "whatwg-fetch" -import {OIDCClient} from "../src"; +import { OIDCClient } from "../src" -it('should fetch issuer metadata when endpoints not provided ', function (done) { - const oidc = new OIDCClient({ issuer: 'https://accounts.google.com', client_id: 'test'}) +it("should fetch issuer metadata when endpoints not provided ", (done) => { + const oidc = new OIDCClient({ issuer: "https://accounts.google.com", client_id: "test" }) - oidc.initialize(false).then(()=>{ - expect(oidc.issuer_metadata).toHaveProperty('authorization_endpoint') - done() - }).catch(done.fail) -}); + oidc + .initialize(false) + .then(() => { + expect(oidc.issuer_metadata).toHaveProperty("authorization_endpoint") + done() + }) + .catch(done.fail) +}) diff --git a/test/helpers/evet_emitter.spec.ts b/test/helpers/evet_emitter.spec.ts index 85513d2..c9ec35f 100644 --- a/test/helpers/evet_emitter.spec.ts +++ b/test/helpers/evet_emitter.spec.ts @@ -1,195 +1,206 @@ -import {EventEmitter as Emitter} from "../../src/helpers"; +import { EventEmitter as Emitter } from "../../src/helpers" -class Custom extends Emitter { -} +class Custom extends Emitter {} -describe('Custom', function(){ - describe('with Emitter.call(this)', function(){ - it('should work', function(done){ - const emitter = new Custom; - emitter.on('foo', done); - emitter.emit('foo'); +describe("Custom", () => { + describe("with Emitter.call(this)", () => { + it("should work", (done) => { + const emitter = new Custom() + emitter.on("foo", done) + emitter.emit("foo") }) }) }) -describe('Emitter', function(){ - describe('.on(event, fn)', function(){ - it('should add listeners', function(){ - const emitter = new Emitter; - const calls: any[] = []; +describe("Emitter", () => { + describe(".on(event, fn)", () => { + it("should add listeners", () => { + const emitter = new Emitter() + const calls: any[] = [] - emitter.on('foo', function(val){ - calls.push('one', val); - }); + emitter.on("foo", (val) => { + calls.push("one", val) + }) - emitter.on('foo', function(val){ - calls.push('two', val); - }); + emitter.on("foo", (val) => { + calls.push("two", val) + }) - emitter.emit('foo', 1); - emitter.emit('bar', 1); - emitter.emit('foo', 2); + emitter.emit("foo", 1) + emitter.emit("bar", 1) + emitter.emit("foo", 2) - expect(calls).toStrictEqual([ 'one', 1, 'two', 1, 'one', 2, 'two', 2 ]); + expect(calls).toStrictEqual(["one", 1, "two", 1, "one", 2, "two", 2]) }) - it('should add listeners for events which are same names with methods of Object.prototype', function(){ - const emitter = new Emitter; - const calls: any[] = []; + it("should add listeners for events which are same names with methods of Object.prototype", () => { + const emitter = new Emitter() + const calls: any[] = [] - emitter.on('constructor', function(val){ - calls.push('one', val); - }); + emitter.on("constructor", (val) => { + calls.push("one", val) + }) - emitter.on('__proto__', function(val){ - calls.push('two', val); - }); + emitter.on("__proto__", (val) => { + calls.push("two", val) + }) - emitter.emit('constructor', 1); - emitter.emit('__proto__', 2); + emitter.emit("constructor", 1) + emitter.emit("__proto__", 2) - expect(calls).toStrictEqual([ 'one', 1, 'two', 2 ]); + expect(calls).toStrictEqual(["one", 1, "two", 2]) }) }) - describe('.once(event, fn)', function(){ - it('should add a single-shot listener', function(){ - const emitter = new Emitter; - const calls: any[] = []; + describe(".once(event, fn)", () => { + it("should add a single-shot listener", () => { + const emitter = new Emitter() + const calls: any[] = [] - emitter.once('foo', function(val){ - calls.push('one', val); - }); + emitter.once("foo", (val) => { + calls.push("one", val) + }) - emitter.emit('foo', 1); - emitter.emit('foo', 2); - emitter.emit('foo', 3); - emitter.emit('bar', 1); + emitter.emit("foo", 1) + emitter.emit("foo", 2) + emitter.emit("foo", 3) + emitter.emit("bar", 1) - expect(calls).toStrictEqual([ 'one', 1 ]); + expect(calls).toStrictEqual(["one", 1]) }) }) - describe('.off(event, fn)', function(){ - it('should remove a listener', function(){ - const emitter = new Emitter; - const calls: any[] = []; + describe(".off(event, fn)", () => { + it("should remove a listener", () => { + const emitter = new Emitter() + const calls: any[] = [] - function one() { calls.push('one'); } - function two() { calls.push('two'); } + function one() { + calls.push("one") + } + function two() { + calls.push("two") + } - emitter.on('foo', one); - emitter.on('foo', two); - emitter.off('foo', two); + emitter.on("foo", one) + emitter.on("foo", two) + emitter.off("foo", two) - emitter.emit('foo'); + emitter.emit("foo") - expect(calls).toStrictEqual([ 'one' ]); + expect(calls).toStrictEqual(["one"]) }) - it('should work with .once()', function(){ - const emitter = new Emitter; - const calls: any[] = []; + it("should work with .once()", () => { + const emitter = new Emitter() + const calls: any[] = [] - function one() { calls.push('one'); } + function one() { + calls.push("one") + } - emitter.once('foo', one); - emitter.once('fee', one); - emitter.off('foo', one); + emitter.once("foo", one) + emitter.once("fee", one) + emitter.off("foo", one) - emitter.emit('foo'); + emitter.emit("foo") - expect(calls).toStrictEqual([]); + expect(calls).toStrictEqual([]) }) - it('should work when called from an event', function(){ - const emitter = new Emitter; - let called; + it("should work when called from an event", () => { + const emitter = new Emitter() + let called - function b () { - called = true; + function b() { + called = true } - emitter.on('tobi', function () { - emitter.off('tobi', b); - }); - emitter.on('tobi', b); - emitter.emit('tobi'); - expect(called).toBeTruthy(); - called = false; - emitter.emit('tobi'); - expect(called).toBeFalsy(); - }); + emitter.on("tobi", () => { + emitter.off("tobi", b) + }) + emitter.on("tobi", b) + emitter.emit("tobi") + expect(called).toBeTruthy() + called = false + emitter.emit("tobi") + expect(called).toBeFalsy() + }) }) - describe('.off(event)', function(){ - it('should remove all listeners for an event', function(){ - const emitter = new Emitter; - const calls: any[] = []; + describe(".off(event)", () => { + it("should remove all listeners for an event", () => { + const emitter = new Emitter() + const calls: any[] = [] - function one() { calls.push('one'); } - function two() { calls.push('two'); } + function one() { + calls.push("one") + } + function two() { + calls.push("two") + } - emitter.on('foo', one); - emitter.on('foo', two); - emitter.off('foo'); - emitter.off('bar'); + emitter.on("foo", one) + emitter.on("foo", two) + emitter.off("foo") + emitter.off("bar") - emitter.emit('foo'); - emitter.emit('foo'); + emitter.emit("foo") + emitter.emit("foo") - expect(calls).toStrictEqual([]); + expect(calls).toStrictEqual([]) }) - it('should remove event array to avoid memory leak', function() { - const emitter = new Emitter; - const calls = []; + it("should remove event array to avoid memory leak", () => { + const emitter = new Emitter() + const calls = [] function cb() {} - emitter.on('foo', cb); - emitter.off('foo', cb); + emitter.on("foo", cb) + emitter.off("foo", cb) - expect(emitter.callbacks).not.toHaveProperty('$foo'); + expect(emitter.callbacks).not.toHaveProperty("$foo") }) - it('should only remove the event array when the last subscriber unsubscribes', function() { - const emitter = new Emitter; - const calls = []; + it("should only remove the event array when the last subscriber unsubscribes", () => { + const emitter = new Emitter() + const calls = [] function cb1() {} function cb2() {} - emitter.on('foo', cb1); - emitter.on('foo', cb2); - emitter.off('foo', cb1); + emitter.on("foo", cb1) + emitter.on("foo", cb2) + emitter.off("foo", cb1) - expect(emitter.callbacks).toHaveProperty('$foo'); + expect(emitter.callbacks).toHaveProperty("$foo") }) }) - describe('.off()', function(){ - it('should remove all listeners', function(){ - const emitter = new Emitter; - const calls: any[] = []; + describe(".off()", () => { + it("should remove all listeners", () => { + const emitter = new Emitter() + const calls: any[] = [] - function one() { calls.push('one'); } - function two() { calls.push('two'); } + function one() { + calls.push("one") + } + function two() { + calls.push("two") + } - emitter.on('foo', one); - emitter.on('bar', two); + emitter.on("foo", one) + emitter.on("bar", two) - emitter.emit('foo'); - emitter.emit('bar'); + emitter.emit("foo") + emitter.emit("bar") - emitter.off(); + emitter.off() - emitter.emit('foo'); - emitter.emit('bar'); + emitter.emit("foo") + emitter.emit("bar") - expect(calls).toStrictEqual(['one', 'two']); + expect(calls).toStrictEqual(["one", "two"]) }) }) - - }) diff --git a/test/helpers/state_manager.spec.ts b/test/helpers/state_manager.spec.ts index d24c02b..0b49fa8 100644 --- a/test/helpers/state_manager.spec.ts +++ b/test/helpers/state_manager.spec.ts @@ -1,140 +1,134 @@ -import {InMemoryStateStore, LocalStorageStateStore} from "../../src/helpers"; +import { InMemoryStateStore, LocalStorageStateStore } from "../../src/helpers" -const store = new LocalStorageStateStore('test:') +const store = new LocalStorageStateStore("test:") const inMemory = new InMemoryStateStore() -describe('state manager', function () { - describe('localStorage', function () { - it('should set', function (done) { - const obj = { a: 1} - store.set('x', obj).then(()=>{ - expect(window.localStorage.getItem('test:x')) - .toBe(JSON.stringify(obj)) +describe("state manager", () => { + describe("localStorage", () => { + it("should set", (done) => { + const obj = { a: 1 } + store.set("x", obj).then(() => { + expect(window.localStorage.getItem("test:x")).toBe(JSON.stringify(obj)) done() }) - }); + }) - it('should get', function (done) { - store.get('notExisted').then((val)=>{ + it("should get", (done) => { + store.get("notExisted").then((val) => { expect(val).toBeNull() done() }) - }); - it('should get (2)', function (done) { - store.get('x').then((val)=>{ - const obj = { a: 1} + }) + it("should get (2)", (done) => { + store.get("x").then((val) => { + const obj = { a: 1 } expect(val).toStrictEqual(obj) done() }) - }); + }) - it('should delete', function (done) { - store.del('x').then(()=>{ - store.get('x').then(v => { + it("should delete", (done) => { + store.del("x").then(() => { + store.get("x").then((v) => { expect(v).toBeNull() done() }) }) - }); + }) - it('should clear all', function (done) { - const objects = Array(10).fill({x: 'x'}) - Promise.all(objects.map((obj, ind) => store.set(String(ind), obj))) - .then(() => { - store.clear().then(()=>{ - expect(window.localStorage.length).toBe(0) - done() - }) + it("should clear all", (done) => { + const objects = Array(10).fill({ x: "x" }) + Promise.all(objects.map((obj, ind) => store.set(String(ind), obj))).then(() => { + store.clear().then(() => { + expect(window.localStorage.length).toBe(0) + done() }) - }); + }) + }) - it('should clear expired', function (done) { + it("should clear expired", (done) => { const objects = [] - window.localStorage.setItem('shouldNotDelete', '{ "a": "b"}') + window.localStorage.setItem("shouldNotDelete", '{ "a": "b"}') for (let i = 1; i <= 10; i++) { objects.push({ created_at: i * 1000 }) } - Promise.all(objects.map((obj, ind) => store.set(String(ind), obj))) - .then(() => { - store.clear(7000).then(()=>{ - expect(window.localStorage.length).toBe(5) - for ( let i = 0; i < window.localStorage.length; i++ ){ - const key = window.localStorage.key( i ) - // @ts-ignore - const storedObj = JSON.parse(window.localStorage.getItem(key)) - if(storedObj.created_at){ - expect(storedObj.created_at).toBeGreaterThanOrEqual(7000) - } + Promise.all(objects.map((obj, ind) => store.set(String(ind), obj))).then(() => { + store.clear(7000).then(() => { + expect(window.localStorage.length).toBe(5) + for (let i = 0; i < window.localStorage.length; i++) { + const key = window.localStorage.key(i) + // @ts-ignore + const storedObj = JSON.parse(window.localStorage.getItem(key)) + if (storedObj.created_at) { + expect(storedObj.created_at).toBeGreaterThanOrEqual(7000) } - done() - }) + } + done() }) - }); + }) + }) }) - describe('inMemory', function () { - it('should set', function (done) { - const obj = { a: 1} - inMemory.set('x', obj).then(()=>{ - expect(inMemory.map.get('x')) - .toBe(obj) + describe("inMemory", () => { + it("should set", (done) => { + const obj = { a: 1 } + inMemory.set("x", obj).then(() => { + expect(inMemory.map.get("x")).toBe(obj) done() }) - }); + }) - it('should get', function (done) { - inMemory.get('notExisted').then((val)=>{ + it("should get", (done) => { + inMemory.get("notExisted").then((val) => { expect(val).toBeNull() done() }) - }); - it('should get (2)', function (done) { - inMemory.get('x').then((val)=>{ - const obj = { a: 1} + }) + it("should get (2)", (done) => { + inMemory.get("x").then((val) => { + const obj = { a: 1 } expect(val).toStrictEqual(obj) done() }) - }); + }) - it('should delete', function (done) { - inMemory.del('x').then(()=>{ - inMemory.get('x').then(v => { + it("should delete", (done) => { + inMemory.del("x").then(() => { + inMemory.get("x").then((v) => { expect(v).toBeNull() done() }) }) - }); + }) - it('should clear all', function (done) { - const objects = Array(10).fill({x: 'x'}) - Promise.all(objects.map((obj, ind) => inMemory.set(String(ind), obj))) - .then(() => { - inMemory.clear().then(()=>{ - expect(inMemory.map.size).toBe(0) - done() - }) + it("should clear all", (done) => { + const objects = Array(10).fill({ x: "x" }) + Promise.all(objects.map((obj, ind) => inMemory.set(String(ind), obj))).then(() => { + inMemory.clear().then(() => { + expect(inMemory.map.size).toBe(0) + done() }) - }); + }) + }) - it('should clear expired', function (done) { + it("should clear expired", (done) => { const objects = [] - inMemory.map.set('shouldNotDelete', '{ "a": "b"}') + inMemory.map.set("shouldNotDelete", '{ "a": "b"}') for (let i = 1; i <= 10; i++) { objects.push({ created_at: i * 1000 }) } - Promise.all(objects.map((obj, ind) => inMemory.set(String(ind), obj))) - .then(() => { - inMemory.clear(7000).then(()=>{ - expect(inMemory.map.size).toBe(5) - for (const key of inMemory.map.keys()) { - const storedObj = inMemory.map.get(key) - if(storedObj.created_at){ - expect(storedObj.created_at).toBeGreaterThanOrEqual(7000) - } + Promise.all(objects.map((obj, ind) => inMemory.set(String(ind), obj))).then(() => { + inMemory.clear(7000).then(() => { + expect(inMemory.map.size).toBe(5) + for (const key of inMemory.map.keys()) { + const storedObj = inMemory.map.get(key) + if (storedObj.created_at) { + expect(storedObj.created_at).toBeGreaterThanOrEqual(7000) } - done() - }) + } + done() }) - }); + }) + }) }) }) diff --git a/test/helpers/timer.spec.ts b/test/helpers/timer.spec.ts index b5cfcba..f5ba63c 100644 --- a/test/helpers/timer.spec.ts +++ b/test/helpers/timer.spec.ts @@ -1,14 +1,14 @@ -import {Timer} from "../../src/helpers/timer"; +import { Timer } from "../../src/helpers/timer" -describe("timer", function () { +describe("timer", () => { let now = Date.now() const nowFn = () => now - beforeEach(()=>{ - jest.useFakeTimers({legacyFakeTimers: true}); + beforeEach(() => { + jest.useFakeTimers({ legacyFakeTimers: true }) }) - afterEach(()=>{ + afterEach(() => { jest.clearAllTimers() jest.resetAllMocks() }) @@ -17,56 +17,54 @@ describe("timer", function () { jest.useRealTimers() }) - describe("[constructor]", function () { - - it("should work", function () { + describe("[constructor]", () => { + it("should work", () => { new Timer() - new Timer(()=> 1000) - }); + new Timer(() => 1000) + }) - it("should use 1 second if duration is too low", function () { - const setIntervalSpy = jest.spyOn(global, 'setInterval') + it("should use 1 second if duration is too low", () => { + const setIntervalSpy = jest.spyOn(global, "setInterval") const timer = new Timer() timer.start(-1, jest.fn()) expect(setIntervalSpy).toBeCalledWith(expect.any(Function), 1000) - }); + }) - it("should use duration", function () { - const setIntervalSpy = jest.spyOn(global, 'setInterval') + it("should use duration", () => { + const setIntervalSpy = jest.spyOn(global, "setInterval") const timer = new Timer() timer.start(4, jest.fn()) expect(setIntervalSpy).toBeCalledWith(expect.any(Function), 4000) - }); + }) - it("should stop previous timer if new time is not the same", function () { - const clearIntervalSpy = jest.spyOn(global, 'clearInterval') - const setIntervalMock = (setInterval as any as jest.Mock); - setIntervalMock.mockImplementation(() => Math.random()); + it("should stop previous timer if new time is not the same", () => { + const clearIntervalSpy = jest.spyOn(global, "clearInterval") + const setIntervalMock = setInterval as any as jest.Mock + setIntervalMock.mockImplementation(() => Math.random()) const timer = new Timer(nowFn) - const cb =jest.fn() + const cb = jest.fn() timer.start(4, cb) expect(clearIntervalSpy).not.toBeCalled() - now = now + 122; + now = now + 122 timer.start(4, cb) expect(clearIntervalSpy).toBeCalledTimes(1) - }); + }) - it("should not stop previous timer if new time is same", function () { - const clearIntervalSpy = jest.spyOn(global, 'clearInterval') + it("should not stop previous timer if new time is same", () => { + const clearIntervalSpy = jest.spyOn(global, "clearInterval") const timer = new Timer(nowFn) - const cb =jest.fn() + const cb = jest.fn() timer.start(10, cb) expect(clearIntervalSpy).not.toBeCalled() timer.start(10, cb) expect(clearIntervalSpy).not.toBeCalled() - }); - }); - - describe("callback", function () { + }) + }) - it("should fire when timer expires", function () { + describe("callback", () => { + it("should fire when timer expires", () => { const timer = new Timer(nowFn) const cb = jest.fn() timer.start(1, cb) @@ -74,10 +72,9 @@ describe("timer", function () { now += 1000 jest.advanceTimersByTime(1000) expect(cb).toBeCalledTimes(1) - }); + }) - - it("should fire if timer late", function () { + it("should fire if timer late", () => { const timer = new Timer(nowFn) const cb = jest.fn() timer.start(1, cb) @@ -85,10 +82,10 @@ describe("timer", function () { now += 10000 jest.advanceTimersByTime(10000) expect(cb).toBeCalledTimes(1) - }); + }) - it("should stop window timer", function () { - const clearIntervalSpy = jest.spyOn(global, 'clearInterval') + it("should stop window timer", () => { + const clearIntervalSpy = jest.spyOn(global, "clearInterval") const timer = new Timer(nowFn) const cb = jest.fn() @@ -98,13 +95,12 @@ describe("timer", function () { jest.advanceTimersByTime(10000) expect(cb).toBeCalledTimes(1) expect(clearIntervalSpy).toBeCalledTimes(1) - }); - }); - - describe("cancel", function () { + }) + }) - it("should stop timer", function () { - const clearIntervalSpy = jest.spyOn(global, 'clearInterval') + describe("cancel", () => { + it("should stop timer", () => { + const clearIntervalSpy = jest.spyOn(global, "clearInterval") const timer = new Timer(nowFn) const cb = jest.fn() timer.start(5, cb) @@ -113,15 +109,14 @@ describe("timer", function () { timer.stop() jest.advanceTimersByTime(10000) expect(cb).not.toBeCalled() - }); + }) - it("should do nothing if no existing timer", function () { - const clearIntervalSpy = jest.spyOn(global, 'clearInterval') + it("should do nothing if no existing timer", () => { + const clearIntervalSpy = jest.spyOn(global, "clearInterval") const timer = new Timer() timer.stop() expect(clearIntervalSpy).not.toBeCalled() - }); - }); - -}); + }) + }) +}) diff --git a/test/setup.tsx b/test/setup.tsx index 76860f1..5b23e18 100644 --- a/test/setup.tsx +++ b/test/setup.tsx @@ -1,12 +1,12 @@ -const webCrypt = require("@peculiar/webcrypto"); -const cryptModule = new webCrypt.Crypto(); +const webCrypt = require("@peculiar/webcrypto") +const cryptModule = new webCrypt.Crypto() global.self["crypto"] = window["crypto"] = cryptModule -Object.defineProperty(window, 'crypto', { - get(){ +Object.defineProperty(window, "crypto", { + get() { return cryptModule - } + }, }) -const x = require('util'); -global.self["TextEncoder"] = window["TextEncoder"] = x.TextEncoder; +const x = require("node:util") +global.self["TextEncoder"] = window["TextEncoder"] = x.TextEncoder diff --git a/test/utils/check_sesion_iframe.spec.ts b/test/utils/check_sesion_iframe.spec.ts index f6194de..88b2992 100644 --- a/test/utils/check_sesion_iframe.spec.ts +++ b/test/utils/check_sesion_iframe.spec.ts @@ -1,12 +1,11 @@ -import {createSessionCheckerFrame} from "../../src/utils"; +import { createSessionCheckerFrame } from "../../src/utils" -describe('checkSessionIframe', function (){ - it('should have start and stop methods', function () { +describe("checkSessionIframe", () => { + it("should have start and stop methods", () => { // @ts-expect-error - const checker = createSessionCheckerFrame({ url: 'http://test.url'}) - - expect(checker).toHaveProperty('start', expect.any(Function)) - expect(checker).toHaveProperty('stop', expect.any(Function)) - }); + const checker = createSessionCheckerFrame({ url: "http://test.url" }) + expect(checker).toHaveProperty("start", expect.any(Function)) + expect(checker).toHaveProperty("stop", expect.any(Function)) + }) }) diff --git a/test/utils/iframe.spec.ts b/test/utils/iframe.spec.ts index e178208..067f9f2 100644 --- a/test/utils/iframe.spec.ts +++ b/test/utils/iframe.spec.ts @@ -1,139 +1,133 @@ -import {createHiddenFrame, runIframe} from "../../src/utils"; -import {OIDCClientError} from "../../src"; +import { OIDCClientError } from "../../src" +import { createHiddenFrame, runIframe } from "../../src/utils" -describe('createHiddenIframe', () => { - it('should create hidden iframe', function () { +describe("createHiddenIframe", () => { + it("should create hidden iframe", () => { const iframe = createHiddenFrame() expect(iframe).toBeDefined() - expect(iframe.style.width).toBe('0px') - expect(iframe.style.height).toBe('0px') - expect(iframe.style.visibility).toBe('hidden') - expect(iframe.style.display).toBe('none') - }); - + expect(iframe.style.width).toBe("0px") + expect(iframe.style.height).toBe("0px") + expect(iframe.style.visibility).toBe("hidden") + expect(iframe.style.display).toBe("none") + }) }) -describe('runIframe', () => { +describe("runIframe", () => { const setup = (customMessage?: MessageEvent) => { const iframe = { setAttribute: jest.fn(), - style: { display: '' } - }; - const url = 'https://authorize.com'; - const origin = - (customMessage && customMessage.origin) || 'https://origin.com'; + style: { display: "" }, + } + const url = "https://authorize.com" + const origin = customMessage?.origin || "https://origin.com" window.addEventListener = jest.fn((message, callback) => { - expect(message).toBe('message'); - callback(customMessage); - }); - window.removeEventListener = jest.fn(); - window.document.createElement = jest.fn(type => { - expect(type).toBe('iframe'); - return iframe; - }); - window.document.body.contains = () => true; - window.document.body.appendChild = jest.fn(); - window.document.body.removeChild = jest.fn(); - return { iframe, url, origin }; - }; - it('handles iframe correctly', async () => { - const origin = 'https://origin.com'; + expect(message).toBe("message") + callback(customMessage) + }) + window.removeEventListener = jest.fn() + window.document.createElement = jest.fn((type) => { + expect(type).toBe("iframe") + return iframe + }) + window.document.body.contains = () => true + window.document.body.appendChild = jest.fn() + window.document.body.removeChild = jest.fn() + return { iframe, url, origin } + } + it("handles iframe correctly", async () => { + const origin = "https://origin.com" const message: MessageEvent = { origin, // @ts-ignore source: { close: jest.fn() }, data: { - type: 'authorization_response', - response: { id_token: 'id_token' } - } - }; - const { iframe, url } = setup(message); - jest.useFakeTimers(); - await runIframe(url, {eventOrigin: origin}); - jest.runAllTimers(); + type: "authorization_response", + response: { id_token: "id_token" }, + }, + } + const { iframe, url } = setup(message) + jest.useFakeTimers() + await runIframe(url, { eventOrigin: origin }) + jest.runAllTimers() // @ts-ignore - expect(message.source.close).toHaveBeenCalled(); - expect(window.document.body.appendChild).toHaveBeenCalledWith(iframe); - expect(window.document.body.removeChild).toHaveBeenCalledWith(iframe); - expect(iframe.setAttribute.mock.calls).toMatchObject([ - ['src', url] - ]); - expect(iframe.style.display).toBe('none'); - }); - describe('with invalid messages', () => { - [ - '', + expect(message.source.close).toHaveBeenCalled() + expect(window.document.body.appendChild).toHaveBeenCalledWith(iframe) + expect(window.document.body.removeChild).toHaveBeenCalledWith(iframe) + expect(iframe.setAttribute.mock.calls).toMatchObject([["src", url]]) + expect(iframe.style.display).toBe("none") + }) + describe("with invalid messages", () => { + ;[ + "", {}, - { origin: 'other-origin' }, - { data: 'test' }, - { data: { type: 'other-type' } } - ].forEach(m => { + { origin: "other-origin" }, + { data: "test" }, + { data: { type: "other-type" } }, + ].forEach((m) => { it(`ignores invalid messages: ${JSON.stringify(m)}`, async () => { - const { iframe, url, origin } = setup(m as any); - jest.useFakeTimers(); - const promise = runIframe(url, {eventOrigin: origin}); - jest.runAllTimers(); - await expect(promise).rejects.toThrow(OIDCClientError); - expect(window.document.body.removeChild).toHaveBeenCalledWith(iframe); - }); - }); - }); - it('returns authorization response message', async () => { - const origin = 'https://origin.com'; + const { iframe, url, origin } = setup(m as any) + jest.useFakeTimers() + const promise = runIframe(url, { eventOrigin: origin }) + jest.runAllTimers() + await expect(promise).rejects.toThrow(OIDCClientError) + expect(window.document.body.removeChild).toHaveBeenCalledWith(iframe) + }) + }) + }) + it("returns authorization response message", async () => { + const origin = "https://origin.com" const message: MessageEvent = { origin, // @ts-ignore source: { close: jest.fn() }, data: { - type: 'authorization_response', - response: { id_token: 'id_token' } - } - }; - const { iframe, url } = setup(message); - jest.useFakeTimers(); - await expect(runIframe(url, {eventOrigin: origin})).resolves.toMatchObject( - message.data - ); - jest.runAllTimers(); + type: "authorization_response", + response: { id_token: "id_token" }, + }, + } + const { iframe, url } = setup(message) + jest.useFakeTimers() + await expect(runIframe(url, { eventOrigin: origin })).resolves.toMatchObject(message.data) + jest.runAllTimers() // @ts-ignore - expect(message.source!.close).toHaveBeenCalled(); - expect(window.document.body.removeChild).toHaveBeenCalledWith(iframe); - }); + expect(message.source!.close).toHaveBeenCalled() + expect(window.document.body.removeChild).toHaveBeenCalledWith(iframe) + }) - it('returns authorization error message', async () => { - const origin = 'https://origin.com'; + it("returns authorization error message", async () => { + const origin = "https://origin.com" const message: MessageEvent = { origin, // @ts-ignore source: { close: jest.fn() }, data: { - type: 'authorization_response', + type: "authorization_response", response: { - error: 'error', - error_description: 'error_description' - } - } - }; + error: "error", + error_description: "error_description", + }, + }, + } - const { iframe, url } = setup(message); - jest.useFakeTimers(); - await expect(runIframe(url, {eventOrigin: origin})).rejects.toThrow(OIDCClientError); - jest.runAllTimers(); + const { iframe, url } = setup(message) + jest.useFakeTimers() + await expect(runIframe(url, { eventOrigin: origin })).rejects.toThrow(OIDCClientError) + jest.runAllTimers() // @ts-ignore - expect(message.source.close).toHaveBeenCalled(); - expect(window.document.body.removeChild).toHaveBeenCalledWith(iframe); - }); + expect(message.source.close).toHaveBeenCalled() + expect(window.document.body.removeChild).toHaveBeenCalledWith(iframe) + }) - it('times out after timeout', async () => { - const { iframe, url, origin } = setup('' as any); - const timeout = 10; - jest.useFakeTimers(); - const promise = runIframe(url, {eventOrigin: origin, timeout: timeout}); - jest.advanceTimersByTime(timeout* 1000); - await expect(promise).rejects.toThrow(OIDCClientError); - expect(window.document.body.removeChild).toHaveBeenCalledWith(iframe); - }); -}); + it("times out after timeout", async () => { + const { iframe, url, origin } = setup("" as any) + const timeout = 10 + jest.useFakeTimers() + const promise = runIframe(url, { eventOrigin: origin, timeout: timeout }) + jest.advanceTimersByTime(timeout * 1000) + await expect(promise).rejects.toThrow(OIDCClientError) + expect(window.document.body.removeChild).toHaveBeenCalledWith(iframe) + }) +}) diff --git a/test/utils/jose.spec.ts b/test/utils/jose.spec.ts index b0d7e52..831d26e 100644 --- a/test/utils/jose.spec.ts +++ b/test/utils/jose.spec.ts @@ -1,26 +1,32 @@ -import {deriveChallenge, generateRandom, parseJwt, validateIdToken, validateJwt} from "../../src/utils"; -import {InvalidIdTokenError, InvalidJWTError, OIDCClientError} from "../../src"; - -import {Algorithm, sign} from 'jsonwebtoken' -import * as fs from "fs"; - -const expectedIssuer = "https://localhost:44333/core"; -const expectedAudience = "js.tokenmanager"; -const notBefore = 1459129901; -const issuedAt = notBefore; -const expiresIn = 1459130201; -const clientId = 'cid'; +import { InvalidIdTokenError, InvalidJWTError, OIDCClientError } from "../../src" +import { + deriveChallenge, + generateRandom, + parseJwt, + validateIdToken, + validateJwt, +} from "../../src/utils" + +import * as fs from "node:fs" +import { type Algorithm, sign } from "jsonwebtoken" + +const expectedIssuer = "https://localhost:44333/core" +const expectedAudience = "js.tokenmanager" +const notBefore = 1459129901 +const issuedAt = notBefore +const expiresIn = 1459130201 +const clientId = "cid" const expectedNonce = "S1MIYRbKC33BDbyz" -const rsaKey = JSON.parse(fs.readFileSync(__dirname + '/rsa.pub.json').toString('utf-8')) -const expectedNow = (remove: number = 0) => (notBefore - remove)* 1000; +const rsaKey = JSON.parse(fs.readFileSync(`${__dirname}/rsa.pub.json`).toString("utf-8")) +const expectedNow = (remove = 0) => (notBefore - remove) * 1000 type createJWTOptions = { - issuer?: string; - audience?: string | string[]; - nbf?: number; - exp?: number; - iat?: number; - payload?: Record; + issuer?: string + audience?: string | string[] + nbf?: number + exp?: number + iat?: number + payload?: Record } const defaultJWTOps = { @@ -29,465 +35,436 @@ const defaultJWTOps = { nbf: notBefore, exp: expiresIn, iat: issuedAt, - payload: {} + payload: {}, } -let jwtFromRsa: string = createJWT({ payload: {nonce: expectedNonce} } ) - -let idToken: string = createJWT({ payload: {nonce: expectedNonce, sub: 'test'}}) - -function createJWT(opts: createJWTOptions = {}, algOpts: { key: Buffer | string, alg?: Algorithm, kid?: string} = { - key: fs.readFileSync(__dirname + '/rsa.pem'), - alg: 'RS256', - kid: 'wNksAM3jUffQgCSGMMEGGVeYHmdrKNsaEaWSQANKgSQ' -}){ - opts = Object.assign( {},defaultJWTOps, opts) - return sign({ - nbf: opts.nbf, - ...opts.exp && {exp: opts.exp}, - ...opts.iat && {iat: opts.iat}, - ...opts.payload && opts.payload - }, algOpts.key, { - noTimestamp: !opts.iat, - mutatePayload: true, - ...algOpts.kid && { keyid: algOpts.kid}, - ...algOpts.alg && { algorithm: algOpts.alg}, - ...opts.audience && { audience: opts.audience}, - ...opts.issuer && { issuer: opts.issuer}, - - } ); +const jwtFromRsa: string = createJWT({ payload: { nonce: expectedNonce } }) + +const idToken: string = createJWT({ payload: { nonce: expectedNonce, sub: "test" } }) + +function createJWT( + opts: createJWTOptions = {}, + algOpts: { key: Buffer | string; alg?: Algorithm; kid?: string } = { + key: fs.readFileSync(`${__dirname}/rsa.pem`), + alg: "RS256", + kid: "wNksAM3jUffQgCSGMMEGGVeYHmdrKNsaEaWSQANKgSQ", + }, +) { + opts = Object.assign({}, defaultJWTOps, opts) + return sign( + { + nbf: opts.nbf, + ...(opts.exp && { exp: opts.exp }), + ...(opts.iat && { iat: opts.iat }), + ...(opts.payload && opts.payload), + }, + algOpts.key, + { + noTimestamp: !opts.iat, + mutatePayload: true, + ...(algOpts.kid && { keyid: algOpts.kid }), + ...(algOpts.alg && { algorithm: algOpts.alg }), + ...(opts.audience && { audience: opts.audience }), + ...(opts.issuer && { issuer: opts.issuer }), + }, + ) } +describe("jose utils", () => { + it("should generate random string", () => { + const randoms = [...Array(100)].map((v) => generateRandom(12)) + expect(randoms.some((value, index) => randoms.indexOf(value) !== index)).toBeFalsy() + }) -describe('jose utils', function () { - - it('should generate random string', function () { - const randoms = [...Array(100)].map(v => generateRandom(12)) - expect( randoms.some((value, index) => randoms.indexOf(value) !== index)).toBeFalsy() - }); - - it('should fail if code length is not in accepted range', function (done) { - deriveChallenge(new Array(11).join('a')) - .then(done.bind(null, 'should fail')) - .catch( (e) => { + it("should fail if code length is not in accepted range", (done) => { + deriveChallenge(new Array(11).join("a")) + .then(done.bind(null, "should fail")) + .catch((e) => { expect(e.message).toBe(`Invalid code length: 10`) done() - }) - }); - - it('should consume generated random string', function (done) { + }) - deriveChallenge(new Array(12).join('test')) - .then(value => { + it("should consume generated random string", (done) => { + deriveChallenge(new Array(12).join("test")) + .then((value) => { expect(value).toBe("MM2_1QPyiAvVfPjvMOuJUXU7CbDFDeUZtDK74EbtMGw") done() - }).catch(done) - }); - describe("parseJwt", function () { - - it("should parse a jwt", function () { - - const result = parseJwt(jwtFromRsa); - expect(result).toHaveProperty('header'); - expect(result).toHaveProperty('payload'); + }) + .catch(done) + }) + describe("parseJwt", () => { + it("should parse a jwt", () => { + const result = parseJwt(jwtFromRsa) + expect(result).toHaveProperty("header") + expect(result).toHaveProperty("payload") expect(result.header).toMatchObject({ - "typ": "JWT", - "alg": "RS256", - "kid": "wNksAM3jUffQgCSGMMEGGVeYHmdrKNsaEaWSQANKgSQ" - }); + typ: "JWT", + alg: "RS256", + kid: "wNksAM3jUffQgCSGMMEGGVeYHmdrKNsaEaWSQANKgSQ", + }) expect(result.payload).toMatchObject({ - "iss": expectedIssuer, - "aud": expectedAudience, - "exp": expiresIn, - "nbf": notBefore, - "nonce": expectedNonce, - "iat": issuedAt, - }); - - }); - - it("should return undefined for an invalid jwt", async function () { + iss: expectedIssuer, + aud: expectedAudience, + exp: expiresIn, + nbf: notBefore, + nonce: expectedNonce, + iat: issuedAt, + }) + }) + it("should return undefined for an invalid jwt", async () => { expect(() => { parseJwt("junk") - }).toThrow(InvalidJWTError); - }); - - }); - - - describe("validateJwt", function () { - + }).toThrow(InvalidJWTError) + }) + }) - it('should fail for missing iss', function () { - try{ + describe("validateJwt", () => { + it("should fail for missing iss", () => { + try { validateJwt(createJWT({ issuer: undefined }), { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 0, - client_id: '' + client_id: "", }) - } catch(e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe('Issuer (iss) was not provided') + expect(e.message).toBe("Issuer (iss) was not provided") } - }); + }) - it("should not validate for invalid issuer", function () { + it("should not validate for invalid issuer", () => { try { - validateJwt(jwtFromRsa, { + validateJwt(jwtFromRsa, { issuer: "invalid iss", audience: expectedAudience, clockSkew: 0, currentTimeInMillis: expectedNow, - client_id: '' + client_id: "", }) - }catch (e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe(`Invalid Issuer (iss) in token: ${expectedIssuer}`); + expect(e.message).toBe(`Invalid Issuer (iss) in token: ${expectedIssuer}`) } - }); + }) - it('should fail for missing aud', function () { - try{ + it("should fail for missing aud", () => { + try { validateJwt(createJWT({ audience: undefined }), { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 0, - client_id: '' + client_id: "", }) - }catch (e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe('Audience (aud) was not provided') + expect(e.message).toBe("Audience (aud) was not provided") } + }) - }); - - it('should allow array aud', function () { - expect(validateJwt(createJWT({ audience: [ expectedAudience ] }), { - issuer: expectedIssuer, - audience: expectedAudience, - clockSkew: 0, - currentTimeInMillis: expectedNow, - client_id: '' - })).toBeDefined() - }); - - it('should allow client_id to be aud if aud not provided', function () { - expect(validateJwt(createJWT({ audience: clientId }), { - issuer: expectedIssuer, - audience: undefined, - clockSkew: 0, - currentTimeInMillis: expectedNow, - client_id: clientId - })).toBeDefined() - }); - + it("should allow array aud", () => { + expect( + validateJwt(createJWT({ audience: [expectedAudience] }), { + issuer: expectedIssuer, + audience: expectedAudience, + clockSkew: 0, + currentTimeInMillis: expectedNow, + client_id: "", + }), + ).toBeDefined() + }) - it("should not validate for invalid audience", function () { - try{ + it("should allow client_id to be aud if aud not provided", () => { + expect( + validateJwt(createJWT({ audience: clientId }), { + issuer: expectedIssuer, + audience: undefined, + clockSkew: 0, + currentTimeInMillis: expectedNow, + client_id: clientId, + }), + ).toBeDefined() + }) - validateJwt(jwtFromRsa,{ + it("should not validate for invalid audience", () => { + try { + validateJwt(jwtFromRsa, { issuer: expectedIssuer, audience: "invalid aud", clockSkew: 0, currentTimeInMillis: expectedNow, - client_id: '' + client_id: "", }) - } catch(e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe(`Invalid Audience (aud) in token: ${expectedAudience}`); + expect(e.message).toBe(`Invalid Audience (aud) in token: ${expectedAudience}`) } - }); - - it('should fail for wrong azp', function () { + }) + it("should fail for wrong azp", () => { try { - validateJwt(createJWT({ payload: { azp: 'wrong_azp'}}),{ + validateJwt(createJWT({ payload: { azp: "wrong_azp" } }), { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 0, currentTimeInMillis: expectedNow, - client_id: '' + client_id: "", }) - }catch (e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe(`Invalid Authorized Party (azp) in token: wrong_azp`); + expect(e.message).toBe(`Invalid Authorized Party (azp) in token: wrong_azp`) } - }); + }) - - it("should not validate before nbf", function () { + it("should not validate before nbf", () => { try { - validateJwt(createJWT({ nbf: notBefore + 10 } ), { + validateJwt(createJWT({ nbf: notBefore + 10 }), { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 0, currentTimeInMillis: expectedNow, - client_id: '' + client_id: "", }) - }catch (e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe(`Not Before time (nbf) is in the future: ${ notBefore + 10 }`) + expect(e.message).toBe(`Not Before time (nbf) is in the future: ${notBefore + 10}`) } + }) - }); - - it("should allow nbf within clock skew", function () { - + it("should allow nbf within clock skew", () => { const p1 = validateJwt(jwtFromRsa, { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 10, currentTimeInMillis: expectedNow.bind(null, 1), - client_id: '' - }); - const p2 = validateJwt(jwtFromRsa, { + client_id: "", + }) + const p2 = validateJwt(jwtFromRsa, { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 10, currentTimeInMillis: expectedNow.bind(null, 10), - client_id: '' - }); + client_id: "", + }) expect(p1).toBeDefined() expect(p2).toBeDefined() - }); - - it("should not allow nbf outside clock skew", function () { + }) + it("should not allow nbf outside clock skew", () => { try { validateJwt(jwtFromRsa, { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 10, currentTimeInMillis: expectedNow.bind(null, 11), - client_id: '' + client_id: "", }) - }catch (e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe(`Issued At (iat) is in the future: ${issuedAt}`); + expect(e.message).toBe(`Issued At (iat) is in the future: ${issuedAt}`) } + }) - }); - - it('should fail for missing iat', function () { + it("should fail for missing iat", () => { try { validateJwt(createJWT({ iat: undefined }), { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 0, currentTimeInMillis: expectedNow, - client_id: '' + client_id: "", }) - }catch (e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe('Issued At (iat) was not provided') + expect(e.message).toBe("Issued At (iat) was not provided") } - }); + }) - it("should not validate before iat", function () { + it("should not validate before iat", () => { try { - - validateJwt(jwtFromRsa, { + validateJwt(jwtFromRsa, { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 10, currentTimeInMillis: () => issuedAt - 1, - client_id: '' + client_id: "", }) - }catch (e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe(`Issued At (iat) is in the future: ${issuedAt}`); + expect(e.message).toBe(`Issued At (iat) is in the future: ${issuedAt}`) } - }); - - it("should allow iat within clock skew", function () { + }) + it("should allow iat within clock skew", () => { const p1 = validateJwt(jwtFromRsa, { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 10, currentTimeInMillis: () => (issuedAt - 1) * 1000, - client_id: '' - }); + client_id: "", + }) const p2 = validateJwt(jwtFromRsa, { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 10, currentTimeInMillis: () => (issuedAt - 10) * 1000, - client_id: '' - }); + client_id: "", + }) expect(p1).toBeDefined() expect(p2).toBeDefined() - }); - - it("should not allow iat outside clock skew", function () { + }) + it("should not allow iat outside clock skew", () => { try { validateJwt(jwtFromRsa, { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 10, currentTimeInMillis: () => (issuedAt - 11) * 1000, - client_id: '' + client_id: "", }) - }catch (e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe(`Issued At (iat) is in the future: ${issuedAt}`); + expect(e.message).toBe(`Issued At (iat) is in the future: ${issuedAt}`) } - }); + }) - it('should fail for missing exp', function () { + it("should fail for missing exp", () => { try { validateJwt(createJWT({ exp: undefined }), { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 0, currentTimeInMillis: expectedNow, - client_id: '' + client_id: "", }) - }catch (e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe('Expiration Time (exp) was not provided') + expect(e.message).toBe("Expiration Time (exp) was not provided") } - }); - - it("should not validate after exp", function () { + }) + it("should not validate after exp", () => { try { - validateJwt(jwtFromRsa, { + validateJwt(jwtFromRsa, { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 0, - currentTimeInMillis: () => (expiresIn + 1)* 1000, - client_id: '' + currentTimeInMillis: () => (expiresIn + 1) * 1000, + client_id: "", }) - }catch (e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe(`Expiration Time (exp) is in the past: ${expiresIn}`); + expect(e.message).toBe(`Expiration Time (exp) is in the past: ${expiresIn}`) } + }) - }); - - it("should allow exp within clock skew", function () { - + it("should allow exp within clock skew", () => { const p1 = validateJwt(jwtFromRsa, { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 10, - currentTimeInMillis: () => (expiresIn + 1)*1000, - client_id: '' - }); - const p2 = validateJwt(jwtFromRsa, { + currentTimeInMillis: () => (expiresIn + 1) * 1000, + client_id: "", + }) + const p2 = validateJwt(jwtFromRsa, { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 10, - currentTimeInMillis: () => (expiresIn + 10)*1000, - client_id: '' - }); + currentTimeInMillis: () => (expiresIn + 10) * 1000, + client_id: "", + }) expect(p1).toBeDefined() expect(p2).toBeDefined() - }); - - it("should not allow exp outside clock skew", function () { + }) + it("should not allow exp outside clock skew", () => { try { - validateJwt(jwtFromRsa, { issuer: expectedIssuer, audience: expectedAudience, clockSkew: 10, currentTimeInMillis: () => (expiresIn + 11) * 1000, - client_id: '' + client_id: "", }) - }catch (e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidJWTError) - expect(e.message).toBe(`Expiration Time (exp) is in the past: ${expiresIn}`); + expect(e.message).toBe(`Expiration Time (exp) is in the past: ${expiresIn}`) } + }) + }) - - }); - - }); - - describe("validateIdToken", function () { - - it('should fail if nonce is not provided', function () { - try{ + describe("validateIdToken", () => { + it("should fail if nonce is not provided", () => { + try { // @ts-expect-error - validateIdToken('token', null, {} ) - }catch (e) { + validateIdToken("token", null, {}) + } catch (e) { expect(e).toBeInstanceOf(OIDCClientError) - expect(e.message).toBe('No nonce on state') + expect(e.message).toBe("No nonce on state") } - }); + }) - it('should fail with missing parts of id_token', function () { - const jwtWithoutPayload = 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InIxTGtiQm8zOTI1UmIyWkZGckt5VTNNVmV4OVQyODE3S3gwdmJpNmlfS2MifQ..Yg_fGFInWZLGRA-Bjz9rThskwLhVScUhYnolZF6eOScubh0hZ02ewE8iC0-cnT6ZBFe4M7DWPimXifrS2uo__N5JJzVUOyE0nwVlDYJh2cqtAUGZ2lCaz4AXftdZ4FkQeugeGa9wiYnyZhFJKYDpqEPl4Ignv6ZbwSioLNKAFp8Q5P2WZOd1CTxhKjQ-Ctc3qHtD1nzsKwlR4sBKT6GXVC_SHa_tUnBJ4b-r4Xyf0TTzghKeE2eJnKCi3nduBV7ZybRCPBYQ2rZWI8GcZgpGCDOpnMP77XPHsc5bncB9Dh7lhwRje8hFtJ0SWHTOaSLF34NN1sa-S6PkXdCSnFDWog' + it("should fail with missing parts of id_token", () => { + const jwtWithoutPayload = + "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InIxTGtiQm8zOTI1UmIyWkZGckt5VTNNVmV4OVQyODE3S3gwdmJpNmlfS2MifQ..Yg_fGFInWZLGRA-Bjz9rThskwLhVScUhYnolZF6eOScubh0hZ02ewE8iC0-cnT6ZBFe4M7DWPimXifrS2uo__N5JJzVUOyE0nwVlDYJh2cqtAUGZ2lCaz4AXftdZ4FkQeugeGa9wiYnyZhFJKYDpqEPl4Ignv6ZbwSioLNKAFp8Q5P2WZOd1CTxhKjQ-Ctc3qHtD1nzsKwlR4sBKT6GXVC_SHa_tUnBJ4b-r4Xyf0TTzghKeE2eJnKCi3nduBV7ZybRCPBYQ2rZWI8GcZgpGCDOpnMP77XPHsc5bncB9Dh7lhwRje8hFtJ0SWHTOaSLF34NN1sa-S6PkXdCSnFDWog" try { //@ts-expect-error - validateIdToken(jwtWithoutPayload, 'nonce', { } ) - - }catch (e) { + validateIdToken(jwtWithoutPayload, "nonce", {}) + } catch (e) { expect(e).toBeInstanceOf(InvalidIdTokenError) - expect(e.message).toBe('Failed to parse jwt') + expect(e.message).toBe("Failed to parse jwt") } - }); + }) - it('should fail with wrong id_token', function () { + it("should fail with wrong id_token", () => { try { //@ts-expect-error - validateIdToken('somestring', 'nonce', { } ) - }catch (e) { + validateIdToken("somestring", "nonce", {}) + } catch (e) { expect(e).toBeInstanceOf(InvalidIdTokenError) - expect(e.message).toBe('Failed to parse jwt') + expect(e.message).toBe("Failed to parse jwt") } - }); + }) - it('should fail with invalid nonce', function () { + it("should fail with invalid nonce", () => { try { //@ts-expect-error - validateIdToken(idToken, 'wrongNone', { } ) - - }catch (e) { + validateIdToken(idToken, "wrongNone", {}) + } catch (e) { expect(e).toBeInstanceOf(InvalidIdTokenError) expect(e.message).toBe(`Invalid nonce in id_token: ${expectedNonce}`) } - }); - + }) - it('should fail with missing sub', function () { + it("should fail with missing sub", () => { try { - validateIdToken(createJWT({ payload: {nonce: expectedNonce}}), - expectedNonce, { - issuer: expectedIssuer, - audience: expectedAudience, - currentTimeInMillis: expectedNow, - client_id: expectedAudience, - clockSkew: 0, + validateIdToken(createJWT({ payload: { nonce: expectedNonce } }), expectedNonce, { + issuer: expectedIssuer, + audience: expectedAudience, + currentTimeInMillis: expectedNow, + client_id: expectedAudience, + clockSkew: 0, }) - - }catch (e) { + } catch (e) { expect(e).toBeInstanceOf(InvalidIdTokenError) expect(e.message).toBe(`No Subject (sub) present in id_token`) - } - }); + }) - it('should pass with correct id_token', function () { + it("should pass with correct id_token", () => { expect( - validateIdToken(idToken, - expectedNonce, { - issuer: expectedIssuer, - client_id: expectedAudience, - audience: expectedAudience, - currentTimeInMillis: expectedNow, - clockSkew: 0, - }) + validateIdToken(idToken, expectedNonce, { + issuer: expectedIssuer, + client_id: expectedAudience, + audience: expectedAudience, + currentTimeInMillis: expectedNow, + clockSkew: 0, + }), ).toBeDefined() - - }); + }) }) -}); +}) diff --git a/test/utils/popup.spec.ts b/test/utils/popup.spec.ts index a4aa079..4cb404a 100644 --- a/test/utils/popup.spec.ts +++ b/test/utils/popup.spec.ts @@ -1,99 +1,93 @@ -import {runPopup} from "../../src/utils/popup"; -import {OIDCClientError} from "../../src"; +import { OIDCClientError } from "../../src" +import { runPopup } from "../../src/utils/popup" -describe('runPopup', () => { +describe("runPopup", () => { const TIMEOUT_ERROR = { - error: 'timeout', - error_description: 'Timeout', - message: 'Timeout' - }; + error: "timeout", + error_description: "Timeout", + message: "Timeout", + } - const url = 'https://authorize.com'; + const url = "https://authorize.com" const setup = (customMessage: any) => { const popup = { location: { href: url }, - close: jest.fn() - }; + close: jest.fn(), + } window.addEventListener = jest.fn((message, callback) => { - expect(message).toBe('message'); - callback(customMessage); - }); + expect(message).toBe("message") + callback(customMessage) + }) - return { popup, url }; - }; - - describe('with invalid messages', () => { + return { popup, url } + } + describe("with invalid messages", () => { afterEach(() => { jest.clearAllTimers() - jest.useRealTimers(); - }); - ['', {}, { data: 'test' }, { data: { type: 'other-type' } }].forEach( - m => { - - it(`ignores invalid messages: ${JSON.stringify(m)}`, async () => { - const { popup, url } = setup(m); - /** - * We need to run the timers after we start `runPopup` to simulate - * the window event listener, but we also need to use `jest.useFakeTimers` - * to trigger the timeout. That's why we're using a real `setTimeout`, - * then using fake timers then rolling back to real timers - */ - setTimeout(() => { - jest.runOnlyPendingTimers(); - }, 10); - jest.useFakeTimers(); - // @ts-ignore - await expect(runPopup(url, { popup })).rejects.toThrow(OIDCClientError); - }); - } - ); - }); - - it('returns authorization response message', async () => { + jest.useRealTimers() + }) + ;["", {}, { data: "test" }, { data: { type: "other-type" } }].forEach((m) => { + it(`ignores invalid messages: ${JSON.stringify(m)}`, async () => { + const { popup, url } = setup(m) + /** + * We need to run the timers after we start `runPopup` to simulate + * the window event listener, but we also need to use `jest.useFakeTimers` + * to trigger the timeout. That's why we're using a real `setTimeout`, + * then using fake timers then rolling back to real timers + */ + setTimeout(() => { + jest.runOnlyPendingTimers() + }, 10) + jest.useFakeTimers() + // @ts-ignore + await expect(runPopup(url, { popup })).rejects.toThrow(OIDCClientError) + }) + }) + }) + + it("returns authorization response message", async () => { const message = { data: { - type: 'authorization_response', - response: { id_token: 'id_token' } - } - }; + type: "authorization_response", + response: { id_token: "id_token" }, + }, + } - const { popup, url } = setup(message); + const { popup, url } = setup(message) // @ts-ignore - await expect(runPopup(url, { popup })).resolves.toMatchObject( - message.data - ); + await expect(runPopup(url, { popup })).resolves.toMatchObject(message.data) - expect(popup.location.href).toBe(url); - expect(popup.close).toHaveBeenCalled(); - }); + expect(popup.location.href).toBe(url) + expect(popup.close).toHaveBeenCalled() + }) - it('returns authorization error message', async () => { + it("returns authorization error message", async () => { const message = { data: { - type: 'authorization_response', + type: "authorization_response", response: { - error: 'error', - error_description: 'error_description' - } - } - }; + error: "error", + error_description: "error_description", + }, + }, + } - const { popup, url } = setup(message); + const { popup, url } = setup(message) // @ts-ignore - await expect(runPopup(url, { popup })).rejects.toThrow(OIDCClientError); + await expect(runPopup(url, { popup })).rejects.toThrow(OIDCClientError) - expect(popup.location.href).toBe(url); - expect(popup.close).toHaveBeenCalled(); - }); + expect(popup.location.href).toBe(url) + expect(popup.close).toHaveBeenCalled() + }) - it('times out after config.timeout', async () => { - const { popup, url } = setup(''); - const seconds = 10; + it("times out after config.timeout", async () => { + const { popup, url } = setup("") + const seconds = 10 /** * We need to run the timers after we start `runPopup`, but we also @@ -102,23 +96,23 @@ describe('runPopup', () => { * then rolling back to real timers */ setTimeout(() => { - jest.advanceTimersByTime(seconds * 1000); - }, 10); + jest.advanceTimersByTime(seconds * 1000) + }, 10) - jest.useFakeTimers(); + jest.useFakeTimers() await expect( runPopup(url, { timeout: seconds, // @ts-ignore - popup - }) - ).rejects.toThrow(OIDCClientError); + popup, + }), + ).rejects.toThrow(OIDCClientError) - jest.useRealTimers(); - }); - it('times out after DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS if config is not defined', async () => { - const { popup, url } = setup(''); + jest.useRealTimers() + }) + it("times out after DEFAULT_AUTHORIZE_TIMEOUT_IN_SECONDS if config is not defined", async () => { + const { popup, url } = setup("") /** * We need to run the timers after we start `runPopup`, but we also @@ -127,37 +121,35 @@ describe('runPopup', () => { * then rolling back to real timers */ setTimeout(() => { - jest.advanceTimersByTime(60 * 1000); - }, 10); + jest.advanceTimersByTime(60 * 1000) + }, 10) - jest.useFakeTimers(); + jest.useFakeTimers() // @ts-ignore - await expect(runPopup(url, { popup })).rejects.toThrow(OIDCClientError); + await expect(runPopup(url, { popup })).rejects.toThrow(OIDCClientError) - jest.useRealTimers(); - }); + jest.useRealTimers() + }) - it('creates and uses a popup window if none was given', async () => { + it("creates and uses a popup window if none was given", async () => { const message = { data: { - type: 'authorization_response', - response: { id_token: 'id_token' } - } - }; + type: "authorization_response", + response: { id_token: "id_token" }, + }, + } - const { popup, url } = setup(message); - const oldOpenFn = window.open; + const { popup, url } = setup(message) + const oldOpenFn = window.open - window.open = jest.fn(() => popup); + window.open = jest.fn(() => popup) - await expect(runPopup(url, {})).resolves.toMatchObject( - message.data - ); + await expect(runPopup(url, {})).resolves.toMatchObject(message.data) - expect(popup.location.href).toBe(url); - expect(popup.close).toHaveBeenCalled(); + expect(popup.location.href).toBe(url) + expect(popup.close).toHaveBeenCalled() - window.open = oldOpenFn; - }); -}); + window.open = oldOpenFn + }) +}) diff --git a/test/utils/request.spec.ts b/test/utils/request.spec.ts index e14816a..4fd3859 100644 --- a/test/utils/request.spec.ts +++ b/test/utils/request.spec.ts @@ -1,102 +1,103 @@ -window.fetch = jest.fn().mockReturnValue(new Promise(resolve => { - resolve({ - json: () => ({}) - }) -})) +window.fetch = jest.fn().mockReturnValue( + new Promise((resolve) => { + resolve({ + json: () => ({}), + }) + }), +) -import {buildEncodedQueryString, request, RequestOptions} from "../../src/utils"; +import { type RequestOptions, buildEncodedQueryString, request } from "../../src/utils" // @ts-ignore -const mockFetch = fetch -describe('request', function () { +const mockFetch = fetch +describe("request", () => { beforeEach(() => { mockFetch.mockClear() }) - it('should add url encoded content type with requestType=form', async function () { + it("should add url encoded content type with requestType=form", async () => { const opts: RequestOptions = { - url: 'http://some.url', - requestType: 'form', - method: 'POST' + url: "http://some.url", + requestType: "form", + method: "POST", } await request(opts) - expect(mockFetch).toBeCalledWith(opts.url,{ + expect(mockFetch).toBeCalledWith(opts.url, { method: opts.method, body: null, - headers: {"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"} + headers: { "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" }, }) - }); + }) - it('should encode body with requestType=form', async function () { + it("should encode body with requestType=form", async () => { const opts: RequestOptions = { - url: 'http://some.url', - requestType: 'form', - method: 'POST', + url: "http://some.url", + requestType: "form", + method: "POST", body: { a: 1, - b: 'hello world' - } + b: "hello world", + }, } await request(opts) - expect(mockFetch).toBeCalledWith(opts.url,{ + expect(mockFetch).toBeCalledWith(opts.url, { method: opts.method, body: buildEncodedQueryString(opts.body, false), - headers: {"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"} + headers: { "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" }, }) - }); + }) - it('should add json content type with requestType=json', async function () { + it("should add json content type with requestType=json", async () => { const opts: RequestOptions = { - url: 'http://some.url', - requestType: 'json', - method: 'POST' + url: "http://some.url", + requestType: "json", + method: "POST", } await request(opts) - expect(mockFetch).toBeCalledWith(opts.url,{ + expect(mockFetch).toBeCalledWith(opts.url, { method: opts.method, body: null, - headers: {"Content-Type": "application/json;charset=UTF-8"} + headers: { "Content-Type": "application/json;charset=UTF-8" }, }) - }); + }) - it('should stringify body with requestType=json', async function () { + it("should stringify body with requestType=json", async () => { const opts: RequestOptions = { - url: 'http://some.url', - requestType: 'json', - method: 'POST', + url: "http://some.url", + requestType: "json", + method: "POST", body: { - a: '1', - b: '2' - } + a: "1", + b: "2", + }, } await request(opts) - expect(mockFetch).toBeCalledWith(opts.url,{ + expect(mockFetch).toBeCalledWith(opts.url, { method: opts.method, body: JSON.stringify(opts.body), - headers: {"Content-Type": "application/json;charset=UTF-8"} + headers: { "Content-Type": "application/json;charset=UTF-8" }, }) - }); + }) - it('should allow overriding headers', async function () { + it("should allow overriding headers", async () => { const opts: RequestOptions = { - url: 'http://some.url', - requestType: 'json', - method: 'POST', + url: "http://some.url", + requestType: "json", + method: "POST", headers: { - 'X-Test': 'test' - } + "X-Test": "test", + }, } await request(opts) - expect(mockFetch).toBeCalledWith(opts.url,{ + expect(mockFetch).toBeCalledWith(opts.url, { method: opts.method, body: null, - headers: {"Content-Type": "application/json;charset=UTF-8", 'X-Test': 'test'} + headers: { "Content-Type": "application/json;charset=UTF-8", "X-Test": "test" }, }) - }); - + }) }) diff --git a/test/utils/url.spec.ts b/test/utils/url.spec.ts index 88af536..2a3bb6f 100644 --- a/test/utils/url.spec.ts +++ b/test/utils/url.spec.ts @@ -1,104 +1,101 @@ -import {buildEncodedQueryString, parseQueryUrl} from "../../src/utils"; +import { buildEncodedQueryString, parseQueryUrl } from "../../src/utils" -describe('url util', function () { - describe('build encoded query string', function () { - - it('should encode object', function () { +describe("url util", () => { + describe("build encoded query string", () => { + it("should encode object", () => { const obj = { a: 1, - b: "str" + b: "str", } expect(buildEncodedQueryString(obj)).toEqual("?a=1&b=str") - }); + }) - it('should encode object (2)', function () { + it("should encode object (2)", () => { expect(buildEncodedQueryString()).toEqual("") - }); + }) - it('should ignore undefined values', function () { + it("should ignore undefined values", () => { const obj = { a: 1, - b: undefined + b: undefined, } expect(buildEncodedQueryString(obj)).toEqual("?a=1") - }); + }) - it('should not include query mark if not appendable', function () { + it("should not include query mark if not appendable", () => { const obj = { a: 1, - b: "str" + b: "str", } expect(buildEncodedQueryString(obj, false)).toEqual("a=1&b=str") - }); + }) - it('should only include own properties', function () { + it("should only include own properties", () => { const obj = { a: 1, - b: "str" + b: "str", } // @ts-ignore - obj.__proto__.c = 'something' + obj.__proto__.c = "something" expect(buildEncodedQueryString(obj)).toEqual("?a=1&b=str") - }); + }) - it('should encode params', function () { + it("should encode params", () => { const obj = { - a: 'hello world' + a: "hello world", } - expect(buildEncodedQueryString(obj)).toEqual('?a=hello%20world') - }); + expect(buildEncodedQueryString(obj)).toEqual("?a=hello%20world") + }) - it('should allow nested objects', function () { + it("should allow nested objects", () => { const obj = { a: { - b: '1', + b: "1", c: { - d: 2 - } - } + d: 2, + }, + }, } - expect(buildEncodedQueryString(obj)).toEqual('?a=%7B%22b%22%3A%221%22%2C%22c%22%3A%7B%22d%22%3A2%7D%7D') - }); - + expect(buildEncodedQueryString(obj)).toEqual( + "?a=%7B%22b%22%3A%221%22%2C%22c%22%3A%7B%22d%22%3A2%7D%7D", + ) + }) }) - describe('parse url query', function () { - - it('should parse starting with question mark', function () { - const url = '?a=1&b=2&c=test'; + describe("parse url query", () => { + it("should parse starting with question mark", () => { + const url = "?a=1&b=2&c=test" expect(parseQueryUrl(url)).toMatchObject({ a: "1", b: "2", - c: "test" + c: "test", }) - }); + }) - it('should parse fragment query ', function () { - const url = '#a=1&b=2&c=test'; + it("should parse fragment query ", () => { + const url = "#a=1&b=2&c=test" expect(parseQueryUrl(url)).toMatchObject({ a: "1", b: "2", - c: "test" + c: "test", }) - }); + }) - it('should parse url with empty params ', function () { - const url = '?a=&b=2&c=test'; + it("should parse url with empty params ", () => { + const url = "?a=&b=2&c=test" expect(parseQueryUrl(url)).toMatchObject({ a: "", b: "2", - c: "test" + c: "test", }) - }); + }) - it('should decode encoded params', function () { - const url = '?a=hello%20world' + it("should decode encoded params", () => { + const url = "?a=hello%20world" expect(parseQueryUrl(url)).toMatchObject({ - a: 'hello world' + a: "hello world", }) - }); - + }) }) - -}); +}) diff --git a/tsconfig-doc.json b/tsconfig-doc.json index 6909809..5a2036b 100644 --- a/tsconfig-doc.json +++ b/tsconfig-doc.json @@ -14,16 +14,14 @@ "strict": true, "useUnknownInCatchVariables": false, "removeComments": false, - "noImplicitAny": false, + "noImplicitAny": false }, "typedocOptions": { "out": "./docs", "name": "PAOIDCClient", "readme": "none", "categorizeByGroup": false, - "entryPoints": [ - "src/index.ts" - ], + "entryPoints": ["src/index.ts"], "hideGenerator": true, "excludeProtected": true, "excludePrivate": true diff --git a/tsconfig.json b/tsconfig.json index f661091..9f530a7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,7 +14,5 @@ "useUnknownInCatchVariables": false, "removeComments": false }, - "include": [ - "src" - ] + "include": ["src"] }