@descope/web-js-sdk 1.50.0 → 1.50.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.22.4_tslib@2.8.1_typescript@5.4.5/node_modules/tslib/tslib.es6.js","../../../../node_modules/.pnpm/jwt-decode@4.0.0/node_modules/jwt-decode/build/esm/index.js","../src/constants.ts","../src/enhancers/helpers/index.ts","../../core-js-sdk/dist/index.esm.js","../src/enhancers/helpers/logger.ts","../src/enhancers/withAutoRefresh/helpers.ts","../../../../node_modules/.pnpm/js-cookie@3.0.5/node_modules/js-cookie/dist/js.cookie.mjs","../src/enhancers/withPersistTokens/constants.ts","../src/enhancers/withPersistTokens/helpers.ts","../src/enhancers/withFingerprint/constants.ts","../../../../node_modules/.pnpm/@fingerprintjs+fingerprintjs-pro@3.11.6/node_modules/@fingerprintjs/fingerprintjs-pro/dist/fp.esm.min.js","../src/enhancers/withFingerprint/helpers.ts","../src/enhancers/withFingerprint/index.ts","../src/enhancers/withFlowNonce/constants.ts","../src/enhancers/withFlowNonce/helpers.ts","../src/enhancers/withLastLoggedInUser/constants.ts","../src/enhancers/withLastLoggedInUser/helpers.ts","../src/enhancers/withLastLoggedInUser/index.ts","../src/enhancers/withLoggedInIndicator/constants.ts","../src/enhancers/withLoggedInIndicator/index.ts","../src/enhancers/withNotifications/helpers.ts","../src/enhancers/withNotifications/index.ts","../src/enhancers/withPersistTokens/index.ts","../src/sdk/webauthn.ts","../src/apiPaths.ts","../src/sdk/fedcm.ts","../src/sdk/flow.ts","../src/sdk/oidc/index.ts","../src/sdk/oidc/helpers.ts","../src/index.ts","../src/enhancers/helpers/compose.ts","../src/enhancers/withCustomStorage.ts","../src/enhancers/withAnalytics.ts","../src/enhancers/withFlowNonce/index.ts","../src/enhancers/withAutoRefresh/index.ts","../src/sdk/index.ts","../src/enhancers/withLoggedInIndicator/helpers.ts","../src/index.umd.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","export class InvalidTokenError extends Error {\n}\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n }));\n}\nfunction base64UrlDecode(str) {\n let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"base64 string is not of the correct length\");\n }\n try {\n return b64DecodeUnicode(output);\n }\n catch (err) {\n return atob(output);\n }\n}\nexport function jwtDecode(token, options) {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n }\n options || (options = {});\n const pos = options.header === true ? 0 : 1;\n const part = token.split(\".\")[pos];\n if (typeof part !== \"string\") {\n throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n }\n let decoded;\n try {\n decoded = base64UrlDecode(part);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n }\n try {\n return JSON.parse(decoded);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n }\n}\n","const OIDC_CLIENT_TS_VERSION = '3.2.0';\n\n// This sdk can be used in SSR apps\nexport const IS_BROWSER = typeof window !== 'undefined';\n\n// Maximum timeout value for setTimeout\n// For more information, refer to https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value\nexport const MAX_TIMEOUT = Math.pow(2, 31) - 1;\n\n// The amount of time (ms) to trigger the refresh before session expires\nexport const REFRESH_THRESHOLD = 20 * 1000; // 20 sec\n\nexport const OIDC_CLIENT_TS_DESCOPE_CDN_URL = `https://descopecdn.com/npm/oidc-client-ts@${OIDC_CLIENT_TS_VERSION}/dist/browser/oidc-client-ts.min.js`;\nexport const OIDC_CLIENT_TS_JSDELIVR_CDN_URL = `https://cdn.jsdelivr.net/npm/oidc-client-ts@${OIDC_CLIENT_TS_VERSION}/dist/browser/oidc-client-ts.min.js`;\n\nexport const OIDC_LOGOUT_ERROR_CODE = 'J161000';\nexport const OIDC_REFRESH_ERROR_CODE = 'J161001';\n\nexport const REFRESH_DISABLED = 'J171000';\n","import { UserResponse } from '@descope/core-js-sdk';\nimport {\n CoreSdkConfig,\n CustomStorage,\n WebJWTResponse,\n WebSigninResponse,\n} from '../../types';\nimport { jwtDecode, JwtPayload } from 'jwt-decode';\nimport { IS_BROWSER } from '../../constants';\n\n// Routes where a failed response indicates an invalid/expired session\n// Other routes (like OTP verify) may fail for invalid input, not session expiration\nconst SESSION_VALIDATION_ROUTES = [\n '/v1/auth/refresh',\n '/v1/auth/try-refresh',\n '/v1/auth/me',\n '/v1/auth/me/tenants',\n '/v1/auth/me/history',\n];\n\n// this is a singleton\n// but in order to keep the code clean\n// it was implemented in this way\nlet customStorage: CustomStorage | undefined;\n\nconst getExpirationFromToken = (token: string) => {\n try {\n const claims = jwtDecode<JwtPayload>(token);\n return claims.exp;\n } catch (e) {\n return null;\n }\n};\n\nconst oidcRefreshTokenExpiration = (response: WebSigninResponse) => {\n const { refresh_expire_in, refresh_token } = response;\n if (refresh_expire_in) {\n return Math.floor(Date.now() / 1000) + refresh_expire_in;\n }\n return getExpirationFromToken(refresh_token);\n};\n\nconst oidcAccessTokenExpiration = (response: WebSigninResponse) => {\n // oidc-client-ts may return the expiration time in\n // - the expires_at (timestamp in seconds)\n // - the expires_in (ttl in seconds)\n // - we also fallback to the token itself\n const { expires_in, expires_at, access_token } = response;\n if (expires_at) {\n return expires_at;\n }\n if (expires_in) {\n // get expiration time from the expires_in in seconds\n return Math.floor(Date.now() / 1000) + expires_in;\n }\n if (access_token) {\n // get expiration time from the token itself\n return getExpirationFromToken(access_token);\n }\n return undefined;\n};\n\nconst normalizeWebJWTResponseToJWTResponse = (\n response: WebSigninResponse,\n): WebJWTResponse => {\n const { access_token, id_token, refresh_token, refresh_expire_in, ...rest } =\n response;\n return {\n sessionJwt: response.sessionJwt || access_token,\n idToken: id_token,\n refreshJwt: response.refreshJwt || refresh_token,\n sessionExpiration:\n response.sessionExpiration || oidcAccessTokenExpiration(response),\n cookieExpiration:\n response.cookieExpiration ||\n (oidcRefreshTokenExpiration(response) as number),\n ...rest,\n };\n};\n\n/**\n * Add hooks to an existing core-sdk config\n */\nexport const addHooks = <Config extends CoreSdkConfig>(\n config: Config,\n hooks: Config['hooks'],\n): Config => {\n ['beforeRequest', 'afterRequest'].reduce(\n (acc, key) => {\n acc[key] = []\n .concat(config.hooks?.[key] || [])\n .concat(hooks?.[key] || []);\n\n return acc;\n },\n (config.hooks ??= {}),\n );\n\n return config;\n};\n\nexport { compose } from './compose';\n\n/**\n * Extract auth info (JWT response) from fetch response\n * We assume that the auth info is under a \"authInfo\" attribute (flow response)\n * Or the body itself (other auth methods response)\n */\nexport const getAuthInfoFromResponse = async (\n res: Response,\n): Promise<Partial<WebJWTResponse>> => {\n if (!res?.ok) return {};\n const body = await res?.clone().json();\n const authInfo = body?.authInfo || body || ({} as Partial<WebJWTResponse>);\n return normalizeWebJWTResponseToJWTResponse(authInfo);\n};\n\nexport const getUserAndLastAuthFromResponse = async (\n res: Response,\n): Promise<{ userInfo: UserResponse | undefined; lastAuth: any }> => {\n if (!res?.ok) {\n return { userInfo: undefined, lastAuth: undefined };\n }\n const body = await res?.clone().json();\n const authInfo: Partial<WebJWTResponse> =\n normalizeWebJWTResponseToJWTResponse(\n body?.authInfo || body || ({} as Partial<WebJWTResponse>),\n );\n const userInfo =\n authInfo?.user ||\n (authInfo?.hasOwnProperty('userId')\n ? (authInfo as UserResponse)\n : undefined);\n return {\n userInfo,\n lastAuth: body.lastAuth,\n };\n};\n\n/**\n * Extract user from fetch response\n * User my exist under \"user\" attribute (auth methods response)\n * Or the body itself (when calling \"me\")\n */\nexport const getUserFromResponse = async (\n res: Response,\n): Promise<UserResponse> | undefined => {\n const authInfo = await getAuthInfoFromResponse(res);\n\n return (\n authInfo?.user ||\n (authInfo?.hasOwnProperty('userId')\n ? (authInfo as UserResponse)\n : undefined)\n );\n};\n\n// Detect if running in a native flow (e.g., mobile app with Descope bridge in a webview)\nexport const isDescopeBridge = () => IS_BROWSER && !!window['descopeBridge'];\n\n/**\n * Check if a failed response indicates an invalid/expired session\n * Only specific routes should trigger logout/clear tokens behavior on failure\n * Other routes (like OTP verify) may fail for invalid input\n */\nexport const isInvalidSessionResponse = (\n req: { path?: string },\n res: Response | undefined,\n): boolean => {\n const is4xx = res?.status >= 400 && res?.status < 500;\n if (!is4xx) return false;\n const path = req?.path || '';\n return SESSION_VALIDATION_ROUTES.includes(path);\n};\n\nexport const isLocalStorage =\n typeof customStorage !== 'undefined' ||\n (IS_BROWSER && typeof window.localStorage !== 'undefined');\n\nexport const setLocalStorage = (key: string, value: string) =>\n (customStorage || (IS_BROWSER && window.localStorage))?.setItem?.(key, value);\nexport const getLocalStorage = (key: string) =>\n (customStorage || (IS_BROWSER && window.localStorage))?.getItem?.(key);\nexport const removeLocalStorage = (key: string) =>\n (customStorage || (IS_BROWSER && window.localStorage))?.removeItem?.(key);\nexport const getLocalStorageLength = (): number =>\n (customStorage as any)?.length ??\n (IS_BROWSER && window.localStorage?.length) ??\n 0;\nexport const getLocalStorageKey = (index: number): string | null =>\n (customStorage as any)?.key?.(index) ??\n (IS_BROWSER && window.localStorage?.key?.(index)) ??\n null;\n\nexport const setCustomStorage = (storage: CustomStorage) => {\n customStorage = storage;\n};\n","import{jwtDecode as e}from\"jwt-decode\";import{__rest as t}from\"tslib\";var n={accessKey:{exchange:\"/v1/auth/accesskey/exchange\"},otp:{verify:\"/v1/auth/otp/verify\",signIn:\"/v1/auth/otp/signin\",signUp:\"/v1/auth/otp/signup\",update:{email:\"/v1/auth/otp/update/email\",phone:\"/v1/auth/otp/update/phone\"},signUpOrIn:\"/v1/auth/otp/signup-in\"},magicLink:{verify:\"/v1/auth/magiclink/verify\",signIn:\"/v1/auth/magiclink/signin\",signUp:\"/v1/auth/magiclink/signup\",update:{email:\"/v1/auth/magiclink/update/email\",phone:\"/v1/auth/magiclink/update/phone\"},signUpOrIn:\"/v1/auth/magiclink/signup-in\"},enchantedLink:{verify:\"/v1/auth/enchantedlink/verify\",signIn:\"/v1/auth/enchantedlink/signin\",signUp:\"/v1/auth/enchantedlink/signup\",session:\"/v1/auth/enchantedlink/pending-session\",update:{email:\"/v1/auth/enchantedlink/update/email\"},signUpOrIn:\"/v1/auth/enchantedlink/signup-in\"},oauth:{start:\"/v1/auth/oauth/authorize\",exchange:\"/v1/auth/oauth/exchange\",startNative:\"v1/auth/oauth/native/start\",finishNative:\"v1/auth/oauth/native/finish\",oneTap:{getOneTapClientId:\"/v1/auth/onetap/clientid/{provider}\",exchangeOneTapIDToken:\"/v1/auth/onetap/idtoken/exchange\",verifyOneTapIDToken:\"/v1/auth/onetap/idtoken/verify\"}},outbound:{connect:\"/v1/outbound/oauth/connect\"},saml:{start:\"/v1/auth/saml/authorize\",exchange:\"/v1/auth/saml/exchange\"},totp:{verify:\"/v1/auth/totp/verify\",signUp:\"/v1/auth/totp/signup\",update:\"/v1/auth/totp/update\"},notp:{signIn:\"/v1/auth/notp/whatsapp/signin\",signUp:\"/v1/auth/notp/whatsapp/signup\",signUpOrIn:\"/v1/auth/notp/whatsapp/signup-in\",session:\"/v1/auth/notp/pending-session\"},webauthn:{signUp:{start:\"/v1/auth/webauthn/signup/start\",finish:\"/v1/auth/webauthn/signup/finish\"},signIn:{start:\"/v1/auth/webauthn/signin/start\",finish:\"/v1/auth/webauthn/signin/finish\"},signUpOrIn:{start:\"/v1/auth/webauthn/signup-in/start\"},update:{start:\"v1/auth/webauthn/update/start\",finish:\"/v1/auth/webauthn/update/finish\"}},password:{signUp:\"/v1/auth/password/signup\",signIn:\"/v1/auth/password/signin\",sendReset:\"/v1/auth/password/reset\",update:\"/v1/auth/password/update\",replace:\"/v1/auth/password/replace\",policy:\"/v1/auth/password/policy\"},refresh:\"/v1/auth/refresh\",tryRefresh:\"/v1/auth/try-refresh\",selectTenant:\"/v1/auth/tenant/select\",logout:\"/v1/auth/logout\",logoutAll:\"/v1/auth/logoutall\",me:\"/v1/auth/me\",myTenants:\"/v1/auth/me/tenants\",history:\"/v1/auth/me/history\",flow:{start:\"/v1/flow/start\",next:\"/v1/flow/next\"}};const o=\"<region>\",s=`https://api.${o}descope.com`,i=1e3,r=6e5,a=\"dct\",d=()=>{const e={};return{headers(t){const n=\"function\"==typeof t.entries?Object.fromEntries(t.entries()):t;return e.Headers=JSON.stringify(n),this},body(t){return e.Body=t,this},url(t){return e.Url=t.toString(),this},method(t){return e.Method=t,this},title(t){return e.Title=t,this},status(t){return e.Status=t,this},retries(t){return e.Retries=t,this},build:()=>Object.keys(e).flatMap((t=>e[t]?[`${\"Title\"!==t?`${t}: `:\"\"}${e[t]}`]:[])).join(\"\\n\")}},p=[503,521,522,524,530],u=[100,5e3,5e3],l=e=>new Promise((t=>setTimeout(t,e))),c=e=>async(...t)=>{let n=await e(...t),o=0;for(;p.includes(n.status)&&o<u.length;)await l(u[o]),n=await e(...t),o++;o>0&&(n.retries=o);const s=await n.text();return n.text=()=>Promise.resolve(s),n.json=()=>Promise.resolve(JSON.parse(s)),n.clone=()=>n,n},g=(e,t)=>{const n=t||fetch;return n||null==e||e.warn(\"Fetch is not defined, you will not be able to send http requests, if you are running in a test, make sure fetch is defined globally\"),e?async(...t)=>{if(!n)throw Error(\"Cannot send http request, fetch is not defined, if you are running in a test, make sure fetch is defined globally\");e.log((e=>d().title(\"Request\").url(e[0]).method(e[1].method).headers(e[1].headers).body(e[1].body).build())(t));const o=await c(n)(...t);return e[o.ok?\"log\":\"error\"](await(async e=>{const t=await e.text();return d().title(\"Response\").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).retries(e.retries).build()})(o)),o}:c(n)};let h;const v=()=>{if(h)return h;const e=new Date,t=`${e.getUTCFullYear().toString()}-${(e.getUTCMonth()+1).toString().padStart(2,\"0\")}-${e.getUTCDate().toString().padStart(2,\"0\")}-${e.getUTCHours().toString().padStart(2,\"0\")}:${e.getUTCMinutes().toString().padStart(2,\"0\")}:${e.getUTCSeconds().toString().padStart(2,\"0\")}:${e.getUTCMilliseconds().toString()}`,n=Math.floor(1e3+9e3*Math.random());return h=`${t}-${n}`,h};var I;!function(e){e.get=\"GET\",e.delete=\"DELETE\",e.post=\"POST\",e.put=\"PUT\",e.patch=\"PATCH\"}(I||(I={}));const f=({path:e,baseUrl:t,queryParams:n,projectId:s})=>{const i=s.slice(1,-27);t=t.replace(o,i?i+\".\":\"\");let r=e?`${t.replace(/\\/$/,\"\")}/${null==e?void 0:e.replace(/^\\//,\"\")}`:t;if(n){const e=Object.keys(n);e.forEach(((t,o)=>{r=`${r}${0===o?\"?\":\"\"}${t}=${encodeURIComponent(n[t])}${o===e.length-1?\"\":\"&\"}`}))}return r},m=(...e)=>new Headers(e.reduce(((e,t)=>((e=>Array.isArray(e)?e:e instanceof Headers?Array.from(e.entries()):e?Object.entries(e):[])(t).forEach((([t,n])=>{e[t]=\"function\"==typeof n?n():n})),e)),{})),b={\"Content-Type\":\"application/json\"},k=(e,t=\"\")=>{let n=e;return t&&(n=n+\":\"+t),{Authorization:`Bearer ${n}`}},y=(e,t)=>{const n={\"x-descope-sdk-session-id\":v(),\"x-descope-sdk-name\":\"core-js\",\"x-descope-sdk-version\":\"2.62.0\",\"x-descope-project-id\":e};return t&&(n[\"x-descope-refresh-cookie-name\"]=t),n},O=e=>{try{e=JSON.parse(e)}catch(e){return!1}return\"object\"==typeof e&&null!==e};var w=(e=>t=>{var n;return e(Object.assign(Object.assign({},t),{hooks:{beforeRequest:e=>{var n;const o=[].concat((null===(n=t.hooks)||void 0===n?void 0:n.beforeRequest)||[]);return null==o?void 0:o.reduce(((e,t)=>t(e)),e)},afterRequest:async(e,n)=>{var o;const s=[].concat((null===(o=t.hooks)||void 0===o?void 0:o.afterRequest)||[]);if(0==s.length)return;(await Promise.allSettled(null==s?void 0:s.map((t=>t(e,null==n?void 0:n.clone()))))).forEach((e=>{var n;return\"rejected\"===e.status&&(null===(n=t.logger)||void 0===n?void 0:n.error(e.reason))}))},transformResponse:null===(n=t.hooks)||void 0===n?void 0:n.transformResponse}}))})((({baseUrl:e,projectId:t,baseConfig:n,refreshCookieName:o,logger:i,hooks:r,cookiePolicy:a,fetch:d})=>{const p=e||s,u=g(i,d),l=async e=>{var s;const i=(null==r?void 0:r.beforeRequest)?r.beforeRequest(e):e,{path:d,body:l,headers:c,queryParams:g,method:h,token:v}=i,I=(e=>void 0===e?void 0:JSON.stringify(e))(l),w={headers:m(k(t,v),y(t,o),(null==n?void 0:n.baseHeaders)||{},O(I)?b:{},c),method:h,body:I};null!==a&&(w.credentials=a||\"include\");const j=await u(f({path:d,baseUrl:p,queryParams:g,projectId:t}),w);if((null==r?void 0:r.afterRequest)&&await r.afterRequest(e,null==j?void 0:j.clone()),null==r?void 0:r.transformResponse){const e=await j.json(),t=(U=(null===(s=j.headers)||void 0===s?void 0:s.get(\"set-cookie\"))||\"\",Object.fromEntries(function(e){if(!e)return[];const t=[];let n=0;function o(){for(;n<e.length&&/\\s/.test(e.charAt(n));)n+=1;return n<e.length}function s(){const t=e.charAt(n);return\"=\"!==t&&\";\"!==t&&\",\"!==t}for(;n<e.length;){const i=n;let r,a,d=!1;for(;o();)if(\",\"===e.charAt(n)){for(r=n,n+=1,o(),a=n;n<e.length&&s();)n+=1;if(n<e.length&&\"=\"===e.charAt(n)){d=!0,n=a,t.push(e.substring(i,r));break}n=r+1}else n+=1;(!d||n>=e.length)&&t.push(e.substring(i,e.length))}return t}(U).map((e=>{const t=e.split(\";\")[0],n=t.indexOf(\"=\");return n<1?null:[t.substring(0,n).trim(),t.substring(n+1).trim()]})).filter(Boolean))),n=Object.assign(Object.assign({},j),{json:()=>Promise.resolve(e),cookies:t});return n.clone=()=>n,r.transformResponse(n)}var U;return j};return{get:(e,{headers:t,queryParams:n,token:o}={})=>l({path:e,headers:t,queryParams:n,body:void 0,method:I.get,token:o}),post:(e,t,{headers:n,queryParams:o,token:s}={})=>l({path:e,headers:n,queryParams:o,body:t,method:I.post,token:s}),patch:(e,t,{headers:n,queryParams:o,token:s}={})=>l({path:e,headers:n,queryParams:o,body:t,method:I.patch,token:s}),put:(e,t,{headers:n,queryParams:o,token:s}={})=>l({path:e,headers:n,queryParams:o,body:t,method:I.put,token:s}),delete:(e,{headers:t,queryParams:n,token:o}={})=>l({path:e,headers:t,queryParams:n,body:void 0,method:I.delete,token:o}),hooks:r,buildUrl:(e,n)=>f({projectId:t,baseUrl:p,path:e,queryParams:n})}})),j={TOO_MANY_REQUESTS:429};function U(e,t,n){var o;let s=T(e);if(t){if(!(null==s?void 0:s.tenants)&&(null==s?void 0:s[a])===t)return(null==s?void 0:s[n])||[];s=null===(o=null==s?void 0:s.tenants)||void 0===o?void 0:o[t]}const i=null==s?void 0:s[n];return Array.isArray(i)?i:[]}function T(t){if(\"string\"!=typeof t||!t)throw new Error(\"Invalid token provided\");return e(t)}function R(e){const{exp:t}=T(e);return(new Date).getTime()/1e3>t}function x(e){let t=T(e);const n=Object.keys(null==t?void 0:t.tenants);return Array.isArray(n)?n:[]}function P(e,t){return U(e,t,\"permissions\")}function $(e,t){return U(e,t,\"roles\")}const q=(...e)=>e.join(\"/\").replace(/\\/{2,}/g,\"/\");async function S(e,t){var n;const o=await e,s={code:o.status,ok:o.ok,response:o},i=await o.clone().json();return o.ok?s.data=t?t(i):i:(s.error=i,o.status===j.TOO_MANY_REQUESTS&&Object.assign(s.error,{retryAfter:Number.parseInt(null===(n=o.headers)||void 0===n?void 0:n.get(\"retry-after\"))||0})),s}function A(e){var t;return(null===(t=T(e))||void 0===t?void 0:t[a])||\"\"}const C=(e,t)=>(n=t)=>t=>!e(t)&&n.replace(\"{val}\",t),E=(e,t)=>(n=t)=>t=>{const o=e.filter((e=>e(t)));return!(o.length<e.length)&&(n?n.replace(\"{val}\",t):o.join(\" OR \"))},L=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),M=e=>t=>e.test(t),N=M(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/),D=M(/^\\+[1-9]{1}[0-9]{3,14}$/),H=(e,t)=>n=>L(...t).validate(((e,t,n)=>{const o=(Array.isArray(t)?t.join(\".\"):String(t)).replace(/\\[\\\\?(\"|')?(\\w|d)+\\\\?(\"|')?\\]/g,((e,t,n)=>\".\"+n)).split(\".\"),s=o.length;let i=0,r=e===Object(e)?e:void 0;for(;null!=r&&i<s;)r=r[o[i++]];return i&&i===s&&void 0!==r?r:n})(n,e)),J=C(N,'\"{val}\" is not a valid email'),z=C(D,'\"{val}\" is not a valid phone number'),_=C((F=1,e=>e.length>=F),\"Minimum length is 1\");var F;const K=C((e=>\"string\"==typeof e),\"Input is not a string\"),B=C((e=>Array.isArray(e)),\"Input is not an array\"),V=C((e=>\"boolean\"==typeof e),\"Input is not a boolean\"),Y=C((e=>void 0===e),\"Input is defined\"),Z=E([K(),Y()],\"Input is not a string or undefined\"),Q=E([B(),V()],\"Input is not an array or boolean\"),G=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>L(...e).validate(n[t]))),t(...n)),W=e=>[K(`\"${e}\" must be a string`)],X=e=>[Z(`\"${e}\" must be string or undefined`)],ee=e=>[K(`\"${e}\" must be a string`),_(`\"${e}\" must not be empty`)],te=e=>[K(`\"${e}\" must be a string`),J()],ne=e=>[K(`\"${e}\" must be a string`),z()],oe=G(ee(\"accessKey\")),se=e=>({exchange:oe(((t,o)=>S(e.post(n.accessKey.exchange,{loginOptions:o},{token:t}))))}),ie=(e,t,n)=>(t.forEach((t=>{const o=t.split(\".\");let s=o.shift(),i=e;for(;o.length>0;){if(i=i[s],!s||!i)throw Error(`Invalid path \"${t}\", \"${s}\" is missing or has no value`);s=o.shift()}if(\"function\"!=typeof i[s])throw Error(`\"${t}\" is not a function`);const r=i[s];i[s]=n(r)})),e),re=({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||i,i),timeoutMs:Math.min(t||r,r)});var ae,de;!function(e){e.sms=\"sms\",e.voice=\"voice\",e.whatsapp=\"whatsapp\",e.im=\"im\"}(ae||(ae={})),function(e){e.email=\"email\"}(de||(de={}));const pe=Object.assign(Object.assign({},ae),de);var ue;!function(e){e.waiting=\"waiting\",e.running=\"running\",e.completed=\"completed\",e.failed=\"failed\"}(ue||(ue={}));const le=ee(\"loginId\"),ce=G(ee(\"token\")),ge=G(le),he=G(ee(\"pendingRef\")),ve=G(le,te(\"email\")),Ie=e=>({verify:ce((t=>S(e.post(n.enchantedLink.verify,{token:t})))),signIn:ge(((o,s,i={},r)=>{var{providerId:a}=i,d=t(i,[\"providerId\"]);return S(e.post(q(n.enchantedLink.signIn,pe.email),{loginId:o,URI:s,loginOptions:d,providerId:a},{token:r}))})),signUpOrIn:ge(((o,s,i={})=>{var{providerId:r}=i,a=t(i,[\"providerId\"]);return S(e.post(q(n.enchantedLink.signUpOrIn,pe.email),{loginId:o,URI:s,loginOptions:a,providerId:r}))})),signUp:ge(((o,s,i,r={})=>{var{providerId:a}=r,d=t(r,[\"providerId\"]);return S(e.post(q(n.enchantedLink.signUp,pe.email),{loginId:o,URI:s,user:i,loginOptions:d,providerId:a}))})),waitForSession:he(((t,o)=>new Promise((s=>{const{pollingIntervalMs:i,timeoutMs:r}=re(o);let a;const d=setInterval((async()=>{const o=await e.post(n.enchantedLink.session,{pendingRef:t});o.ok&&(clearInterval(d),a&&clearTimeout(a),s(S(Promise.resolve(o))))}),i);a=setTimeout((()=>{s({error:{errorDescription:`Session polling timeout exceeded: ${r}ms`,errorCode:\"0\"},ok:!1}),clearInterval(d)}),r)})))),update:{email:ve(((t,o,s,i,r)=>S(e.post(n.enchantedLink.update.email,Object.assign({loginId:t,email:o,URI:s},r),{token:i}))))}}),fe=G(ee(\"flowId\")),me=G(ee(\"executionId\"),ee(\"stepId\"),ee(\"interactionId\")),be=e=>({start:fe(((t,o,s,i,r,a,d,p=!1)=>S(e.post(n.flow.start,{flowId:t,options:o,conditionInteractionId:s,interactionId:i,componentsVersion:r,flowVersions:a,input:d,isCustomScreen:p})))),next:me(((t,o,s,i,r,a,d=!1)=>S(e.post(n.flow.next,{executionId:t,stepId:o,interactionId:s,version:i,componentsVersion:r,input:a,isCustomScreen:d}))))}),ke=ee(\"loginId\"),ye=G(ee(\"token\")),Oe=G(ke),we=G(ke,ne(\"phone\")),je=G(ke,te(\"email\")),Ue=Object.keys(pe).filter((e=>e!==ae.voice&&e!==ae.im)),Te=e=>({verify:ye((t=>S(e.post(n.magicLink.verify,{token:t})))),signIn:Ue.reduce(((o,s)=>Object.assign(Object.assign({},o),{[s]:Oe(((o,i,r={},a)=>{var{providerId:d}=r,p=t(r,[\"providerId\"]);return S(e.post(q(n.magicLink.signIn,s),{loginId:o,URI:i,loginOptions:p,providerId:d},{token:a}))}))})),{}),signUp:Ue.reduce(((o,s)=>Object.assign(Object.assign({},o),{[s]:Oe(((o,i,r,a={})=>{var{providerId:d}=a,p=t(a,[\"providerId\"]);return S(e.post(q(n.magicLink.signUp,s),{loginId:o,URI:i,user:r,loginOptions:p,providerId:d}))}))})),{}),signUpOrIn:Ue.reduce(((o,s)=>Object.assign(Object.assign({},o),{[s]:Oe(((o,i,r={})=>{var{providerId:a}=r,d=t(r,[\"providerId\"]);return S(e.post(q(n.magicLink.signUpOrIn,s),{loginId:o,URI:i,loginOptions:d,providerId:a}))}))})),{}),update:{email:je(((t,o,s,i,r)=>S(e.post(n.magicLink.update.email,Object.assign({loginId:t,email:o,URI:s},r),{token:i})))),phone:Object.keys(ae).filter((e=>e!==ae.voice)).reduce(((t,o)=>Object.assign(Object.assign({},t),{[o]:we(((t,s,i,r,a)=>S(e.post(q(n.magicLink.update.phone,o),Object.assign({loginId:t,phone:s,URI:i},a),{token:r}))))})),{})}});var Re;!function(e){e.facebook=\"facebook\",e.github=\"github\",e.google=\"google\",e.microsoft=\"microsoft\",e.gitlab=\"gitlab\",e.apple=\"apple\",e.discord=\"discord\",e.linkedin=\"linkedin\",e.slack=\"slack\"}(Re||(Re={}));const xe=G(ee(\"code\")),Pe=e=>({start:Object.assign(((t,o,s,i,r)=>S(e.post(n.oauth.start,s||{},{queryParams:Object.assign(Object.assign({provider:t},o&&{redirectURL:o}),r&&{loginHint:r}),token:i}))),Object.keys(Re).reduce(((t,o)=>Object.assign(Object.assign({},t),{[o]:(t,s,i,r)=>S(e.post(n.oauth.start,s||{},{queryParams:Object.assign(Object.assign({provider:o},t&&{redirectURL:t}),r&&{loginHint:r}),token:i}))})),{})),exchange:xe((t=>S(e.post(n.oauth.exchange,{code:t})))),startNative:(t,o,s)=>S(e.post(n.oauth.startNative,{provider:t,loginOptions:o,implicit:s})),finishNative:(t,o,s,i,r)=>S(e.post(n.oauth.finishNative,{provider:t,stateId:o,user:s,code:i,idToken:r})),getOneTapClientId:t=>S(e.get(n.oauth.oneTap.getOneTapClientId.replace(\"{provider}\",t))),verifyOneTapIDToken:(t,o,s,i)=>S(e.post(n.oauth.oneTap.verifyOneTapIDToken,{provider:t,idToken:o,nonce:s,loginOptions:i})),exchangeOneTapIDToken:(t,o,s,i)=>S(e.post(n.oauth.oneTap.exchangeOneTapIDToken,{provider:t,idToken:o,nonce:s,loginOptions:i}))}),$e=ee(\"appId\"),qe=G($e),Se=e=>({connect:qe(((t,o,s)=>{const i=null==o?void 0:o.tenantId,r=null==o?void 0:o.tenantLevel;return null==o||delete o.tenantId,null==o||delete o.tenantLevel,S(e.post(n.outbound.connect,{appId:t,tenantId:i,tenantLevel:r,options:o},{token:s}))}))}),Ae=ee(\"loginId\"),Ce=G(Ae,ee(\"code\")),Ee=G(Ae),Le=G(Ae,ne(\"phone\")),Me=G(Ae,te(\"email\")),Ne=e=>({verify:Object.keys(pe).reduce(((t,o)=>Object.assign(Object.assign({},t),{[o]:Ce(((t,s)=>S(e.post(q(n.otp.verify,o),{code:s,loginId:t}))))})),{}),signIn:Object.keys(pe).reduce(((o,s)=>Object.assign(Object.assign({},o),{[s]:Ee(((o,i={},r)=>{var{providerId:a}=i,d=t(i,[\"providerId\"]);return S(e.post(q(n.otp.signIn,s),{loginId:o,loginOptions:d,providerId:a},{token:r}))}))})),{}),signUp:Object.keys(pe).reduce(((o,s)=>Object.assign(Object.assign({},o),{[s]:Ee(((o,i,r={})=>{var{providerId:a}=r,d=t(r,[\"providerId\"]);return S(e.post(q(n.otp.signUp,s),{loginId:o,user:i,loginOptions:d,providerId:a}))}))})),{}),signUpOrIn:Object.keys(pe).reduce(((o,s)=>Object.assign(Object.assign({},o),{[s]:Ee(((o,i={})=>{var{providerId:r}=i,a=t(i,[\"providerId\"]);return S(e.post(q(n.otp.signUpOrIn,s),{loginId:o,loginOptions:a,providerId:r}))}))})),{}),update:{email:Me(((t,o,s,i)=>S(e.post(n.otp.update.email,Object.assign({loginId:t,email:o},i),{token:s})))),phone:Object.keys(ae).reduce(((t,o)=>Object.assign(Object.assign({},t),{[o]:Le(((t,s,i,r)=>S(e.post(q(n.otp.update.phone,o),Object.assign({loginId:t,phone:s},r),{token:i}))))})),{})}}),De=G(ee(\"tenant\")),He=G(ee(\"code\")),Je=e=>({start:De(((t,o,s,i,r,a,d,p)=>S(e.post(n.saml.start,s||{},Object.assign({queryParams:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({tenant:t},o&&{redirectURL:o}),r&&{ssoId:r}),a&&{forceAuthn:\"true\"}),d&&{loginHint:d}),p&&{initiatedEmail:t})},i&&{token:i}))))),exchange:He((t=>S(e.post(n.saml.exchange,{code:t}))))}),ze=ee(\"loginId\"),_e=G(ze,ee(\"code\")),Fe=G(ze),Ke=G(ze),Be=e=>({signUp:Fe(((t,o)=>S(e.post(n.totp.signUp,{loginId:t,user:o})))),verify:_e(((t,o,s,i)=>S(e.post(n.totp.verify,{loginId:t,code:o,loginOptions:s},{token:i})))),update:Ke(((t,o)=>S(e.post(n.totp.update,{loginId:t},{token:o}))))}),Ve=ee(\"loginId\"),Ye=ee(\"newPassword\"),Ze=G(Ve,ee(\"password\")),Qe=G(Ve),Ge=G(Ve,Ye),We=G(Ve,ee(\"oldPassword\"),Ye),Xe=e=>({signUp:Ze(((o,s,i,r={})=>{var{providerId:a}=r,d=t(r,[\"providerId\"]);return S(e.post(n.password.signUp,{loginId:o,password:s,user:i,loginOptions:d,providerId:a}))})),signIn:Ze(((o,s,i={})=>{var{providerId:r}=i,a=t(i,[\"providerId\"]);return S(e.post(n.password.signIn,{loginId:o,password:s,loginOptions:a,providerId:r}))})),sendReset:Qe(((t,o,s)=>S(e.post(n.password.sendReset,{loginId:t,redirectUrl:o,templateOptions:s})))),update:Ge(((t,o,s)=>S(e.post(n.password.update,{loginId:t,newPassword:o},{token:s})))),replace:We(((t,o,s)=>S(e.post(n.password.replace,{loginId:t,oldPassword:o,newPassword:s})))),policy:()=>S(e.get(n.password.policy))}),et=W(\"loginId\"),tt=ee(\"loginId\"),nt=ee(\"origin\"),ot=G(tt,nt,ee(\"name\")),st=G(tt,nt),it=G(et,nt),rt=G(tt,nt,X(\"token\")),at=G(ee(\"transactionId\"),ee(\"response\")),dt=e=>({signUp:{start:ot(((t,o,s,i,r)=>S(e.post(n.webauthn.signUp.start,{user:{loginId:t,name:s},origin:o,loginOptions:r,passkeyOptions:i})))),finish:at(((t,o)=>S(e.post(n.webauthn.signUp.finish,{transactionId:t,response:o}))))},signIn:{start:it(((t,o,s,i,r)=>S(e.post(n.webauthn.signIn.start,{loginId:t,origin:o,loginOptions:s,passkeyOptions:r},{token:i})))),finish:at(((t,o)=>S(e.post(n.webauthn.signIn.finish,{transactionId:t,response:o}))))},signUpOrIn:{start:st(((t,o,s,i)=>S(e.post(n.webauthn.signUpOrIn.start,{loginId:t,origin:o,loginOptions:i,passkeyOptions:s}))))},update:{start:rt(((t,o,s,i)=>S(e.post(n.webauthn.update.start,{loginId:t,origin:o,passkeyOptions:i},{token:s})))),finish:at(((t,o)=>S(e.post(n.webauthn.update.finish,{transactionId:t,response:o}))))}}),pt=W(\"loginId\"),ut=G(pt),lt=G(ee(\"pendingRef\")),ct=e=>({signUpOrIn:ut(((o,s={})=>{var{providerId:i}=s,r=t(s,[\"providerId\"]);return S(e.post(n.notp.signUpOrIn,{loginId:o,loginOptions:r,providerId:i}))})),signUp:ut(((o,s,i={})=>{var{providerId:r}=i,a=t(i,[\"providerId\"]);return S(e.post(n.notp.signUp,{loginId:o,user:s,providerId:r,loginOptions:a}))})),signIn:ut(((o,s={},i)=>{var{providerId:r}=s,a=t(s,[\"providerId\"]);return S(e.post(n.notp.signIn,{loginId:o,loginOptions:a,providerId:r},{token:i}))})),waitForSession:lt(((t,o)=>new Promise((s=>{const{pollingIntervalMs:i,timeoutMs:r}=re(o);let a;const d=setInterval((async()=>{const o=await e.post(n.notp.session,{pendingRef:t});o.ok&&(clearInterval(d),a&&clearTimeout(a),s(S(Promise.resolve(o))))}),i);a=setTimeout((()=>{s({error:{errorDescription:`Session polling timeout exceeded: ${r}ms`,errorCode:\"0\"},ok:!1}),clearInterval(d)}),r)}))))}),gt=G(ee(\"token\")),ht=G(X(\"token\"));var vt,It,ft=G([(vt=\"projectId\",It=ee(\"projectId\"),C(H(vt,It))())])((e=>{const{projectId:t,logger:o,baseUrl:s,cookiePolicy:i,baseHeaders:r={},refreshCookieName:a,fetch:d}=e;return p=w({baseUrl:s,projectId:t,logger:o,hooks:{get beforeRequest(){var t;return null===(t=e.hooks)||void 0===t?void 0:t.beforeRequest},get afterRequest(){var t;return null===(t=e.hooks)||void 0===t?void 0:t.afterRequest},get transformResponse(){var t;return null===(t=e.hooks)||void 0===t?void 0:t.transformResponse}},cookiePolicy:i,baseConfig:{baseHeaders:r},refreshCookieName:a,fetch:d}),{accessKey:se(p),otp:Ne(p),magicLink:Te(p),enchantedLink:Ie(p),oauth:Pe(p),outbound:Se(p),saml:Je(p),totp:Be(p),notp:ct(p),webauthn:dt(p),password:Xe(p),flow:be(p),refresh:ht(((e,t,o,s)=>{const i={};o&&(i.externalToken=o);const r=s?n.tryRefresh:n.refresh;return S(p.post(r,i,{token:e,queryParams:t}))})),selectTenant:G([K(\"tenantId\")],[Z('\"token\" must be string or undefined')])(((e,t)=>S(p.post(n.selectTenant,{tenant:e},{token:t})))),logout:ht((e=>S(p.post(n.logout,{},{token:e})))),logoutAll:ht((e=>S(p.post(n.logoutAll,{},{token:e})))),me:ht((e=>S(p.get(n.me,{token:e})))),myTenants:G([Q('\"tenants\" must a string array or a boolean')],[Z('\"token\" must be string or undefined')])(((e,t)=>{const o={};return\"boolean\"==typeof e?o.dct=e:o.ids=e,S(p.post(n.myTenants,o,{token:t}))})),history:ht((e=>S(p.get(n.history,{token:e})))),isJwtExpired:gt(R),getTenants:gt(x),getJwtPermissions:gt(P),getJwtRoles:gt($),getCurrentTenant:gt(A),httpClient:p};var p})),mt=Object.assign(ft,{DeliveryMethods:pe});export{j as HttpStatusCodes,w as createHttpClient,mt as default,re as normalizeWaitForSessionConfig,S as transformResponse,ie as wrapWith};\n//# sourceMappingURL=index.esm.js.map\n","const logger = {\n debug: (...args: any[]) => {\n // eslint-disable-next-line no-console\n console.debug(...args);\n },\n warn: (...args: any[]) => {\n // eslint-disable-next-line no-console\n console.warn(...args);\n },\n};\n\nexport default logger;\n","import { jwtDecode, JwtPayload } from 'jwt-decode';\nimport logger from '../helpers/logger';\nimport { MAX_TIMEOUT, REFRESH_THRESHOLD } from '../../constants';\n\n/**\n * Tracks whether the user has been active since the last refresh.\n * Starts as true so the first scheduled refresh always proceeds.\n * Call `reset()` after each successful refresh to start the next period fresh.\n */\nexport const createActivityTracker = () => {\n let hadActivitySinceLastRefresh = true;\n\n return {\n hadActivity: () => hadActivitySinceLastRefresh,\n reset: () => {\n hadActivitySinceLastRefresh = false;\n },\n markActive: () => {\n hadActivitySinceLastRefresh = true;\n },\n };\n};\n\n/**\n * Get the JWT expiration WITHOUT VALIDATING the JWT\n * @param token The JWT to extract expiration from\n * @returns The Date for when the JWT expires or null if there is an issue\n */\nexport const getTokenExpiration = (\n token: string,\n sessionExpiration: number,\n) => {\n if (sessionExpiration) {\n return new Date(sessionExpiration * 1000);\n }\n\n logger.debug(\n 'Could not extract expiration time from session token, trying to decode the token',\n );\n try {\n const claims = jwtDecode<JwtPayload>(token);\n if (claims.exp) {\n return new Date(claims.exp * 1000);\n }\n } catch (e) {\n return null;\n }\n};\n\nexport const millisecondsUntilDate = (date: Date) =>\n date ? date.getTime() - new Date().getTime() : 0;\n\nexport const createTimerFunctions = () => {\n const timerIds: NodeJS.Timeout[] = [];\n\n const clearAllTimers = () => {\n while (timerIds.length) {\n clearTimeout(timerIds.pop());\n }\n };\n\n const setTimer = (cb: () => void, timeout: number) => {\n timerIds.push(setTimeout(cb, timeout));\n };\n\n return { clearAllTimers, setTimer };\n};\n\nexport const getAutoRefreshTimeout = (\n sessionExpiration: Date,\n nextRefreshSeconds?: number,\n) => {\n let timeout: number;\n\n // If server provided nextRefreshSeconds, use it (converted to ms)\n // This helps balance refresh frequency for session inactivity tracking\n if (nextRefreshSeconds > 0) {\n timeout = nextRefreshSeconds * 1000;\n logger.debug(`Using provided nextRefreshSeconds: ${nextRefreshSeconds}s`);\n } else {\n // Refresh slightly before session expires\n timeout = millisecondsUntilDate(sessionExpiration) - REFRESH_THRESHOLD;\n }\n\n if (timeout > MAX_TIMEOUT) {\n logger.debug(\n `Timeout is too large (${timeout}ms), setting it to ${MAX_TIMEOUT}ms`,\n );\n timeout = MAX_TIMEOUT;\n }\n\n return timeout;\n};\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","/** Default name for the session cookie name / local storage key */\nexport const SESSION_TOKEN_KEY = 'DS';\n/** Default name for the refresh local storage key */\nexport const REFRESH_TOKEN_KEY = 'DSR';\n/* Default name for the id token local storage key */\nexport const ID_TOKEN_KEY = 'DSI';\n/* Default name for the trusted device token (DTD) local storage key */\nexport const TRUSTED_DEVICE_TOKEN_KEY = 'DTD';\n/* Key for persisting the server-returned refresh cookie name */\nexport const REFRESH_COOKIE_NAME_KEY = 'DSRCN';\n","import { JWTResponse } from '@descope/core-js-sdk';\nimport Cookies from 'js-cookie';\nimport { BeforeRequestHook, WebJWTResponse } from '../../types';\nimport {\n ID_TOKEN_KEY,\n REFRESH_COOKIE_NAME_KEY,\n REFRESH_TOKEN_KEY,\n SESSION_TOKEN_KEY,\n TRUSTED_DEVICE_TOKEN_KEY,\n} from './constants';\nimport {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\nimport { CookieConfig, LastCookieOptions, SameSite } from './types';\nimport logger from '../helpers/logger';\n\n/**\n * Store the session JWT as a cookie on the given domain and path with the given expiration.\n * This is useful so that the application backend will automatically get the cookie for the session\n * @param name cookie name\n * @param value The JWT to store as a cookie\n * @param cookieParams configuration that is usually returned from the JWT\n */\nfunction setJwtTokenCookie(\n name: string,\n value: string,\n authInfo: Partial<\n WebJWTResponse & { cookieSameSite: SameSite; cookieSecure: boolean }\n >,\n) {\n if (value) {\n const {\n cookieDomain,\n cookiePath,\n cookieSameSite,\n cookieExpiration,\n cookieSecure,\n } = authInfo;\n const expires = new Date(cookieExpiration * 1000); // we are getting response from the server in seconds instead of ms\n // Since its a JS cookie, we don't set the domain because we want the cookie to be on the same domain as the application\n const domainMatches = isCurrentDomainOrParentDomain(cookieDomain);\n Cookies.set(name, value, {\n path: cookiePath,\n domain: domainMatches ? cookieDomain : undefined,\n expires,\n sameSite: cookieSameSite,\n secure: cookieSecure,\n });\n }\n}\n\n/*\n * Check if the cookie domain is the same as the current domain or the parent domain\n * Examples:\n * 1. cookie domain: 'example.com', current domain: 'example.com' => true\n * 2. cookie domain: 'example.com', current domain: 'sub.example.com' => true\n * 3. cookie domain: 'example.com', current domain: 'sub.sub.example.com' => true\n * 4. cookie domain: 'example.com', current domain: 'another.com' => false\n * 5. cookie domain: 'example.com', current domain: 'example.co.il' => false\n */\nfunction isCurrentDomainOrParentDomain(cookieDomain: string): boolean {\n const currentDomain = window.location.hostname;\n const currentDomainParts = currentDomain.split('.');\n const cookieDomainParts = cookieDomain?.split('.');\n\n // check if the cookie domain items are the last items in the current domain\n const currentDomainSuffix = currentDomainParts\n .slice(-cookieDomainParts?.length)\n .join('.');\n return currentDomainSuffix === cookieDomain;\n}\n\nconst getSessionCookieName = (sessionTokenViaCookie?: CookieConfig) => {\n return sessionTokenViaCookie?.['cookieName'] || SESSION_TOKEN_KEY;\n};\n\nconst getRefreshCookieName = (refreshTokenViaCookie?: CookieConfig) => {\n return refreshTokenViaCookie?.['cookieName'] || REFRESH_TOKEN_KEY;\n};\n\nexport const persistTokens = (\n authInfo = {} as Partial<WebJWTResponse>,\n sessionTokenViaCookie: boolean | CookieConfig = false,\n storagePrefix = '',\n refreshTokenViaCookie: boolean | CookieConfig = false,\n): LastCookieOptions | undefined => {\n // persist refresh token\n const { sessionJwt, refreshJwt, trustedDeviceJwt } = authInfo;\n let cookieOptions: LastCookieOptions | undefined;\n\n if (refreshJwt) {\n if (refreshTokenViaCookie) {\n // clear local storage refresh token if exists\n removeLocalStorage(`${storagePrefix}${REFRESH_TOKEN_KEY}`);\n // Cookie configs will fallback to default values in both cases\n // 1. refreshTokenViaCookie is a boolean\n // 2. refreshTokenViaCookie is an object without the property\n const cookieSameSite = refreshTokenViaCookie['sameSite'] || 'Strict';\n const cookieSecure = refreshTokenViaCookie['secure'] ?? true;\n const cookieDomain =\n refreshTokenViaCookie['domain'] ?? authInfo.cookieDomain;\n const cookieName = getRefreshCookieName(refreshTokenViaCookie);\n if (cookieSecure && window.location.protocol !== 'https:') {\n logger.warn(\n \"Refresh token cookie is configured with secure=true but the page is not using HTTPS. The cookie will not be set. To fix this, pass refreshTokenViaCookie: { secure: process.env['NODE_ENV'] !== 'development' }\",\n );\n }\n const authInfoWithCookie = {\n ...(authInfo as Partial<JWTResponse>),\n cookieSameSite,\n cookieSecure,\n cookieDomain,\n };\n setJwtTokenCookie(cookieName, refreshJwt, authInfoWithCookie);\n\n // Cache the cookie options that were actually used\n const domainMatches = isCurrentDomainOrParentDomain(cookieDomain);\n cookieOptions = {\n ...cookieOptions,\n refresh: {\n path: authInfoWithCookie.cookiePath,\n domain: domainMatches ? cookieDomain : undefined,\n },\n };\n } else {\n // remove refresh token from cookie if exists\n const refreshCookieName = getRefreshCookieName(refreshTokenViaCookie);\n Cookies.remove(refreshCookieName);\n // persist in local storage\n setLocalStorage(`${storagePrefix}${REFRESH_TOKEN_KEY}`, refreshJwt);\n }\n }\n\n // persist session token\n if (sessionJwt) {\n if (sessionTokenViaCookie) {\n // Cookie configs will fallback to default values in both cases\n // 1. sessionTokenViaCookie is a boolean\n // 2. sessionTokenViaCookie is an object without the property\n const cookieSameSite = sessionTokenViaCookie['sameSite'] || 'Strict';\n const cookieSecure = sessionTokenViaCookie['secure'] ?? true;\n const cookieDomain =\n sessionTokenViaCookie['domain'] ?? authInfo.cookieDomain;\n const cookieName = getSessionCookieName(sessionTokenViaCookie);\n if (cookieSecure && window.location.protocol !== 'https:') {\n logger.warn(\n \"Session token cookie is configured with secure=true but the page is not using HTTPS. The cookie will not be set. To fix this, pass sessionTokenViaCookie: { secure: process.env['NODE_ENV'] !== 'development' }\",\n );\n }\n const authInfoWithCookie = {\n ...(authInfo as Partial<JWTResponse>),\n cookieSameSite,\n cookieSecure,\n cookieDomain,\n };\n setJwtTokenCookie(cookieName, sessionJwt, authInfoWithCookie);\n\n // Cache the cookie options that were actually used\n const domainMatches = isCurrentDomainOrParentDomain(cookieDomain);\n cookieOptions = {\n ...cookieOptions,\n session: {\n path: authInfoWithCookie.cookiePath,\n domain: domainMatches ? cookieDomain : undefined,\n },\n };\n } else {\n setLocalStorage(`${storagePrefix}${SESSION_TOKEN_KEY}`, sessionJwt);\n }\n }\n\n if (authInfo.idToken) {\n setLocalStorage(`${storagePrefix}${ID_TOKEN_KEY}`, authInfo.idToken);\n }\n\n // persist trusted device token (DTD) in local storage if returned in response body\n // In cookie mode, backend sets DTD as HttpOnly cookie (inaccessible to JS)\n if (trustedDeviceJwt) {\n setLocalStorage(\n `${storagePrefix}${TRUSTED_DEVICE_TOKEN_KEY}`,\n trustedDeviceJwt,\n );\n }\n\n return cookieOptions;\n};\n\n/** Return the refresh token from cookie or localStorage */\nexport function getRefreshToken(\n prefix: string = '',\n refreshTokenViaCookie?: CookieConfig,\n) {\n return (\n Cookies.get(getRefreshCookieName(refreshTokenViaCookie)) ||\n getLocalStorage(`${prefix}${REFRESH_TOKEN_KEY}`) ||\n ''\n );\n}\n\n/**\n * Return the session token. first try to get from cookie, and fallback to local storage\n * See sessionTokenViaCookie option for more details about session token location\n */\nexport function getSessionToken(\n prefix: string = '',\n sessionTokenViaCookie?: CookieConfig,\n): string {\n return (\n Cookies.get(getSessionCookieName(sessionTokenViaCookie)) ||\n getLocalStorage(`${prefix}${SESSION_TOKEN_KEY}`) ||\n ''\n );\n}\n\nexport function getIdToken(prefix: string = ''): string {\n return getLocalStorage(`${prefix}${ID_TOKEN_KEY}`) || '';\n}\n\n/**\n * Return the trusted device token (DTD) from localStorage.\n */\nexport function getTrustedDeviceToken(prefix: string = ''): string {\n return getLocalStorage(`${prefix}${TRUSTED_DEVICE_TOKEN_KEY}`) || '';\n}\n\n/** Return the server-returned refresh cookie name from localStorage, if available */\nexport function getStoredRefreshCookieName(prefix: string = ''): string | null {\n return getLocalStorage(`${prefix}${REFRESH_COOKIE_NAME_KEY}`);\n}\n\n/** Remove auth tokens from localStorage (refresh JWT, session JWT, ID token, server-returned refresh cookie name)\n * and clear the corresponding cookies if configured.\n * Note: DTD (Trusted Device Token) is NOT removed as it should stay after logging out and outlive these tokens\n */\nexport function clearTokens(\n prefix: string = '',\n sessionTokenViaCookie?: CookieConfig,\n refreshTokenViaCookie?: CookieConfig,\n cookieOptions?: LastCookieOptions,\n) {\n removeLocalStorage(`${prefix}${REFRESH_TOKEN_KEY}`);\n removeLocalStorage(`${prefix}${SESSION_TOKEN_KEY}`);\n removeLocalStorage(`${prefix}${ID_TOKEN_KEY}`);\n removeLocalStorage(`${prefix}${REFRESH_COOKIE_NAME_KEY}`);\n const sessionCookieName = getSessionCookieName(sessionTokenViaCookie);\n Cookies.remove(sessionCookieName, cookieOptions?.session);\n\n const refreshCookieName = getRefreshCookieName(refreshTokenViaCookie);\n Cookies.remove(refreshCookieName, cookieOptions?.refresh);\n}\n\nexport const beforeRequest =\n (\n prefix?: string,\n refreshTokenViaCookie?: CookieConfig,\n refreshCookieName?: string,\n ): BeforeRequestHook =>\n (config) => {\n const updatedConfig = Object.assign(config, {\n token: config.token || getRefreshToken(prefix, refreshTokenViaCookie),\n });\n\n // Inject x-descope-refresh-cookie-name from localStorage when no SDK config override\n if (!refreshCookieName) {\n const storedCookieName = getStoredRefreshCookieName(prefix);\n if (storedCookieName) {\n updatedConfig.headers = {\n ...(updatedConfig.headers || {}),\n 'x-descope-refresh-cookie-name': storedCookieName,\n };\n }\n }\n\n // Always send DTD via header if available in localStorage\n // This ensures DTD is sent in both cookie and localStorage modes\n const dtd = getTrustedDeviceToken(prefix);\n if (dtd) {\n updatedConfig.headers = {\n ...(updatedConfig.headers || {}),\n 'x-descope-trusted-device-token': dtd,\n };\n }\n\n return updatedConfig;\n };\n","import { IS_BROWSER } from '../../constants';\n\nconst FINGERPRINT_ENDPOINT_URL = 'fingerprint.endpoint.url';\n\n/** Fingerprint.js cloudflare integration */\nexport const FP_EP_URL =\n (IS_BROWSER && localStorage?.getItem(FINGERPRINT_ENDPOINT_URL)) ||\n 'https://api.descope.com';\nexport const FP_CF_ENDPOINT_PATH = '/fXj8gt3x8VulJBna/x96Emn69oZwcd7I6';\nexport const FP_CF_SCRIPT_PATH = '/fXj8gt3x8VulJBna/w78aRZnnDZ3Aqw0I';\n/** Fingerprint visitor data */\nexport const FP_BODY_DATA = 'fpData';\n/** Session ID for visitor */\nexport const VISITOR_SESSION_ID_PARAM = 'vsid';\n/** Request ID for visitor */\nexport const VISITOR_REQUEST_ID_PARAM = 'vrid';\n/** FP storage key */\nexport const FP_STORAGE_KEY = 'fp';\n// Storage FP Keys TTL is 24 hours\nexport const STORAGE_TTL_MS = 24 * 60 * 60 * 1000;\n","/**\n * Fingerprint Pro v3.11.6 - Copyright (c) FingerprintJS, Inc, 2025 (https://fingerprint.com)\n */\n\nimport{__spreadArray as e,__rest as t,__assign as n}from\"tslib\";function r(e,t){return function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,t)?e[t]:void 0}function o(e,t,n,r){var o,i=document,a=\"securitypolicyviolation\",u=function(t){var n=new URL(e,location.href),r=t.blockedURI;r!==n.href&&r!==n.protocol.slice(0,-1)&&r!==n.origin||(o=t,R())};i.addEventListener(a,u);var R=function(){return i.removeEventListener(a,u)};return null==r||r.then(R,R),Promise.resolve().then(t).then((function(e){return R(),e}),(function(e){return new Promise((function(e){var t=new MessageChannel;t.port1.onmessage=function(){return e()},t.port2.postMessage(null)})).then((function(){if(R(),o)return n(o);throw e}))}))}var i={default:\"endpoint\"},a={default:\"tlsEndpoint\"},u=\"Client timeout\",R=\"Network connection error\",c=\"Network request aborted\",s=\"Response cannot be parsed\",f=\"Blocked by CSP\",l=\"The endpoint parameter is not a valid URL\";function E(e){for(var t=\"\",n=0;n<e.length;++n)if(n>0){var r=e[n].toLowerCase();r!==e[n]?t+=\" \".concat(r):t+=e[n]}else t+=e[n].toUpperCase();return t}var d=/*#__PURE__*/E(\"WrongRegion\"),p=/*#__PURE__*/E(\"SubscriptionNotActive\"),v=/*#__PURE__*/E(\"UnsupportedVersion\"),_=/*#__PURE__*/E(\"InstallationMethodRestricted\"),O=/*#__PURE__*/E(\"HostnameRestricted\"),h=/*#__PURE__*/E(\"IntegrationFailed\"),I=\"API key required\",N=\"API key not found\",T=\"API key expired\",m=\"Request cannot be parsed\",w=\"Request failed\",A=\"Request failed to process\",P=\"Too many requests, rate limit exceeded\",y=\"Not available for this origin\",D=\"Not available with restricted header\",S=I,g=N,L=T,U=\"3.11.6\",b=\"Failed to load the JS script of the agent\",C=\"9319\";function M(t,n){var r,o,i,a,u,R,c,s=[],E=(r=function(t){var n=e([],t,!0);return{current:function(){return n[0]},postpone:function(){var e=n.shift();void 0!==e&&n.push(e)},exclude:function(){n.shift()}}}(t),a=100,u=3e3,R=0,o=function(){return Math.random()*Math.min(u,a*Math.pow(2,R++))},i=new Set,[r.current(),function(e,t){var n,a=t instanceof Error?t.message:\"\";if(a===f||a===l)r.exclude(),n=0;else if(a===C)r.exclude();else if(a===b){var u=Date.now()-e.getTime()<50,R=r.current();R&&u&&!i.has(R)&&(i.add(R),n=0),r.postpone()}else r.postpone();var c=r.current();return void 0===c?void 0:[c,null!=n?n:e.getTime()+o()-Date.now()]}]),d=E[0],p=E[1];if(void 0===d)return Promise.reject(new TypeError(\"The list of script URL patterns is empty\"));var v=function(e){var t=new Date,r=function(n){return s.push({url:e,startedAt:t,finishedAt:new Date,error:n})},o=n(e);return o.then((function(){return r()}),r),o.catch((function(e){if(null!=c||(c=e),s.length>=5)throw c;var n=p(t,e);if(!n)throw c;var r,o=n[0],i=n[1];return(r=i,new Promise((function(e){return setTimeout(e,r)}))).then((function(){return v(o)}))}))};return v(d).then((function(e){return[e,s]}))}var K=\"https://fpnpmcdn.net/v<version>/<apiKey>/loader_v<loaderVersion>.js\",B=K;function F(e){var o;e.scriptUrlPattern;var i=e.token,a=e.apiKey,u=void 0===a?i:a,R=t(e,[\"scriptUrlPattern\",\"token\",\"apiKey\"]),c=null!==(o=r(e,\"scriptUrlPattern\"))&&void 0!==o?o:K,s=function(){var e=[],t=function(){e.push({time:new Date,state:document.visibilityState})},n=function(e,t,n,r){return e.addEventListener(t,n,r),function(){return e.removeEventListener(t,n,r)}}(document,\"visibilitychange\",t);return t(),[e,n]}(),f=s[0],l=s[1];return Promise.resolve().then((function(){if(!u||\"string\"!=typeof u)throw new Error(I);var e=function(e,t){return(Array.isArray(e)?e:[e]).map((function(e){return function(e,t){var n=encodeURIComponent;return e.replace(/<[^<>]+>/g,(function(e){return\"<version>\"===e?\"3\":\"<apiKey>\"===e?n(t):\"<loaderVersion>\"===e?n(U):e}))}(String(e),t)}))}(c,u);return M(e,V)})).catch((function(e){throw l(),function(e){if(e instanceof Error&&e.message===C)return new Error(b);return e}(e)})).then((function(e){var t=e[0],r=e[1];return l(),t.load(n(n({},R),{ldi:{attempts:r,visibilityStates:f}}))}))}function V(e){return o(e,(function(){return function(e){return new Promise((function(t,n){if(function(e){if(URL.prototype)try{return new URL(e,location.href),!1}catch(t){if(t instanceof Error&&\"TypeError\"===t.name)return!0;throw t}}(e))throw new Error(l);var r=document.createElement(\"script\"),o=function(){var e;return null===(e=r.parentNode)||void 0===e?void 0:e.removeChild(r)},i=document.head||document.getElementsByTagName(\"head\")[0];r.onload=function(){o(),t()},r.onerror=function(){o(),n(new Error(b))},r.async=!0,r.src=e,i.appendChild(r)}))}(e)}),(function(){throw new Error(f)})).then(k)}function k(){var e=window,t=\"__fpjs_p_l_b\",n=e[t];if(function(e,t){var n,r=null===(n=Object.getOwnPropertyDescriptor)||void 0===n?void 0:n.call(Object,e,t);(null==r?void 0:r.configurable)?delete e[t]:r&&!r.writable||(e[t]=void 0)}(e,t),\"function\"!=typeof(null==n?void 0:n.load))throw new Error(C);return n}var G={load:F,defaultScriptUrlPattern:B,ERROR_SCRIPT_LOAD_FAIL:b,ERROR_API_KEY_EXPIRED:T,ERROR_API_KEY_INVALID:N,ERROR_API_KEY_MISSING:I,ERROR_BAD_REQUEST_FORMAT:m,ERROR_BAD_RESPONSE_FORMAT:s,ERROR_CLIENT_TIMEOUT:u,ERROR_CSP_BLOCK:f,ERROR_FORBIDDEN_ENDPOINT:O,ERROR_FORBIDDEN_HEADER:D,ERROR_FORBIDDEN_ORIGIN:y,ERROR_GENERAL_SERVER_FAILURE:w,ERROR_INSTALLATION_METHOD_RESTRICTED:_,ERROR_INTEGRATION_FAILURE:h,ERROR_INVALID_ENDPOINT:l,ERROR_NETWORK_ABORT:c,ERROR_NETWORK_CONNECTION:R,ERROR_RATE_LIMIT:P,ERROR_SERVER_TIMEOUT:A,ERROR_SUBSCRIPTION_NOT_ACTIVE:p,ERROR_TOKEN_EXPIRED:L,ERROR_TOKEN_INVALID:g,ERROR_TOKEN_MISSING:S,ERROR_UNSUPPORTED_VERSION:v,ERROR_WRONG_REGION:d,defaultEndpoint:i,defaultTlsEndpoint:a};export{T as ERROR_API_KEY_EXPIRED,N as ERROR_API_KEY_INVALID,I as ERROR_API_KEY_MISSING,m as ERROR_BAD_REQUEST_FORMAT,s as ERROR_BAD_RESPONSE_FORMAT,u as ERROR_CLIENT_TIMEOUT,f as ERROR_CSP_BLOCK,O as ERROR_FORBIDDEN_ENDPOINT,D as ERROR_FORBIDDEN_HEADER,y as ERROR_FORBIDDEN_ORIGIN,w as ERROR_GENERAL_SERVER_FAILURE,_ as ERROR_INSTALLATION_METHOD_RESTRICTED,h as ERROR_INTEGRATION_FAILURE,l as ERROR_INVALID_ENDPOINT,c as ERROR_NETWORK_ABORT,R as ERROR_NETWORK_CONNECTION,P as ERROR_RATE_LIMIT,b as ERROR_SCRIPT_LOAD_FAIL,A as ERROR_SERVER_TIMEOUT,p as ERROR_SUBSCRIPTION_NOT_ACTIVE,L as ERROR_TOKEN_EXPIRED,g as ERROR_TOKEN_INVALID,S as ERROR_TOKEN_MISSING,v as ERROR_UNSUPPORTED_VERSION,d as ERROR_WRONG_REGION,G as default,i as defaultEndpoint,B as defaultScriptUrlPattern,a as defaultTlsEndpoint,F as load};\n","import {\n load,\n defaultEndpoint,\n defaultScriptUrlPattern,\n} from '@fingerprintjs/fingerprintjs-pro';\nimport {\n FP_EP_URL,\n FP_CF_ENDPOINT_PATH,\n FP_CF_SCRIPT_PATH,\n FP_STORAGE_KEY,\n STORAGE_TTL_MS,\n VISITOR_REQUEST_ID_PARAM,\n VISITOR_SESSION_ID_PARAM,\n} from './constants';\nimport { FingerprintObject } from './types';\nimport {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\n\nconst createFingerprintObject = (\n sessionId: string,\n requestId: string,\n): FingerprintObject => ({\n [VISITOR_SESSION_ID_PARAM]: sessionId,\n [VISITOR_REQUEST_ID_PARAM]: requestId,\n});\n\n/** Generate UUID based on current time and some randomness */\nconst generateUUID = () => {\n // return alphanumeric, sortable uuid of 27 characters\n return (\n Date.now().toString(36) +\n Math.random().toString(36).substring(2) + // removing '0.' prefix\n Math.random().toString(36).substring(2)\n ).substring(0, 27);\n};\n\n// Set FP data to storage with expiration\n// We set the request id and session id together so they will have the same TTL\n// This implementation is based on https://www.sohamkamani.com/javascript/localstorage-with-ttl-expiry/\nconst setFPToStorage = (value: FingerprintObject) => {\n const now = new Date();\n // `item` is an object which contains the value\n // as well as the time when it's supposed to expire\n const item = {\n value,\n expiry: now.getTime() + STORAGE_TTL_MS,\n };\n setLocalStorage(FP_STORAGE_KEY, JSON.stringify(item));\n};\n\n// Get Fingerprint from storage, will return null if not exists, or if expired\nconst getFPFromStorage = (returnExpired = false): FingerprintObject => {\n const itemStr = getLocalStorage(FP_STORAGE_KEY);\n // if the item doesn't exist, return null\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n const now = new Date();\n // compare the expiry time of the item with the current time\n // return null if needed\n if (now.getTime() > item.expiry && !returnExpired) {\n return null;\n }\n return item.value;\n};\n\n/**\n * Ensure fingerprint ids (request id, session id) exist.\n * If not, It will generate and load them into to browser storage.\n * NOTE: Using fingerprintJS data has cost, use considerably.\n * @param fpKey FingerprintJS API key\n */\nexport const ensureFingerprintIds = async (\n fpKey: string,\n baseUrl = FP_EP_URL,\n) => {\n try {\n if (getFPFromStorage()) {\n // FP is already in storage, no need to\n return;\n }\n\n const sessionId = generateUUID();\n\n const endpointUrl = new URL(baseUrl);\n endpointUrl.pathname = FP_CF_ENDPOINT_PATH;\n\n const patterUrl = new URL(baseUrl);\n patterUrl.pathname = FP_CF_SCRIPT_PATH;\n const scriptUrlPattern =\n patterUrl.toString() +\n '?apiKey=<apiKey>&version=<version>&loaderVersion=<loaderVersion>';\n\n // load from FingerprintJS\n const agentP = load({\n apiKey: fpKey,\n endpoint: [\n endpointUrl.toString(),\n defaultEndpoint, // Fallback to default endpoint in case of error\n ],\n scriptUrlPattern: [\n scriptUrlPattern,\n defaultScriptUrlPattern, // Fallback to default CDN in case of error\n ],\n });\n\n const agent = await agentP;\n const { requestId } = await agent.get({ linkedId: sessionId });\n const fpData = createFingerprintObject(sessionId, requestId);\n setFPToStorage(fpData);\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.warn('Could not load fingerprint', ex);\n }\n};\n\n/**\n * Get Fingerprint data (request ids) from storage, or create empty object\n * If data is expired, return it anyway\n */\nexport const getFingerprintData = (): FingerprintObject | null => {\n // get from storage if exists\n return getFPFromStorage(true);\n};\n\n/** Clear Fingerprint data from storage */\nexport const clearFingerprintData = () => {\n removeLocalStorage(FP_STORAGE_KEY);\n};\n","import { IS_BROWSER } from '../../constants';\nimport { CreateWebSdk } from '../../sdk';\nimport { BeforeRequestHook } from '../../types';\nimport { addHooks } from '../helpers';\nimport { FP_BODY_DATA } from './constants';\nimport { ensureFingerprintIds, getFingerprintData } from './helpers';\nimport { FingerprintOptions } from './types';\n\nconst beforeRequest: BeforeRequestHook = (config) => {\n const data = getFingerprintData();\n if (data && config.body) {\n config.body[FP_BODY_DATA] = data;\n }\n\n return config;\n};\n\n/**\n * Add fingerprint data to outgoing requests\n */\nexport const withFingerprint =\n <T extends CreateWebSdk>(createSdk: T) =>\n ({ fpKey, fpLoad, ...config }: Parameters<T>[0] & FingerprintOptions) => {\n if (!IS_BROWSER) {\n // Fingerprint is a client side only capability and will not work when running in the server (SSR)\n return createSdk(config);\n }\n\n // load fingerprint now if needed\n if (fpKey && fpLoad) {\n ensureFingerprintIds(fpKey).catch(\n // istanbul ignore next\n () => null,\n );\n }\n\n // Hook added always because fingerprint can be dynamic using flows\n return createSdk(addHooks(config, { beforeRequest }));\n };\n","export const FLOW_NONCE_PREFIX = 'descopeFlowNonce';\nexport const FLOW_NONCE_HEADER = 'X-Descope-Flow-Nonce';\n\nexport const FLOW_START_PATH = '/v1/flow/start';\nexport const FLOW_NEXT_PATH = '/v1/flow/next';\n\nexport const FLOW_NEXT_TTL = 3 * 60 * 60; // 3 hours in seconds\nexport const FLOW_START_TTL = 2 * 24 * 60 * 60; // 2 days in seconds\n","import { RequestConfig } from '@descope/core-js-sdk';\nimport {\n getLocalStorage,\n getLocalStorageKey,\n getLocalStorageLength,\n isLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\nimport {\n FLOW_NEXT_PATH,\n FLOW_NEXT_TTL,\n FLOW_NONCE_HEADER,\n FLOW_NONCE_PREFIX,\n FLOW_START_TTL,\n} from './constants';\nimport { StorageItem } from './types';\n\n// Helper to create storage key from execution ID\nconst getNonceKeyForExecution = (\n executionId: string,\n prefix: string = FLOW_NONCE_PREFIX,\n): string => {\n return `${prefix}${executionId}`;\n};\n\n// Get nonce from storage with expiration check\nconst getFlowNonce = (\n executionId: string,\n prefix: string = FLOW_NONCE_PREFIX,\n): string | null => {\n try {\n const key = getNonceKeyForExecution(executionId, prefix);\n const itemStr = getLocalStorage(key);\n\n if (!itemStr) {\n return null;\n }\n\n const item: StorageItem = JSON.parse(itemStr);\n\n if (item.expiry < Date.now()) {\n removeFlowNonce(executionId, prefix);\n return null;\n }\n\n return item.value;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error getting flow nonce:', e);\n return null;\n }\n};\n\n// Store nonce with appropriate TTL\nconst setFlowNonce = (\n executionId: string,\n nonce: string,\n isStart: boolean,\n prefix: string = FLOW_NONCE_PREFIX,\n): void => {\n try {\n const key = getNonceKeyForExecution(executionId, prefix);\n const ttlSeconds = isStart ? FLOW_START_TTL : FLOW_NEXT_TTL;\n\n const item: StorageItem = {\n value: nonce,\n expiry: Date.now() + ttlSeconds * 1000,\n isStart,\n };\n\n setLocalStorage(key, JSON.stringify(item));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error setting flow nonce:', e);\n }\n};\n\n// Remove nonce from storage\nconst removeFlowNonce = (\n executionId: string,\n prefix: string = FLOW_NONCE_PREFIX,\n): void => {\n try {\n const key = getNonceKeyForExecution(executionId, prefix);\n removeLocalStorage(key);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error removing flow nonce:', e);\n }\n};\n\n// Extract execution ID from special format\nconst extractExecId = (executionId: string): string | null => {\n const regex = /.*\\|#\\|(.*)/;\n return regex.exec(executionId)?.[1] || null;\n};\n\n// Extract nonce and execution ID from response\nconst extractFlowNonce = async (\n req: RequestConfig,\n response: Response,\n): Promise<{ nonce: string | null; executionId: string | null }> => {\n try {\n const nonce = response.headers.get(FLOW_NONCE_HEADER);\n\n // Clone the response to prevent body consumption\n let executionId = await response\n .clone()\n .json()\n .then((data) => data?.executionId || null)\n .catch(() => null);\n\n if (!executionId) {\n // Fallback to request\n executionId = getExecutionIdFromRequest(req);\n }\n\n return {\n nonce,\n executionId: extractExecId(executionId),\n };\n } catch (e) {\n return { nonce: null, executionId: null };\n }\n};\n\n// Get execution ID from request object\nconst getExecutionIdFromRequest = (req: RequestConfig): string | null => {\n if (req.path === FLOW_NEXT_PATH && req.body?.executionId) {\n return extractExecId(req.body.executionId);\n }\n\n return null;\n};\n\n// Remove expired nonces from storage\nconst cleanupExpiredNonces = (prefix: string = FLOW_NONCE_PREFIX): void => {\n try {\n if (!isLocalStorage) {\n return;\n }\n for (let i = 0; i < getLocalStorageLength(); i++) {\n const key = getLocalStorageKey(i);\n\n if (key && key.startsWith(prefix)) {\n const itemStr = getLocalStorage(key);\n\n if (itemStr) {\n try {\n const item: StorageItem = JSON.parse(itemStr);\n\n if (item.expiry < Date.now()) {\n removeLocalStorage(key);\n }\n } catch (parseError) {\n removeLocalStorage(key);\n }\n }\n }\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error cleaning up expired nonces:', e);\n }\n};\n\nexport {\n cleanupExpiredNonces,\n extractFlowNonce,\n getExecutionIdFromRequest,\n getFlowNonce,\n getNonceKeyForExecution,\n removeFlowNonce,\n setFlowNonce,\n};\n","/** Login Id of the last user logged in */\nexport const LOCAL_STORAGE_LAST_USER_LOGIN_ID = 'dls_last_user_login_id';\n\n/** Display name of the last user logged in */\nexport const LOCAL_STORAGE_LAST_USER_DISPLAY_NAME =\n 'dls_last_user_display_name';\n","import {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\nimport {\n LOCAL_STORAGE_LAST_USER_LOGIN_ID,\n LOCAL_STORAGE_LAST_USER_DISPLAY_NAME,\n} from './constants';\n\nexport const setLastUserLoginId = (loginId: string) => {\n return setLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID, loginId);\n};\n\nexport const getLastUserLoginId = () => {\n return getLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID);\n};\n\nexport const removeLastUserLoginId = () => {\n return removeLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID);\n};\n\nexport const setLastUserDisplayName = (displayName: string) => {\n return setLocalStorage(LOCAL_STORAGE_LAST_USER_DISPLAY_NAME, displayName);\n};\n\nexport const getLastUserDisplayName = () => {\n return getLocalStorage(LOCAL_STORAGE_LAST_USER_DISPLAY_NAME);\n};\n\nexport const removeLastUserDisplayName = () => {\n return removeLocalStorage(LOCAL_STORAGE_LAST_USER_DISPLAY_NAME);\n};\n","import { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook, CoreSdk } from '../../types';\nimport { addHooks, getUserAndLastAuthFromResponse } from '../helpers';\nimport {\n getLastUserLoginId,\n removeLastUserLoginId,\n setLastUserLoginId,\n getLastUserDisplayName,\n removeLastUserDisplayName,\n setLastUserDisplayName,\n} from './helpers';\nimport { LastLoggedInUserOptions } from './types';\n\n/**\n * Adds last logged in user to flow start request\n */\n// eslint-disable-next-line import/exports-last\nexport const withLastLoggedInUser =\n <T extends CreateWebSdk>(createSdk: T) =>\n ({\n storeLastAuthenticatedUser = true,\n keepLastAuthenticatedUserAfterLogout = false,\n ...config\n }: Parameters<T>[0] & LastLoggedInUserOptions): ReturnType<T> & {\n getLastUserLoginId: typeof getLastUserLoginId;\n getLastUserDisplayName: typeof getLastUserDisplayName;\n } => {\n if (!storeLastAuthenticatedUser) {\n // We assign getLastUserLoginId and getLastUserDisplayName to the sdk\n // To keep the return type consistent\n return Object.assign(createSdk(config), {\n getLastUserLoginId,\n getLastUserDisplayName,\n }) as any;\n }\n const afterRequest: AfterRequestHook = async (_req, res) => {\n const { userInfo, lastAuth } = await getUserAndLastAuthFromResponse(res);\n const loginId = userInfo?.loginIds?.[0];\n const displayName = userInfo?.name;\n if (loginId) {\n setLastUserLoginId(loginId);\n setLastUserDisplayName(displayName);\n } else if (lastAuth?.loginId) {\n setLastUserLoginId(lastAuth.loginId);\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n let wrappedSdk = wrapWith(sdk, ['flow.start'], startWrapper);\n wrappedSdk = wrapWith(\n wrappedSdk,\n ['logout', 'logoutAll'],\n logoutWrapper(keepLastAuthenticatedUserAfterLogout),\n );\n return Object.assign(wrappedSdk, {\n getLastUserLoginId,\n getLastUserDisplayName,\n }) as any;\n };\n\nconst startWrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n args[1] = args[1] || {};\n const [, options = {}] = args as unknown as Parameters<\n CoreSdk['flow']['start']\n >;\n const loginId = getLastUserLoginId();\n const displayName = getLastUserDisplayName();\n\n if (loginId) {\n options.lastAuth ??= {};\n options.lastAuth.loginId = loginId;\n options.lastAuth.name = displayName;\n }\n\n const resp = await fn(...args);\n\n return resp;\n };\n\nconst logoutWrapper =\n (keepOnLogout?: boolean): SdkFnWrapper<{}> =>\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n if (keepOnLogout) {\n return resp;\n }\n\n removeLastUserLoginId();\n removeLastUserDisplayName();\n\n return resp;\n };\n","/** localStorage key indicating this browser has an active authenticated session.\n * Presence is used to decide whether the up-front /try-refresh call can be skipped. */\nexport const LOGGED_IN_INDICATOR_KEY = 'DSLI';\n\n/** Hidden escape hatch: set this key to any non-empty value in localStorage to\n * force tryRefresh even when no login indicator is present.\n * Useful for apps with storeLastAuthenticatedUser=false whose users get stuck\n * logged-out after upgrading (no DSLI written yet). Not documented intentionally. */\nexport const LOGGED_IN_INDICATOR_DISABLED_KEY = 'DSLI_DISABLED';\n","import { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport {\n addHooks,\n getAuthInfoFromResponse,\n isInvalidSessionResponse,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\nimport { LOGGED_IN_INDICATOR_KEY } from './constants';\n\nconst logoutWrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n removeLocalStorage(LOGGED_IN_INDICATOR_KEY);\n return resp;\n };\n\n// The DSLI key is intentionally unprefixed — same convention as the lastUser\n// localStorage key (`dls_last_user_login_id`) which is the bootstrap fallback\n// used by `hasLoginIndicator`.\nconst withLoggedInIndicator =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0]): ReturnType<T> => {\n const afterRequest: AfterRequestHook = async (req, res) => {\n if (isInvalidSessionResponse(req, res)) {\n removeLocalStorage(LOGGED_IN_INDICATOR_KEY);\n return;\n }\n const authInfo = await getAuthInfoFromResponse(res);\n // sessionExpiration is the reliable auth-success signal — JWTs may live in\n // HttpOnly cookies, but sessionExpiration is always in the response body.\n if (authInfo?.sessionExpiration) {\n setLocalStorage(\n LOGGED_IN_INDICATOR_KEY,\n String(authInfo.sessionExpiration),\n );\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n const wrappedSdk = wrapWith(\n sdk,\n ['logout', 'logoutAll', 'oidc.logout'],\n logoutWrapper,\n );\n\n return wrappedSdk as ReturnType<T>;\n };\n\nexport { withLoggedInIndicator };\nexport default withLoggedInIndicator;\n","// create publisher/subscriber instances\nexport function createPubSub<T extends any>() {\n const cbs = [];\n\n const sub = (cb: (data: T) => void) => {\n const idx = cbs.push(cb) - 1;\n return () => cbs.splice(idx, 1);\n };\n\n const pub = (data: T) => {\n cbs.forEach((cb) => cb(data));\n };\n\n return { pub, sub };\n}\n","import {\n Claims,\n SdkFnWrapper,\n UserResponse,\n wrapWith,\n} from '@descope/core-js-sdk';\nimport { CreateWebSdk, WebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport {\n addHooks,\n getAuthInfoFromResponse,\n getUserFromResponse,\n isInvalidSessionResponse,\n} from '../helpers';\nimport { createPubSub } from './helpers';\nimport logger from '../helpers/logger';\n\n/**\n * Adds 4 event functions to the sdk,\n * onSessionTokenChange: Gets a callback and call it whenever there is a change in session token\n * onIsAuthenticatedChange: Gets a callback and call it whenever there is a change in authentication status\n * onUserChange: Gets a callback and call it whenever there is a change in current logged in user\n * onClaimsChange: Gets a callback and call it whenever there is a change in the JWT claims\n */\nexport const withNotifications =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0]) => {\n const sessionExpirationPS = createPubSub<number | null>();\n const sessionPS = createPubSub<string | null>();\n const userPS = createPubSub<UserResponse | null>();\n const claimsPS = createPubSub<Claims | null>();\n\n const afterRequest: AfterRequestHook = async (req, res) => {\n if (isInvalidSessionResponse(req, res)) {\n logger.debug(\n 'Session invalidated, notifying subscribers with empty values',\n );\n sessionPS.pub(null);\n userPS.pub(null);\n sessionExpirationPS.pub(null);\n claimsPS.pub(null);\n } else {\n const userDetails = await getUserFromResponse(res);\n if (userDetails) userPS.pub(userDetails);\n\n const { sessionJwt, sessionExpiration, claims } =\n await getAuthInfoFromResponse(res);\n\n if (sessionJwt) sessionPS.pub(sessionJwt);\n if (claims) claimsPS.pub(claims);\n\n if (sessionExpiration || sessionJwt) {\n // We also publish the session expiration if there is a session jwt\n // as a temporary fix for the issue where the session expiration is not\n // being sent in the response in Flows (42 is a magic number)\n sessionExpirationPS.pub(sessionExpiration || 42);\n }\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n const wrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n\n sessionPS.pub(null);\n userPS.pub(null);\n sessionExpirationPS.pub(null);\n claimsPS.pub(null);\n\n return resp;\n };\n\n const wrappedSdk = wrapWith(\n sdk,\n ['logout', 'logoutAll', 'oidc.logout'],\n wrapper,\n );\n\n return Object.assign(wrappedSdk, {\n onSessionTokenChange: sessionPS.sub,\n onUserChange: userPS.sub,\n onClaimsChange: claimsPS.sub,\n onIsAuthenticatedChange: (cb: (isAuthenticated: boolean) => void) => {\n // If and only if there is a session expiration, then the user is authenticated\n return sessionExpirationPS.sub((exp) => {\n cb(!!exp);\n });\n },\n });\n };\n","/* eslint-disable import/exports-last */\nimport { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { IS_BROWSER } from '../../constants';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport {\n addHooks,\n getAuthInfoFromResponse,\n isInvalidSessionResponse,\n setLocalStorage,\n removeLocalStorage,\n} from '../helpers';\nimport {\n beforeRequest,\n clearTokens,\n getRefreshToken,\n getSessionToken,\n persistTokens,\n getIdToken,\n} from './helpers';\nimport { REFRESH_COOKIE_NAME_KEY } from './constants';\nimport { CookieConfig, LastCookieOptions, PersistTokensOptions } from './types';\nimport logger from '../helpers/logger';\n\n/**\n * Persist authentication tokens in cookie/storage\n */\nexport const withPersistTokens =\n <T extends CreateWebSdk>(createSdk: T) =>\n <A extends CookieConfig>({\n persistTokens: isPersistTokens,\n sessionTokenViaCookie,\n refreshTokenViaCookie,\n storagePrefix,\n refreshCookieName,\n ...config\n }: Parameters<T>[0] & PersistTokensOptions<A>): A extends false\n ? ReturnType<T>\n : ReturnType<T> & {\n getRefreshToken: () => string;\n getSessionToken: () => string;\n getIdToken: () => string;\n } => {\n if (!isPersistTokens || !IS_BROWSER) {\n if (isPersistTokens) {\n // Storing auth tokens in local storage and cookies are a client side only capabilities\n // and will not be done when running in the server\n }\n return createSdk({ refreshCookieName, ...config }) as any;\n }\n\n // Cache to store the cookie options that were used when setting the cookie\n // This allows us to use the exact same options when removing the cookie\n let lastCookieOptions: LastCookieOptions | undefined;\n\n const afterRequest: AfterRequestHook = async (req, res) => {\n if (isInvalidSessionResponse(req, res)) {\n logger.debug('Session invalidated, clearing persisted tokens');\n clearTokens(\n storagePrefix,\n sessionTokenViaCookie,\n refreshTokenViaCookie,\n lastCookieOptions,\n );\n } else {\n const authInfo = await getAuthInfoFromResponse(res);\n\n // Persist or clear server-returned refresh cookie name based on auth response\n if (authInfo.cookieName) {\n setLocalStorage(\n `${storagePrefix || ''}${REFRESH_COOKIE_NAME_KEY}`,\n authInfo.cookieName,\n );\n } else if (authInfo.refreshJwt) {\n // Auth response issued a new refresh token but no custom cookie name —\n // clear any stale value so we don't keep sending an outdated name\n removeLocalStorage(\n `${storagePrefix || ''}${REFRESH_COOKIE_NAME_KEY}`,\n );\n }\n\n const newCookieOptions = persistTokens(\n authInfo,\n sessionTokenViaCookie,\n storagePrefix,\n refreshTokenViaCookie,\n );\n // Only update lastCookieOptions if we actually set a cookie\n if (newCookieOptions) {\n lastCookieOptions = newCookieOptions;\n }\n }\n };\n\n const sdk = createSdk(\n addHooks(\n { refreshCookieName, ...config },\n {\n beforeRequest: beforeRequest(\n storagePrefix,\n refreshTokenViaCookie,\n refreshCookieName,\n ),\n afterRequest,\n },\n ),\n );\n\n const wrappedSdk = wrapWith(\n sdk,\n ['logout', 'logoutAll', 'oidc.logout'],\n logoutWrapper(\n storagePrefix,\n sessionTokenViaCookie,\n refreshTokenViaCookie,\n () => lastCookieOptions,\n ),\n );\n\n const refreshToken = () =>\n getRefreshToken(storagePrefix, refreshTokenViaCookie);\n const sessionToken = () =>\n getSessionToken(storagePrefix, sessionTokenViaCookie);\n const idToken = () => getIdToken(storagePrefix);\n\n return Object.assign(wrappedSdk, {\n getRefreshToken: refreshToken,\n getSessionToken: sessionToken,\n getIdToken: idToken,\n }) as any;\n };\n\nconst logoutWrapper =\n (\n prefix?: string,\n sessionTokenViaCookie?: CookieConfig,\n refreshTokenViaCookie?: CookieConfig,\n getCookieOptions?: () => LastCookieOptions | undefined,\n ): SdkFnWrapper<{}> =>\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n\n clearTokens(\n prefix,\n sessionTokenViaCookie,\n refreshTokenViaCookie,\n getCookieOptions?.(),\n );\n\n return resp;\n };\n\nexport default withPersistTokens;\n","import { JWTResponse, SdkResponse, ResponseData } from '@descope/core-js-sdk';\nimport { IS_BROWSER } from '../constants';\nimport { CoreSdk, PasskeyOptions } from '../types';\nimport { isDescopeBridge } from '../enhancers/helpers';\n\ntype CreateWebauthn = typeof createWebAuthn;\n\nconst withCoreFns =\n <I extends Parameters<CreateWebauthn>, O extends ReturnType<CreateWebauthn>>(\n creator: (...args: I) => O,\n ) =>\n (...args: I) => {\n const obj = creator(...args);\n\n Object.assign(obj.signUp, args[0].webauthn.signUp);\n Object.assign(obj.signIn, args[0].webauthn.signIn);\n Object.assign(obj.signUpOrIn, args[0].webauthn.signUpOrIn);\n Object.assign(obj.update, args[0].webauthn.update);\n\n return obj as {\n [K in keyof O]: K extends keyof I[0]['webauthn']\n ? O[K] & I[0]['webauthn'][K]\n : O[K];\n };\n };\n\n/** Constructs a higher level WebAuthn API that wraps the functions from code-js-sdk */\nconst createWebAuthn = (sdk: CoreSdk) => ({\n async signUp(\n identifier: string,\n name: string,\n passkeyOptions?: PasskeyOptions,\n ) {\n const startResponse = await sdk.webauthn.signUp.start(\n identifier,\n window.location.origin,\n name,\n passkeyOptions,\n );\n if (!startResponse.ok) {\n return startResponse as unknown as SdkResponse<JWTResponse>;\n }\n const createResponse = await create(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signUp.finish(\n startResponse.data.transactionId,\n createResponse,\n );\n return finishResponse;\n },\n\n async signIn(identifier: string, passkeyOptions?: PasskeyOptions) {\n const startResponse = await sdk.webauthn.signIn.start(\n identifier,\n window.location.origin,\n undefined,\n undefined,\n passkeyOptions,\n );\n if (!startResponse.ok) {\n return startResponse as unknown as SdkResponse<JWTResponse>;\n }\n const getResponse = await get(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signIn.finish(\n startResponse.data.transactionId,\n getResponse,\n );\n return finishResponse;\n },\n\n async signUpOrIn(identifier: string, passkeyOptions?: PasskeyOptions) {\n const startResponse = await sdk.webauthn.signUpOrIn.start(\n identifier,\n window.location.origin,\n passkeyOptions,\n );\n if (!startResponse.ok) {\n return startResponse as unknown as SdkResponse<JWTResponse>;\n }\n if (startResponse.data?.create) {\n const createResponse = await create(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signUp.finish(\n startResponse.data.transactionId,\n createResponse,\n );\n return finishResponse;\n } else {\n const getResponse = await get(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signIn.finish(\n startResponse.data.transactionId,\n getResponse,\n );\n return finishResponse;\n }\n },\n\n async update(\n identifier: string,\n token?: string,\n passkeyOptions?: PasskeyOptions,\n ) {\n const startResponse = await sdk.webauthn.update.start(\n identifier,\n window.location.origin,\n token,\n passkeyOptions,\n );\n if (!startResponse.ok) {\n return startResponse as SdkResponse<ResponseData>;\n }\n const createResponse = await create(startResponse.data.options);\n const finishResponse = await sdk.webauthn.update.finish(\n startResponse.data.transactionId,\n createResponse,\n );\n return finishResponse;\n },\n\n /** Helper functions for working with WebAuthn browser APIs using JSON data */\n helpers: {\n /** Wraps the navigation.credentials.create call to translate JSON inputs and outputs */\n create,\n /** Wraps the navigation.credentials.get call to translate JSON inputs and outputs */\n get,\n /** Checks if the browser supports WebAuthn, and can optionally require in\n * addition that the browser supports WebAuthn with built-in biometrics */\n isSupported,\n conditional,\n },\n});\n\n// Helpers functions\n\nasync function create(options: string): Promise<string> {\n const createOptions = decodeCreateOptions(options);\n const createResponse = (await navigator.credentials.create(\n createOptions,\n )) as AttestationPublicKeyCredential;\n return encodeCreateResponse(createResponse);\n}\n\nasync function get(options: string): Promise<string> {\n const getOptions = decodeGetOptions(options);\n const getResponse = (await navigator.credentials.get(\n getOptions,\n )) as AssertionPublicKeyCredential;\n return encodeGetResponse(getResponse);\n}\n\n/**\n * This function should be used in passkeys autofill (conditional UI)\n * It handles the call to \"navigator.credentials.get\" and adds the required options\n * @param options webauthn start options\n * @param abort: AbortController instance\n * @returns encoded \"navigator.credentials.get\" response\n */\nasync function conditional(\n options: string,\n abort: AbortController,\n): Promise<string> {\n const getOptions = decodeGetOptions(options);\n getOptions.signal = abort.signal;\n getOptions.mediation = 'conditional' as any;\n const getResponse = (await navigator.credentials.get(\n getOptions,\n )) as AssertionPublicKeyCredential;\n return encodeGetResponse(getResponse);\n}\n\n// eslint-disable-next-line import/exports-last\nexport async function isSupported(\n requirePlatformAuthenticator: boolean = false,\n): Promise<boolean> {\n if (!IS_BROWSER) {\n return Promise.resolve(false);\n }\n // when running in a native bridge we defer the support decision to the native side,\n // but only if the mobile SDK version is recent enough to support this flag in hostInfo\n if (isDescopeBridge()) {\n const supported = (window as any).descopeBridge?.hostInfo?.webauthn;\n if (typeof supported === 'boolean') {\n return supported;\n }\n }\n const supported = !!(\n window.PublicKeyCredential &&\n navigator.credentials &&\n navigator.credentials.create &&\n navigator.credentials.get\n );\n if (\n supported &&\n requirePlatformAuthenticator &&\n PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable\n ) {\n return PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();\n }\n return supported;\n}\n\n// Conversion of data structures for Create/Attestation/Register ceremony\n\ntype AttestationPublicKeyCredential = PublicKeyCredential & {\n response: AuthenticatorAttestationResponse;\n};\n\nfunction decodeCreateOptions(value: string): CredentialCreationOptions {\n const options = JSON.parse(value);\n options.publicKey.challenge = decodeBase64Url(options.publicKey.challenge);\n options.publicKey.user.id = decodeBase64Url(options.publicKey.user.id);\n options.publicKey.excludeCredentials?.forEach((item: any) => {\n item.id = decodeBase64Url(item.id);\n });\n return options;\n}\n\nfunction encodeCreateResponse(\n credential: AttestationPublicKeyCredential,\n): string {\n return JSON.stringify({\n id: credential.id,\n rawId: encodeBase64Url(credential.rawId),\n type: credential.type,\n response: {\n attestationObject: encodeBase64Url(credential.response.attestationObject),\n clientDataJSON: encodeBase64Url(credential.response.clientDataJSON),\n },\n });\n}\n\n// Conversion of data structures for Get/Assertion/Login ceremony\n\ntype AssertionPublicKeyCredential = PublicKeyCredential & {\n response: AuthenticatorAssertionResponse;\n};\n\nfunction decodeGetOptions(value: string): CredentialRequestOptions {\n const options = JSON.parse(value);\n options.publicKey.challenge = decodeBase64Url(options.publicKey.challenge);\n options.publicKey.allowCredentials?.forEach((item: any) => {\n item.id = decodeBase64Url(item.id);\n });\n return options;\n}\n\nfunction encodeGetResponse(credential: AssertionPublicKeyCredential): string {\n return JSON.stringify({\n id: credential.id,\n rawId: encodeBase64Url(credential.rawId),\n type: credential.type,\n response: {\n authenticatorData: encodeBase64Url(credential.response.authenticatorData),\n clientDataJSON: encodeBase64Url(credential.response.clientDataJSON),\n signature: encodeBase64Url(credential.response.signature),\n userHandle: credential.response.userHandle\n ? encodeBase64Url(credential.response.userHandle)\n : undefined,\n },\n });\n}\n\n// Conversion between ArrayBuffers and Base64Url strings\n\nfunction decodeBase64Url(value: string): ArrayBufferLike {\n const base64 = value.replace(/_/g, '/').replace(/-/g, '+');\n return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)).buffer;\n}\n\nfunction encodeBase64Url(value: ArrayBufferLike): string {\n const base64 = btoa(String.fromCharCode.apply(null, new Uint8Array(value)));\n return base64.replace(/\\//g, '_').replace(/\\+/g, '-').replace(/=/g, '');\n}\n\n// Exports\nexport default withCoreFns(createWebAuthn);\n","export const apiPaths = {\n fedcm: {\n config: '/fedcm/config',\n },\n};\n","import { JWTResponse, SdkResponse, LoginOptions } from '@descope/core-js-sdk';\nimport { CoreSdk } from '../types';\nimport { IS_BROWSER } from '../constants';\nimport { apiPaths } from '../apiPaths';\n\n/**\n * Configuration for OneTap.\n */\ninterface OneTapConfig {\n /** Whether to auto select. Optional. */\n auto_select?: boolean;\n\n /** Whether to cancel on tap outside. Optional. */\n cancel_on_tap_outside?: boolean;\n\n /** ID of the prompt parent. Optional. */\n prompt_parent_id?: string;\n\n /** Context. Optional. */\n context?: 'signin' | 'signup' | 'use';\n\n /** Callback function to handle the intermediate iframe close event. Optional. */\n intermediate_iframe_close_callback?: () => void;\n\n /** Whether to support ITP. Optional. */\n itp_support?: boolean;\n\n /** Login hint. Optional. */\n login_hint?: string;\n\n /** HD. Optional. */\n hd?: string;\n\n /** Whether to use FedCM for prompt. Optional. */\n use_fedcm_for_prompt?: boolean;\n}\n\n/**\n * Response from the credential.\n */\ninterface CredentialResponse {\n /** Credential. */\n credential: string;\n\n /** How the selection was made. */\n select_by:\n | 'auto'\n | 'user'\n | 'user_1tap'\n | 'user_2tap'\n | 'btn'\n | 'btn_confirm'\n | 'btn_add_session'\n | 'btn_confirm_add_session';\n}\n\ninterface FedCMAssertionResponse {\n token: string;\n error: {\n code: string;\n url: string;\n };\n}\n\ninterface IdentityProviderConfig {\n configURL: string;\n clientId: string;\n}\n\ntype IdentityCredentialRequestOptionsContext =\n | 'signin'\n | 'signup'\n | 'use'\n | 'continue';\n\ninterface IdentityProviderRequestOptions extends IdentityProviderConfig {\n nonce?: string;\n loginHint?: string;\n domainHint?: string;\n}\n\ninterface IdentityCredentialRequestOptions {\n providers: IdentityProviderRequestOptions[];\n context?: IdentityCredentialRequestOptionsContext;\n}\n\ninterface FedCMCredentialRequestOptions {\n identity?: IdentityCredentialRequestOptions;\n}\n\ntype OneTapInitialize = ({\n client_id,\n callback,\n nonce,\n}: {\n client_id: string;\n callback: (res: CredentialResponse) => void;\n nonce: string;\n} & OneTapConfig) => void;\n\ntype PromptNotification = {\n isSkippedMoment: () => boolean;\n isDismissedMoment: () => boolean;\n getDismissedReason: () => string;\n getSkippedReason: () => string;\n};\n\nconst generateNonce = () => {\n if (window.crypto && window.crypto.getRandomValues) {\n const array = new Uint8Array(16); // 16 bytes = 128 bits\n window.crypto.getRandomValues(array);\n return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join(\n '',\n );\n } else {\n // Fallback (not cryptographically secure)\n return Math.random().toString(36).substring(2);\n }\n};\n\n/**\n * Constructs a higher level FedCM API that wraps the functions from code-js-sdk.\n * @param sdk The CoreSdk instance.\n * @returns The FedCM API.\n */\nconst createFedCM = (sdk: CoreSdk, projectId: string) => ({\n onetap: {\n requestExchangeCode(options: {\n provider?: string;\n oneTapConfig?: OneTapConfig;\n loginOptions?: LoginOptions;\n onSkipped?: (reason?: string) => void;\n onDismissed?: (reason?: string) => void;\n onFailed?: (error: Error) => void;\n onCodeReceived: (code: string) => void;\n }) {\n performOneTap(sdk, options);\n },\n\n requestAuthentication(options?: {\n provider?: string;\n oneTapConfig?: OneTapConfig;\n loginOptions?: LoginOptions;\n onSkipped?: (reason?: string) => void;\n onDismissed?: (reason?: string) => void;\n onFailed?: (error: Error) => void;\n onAuthenticated?: (response: JWTResponse) => void;\n }) {\n performOneTap(sdk, options);\n },\n },\n\n /**\n * @deprecated Call `onetap.requestAuthentication` instead.\n */\n async oneTap(\n provider?: string,\n oneTapConfig?: OneTapConfig,\n loginOptions?: LoginOptions,\n onSkipped?: (reason?: string) => void,\n onDismissed?: (reason?: string) => void,\n ) {\n await performOneTapAsync(sdk, {\n provider,\n oneTapConfig,\n loginOptions,\n onSkipped,\n onDismissed,\n });\n },\n\n async launch(\n context?: IdentityCredentialRequestOptionsContext,\n ): Promise<SdkResponse<JWTResponse>> {\n const configURL = sdk.httpClient.buildUrl(\n projectId + apiPaths.fedcm.config,\n );\n const req: FedCMCredentialRequestOptions = {\n identity: {\n context: context || 'signin',\n providers: [\n {\n configURL,\n clientId: projectId,\n },\n ],\n },\n };\n const res = await navigator.credentials?.get(req as any);\n return sdk.refresh((res as any as FedCMAssertionResponse).token);\n },\n\n isSupported(): boolean {\n return IS_BROWSER && 'IdentityCredential' in window;\n },\n\n async isLoggedIn(\n context?: IdentityCredentialRequestOptionsContext,\n ): Promise<boolean> {\n const configURL = sdk.httpClient.buildUrl(\n projectId + apiPaths.fedcm.config,\n );\n try {\n const req: FedCMCredentialRequestOptions = {\n identity: {\n context: context || 'signin',\n providers: [\n {\n configURL,\n clientId: projectId,\n },\n ],\n },\n };\n const res = await navigator.credentials?.get(req as any);\n return !!res && !!(res as any as FedCMAssertionResponse).token;\n } catch (e) {\n // Any error likely indicates no active session.\n return false;\n }\n },\n});\n\n// Helpers functions\nasync function getGoogleClient(): Promise<{\n initialize: OneTapInitialize;\n prompt: (cb: (notification: PromptNotification) => void) => void;\n}> {\n return new Promise((resolve, reject) => {\n if ((window as any).google) {\n resolve((window as any).google.accounts.id);\n return;\n }\n\n /* istanbul ignore next */\n let googleScript = document.getElementById(\n 'google-gsi-client-script',\n ) as HTMLScriptElement;\n\n /* istanbul ignore next */\n if (!googleScript) {\n googleScript = document.createElement('script');\n document.head.appendChild(googleScript);\n googleScript.async = true;\n googleScript.defer = true;\n googleScript.id = 'google-gsi-client-script';\n googleScript.src = 'https://accounts.google.com/gsi/client';\n }\n\n /* istanbul ignore next */\n googleScript.onload = function () {\n if ((window as any).google) {\n resolve((window as any).google.accounts.id);\n } else {\n reject('Failed to load Google GSI client script - not loaded properly');\n }\n };\n /* istanbul ignore next */\n googleScript.onerror = function () {\n reject('Failed to load Google GSI client script - failed to load');\n };\n });\n}\n\nasync function performOneTap(\n sdk: CoreSdk,\n options?: {\n provider?: string;\n oneTapConfig?: OneTapConfig;\n loginOptions?: LoginOptions;\n onSkipped?: (reason?: string) => void;\n onDismissed?: (reason?: string) => void;\n onFailed?: (error: Error) => void;\n onCodeReceived?: (code: string) => void;\n onAuthenticated?: (response: JWTResponse) => void;\n },\n) {\n try {\n await performOneTapAsync(sdk, options);\n } catch (e) {\n options?.onFailed?.(e);\n }\n}\n\nasync function performOneTapAsync(\n sdk: CoreSdk,\n options?: {\n provider?: string;\n oneTapConfig?: OneTapConfig;\n loginOptions?: LoginOptions;\n onSkipped?: (reason?: string) => void;\n onDismissed?: (reason?: string) => void;\n onCodeReceived?: (code: string) => void;\n onAuthenticated?: (response: JWTResponse) => void;\n },\n) {\n const auth = await startOneTap(\n sdk,\n options.provider,\n options.oneTapConfig,\n options.onSkipped,\n options.onDismissed,\n );\n if (!auth.credential) {\n return null;\n }\n if (options?.onCodeReceived) {\n const response = await sdk.oauth.verifyOneTapIDToken(\n auth.provider,\n auth.credential,\n auth.nonce,\n options?.loginOptions,\n );\n if (!response.ok || !response.data) {\n throw new Error(\n 'Failed to verify OneTap client ID for provider ' + auth.provider,\n );\n }\n options?.onCodeReceived?.(response.data.code);\n } else {\n const response = await sdk.oauth.exchangeOneTapIDToken(\n auth.provider,\n auth.credential,\n auth.nonce,\n options?.loginOptions,\n );\n if (!response.ok || !response.data) {\n throw new Error(\n 'Failed to exchange OneTap client ID for provider ' + auth.provider,\n );\n }\n options?.onAuthenticated?.(response.data);\n }\n}\n\nasync function startOneTap(\n sdk: CoreSdk,\n provider: string = 'google',\n oneTapConfig?: OneTapConfig,\n onSkipped?: (reason?: string) => void,\n onDismissed?: (reason?: string) => void,\n): Promise<{\n provider: string;\n nonce: string;\n credential?: string;\n}> {\n const nonce = generateNonce();\n const googleClient = await getGoogleClient();\n\n const clientIdRes = await sdk.oauth.getOneTapClientId(provider);\n if (!clientIdRes.ok) {\n throw new Error('Failed to get OneTap client ID for provider ' + provider);\n }\n const clientId = clientIdRes.data.clientId;\n\n return new Promise((resolve) => {\n const callback = (response?: CredentialResponse) => {\n resolve({\n provider,\n nonce,\n credential: response?.credential,\n });\n };\n\n googleClient.initialize({\n ...oneTapConfig,\n itp_support: oneTapConfig?.itp_support ?? true,\n use_fedcm_for_prompt: oneTapConfig?.use_fedcm_for_prompt ?? true,\n client_id: clientId,\n callback,\n nonce,\n });\n\n googleClient.prompt((notification) => {\n if (onDismissed && notification?.isDismissedMoment()) {\n const reason = notification.getDismissedReason?.();\n onDismissed?.(reason);\n callback();\n return;\n }\n\n if (onSkipped && notification?.isSkippedMoment()) {\n const reason = notification.getSkippedReason?.();\n onSkipped?.(reason);\n callback();\n return;\n }\n });\n });\n}\n\nexport default createFedCM;\nexport type { OneTapConfig };\n","import { CoreSdk, ReplaceParam } from '../types';\nimport { isSupported } from './webauthn';\n\ntype CoreSdkFlowStartArgs = Parameters<CoreSdk['flow']['start']>;\ntype Options = Pick<\n CoreSdkFlowStartArgs[1],\n | 'tenant'\n | 'redirectUrl'\n | 'redirectAuth'\n | 'oidcIdpStateId'\n | 'samlIdpStateId'\n | 'wsfedIdpStateId'\n | 'samlIdpUsername'\n | 'ssoAppId'\n | 'thirdPartyAppId'\n | 'oidcLoginHint'\n | 'preview'\n | 'abTestingKey'\n | 'client'\n | 'locale'\n | 'oidcPrompt'\n | 'oidcErrorRedirectUri'\n | 'oidcResource'\n | 'nativeOptions'\n | 'thirdPartyAppStateId'\n | 'applicationScopes'\n | 'outboundAppId'\n | 'outboundAppScopes'\n> & {\n lastAuth?: Omit<CoreSdkFlowStartArgs[1]['lastAuth'], 'loginId' | 'name'>;\n};\n\nconst START_OPTIONS_VERSION_PREFER_START_REDIRECT_URL = 1;\n\nexport default (coreSdk: CoreSdk) => ({\n ...coreSdk.flow,\n // wrap start fn and adds more data to the start options\n start: async (...args: ReplaceParam<CoreSdkFlowStartArgs, '1', Options>) => {\n const webAuthnSupport = await isSupported();\n const decoratedOptions = {\n location: window.location.href,\n ...args[1],\n deviceInfo: {\n webAuthnSupport,\n },\n startOptionsVersion: START_OPTIONS_VERSION_PREFER_START_REDIRECT_URL,\n };\n\n args[1] = decoratedOptions;\n\n return coreSdk.flow.start(...args);\n },\n});\n","import { RequestConfig, SdkResponse, URLResponse } from '@descope/core-js-sdk';\nimport type {\n CreateSigninRequestArgs,\n CreateSignoutRequestArgs,\n OidcClient,\n OidcClientSettings,\n SigninResponse,\n WebStorageStateStore,\n} from 'oidc-client-ts';\nimport {\n OIDC_CLIENT_TS_DESCOPE_CDN_URL,\n OIDC_CLIENT_TS_JSDELIVR_CDN_URL,\n} from '../../constants';\nimport { getIdToken } from '../../enhancers/withPersistTokens/helpers';\nimport {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../../enhancers/helpers';\nimport { CoreSdk, OidcConfig, OidcConfigOptions } from '../../types';\nimport { hasOidcParamsInUrl, removeOidcParamFromUrl } from './helpers';\n\ntype OidcModule = {\n OidcClient: typeof OidcClient;\n WebStorageStateStore: typeof WebStorageStateStore;\n};\n\ntype SignInResponseStorage = Pick<\n SigninResponse,\n 'id_token' | 'session_state' | 'profile'\n>;\n\nlet scriptLoadingPromise: Promise<OidcModule>;\n\n/* istanbul ignore next */\nconst simpleHash = (input: string): string => {\n let hash = 0;\n\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n\n return Math.abs(hash).toString(16); // Return hash as a positive hexadecimal string\n};\n\nconst loadScriptWithFallback = (\n urls: string[],\n getEntry: () => OidcModule,\n): Promise<OidcModule> => {\n /* istanbul ignore next */\n return new Promise((resolve, reject) => {\n if (!urls.length)\n return reject(new Error('No URLs provided to loadScriptWithFallback'));\n\n const entry = getEntry();\n if (entry) return resolve(entry);\n\n const url = urls.shift();\n\n const scriptEle = document.createElement('script');\n scriptEle.src = url;\n scriptEle.id = simpleHash(url);\n scriptEle.onload = () => {\n const entry = getEntry();\n if (entry) return resolve(entry);\n throw new Error('Could not get entry after loading script from URL');\n };\n /* istanbul ignore next */\n scriptEle.addEventListener('error', () => {\n loadScriptWithFallback(urls, getEntry);\n scriptEle.setAttribute('data-error', 'true');\n });\n document.body.appendChild(scriptEle);\n });\n};\n\nconst loadOIDCModule = async (): Promise<OidcModule> => {\n /* istanbul ignore next */\n try {\n return require('oidc-client-ts');\n } catch (e) {\n return loadScriptWithFallback(\n [OIDC_CLIENT_TS_DESCOPE_CDN_URL, OIDC_CLIENT_TS_JSDELIVR_CDN_URL],\n () => window['oidc'],\n );\n }\n};\n\nfunction oidcSignInResToStorage(\n signInRes: SigninResponse,\n): SignInResponseStorage {\n return {\n id_token: signInRes.id_token,\n session_state: signInRes.session_state,\n profile: signInRes.profile,\n };\n}\n\nconst getUserFromStorage = (\n stateUserKey: string,\n): SignInResponseStorage | null => {\n const user = getLocalStorage(stateUserKey);\n return user ? JSON.parse(user) : null;\n};\n\nconst getOidcClient = async (\n sdk: CoreSdk,\n projectId: string,\n oidcConfig?: OidcConfigOptions,\n) => {\n if (!scriptLoadingPromise) {\n scriptLoadingPromise = loadOIDCModule();\n }\n const { OidcClient, WebStorageStateStore } = await scriptLoadingPromise;\n\n if (!OidcClient) {\n throw new Error(\n 'oidc-client-ts is not installed. Please install it by running `npm install oidc-client-ts`',\n );\n }\n\n const redirectUri = oidcConfig?.redirectUri || window.location.href;\n\n let authority: string;\n let oidcClientId: string;\n let stateUserKey: string;\n let defaultScope: string;\n\n // Handle custom issuer (requires clientId)\n if (oidcConfig?.issuer) {\n if (!oidcConfig.clientId) {\n throw new Error(\n 'clientId is required when providing a custom issuer/authority',\n );\n }\n authority = oidcConfig.issuer;\n oidcClientId = oidcConfig.clientId;\n stateUserKey = `${oidcClientId}_user`;\n // For custom issuer with clientId, default scope is just 'openid'\n defaultScope = 'openid';\n } else if (oidcConfig?.applicationId) {\n // Handle federated apps with applicationId (existing behavior)\n authority = sdk.httpClient.buildUrl(projectId);\n authority = `${authority}/${oidcConfig.applicationId}`;\n oidcClientId = projectId;\n stateUserKey = `${oidcClientId}_user`;\n defaultScope = 'openid email roles descope.custom_claims offline_access';\n } else {\n // Default behavior (existing)\n authority = sdk.httpClient.buildUrl(projectId);\n oidcClientId = projectId;\n stateUserKey = `${oidcClientId}_user`;\n defaultScope = 'openid email roles descope.custom_claims offline_access';\n }\n\n const scope = oidcConfig?.scope || defaultScope;\n\n const settings: OidcClientSettings = {\n authority,\n client_id: oidcClientId,\n redirect_uri: redirectUri,\n response_type: 'code',\n scope,\n stateStore: new WebStorageStateStore({\n store: window.localStorage,\n prefix: oidcClientId,\n }),\n loadUserInfo: true,\n fetchRequestCredentials: 'same-origin',\n };\n\n if (oidcConfig?.redirectUri) {\n settings.redirect_uri = oidcConfig.redirectUri;\n }\n return {\n client: new OidcClient(settings),\n stateUserKey,\n };\n};\n\nconst createOidc = (\n sdk: CoreSdk,\n projectId: string,\n oidcConfig?: OidcConfig,\n) => {\n const getCachedClient = async (): Promise<{\n client: OidcClient;\n stateUserKey: string;\n }> => {\n let client, stateUserKey;\n if (!client || !stateUserKey) {\n ({ client, stateUserKey } = await getOidcClient(\n sdk,\n projectId,\n oidcConfig as OidcConfigOptions,\n ));\n }\n return { client, stateUserKey };\n };\n\n // Start the login process by creating a signin request\n // And redirecting the user to the returned URL\n const loginWithRedirect = async (\n arg: CreateSigninRequestArgs = {},\n disableNavigation: boolean = false,\n ): Promise<SdkResponse<URLResponse>> => {\n const { client } = await getCachedClient();\n const res = await client.createSigninRequest(arg);\n const { url } = res;\n if (!disableNavigation) {\n // In order to make sure all the after-hooks are running with the success response\n // we are generating a fake response with the success data and calling the http client after hook fn with it\n await sdk.httpClient.hooks?.afterRequest(\n {} as any,\n new Response(JSON.stringify(res)),\n );\n window.location.href = url;\n }\n return { ok: true, data: res };\n };\n\n // Finish the login process by processing the signin response\n // This function should be called after the user is redirected from the OIDC IdP\n const finishLogin = async (url: string = ''): Promise<any> => {\n const { client, stateUserKey } = await getCachedClient();\n const res = await client.processSigninResponse(url || window.location.href);\n\n // In order to make sure all the after-hooks are running with the success response\n // we are generating a fake response with the success data and calling the http client after hook fn with it\n await sdk.httpClient.hooks?.afterRequest(\n {} as any,\n new Response(JSON.stringify(res)),\n );\n\n setLocalStorage(stateUserKey, JSON.stringify(oidcSignInResToStorage(res)));\n // remove the code from the URL\n removeOidcParamFromUrl();\n\n return res;\n };\n\n // Finish the login process if the OIDC params are in the URL, if not, do nothing\n // This function should be called after the user is redirected\n // Note: high level SDKs may call this function to check if the user is in the middle of the login process\n const finishLoginIfNeed = async (url: string = ''): Promise<any> => {\n if (hasOidcParamsInUrl()) {\n return await finishLogin(url);\n }\n };\n\n // Start the logout process by creating a signout request\n // And redirecting the user to the returned URL\n const logout = async (\n arg?: CreateSignoutRequestArgs,\n disableNavigation: boolean = false,\n ): Promise<any> => {\n const { client, stateUserKey } = await getCachedClient();\n if (!arg) {\n arg = {};\n }\n\n // if id_token_hint is not provided, we will use the one from the storage\n arg.id_token_hint = arg.id_token_hint || getIdToken();\n arg.post_logout_redirect_uri =\n arg.post_logout_redirect_uri || window.location.href;\n\n const res = await client.createSignoutRequest(arg);\n const { url } = res;\n removeLocalStorage(stateUserKey);\n if (!disableNavigation) {\n window.location.replace(url);\n }\n return res;\n };\n\n // Refresh the access token using the refresh token\n const refreshToken = async (refreshToken: string) => {\n const { client, stateUserKey } = await getCachedClient();\n\n const user = getUserFromStorage(stateUserKey);\n if (!user) {\n throw new Error('User not found in storage to refresh token');\n }\n\n let refresh_token = refreshToken;\n if (!refresh_token) {\n // if refresh token is not provided, we will use the one from the hooks\n const config = {} as RequestConfig;\n sdk.httpClient.hooks.beforeRequest(config);\n refresh_token = config.token;\n }\n const res = await client.useRefreshToken({\n state: {\n refresh_token,\n session_state: user.session_state,\n profile: user.profile,\n },\n });\n\n // In order to make sure all the after-hooks are running with the success response\n // we are generating a fake response with the success data and calling the http client after hook fn with it\n await sdk.httpClient.hooks?.afterRequest(\n {} as any,\n new Response(JSON.stringify(res)),\n );\n return res;\n };\n\n return {\n loginWithRedirect,\n finishLogin,\n finishLoginIfNeed,\n refreshToken,\n logout,\n };\n};\n\nexport default createOidc;\nexport type { OidcConfig };\n","export const hasOidcParamsInUrl = () => {\n return (\n window.location.search.includes('code') &&\n window.location.search.includes('state')\n );\n};\n\nexport const removeOidcParamFromUrl = () => {\n // Retrieve the current URL from the browser's address bar\n const currentUrl = new URL(window.location.href);\n\n // Remove the 'code' and 'state' query parameters if it exist\n currentUrl.searchParams.delete('code');\n currentUrl.searchParams.delete('state');\n\n // Update the URL displayed in the browser without reloading the page\n window.history.replaceState({}, document.title, currentUrl.toString());\n};\n","import { compose } from './enhancers/helpers';\nimport { withAnalytics } from './enhancers/withAnalytics';\nimport { withAutoRefresh } from './enhancers/withAutoRefresh';\nimport { withCustomStorage } from './enhancers/withCustomStorage';\nimport { withFingerprint } from './enhancers/withFingerprint';\nimport { withFlowNonce } from './enhancers/withFlowNonce';\nimport { withLastLoggedInUser } from './enhancers/withLastLoggedInUser';\nimport { withLoggedInIndicator } from './enhancers/withLoggedInIndicator';\nimport { withNotifications } from './enhancers/withNotifications';\nimport withPersistTokens from './enhancers/withPersistTokens';\nimport createSdk from './sdk';\n\nconst decoratedCreateSdk = compose(\n withCustomStorage, // must be first\n withFingerprint,\n withAnalytics,\n withNotifications,\n withFlowNonce,\n withLoggedInIndicator,\n // The following two enhancers must remain immediately before withPersistTokens due to TS type inference limitations\n withAutoRefresh,\n withLastLoggedInUser,\n withPersistTokens, // must be last due to TS known limitation https://github.com/microsoft/TypeScript/issues/30727\n)(createSdk);\n\nexport type { UserResponse, OidcConfig, CustomStorage } from './types';\n\n// Note: make sure to update ./test/umd.test.ts when adding new constants\nexport {\n REFRESH_TOKEN_KEY,\n SESSION_TOKEN_KEY,\n} from './enhancers/withPersistTokens/constants';\n\nexport {\n ensureFingerprintIds,\n clearFingerprintData,\n} from './enhancers/withFingerprint/helpers';\n\nexport { getSessionToken } from './enhancers/withPersistTokens/helpers';\n\nexport { hasOidcParamsInUrl } from './sdk/oidc/helpers';\n\nexport type { JWTResponse } from '@descope/core-js-sdk';\nexport type { OneTapConfig } from './sdk/fedcm';\nexport type { CookieConfig } from './enhancers/withPersistTokens/types';\nexport type { FlowNonceOptions } from './enhancers/withFlowNonce/types';\nexport type { AutoRefreshConfig } from './enhancers/withAutoRefresh/types';\nexport default decoratedCreateSdk;\nexport { decoratedCreateSdk as createSdk };\n","type Fn = (arg: any) => any;\n\nexport function compose<Input, A1>(\n fn1: (input: Input) => A1,\n): (input: Input) => A1;\n\nexport function compose<Input, A1, A2>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n): (input: Input) => A2;\n\nexport function compose<Input, A1, A2, A3>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n): (input: Input) => A3;\n\nexport function compose<Input, A1, A2, A3, A4>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n): (input: Input) => A4;\n\nexport function compose<Input, A1, A2, A3, A4, A5>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n): (input: Input) => A5;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n): (input: Input) => A6;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n): (input: Input) => A7;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7, A8>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n fn8: (input: A7) => A8,\n): (input: Input) => A8;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7, A8, A9>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n fn8: (input: A7) => A8,\n fn9: (input: A8) => A9,\n): (input: Input) => A9;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n fn8: (input: A7) => A8,\n fn9: (input: A8) => A9,\n fn10: (input: A9) => A10,\n): (input: Input) => A10;\n\n/**\n * Currently there is no way to create a compose function in Typescript without using overloading\n * This function currently support up to 10 wrappers\n * If needed you can add more by duplicating the type and add more parameters\n */\n\nexport function compose(...args: Fn[]) {\n return (data: any) => args.reduce((acc, elem) => elem(acc), data) as any;\n}\n","import { CreateWebSdk } from '../sdk';\nimport { CustomStorage } from '../types';\nimport { setCustomStorage } from './helpers';\n\n/**\n * Adds custom storage support\n */\nexport const withCustomStorage =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0] & { customStorage?: CustomStorage }) => {\n setCustomStorage(config.customStorage);\n\n return createSdk(config);\n };\n","import { CreateWebSdk } from '../sdk';\nimport { BeforeRequestHook } from '../types';\nimport { addHooks } from './helpers';\n\n// this is replaced in build time\ndeclare const BUILD_VERSION: string;\n/**\n * Adds analytics headers to requests\n */\nexport const withAnalytics =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0]) =>\n createSdk({\n ...config,\n baseHeaders: {\n 'x-descope-sdk-name': 'web-js',\n 'x-descope-sdk-version': BUILD_VERSION,\n ...config.baseHeaders,\n },\n });\n","import { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook, BeforeRequestHook } from '../../types';\nimport { addHooks } from '../helpers';\nimport {\n FLOW_NEXT_PATH,\n FLOW_NONCE_HEADER,\n FLOW_NONCE_PREFIX,\n FLOW_START_PATH,\n} from './constants';\nimport {\n cleanupExpiredNonces,\n extractFlowNonce,\n getExecutionIdFromRequest,\n getFlowNonce,\n setFlowNonce,\n} from './helpers';\nimport { FlowNonceOptions } from './types';\n\n/**\n * Adds flow nonce handling to the SDK\n */\nexport const withFlowNonce =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0] & FlowNonceOptions): ReturnType<T> => {\n const {\n enableFlowNonce = true,\n nonceStoragePrefix = FLOW_NONCE_PREFIX,\n ...sdkConfig\n } = config;\n\n if (!enableFlowNonce) {\n return createSdk(sdkConfig) as ReturnType<T>;\n }\n\n cleanupExpiredNonces(nonceStoragePrefix);\n\n const afterRequest: AfterRequestHook = async (req, res) => {\n if (req.path !== FLOW_START_PATH && req.path !== FLOW_NEXT_PATH) {\n return;\n }\n const { nonce, executionId } = await extractFlowNonce(req, res);\n\n if (nonce && executionId) {\n const isStart = req.path === FLOW_START_PATH;\n setFlowNonce(executionId, nonce, isStart, nonceStoragePrefix);\n }\n };\n\n const beforeRequest: BeforeRequestHook = (req) => {\n if (req.path === FLOW_NEXT_PATH) {\n const executionId = getExecutionIdFromRequest(req);\n\n if (executionId) {\n const nonce = getFlowNonce(executionId, nonceStoragePrefix);\n if (nonce) {\n req.headers = req.headers || {};\n req.headers[FLOW_NONCE_HEADER] = nonce;\n }\n }\n }\n return req;\n };\n\n return createSdk(\n addHooks(sdkConfig, { afterRequest, beforeRequest }),\n ) as ReturnType<T>;\n };\n\nexport * from './helpers';\nexport * from './types';\nexport * from './constants';\n","import { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport {\n addHooks,\n getAuthInfoFromResponse,\n isDescopeBridge,\n isInvalidSessionResponse,\n} from '../helpers';\nimport {\n createTimerFunctions,\n getTokenExpiration,\n getAutoRefreshTimeout,\n createActivityTracker,\n} from './helpers';\nimport { AutoRefreshOptions } from './types';\nimport logger from '../helpers/logger';\nimport { IS_BROWSER, REFRESH_THRESHOLD } from '../../constants';\nimport { getRefreshToken } from '../withPersistTokens/helpers';\n\n/**\n * Automatically refresh the session token before it expires\n * It uses the the refresh token that is extracted from API response to do that\n */\nexport const withAutoRefresh =\n <T extends CreateWebSdk>(createSdk: T) =>\n ({\n autoRefresh,\n ...config\n }: Parameters<T>[0] & AutoRefreshOptions): ReturnType<T> & {\n markUserActive: () => void;\n } => {\n const autoRefreshEnabled = !!autoRefresh;\n const customActivityTracking =\n typeof autoRefresh === 'object' && autoRefresh?.customActivityTracking;\n\n // Never auto refresh when disabled or in native flows\n if (!autoRefreshEnabled || isDescopeBridge()) {\n return Object.assign(createSdk(config), {\n markUserActive: () => {\n logger.warn('markUserActive() called but has no effect');\n },\n }) as ReturnType<T> & { markUserActive: () => void };\n }\n\n // if we hold a single timer id, there might be a case where we override it before canceling the timer, this might cause many calls to refresh\n // in order to prevent it, we hold a list of timers and cancel all of them when a new timer is set, which means we should have one active timer only at a time\n const { clearAllTimers, setTimer } = createTimerFunctions();\n\n // we need to hold the expiration time and the refresh token in order to refresh the session\n // when the user comes back to the tab or from background/lock screen/etc.\n let sessionExpirationDate: Date;\n let refreshToken: string;\n\n let activityTracker: ReturnType<typeof createActivityTracker> | null = null;\n let hasInactivityTimeout = false;\n\n let refreshWasSkipped = false;\n\n if (customActivityTracking) {\n logger.debug('Activity-based refresh enabled');\n activityTracker = createActivityTracker();\n }\n\n if (IS_BROWSER) {\n document.addEventListener('visibilitychange', () => {\n // tab becomes visible and the session is expired, do a refresh\n if (\n document.visibilityState === 'visible' &&\n sessionExpirationDate &&\n new Date() > sessionExpirationDate\n ) {\n logger.debug('Expiration time passed, refreshing session');\n // We prefer the persisted refresh token over the one from the response\n // for a case that the token was refreshed from another tab, this mostly relevant\n // when the project uses token rotation\n sdk.refresh(getRefreshToken() || refreshToken);\n }\n });\n }\n\n const afterRequest: AfterRequestHook = async (req, res) => {\n const { sessionJwt, refreshJwt, sessionExpiration, nextRefreshSeconds } =\n await getAuthInfoFromResponse(res);\n\n // if we got a failed response on a session validation route we want to cancel all timers\n if (isInvalidSessionResponse(req, res)) {\n logger.debug('Session invalidated, canceling all timers');\n clearAllTimers();\n } else if (sessionJwt || sessionExpiration) {\n sessionExpirationDate = getTokenExpiration(\n sessionJwt,\n sessionExpiration,\n );\n if (!sessionExpirationDate) {\n logger.debug('Could not extract expiration time from session token');\n return;\n }\n refreshToken = refreshJwt;\n // Updated on each server response — may change if server starts/stops returning nextRefreshSeconds\n hasInactivityTimeout = nextRefreshSeconds > 0;\n const timeout = getAutoRefreshTimeout(\n sessionExpirationDate,\n nextRefreshSeconds,\n );\n clearAllTimers();\n\n if (timeout <= REFRESH_THRESHOLD) {\n /*\n When receiving a session with very short expiration - it means that the refresh token is also close to expiration\n This happens because session expiration cannot be more than the refresh expiration\n In this case - the user is going to be logged out soon, so we don't want to set a refresh timer\n */\n logger.debug(\n 'Session is too close to expiration, not setting refresh timer',\n );\n return;\n }\n\n const refreshTimeStr = new Date(\n Date.now() + timeout,\n ).toLocaleTimeString('en-US', { hour12: false });\n logger.debug(\n `Setting refresh timer for ${refreshTimeStr}. (${timeout}ms)`,\n );\n\n // Reset activity tracking after receiving new session (refresh succeeded)\n if (activityTracker) {\n activityTracker.reset();\n refreshWasSkipped = false;\n }\n\n setTimer(() => {\n // Skip refresh if document is hidden - the visibilitychange handler will refresh when user returns\n if (IS_BROWSER && document.visibilityState === 'hidden') {\n logger.debug('Skipping refresh due to timer - document is hidden');\n return;\n }\n\n // Check activity if tracking is enabled and server signals inactivity timeout\n if (\n activityTracker &&\n hasInactivityTimeout &&\n !activityTracker.hadActivity()\n ) {\n logger.debug('Skipping refresh due to timer - user is idle');\n refreshWasSkipped = true;\n return; // Don't reschedule - wait for markUserActive() call\n }\n\n logger.debug('Refreshing session due to timer');\n // We prefer the persisted refresh token over the one from the response\n // for a case that the token was refreshed from another tab, this mostly relevant\n // when the project uses token rotation\n sdk.refresh(getRefreshToken() || refreshJwt);\n }, timeout);\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n const wrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n logger.debug('Clearing all timers');\n clearAllTimers();\n\n return resp;\n };\n\n return Object.assign(\n wrapWith(sdk, ['logout', 'logoutAll', 'oidc.logout'], wrapper),\n {\n markUserActive: activityTracker\n ? () => {\n logger.debug('markUserActive() called');\n if (!hasInactivityTimeout) {\n logger.debug(\n 'markUserActive() called but server does not have inactivity timeout configured (no nextRefreshSeconds)',\n );\n }\n activityTracker.markActive();\n if (refreshWasSkipped) {\n logger.debug(\n 'User became active after skipped refresh, triggering refresh',\n );\n refreshWasSkipped = false;\n clearAllTimers(); // Prevent race condition with pending timer\n sdk.refresh(getRefreshToken() || refreshToken);\n }\n }\n : () => {\n logger.warn(\n 'markUserActive() called but customActivityTracking is not enabled — this call has no effect',\n );\n },\n },\n ) as ReturnType<T> & { markUserActive: () => void };\n };\n","import createCoreSdk, { SdkResponse } from '@descope/core-js-sdk';\nimport createWebAuthn from './webauthn';\nimport createFedCM from './fedcm';\nimport withFlow from './flow';\nimport {\n getSessionToken,\n getRefreshToken,\n} from '../enhancers/withPersistTokens/helpers';\nimport { hasLoginIndicator } from '../enhancers/withLoggedInIndicator/helpers';\nimport { LOGGED_IN_INDICATOR_DISABLED_KEY } from '../enhancers/withLoggedInIndicator/constants';\nimport { getLocalStorage } from '../enhancers/helpers';\nimport createOidc from './oidc';\nimport { CoreSdk, WebSdkConfig } from '../types';\nimport {\n OIDC_LOGOUT_ERROR_CODE,\n OIDC_REFRESH_ERROR_CODE,\n REFRESH_DISABLED,\n} from '../constants';\nimport logger from '../enhancers/helpers/logger';\nimport { isDescopeBridge } from '../enhancers/helpers';\n\nconst createSdk = (config: WebSdkConfig) => {\n const coreSdk = createCoreSdk(config);\n\n const oidc = createOidc(coreSdk, config.projectId, config.oidcConfig);\n\n return {\n ...coreSdk,\n refresh: async (\n token?: string,\n tryRefresh?: boolean,\n ): ReturnType<CoreSdk['refresh']> => {\n if (isDescopeBridge()) {\n logger.debug(`Refresh called in native flow: ${new Error().stack}`);\n return Promise.resolve({\n ok: false,\n error: {\n errorCode: REFRESH_DISABLED,\n errorDescription:\n 'Refresh is not supported in native flows via the web SDK',\n },\n });\n }\n\n if (config.oidcConfig) {\n try {\n await oidc.refreshToken(token);\n return Promise.resolve({ ok: true });\n } catch (error) {\n return Promise.resolve({\n ok: false,\n error: {\n errorCode: OIDC_REFRESH_ERROR_CODE,\n errorDescription: error.toString(),\n },\n });\n }\n }\n\n // Skip the up-front /try-refresh round-trip when localStorage has no sign\n // of a prior authenticated session. `withLoggedInIndicator` writes DSLI\n // on every successful auth and clears it on logout / invalid session.\n // DSLI_DISABLED overrides the skip — escape hatch for apps that hit the\n // storeLastAuthenticatedUser=false edge case after upgrading.\n // OIDC mode is handled above and bypasses this optimization, since OIDC\n // sessions live under a separate `oidc-client-ts` key and `oidc.refreshToken`\n // performs its own no-session short-circuit.\n if (\n tryRefresh &&\n !hasLoginIndicator() &&\n !getLocalStorage(LOGGED_IN_INDICATOR_DISABLED_KEY)\n ) {\n return Promise.resolve({ ok: true });\n }\n // Descope use this query param to monitor if refresh is made\n // When the user is already logged in in the past or not (We want to optimize that in the future)\n const currentSessionToken = getSessionToken();\n const currentRefreshToken = getRefreshToken();\n\n let externalToken = '';\n if (config.getExternalToken) {\n try {\n externalToken = await config.getExternalToken?.();\n } catch (error) {\n logger.debug('Error getting external token while refreshing', error);\n // continue without external token\n }\n }\n\n return coreSdk.refresh(\n token,\n {\n dcs: currentSessionToken ? 't' : 'f',\n dcr: currentRefreshToken ? 't' : 'f',\n },\n externalToken,\n tryRefresh,\n );\n },\n // Call the logout function according to the oidcConfig\n // And return the response in the same format\n logout: async (token?: string): Promise<SdkResponse<never>> => {\n if (config.oidcConfig) {\n // logout is made with id_token_hint\n try {\n await oidc.logout({ id_token_hint: token });\n return Promise.resolve({ ok: true });\n } catch (error) {\n return Promise.resolve({\n ok: false,\n error: {\n errorCode: OIDC_LOGOUT_ERROR_CODE,\n errorDescription: error.toString(),\n },\n });\n }\n }\n return coreSdk.logout(token);\n },\n flow: withFlow(coreSdk),\n webauthn: createWebAuthn(coreSdk),\n fedcm: createFedCM(coreSdk, config.projectId),\n oidc,\n };\n};\n\nexport default createSdk;\n\nexport type CreateWebSdk = typeof createSdk;\nexport type WebSdk = ReturnType<CreateWebSdk>;\n","import { getLocalStorage } from '../helpers';\nimport { LOCAL_STORAGE_LAST_USER_LOGIN_ID } from '../withLastLoggedInUser/constants';\nimport { LOGGED_IN_INDICATOR_KEY } from './constants';\n\n/**\n * Returns true if the browser shows any sign of an authenticated session.\n *\n * Primary signal: the DSLI key, written by `withLoggedInIndicator` after every\n * successful auth response and cleared on logout / invalid-session.\n *\n * Bootstrap fallback: the lastUser key (`dls_last_user_login_id`) written by\n * `withLastLoggedInUser`. This exists so users authenticated under a previous\n * SDK version (before DSLI existed) aren't wrongly treated as anonymous on the\n * first page load after upgrade. Once any successful auth has written DSLI,\n * the fallback is no longer load-bearing and can be dropped in a future cleanup.\n *\n * Both keys are intentionally unprefixed — `storagePrefix` is consumed by\n * `withPersistTokens` and not propagated to other enhancers.\n */\nexport function hasLoginIndicator(): boolean {\n return (\n !!getLocalStorage(LOGGED_IN_INDICATOR_KEY) ||\n !!getLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID)\n );\n}\n","import sdk, { REFRESH_TOKEN_KEY, SESSION_TOKEN_KEY } from './index';\n\n// We export the tokens constant in this way so that umd bundles will have the constants as properties of the default export\n// But still can use the default export as a function (e.g. Descope({ projectId: 'pid'}))\nsdk['REFRESH_TOKEN_KEY'] = REFRESH_TOKEN_KEY;\nsdk['SESSION_TOKEN_KEY'] = SESSION_TOKEN_KEY;\n\nexport default sdk;\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","SuppressedError","InvalidTokenError","Error","base64UrlDecode","str","output","replace","decodeURIComponent","atob","m","code","charCodeAt","toString","toUpperCase","b64DecodeUnicode","err","jwtDecode","token","options","pos","header","part","split","decoded","message","JSON","parse","name","OIDC_CLIENT_TS_VERSION","IS_BROWSER","window","MAX_TIMEOUT","Math","pow","OIDC_CLIENT_TS_DESCOPE_CDN_URL","OIDC_CLIENT_TS_JSDELIVR_CDN_URL","SESSION_VALIDATION_ROUTES","customStorage","getExpirationFromToken","exp","oidcRefreshTokenExpiration","response","refresh_expire_in","refresh_token","floor","Date","now","oidcAccessTokenExpiration","expires_in","expires_at","access_token","normalizeWebJWTResponseToJWTResponse","id_token","rest","sessionJwt","idToken","refreshJwt","sessionExpiration","cookieExpiration","addHooks","config","hooks","reduce","acc","key","concat","_a","getAuthInfoFromResponse","async","res","ok","body","clone","json","authInfo","isDescopeBridge","isInvalidSessionResponse","req","status","path","includes","isLocalStorage","localStorage","setLocalStorage","value","_b","setItem","getLocalStorage","getItem","removeLocalStorage","removeItem","getLocalStorageKey","index","_e","_d","_c","accessKey","exchange","otp","verify","signIn","signUp","update","email","phone","signUpOrIn","magicLink","enchantedLink","session","oauth","start","startNative","finishNative","oneTap","getOneTapClientId","exchangeOneTapIDToken","verifyOneTapIDToken","outbound","connect","saml","totp","notp","webauthn","finish","password","sendReset","policy","refresh","tryRefresh","selectTenant","logout","logoutAll","me","myTenants","history","flow","next","o","r","a","d","headers","entries","fromEntries","Headers","stringify","Body","url","Url","method","Method","title","Title","Status","retries","Retries","build","keys","flatMap","join","u","l","Promise","setTimeout","c","text","resolve","g","fetch","warn","log","statusText","h","v","getUTCFullYear","getUTCMonth","padStart","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","random","I","get","delete","post","put","patch","f","baseUrl","queryParams","projectId","slice","forEach","encodeURIComponent","Array","isArray","from","b","k","Authorization","y","O","w","baseConfig","refreshCookieName","logger","cookiePolicy","beforeRequest","baseHeaders","credentials","j","afterRequest","transformResponse","U","test","charAt","push","substring","map","trim","filter","Boolean","cookies","buildUrl","allSettled","error","reason","T","tenants","R","getTime","x","P","$","q","S","data","retryAfter","Number","parseInt","A","C","E","L","validate","M","N","D","J","z","_","K","B","V","Y","Z","Q","G","W","X","ee","te","ne","oe","se","loginOptions","ie","shift","re","pollingIntervalMs","timeoutMs","max","min","ae","de","sms","voice","whatsapp","im","pe","ue","waiting","running","completed","failed","le","ce","ge","he","ve","Ie","providerId","loginId","URI","user","waitForSession","setInterval","pendingRef","clearInterval","clearTimeout","errorDescription","errorCode","fe","be","flowId","conditionInteractionId","interactionId","componentsVersion","flowVersions","input","isCustomScreen","executionId","stepId","version","ke","ye","Oe","we","je","Ue","Te","Re","facebook","github","google","microsoft","gitlab","apple","discord","linkedin","slack","xe","Pe","provider","redirectURL","loginHint","implicit","stateId","nonce","$e","qe","Se","tenantId","tenantLevel","appId","Ae","Ce","Ee","Le","Me","Ne","De","He","Je","tenant","ssoId","forceAuthn","initiatedEmail","ze","Fe","Ke","Be","Ve","Ye","Ze","Qe","Ge","We","Xe","redirectUrl","templateOptions","newPassword","oldPassword","et","tt","nt","ot","st","it","rt","at","dt","origin","passkeyOptions","transactionId","pt","ut","lt","ct","gt","ht","It","ft","String","H","externalToken","dct","ids","isJwtExpired","getTenants","getJwtPermissions","getJwtRoles","getCurrentTenant","httpClient","mt","DeliveryMethods","args","console","debug","getAutoRefreshTimeout","nextRefreshSeconds","timeout","date","target","source","api","init","converter","defaultAttributes","set","attributes","document","expires","toUTCString","escape","stringifiedAttributes","attributeName","cookie","write","create","jar","parts","found","read","remove","withAttributes","withConverter","freeze","SESSION_TOKEN_KEY","REFRESH_TOKEN_KEY","ID_TOKEN_KEY","REFRESH_COOKIE_NAME_KEY","setJwtTokenCookie","cookieDomain","cookiePath","cookieSameSite","cookieSecure","domainMatches","isCurrentDomainOrParentDomain","Cookies","domain","undefined","sameSite","secure","currentDomainParts","location","hostname","cookieDomainParts","getSessionCookieName","sessionTokenViaCookie","getRefreshCookieName","refreshTokenViaCookie","getRefreshToken","prefix","getSessionToken","getIdToken","clearTokens","cookieOptions","sessionCookieName","updatedConfig","storedCookieName","getStoredRefreshCookieName","dtd","getTrustedDeviceToken","FP_EP_URL","VISITOR_SESSION_ID_PARAM","VISITOR_REQUEST_ID_PARAM","default","to","pack","ar","current","postpone","exclude","Set","has","add","reject","TypeError","startedAt","finishedAt","then","catch","F","scriptUrlPattern","apiKey","time","state","visibilityState","addEventListener","removeEventListener","load","ldi","attempts","visibilityStates","URL","href","blockedURI","protocol","MessageChannel","port1","onmessage","port2","postMessage","createElement","parentNode","removeChild","head","getElementsByTagName","onload","onerror","src","appendChild","getOwnPropertyDescriptor","configurable","writable","getFPFromStorage","returnExpired","itemStr","item","expiry","ensureFingerprintIds","fpKey","sessionId","endpointUrl","pathname","patterUrl","agentP","endpoint","defaultEndpoint","defaultScriptUrlPattern","agent","requestId","linkedId","fpData","createFingerprintObject","setFPToStorage","ex","FLOW_NONCE_PREFIX","FLOW_NONCE_HEADER","FLOW_START_PATH","FLOW_NEXT_PATH","getNonceKeyForExecution","removeFlowNonce","extractExecId","exec","getExecutionIdFromRequest","LOCAL_STORAGE_LAST_USER_LOGIN_ID","LOCAL_STORAGE_LAST_USER_DISPLAY_NAME","setLastUserLoginId","getLastUserLoginId","getLastUserDisplayName","startWrapper","fn","displayName","lastAuth","logoutWrapper","keepOnLogout","resp","LOGGED_IN_INDICATOR_KEY","createPubSub","cbs","pub","cb","sub","idx","splice","getCookieOptions","createOptions","publicKey","challenge","decodeBase64Url","id","excludeCredentials","decodeCreateOptions","createResponse","navigator","credential","rawId","encodeBase64Url","type","attestationObject","clientDataJSON","getOptions","decodeGetOptions","encodeGetResponse","conditional","abort","signal","mediation","isSupported","requirePlatformAuthenticator","supported","descopeBridge","hostInfo","PublicKeyCredential","isUserVerifyingPlatformAuthenticatorAvailable","allowCredentials","authenticatorData","signature","userHandle","base64","Uint8Array","buffer","btoa","fromCharCode","creator","createWebAuthn$1","sdk","identifier","startResponse","getResponse","helpers","obj","apiPaths","generateNonce","crypto","getRandomValues","array","byte","performOneTap","performOneTapAsync","onFailed","auth","oneTapConfig","onSkipped","onDismissed","googleClient","accounts","googleScript","getElementById","defer","getGoogleClient","clientIdRes","clientId","callback","initialize","itp_support","use_fedcm_for_prompt","client_id","prompt","notification","isDismissedMoment","getDismissedReason","isSkippedMoment","getSkippedReason","startOneTap","onCodeReceived","onAuthenticated","withFlow","coreSdk","webAuthnSupport","decoratedOptions","deviceInfo","startOptionsVersion","scriptLoadingPromise","loadScriptWithFallback","urls","getEntry","entry","scriptEle","hash","abs","simpleHash","setAttribute","getOidcClient","oidcConfig","require","loadOIDCModule","OidcClient","WebStorageStateStore","redirectUri","authority","oidcClientId","stateUserKey","defaultScope","issuer","applicationId","settings","redirect_uri","response_type","scope","stateStore","store","loadUserInfo","fetchRequestCredentials","client","createOidc","getCachedClient","finishLogin","processSigninResponse","signInRes","Response","session_state","profile","currentUrl","searchParams","replaceState","removeOidcParamFromUrl","loginWithRedirect","arg","disableNavigation","createSigninRequest","finishLoginIfNeed","search","refreshToken","getUserFromStorage","useRefreshToken","id_token_hint","post_logout_redirect_uri","createSignoutRequest","decoratedCreateSdk","elem","compose","createSdk","storage","fpLoad","sessionExpirationPS","sessionPS","userPS","claimsPS","userDetails","getUserFromResponse","claims","wrappedSdk","wrapWith","onSessionTokenChange","onUserChange","onClaimsChange","onIsAuthenticatedChange","enableFlowNonce","nonceStoragePrefix","sdkConfig","startsWith","parseError","cleanupExpiredNonces","extractFlowNonce","isStart","ttlSeconds","setFlowNonce","getFlowNonce","autoRefresh","autoRefreshEnabled","customActivityTracking","markUserActive","clearAllTimers","setTimer","timerIds","pop","createTimerFunctions","sessionExpirationDate","activityTracker","hasInactivityTimeout","refreshWasSkipped","hadActivitySinceLastRefresh","hadActivity","reset","markActive","createActivityTracker","getTokenExpiration","refreshTimeStr","toLocaleTimeString","hour12","storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout","_req","userInfo","getUserAndLastAuthFromResponse","loginIds","setLastUserDisplayName","persistTokens","isPersistTokens","storagePrefix","lastCookieOptions","cookieName","newCookieOptions","trustedDeviceJwt","authInfoWithCookie","createCoreSdk","oidc","stack","currentSessionToken","currentRefreshToken","getExternalToken","dcs","dcr","createWebAuthn","fedcm","onetap","requestExchangeCode","requestAuthentication","launch","context","identity","providers","configURL","isLoggedIn"],"mappings":"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","x_google_ignoreList":[0,1,7,11]}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../../../../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.22.4_tslib@2.8.1_typescript@5.4.5/node_modules/tslib/tslib.es6.js","../../../../node_modules/.pnpm/jwt-decode@4.0.0/node_modules/jwt-decode/build/esm/index.js","../src/constants.ts","../src/enhancers/helpers/index.ts","../../core-js-sdk/dist/index.esm.js","../src/enhancers/helpers/logger.ts","../src/enhancers/withAutoRefresh/helpers.ts","../../../../node_modules/.pnpm/js-cookie@3.0.5/node_modules/js-cookie/dist/js.cookie.mjs","../src/enhancers/withPersistTokens/constants.ts","../src/enhancers/withPersistTokens/helpers.ts","../src/enhancers/withFingerprint/constants.ts","../../../../node_modules/.pnpm/@fingerprintjs+fingerprintjs-pro@3.11.6/node_modules/@fingerprintjs/fingerprintjs-pro/dist/fp.esm.min.js","../src/enhancers/withFingerprint/helpers.ts","../src/enhancers/withFingerprint/index.ts","../src/enhancers/withFlowNonce/constants.ts","../src/enhancers/withFlowNonce/helpers.ts","../src/enhancers/withLastLoggedInUser/constants.ts","../src/enhancers/withLastLoggedInUser/helpers.ts","../src/enhancers/withLastLoggedInUser/index.ts","../src/enhancers/withLoggedInIndicator/constants.ts","../src/enhancers/withLoggedInIndicator/index.ts","../src/enhancers/withNotifications/helpers.ts","../src/enhancers/withNotifications/index.ts","../src/enhancers/withPersistTokens/index.ts","../src/sdk/webauthn.ts","../src/apiPaths.ts","../src/sdk/fedcm.ts","../src/sdk/flow.ts","../src/sdk/oidc/index.ts","../src/sdk/oidc/helpers.ts","../src/index.ts","../src/enhancers/helpers/compose.ts","../src/enhancers/withCustomStorage.ts","../src/enhancers/withAnalytics.ts","../src/enhancers/withFlowNonce/index.ts","../src/enhancers/withAutoRefresh/index.ts","../src/sdk/index.ts","../src/enhancers/withLoggedInIndicator/helpers.ts","../src/index.umd.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","export class InvalidTokenError extends Error {\n}\nInvalidTokenError.prototype.name = \"InvalidTokenError\";\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, (m, p) => {\n let code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = \"0\" + code;\n }\n return \"%\" + code;\n }));\n}\nfunction base64UrlDecode(str) {\n let output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw new Error(\"base64 string is not of the correct length\");\n }\n try {\n return b64DecodeUnicode(output);\n }\n catch (err) {\n return atob(output);\n }\n}\nexport function jwtDecode(token, options) {\n if (typeof token !== \"string\") {\n throw new InvalidTokenError(\"Invalid token specified: must be a string\");\n }\n options || (options = {});\n const pos = options.header === true ? 0 : 1;\n const part = token.split(\".\")[pos];\n if (typeof part !== \"string\") {\n throw new InvalidTokenError(`Invalid token specified: missing part #${pos + 1}`);\n }\n let decoded;\n try {\n decoded = base64UrlDecode(part);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid base64 for part #${pos + 1} (${e.message})`);\n }\n try {\n return JSON.parse(decoded);\n }\n catch (e) {\n throw new InvalidTokenError(`Invalid token specified: invalid json for part #${pos + 1} (${e.message})`);\n }\n}\n","const OIDC_CLIENT_TS_VERSION = '3.2.0';\n\n// This sdk can be used in SSR apps\nexport const IS_BROWSER = typeof window !== 'undefined';\n\n// Maximum timeout value for setTimeout\n// For more information, refer to https://developer.mozilla.org/en-US/docs/Web/API/setTimeout#maximum_delay_value\nexport const MAX_TIMEOUT = Math.pow(2, 31) - 1;\n\n// The amount of time (ms) to trigger the refresh before session expires\nexport const REFRESH_THRESHOLD = 20 * 1000; // 20 sec\n\nexport const OIDC_CLIENT_TS_DESCOPE_CDN_URL = `https://descopecdn.com/npm/oidc-client-ts@${OIDC_CLIENT_TS_VERSION}/dist/browser/oidc-client-ts.min.js`;\nexport const OIDC_CLIENT_TS_JSDELIVR_CDN_URL = `https://cdn.jsdelivr.net/npm/oidc-client-ts@${OIDC_CLIENT_TS_VERSION}/dist/browser/oidc-client-ts.min.js`;\n\nexport const OIDC_LOGOUT_ERROR_CODE = 'J161000';\nexport const OIDC_REFRESH_ERROR_CODE = 'J161001';\n\nexport const REFRESH_DISABLED = 'J171000';\n","import { UserResponse } from '@descope/core-js-sdk';\nimport {\n CoreSdkConfig,\n CustomStorage,\n WebJWTResponse,\n WebSigninResponse,\n} from '../../types';\nimport { jwtDecode, JwtPayload } from 'jwt-decode';\nimport { IS_BROWSER } from '../../constants';\n\n// Routes where a failed response indicates an invalid/expired session\n// Other routes (like OTP verify) may fail for invalid input, not session expiration\nconst SESSION_VALIDATION_ROUTES = [\n '/v1/auth/refresh',\n '/v1/auth/try-refresh',\n '/v1/auth/me',\n '/v1/auth/me/tenants',\n '/v1/auth/me/history',\n];\n\n// this is a singleton\n// but in order to keep the code clean\n// it was implemented in this way\nlet customStorage: CustomStorage | undefined;\n\nconst getExpirationFromToken = (token: string) => {\n try {\n const claims = jwtDecode<JwtPayload>(token);\n return claims.exp;\n } catch (e) {\n return null;\n }\n};\n\nconst oidcRefreshTokenExpiration = (response: WebSigninResponse) => {\n const { refresh_expire_in, refresh_token } = response;\n if (refresh_expire_in) {\n return Math.floor(Date.now() / 1000) + refresh_expire_in;\n }\n return getExpirationFromToken(refresh_token);\n};\n\nconst oidcAccessTokenExpiration = (response: WebSigninResponse) => {\n // oidc-client-ts may return the expiration time in\n // - the expires_at (timestamp in seconds)\n // - the expires_in (ttl in seconds)\n // - we also fallback to the token itself\n const { expires_in, expires_at, access_token } = response;\n if (expires_at) {\n return expires_at;\n }\n if (expires_in) {\n // get expiration time from the expires_in in seconds\n return Math.floor(Date.now() / 1000) + expires_in;\n }\n if (access_token) {\n // get expiration time from the token itself\n return getExpirationFromToken(access_token);\n }\n return undefined;\n};\n\nconst normalizeWebJWTResponseToJWTResponse = (\n response: WebSigninResponse,\n): WebJWTResponse => {\n const { access_token, id_token, refresh_token, refresh_expire_in, ...rest } =\n response;\n return {\n sessionJwt: response.sessionJwt || access_token,\n idToken: id_token,\n refreshJwt: response.refreshJwt || refresh_token,\n sessionExpiration:\n response.sessionExpiration || oidcAccessTokenExpiration(response),\n cookieExpiration:\n response.cookieExpiration ||\n (oidcRefreshTokenExpiration(response) as number),\n ...rest,\n };\n};\n\n/**\n * Add hooks to an existing core-sdk config\n */\nexport const addHooks = <Config extends CoreSdkConfig>(\n config: Config,\n hooks: Config['hooks'],\n): Config => {\n ['beforeRequest', 'afterRequest'].reduce(\n (acc, key) => {\n acc[key] = []\n .concat(config.hooks?.[key] || [])\n .concat(hooks?.[key] || []);\n\n return acc;\n },\n (config.hooks ??= {}),\n );\n\n return config;\n};\n\nexport { compose } from './compose';\n\n/**\n * Extract auth info (JWT response) from fetch response\n * We assume that the auth info is under a \"authInfo\" attribute (flow response)\n * Or the body itself (other auth methods response)\n */\nexport const getAuthInfoFromResponse = async (\n res: Response,\n): Promise<Partial<WebJWTResponse>> => {\n if (!res?.ok) return {};\n const body = await res?.clone().json();\n const authInfo = body?.authInfo || body || ({} as Partial<WebJWTResponse>);\n return normalizeWebJWTResponseToJWTResponse(authInfo);\n};\n\nexport const getUserAndLastAuthFromResponse = async (\n res: Response,\n): Promise<{ userInfo: UserResponse | undefined; lastAuth: any }> => {\n if (!res?.ok) {\n return { userInfo: undefined, lastAuth: undefined };\n }\n const body = await res?.clone().json();\n const authInfo: Partial<WebJWTResponse> =\n normalizeWebJWTResponseToJWTResponse(\n body?.authInfo || body || ({} as Partial<WebJWTResponse>),\n );\n const userInfo =\n authInfo?.user ||\n (authInfo?.hasOwnProperty('userId')\n ? (authInfo as UserResponse)\n : undefined);\n return {\n userInfo,\n lastAuth: body.lastAuth,\n };\n};\n\n/**\n * Extract user from fetch response\n * User my exist under \"user\" attribute (auth methods response)\n * Or the body itself (when calling \"me\")\n */\nexport const getUserFromResponse = async (\n res: Response,\n): Promise<UserResponse> | undefined => {\n const authInfo = await getAuthInfoFromResponse(res);\n\n return (\n authInfo?.user ||\n (authInfo?.hasOwnProperty('userId')\n ? (authInfo as UserResponse)\n : undefined)\n );\n};\n\n// Detect if running in a native flow (e.g., mobile app with Descope bridge in a webview)\nexport const isDescopeBridge = () => IS_BROWSER && !!window['descopeBridge'];\n\n/**\n * Check if a failed response indicates an invalid/expired session\n * Only specific routes should trigger logout/clear tokens behavior on failure\n * Other routes (like OTP verify) may fail for invalid input\n */\nexport const isInvalidSessionResponse = (\n req: { path?: string },\n res: Response | undefined,\n): boolean => {\n const is4xx = res?.status >= 400 && res?.status < 500;\n if (!is4xx) return false;\n const path = req?.path || '';\n return SESSION_VALIDATION_ROUTES.includes(path);\n};\n\nexport const isLocalStorage =\n typeof customStorage !== 'undefined' ||\n (IS_BROWSER && typeof window.localStorage !== 'undefined');\n\nexport const setLocalStorage = (key: string, value: string) =>\n (customStorage || (IS_BROWSER && window.localStorage))?.setItem?.(key, value);\nexport const getLocalStorage = (key: string) =>\n (customStorage || (IS_BROWSER && window.localStorage))?.getItem?.(key);\nexport const removeLocalStorage = (key: string) =>\n (customStorage || (IS_BROWSER && window.localStorage))?.removeItem?.(key);\nexport const getLocalStorageLength = (): number =>\n (customStorage as any)?.length ??\n (IS_BROWSER && window.localStorage?.length) ??\n 0;\nexport const getLocalStorageKey = (index: number): string | null =>\n (customStorage as any)?.key?.(index) ??\n (IS_BROWSER && window.localStorage?.key?.(index)) ??\n null;\n\nexport const setCustomStorage = (storage: CustomStorage) => {\n customStorage = storage;\n};\n","import{jwtDecode as e}from\"jwt-decode\";import{__rest as t}from\"tslib\";var n={accessKey:{exchange:\"/v1/auth/accesskey/exchange\"},otp:{verify:\"/v1/auth/otp/verify\",signIn:\"/v1/auth/otp/signin\",signUp:\"/v1/auth/otp/signup\",update:{email:\"/v1/auth/otp/update/email\",phone:\"/v1/auth/otp/update/phone\"},signUpOrIn:\"/v1/auth/otp/signup-in\"},magicLink:{verify:\"/v1/auth/magiclink/verify\",signIn:\"/v1/auth/magiclink/signin\",signUp:\"/v1/auth/magiclink/signup\",update:{email:\"/v1/auth/magiclink/update/email\",phone:\"/v1/auth/magiclink/update/phone\"},signUpOrIn:\"/v1/auth/magiclink/signup-in\"},enchantedLink:{verify:\"/v1/auth/enchantedlink/verify\",signIn:\"/v1/auth/enchantedlink/signin\",signUp:\"/v1/auth/enchantedlink/signup\",session:\"/v1/auth/enchantedlink/pending-session\",update:{email:\"/v1/auth/enchantedlink/update/email\"},signUpOrIn:\"/v1/auth/enchantedlink/signup-in\"},oauth:{start:\"/v1/auth/oauth/authorize\",exchange:\"/v1/auth/oauth/exchange\",startNative:\"v1/auth/oauth/native/start\",finishNative:\"v1/auth/oauth/native/finish\",oneTap:{getOneTapClientId:\"/v1/auth/onetap/clientid/{provider}\",exchangeOneTapIDToken:\"/v1/auth/onetap/idtoken/exchange\",verifyOneTapIDToken:\"/v1/auth/onetap/idtoken/verify\"}},outbound:{connect:\"/v1/outbound/oauth/connect\"},saml:{start:\"/v1/auth/saml/authorize\",exchange:\"/v1/auth/saml/exchange\"},totp:{verify:\"/v1/auth/totp/verify\",signUp:\"/v1/auth/totp/signup\",update:\"/v1/auth/totp/update\"},notp:{signIn:\"/v1/auth/notp/whatsapp/signin\",signUp:\"/v1/auth/notp/whatsapp/signup\",signUpOrIn:\"/v1/auth/notp/whatsapp/signup-in\",session:\"/v1/auth/notp/pending-session\"},webauthn:{signUp:{start:\"/v1/auth/webauthn/signup/start\",finish:\"/v1/auth/webauthn/signup/finish\"},signIn:{start:\"/v1/auth/webauthn/signin/start\",finish:\"/v1/auth/webauthn/signin/finish\"},signUpOrIn:{start:\"/v1/auth/webauthn/signup-in/start\"},update:{start:\"v1/auth/webauthn/update/start\",finish:\"/v1/auth/webauthn/update/finish\"}},password:{signUp:\"/v1/auth/password/signup\",signIn:\"/v1/auth/password/signin\",sendReset:\"/v1/auth/password/reset\",update:\"/v1/auth/password/update\",replace:\"/v1/auth/password/replace\",policy:\"/v1/auth/password/policy\"},refresh:\"/v1/auth/refresh\",tryRefresh:\"/v1/auth/try-refresh\",selectTenant:\"/v1/auth/tenant/select\",logout:\"/v1/auth/logout\",logoutAll:\"/v1/auth/logoutall\",me:\"/v1/auth/me\",myTenants:\"/v1/auth/me/tenants\",history:\"/v1/auth/me/history\",flow:{start:\"/v1/flow/start\",next:\"/v1/flow/next\"}};const o=\"<region>\",s=`https://api.${o}descope.com`,i=1e3,r=6e5,a=\"dct\",d=()=>{const e={};return{headers(t){const n=\"function\"==typeof t.entries?Object.fromEntries(t.entries()):t;return e.Headers=JSON.stringify(n),this},body(t){return e.Body=t,this},url(t){return e.Url=t.toString(),this},method(t){return e.Method=t,this},title(t){return e.Title=t,this},status(t){return e.Status=t,this},retries(t){return e.Retries=t,this},build:()=>Object.keys(e).flatMap((t=>e[t]?[`${\"Title\"!==t?`${t}: `:\"\"}${e[t]}`]:[])).join(\"\\n\")}},p=[503,521,522,524,530],u=[100,5e3,5e3],l=e=>new Promise((t=>setTimeout(t,e))),c=e=>async(...t)=>{let n=await e(...t),o=0;for(;p.includes(n.status)&&o<u.length;)await l(u[o]),n=await e(...t),o++;o>0&&(n.retries=o);const s=await n.text();return n.text=()=>Promise.resolve(s),n.json=()=>Promise.resolve(JSON.parse(s)),n.clone=()=>n,n},g=(e,t)=>{const n=t||fetch;return n||null==e||e.warn(\"Fetch is not defined, you will not be able to send http requests, if you are running in a test, make sure fetch is defined globally\"),e?async(...t)=>{if(!n)throw Error(\"Cannot send http request, fetch is not defined, if you are running in a test, make sure fetch is defined globally\");e.log((e=>d().title(\"Request\").url(e[0]).method(e[1].method).headers(e[1].headers).body(e[1].body).build())(t));const o=await c(n)(...t);return e[o.ok?\"log\":\"error\"](await(async e=>{const t=await e.text();return d().title(\"Response\").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).retries(e.retries).build()})(o)),o}:c(n)};let h;const v=()=>{if(h)return h;const e=new Date,t=`${e.getUTCFullYear().toString()}-${(e.getUTCMonth()+1).toString().padStart(2,\"0\")}-${e.getUTCDate().toString().padStart(2,\"0\")}-${e.getUTCHours().toString().padStart(2,\"0\")}:${e.getUTCMinutes().toString().padStart(2,\"0\")}:${e.getUTCSeconds().toString().padStart(2,\"0\")}:${e.getUTCMilliseconds().toString()}`,n=Math.floor(1e3+9e3*Math.random());return h=`${t}-${n}`,h};var I;!function(e){e.get=\"GET\",e.delete=\"DELETE\",e.post=\"POST\",e.put=\"PUT\",e.patch=\"PATCH\"}(I||(I={}));const f=({path:e,baseUrl:t,queryParams:n,projectId:s})=>{const i=s.slice(1,-27);t=t.replace(o,i?i+\".\":\"\");let r=e?`${t.replace(/\\/$/,\"\")}/${null==e?void 0:e.replace(/^\\//,\"\")}`:t;if(n){const e=Object.keys(n);e.forEach(((t,o)=>{r=`${r}${0===o?\"?\":\"\"}${t}=${encodeURIComponent(n[t])}${o===e.length-1?\"\":\"&\"}`}))}return r},m=(...e)=>new Headers(e.reduce(((e,t)=>((e=>Array.isArray(e)?e:e instanceof Headers?Array.from(e.entries()):e?Object.entries(e):[])(t).forEach((([t,n])=>{e[t]=\"function\"==typeof n?n():n})),e)),{})),b={\"Content-Type\":\"application/json\"},k=(e,t=\"\")=>{let n=e;return t&&(n=n+\":\"+t),{Authorization:`Bearer ${n}`}},y=(e,t)=>{const n={\"x-descope-sdk-session-id\":v(),\"x-descope-sdk-name\":\"core-js\",\"x-descope-sdk-version\":\"2.62.0\",\"x-descope-project-id\":e};return t&&(n[\"x-descope-refresh-cookie-name\"]=t),n},O=e=>{try{e=JSON.parse(e)}catch(e){return!1}return\"object\"==typeof e&&null!==e};var w=(e=>t=>{var n;return e(Object.assign(Object.assign({},t),{hooks:{beforeRequest:e=>{var n;const o=[].concat((null===(n=t.hooks)||void 0===n?void 0:n.beforeRequest)||[]);return null==o?void 0:o.reduce(((e,t)=>t(e)),e)},afterRequest:async(e,n)=>{var o;const s=[].concat((null===(o=t.hooks)||void 0===o?void 0:o.afterRequest)||[]);if(0==s.length)return;(await Promise.allSettled(null==s?void 0:s.map((t=>t(e,null==n?void 0:n.clone()))))).forEach((e=>{var n;return\"rejected\"===e.status&&(null===(n=t.logger)||void 0===n?void 0:n.error(e.reason))}))},transformResponse:null===(n=t.hooks)||void 0===n?void 0:n.transformResponse}}))})((({baseUrl:e,projectId:t,baseConfig:n,refreshCookieName:o,logger:i,hooks:r,cookiePolicy:a,fetch:d})=>{const p=e||s,u=g(i,d),l=async e=>{var s;const i=(null==r?void 0:r.beforeRequest)?r.beforeRequest(e):e,{path:d,body:l,headers:c,queryParams:g,method:h,token:v}=i,I=(e=>void 0===e?void 0:JSON.stringify(e))(l),w={headers:m(k(t,v),y(t,o),(null==n?void 0:n.baseHeaders)||{},O(I)?b:{},c),method:h,body:I};null!==a&&(w.credentials=a||\"include\");const j=await u(f({path:d,baseUrl:p,queryParams:g,projectId:t}),w);if((null==r?void 0:r.afterRequest)&&await r.afterRequest(e,null==j?void 0:j.clone()),null==r?void 0:r.transformResponse){const e=await j.json(),t=(U=(null===(s=j.headers)||void 0===s?void 0:s.get(\"set-cookie\"))||\"\",Object.fromEntries(function(e){if(!e)return[];const t=[];let n=0;function o(){for(;n<e.length&&/\\s/.test(e.charAt(n));)n+=1;return n<e.length}function s(){const t=e.charAt(n);return\"=\"!==t&&\";\"!==t&&\",\"!==t}for(;n<e.length;){const i=n;let r,a,d=!1;for(;o();)if(\",\"===e.charAt(n)){for(r=n,n+=1,o(),a=n;n<e.length&&s();)n+=1;if(n<e.length&&\"=\"===e.charAt(n)){d=!0,n=a,t.push(e.substring(i,r));break}n=r+1}else n+=1;(!d||n>=e.length)&&t.push(e.substring(i,e.length))}return t}(U).map((e=>{const t=e.split(\";\")[0],n=t.indexOf(\"=\");return n<1?null:[t.substring(0,n).trim(),t.substring(n+1).trim()]})).filter(Boolean))),n=Object.assign(Object.assign({},j),{json:()=>Promise.resolve(e),cookies:t});return n.clone=()=>n,r.transformResponse(n)}var U;return j};return{get:(e,{headers:t,queryParams:n,token:o}={})=>l({path:e,headers:t,queryParams:n,body:void 0,method:I.get,token:o}),post:(e,t,{headers:n,queryParams:o,token:s}={})=>l({path:e,headers:n,queryParams:o,body:t,method:I.post,token:s}),patch:(e,t,{headers:n,queryParams:o,token:s}={})=>l({path:e,headers:n,queryParams:o,body:t,method:I.patch,token:s}),put:(e,t,{headers:n,queryParams:o,token:s}={})=>l({path:e,headers:n,queryParams:o,body:t,method:I.put,token:s}),delete:(e,{headers:t,queryParams:n,token:o}={})=>l({path:e,headers:t,queryParams:n,body:void 0,method:I.delete,token:o}),hooks:r,buildUrl:(e,n)=>f({projectId:t,baseUrl:p,path:e,queryParams:n})}})),j={TOO_MANY_REQUESTS:429};function U(e,t,n){var o;let s=T(e);if(t){if(!(null==s?void 0:s.tenants)&&(null==s?void 0:s[a])===t)return(null==s?void 0:s[n])||[];s=null===(o=null==s?void 0:s.tenants)||void 0===o?void 0:o[t]}const i=null==s?void 0:s[n];return Array.isArray(i)?i:[]}function T(t){if(\"string\"!=typeof t||!t)throw new Error(\"Invalid token provided\");return e(t)}function R(e){const{exp:t}=T(e);return(new Date).getTime()/1e3>t}function x(e){let t=T(e);const n=Object.keys(null==t?void 0:t.tenants);return Array.isArray(n)?n:[]}function P(e,t){return U(e,t,\"permissions\")}function $(e,t){return U(e,t,\"roles\")}const q=(...e)=>e.join(\"/\").replace(/\\/{2,}/g,\"/\");async function S(e,t){var n;const o=await e,s={code:o.status,ok:o.ok,response:o},i=await o.clone().json();return o.ok?s.data=t?t(i):i:(s.error=i,o.status===j.TOO_MANY_REQUESTS&&Object.assign(s.error,{retryAfter:Number.parseInt(null===(n=o.headers)||void 0===n?void 0:n.get(\"retry-after\"))||0})),s}function A(e){var t;return(null===(t=T(e))||void 0===t?void 0:t[a])||\"\"}const C=(e,t)=>(n=t)=>t=>!e(t)&&n.replace(\"{val}\",t),E=(e,t)=>(n=t)=>t=>{const o=e.filter((e=>e(t)));return!(o.length<e.length)&&(n?n.replace(\"{val}\",t):o.join(\" OR \"))},L=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),M=e=>t=>e.test(t),N=M(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/),D=M(/^\\+[1-9]{1}[0-9]{3,14}$/),H=(e,t)=>n=>L(...t).validate(((e,t,n)=>{const o=(Array.isArray(t)?t.join(\".\"):String(t)).replace(/\\[\\\\?(\"|')?(\\w|d)+\\\\?(\"|')?\\]/g,((e,t,n)=>\".\"+n)).split(\".\"),s=o.length;let i=0,r=e===Object(e)?e:void 0;for(;null!=r&&i<s;)r=r[o[i++]];return i&&i===s&&void 0!==r?r:n})(n,e)),J=C(N,'\"{val}\" is not a valid email'),z=C(D,'\"{val}\" is not a valid phone number'),_=C((F=1,e=>e.length>=F),\"Minimum length is 1\");var F;const K=C((e=>\"string\"==typeof e),\"Input is not a string\"),B=C((e=>Array.isArray(e)),\"Input is not an array\"),V=C((e=>\"boolean\"==typeof e),\"Input is not a boolean\"),Y=C((e=>void 0===e),\"Input is defined\"),Z=E([K(),Y()],\"Input is not a string or undefined\"),Q=E([B(),V()],\"Input is not an array or boolean\"),G=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>L(...e).validate(n[t]))),t(...n)),W=e=>[K(`\"${e}\" must be a string`)],X=e=>[Z(`\"${e}\" must be string or undefined`)],ee=e=>[K(`\"${e}\" must be a string`),_(`\"${e}\" must not be empty`)],te=e=>[K(`\"${e}\" must be a string`),J()],ne=e=>[K(`\"${e}\" must be a string`),z()],oe=G(ee(\"accessKey\")),se=e=>({exchange:oe(((t,o)=>S(e.post(n.accessKey.exchange,{loginOptions:o},{token:t}))))}),ie=(e,t,n)=>(t.forEach((t=>{const o=t.split(\".\");let s=o.shift(),i=e;for(;o.length>0;){if(i=i[s],!s||!i)throw Error(`Invalid path \"${t}\", \"${s}\" is missing or has no value`);s=o.shift()}if(\"function\"!=typeof i[s])throw Error(`\"${t}\" is not a function`);const r=i[s];i[s]=n(r)})),e),re=({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||i,i),timeoutMs:Math.min(t||r,r)});var ae,de;!function(e){e.sms=\"sms\",e.voice=\"voice\",e.whatsapp=\"whatsapp\",e.im=\"im\"}(ae||(ae={})),function(e){e.email=\"email\"}(de||(de={}));const pe=Object.assign(Object.assign({},ae),de);var ue;!function(e){e.waiting=\"waiting\",e.running=\"running\",e.completed=\"completed\",e.failed=\"failed\"}(ue||(ue={}));const le=ee(\"loginId\"),ce=G(ee(\"token\")),ge=G(le),he=G(ee(\"pendingRef\")),ve=G(le,te(\"email\")),Ie=e=>({verify:ce((t=>S(e.post(n.enchantedLink.verify,{token:t})))),signIn:ge(((o,s,i={},r)=>{var{providerId:a}=i,d=t(i,[\"providerId\"]);return S(e.post(q(n.enchantedLink.signIn,pe.email),{loginId:o,URI:s,loginOptions:d,providerId:a},{token:r}))})),signUpOrIn:ge(((o,s,i={})=>{var{providerId:r}=i,a=t(i,[\"providerId\"]);return S(e.post(q(n.enchantedLink.signUpOrIn,pe.email),{loginId:o,URI:s,loginOptions:a,providerId:r}))})),signUp:ge(((o,s,i,r={})=>{var{providerId:a}=r,d=t(r,[\"providerId\"]);return S(e.post(q(n.enchantedLink.signUp,pe.email),{loginId:o,URI:s,user:i,loginOptions:d,providerId:a}))})),waitForSession:he(((t,o)=>new Promise((s=>{const{pollingIntervalMs:i,timeoutMs:r}=re(o);let a;const d=setInterval((async()=>{const o=await e.post(n.enchantedLink.session,{pendingRef:t});o.ok&&(clearInterval(d),a&&clearTimeout(a),s(S(Promise.resolve(o))))}),i);a=setTimeout((()=>{s({error:{errorDescription:`Session polling timeout exceeded: ${r}ms`,errorCode:\"0\"},ok:!1}),clearInterval(d)}),r)})))),update:{email:ve(((t,o,s,i,r)=>S(e.post(n.enchantedLink.update.email,Object.assign({loginId:t,email:o,URI:s},r),{token:i}))))}}),fe=G(ee(\"flowId\")),me=G(ee(\"executionId\"),ee(\"stepId\"),ee(\"interactionId\")),be=e=>({start:fe(((t,o,s,i,r,a,d,p=!1)=>S(e.post(n.flow.start,{flowId:t,options:o,conditionInteractionId:s,interactionId:i,componentsVersion:r,flowVersions:a,input:d,isCustomScreen:p})))),next:me(((t,o,s,i,r,a,d=!1)=>S(e.post(n.flow.next,{executionId:t,stepId:o,interactionId:s,version:i,componentsVersion:r,input:a,isCustomScreen:d}))))}),ke=ee(\"loginId\"),ye=G(ee(\"token\")),Oe=G(ke),we=G(ke,ne(\"phone\")),je=G(ke,te(\"email\")),Ue=Object.keys(pe).filter((e=>e!==ae.voice&&e!==ae.im)),Te=e=>({verify:ye((t=>S(e.post(n.magicLink.verify,{token:t})))),signIn:Ue.reduce(((o,s)=>Object.assign(Object.assign({},o),{[s]:Oe(((o,i,r={},a)=>{var{providerId:d}=r,p=t(r,[\"providerId\"]);return S(e.post(q(n.magicLink.signIn,s),{loginId:o,URI:i,loginOptions:p,providerId:d},{token:a}))}))})),{}),signUp:Ue.reduce(((o,s)=>Object.assign(Object.assign({},o),{[s]:Oe(((o,i,r,a={})=>{var{providerId:d}=a,p=t(a,[\"providerId\"]);return S(e.post(q(n.magicLink.signUp,s),{loginId:o,URI:i,user:r,loginOptions:p,providerId:d}))}))})),{}),signUpOrIn:Ue.reduce(((o,s)=>Object.assign(Object.assign({},o),{[s]:Oe(((o,i,r={})=>{var{providerId:a}=r,d=t(r,[\"providerId\"]);return S(e.post(q(n.magicLink.signUpOrIn,s),{loginId:o,URI:i,loginOptions:d,providerId:a}))}))})),{}),update:{email:je(((t,o,s,i,r)=>S(e.post(n.magicLink.update.email,Object.assign({loginId:t,email:o,URI:s},r),{token:i})))),phone:Object.keys(ae).filter((e=>e!==ae.voice)).reduce(((t,o)=>Object.assign(Object.assign({},t),{[o]:we(((t,s,i,r,a)=>S(e.post(q(n.magicLink.update.phone,o),Object.assign({loginId:t,phone:s,URI:i},a),{token:r}))))})),{})}});var Re;!function(e){e.facebook=\"facebook\",e.github=\"github\",e.google=\"google\",e.microsoft=\"microsoft\",e.gitlab=\"gitlab\",e.apple=\"apple\",e.discord=\"discord\",e.linkedin=\"linkedin\",e.slack=\"slack\"}(Re||(Re={}));const xe=G(ee(\"code\")),Pe=e=>({start:Object.assign(((t,o,s,i,r)=>S(e.post(n.oauth.start,s||{},{queryParams:Object.assign(Object.assign({provider:t},o&&{redirectURL:o}),r&&{loginHint:r}),token:i}))),Object.keys(Re).reduce(((t,o)=>Object.assign(Object.assign({},t),{[o]:(t,s,i,r)=>S(e.post(n.oauth.start,s||{},{queryParams:Object.assign(Object.assign({provider:o},t&&{redirectURL:t}),r&&{loginHint:r}),token:i}))})),{})),exchange:xe((t=>S(e.post(n.oauth.exchange,{code:t})))),startNative:(t,o,s)=>S(e.post(n.oauth.startNative,{provider:t,loginOptions:o,implicit:s})),finishNative:(t,o,s,i,r)=>S(e.post(n.oauth.finishNative,{provider:t,stateId:o,user:s,code:i,idToken:r})),getOneTapClientId:t=>S(e.get(n.oauth.oneTap.getOneTapClientId.replace(\"{provider}\",t))),verifyOneTapIDToken:(t,o,s,i)=>S(e.post(n.oauth.oneTap.verifyOneTapIDToken,{provider:t,idToken:o,nonce:s,loginOptions:i})),exchangeOneTapIDToken:(t,o,s,i)=>S(e.post(n.oauth.oneTap.exchangeOneTapIDToken,{provider:t,idToken:o,nonce:s,loginOptions:i}))}),$e=ee(\"appId\"),qe=G($e),Se=e=>({connect:qe(((t,o,s)=>{const i=null==o?void 0:o.tenantId,r=null==o?void 0:o.tenantLevel;return null==o||delete o.tenantId,null==o||delete o.tenantLevel,S(e.post(n.outbound.connect,{appId:t,tenantId:i,tenantLevel:r,options:o},{token:s}))}))}),Ae=ee(\"loginId\"),Ce=G(Ae,ee(\"code\")),Ee=G(Ae),Le=G(Ae,ne(\"phone\")),Me=G(Ae,te(\"email\")),Ne=e=>({verify:Object.keys(pe).reduce(((t,o)=>Object.assign(Object.assign({},t),{[o]:Ce(((t,s)=>S(e.post(q(n.otp.verify,o),{code:s,loginId:t}))))})),{}),signIn:Object.keys(pe).reduce(((o,s)=>Object.assign(Object.assign({},o),{[s]:Ee(((o,i={},r)=>{var{providerId:a}=i,d=t(i,[\"providerId\"]);return S(e.post(q(n.otp.signIn,s),{loginId:o,loginOptions:d,providerId:a},{token:r}))}))})),{}),signUp:Object.keys(pe).reduce(((o,s)=>Object.assign(Object.assign({},o),{[s]:Ee(((o,i,r={})=>{var{providerId:a}=r,d=t(r,[\"providerId\"]);return S(e.post(q(n.otp.signUp,s),{loginId:o,user:i,loginOptions:d,providerId:a}))}))})),{}),signUpOrIn:Object.keys(pe).reduce(((o,s)=>Object.assign(Object.assign({},o),{[s]:Ee(((o,i={})=>{var{providerId:r}=i,a=t(i,[\"providerId\"]);return S(e.post(q(n.otp.signUpOrIn,s),{loginId:o,loginOptions:a,providerId:r}))}))})),{}),update:{email:Me(((t,o,s,i)=>S(e.post(n.otp.update.email,Object.assign({loginId:t,email:o},i),{token:s})))),phone:Object.keys(ae).reduce(((t,o)=>Object.assign(Object.assign({},t),{[o]:Le(((t,s,i,r)=>S(e.post(q(n.otp.update.phone,o),Object.assign({loginId:t,phone:s},r),{token:i}))))})),{})}}),De=G(ee(\"tenant\")),He=G(ee(\"code\")),Je=e=>({start:De(((t,o,s,i,r,a,d,p)=>S(e.post(n.saml.start,s||{},Object.assign({queryParams:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({tenant:t},o&&{redirectURL:o}),r&&{ssoId:r}),a&&{forceAuthn:\"true\"}),d&&{loginHint:d}),p&&{initiatedEmail:t})},i&&{token:i}))))),exchange:He((t=>S(e.post(n.saml.exchange,{code:t}))))}),ze=ee(\"loginId\"),_e=G(ze,ee(\"code\")),Fe=G(ze),Ke=G(ze),Be=e=>({signUp:Fe(((t,o)=>S(e.post(n.totp.signUp,{loginId:t,user:o})))),verify:_e(((t,o,s,i)=>S(e.post(n.totp.verify,{loginId:t,code:o,loginOptions:s},{token:i})))),update:Ke(((t,o)=>S(e.post(n.totp.update,{loginId:t},{token:o}))))}),Ve=ee(\"loginId\"),Ye=ee(\"newPassword\"),Ze=G(Ve,ee(\"password\")),Qe=G(Ve),Ge=G(Ve,Ye),We=G(Ve,ee(\"oldPassword\"),Ye),Xe=e=>({signUp:Ze(((o,s,i,r={})=>{var{providerId:a}=r,d=t(r,[\"providerId\"]);return S(e.post(n.password.signUp,{loginId:o,password:s,user:i,loginOptions:d,providerId:a}))})),signIn:Ze(((o,s,i={})=>{var{providerId:r}=i,a=t(i,[\"providerId\"]);return S(e.post(n.password.signIn,{loginId:o,password:s,loginOptions:a,providerId:r}))})),sendReset:Qe(((t,o,s)=>S(e.post(n.password.sendReset,{loginId:t,redirectUrl:o,templateOptions:s})))),update:Ge(((t,o,s)=>S(e.post(n.password.update,{loginId:t,newPassword:o},{token:s})))),replace:We(((t,o,s)=>S(e.post(n.password.replace,{loginId:t,oldPassword:o,newPassword:s})))),policy:()=>S(e.get(n.password.policy))}),et=W(\"loginId\"),tt=ee(\"loginId\"),nt=ee(\"origin\"),ot=G(tt,nt,ee(\"name\")),st=G(tt,nt),it=G(et,nt),rt=G(tt,nt,X(\"token\")),at=G(ee(\"transactionId\"),ee(\"response\")),dt=e=>({signUp:{start:ot(((t,o,s,i,r)=>S(e.post(n.webauthn.signUp.start,{user:{loginId:t,name:s},origin:o,loginOptions:r,passkeyOptions:i})))),finish:at(((t,o)=>S(e.post(n.webauthn.signUp.finish,{transactionId:t,response:o}))))},signIn:{start:it(((t,o,s,i,r)=>S(e.post(n.webauthn.signIn.start,{loginId:t,origin:o,loginOptions:s,passkeyOptions:r},{token:i})))),finish:at(((t,o)=>S(e.post(n.webauthn.signIn.finish,{transactionId:t,response:o}))))},signUpOrIn:{start:st(((t,o,s,i)=>S(e.post(n.webauthn.signUpOrIn.start,{loginId:t,origin:o,loginOptions:i,passkeyOptions:s}))))},update:{start:rt(((t,o,s,i)=>S(e.post(n.webauthn.update.start,{loginId:t,origin:o,passkeyOptions:i},{token:s})))),finish:at(((t,o)=>S(e.post(n.webauthn.update.finish,{transactionId:t,response:o}))))}}),pt=W(\"loginId\"),ut=G(pt),lt=G(ee(\"pendingRef\")),ct=e=>({signUpOrIn:ut(((o,s={})=>{var{providerId:i}=s,r=t(s,[\"providerId\"]);return S(e.post(n.notp.signUpOrIn,{loginId:o,loginOptions:r,providerId:i}))})),signUp:ut(((o,s,i={})=>{var{providerId:r}=i,a=t(i,[\"providerId\"]);return S(e.post(n.notp.signUp,{loginId:o,user:s,providerId:r,loginOptions:a}))})),signIn:ut(((o,s={},i)=>{var{providerId:r}=s,a=t(s,[\"providerId\"]);return S(e.post(n.notp.signIn,{loginId:o,loginOptions:a,providerId:r},{token:i}))})),waitForSession:lt(((t,o)=>new Promise((s=>{const{pollingIntervalMs:i,timeoutMs:r}=re(o);let a;const d=setInterval((async()=>{const o=await e.post(n.notp.session,{pendingRef:t});o.ok&&(clearInterval(d),a&&clearTimeout(a),s(S(Promise.resolve(o))))}),i);a=setTimeout((()=>{s({error:{errorDescription:`Session polling timeout exceeded: ${r}ms`,errorCode:\"0\"},ok:!1}),clearInterval(d)}),r)}))))}),gt=G(ee(\"token\")),ht=G(X(\"token\"));var vt,It,ft=G([(vt=\"projectId\",It=ee(\"projectId\"),C(H(vt,It))())])((e=>{const{projectId:t,logger:o,baseUrl:s,cookiePolicy:i,baseHeaders:r={},refreshCookieName:a,fetch:d}=e;return p=w({baseUrl:s,projectId:t,logger:o,hooks:{get beforeRequest(){var t;return null===(t=e.hooks)||void 0===t?void 0:t.beforeRequest},get afterRequest(){var t;return null===(t=e.hooks)||void 0===t?void 0:t.afterRequest},get transformResponse(){var t;return null===(t=e.hooks)||void 0===t?void 0:t.transformResponse}},cookiePolicy:i,baseConfig:{baseHeaders:r},refreshCookieName:a,fetch:d}),{accessKey:se(p),otp:Ne(p),magicLink:Te(p),enchantedLink:Ie(p),oauth:Pe(p),outbound:Se(p),saml:Je(p),totp:Be(p),notp:ct(p),webauthn:dt(p),password:Xe(p),flow:be(p),refresh:ht(((e,t,o,s)=>{const i={};o&&(i.externalToken=o);const r=s?n.tryRefresh:n.refresh;return S(p.post(r,i,{token:e,queryParams:t}))})),selectTenant:G([K(\"tenantId\")],[Z('\"token\" must be string or undefined')])(((e,t)=>S(p.post(n.selectTenant,{tenant:e},{token:t})))),logout:ht((e=>S(p.post(n.logout,{},{token:e})))),logoutAll:ht((e=>S(p.post(n.logoutAll,{},{token:e})))),me:ht((e=>S(p.get(n.me,{token:e})))),myTenants:G([Q('\"tenants\" must a string array or a boolean')],[Z('\"token\" must be string or undefined')])(((e,t)=>{const o={};return\"boolean\"==typeof e?o.dct=e:o.ids=e,S(p.post(n.myTenants,o,{token:t}))})),history:ht((e=>S(p.get(n.history,{token:e})))),isJwtExpired:gt(R),getTenants:gt(x),getJwtPermissions:gt(P),getJwtRoles:gt($),getCurrentTenant:gt(A),httpClient:p};var p})),mt=Object.assign(ft,{DeliveryMethods:pe});export{j as HttpStatusCodes,w as createHttpClient,mt as default,re as normalizeWaitForSessionConfig,S as transformResponse,ie as wrapWith};\n//# sourceMappingURL=index.esm.js.map\n","const logger = {\n debug: (...args: any[]) => {\n // eslint-disable-next-line no-console\n console.debug(...args);\n },\n warn: (...args: any[]) => {\n // eslint-disable-next-line no-console\n console.warn(...args);\n },\n};\n\nexport default logger;\n","import { jwtDecode, JwtPayload } from 'jwt-decode';\nimport logger from '../helpers/logger';\nimport { MAX_TIMEOUT, REFRESH_THRESHOLD } from '../../constants';\n\n/**\n * Tracks whether the user has been active since the last refresh.\n * Starts as true so the first scheduled refresh always proceeds.\n * Call `reset()` after each successful refresh to start the next period fresh.\n */\nexport const createActivityTracker = () => {\n let hadActivitySinceLastRefresh = true;\n\n return {\n hadActivity: () => hadActivitySinceLastRefresh,\n reset: () => {\n hadActivitySinceLastRefresh = false;\n },\n markActive: () => {\n hadActivitySinceLastRefresh = true;\n },\n };\n};\n\n/**\n * Get the JWT expiration WITHOUT VALIDATING the JWT\n * @param token The JWT to extract expiration from\n * @returns The Date for when the JWT expires or null if there is an issue\n */\nexport const getTokenExpiration = (\n token: string,\n sessionExpiration: number,\n) => {\n if (sessionExpiration) {\n return new Date(sessionExpiration * 1000);\n }\n\n logger.debug(\n 'Could not extract expiration time from session token, trying to decode the token',\n );\n try {\n const claims = jwtDecode<JwtPayload>(token);\n if (claims.exp) {\n return new Date(claims.exp * 1000);\n }\n } catch (e) {\n return null;\n }\n};\n\nexport const millisecondsUntilDate = (date: Date) =>\n date ? date.getTime() - new Date().getTime() : 0;\n\nexport const createTimerFunctions = () => {\n const timerIds: NodeJS.Timeout[] = [];\n\n const clearAllTimers = () => {\n while (timerIds.length) {\n clearTimeout(timerIds.pop());\n }\n };\n\n const setTimer = (cb: () => void, timeout: number) => {\n timerIds.push(setTimeout(cb, timeout));\n };\n\n return { clearAllTimers, setTimer };\n};\n\nexport const getAutoRefreshTimeout = (\n sessionExpiration: Date,\n nextRefreshSeconds?: number,\n) => {\n let timeout: number;\n\n // If server provided nextRefreshSeconds, use it (converted to ms)\n // This helps balance refresh frequency for session inactivity tracking\n if (nextRefreshSeconds > 0) {\n timeout = nextRefreshSeconds * 1000;\n logger.debug(`Using provided nextRefreshSeconds: ${nextRefreshSeconds}s`);\n } else {\n // Refresh slightly before session expires\n timeout = millisecondsUntilDate(sessionExpiration) - REFRESH_THRESHOLD;\n }\n\n if (timeout > MAX_TIMEOUT) {\n logger.debug(\n `Timeout is too large (${timeout}ms), setting it to ${MAX_TIMEOUT}ms`,\n );\n timeout = MAX_TIMEOUT;\n }\n\n return timeout;\n};\n","/*! js-cookie v3.0.5 | MIT */\n/* eslint-disable no-var */\nfunction assign (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n target[key] = source[key];\n }\n }\n return target\n}\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\nvar defaultConverter = {\n read: function (value) {\n if (value[0] === '\"') {\n value = value.slice(1, -1);\n }\n return value.replace(/(%[\\dA-F]{2})+/gi, decodeURIComponent)\n },\n write: function (value) {\n return encodeURIComponent(value).replace(\n /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,\n decodeURIComponent\n )\n }\n};\n/* eslint-enable no-var */\n\n/* eslint-disable no-var */\n\nfunction init (converter, defaultAttributes) {\n function set (name, value, attributes) {\n if (typeof document === 'undefined') {\n return\n }\n\n attributes = assign({}, defaultAttributes, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(Date.now() + attributes.expires * 864e5);\n }\n if (attributes.expires) {\n attributes.expires = attributes.expires.toUTCString();\n }\n\n name = encodeURIComponent(name)\n .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)\n .replace(/[()]/g, escape);\n\n var stringifiedAttributes = '';\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue\n }\n\n // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return (document.cookie =\n name + '=' + converter.write(value, name) + stringifiedAttributes)\n }\n\n function get (name) {\n if (typeof document === 'undefined' || (arguments.length && !name)) {\n return\n }\n\n // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var jar = {};\n for (var i = 0; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var value = parts.slice(1).join('=');\n\n try {\n var found = decodeURIComponent(parts[0]);\n jar[found] = converter.read(value, found);\n\n if (name === found) {\n break\n }\n } catch (e) {}\n }\n\n return name ? jar[name] : jar\n }\n\n return Object.create(\n {\n set,\n get,\n remove: function (name, attributes) {\n set(\n name,\n '',\n assign({}, attributes, {\n expires: -1\n })\n );\n },\n withAttributes: function (attributes) {\n return init(this.converter, assign({}, this.attributes, attributes))\n },\n withConverter: function (converter) {\n return init(assign({}, this.converter, converter), this.attributes)\n }\n },\n {\n attributes: { value: Object.freeze(defaultAttributes) },\n converter: { value: Object.freeze(converter) }\n }\n )\n}\n\nvar api = init(defaultConverter, { path: '/' });\n/* eslint-enable no-var */\n\nexport { api as default };\n","/** Default name for the session cookie name / local storage key */\nexport const SESSION_TOKEN_KEY = 'DS';\n/** Default name for the refresh local storage key */\nexport const REFRESH_TOKEN_KEY = 'DSR';\n/* Default name for the id token local storage key */\nexport const ID_TOKEN_KEY = 'DSI';\n/* Default name for the trusted device token (DTD) local storage key */\nexport const TRUSTED_DEVICE_TOKEN_KEY = 'DTD';\n/* Key for persisting the server-returned refresh cookie name */\nexport const REFRESH_COOKIE_NAME_KEY = 'DSRCN';\n","import { JWTResponse } from '@descope/core-js-sdk';\nimport Cookies from 'js-cookie';\nimport { BeforeRequestHook, WebJWTResponse } from '../../types';\nimport {\n ID_TOKEN_KEY,\n REFRESH_COOKIE_NAME_KEY,\n REFRESH_TOKEN_KEY,\n SESSION_TOKEN_KEY,\n TRUSTED_DEVICE_TOKEN_KEY,\n} from './constants';\nimport {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\nimport { CookieConfig, LastCookieOptions, SameSite } from './types';\nimport logger from '../helpers/logger';\n\n/**\n * Store the session JWT as a cookie on the given domain and path with the given expiration.\n * This is useful so that the application backend will automatically get the cookie for the session\n * @param name cookie name\n * @param value The JWT to store as a cookie\n * @param cookieParams configuration that is usually returned from the JWT\n */\nfunction setJwtTokenCookie(\n name: string,\n value: string,\n authInfo: Partial<\n WebJWTResponse & { cookieSameSite: SameSite; cookieSecure: boolean }\n >,\n) {\n if (value) {\n const {\n cookieDomain,\n cookiePath,\n cookieSameSite,\n cookieExpiration,\n cookieSecure,\n } = authInfo;\n const expires = new Date(cookieExpiration * 1000); // we are getting response from the server in seconds instead of ms\n // Since its a JS cookie, we don't set the domain because we want the cookie to be on the same domain as the application\n const domainMatches = isCurrentDomainOrParentDomain(cookieDomain);\n Cookies.set(name, value, {\n path: cookiePath,\n domain: domainMatches ? cookieDomain : undefined,\n expires,\n sameSite: cookieSameSite,\n secure: cookieSecure,\n });\n }\n}\n\n/*\n * Check if the cookie domain is the same as the current domain or the parent domain\n * Examples:\n * 1. cookie domain: 'example.com', current domain: 'example.com' => true\n * 2. cookie domain: 'example.com', current domain: 'sub.example.com' => true\n * 3. cookie domain: 'example.com', current domain: 'sub.sub.example.com' => true\n * 4. cookie domain: 'example.com', current domain: 'another.com' => false\n * 5. cookie domain: 'example.com', current domain: 'example.co.il' => false\n */\nfunction isCurrentDomainOrParentDomain(cookieDomain: string): boolean {\n const currentDomain = window.location.hostname;\n const currentDomainParts = currentDomain.split('.');\n const cookieDomainParts = cookieDomain?.split('.');\n\n // check if the cookie domain items are the last items in the current domain\n const currentDomainSuffix = currentDomainParts\n .slice(-cookieDomainParts?.length)\n .join('.');\n return currentDomainSuffix === cookieDomain;\n}\n\nconst getSessionCookieName = (sessionTokenViaCookie?: CookieConfig) => {\n return sessionTokenViaCookie?.['cookieName'] || SESSION_TOKEN_KEY;\n};\n\nconst getRefreshCookieName = (refreshTokenViaCookie?: CookieConfig) => {\n return refreshTokenViaCookie?.['cookieName'] || REFRESH_TOKEN_KEY;\n};\n\nexport const persistTokens = (\n authInfo = {} as Partial<WebJWTResponse>,\n sessionTokenViaCookie: boolean | CookieConfig = false,\n storagePrefix = '',\n refreshTokenViaCookie: boolean | CookieConfig = false,\n): LastCookieOptions | undefined => {\n // persist refresh token\n const { sessionJwt, refreshJwt, trustedDeviceJwt } = authInfo;\n let cookieOptions: LastCookieOptions | undefined;\n\n if (refreshJwt) {\n if (refreshTokenViaCookie) {\n // clear local storage refresh token if exists\n removeLocalStorage(`${storagePrefix}${REFRESH_TOKEN_KEY}`);\n // Cookie configs will fallback to default values in both cases\n // 1. refreshTokenViaCookie is a boolean\n // 2. refreshTokenViaCookie is an object without the property\n const cookieSameSite = refreshTokenViaCookie['sameSite'] || 'Strict';\n const cookieSecure = refreshTokenViaCookie['secure'] ?? true;\n const cookieDomain =\n refreshTokenViaCookie['domain'] ?? authInfo.cookieDomain;\n const cookieName = getRefreshCookieName(refreshTokenViaCookie);\n if (cookieSecure && window.location.protocol !== 'https:') {\n logger.warn(\n \"Refresh token cookie is configured with secure=true but the page is not using HTTPS. The cookie will not be set. To fix this, pass refreshTokenViaCookie: { secure: process.env['NODE_ENV'] !== 'development' }\",\n );\n }\n const authInfoWithCookie = {\n ...(authInfo as Partial<JWTResponse>),\n cookieSameSite,\n cookieSecure,\n cookieDomain,\n };\n setJwtTokenCookie(cookieName, refreshJwt, authInfoWithCookie);\n\n // Cache the cookie options that were actually used\n const domainMatches = isCurrentDomainOrParentDomain(cookieDomain);\n cookieOptions = {\n ...cookieOptions,\n refresh: {\n path: authInfoWithCookie.cookiePath,\n domain: domainMatches ? cookieDomain : undefined,\n },\n };\n } else {\n // remove refresh token from cookie if exists\n const refreshCookieName = getRefreshCookieName(refreshTokenViaCookie);\n Cookies.remove(refreshCookieName);\n // persist in local storage\n setLocalStorage(`${storagePrefix}${REFRESH_TOKEN_KEY}`, refreshJwt);\n }\n }\n\n // persist session token\n if (sessionJwt) {\n if (sessionTokenViaCookie) {\n // Cookie configs will fallback to default values in both cases\n // 1. sessionTokenViaCookie is a boolean\n // 2. sessionTokenViaCookie is an object without the property\n const cookieSameSite = sessionTokenViaCookie['sameSite'] || 'Strict';\n const cookieSecure = sessionTokenViaCookie['secure'] ?? true;\n const cookieDomain =\n sessionTokenViaCookie['domain'] ?? authInfo.cookieDomain;\n const cookieName = getSessionCookieName(sessionTokenViaCookie);\n if (cookieSecure && window.location.protocol !== 'https:') {\n logger.warn(\n \"Session token cookie is configured with secure=true but the page is not using HTTPS. The cookie will not be set. To fix this, pass sessionTokenViaCookie: { secure: process.env['NODE_ENV'] !== 'development' }\",\n );\n }\n const authInfoWithCookie = {\n ...(authInfo as Partial<JWTResponse>),\n cookieSameSite,\n cookieSecure,\n cookieDomain,\n };\n setJwtTokenCookie(cookieName, sessionJwt, authInfoWithCookie);\n\n // Cache the cookie options that were actually used\n const domainMatches = isCurrentDomainOrParentDomain(cookieDomain);\n cookieOptions = {\n ...cookieOptions,\n session: {\n path: authInfoWithCookie.cookiePath,\n domain: domainMatches ? cookieDomain : undefined,\n },\n };\n } else {\n setLocalStorage(`${storagePrefix}${SESSION_TOKEN_KEY}`, sessionJwt);\n }\n }\n\n if (authInfo.idToken) {\n setLocalStorage(`${storagePrefix}${ID_TOKEN_KEY}`, authInfo.idToken);\n }\n\n // persist trusted device token (DTD) in local storage if returned in response body\n // In cookie mode, backend sets DTD as HttpOnly cookie (inaccessible to JS)\n if (trustedDeviceJwt) {\n setLocalStorage(\n `${storagePrefix}${TRUSTED_DEVICE_TOKEN_KEY}`,\n trustedDeviceJwt,\n );\n }\n\n return cookieOptions;\n};\n\n/** Return the refresh token from cookie or localStorage */\nexport function getRefreshToken(\n prefix: string = '',\n refreshTokenViaCookie?: CookieConfig,\n) {\n return (\n Cookies.get(getRefreshCookieName(refreshTokenViaCookie)) ||\n getLocalStorage(`${prefix}${REFRESH_TOKEN_KEY}`) ||\n ''\n );\n}\n\n/**\n * Return the session token. first try to get from cookie, and fallback to local storage\n * See sessionTokenViaCookie option for more details about session token location\n */\nexport function getSessionToken(\n prefix: string = '',\n sessionTokenViaCookie?: CookieConfig,\n): string {\n return (\n Cookies.get(getSessionCookieName(sessionTokenViaCookie)) ||\n getLocalStorage(`${prefix}${SESSION_TOKEN_KEY}`) ||\n ''\n );\n}\n\nexport function getIdToken(prefix: string = ''): string {\n return getLocalStorage(`${prefix}${ID_TOKEN_KEY}`) || '';\n}\n\n/**\n * Return the trusted device token (DTD) from localStorage.\n */\nexport function getTrustedDeviceToken(prefix: string = ''): string {\n return getLocalStorage(`${prefix}${TRUSTED_DEVICE_TOKEN_KEY}`) || '';\n}\n\n/** Return the server-returned refresh cookie name from localStorage, if available */\nexport function getStoredRefreshCookieName(prefix: string = ''): string | null {\n return getLocalStorage(`${prefix}${REFRESH_COOKIE_NAME_KEY}`);\n}\n\n/** Remove auth tokens from localStorage (refresh JWT, session JWT, ID token, server-returned refresh cookie name)\n * and clear the corresponding cookies if configured.\n * Note: DTD (Trusted Device Token) is NOT removed as it should stay after logging out and outlive these tokens\n */\nexport function clearTokens(\n prefix: string = '',\n sessionTokenViaCookie?: CookieConfig,\n refreshTokenViaCookie?: CookieConfig,\n cookieOptions?: LastCookieOptions,\n) {\n removeLocalStorage(`${prefix}${REFRESH_TOKEN_KEY}`);\n removeLocalStorage(`${prefix}${SESSION_TOKEN_KEY}`);\n removeLocalStorage(`${prefix}${ID_TOKEN_KEY}`);\n removeLocalStorage(`${prefix}${REFRESH_COOKIE_NAME_KEY}`);\n const sessionCookieName = getSessionCookieName(sessionTokenViaCookie);\n Cookies.remove(sessionCookieName, cookieOptions?.session);\n\n const refreshCookieName = getRefreshCookieName(refreshTokenViaCookie);\n Cookies.remove(refreshCookieName, cookieOptions?.refresh);\n}\n\nexport const beforeRequest =\n (\n prefix?: string,\n refreshTokenViaCookie?: CookieConfig,\n refreshCookieName?: string,\n ): BeforeRequestHook =>\n (config) => {\n const updatedConfig = Object.assign(config, {\n token: config.token || getRefreshToken(prefix, refreshTokenViaCookie),\n });\n\n // Inject x-descope-refresh-cookie-name from localStorage when no SDK config override\n if (!refreshCookieName) {\n const storedCookieName = getStoredRefreshCookieName(prefix);\n if (storedCookieName) {\n updatedConfig.headers = {\n ...(updatedConfig.headers || {}),\n 'x-descope-refresh-cookie-name': storedCookieName,\n };\n }\n }\n\n // Always send DTD via header if available in localStorage\n // This ensures DTD is sent in both cookie and localStorage modes\n const dtd = getTrustedDeviceToken(prefix);\n if (dtd) {\n updatedConfig.headers = {\n ...(updatedConfig.headers || {}),\n 'x-descope-trusted-device-token': dtd,\n };\n }\n\n return updatedConfig;\n };\n","import { IS_BROWSER } from '../../constants';\n\nconst FINGERPRINT_ENDPOINT_URL = 'fingerprint.endpoint.url';\n\n/** Fingerprint.js cloudflare integration */\nexport const FP_EP_URL =\n (IS_BROWSER && localStorage?.getItem(FINGERPRINT_ENDPOINT_URL)) ||\n 'https://api.descope.com';\nexport const FP_CF_ENDPOINT_PATH = '/fXj8gt3x8VulJBna/x96Emn69oZwcd7I6';\nexport const FP_CF_SCRIPT_PATH = '/fXj8gt3x8VulJBna/w78aRZnnDZ3Aqw0I';\n/** Fingerprint visitor data */\nexport const FP_BODY_DATA = 'fpData';\n/** Session ID for visitor */\nexport const VISITOR_SESSION_ID_PARAM = 'vsid';\n/** Request ID for visitor */\nexport const VISITOR_REQUEST_ID_PARAM = 'vrid';\n/** FP storage key */\nexport const FP_STORAGE_KEY = 'fp';\n// Storage FP Keys TTL is 24 hours\nexport const STORAGE_TTL_MS = 24 * 60 * 60 * 1000;\n","/**\n * Fingerprint Pro v3.11.6 - Copyright (c) FingerprintJS, Inc, 2025 (https://fingerprint.com)\n */\n\nimport{__spreadArray as e,__rest as t,__assign as n}from\"tslib\";function r(e,t){return function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,t)?e[t]:void 0}function o(e,t,n,r){var o,i=document,a=\"securitypolicyviolation\",u=function(t){var n=new URL(e,location.href),r=t.blockedURI;r!==n.href&&r!==n.protocol.slice(0,-1)&&r!==n.origin||(o=t,R())};i.addEventListener(a,u);var R=function(){return i.removeEventListener(a,u)};return null==r||r.then(R,R),Promise.resolve().then(t).then((function(e){return R(),e}),(function(e){return new Promise((function(e){var t=new MessageChannel;t.port1.onmessage=function(){return e()},t.port2.postMessage(null)})).then((function(){if(R(),o)return n(o);throw e}))}))}var i={default:\"endpoint\"},a={default:\"tlsEndpoint\"},u=\"Client timeout\",R=\"Network connection error\",c=\"Network request aborted\",s=\"Response cannot be parsed\",f=\"Blocked by CSP\",l=\"The endpoint parameter is not a valid URL\";function E(e){for(var t=\"\",n=0;n<e.length;++n)if(n>0){var r=e[n].toLowerCase();r!==e[n]?t+=\" \".concat(r):t+=e[n]}else t+=e[n].toUpperCase();return t}var d=/*#__PURE__*/E(\"WrongRegion\"),p=/*#__PURE__*/E(\"SubscriptionNotActive\"),v=/*#__PURE__*/E(\"UnsupportedVersion\"),_=/*#__PURE__*/E(\"InstallationMethodRestricted\"),O=/*#__PURE__*/E(\"HostnameRestricted\"),h=/*#__PURE__*/E(\"IntegrationFailed\"),I=\"API key required\",N=\"API key not found\",T=\"API key expired\",m=\"Request cannot be parsed\",w=\"Request failed\",A=\"Request failed to process\",P=\"Too many requests, rate limit exceeded\",y=\"Not available for this origin\",D=\"Not available with restricted header\",S=I,g=N,L=T,U=\"3.11.6\",b=\"Failed to load the JS script of the agent\",C=\"9319\";function M(t,n){var r,o,i,a,u,R,c,s=[],E=(r=function(t){var n=e([],t,!0);return{current:function(){return n[0]},postpone:function(){var e=n.shift();void 0!==e&&n.push(e)},exclude:function(){n.shift()}}}(t),a=100,u=3e3,R=0,o=function(){return Math.random()*Math.min(u,a*Math.pow(2,R++))},i=new Set,[r.current(),function(e,t){var n,a=t instanceof Error?t.message:\"\";if(a===f||a===l)r.exclude(),n=0;else if(a===C)r.exclude();else if(a===b){var u=Date.now()-e.getTime()<50,R=r.current();R&&u&&!i.has(R)&&(i.add(R),n=0),r.postpone()}else r.postpone();var c=r.current();return void 0===c?void 0:[c,null!=n?n:e.getTime()+o()-Date.now()]}]),d=E[0],p=E[1];if(void 0===d)return Promise.reject(new TypeError(\"The list of script URL patterns is empty\"));var v=function(e){var t=new Date,r=function(n){return s.push({url:e,startedAt:t,finishedAt:new Date,error:n})},o=n(e);return o.then((function(){return r()}),r),o.catch((function(e){if(null!=c||(c=e),s.length>=5)throw c;var n=p(t,e);if(!n)throw c;var r,o=n[0],i=n[1];return(r=i,new Promise((function(e){return setTimeout(e,r)}))).then((function(){return v(o)}))}))};return v(d).then((function(e){return[e,s]}))}var K=\"https://fpnpmcdn.net/v<version>/<apiKey>/loader_v<loaderVersion>.js\",B=K;function F(e){var o;e.scriptUrlPattern;var i=e.token,a=e.apiKey,u=void 0===a?i:a,R=t(e,[\"scriptUrlPattern\",\"token\",\"apiKey\"]),c=null!==(o=r(e,\"scriptUrlPattern\"))&&void 0!==o?o:K,s=function(){var e=[],t=function(){e.push({time:new Date,state:document.visibilityState})},n=function(e,t,n,r){return e.addEventListener(t,n,r),function(){return e.removeEventListener(t,n,r)}}(document,\"visibilitychange\",t);return t(),[e,n]}(),f=s[0],l=s[1];return Promise.resolve().then((function(){if(!u||\"string\"!=typeof u)throw new Error(I);var e=function(e,t){return(Array.isArray(e)?e:[e]).map((function(e){return function(e,t){var n=encodeURIComponent;return e.replace(/<[^<>]+>/g,(function(e){return\"<version>\"===e?\"3\":\"<apiKey>\"===e?n(t):\"<loaderVersion>\"===e?n(U):e}))}(String(e),t)}))}(c,u);return M(e,V)})).catch((function(e){throw l(),function(e){if(e instanceof Error&&e.message===C)return new Error(b);return e}(e)})).then((function(e){var t=e[0],r=e[1];return l(),t.load(n(n({},R),{ldi:{attempts:r,visibilityStates:f}}))}))}function V(e){return o(e,(function(){return function(e){return new Promise((function(t,n){if(function(e){if(URL.prototype)try{return new URL(e,location.href),!1}catch(t){if(t instanceof Error&&\"TypeError\"===t.name)return!0;throw t}}(e))throw new Error(l);var r=document.createElement(\"script\"),o=function(){var e;return null===(e=r.parentNode)||void 0===e?void 0:e.removeChild(r)},i=document.head||document.getElementsByTagName(\"head\")[0];r.onload=function(){o(),t()},r.onerror=function(){o(),n(new Error(b))},r.async=!0,r.src=e,i.appendChild(r)}))}(e)}),(function(){throw new Error(f)})).then(k)}function k(){var e=window,t=\"__fpjs_p_l_b\",n=e[t];if(function(e,t){var n,r=null===(n=Object.getOwnPropertyDescriptor)||void 0===n?void 0:n.call(Object,e,t);(null==r?void 0:r.configurable)?delete e[t]:r&&!r.writable||(e[t]=void 0)}(e,t),\"function\"!=typeof(null==n?void 0:n.load))throw new Error(C);return n}var G={load:F,defaultScriptUrlPattern:B,ERROR_SCRIPT_LOAD_FAIL:b,ERROR_API_KEY_EXPIRED:T,ERROR_API_KEY_INVALID:N,ERROR_API_KEY_MISSING:I,ERROR_BAD_REQUEST_FORMAT:m,ERROR_BAD_RESPONSE_FORMAT:s,ERROR_CLIENT_TIMEOUT:u,ERROR_CSP_BLOCK:f,ERROR_FORBIDDEN_ENDPOINT:O,ERROR_FORBIDDEN_HEADER:D,ERROR_FORBIDDEN_ORIGIN:y,ERROR_GENERAL_SERVER_FAILURE:w,ERROR_INSTALLATION_METHOD_RESTRICTED:_,ERROR_INTEGRATION_FAILURE:h,ERROR_INVALID_ENDPOINT:l,ERROR_NETWORK_ABORT:c,ERROR_NETWORK_CONNECTION:R,ERROR_RATE_LIMIT:P,ERROR_SERVER_TIMEOUT:A,ERROR_SUBSCRIPTION_NOT_ACTIVE:p,ERROR_TOKEN_EXPIRED:L,ERROR_TOKEN_INVALID:g,ERROR_TOKEN_MISSING:S,ERROR_UNSUPPORTED_VERSION:v,ERROR_WRONG_REGION:d,defaultEndpoint:i,defaultTlsEndpoint:a};export{T as ERROR_API_KEY_EXPIRED,N as ERROR_API_KEY_INVALID,I as ERROR_API_KEY_MISSING,m as ERROR_BAD_REQUEST_FORMAT,s as ERROR_BAD_RESPONSE_FORMAT,u as ERROR_CLIENT_TIMEOUT,f as ERROR_CSP_BLOCK,O as ERROR_FORBIDDEN_ENDPOINT,D as ERROR_FORBIDDEN_HEADER,y as ERROR_FORBIDDEN_ORIGIN,w as ERROR_GENERAL_SERVER_FAILURE,_ as ERROR_INSTALLATION_METHOD_RESTRICTED,h as ERROR_INTEGRATION_FAILURE,l as ERROR_INVALID_ENDPOINT,c as ERROR_NETWORK_ABORT,R as ERROR_NETWORK_CONNECTION,P as ERROR_RATE_LIMIT,b as ERROR_SCRIPT_LOAD_FAIL,A as ERROR_SERVER_TIMEOUT,p as ERROR_SUBSCRIPTION_NOT_ACTIVE,L as ERROR_TOKEN_EXPIRED,g as ERROR_TOKEN_INVALID,S as ERROR_TOKEN_MISSING,v as ERROR_UNSUPPORTED_VERSION,d as ERROR_WRONG_REGION,G as default,i as defaultEndpoint,B as defaultScriptUrlPattern,a as defaultTlsEndpoint,F as load};\n","import {\n load,\n defaultEndpoint,\n defaultScriptUrlPattern,\n} from '@fingerprintjs/fingerprintjs-pro';\nimport {\n FP_EP_URL,\n FP_CF_ENDPOINT_PATH,\n FP_CF_SCRIPT_PATH,\n FP_STORAGE_KEY,\n STORAGE_TTL_MS,\n VISITOR_REQUEST_ID_PARAM,\n VISITOR_SESSION_ID_PARAM,\n} from './constants';\nimport { FingerprintObject } from './types';\nimport {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\n\nconst createFingerprintObject = (\n sessionId: string,\n requestId: string,\n): FingerprintObject => ({\n [VISITOR_SESSION_ID_PARAM]: sessionId,\n [VISITOR_REQUEST_ID_PARAM]: requestId,\n});\n\n/** Generate UUID based on current time and some randomness */\nconst generateUUID = () => {\n // return alphanumeric, sortable uuid of 27 characters\n return (\n Date.now().toString(36) +\n Math.random().toString(36).substring(2) + // removing '0.' prefix\n Math.random().toString(36).substring(2)\n ).substring(0, 27);\n};\n\n// Set FP data to storage with expiration\n// We set the request id and session id together so they will have the same TTL\n// This implementation is based on https://www.sohamkamani.com/javascript/localstorage-with-ttl-expiry/\nconst setFPToStorage = (value: FingerprintObject) => {\n const now = new Date();\n // `item` is an object which contains the value\n // as well as the time when it's supposed to expire\n const item = {\n value,\n expiry: now.getTime() + STORAGE_TTL_MS,\n };\n setLocalStorage(FP_STORAGE_KEY, JSON.stringify(item));\n};\n\n// Get Fingerprint from storage, will return null if not exists, or if expired\nconst getFPFromStorage = (returnExpired = false): FingerprintObject => {\n const itemStr = getLocalStorage(FP_STORAGE_KEY);\n // if the item doesn't exist, return null\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n const now = new Date();\n // compare the expiry time of the item with the current time\n // return null if needed\n if (now.getTime() > item.expiry && !returnExpired) {\n return null;\n }\n return item.value;\n};\n\n/**\n * Ensure fingerprint ids (request id, session id) exist.\n * If not, It will generate and load them into to browser storage.\n * NOTE: Using fingerprintJS data has cost, use considerably.\n * @param fpKey FingerprintJS API key\n */\nexport const ensureFingerprintIds = async (\n fpKey: string,\n baseUrl = FP_EP_URL,\n) => {\n try {\n if (getFPFromStorage()) {\n // FP is already in storage, no need to\n return;\n }\n\n const sessionId = generateUUID();\n\n const endpointUrl = new URL(baseUrl);\n endpointUrl.pathname = FP_CF_ENDPOINT_PATH;\n\n const patterUrl = new URL(baseUrl);\n patterUrl.pathname = FP_CF_SCRIPT_PATH;\n const scriptUrlPattern =\n patterUrl.toString() +\n '?apiKey=<apiKey>&version=<version>&loaderVersion=<loaderVersion>';\n\n // load from FingerprintJS\n const agentP = load({\n apiKey: fpKey,\n endpoint: [\n endpointUrl.toString(),\n defaultEndpoint, // Fallback to default endpoint in case of error\n ],\n scriptUrlPattern: [\n scriptUrlPattern,\n defaultScriptUrlPattern, // Fallback to default CDN in case of error\n ],\n });\n\n const agent = await agentP;\n const { requestId } = await agent.get({ linkedId: sessionId });\n const fpData = createFingerprintObject(sessionId, requestId);\n setFPToStorage(fpData);\n } catch (ex) {\n // eslint-disable-next-line no-console\n console.warn('Could not load fingerprint', ex);\n }\n};\n\n/**\n * Get Fingerprint data (request ids) from storage, or create empty object\n * If data is expired, return it anyway\n */\nexport const getFingerprintData = (): FingerprintObject | null => {\n // get from storage if exists\n return getFPFromStorage(true);\n};\n\n/** Clear Fingerprint data from storage */\nexport const clearFingerprintData = () => {\n removeLocalStorage(FP_STORAGE_KEY);\n};\n","import { IS_BROWSER } from '../../constants';\nimport { CreateWebSdk } from '../../sdk';\nimport { BeforeRequestHook } from '../../types';\nimport { addHooks } from '../helpers';\nimport { FP_BODY_DATA } from './constants';\nimport { ensureFingerprintIds, getFingerprintData } from './helpers';\nimport { FingerprintOptions } from './types';\n\nconst beforeRequest: BeforeRequestHook = (config) => {\n const data = getFingerprintData();\n if (data && config.body) {\n config.body[FP_BODY_DATA] = data;\n }\n\n return config;\n};\n\n/**\n * Add fingerprint data to outgoing requests\n */\nexport const withFingerprint =\n <T extends CreateWebSdk>(createSdk: T) =>\n ({ fpKey, fpLoad, ...config }: Parameters<T>[0] & FingerprintOptions) => {\n if (!IS_BROWSER) {\n // Fingerprint is a client side only capability and will not work when running in the server (SSR)\n return createSdk(config);\n }\n\n // load fingerprint now if needed\n if (fpKey && fpLoad) {\n ensureFingerprintIds(fpKey).catch(\n // istanbul ignore next\n () => null,\n );\n }\n\n // Hook added always because fingerprint can be dynamic using flows\n return createSdk(addHooks(config, { beforeRequest }));\n };\n","export const FLOW_NONCE_PREFIX = 'descopeFlowNonce';\nexport const FLOW_NONCE_HEADER = 'X-Descope-Flow-Nonce';\n\nexport const FLOW_START_PATH = '/v1/flow/start';\nexport const FLOW_NEXT_PATH = '/v1/flow/next';\n\nexport const FLOW_NEXT_TTL = 3 * 60 * 60; // 3 hours in seconds\nexport const FLOW_START_TTL = 2 * 24 * 60 * 60; // 2 days in seconds\n","import { RequestConfig } from '@descope/core-js-sdk';\nimport {\n getLocalStorage,\n getLocalStorageKey,\n getLocalStorageLength,\n isLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\nimport {\n FLOW_NEXT_PATH,\n FLOW_NEXT_TTL,\n FLOW_NONCE_HEADER,\n FLOW_NONCE_PREFIX,\n FLOW_START_TTL,\n} from './constants';\nimport { StorageItem } from './types';\n\n// Helper to create storage key from execution ID\nconst getNonceKeyForExecution = (\n executionId: string,\n prefix: string = FLOW_NONCE_PREFIX,\n): string => {\n return `${prefix}${executionId}`;\n};\n\n// Get nonce from storage with expiration check\nconst getFlowNonce = (\n executionId: string,\n prefix: string = FLOW_NONCE_PREFIX,\n): string | null => {\n try {\n const key = getNonceKeyForExecution(executionId, prefix);\n const itemStr = getLocalStorage(key);\n\n if (!itemStr) {\n return null;\n }\n\n const item: StorageItem = JSON.parse(itemStr);\n\n if (item.expiry < Date.now()) {\n removeFlowNonce(executionId, prefix);\n return null;\n }\n\n return item.value;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error getting flow nonce:', e);\n return null;\n }\n};\n\n// Store nonce with appropriate TTL\nconst setFlowNonce = (\n executionId: string,\n nonce: string,\n isStart: boolean,\n prefix: string = FLOW_NONCE_PREFIX,\n): void => {\n try {\n const key = getNonceKeyForExecution(executionId, prefix);\n const ttlSeconds = isStart ? FLOW_START_TTL : FLOW_NEXT_TTL;\n\n const item: StorageItem = {\n value: nonce,\n expiry: Date.now() + ttlSeconds * 1000,\n isStart,\n };\n\n setLocalStorage(key, JSON.stringify(item));\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error setting flow nonce:', e);\n }\n};\n\n// Remove nonce from storage\nconst removeFlowNonce = (\n executionId: string,\n prefix: string = FLOW_NONCE_PREFIX,\n): void => {\n try {\n const key = getNonceKeyForExecution(executionId, prefix);\n removeLocalStorage(key);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error removing flow nonce:', e);\n }\n};\n\n// Extract execution ID from special format\nconst extractExecId = (executionId: string): string | null => {\n const regex = /.*\\|#\\|(.*)/;\n return regex.exec(executionId)?.[1] || null;\n};\n\n// Extract nonce and execution ID from response\nconst extractFlowNonce = async (\n req: RequestConfig,\n response: Response,\n): Promise<{ nonce: string | null; executionId: string | null }> => {\n try {\n const nonce = response.headers.get(FLOW_NONCE_HEADER);\n\n // Clone the response to prevent body consumption\n let executionId = await response\n .clone()\n .json()\n .then((data) => data?.executionId || null)\n .catch(() => null);\n\n if (!executionId) {\n // Fallback to request\n executionId = getExecutionIdFromRequest(req);\n }\n\n return {\n nonce,\n executionId: extractExecId(executionId),\n };\n } catch (e) {\n return { nonce: null, executionId: null };\n }\n};\n\n// Get execution ID from request object\nconst getExecutionIdFromRequest = (req: RequestConfig): string | null => {\n if (req.path === FLOW_NEXT_PATH && req.body?.executionId) {\n return extractExecId(req.body.executionId);\n }\n\n return null;\n};\n\n// Remove expired nonces from storage\nconst cleanupExpiredNonces = (prefix: string = FLOW_NONCE_PREFIX): void => {\n try {\n if (!isLocalStorage) {\n return;\n }\n for (let i = 0; i < getLocalStorageLength(); i++) {\n const key = getLocalStorageKey(i);\n\n if (key && key.startsWith(prefix)) {\n const itemStr = getLocalStorage(key);\n\n if (itemStr) {\n try {\n const item: StorageItem = JSON.parse(itemStr);\n\n if (item.expiry < Date.now()) {\n removeLocalStorage(key);\n }\n } catch (parseError) {\n removeLocalStorage(key);\n }\n }\n }\n }\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Error cleaning up expired nonces:', e);\n }\n};\n\nexport {\n cleanupExpiredNonces,\n extractFlowNonce,\n getExecutionIdFromRequest,\n getFlowNonce,\n getNonceKeyForExecution,\n removeFlowNonce,\n setFlowNonce,\n};\n","/** Login Id of the last user logged in */\nexport const LOCAL_STORAGE_LAST_USER_LOGIN_ID = 'dls_last_user_login_id';\n\n/** Display name of the last user logged in */\nexport const LOCAL_STORAGE_LAST_USER_DISPLAY_NAME =\n 'dls_last_user_display_name';\n","import {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\nimport {\n LOCAL_STORAGE_LAST_USER_LOGIN_ID,\n LOCAL_STORAGE_LAST_USER_DISPLAY_NAME,\n} from './constants';\n\nexport const setLastUserLoginId = (loginId: string) => {\n return setLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID, loginId);\n};\n\nexport const getLastUserLoginId = () => {\n return getLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID);\n};\n\nexport const removeLastUserLoginId = () => {\n return removeLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID);\n};\n\nexport const setLastUserDisplayName = (displayName: string) => {\n return setLocalStorage(LOCAL_STORAGE_LAST_USER_DISPLAY_NAME, displayName);\n};\n\nexport const getLastUserDisplayName = () => {\n return getLocalStorage(LOCAL_STORAGE_LAST_USER_DISPLAY_NAME);\n};\n\nexport const removeLastUserDisplayName = () => {\n return removeLocalStorage(LOCAL_STORAGE_LAST_USER_DISPLAY_NAME);\n};\n","import { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook, CoreSdk } from '../../types';\nimport { addHooks, getUserAndLastAuthFromResponse } from '../helpers';\nimport {\n getLastUserLoginId,\n removeLastUserLoginId,\n setLastUserLoginId,\n getLastUserDisplayName,\n removeLastUserDisplayName,\n setLastUserDisplayName,\n} from './helpers';\nimport { LastLoggedInUserOptions } from './types';\n\n/**\n * Adds last logged in user to flow start request\n */\n// eslint-disable-next-line import/exports-last\nexport const withLastLoggedInUser =\n <T extends CreateWebSdk>(createSdk: T) =>\n ({\n storeLastAuthenticatedUser = true,\n keepLastAuthenticatedUserAfterLogout = false,\n ...config\n }: Parameters<T>[0] & LastLoggedInUserOptions): ReturnType<T> & {\n getLastUserLoginId: typeof getLastUserLoginId;\n getLastUserDisplayName: typeof getLastUserDisplayName;\n } => {\n if (!storeLastAuthenticatedUser) {\n // We assign getLastUserLoginId and getLastUserDisplayName to the sdk\n // To keep the return type consistent\n return Object.assign(createSdk(config), {\n getLastUserLoginId,\n getLastUserDisplayName,\n }) as any;\n }\n const afterRequest: AfterRequestHook = async (_req, res) => {\n const { userInfo, lastAuth } = await getUserAndLastAuthFromResponse(res);\n const loginId = userInfo?.loginIds?.[0];\n const displayName = userInfo?.name;\n if (loginId) {\n setLastUserLoginId(loginId);\n setLastUserDisplayName(displayName);\n } else if (lastAuth?.loginId) {\n setLastUserLoginId(lastAuth.loginId);\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n let wrappedSdk = wrapWith(sdk, ['flow.start'], startWrapper);\n wrappedSdk = wrapWith(\n wrappedSdk,\n ['logout', 'logoutAll'],\n logoutWrapper(keepLastAuthenticatedUserAfterLogout),\n );\n return Object.assign(wrappedSdk, {\n getLastUserLoginId,\n getLastUserDisplayName,\n }) as any;\n };\n\nconst startWrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n args[1] = args[1] || {};\n const [, options = {}] = args as unknown as Parameters<\n CoreSdk['flow']['start']\n >;\n const loginId = getLastUserLoginId();\n const displayName = getLastUserDisplayName();\n\n if (loginId) {\n options.lastAuth ??= {};\n options.lastAuth.loginId = loginId;\n options.lastAuth.name = displayName;\n }\n\n const resp = await fn(...args);\n\n return resp;\n };\n\nconst logoutWrapper =\n (keepOnLogout?: boolean): SdkFnWrapper<{}> =>\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n if (keepOnLogout) {\n return resp;\n }\n\n removeLastUserLoginId();\n removeLastUserDisplayName();\n\n return resp;\n };\n","/** localStorage key indicating this browser has an active authenticated session.\n * Presence is used to decide whether the up-front /try-refresh call can be skipped. */\nexport const LOGGED_IN_INDICATOR_KEY = 'DSLI';\n\n/** Hidden escape hatch: set this key to any non-empty value in localStorage to\n * force tryRefresh even when no login indicator is present.\n * Useful for apps with storeLastAuthenticatedUser=false whose users get stuck\n * logged-out after upgrading (no DSLI written yet). Not documented intentionally. */\nexport const LOGGED_IN_INDICATOR_DISABLED_KEY = 'DSLI_DISABLED';\n","import { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport {\n addHooks,\n getAuthInfoFromResponse,\n isInvalidSessionResponse,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\nimport { LOGGED_IN_INDICATOR_KEY } from './constants';\n\nconst logoutWrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n removeLocalStorage(LOGGED_IN_INDICATOR_KEY);\n return resp;\n };\n\n// The DSLI key is intentionally unprefixed — same convention as the lastUser\n// localStorage key (`dls_last_user_login_id`) which is the bootstrap fallback\n// used by `hasLoginIndicator`.\nconst withLoggedInIndicator =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0]): ReturnType<T> => {\n const afterRequest: AfterRequestHook = async (req, res) => {\n if (isInvalidSessionResponse(req, res)) {\n removeLocalStorage(LOGGED_IN_INDICATOR_KEY);\n return;\n }\n const authInfo = await getAuthInfoFromResponse(res);\n // sessionExpiration is the reliable auth-success signal — JWTs may live in\n // HttpOnly cookies, but sessionExpiration is always in the response body.\n if (authInfo?.sessionExpiration) {\n setLocalStorage(\n LOGGED_IN_INDICATOR_KEY,\n String(authInfo.sessionExpiration),\n );\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n const wrappedSdk = wrapWith(\n sdk,\n ['logout', 'logoutAll', 'oidc.logout'],\n logoutWrapper,\n );\n\n return wrappedSdk as ReturnType<T>;\n };\n\nexport { withLoggedInIndicator };\nexport default withLoggedInIndicator;\n","// create publisher/subscriber instances\nexport function createPubSub<T extends any>() {\n const cbs = [];\n\n const sub = (cb: (data: T) => void) => {\n const idx = cbs.push(cb) - 1;\n return () => cbs.splice(idx, 1);\n };\n\n const pub = (data: T) => {\n cbs.forEach((cb) => cb(data));\n };\n\n return { pub, sub };\n}\n","import {\n Claims,\n SdkFnWrapper,\n UserResponse,\n wrapWith,\n} from '@descope/core-js-sdk';\nimport { CreateWebSdk, WebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport {\n addHooks,\n getAuthInfoFromResponse,\n getUserFromResponse,\n isInvalidSessionResponse,\n} from '../helpers';\nimport { createPubSub } from './helpers';\nimport logger from '../helpers/logger';\n\n/**\n * Adds 4 event functions to the sdk,\n * onSessionTokenChange: Gets a callback and call it whenever there is a change in session token\n * onIsAuthenticatedChange: Gets a callback and call it whenever there is a change in authentication status\n * onUserChange: Gets a callback and call it whenever there is a change in current logged in user\n * onClaimsChange: Gets a callback and call it whenever there is a change in the JWT claims\n */\nexport const withNotifications =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0]) => {\n const sessionExpirationPS = createPubSub<number | null>();\n const sessionPS = createPubSub<string | null>();\n const userPS = createPubSub<UserResponse | null>();\n const claimsPS = createPubSub<Claims | null>();\n\n const afterRequest: AfterRequestHook = async (req, res) => {\n if (isInvalidSessionResponse(req, res)) {\n logger.debug(\n 'Session invalidated, notifying subscribers with empty values',\n );\n sessionPS.pub(null);\n userPS.pub(null);\n sessionExpirationPS.pub(null);\n claimsPS.pub(null);\n } else {\n const userDetails = await getUserFromResponse(res);\n if (userDetails) userPS.pub(userDetails);\n\n const { sessionJwt, sessionExpiration, claims } =\n await getAuthInfoFromResponse(res);\n\n if (sessionJwt) sessionPS.pub(sessionJwt);\n if (claims) claimsPS.pub(claims);\n\n if (sessionExpiration || sessionJwt) {\n // We also publish the session expiration if there is a session jwt\n // as a temporary fix for the issue where the session expiration is not\n // being sent in the response in Flows (42 is a magic number)\n sessionExpirationPS.pub(sessionExpiration || 42);\n }\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n const wrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n\n sessionPS.pub(null);\n userPS.pub(null);\n sessionExpirationPS.pub(null);\n claimsPS.pub(null);\n\n return resp;\n };\n\n const wrappedSdk = wrapWith(\n sdk,\n ['logout', 'logoutAll', 'oidc.logout'],\n wrapper,\n );\n\n return Object.assign(wrappedSdk, {\n onSessionTokenChange: sessionPS.sub,\n onUserChange: userPS.sub,\n onClaimsChange: claimsPS.sub,\n onIsAuthenticatedChange: (cb: (isAuthenticated: boolean) => void) => {\n // If and only if there is a session expiration, then the user is authenticated\n return sessionExpirationPS.sub((exp) => {\n cb(!!exp);\n });\n },\n });\n };\n","/* eslint-disable import/exports-last */\nimport { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { IS_BROWSER } from '../../constants';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport {\n addHooks,\n getAuthInfoFromResponse,\n isInvalidSessionResponse,\n setLocalStorage,\n removeLocalStorage,\n} from '../helpers';\nimport {\n beforeRequest,\n clearTokens,\n getRefreshToken,\n getSessionToken,\n persistTokens,\n getIdToken,\n} from './helpers';\nimport { REFRESH_COOKIE_NAME_KEY } from './constants';\nimport { CookieConfig, LastCookieOptions, PersistTokensOptions } from './types';\nimport logger from '../helpers/logger';\n\n/**\n * Persist authentication tokens in cookie/storage\n */\nexport const withPersistTokens =\n <T extends CreateWebSdk>(createSdk: T) =>\n <A extends CookieConfig>({\n persistTokens: isPersistTokens,\n sessionTokenViaCookie,\n refreshTokenViaCookie,\n storagePrefix,\n refreshCookieName,\n ...config\n }: Parameters<T>[0] & PersistTokensOptions<A>): A extends false\n ? ReturnType<T>\n : ReturnType<T> & {\n getRefreshToken: () => string;\n getSessionToken: () => string;\n getIdToken: () => string;\n } => {\n if (!isPersistTokens || !IS_BROWSER) {\n if (isPersistTokens) {\n // Storing auth tokens in local storage and cookies are a client side only capabilities\n // and will not be done when running in the server\n }\n return createSdk({ refreshCookieName, ...config }) as any;\n }\n\n // Cache to store the cookie options that were used when setting the cookie\n // This allows us to use the exact same options when removing the cookie\n let lastCookieOptions: LastCookieOptions | undefined;\n\n const afterRequest: AfterRequestHook = async (req, res) => {\n if (isInvalidSessionResponse(req, res)) {\n logger.debug('Session invalidated, clearing persisted tokens');\n clearTokens(\n storagePrefix,\n sessionTokenViaCookie,\n refreshTokenViaCookie,\n lastCookieOptions,\n );\n } else {\n const authInfo = await getAuthInfoFromResponse(res);\n\n // Persist or clear server-returned refresh cookie name based on auth response\n if (authInfo.cookieName) {\n setLocalStorage(\n `${storagePrefix || ''}${REFRESH_COOKIE_NAME_KEY}`,\n authInfo.cookieName,\n );\n } else if (authInfo.refreshJwt) {\n // Auth response issued a new refresh token but no custom cookie name —\n // clear any stale value so we don't keep sending an outdated name\n removeLocalStorage(\n `${storagePrefix || ''}${REFRESH_COOKIE_NAME_KEY}`,\n );\n }\n\n const newCookieOptions = persistTokens(\n authInfo,\n sessionTokenViaCookie,\n storagePrefix,\n refreshTokenViaCookie,\n );\n // Only update lastCookieOptions if we actually set a cookie\n if (newCookieOptions) {\n lastCookieOptions = newCookieOptions;\n }\n }\n };\n\n const sdk = createSdk(\n addHooks(\n { refreshCookieName, ...config },\n {\n beforeRequest: beforeRequest(\n storagePrefix,\n refreshTokenViaCookie,\n refreshCookieName,\n ),\n afterRequest,\n },\n ),\n );\n\n const wrappedSdk = wrapWith(\n sdk,\n ['logout', 'logoutAll', 'oidc.logout'],\n logoutWrapper(\n storagePrefix,\n sessionTokenViaCookie,\n refreshTokenViaCookie,\n () => lastCookieOptions,\n ),\n );\n\n const refreshToken = () =>\n getRefreshToken(storagePrefix, refreshTokenViaCookie);\n const sessionToken = () =>\n getSessionToken(storagePrefix, sessionTokenViaCookie);\n const idToken = () => getIdToken(storagePrefix);\n\n return Object.assign(wrappedSdk, {\n getRefreshToken: refreshToken,\n getSessionToken: sessionToken,\n getIdToken: idToken,\n }) as any;\n };\n\nconst logoutWrapper =\n (\n prefix?: string,\n sessionTokenViaCookie?: CookieConfig,\n refreshTokenViaCookie?: CookieConfig,\n getCookieOptions?: () => LastCookieOptions | undefined,\n ): SdkFnWrapper<{}> =>\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n\n clearTokens(\n prefix,\n sessionTokenViaCookie,\n refreshTokenViaCookie,\n getCookieOptions?.(),\n );\n\n return resp;\n };\n\nexport default withPersistTokens;\n","import { JWTResponse, SdkResponse, ResponseData } from '@descope/core-js-sdk';\nimport { IS_BROWSER } from '../constants';\nimport { CoreSdk, PasskeyOptions } from '../types';\nimport { isDescopeBridge } from '../enhancers/helpers';\n\ntype CreateWebauthn = typeof createWebAuthn;\n\nconst withCoreFns =\n <I extends Parameters<CreateWebauthn>, O extends ReturnType<CreateWebauthn>>(\n creator: (...args: I) => O,\n ) =>\n (...args: I) => {\n const obj = creator(...args);\n\n Object.assign(obj.signUp, args[0].webauthn.signUp);\n Object.assign(obj.signIn, args[0].webauthn.signIn);\n Object.assign(obj.signUpOrIn, args[0].webauthn.signUpOrIn);\n Object.assign(obj.update, args[0].webauthn.update);\n\n return obj as {\n [K in keyof O]: K extends keyof I[0]['webauthn']\n ? O[K] & I[0]['webauthn'][K]\n : O[K];\n };\n };\n\n/** Constructs a higher level WebAuthn API that wraps the functions from code-js-sdk */\nconst createWebAuthn = (sdk: CoreSdk) => ({\n async signUp(\n identifier: string,\n name: string,\n passkeyOptions?: PasskeyOptions,\n ) {\n const startResponse = await sdk.webauthn.signUp.start(\n identifier,\n window.location.origin,\n name,\n passkeyOptions,\n );\n if (!startResponse.ok) {\n return startResponse as unknown as SdkResponse<JWTResponse>;\n }\n const createResponse = await create(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signUp.finish(\n startResponse.data.transactionId,\n createResponse,\n );\n return finishResponse;\n },\n\n async signIn(identifier: string, passkeyOptions?: PasskeyOptions) {\n const startResponse = await sdk.webauthn.signIn.start(\n identifier,\n window.location.origin,\n undefined,\n undefined,\n passkeyOptions,\n );\n if (!startResponse.ok) {\n return startResponse as unknown as SdkResponse<JWTResponse>;\n }\n const getResponse = await get(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signIn.finish(\n startResponse.data.transactionId,\n getResponse,\n );\n return finishResponse;\n },\n\n async signUpOrIn(identifier: string, passkeyOptions?: PasskeyOptions) {\n const startResponse = await sdk.webauthn.signUpOrIn.start(\n identifier,\n window.location.origin,\n passkeyOptions,\n );\n if (!startResponse.ok) {\n return startResponse as unknown as SdkResponse<JWTResponse>;\n }\n if (startResponse.data?.create) {\n const createResponse = await create(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signUp.finish(\n startResponse.data.transactionId,\n createResponse,\n );\n return finishResponse;\n } else {\n const getResponse = await get(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signIn.finish(\n startResponse.data.transactionId,\n getResponse,\n );\n return finishResponse;\n }\n },\n\n async update(\n identifier: string,\n token?: string,\n passkeyOptions?: PasskeyOptions,\n ) {\n const startResponse = await sdk.webauthn.update.start(\n identifier,\n window.location.origin,\n token,\n passkeyOptions,\n );\n if (!startResponse.ok) {\n return startResponse as SdkResponse<ResponseData>;\n }\n const createResponse = await create(startResponse.data.options);\n const finishResponse = await sdk.webauthn.update.finish(\n startResponse.data.transactionId,\n createResponse,\n );\n return finishResponse;\n },\n\n /** Helper functions for working with WebAuthn browser APIs using JSON data */\n helpers: {\n /** Wraps the navigation.credentials.create call to translate JSON inputs and outputs */\n create,\n /** Wraps the navigation.credentials.get call to translate JSON inputs and outputs */\n get,\n /** Checks if the browser supports WebAuthn, and can optionally require in\n * addition that the browser supports WebAuthn with built-in biometrics */\n isSupported,\n conditional,\n },\n});\n\n// Helpers functions\n\nasync function create(options: string): Promise<string> {\n const createOptions = decodeCreateOptions(options);\n const createResponse = (await navigator.credentials.create(\n createOptions,\n )) as AttestationPublicKeyCredential;\n return encodeCreateResponse(createResponse);\n}\n\nasync function get(options: string): Promise<string> {\n const getOptions = decodeGetOptions(options);\n const getResponse = (await navigator.credentials.get(\n getOptions,\n )) as AssertionPublicKeyCredential;\n return encodeGetResponse(getResponse);\n}\n\n/**\n * This function should be used in passkeys autofill (conditional UI)\n * It handles the call to \"navigator.credentials.get\" and adds the required options\n * @param options webauthn start options\n * @param abort: AbortController instance\n * @returns encoded \"navigator.credentials.get\" response\n */\nasync function conditional(\n options: string,\n abort: AbortController,\n): Promise<string> {\n const getOptions = decodeGetOptions(options);\n getOptions.signal = abort.signal;\n getOptions.mediation = 'conditional' as any;\n const getResponse = (await navigator.credentials.get(\n getOptions,\n )) as AssertionPublicKeyCredential;\n return encodeGetResponse(getResponse);\n}\n\n// eslint-disable-next-line import/exports-last\nexport async function isSupported(\n requirePlatformAuthenticator: boolean = false,\n): Promise<boolean> {\n if (!IS_BROWSER) {\n return Promise.resolve(false);\n }\n // when running in a native bridge we defer the support decision to the native side,\n // but only if the mobile SDK version is recent enough to support this flag in hostInfo\n if (isDescopeBridge()) {\n const supported = (window as any).descopeBridge?.hostInfo?.webauthn;\n if (typeof supported === 'boolean') {\n return supported;\n }\n }\n const supported = !!(\n window.PublicKeyCredential &&\n navigator.credentials &&\n navigator.credentials.create &&\n navigator.credentials.get\n );\n if (\n supported &&\n requirePlatformAuthenticator &&\n PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable\n ) {\n return PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();\n }\n return supported;\n}\n\n// Conversion of data structures for Create/Attestation/Register ceremony\n\ntype AttestationPublicKeyCredential = PublicKeyCredential & {\n response: AuthenticatorAttestationResponse;\n};\n\nfunction decodeCreateOptions(value: string): CredentialCreationOptions {\n const options = JSON.parse(value);\n options.publicKey.challenge = decodeBase64Url(options.publicKey.challenge);\n options.publicKey.user.id = decodeBase64Url(options.publicKey.user.id);\n options.publicKey.excludeCredentials?.forEach((item: any) => {\n item.id = decodeBase64Url(item.id);\n });\n return options;\n}\n\nfunction encodeCreateResponse(\n credential: AttestationPublicKeyCredential,\n): string {\n return JSON.stringify({\n id: credential.id,\n rawId: encodeBase64Url(credential.rawId),\n type: credential.type,\n response: {\n attestationObject: encodeBase64Url(credential.response.attestationObject),\n clientDataJSON: encodeBase64Url(credential.response.clientDataJSON),\n },\n });\n}\n\n// Conversion of data structures for Get/Assertion/Login ceremony\n\ntype AssertionPublicKeyCredential = PublicKeyCredential & {\n response: AuthenticatorAssertionResponse;\n};\n\nfunction decodeGetOptions(value: string): CredentialRequestOptions {\n const options = JSON.parse(value);\n options.publicKey.challenge = decodeBase64Url(options.publicKey.challenge);\n options.publicKey.allowCredentials?.forEach((item: any) => {\n item.id = decodeBase64Url(item.id);\n });\n return options;\n}\n\nfunction encodeGetResponse(credential: AssertionPublicKeyCredential): string {\n return JSON.stringify({\n id: credential.id,\n rawId: encodeBase64Url(credential.rawId),\n type: credential.type,\n response: {\n authenticatorData: encodeBase64Url(credential.response.authenticatorData),\n clientDataJSON: encodeBase64Url(credential.response.clientDataJSON),\n signature: encodeBase64Url(credential.response.signature),\n userHandle: credential.response.userHandle\n ? encodeBase64Url(credential.response.userHandle)\n : undefined,\n },\n });\n}\n\n// Conversion between ArrayBuffers and Base64Url strings\n\nfunction decodeBase64Url(value: string): ArrayBufferLike {\n const base64 = value.replace(/_/g, '/').replace(/-/g, '+');\n return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)).buffer;\n}\n\nfunction encodeBase64Url(value: ArrayBufferLike): string {\n const base64 = btoa(String.fromCharCode.apply(null, new Uint8Array(value)));\n return base64.replace(/\\//g, '_').replace(/\\+/g, '-').replace(/=/g, '');\n}\n\n// Exports\nexport default withCoreFns(createWebAuthn);\n","export const apiPaths = {\n fedcm: {\n config: '/fedcm/config',\n },\n};\n","import { JWTResponse, SdkResponse, LoginOptions } from '@descope/core-js-sdk';\nimport { CoreSdk } from '../types';\nimport { IS_BROWSER } from '../constants';\nimport { apiPaths } from '../apiPaths';\n\n/**\n * Configuration for OneTap.\n */\ninterface OneTapConfig {\n /** Whether to auto select. Optional. */\n auto_select?: boolean;\n\n /** Whether to cancel on tap outside. Optional. */\n cancel_on_tap_outside?: boolean;\n\n /** ID of the prompt parent. Optional. */\n prompt_parent_id?: string;\n\n /** Context. Optional. */\n context?: 'signin' | 'signup' | 'use';\n\n /** Callback function to handle the intermediate iframe close event. Optional. */\n intermediate_iframe_close_callback?: () => void;\n\n /** Whether to support ITP. Optional. */\n itp_support?: boolean;\n\n /** Login hint. Optional. */\n login_hint?: string;\n\n /** HD. Optional. */\n hd?: string;\n\n /** Whether to use FedCM for prompt. Optional. */\n use_fedcm_for_prompt?: boolean;\n}\n\n/**\n * Response from the credential.\n */\ninterface CredentialResponse {\n /** Credential. */\n credential: string;\n\n /** How the selection was made. */\n select_by:\n | 'auto'\n | 'user'\n | 'user_1tap'\n | 'user_2tap'\n | 'btn'\n | 'btn_confirm'\n | 'btn_add_session'\n | 'btn_confirm_add_session';\n}\n\ninterface FedCMAssertionResponse {\n token: string;\n error: {\n code: string;\n url: string;\n };\n}\n\ninterface IdentityProviderConfig {\n configURL: string;\n clientId: string;\n}\n\ntype IdentityCredentialRequestOptionsContext =\n | 'signin'\n | 'signup'\n | 'use'\n | 'continue';\n\ninterface IdentityProviderRequestOptions extends IdentityProviderConfig {\n nonce?: string;\n loginHint?: string;\n domainHint?: string;\n}\n\ninterface IdentityCredentialRequestOptions {\n providers: IdentityProviderRequestOptions[];\n context?: IdentityCredentialRequestOptionsContext;\n}\n\ninterface FedCMCredentialRequestOptions {\n identity?: IdentityCredentialRequestOptions;\n}\n\ntype OneTapInitialize = ({\n client_id,\n callback,\n nonce,\n}: {\n client_id: string;\n callback: (res: CredentialResponse) => void;\n nonce: string;\n} & OneTapConfig) => void;\n\ntype PromptNotification = {\n isSkippedMoment: () => boolean;\n isDismissedMoment: () => boolean;\n getDismissedReason: () => string;\n getSkippedReason: () => string;\n};\n\nconst generateNonce = () => {\n if (window.crypto && window.crypto.getRandomValues) {\n const array = new Uint8Array(16); // 16 bytes = 128 bits\n window.crypto.getRandomValues(array);\n return Array.from(array, (byte) => byte.toString(16).padStart(2, '0')).join(\n '',\n );\n } else {\n // Fallback (not cryptographically secure)\n return Math.random().toString(36).substring(2);\n }\n};\n\n/**\n * Constructs a higher level FedCM API that wraps the functions from code-js-sdk.\n * @param sdk The CoreSdk instance.\n * @returns The FedCM API.\n */\nconst createFedCM = (sdk: CoreSdk, projectId: string) => ({\n onetap: {\n requestExchangeCode(options: {\n provider?: string;\n oneTapConfig?: OneTapConfig;\n loginOptions?: LoginOptions;\n onSkipped?: (reason?: string) => void;\n onDismissed?: (reason?: string) => void;\n onFailed?: (error: Error) => void;\n onCodeReceived: (code: string) => void;\n }) {\n performOneTap(sdk, options);\n },\n\n requestAuthentication(options?: {\n provider?: string;\n oneTapConfig?: OneTapConfig;\n loginOptions?: LoginOptions;\n onSkipped?: (reason?: string) => void;\n onDismissed?: (reason?: string) => void;\n onFailed?: (error: Error) => void;\n onAuthenticated?: (response: JWTResponse) => void;\n }) {\n performOneTap(sdk, options);\n },\n },\n\n /**\n * @deprecated Call `onetap.requestAuthentication` instead.\n */\n async oneTap(\n provider?: string,\n oneTapConfig?: OneTapConfig,\n loginOptions?: LoginOptions,\n onSkipped?: (reason?: string) => void,\n onDismissed?: (reason?: string) => void,\n ) {\n await performOneTapAsync(sdk, {\n provider,\n oneTapConfig,\n loginOptions,\n onSkipped,\n onDismissed,\n });\n },\n\n async launch(\n context?: IdentityCredentialRequestOptionsContext,\n ): Promise<SdkResponse<JWTResponse>> {\n const configURL = sdk.httpClient.buildUrl(\n projectId + apiPaths.fedcm.config,\n );\n const req: FedCMCredentialRequestOptions = {\n identity: {\n context: context || 'signin',\n providers: [\n {\n configURL,\n clientId: projectId,\n },\n ],\n },\n };\n const res = await navigator.credentials?.get(req as any);\n return sdk.refresh((res as any as FedCMAssertionResponse).token);\n },\n\n isSupported(): boolean {\n return IS_BROWSER && 'IdentityCredential' in window;\n },\n\n async isLoggedIn(\n context?: IdentityCredentialRequestOptionsContext,\n ): Promise<boolean> {\n const configURL = sdk.httpClient.buildUrl(\n projectId + apiPaths.fedcm.config,\n );\n try {\n const req: FedCMCredentialRequestOptions = {\n identity: {\n context: context || 'signin',\n providers: [\n {\n configURL,\n clientId: projectId,\n },\n ],\n },\n };\n const res = await navigator.credentials?.get(req as any);\n return !!res && !!(res as any as FedCMAssertionResponse).token;\n } catch (e) {\n // Any error likely indicates no active session.\n return false;\n }\n },\n});\n\n// Helpers functions\nasync function getGoogleClient(): Promise<{\n initialize: OneTapInitialize;\n prompt: (cb: (notification: PromptNotification) => void) => void;\n}> {\n return new Promise((resolve, reject) => {\n if ((window as any).google) {\n resolve((window as any).google.accounts.id);\n return;\n }\n\n /* istanbul ignore next */\n let googleScript = document.getElementById(\n 'google-gsi-client-script',\n ) as HTMLScriptElement;\n\n /* istanbul ignore next */\n if (!googleScript) {\n googleScript = document.createElement('script');\n document.head.appendChild(googleScript);\n googleScript.async = true;\n googleScript.defer = true;\n googleScript.id = 'google-gsi-client-script';\n googleScript.src = 'https://accounts.google.com/gsi/client';\n }\n\n /* istanbul ignore next */\n googleScript.onload = function () {\n if ((window as any).google) {\n resolve((window as any).google.accounts.id);\n } else {\n reject('Failed to load Google GSI client script - not loaded properly');\n }\n };\n /* istanbul ignore next */\n googleScript.onerror = function () {\n reject('Failed to load Google GSI client script - failed to load');\n };\n });\n}\n\nasync function performOneTap(\n sdk: CoreSdk,\n options?: {\n provider?: string;\n oneTapConfig?: OneTapConfig;\n loginOptions?: LoginOptions;\n onSkipped?: (reason?: string) => void;\n onDismissed?: (reason?: string) => void;\n onFailed?: (error: Error) => void;\n onCodeReceived?: (code: string) => void;\n onAuthenticated?: (response: JWTResponse) => void;\n },\n) {\n try {\n await performOneTapAsync(sdk, options);\n } catch (e) {\n options?.onFailed?.(e);\n }\n}\n\nasync function performOneTapAsync(\n sdk: CoreSdk,\n options?: {\n provider?: string;\n oneTapConfig?: OneTapConfig;\n loginOptions?: LoginOptions;\n onSkipped?: (reason?: string) => void;\n onDismissed?: (reason?: string) => void;\n onCodeReceived?: (code: string) => void;\n onAuthenticated?: (response: JWTResponse) => void;\n },\n) {\n const auth = await startOneTap(\n sdk,\n options.provider,\n options.oneTapConfig,\n options.onSkipped,\n options.onDismissed,\n );\n if (!auth.credential) {\n return null;\n }\n if (options?.onCodeReceived) {\n const response = await sdk.oauth.verifyOneTapIDToken(\n auth.provider,\n auth.credential,\n auth.nonce,\n options?.loginOptions,\n );\n if (!response.ok || !response.data) {\n throw new Error(\n 'Failed to verify OneTap client ID for provider ' + auth.provider,\n );\n }\n options?.onCodeReceived?.(response.data.code);\n } else {\n const response = await sdk.oauth.exchangeOneTapIDToken(\n auth.provider,\n auth.credential,\n auth.nonce,\n options?.loginOptions,\n );\n if (!response.ok || !response.data) {\n throw new Error(\n 'Failed to exchange OneTap client ID for provider ' + auth.provider,\n );\n }\n options?.onAuthenticated?.(response.data);\n }\n}\n\nasync function startOneTap(\n sdk: CoreSdk,\n provider: string = 'google',\n oneTapConfig?: OneTapConfig,\n onSkipped?: (reason?: string) => void,\n onDismissed?: (reason?: string) => void,\n): Promise<{\n provider: string;\n nonce: string;\n credential?: string;\n}> {\n const nonce = generateNonce();\n const googleClient = await getGoogleClient();\n\n const clientIdRes = await sdk.oauth.getOneTapClientId(provider);\n if (!clientIdRes.ok) {\n throw new Error('Failed to get OneTap client ID for provider ' + provider);\n }\n const clientId = clientIdRes.data.clientId;\n\n return new Promise((resolve) => {\n const callback = (response?: CredentialResponse) => {\n resolve({\n provider,\n nonce,\n credential: response?.credential,\n });\n };\n\n googleClient.initialize({\n ...oneTapConfig,\n itp_support: oneTapConfig?.itp_support ?? true,\n use_fedcm_for_prompt: oneTapConfig?.use_fedcm_for_prompt ?? true,\n client_id: clientId,\n callback,\n nonce,\n });\n\n googleClient.prompt((notification) => {\n if (onDismissed && notification?.isDismissedMoment()) {\n const reason = notification.getDismissedReason?.();\n onDismissed?.(reason);\n callback();\n return;\n }\n\n if (onSkipped && notification?.isSkippedMoment()) {\n const reason = notification.getSkippedReason?.();\n onSkipped?.(reason);\n callback();\n return;\n }\n });\n });\n}\n\nexport default createFedCM;\nexport type { OneTapConfig };\n","import { CoreSdk, ReplaceParam } from '../types';\nimport { isSupported } from './webauthn';\n\ntype CoreSdkFlowStartArgs = Parameters<CoreSdk['flow']['start']>;\ntype Options = Pick<\n CoreSdkFlowStartArgs[1],\n | 'tenant'\n | 'redirectUrl'\n | 'redirectAuth'\n | 'oidcIdpStateId'\n | 'samlIdpStateId'\n | 'wsfedIdpStateId'\n | 'samlIdpUsername'\n | 'ssoAppId'\n | 'thirdPartyAppId'\n | 'oidcLoginHint'\n | 'preview'\n | 'abTestingKey'\n | 'client'\n | 'locale'\n | 'oidcPrompt'\n | 'oidcErrorRedirectUri'\n | 'oidcResource'\n | 'nativeOptions'\n | 'thirdPartyAppStateId'\n | 'applicationScopes'\n | 'outboundAppId'\n | 'outboundAppScopes'\n> & {\n lastAuth?: Omit<CoreSdkFlowStartArgs[1]['lastAuth'], 'loginId' | 'name'>;\n};\n\nconst START_OPTIONS_VERSION_PREFER_START_REDIRECT_URL = 1;\n\nexport default (coreSdk: CoreSdk) => ({\n ...coreSdk.flow,\n // wrap start fn and adds more data to the start options\n start: async (...args: ReplaceParam<CoreSdkFlowStartArgs, '1', Options>) => {\n const webAuthnSupport = await isSupported();\n const decoratedOptions = {\n location: window.location.href,\n ...args[1],\n deviceInfo: {\n webAuthnSupport,\n },\n startOptionsVersion: START_OPTIONS_VERSION_PREFER_START_REDIRECT_URL,\n };\n\n args[1] = decoratedOptions;\n\n return coreSdk.flow.start(...args);\n },\n});\n","import { RequestConfig, SdkResponse, URLResponse } from '@descope/core-js-sdk';\nimport type {\n CreateSigninRequestArgs,\n CreateSignoutRequestArgs,\n OidcClient,\n OidcClientSettings,\n SigninResponse,\n WebStorageStateStore,\n} from 'oidc-client-ts';\nimport {\n OIDC_CLIENT_TS_DESCOPE_CDN_URL,\n OIDC_CLIENT_TS_JSDELIVR_CDN_URL,\n} from '../../constants';\nimport { getIdToken } from '../../enhancers/withPersistTokens/helpers';\nimport {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../../enhancers/helpers';\nimport { CoreSdk, OidcConfig, OidcConfigOptions } from '../../types';\nimport { hasOidcParamsInUrl, removeOidcParamFromUrl } from './helpers';\n\ntype OidcModule = {\n OidcClient: typeof OidcClient;\n WebStorageStateStore: typeof WebStorageStateStore;\n};\n\ntype SignInResponseStorage = Pick<\n SigninResponse,\n 'id_token' | 'session_state' | 'profile'\n>;\n\nlet scriptLoadingPromise: Promise<OidcModule>;\n\n/* istanbul ignore next */\nconst simpleHash = (input: string): string => {\n let hash = 0;\n\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n\n return Math.abs(hash).toString(16); // Return hash as a positive hexadecimal string\n};\n\nconst loadScriptWithFallback = (\n urls: string[],\n getEntry: () => OidcModule,\n): Promise<OidcModule> => {\n /* istanbul ignore next */\n return new Promise((resolve, reject) => {\n if (!urls.length)\n return reject(new Error('No URLs provided to loadScriptWithFallback'));\n\n const entry = getEntry();\n if (entry) return resolve(entry);\n\n const url = urls.shift();\n\n const scriptEle = document.createElement('script');\n scriptEle.src = url;\n scriptEle.id = simpleHash(url);\n scriptEle.onload = () => {\n const entry = getEntry();\n if (entry) return resolve(entry);\n throw new Error('Could not get entry after loading script from URL');\n };\n /* istanbul ignore next */\n scriptEle.addEventListener('error', () => {\n loadScriptWithFallback(urls, getEntry);\n scriptEle.setAttribute('data-error', 'true');\n });\n document.body.appendChild(scriptEle);\n });\n};\n\nconst loadOIDCModule = async (): Promise<OidcModule> => {\n /* istanbul ignore next */\n try {\n return require('oidc-client-ts');\n } catch (e) {\n return loadScriptWithFallback(\n [OIDC_CLIENT_TS_DESCOPE_CDN_URL, OIDC_CLIENT_TS_JSDELIVR_CDN_URL],\n () => window['oidc'],\n );\n }\n};\n\nfunction oidcSignInResToStorage(\n signInRes: SigninResponse,\n): SignInResponseStorage {\n return {\n id_token: signInRes.id_token,\n session_state: signInRes.session_state,\n profile: signInRes.profile,\n };\n}\n\nconst getUserFromStorage = (\n stateUserKey: string,\n): SignInResponseStorage | null => {\n const user = getLocalStorage(stateUserKey);\n return user ? JSON.parse(user) : null;\n};\n\nconst getOidcClient = async (\n sdk: CoreSdk,\n projectId: string,\n oidcConfig?: OidcConfigOptions,\n) => {\n if (!scriptLoadingPromise) {\n scriptLoadingPromise = loadOIDCModule();\n }\n const { OidcClient, WebStorageStateStore } = await scriptLoadingPromise;\n\n if (!OidcClient) {\n throw new Error(\n 'oidc-client-ts is not installed. Please install it by running `npm install oidc-client-ts`',\n );\n }\n\n const redirectUri = oidcConfig?.redirectUri || window.location.href;\n\n let authority: string;\n let oidcClientId: string;\n let stateUserKey: string;\n let defaultScope: string;\n\n // Handle custom issuer (requires clientId)\n if (oidcConfig?.issuer) {\n if (!oidcConfig.clientId) {\n throw new Error(\n 'clientId is required when providing a custom issuer/authority',\n );\n }\n authority = oidcConfig.issuer;\n oidcClientId = oidcConfig.clientId;\n stateUserKey = `${oidcClientId}_user`;\n // For custom issuer with clientId, default scope is just 'openid'\n defaultScope = 'openid';\n } else if (oidcConfig?.applicationId) {\n // Handle federated apps with applicationId (existing behavior)\n authority = sdk.httpClient.buildUrl(projectId);\n authority = `${authority}/${oidcConfig.applicationId}`;\n oidcClientId = projectId;\n stateUserKey = `${oidcClientId}_user`;\n defaultScope = 'openid email roles descope.custom_claims offline_access';\n } else {\n // Default behavior (existing)\n authority = sdk.httpClient.buildUrl(projectId);\n oidcClientId = projectId;\n stateUserKey = `${oidcClientId}_user`;\n defaultScope = 'openid email roles descope.custom_claims offline_access';\n }\n\n const scope = oidcConfig?.scope || defaultScope;\n\n const settings: OidcClientSettings = {\n authority,\n client_id: oidcClientId,\n redirect_uri: redirectUri,\n response_type: 'code',\n scope,\n stateStore: new WebStorageStateStore({\n store: window.localStorage,\n prefix: oidcClientId,\n }),\n loadUserInfo: true,\n fetchRequestCredentials: 'same-origin',\n };\n\n if (oidcConfig?.redirectUri) {\n settings.redirect_uri = oidcConfig.redirectUri;\n }\n return {\n client: new OidcClient(settings),\n stateUserKey,\n };\n};\n\nconst createOidc = (\n sdk: CoreSdk,\n projectId: string,\n oidcConfig?: OidcConfig,\n) => {\n const getCachedClient = async (): Promise<{\n client: OidcClient;\n stateUserKey: string;\n }> => {\n let client, stateUserKey;\n if (!client || !stateUserKey) {\n ({ client, stateUserKey } = await getOidcClient(\n sdk,\n projectId,\n oidcConfig as OidcConfigOptions,\n ));\n }\n return { client, stateUserKey };\n };\n\n // Start the login process by creating a signin request\n // And redirecting the user to the returned URL\n const loginWithRedirect = async (\n arg: CreateSigninRequestArgs = {},\n disableNavigation: boolean = false,\n ): Promise<SdkResponse<URLResponse>> => {\n const { client } = await getCachedClient();\n const res = await client.createSigninRequest(arg);\n const { url } = res;\n if (!disableNavigation) {\n // In order to make sure all the after-hooks are running with the success response\n // we are generating a fake response with the success data and calling the http client after hook fn with it\n await sdk.httpClient.hooks?.afterRequest(\n {} as any,\n new Response(JSON.stringify(res)),\n );\n window.location.href = url;\n }\n return { ok: true, data: res };\n };\n\n // Finish the login process by processing the signin response\n // This function should be called after the user is redirected from the OIDC IdP\n const finishLogin = async (url: string = ''): Promise<any> => {\n const { client, stateUserKey } = await getCachedClient();\n const res = await client.processSigninResponse(url || window.location.href);\n\n // In order to make sure all the after-hooks are running with the success response\n // we are generating a fake response with the success data and calling the http client after hook fn with it\n await sdk.httpClient.hooks?.afterRequest(\n {} as any,\n new Response(JSON.stringify(res)),\n );\n\n setLocalStorage(stateUserKey, JSON.stringify(oidcSignInResToStorage(res)));\n // remove the code from the URL\n removeOidcParamFromUrl();\n\n return res;\n };\n\n // Finish the login process if the OIDC params are in the URL, if not, do nothing\n // This function should be called after the user is redirected\n // Note: high level SDKs may call this function to check if the user is in the middle of the login process\n const finishLoginIfNeed = async (url: string = ''): Promise<any> => {\n if (hasOidcParamsInUrl()) {\n return await finishLogin(url);\n }\n };\n\n // Start the logout process by creating a signout request\n // And redirecting the user to the returned URL\n const logout = async (\n arg?: CreateSignoutRequestArgs,\n disableNavigation: boolean = false,\n ): Promise<any> => {\n const { client, stateUserKey } = await getCachedClient();\n if (!arg) {\n arg = {};\n }\n\n // if id_token_hint is not provided, we will use the one from the storage\n arg.id_token_hint = arg.id_token_hint || getIdToken();\n arg.post_logout_redirect_uri =\n arg.post_logout_redirect_uri || window.location.href;\n\n const res = await client.createSignoutRequest(arg);\n const { url } = res;\n removeLocalStorage(stateUserKey);\n if (!disableNavigation) {\n window.location.replace(url);\n }\n return res;\n };\n\n // Refresh the access token using the refresh token\n const refreshToken = async (refreshToken: string) => {\n const { client, stateUserKey } = await getCachedClient();\n\n const user = getUserFromStorage(stateUserKey);\n if (!user) {\n throw new Error('User not found in storage to refresh token');\n }\n\n let refresh_token = refreshToken;\n if (!refresh_token) {\n // if refresh token is not provided, we will use the one from the hooks\n const config = {} as RequestConfig;\n sdk.httpClient.hooks.beforeRequest(config);\n refresh_token = config.token;\n }\n const res = await client.useRefreshToken({\n state: {\n refresh_token,\n session_state: user.session_state,\n profile: user.profile,\n },\n });\n\n // In order to make sure all the after-hooks are running with the success response\n // we are generating a fake response with the success data and calling the http client after hook fn with it\n await sdk.httpClient.hooks?.afterRequest(\n {} as any,\n new Response(JSON.stringify(res)),\n );\n return res;\n };\n\n return {\n loginWithRedirect,\n finishLogin,\n finishLoginIfNeed,\n refreshToken,\n logout,\n };\n};\n\nexport default createOidc;\nexport type { OidcConfig };\n","export const hasOidcParamsInUrl = () => {\n return (\n window.location.search.includes('code') &&\n window.location.search.includes('state')\n );\n};\n\nexport const removeOidcParamFromUrl = () => {\n // Retrieve the current URL from the browser's address bar\n const currentUrl = new URL(window.location.href);\n\n // Remove the 'code' and 'state' query parameters if it exist\n currentUrl.searchParams.delete('code');\n currentUrl.searchParams.delete('state');\n\n // Update the URL displayed in the browser without reloading the page\n window.history.replaceState({}, document.title, currentUrl.toString());\n};\n","import { compose } from './enhancers/helpers';\nimport { withAnalytics } from './enhancers/withAnalytics';\nimport { withAutoRefresh } from './enhancers/withAutoRefresh';\nimport { withCustomStorage } from './enhancers/withCustomStorage';\nimport { withFingerprint } from './enhancers/withFingerprint';\nimport { withFlowNonce } from './enhancers/withFlowNonce';\nimport { withLastLoggedInUser } from './enhancers/withLastLoggedInUser';\nimport { withLoggedInIndicator } from './enhancers/withLoggedInIndicator';\nimport { withNotifications } from './enhancers/withNotifications';\nimport withPersistTokens from './enhancers/withPersistTokens';\nimport createSdk from './sdk';\n\nconst decoratedCreateSdk = compose(\n withCustomStorage, // must be first\n withFingerprint,\n withAnalytics,\n withNotifications,\n withFlowNonce,\n withLoggedInIndicator,\n // The following two enhancers must remain immediately before withPersistTokens due to TS type inference limitations\n withAutoRefresh,\n withLastLoggedInUser,\n withPersistTokens, // must be last due to TS known limitation https://github.com/microsoft/TypeScript/issues/30727\n)(createSdk);\n\nexport type { UserResponse, OidcConfig, CustomStorage } from './types';\n\n// Note: make sure to update ./test/umd.test.ts when adding new constants\nexport {\n REFRESH_TOKEN_KEY,\n SESSION_TOKEN_KEY,\n} from './enhancers/withPersistTokens/constants';\n\nexport {\n ensureFingerprintIds,\n clearFingerprintData,\n} from './enhancers/withFingerprint/helpers';\n\nexport { getSessionToken } from './enhancers/withPersistTokens/helpers';\n\nexport { hasOidcParamsInUrl } from './sdk/oidc/helpers';\n\nexport type { JWTResponse } from '@descope/core-js-sdk';\nexport type { OneTapConfig } from './sdk/fedcm';\nexport type { CookieConfig } from './enhancers/withPersistTokens/types';\nexport type { FlowNonceOptions } from './enhancers/withFlowNonce/types';\nexport type { AutoRefreshConfig } from './enhancers/withAutoRefresh/types';\nexport default decoratedCreateSdk;\nexport { decoratedCreateSdk as createSdk };\n","type Fn = (arg: any) => any;\n\nexport function compose<Input, A1>(\n fn1: (input: Input) => A1,\n): (input: Input) => A1;\n\nexport function compose<Input, A1, A2>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n): (input: Input) => A2;\n\nexport function compose<Input, A1, A2, A3>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n): (input: Input) => A3;\n\nexport function compose<Input, A1, A2, A3, A4>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n): (input: Input) => A4;\n\nexport function compose<Input, A1, A2, A3, A4, A5>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n): (input: Input) => A5;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n): (input: Input) => A6;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n): (input: Input) => A7;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7, A8>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n fn8: (input: A7) => A8,\n): (input: Input) => A8;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7, A8, A9>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n fn8: (input: A7) => A8,\n fn9: (input: A8) => A9,\n): (input: Input) => A9;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n fn8: (input: A7) => A8,\n fn9: (input: A8) => A9,\n fn10: (input: A9) => A10,\n): (input: Input) => A10;\n\n/**\n * Currently there is no way to create a compose function in Typescript without using overloading\n * This function currently support up to 10 wrappers\n * If needed you can add more by duplicating the type and add more parameters\n */\n\nexport function compose(...args: Fn[]) {\n return (data: any) => args.reduce((acc, elem) => elem(acc), data) as any;\n}\n","import { CreateWebSdk } from '../sdk';\nimport { CustomStorage } from '../types';\nimport { setCustomStorage } from './helpers';\n\n/**\n * Adds custom storage support\n */\nexport const withCustomStorage =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0] & { customStorage?: CustomStorage }) => {\n setCustomStorage(config.customStorage);\n\n return createSdk(config);\n };\n","import { CreateWebSdk } from '../sdk';\nimport { BeforeRequestHook } from '../types';\nimport { addHooks } from './helpers';\n\n// this is replaced in build time\ndeclare const BUILD_VERSION: string;\n/**\n * Adds analytics headers to requests\n */\nexport const withAnalytics =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0]) =>\n createSdk({\n ...config,\n baseHeaders: {\n 'x-descope-sdk-name': 'web-js',\n 'x-descope-sdk-version': BUILD_VERSION,\n ...config.baseHeaders,\n },\n });\n","import { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook, BeforeRequestHook } from '../../types';\nimport { addHooks } from '../helpers';\nimport {\n FLOW_NEXT_PATH,\n FLOW_NONCE_HEADER,\n FLOW_NONCE_PREFIX,\n FLOW_START_PATH,\n} from './constants';\nimport {\n cleanupExpiredNonces,\n extractFlowNonce,\n getExecutionIdFromRequest,\n getFlowNonce,\n setFlowNonce,\n} from './helpers';\nimport { FlowNonceOptions } from './types';\n\n/**\n * Adds flow nonce handling to the SDK\n */\nexport const withFlowNonce =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0] & FlowNonceOptions): ReturnType<T> => {\n const {\n enableFlowNonce = true,\n nonceStoragePrefix = FLOW_NONCE_PREFIX,\n ...sdkConfig\n } = config;\n\n if (!enableFlowNonce) {\n return createSdk(sdkConfig) as ReturnType<T>;\n }\n\n cleanupExpiredNonces(nonceStoragePrefix);\n\n const afterRequest: AfterRequestHook = async (req, res) => {\n if (req.path !== FLOW_START_PATH && req.path !== FLOW_NEXT_PATH) {\n return;\n }\n const { nonce, executionId } = await extractFlowNonce(req, res);\n\n if (nonce && executionId) {\n const isStart = req.path === FLOW_START_PATH;\n setFlowNonce(executionId, nonce, isStart, nonceStoragePrefix);\n }\n };\n\n const beforeRequest: BeforeRequestHook = (req) => {\n if (req.path === FLOW_NEXT_PATH) {\n const executionId = getExecutionIdFromRequest(req);\n\n if (executionId) {\n const nonce = getFlowNonce(executionId, nonceStoragePrefix);\n if (nonce) {\n req.headers = req.headers || {};\n req.headers[FLOW_NONCE_HEADER] = nonce;\n }\n }\n }\n return req;\n };\n\n const sdk = createSdk(\n addHooks(sdkConfig, { afterRequest, beforeRequest }),\n ) as ReturnType<T>;\n\n // Serialize concurrent flow.next calls so the second one reads the\n // rotated nonce stored by the first's afterRequest. See descope/etc#15600.\n if (sdk.flow?.next) {\n let chain: Promise<void> = Promise.resolve();\n const originalNext = sdk.flow.next.bind(sdk.flow);\n sdk.flow.next = async (...args: Parameters<typeof originalNext>) => {\n const myTurn = chain;\n let release!: () => void;\n chain = new Promise<void>((resolve) => {\n release = resolve;\n });\n await myTurn;\n try {\n return await originalNext(...args);\n } finally {\n release();\n }\n };\n }\n\n return sdk;\n };\n\nexport * from './helpers';\nexport * from './types';\nexport * from './constants';\n","import { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport {\n addHooks,\n getAuthInfoFromResponse,\n isDescopeBridge,\n isInvalidSessionResponse,\n} from '../helpers';\nimport {\n createTimerFunctions,\n getTokenExpiration,\n getAutoRefreshTimeout,\n createActivityTracker,\n} from './helpers';\nimport { AutoRefreshOptions } from './types';\nimport logger from '../helpers/logger';\nimport { IS_BROWSER, REFRESH_THRESHOLD } from '../../constants';\nimport { getRefreshToken } from '../withPersistTokens/helpers';\n\n/**\n * Automatically refresh the session token before it expires\n * It uses the the refresh token that is extracted from API response to do that\n */\nexport const withAutoRefresh =\n <T extends CreateWebSdk>(createSdk: T) =>\n ({\n autoRefresh,\n ...config\n }: Parameters<T>[0] & AutoRefreshOptions): ReturnType<T> & {\n markUserActive: () => void;\n } => {\n const autoRefreshEnabled = !!autoRefresh;\n const customActivityTracking =\n typeof autoRefresh === 'object' && autoRefresh?.customActivityTracking;\n\n // Never auto refresh when disabled or in native flows\n if (!autoRefreshEnabled || isDescopeBridge()) {\n return Object.assign(createSdk(config), {\n markUserActive: () => {\n logger.warn('markUserActive() called but has no effect');\n },\n }) as ReturnType<T> & { markUserActive: () => void };\n }\n\n // if we hold a single timer id, there might be a case where we override it before canceling the timer, this might cause many calls to refresh\n // in order to prevent it, we hold a list of timers and cancel all of them when a new timer is set, which means we should have one active timer only at a time\n const { clearAllTimers, setTimer } = createTimerFunctions();\n\n // we need to hold the expiration time and the refresh token in order to refresh the session\n // when the user comes back to the tab or from background/lock screen/etc.\n let sessionExpirationDate: Date;\n let refreshToken: string;\n\n let activityTracker: ReturnType<typeof createActivityTracker> | null = null;\n let hasInactivityTimeout = false;\n\n let refreshWasSkipped = false;\n\n if (customActivityTracking) {\n logger.debug('Activity-based refresh enabled');\n activityTracker = createActivityTracker();\n }\n\n if (IS_BROWSER) {\n document.addEventListener('visibilitychange', () => {\n // tab becomes visible and the session is expired, do a refresh\n if (\n document.visibilityState === 'visible' &&\n sessionExpirationDate &&\n new Date() > sessionExpirationDate\n ) {\n logger.debug('Expiration time passed, refreshing session');\n // We prefer the persisted refresh token over the one from the response\n // for a case that the token was refreshed from another tab, this mostly relevant\n // when the project uses token rotation\n sdk.refresh(getRefreshToken() || refreshToken);\n }\n });\n }\n\n const afterRequest: AfterRequestHook = async (req, res) => {\n const { sessionJwt, refreshJwt, sessionExpiration, nextRefreshSeconds } =\n await getAuthInfoFromResponse(res);\n\n // if we got a failed response on a session validation route we want to cancel all timers\n if (isInvalidSessionResponse(req, res)) {\n logger.debug('Session invalidated, canceling all timers');\n clearAllTimers();\n } else if (sessionJwt || sessionExpiration) {\n sessionExpirationDate = getTokenExpiration(\n sessionJwt,\n sessionExpiration,\n );\n if (!sessionExpirationDate) {\n logger.debug('Could not extract expiration time from session token');\n return;\n }\n refreshToken = refreshJwt;\n // Updated on each server response — may change if server starts/stops returning nextRefreshSeconds\n hasInactivityTimeout = nextRefreshSeconds > 0;\n const timeout = getAutoRefreshTimeout(\n sessionExpirationDate,\n nextRefreshSeconds,\n );\n clearAllTimers();\n\n if (timeout <= REFRESH_THRESHOLD) {\n /*\n When receiving a session with very short expiration - it means that the refresh token is also close to expiration\n This happens because session expiration cannot be more than the refresh expiration\n In this case - the user is going to be logged out soon, so we don't want to set a refresh timer\n */\n logger.debug(\n 'Session is too close to expiration, not setting refresh timer',\n );\n return;\n }\n\n const refreshTimeStr = new Date(\n Date.now() + timeout,\n ).toLocaleTimeString('en-US', { hour12: false });\n logger.debug(\n `Setting refresh timer for ${refreshTimeStr}. (${timeout}ms)`,\n );\n\n // Reset activity tracking after receiving new session (refresh succeeded)\n if (activityTracker) {\n activityTracker.reset();\n refreshWasSkipped = false;\n }\n\n setTimer(() => {\n // Skip refresh if document is hidden - the visibilitychange handler will refresh when user returns\n if (IS_BROWSER && document.visibilityState === 'hidden') {\n logger.debug('Skipping refresh due to timer - document is hidden');\n return;\n }\n\n // Check activity if tracking is enabled and server signals inactivity timeout\n if (\n activityTracker &&\n hasInactivityTimeout &&\n !activityTracker.hadActivity()\n ) {\n logger.debug('Skipping refresh due to timer - user is idle');\n refreshWasSkipped = true;\n return; // Don't reschedule - wait for markUserActive() call\n }\n\n logger.debug('Refreshing session due to timer');\n // We prefer the persisted refresh token over the one from the response\n // for a case that the token was refreshed from another tab, this mostly relevant\n // when the project uses token rotation\n sdk.refresh(getRefreshToken() || refreshJwt);\n }, timeout);\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n const wrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n logger.debug('Clearing all timers');\n clearAllTimers();\n\n return resp;\n };\n\n return Object.assign(\n wrapWith(sdk, ['logout', 'logoutAll', 'oidc.logout'], wrapper),\n {\n markUserActive: activityTracker\n ? () => {\n logger.debug('markUserActive() called');\n if (!hasInactivityTimeout) {\n logger.debug(\n 'markUserActive() called but server does not have inactivity timeout configured (no nextRefreshSeconds)',\n );\n }\n activityTracker.markActive();\n if (refreshWasSkipped) {\n logger.debug(\n 'User became active after skipped refresh, triggering refresh',\n );\n refreshWasSkipped = false;\n clearAllTimers(); // Prevent race condition with pending timer\n sdk.refresh(getRefreshToken() || refreshToken);\n }\n }\n : () => {\n logger.warn(\n 'markUserActive() called but customActivityTracking is not enabled — this call has no effect',\n );\n },\n },\n ) as ReturnType<T> & { markUserActive: () => void };\n };\n","import createCoreSdk, { SdkResponse } from '@descope/core-js-sdk';\nimport createWebAuthn from './webauthn';\nimport createFedCM from './fedcm';\nimport withFlow from './flow';\nimport {\n getSessionToken,\n getRefreshToken,\n} from '../enhancers/withPersistTokens/helpers';\nimport { hasLoginIndicator } from '../enhancers/withLoggedInIndicator/helpers';\nimport { LOGGED_IN_INDICATOR_DISABLED_KEY } from '../enhancers/withLoggedInIndicator/constants';\nimport { getLocalStorage } from '../enhancers/helpers';\nimport createOidc from './oidc';\nimport { CoreSdk, WebSdkConfig } from '../types';\nimport {\n OIDC_LOGOUT_ERROR_CODE,\n OIDC_REFRESH_ERROR_CODE,\n REFRESH_DISABLED,\n} from '../constants';\nimport logger from '../enhancers/helpers/logger';\nimport { isDescopeBridge } from '../enhancers/helpers';\n\nconst createSdk = (config: WebSdkConfig) => {\n const coreSdk = createCoreSdk(config);\n\n const oidc = createOidc(coreSdk, config.projectId, config.oidcConfig);\n\n return {\n ...coreSdk,\n refresh: async (\n token?: string,\n tryRefresh?: boolean,\n ): ReturnType<CoreSdk['refresh']> => {\n if (isDescopeBridge()) {\n logger.debug(`Refresh called in native flow: ${new Error().stack}`);\n return Promise.resolve({\n ok: false,\n error: {\n errorCode: REFRESH_DISABLED,\n errorDescription:\n 'Refresh is not supported in native flows via the web SDK',\n },\n });\n }\n\n if (config.oidcConfig) {\n try {\n await oidc.refreshToken(token);\n return Promise.resolve({ ok: true });\n } catch (error) {\n return Promise.resolve({\n ok: false,\n error: {\n errorCode: OIDC_REFRESH_ERROR_CODE,\n errorDescription: error.toString(),\n },\n });\n }\n }\n\n // Skip the up-front /try-refresh round-trip when localStorage has no sign\n // of a prior authenticated session. `withLoggedInIndicator` writes DSLI\n // on every successful auth and clears it on logout / invalid session.\n // DSLI_DISABLED overrides the skip — escape hatch for apps that hit the\n // storeLastAuthenticatedUser=false edge case after upgrading.\n // OIDC mode is handled above and bypasses this optimization, since OIDC\n // sessions live under a separate `oidc-client-ts` key and `oidc.refreshToken`\n // performs its own no-session short-circuit.\n if (\n tryRefresh &&\n !hasLoginIndicator() &&\n !getLocalStorage(LOGGED_IN_INDICATOR_DISABLED_KEY)\n ) {\n return Promise.resolve({ ok: true });\n }\n // Descope use this query param to monitor if refresh is made\n // When the user is already logged in in the past or not (We want to optimize that in the future)\n const currentSessionToken = getSessionToken();\n const currentRefreshToken = getRefreshToken();\n\n let externalToken = '';\n if (config.getExternalToken) {\n try {\n externalToken = await config.getExternalToken?.();\n } catch (error) {\n logger.debug('Error getting external token while refreshing', error);\n // continue without external token\n }\n }\n\n return coreSdk.refresh(\n token,\n {\n dcs: currentSessionToken ? 't' : 'f',\n dcr: currentRefreshToken ? 't' : 'f',\n },\n externalToken,\n tryRefresh,\n );\n },\n // Call the logout function according to the oidcConfig\n // And return the response in the same format\n logout: async (token?: string): Promise<SdkResponse<never>> => {\n if (config.oidcConfig) {\n // logout is made with id_token_hint\n try {\n await oidc.logout({ id_token_hint: token });\n return Promise.resolve({ ok: true });\n } catch (error) {\n return Promise.resolve({\n ok: false,\n error: {\n errorCode: OIDC_LOGOUT_ERROR_CODE,\n errorDescription: error.toString(),\n },\n });\n }\n }\n return coreSdk.logout(token);\n },\n flow: withFlow(coreSdk),\n webauthn: createWebAuthn(coreSdk),\n fedcm: createFedCM(coreSdk, config.projectId),\n oidc,\n };\n};\n\nexport default createSdk;\n\nexport type CreateWebSdk = typeof createSdk;\nexport type WebSdk = ReturnType<CreateWebSdk>;\n","import { getLocalStorage } from '../helpers';\nimport { LOCAL_STORAGE_LAST_USER_LOGIN_ID } from '../withLastLoggedInUser/constants';\nimport { LOGGED_IN_INDICATOR_KEY } from './constants';\n\n/**\n * Returns true if the browser shows any sign of an authenticated session.\n *\n * Primary signal: the DSLI key, written by `withLoggedInIndicator` after every\n * successful auth response and cleared on logout / invalid-session.\n *\n * Bootstrap fallback: the lastUser key (`dls_last_user_login_id`) written by\n * `withLastLoggedInUser`. This exists so users authenticated under a previous\n * SDK version (before DSLI existed) aren't wrongly treated as anonymous on the\n * first page load after upgrade. Once any successful auth has written DSLI,\n * the fallback is no longer load-bearing and can be dropped in a future cleanup.\n *\n * Both keys are intentionally unprefixed — `storagePrefix` is consumed by\n * `withPersistTokens` and not propagated to other enhancers.\n */\nexport function hasLoginIndicator(): boolean {\n return (\n !!getLocalStorage(LOGGED_IN_INDICATOR_KEY) ||\n !!getLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID)\n );\n}\n","import sdk, { REFRESH_TOKEN_KEY, SESSION_TOKEN_KEY } from './index';\n\n// We export the tokens constant in this way so that umd bundles will have the constants as properties of the default export\n// But still can use the default export as a function (e.g. Descope({ projectId: 'pid'}))\nsdk['REFRESH_TOKEN_KEY'] = REFRESH_TOKEN_KEY;\nsdk['SESSION_TOKEN_KEY'] = SESSION_TOKEN_KEY;\n\nexport default sdk;\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__rest","e","indexOf","getOwnPropertySymbols","propertyIsEnumerable","SuppressedError","InvalidTokenError","Error","base64UrlDecode","str","output","replace","decodeURIComponent","atob","m","code","charCodeAt","toString","toUpperCase","b64DecodeUnicode","err","jwtDecode","token","options","pos","header","part","split","decoded","message","JSON","parse","name","OIDC_CLIENT_TS_VERSION","IS_BROWSER","window","MAX_TIMEOUT","Math","pow","OIDC_CLIENT_TS_DESCOPE_CDN_URL","OIDC_CLIENT_TS_JSDELIVR_CDN_URL","SESSION_VALIDATION_ROUTES","customStorage","getExpirationFromToken","exp","oidcRefreshTokenExpiration","response","refresh_expire_in","refresh_token","floor","Date","now","oidcAccessTokenExpiration","expires_in","expires_at","access_token","normalizeWebJWTResponseToJWTResponse","id_token","rest","sessionJwt","idToken","refreshJwt","sessionExpiration","cookieExpiration","addHooks","config","hooks","reduce","acc","key","concat","_a","getAuthInfoFromResponse","async","res","ok","body","clone","json","authInfo","isDescopeBridge","isInvalidSessionResponse","req","status","path","includes","isLocalStorage","localStorage","setLocalStorage","value","_b","setItem","getLocalStorage","getItem","removeLocalStorage","removeItem","getLocalStorageKey","index","_e","_d","_c","accessKey","exchange","otp","verify","signIn","signUp","update","email","phone","signUpOrIn","magicLink","enchantedLink","session","oauth","start","startNative","finishNative","oneTap","getOneTapClientId","exchangeOneTapIDToken","verifyOneTapIDToken","outbound","connect","saml","totp","notp","webauthn","finish","password","sendReset","policy","refresh","tryRefresh","selectTenant","logout","logoutAll","me","myTenants","history","flow","next","o","r","a","d","headers","entries","fromEntries","Headers","stringify","Body","url","Url","method","Method","title","Title","Status","retries","Retries","build","keys","flatMap","join","u","l","Promise","setTimeout","c","text","resolve","g","fetch","warn","log","statusText","h","v","getUTCFullYear","getUTCMonth","padStart","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","random","I","get","delete","post","put","patch","f","baseUrl","queryParams","projectId","slice","forEach","encodeURIComponent","Array","isArray","from","b","k","Authorization","y","O","w","baseConfig","refreshCookieName","logger","cookiePolicy","beforeRequest","baseHeaders","credentials","j","afterRequest","transformResponse","U","test","charAt","push","substring","map","trim","filter","Boolean","cookies","buildUrl","allSettled","error","reason","T","tenants","R","getTime","x","P","$","q","S","data","retryAfter","Number","parseInt","A","C","E","L","validate","M","N","D","J","z","_","K","B","V","Y","Z","Q","G","W","X","ee","te","ne","oe","se","loginOptions","ie","shift","re","pollingIntervalMs","timeoutMs","max","min","ae","de","sms","voice","whatsapp","im","pe","ue","waiting","running","completed","failed","le","ce","ge","he","ve","Ie","providerId","loginId","URI","user","waitForSession","setInterval","pendingRef","clearInterval","clearTimeout","errorDescription","errorCode","fe","be","flowId","conditionInteractionId","interactionId","componentsVersion","flowVersions","input","isCustomScreen","executionId","stepId","version","ke","ye","Oe","we","je","Ue","Te","Re","facebook","github","google","microsoft","gitlab","apple","discord","linkedin","slack","xe","Pe","provider","redirectURL","loginHint","implicit","stateId","nonce","$e","qe","Se","tenantId","tenantLevel","appId","Ae","Ce","Ee","Le","Me","Ne","De","He","Je","tenant","ssoId","forceAuthn","initiatedEmail","ze","Fe","Ke","Be","Ve","Ye","Ze","Qe","Ge","We","Xe","redirectUrl","templateOptions","newPassword","oldPassword","et","tt","nt","ot","st","it","rt","at","dt","origin","passkeyOptions","transactionId","pt","ut","lt","ct","gt","ht","It","ft","String","H","externalToken","dct","ids","isJwtExpired","getTenants","getJwtPermissions","getJwtRoles","getCurrentTenant","httpClient","mt","DeliveryMethods","args","console","debug","getAutoRefreshTimeout","nextRefreshSeconds","timeout","date","target","source","api","init","converter","defaultAttributes","set","attributes","document","expires","toUTCString","escape","stringifiedAttributes","attributeName","cookie","write","create","jar","parts","found","read","remove","withAttributes","withConverter","freeze","SESSION_TOKEN_KEY","REFRESH_TOKEN_KEY","ID_TOKEN_KEY","REFRESH_COOKIE_NAME_KEY","setJwtTokenCookie","cookieDomain","cookiePath","cookieSameSite","cookieSecure","domainMatches","isCurrentDomainOrParentDomain","Cookies","domain","undefined","sameSite","secure","currentDomainParts","location","hostname","cookieDomainParts","getSessionCookieName","sessionTokenViaCookie","getRefreshCookieName","refreshTokenViaCookie","getRefreshToken","prefix","getSessionToken","getIdToken","clearTokens","cookieOptions","sessionCookieName","updatedConfig","storedCookieName","getStoredRefreshCookieName","dtd","getTrustedDeviceToken","FP_EP_URL","VISITOR_SESSION_ID_PARAM","VISITOR_REQUEST_ID_PARAM","default","to","pack","ar","current","postpone","exclude","Set","has","add","reject","TypeError","startedAt","finishedAt","then","catch","F","scriptUrlPattern","apiKey","time","state","visibilityState","addEventListener","removeEventListener","load","ldi","attempts","visibilityStates","URL","href","blockedURI","protocol","MessageChannel","port1","onmessage","port2","postMessage","createElement","parentNode","removeChild","head","getElementsByTagName","onload","onerror","src","appendChild","getOwnPropertyDescriptor","configurable","writable","getFPFromStorage","returnExpired","itemStr","item","expiry","ensureFingerprintIds","fpKey","sessionId","endpointUrl","pathname","patterUrl","agentP","endpoint","defaultEndpoint","defaultScriptUrlPattern","agent","requestId","linkedId","fpData","createFingerprintObject","setFPToStorage","ex","FLOW_NONCE_PREFIX","FLOW_NONCE_HEADER","FLOW_START_PATH","FLOW_NEXT_PATH","getNonceKeyForExecution","removeFlowNonce","extractExecId","exec","getExecutionIdFromRequest","LOCAL_STORAGE_LAST_USER_LOGIN_ID","LOCAL_STORAGE_LAST_USER_DISPLAY_NAME","setLastUserLoginId","getLastUserLoginId","getLastUserDisplayName","startWrapper","fn","displayName","lastAuth","logoutWrapper","keepOnLogout","resp","LOGGED_IN_INDICATOR_KEY","createPubSub","cbs","pub","cb","sub","idx","splice","getCookieOptions","createOptions","publicKey","challenge","decodeBase64Url","id","excludeCredentials","decodeCreateOptions","createResponse","navigator","credential","rawId","encodeBase64Url","type","attestationObject","clientDataJSON","getOptions","decodeGetOptions","encodeGetResponse","conditional","abort","signal","mediation","isSupported","requirePlatformAuthenticator","supported","descopeBridge","hostInfo","PublicKeyCredential","isUserVerifyingPlatformAuthenticatorAvailable","allowCredentials","authenticatorData","signature","userHandle","base64","Uint8Array","buffer","btoa","fromCharCode","creator","createWebAuthn$1","sdk","identifier","startResponse","getResponse","helpers","obj","apiPaths","generateNonce","crypto","getRandomValues","array","byte","performOneTap","performOneTapAsync","onFailed","auth","oneTapConfig","onSkipped","onDismissed","googleClient","accounts","googleScript","getElementById","defer","getGoogleClient","clientIdRes","clientId","callback","initialize","itp_support","use_fedcm_for_prompt","client_id","prompt","notification","isDismissedMoment","getDismissedReason","isSkippedMoment","getSkippedReason","startOneTap","onCodeReceived","onAuthenticated","withFlow","coreSdk","webAuthnSupport","decoratedOptions","deviceInfo","startOptionsVersion","scriptLoadingPromise","loadScriptWithFallback","urls","getEntry","entry","scriptEle","hash","abs","simpleHash","setAttribute","getOidcClient","oidcConfig","require","loadOIDCModule","OidcClient","WebStorageStateStore","redirectUri","authority","oidcClientId","stateUserKey","defaultScope","issuer","applicationId","settings","redirect_uri","response_type","scope","stateStore","store","loadUserInfo","fetchRequestCredentials","client","createOidc","getCachedClient","finishLogin","processSigninResponse","signInRes","Response","session_state","profile","currentUrl","searchParams","replaceState","removeOidcParamFromUrl","loginWithRedirect","arg","disableNavigation","createSigninRequest","finishLoginIfNeed","search","refreshToken","getUserFromStorage","useRefreshToken","id_token_hint","post_logout_redirect_uri","createSignoutRequest","decoratedCreateSdk","elem","compose","createSdk","storage","fpLoad","sessionExpirationPS","sessionPS","userPS","claimsPS","userDetails","getUserFromResponse","claims","wrappedSdk","wrapWith","onSessionTokenChange","onUserChange","onClaimsChange","onIsAuthenticatedChange","enableFlowNonce","nonceStoragePrefix","sdkConfig","startsWith","parseError","cleanupExpiredNonces","extractFlowNonce","isStart","ttlSeconds","setFlowNonce","getFlowNonce","chain","originalNext","bind","myTurn","release","autoRefresh","autoRefreshEnabled","customActivityTracking","markUserActive","clearAllTimers","setTimer","timerIds","pop","createTimerFunctions","sessionExpirationDate","activityTracker","hasInactivityTimeout","refreshWasSkipped","hadActivitySinceLastRefresh","hadActivity","reset","markActive","createActivityTracker","getTokenExpiration","refreshTimeStr","toLocaleTimeString","hour12","storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout","_req","userInfo","getUserAndLastAuthFromResponse","loginIds","setLastUserDisplayName","persistTokens","isPersistTokens","storagePrefix","lastCookieOptions","cookieName","newCookieOptions","trustedDeviceJwt","authInfoWithCookie","createCoreSdk","oidc","stack","currentSessionToken","currentRefreshToken","getExternalToken","dcs","dcr","createWebAuthn","fedcm","onetap","requestExchangeCode","requestAuthentication","launch","context","identity","providers","configURL","isLoggedIn"],"mappings":"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","x_google_ignoreList":[0,1,7,11]}
|