@descope/core-js-sdk 0.0.41-alpha.6 → 0.0.41-alpha.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/constants/apiPaths.ts","../src/constants/index.ts","../src/httpClient/helpers/createFetchLogger.ts","../src/httpClient/utils.ts","../src/httpClient/index.ts","../src/httpClient/urlBuilder.ts","../src/sdk/helpers/index.ts","../src/sdk/types.ts","../src/sdk/validations/core.ts","../src/sdk/validations/validators.ts","../src/sdk/validations/index.ts","../src/sdk/otp.ts","../src/sdk/magicLink/validations.ts","../src/sdk/magicLink/crossDevice.ts","../src/sdk/magicLink/index.ts","../src/sdk/exchange.ts","../src/sdk/oauth/types.ts","../src/sdk/oauth/index.ts","../src/sdk/flow.ts","../src/sdk/saml.ts","../src/sdk/totp.ts","../src/sdk/webauthn.ts","../src/sdk/index.ts","../src/index.ts"],"sourcesContent":["export default {\n\totp: {\n\t\tverify: '/v1/auth/code/verify',\n\t\tsignIn: '/v1/auth/signin/otp',\n\t\tsignUp: '/v1/auth/signup/otp',\n\t\tupdate: {\n\t\t\temail: '/v1/user/update/email/otp',\n\t\t\tphone: '/v1/user/update/phone/otp'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/sign-up-or-in/otp'\n\t},\n\tmagicLink: {\n\t\tverify: '/v1/auth/magiclink/verify',\n\t\tsignIn: '/v1/auth/signin/magiclink',\n\t\tsignUp: '/v1/auth/signup/magiclink',\n\t\tsession: '/v1/auth/magiclink/session',\n\t\tupdate: {\n\t\t\temail: '/v1/user/update/email/magiclink',\n\t\t\tphone: '/v1/user/update/phone/magiclink'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/sign-up-or-in/magiclink'\n\t},\n\toauth: {\n\t\tstart: '/v1/oauth/authorize',\n\t},\n\tsaml: {\n\t\tstart: '/v1/auth/saml/authorize'\n\t},\n\ttotp: {\n\t\tverify: '/v1/auth/verify/totp',\n\t\tsignUp: '/v1/auth/signup/totp',\n\t\tupdate: '/v1/user/update/totp'\n\t},\n\twebauthn: {\n\t\tsignUp: {\n\t\t\tstart: '/v1/webauthn/signup/start',\n\t\t\tfinish: '/v1/webauthn/signup/finish'\n\t\t},\n\t\tsignIn: {\n\t\t\tstart: '/v1/webauthn/signin/start',\n\t\t\tfinish: '/v1/webauthn/signin/finish'\n\t\t},\n\t\tadd: {\n\t\t\tstart: '/v1/webauthn/device/add/start',\n\t\t\tfinish: '/v1/webauthn/device/add/finish'\n\t\t}\n\t},\n\trefresh: '/v1/auth/refresh',\n\tlogout: '/v1/auth/logoutall',\n\tflow: {\n\t\tstart: '/v1/flow/start',\n\t\tnext: '/v1/flow/next'\n\t},\n\texchange: '/v1/auth/exchange'\n};\n","export const DEFAULT_BASE_API_URL = 'https://api.descope.com';\n\nexport const MAGIC_LINK_MIN_POLLING_INTERVAL_MS = 1000; // 1 second\nexport const MAGIC_LINK_MAX_POLLING_TIMEOUT_MS = 1000 * 60 * 10; // 10 minutes\n\nexport { default as apiPaths } from './apiPaths';\n","import { Logger } from '../../sdk/types';\n\nconst httpLogBuilder = () => {\n\tconst msg: {\n\t\tTitle?: string;\n\t\tUrl?: string;\n\t\tMethod?: string;\n\t\tHeaders?: string;\n\t\tBody?: string;\n\t\tStatus?: string;\n\t} = {};\n\n\treturn {\n\t\theaders(headers: HeadersInit) {\n\t\t\tconst headersObj =\n\t\t\t\ttypeof headers.entries === 'function' ? Object.fromEntries(headers.entries()) : headers;\n\t\t\tmsg.Headers = JSON.stringify(headersObj);\n\n\t\t\treturn this;\n\t\t},\n\n\t\tbody(body: string) {\n\t\t\tmsg.Body = body;\n\t\t\treturn this;\n\t\t},\n\n\t\turl(url: URL | string) {\n\t\t\tmsg.Url = url.toString();\n\t\t\treturn this;\n\t\t},\n\n\t\tmethod(method: string) {\n\t\t\tmsg.Method = method;\n\t\t\treturn this;\n\t\t},\n\n\t\ttitle(title: string) {\n\t\t\tmsg.Title = title;\n\t\t\treturn this;\n\t\t},\n\n\t\tstatus(status: string) {\n\t\t\tmsg.Status = status;\n\t\t\treturn this;\n\t\t},\n\n\t\tbuild() {\n\t\t\treturn Object.keys(msg)\n\t\t\t\t.flatMap((key) => (msg[key] ? [`${key !== 'Title' ? `${key}: ` : ''}${msg[key]}`] : []))\n\t\t\t\t.join('\\n');\n\t\t}\n\t};\n};\n\ntype Fetch = typeof fetch;\n\nconst buildRequestLog = (args: Parameters<Fetch>) =>\n\thttpLogBuilder()\n\t\t.title('Request')\n\t\t.url(args[0])\n\t\t.method(args[1].method)\n\t\t.headers(args[1].headers)\n\t\t.body(args[1].body)\n\t\t.build();\n\nconst buildResponseLog = async (resp: Response) => {\n\tconst respBody = await resp.text();\n\t// eslint-disable-next-line no-param-reassign\n\tresp.text = () => Promise.resolve(respBody);\n\t// eslint-disable-next-line no-param-reassign\n\tresp.json = () => Promise.resolve(JSON.parse(respBody));\n\n\treturn httpLogBuilder()\n\t\t.title('Response')\n\t\t.url(resp.url.toString())\n\t\t.status(`${resp.status} ${resp.statusText}`)\n\t\t.headers(resp.headers)\n\t\t.body(respBody)\n\t\t.build();\n};\n\nconst createFetchLogger = (logger: Logger, receivedFetch?: Fetch) => {\n\tconst fetchInternal = receivedFetch || fetch;\n\tif (!fetchInternal) throw new Error('fetch is not defined');\n\n\tif (!logger) return fetchInternal;\n\n\treturn async (...args: Parameters<Fetch>) => {\n\t\tlogger.log(buildRequestLog(args));\n\t\tconst resp = await fetchInternal(...args);\n\t\tlogger[resp.ok ? 'log' : 'error'](await buildResponseLog(resp));\n\n\t\treturn resp;\n\t};\n};\n\nexport default createFetchLogger;\n","/* eslint-disable no-nested-ternary */\n\nconst getSrcArr = (source: HeadersInit) => {\n\tif (Array.isArray(source)) return source;\n\tif (source instanceof Headers) return Array.from(source.entries());\n\tif (!source) return [];\n\treturn Object.entries(source);\n};\n\nexport const mergeHeaders = (...sources: HeadersInit[]) =>\n\tnew Headers(\n\t\tsources.reduce((acc: Record<string, string>, source) => {\n\t\t\tconst srcArr = getSrcArr(source);\n\t\t\tsrcArr.reduce((_, [key, value]) => {\n\t\t\t\tacc[key] = value;\n\n\t\t\t\treturn acc;\n\t\t\t}, acc);\n\n\t\t\treturn acc;\n\t\t}, {})\n\t);\n\nexport const serializeBody = (body: Record<string, any>) =>\n\tbody === undefined ? undefined : JSON.stringify(body);\n","import { urlBuilder } from './urlBuilder';\nimport { CreateHttpClientConfig, HttpClient } from './types';\nimport createFetchLogger from './helpers/createFetchLogger';\n\nimport { mergeHeaders, serializeBody } from './utils';\n\nenum HTTPMethods {\n\tget = 'GET',\n\tdelete = 'DELETE',\n\tpost = 'POST',\n\tput = 'PUT'\n}\n\nconst createAuthorizationHeader = (projectId: string, token = '') => ({\n\tAuthorization: `Basic ${btoa(`${projectId}:${token}`)}`\n});\n\nconst createHttpClient = ({\n\tbaseUrl,\n\tprojectId,\n\tbaseConfig,\n\tlogger\n}: CreateHttpClientConfig): HttpClient => {\n\tconst fetchWithLogger = createFetchLogger(logger);\n\n\tconst sendRequest = ({ path, body, headers, queryParams, method, token }) =>\n\t\tfetchWithLogger(urlBuilder({ path, baseUrl, queryParams }), {\n\t\t\theaders: mergeHeaders(\n\t\t\t\tcreateAuthorizationHeader(projectId, token),\n\t\t\t\tbaseConfig?.baseHeaders || {},\n\t\t\t\theaders\n\t\t\t),\n\t\t\tmethod,\n\t\t\tbody: serializeBody(body)\n\t\t});\n\n\treturn {\n\t\tget: (path: string, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body: undefined, method: HTTPMethods.get, token }),\n\t\tpost: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.post, token }),\n\t\tput: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.put, token }),\n\t\tdelete: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.delete, token })\n\t};\n};\n\nexport default createHttpClient;\nexport { HTTPMethods };\nexport type { HttpClient };\n","export const urlBuilder = ({\n\tpath,\n\tbaseUrl,\n\tqueryParams\n}: {\n\tpath: string;\n\tbaseUrl: string;\n\tqueryParams: ConstructorParameters<typeof URLSearchParams>[0];\n}) => {\n\tconst url = new URL(path, baseUrl);\n\tif (queryParams) url.search = new URLSearchParams(queryParams).toString();\n\n\treturn url;\n};\n","import jwtDecode, { JwtPayload } from 'jwt-decode';\nimport { SdkResponse } from '../types';\n\nconst isJwtExpired = (token: string) => {\n\tif (typeof token !== 'string' || !token) throw new Error('Invalid token provided');\n\n\tconst { exp }: JwtPayload = jwtDecode(token);\n\tconst currentTime = new Date().getTime() / 1000;\n\n\treturn currentTime > exp;\n};\n\nexport default isJwtExpired;\n\nexport const pathJoin = (...args: string[]) => args.join('/').replaceAll(/\\/{2,}/g, '/');\n\nexport const transformResponse = async (response: Promise<Response>): Promise<SdkResponse> => {\n\tconst resp = await response;\n\n\tconst ret: SdkResponse = {\n\t\tcode: resp.status,\n\t\tok: resp.ok,\n\t\tresponse: resp\n\t};\n\n\tconst data = await resp.json();\n\n\tif (resp.ok) {\n\t\tret.data = data;\n\t} else {\n\t\tret.error = data;\n\t}\n\n\treturn ret;\n};\n","type SdkFn = (...args: any[]) => Promise<SdkResponse>;\n\nexport type User = {\n\temail?: string;\n\tname?: string;\n\tphone?: string;\n};\n\nexport enum DeliveryPhone {\n\tsms = 'sms',\n\twhatsapp = 'whatsapp'\n}\n\nexport enum DeliveryMethods {\n\temail = 'email',\n\tsms = 'sms',\n\twhatsapp = 'whatsapp'\n}\n\nexport type Deliveries<T extends SdkFn> = Record<DeliveryMethods, T>;\n\nexport enum Routes {\n\tsignUp = 'signup',\n\tsignIn = 'signin',\n\tverify = 'verify'\n}\n\nexport type SdkResponse = {\n\tcode?: number;\n\tok: boolean;\n\tresponse?: Response;\n\terror?: {\n\t\tmessage: string;\n\t\tcode: string;\n\t};\n\tdata?: any;\n};\n\nexport type Logger = Pick<Console, 'debug' | 'log' | 'error'>;\n","import { Validator, ValidationRule, MakeValidator } from './types';\n\nexport const createValidator =\n\t(rule: ValidationRule, defaultMsg?: string): MakeValidator =>\n\t(msg = defaultMsg) =>\n\t(val) =>\n\t\t!rule(val) ? msg.replace('{val}', val) : false;\n\nexport const createValidation = (...validators: Validator[]) => ({\n\tvalidate: (val: any) => {\n\t\tvalidators.forEach((validator) => {\n\t\t\tconst errMsg = validator(val);\n\t\t\tif (errMsg) throw new Error(errMsg);\n\t\t});\n\n\t\treturn true;\n\t}\n});\n","import get from 'lodash.get';\nimport { createValidation, createValidator } from './core';\nimport { Validator } from './types';\n\nconst regexMatch = (regex: RegExp) => (val: any) => regex.test(val);\n\nconst validateString = (val: any) => typeof val === 'string';\nconst validateEmail = regexMatch(\n\t/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/\n);\nconst validatePhone = regexMatch(/^\\+[1-9]{1}[0-9]{3,14}$/);\nconst validateMinLength = (min: number) => (val: any) => val.length >= min;\n// const validatePlainObject = (val: any) => !!val && Object.getPrototypeOf(val) === Object.prototype;\nconst validatePathValue = (path: string, rules: Validator[]) => (val: any) =>\n\tcreateValidation(...rules).validate(get(val, path));\n\nexport const isEmail = createValidator(validateEmail, '\"{val}\" is not a valid email');\nexport const isPhone = createValidator(validatePhone, '\"{val}\" is not a valid phone number');\nexport const isNotEmpty = createValidator(validateMinLength(1), 'Minimum length is 1');\nexport const isString = createValidator(validateString, 'Input is not a string');\n// export const isPlainObject = createValidator(validatePlainObject, 'Input is not a plain object');\nexport const hasPathValue = (path: string, rules: Validator[]) =>\n\tcreateValidator(validatePathValue(path, rules))();\n","import { createValidation } from './core';\nimport { Validator } from './types';\nimport { isEmail, isNotEmpty, isPhone, isString } from './validators';\n\n/**\n *\n * @params each parameter is an array of validators, those validators will be verified against the wrapped function argument which in the same place\n * @throws if any of the validators fails, an error with the relevant message will be thrown\n */\nexport const withValidations =\n\t(...argsRules: Validator[][]) =>\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\targsRules.forEach((rulesArr, i) => createValidation(...rulesArr).validate(args[i]));\n\n\t\treturn fn(...args);\n\t};\n\nexport const stringNonEmpty = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisNotEmpty(`\"${fieldName}\" must not be empty`)\n];\nexport const stringEmail = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisEmail()\n];\nexport const stringPhone = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisPhone()\n];\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { pathJoin, transformResponse } from './helpers';\nimport { DeliveryMethods, Deliveries, User, SdkResponse, DeliveryPhone } from './types';\nimport { stringEmail, stringNonEmpty, stringPhone, withValidations } from './validations';\n\nenum Routes {\n\tsignUp = 'signup',\n\tsignIn = 'signin',\n\tverify = 'verify',\n\tupdatePhone = 'updatePhone'\n}\n\ntype VerifyFn = (identifier: string, code: string) => Promise<SdkResponse>;\ntype SignInFn = (identifier: string) => Promise<SdkResponse>;\ntype SignUpFn = (identifier: string, user?: User) => Promise<SdkResponse>;\ntype UpdatePhoneFn = (identifier: string, phone: string) => Promise<SdkResponse>;\n\ntype Otp = {\n\t[Routes.verify]: Deliveries<VerifyFn>;\n\t[Routes.signIn]: Deliveries<SignInFn>;\n\t[Routes.signUp]: Deliveries<SignUpFn>;\n\t[Routes.updatePhone]: Deliveries<UpdatePhoneFn>;\n};\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst withVerifyValidations = withValidations(identifierValidations, stringNonEmpty('code'));\nconst withSignValidations = withValidations(identifierValidations);\nconst withUpdatePhoneValidations = withValidations(identifierValidations, stringPhone('phone'));\nconst withUpdateEmailValidations = withValidations(identifierValidations, stringEmail('email'));\n\nconst withOtp = (httpClient: HttpClient) => ({\n\tverify: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withVerifyValidations(\n\t\t\t\t(externalId: string, code: string,): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.verify, delivery), { code, externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.verify],\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signIn, delivery), { externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, user?: User): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signUp, delivery), { externalId, user })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signUp],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signUpOrIn, delivery), { externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signIn],\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(identifier: string, email: string, token?: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.otp.update.email, { externalId: identifier, email }, { token })\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(externalId: string, phone: string, token?: string): Promise<SdkResponse> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.otp.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as Otp[Routes.updatePhone]\n\t}\n});\n\nexport default withOtp;\n","import { stringNonEmpty, withValidations, stringPhone, stringEmail } from '../validations';\n\nexport const identifierValidations = stringNonEmpty('identifier');\nexport const uriValidations = stringNonEmpty('uri');\nexport const withVerifyValidations = withValidations(stringNonEmpty('token'));\nexport const withSignValidations = withValidations(identifierValidations, uriValidations);\nexport const withWaitForSessionValidations = withValidations(stringNonEmpty('pendingRef'));\nexport const withUpdatePhoneValidations = withValidations(identifierValidations, stringPhone('phone'), uriValidations);\nexport const withUpdateEmailValidations = withValidations(identifierValidations, stringEmail('email'), uriValidations);","import {\n\tapiPaths,\n\tMAGIC_LINK_MAX_POLLING_TIMEOUT_MS,\n\tMAGIC_LINK_MIN_POLLING_INTERVAL_MS\n} from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { pathJoin, transformResponse } from '../helpers';\nimport { DeliveryMethods, DeliveryPhone, SdkResponse, User } from '../types';\nimport { MagicLink, Routes, WaitForSessionConfig } from './types';\nimport {\n\twithWaitForSessionValidations,\n\twithSignValidations,\n\twithVerifyValidations,\n\twithUpdateEmailValidations,\n\twithUpdatePhoneValidations\n} from './validations';\n\nconst normalizeWaitForSessionConfig = ({\n\tpollingIntervalMs = MAGIC_LINK_MIN_POLLING_INTERVAL_MS,\n\ttimeoutMs = MAGIC_LINK_MAX_POLLING_TIMEOUT_MS\n} = {}) => ({\n\tpollingIntervalMs: Math.max(\n\t\tpollingIntervalMs || MAGIC_LINK_MIN_POLLING_INTERVAL_MS,\n\t\tMAGIC_LINK_MIN_POLLING_INTERVAL_MS\n\t),\n\ttimeoutMs: Math.min(\n\t\ttimeoutMs || MAGIC_LINK_MAX_POLLING_TIMEOUT_MS,\n\t\tMAGIC_LINK_MAX_POLLING_TIMEOUT_MS\n\t)\n});\n\nconst withMagicLinkCrossDevice = (httpClient: HttpClient) => ({\n\tverify: withVerifyValidations(\n\t\t(token: string): Promise<SdkResponse> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.magicLink.verify, { token }))\n\t),\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signIn, delivery), {\n\t\t\t\t\t\t\texternalId,\n\t\t\t\t\t\t\tURI,\n\t\t\t\t\t\t\tcrossDevice: true\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUpOrIn, delivery), {\n\t\t\t\t\t\t\texternalId,\n\t\t\t\t\t\t\tURI,\n\t\t\t\t\t\t\tcrossDevice: true\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string, user?: User): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUp, delivery), {\n\t\t\t\t\t\t\texternalId,\n\t\t\t\t\t\t\tURI,\n\t\t\t\t\t\t\tuser,\n\t\t\t\t\t\t\tcrossDevice: true\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signUp],\n\n\twaitForSession: withWaitForSessionValidations(\n\t\t(pendingRef: string, config?: WaitForSessionConfig): Promise<SdkResponse> =>\n\t\t\tnew Promise((resolve) => {\n\t\t\t\tconst { pollingIntervalMs, timeoutMs } = normalizeWaitForSessionConfig(config);\n\t\t\t\tlet timeout: NodeJS.Timeout;\n\t\t\t\tconst interval = setInterval(async () => {\n\t\t\t\t\tconst resp = await httpClient.post(apiPaths.magicLink.session, { pendingRef });\n\t\t\t\t\tif (resp.ok) {\n\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\t\t\tresolve(transformResponse(Promise.resolve(resp)));\n\t\t\t\t\t}\n\t\t\t\t}, pollingIntervalMs);\n\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\tresolve({\n\t\t\t\t\t\terror: { message: `Session polling timeout exceeded: ${timeoutMs}ms`, code: '0' },\n\t\t\t\t\t\tok: false\n\t\t\t\t\t});\n\t\t\t\t\tclearInterval(interval);\n\t\t\t\t}, timeoutMs);\n\t\t\t})\n\t),\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(identifier: string, email: string, uri: string, token?: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.magicLink.update.email,\n\t\t\t\t\t\t{ externalId: identifier, email, URI: uri, crossDevice: true },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(externalId: string, phone: string, uri: string, token?: string): Promise<SdkResponse> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.magicLink.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone, URI: uri, crossDevice: true },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as MagicLink[Routes.updatePhone]\n\t}\n});\n\nexport default withMagicLinkCrossDevice;\n","import { apiPaths } from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { pathJoin, transformResponse } from '../helpers';\nimport { DeliveryMethods, DeliveryPhone, SdkResponse, User } from '../types';\nimport withMagicLinkCrossDevice from './crossDevice';\nimport { MagicLink, Routes } from './types';\nimport {\n\twithSignValidations,\n\twithVerifyValidations,\n\twithUpdateEmailValidations,\n\twithUpdatePhoneValidations\n} from './validations';\n\nconst withMagicLink = (httpClient: HttpClient) => ({\n\tverify: withVerifyValidations(\n\t\t(token: string): Promise<SdkResponse> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.magicLink.verify, { token }))\n\t),\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signIn, delivery), { externalId, URI })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string, user?: User): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUp, delivery), {\n\t\t\t\t\t\t\texternalId,\n\t\t\t\t\t\t\tURI,\n\t\t\t\t\t\t\tuser\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signUp],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUpOrIn, delivery), { externalId, URI })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(identifier: string, email: string, uri: string, token?: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.magicLink.update.email,\n\t\t\t\t\t\t{ externalId: identifier, email, URI: uri },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(externalId: string, phone: string, uri: string, token?: string): Promise<SdkResponse> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.magicLink.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone, URI: uri },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as MagicLink[Routes.updatePhone]\n\t},\n\n\tcrossDevice: withMagicLinkCrossDevice(httpClient)\n});\n\nexport default withMagicLink;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withExchangeValidations = withValidations(stringNonEmpty('code'));\n\nconst withExchange = (httpClient: HttpClient) => ({\n\texchange: withExchangeValidations(\n\t\t(code: string): Promise<SdkResponse> =>\n\t\t\ttransformResponse(httpClient.get(apiPaths.exchange, { queryParams: { code } }))\n\t)\n});\n\nexport default withExchange;\n","import { SdkResponse } from '../types';\n\nenum OAuthProviders {\n\tfacebook = 'facebook',\n\tgithub = 'github',\n\tgoogle = 'google',\n\tmicrosoft = 'microsoft',\n\tgitlab = 'gitlab',\n\tapple = 'apple'\n}\n\ntype StartFn = <B extends { redirect: boolean }>(\n\tconfig?: B\n) => Promise<B extends { redirect: true } ? undefined : SdkResponse>;\ntype VerifyFn = (code: string) => Promise<SdkResponse>;\n\ntype Providers<T> = Record<keyof typeof OAuthProviders, T>;\n\nexport type Oauth = {\n\tstart: Providers<StartFn>;\n\tverify: Providers<VerifyFn>;\n};\n\nexport { OAuthProviders };\n","import { apiPaths } from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport withExchange from '../exchange';\nimport { transformResponse } from '../helpers';\nimport { Oauth, OAuthProviders } from './types';\n\nconst withOauth = (httpClient: HttpClient) => ({\n\tstart: Object.keys(OAuthProviders).reduce(\n\t\t(acc, provider) => ({\n\t\t\t...acc,\n\t\t\t// eslint-disable-next-line consistent-return\n\t\t\t[provider]: async (redirectUrl?: string, { redirect = false } = {}) => {\n\t\t\t\tconst resp = await httpClient.get(apiPaths.oauth.start, {\n\t\t\t\t\tqueryParams: { provider, redirectURL: redirectUrl }\n\t\t\t\t});\n\t\t\t\tif (!redirect || !resp.ok) return transformResponse(Promise.resolve(resp));\n\n\t\t\t\tconst { url } = await resp.json();\n\t\t\t\twindow.location.href = url;\n\t\t\t}\n\t\t}),\n\t\t{}\n\t) as Oauth['start'],\n\n\t...withExchange(httpClient)\n});\n\nexport default withOauth;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withStartValidations = withValidations(stringNonEmpty('flowId'));\nconst withNextValidations = withValidations(stringNonEmpty('executionId'), stringNonEmpty('stepId'), stringNonEmpty('actionId'));\n\nconst withFlow = (httpClient: HttpClient) => ({\n\tstart: withStartValidations((flowId: string) =>\n\t\ttransformResponse(httpClient.post(apiPaths.flow.start, { flowId }))\n\t),\n\tnext: withNextValidations((executionId: string, stepId: string, actionId: string, input?: Record<string, FormDataEntryValue>) => {\n\t\treturn transformResponse(\n\t\t\thttpClient.post(apiPaths.flow.next, { executionId, stepId, actionId, input })\n\t\t);\n\t})\n});\n\nexport default withFlow;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport withExchange from './exchange';\nimport { transformResponse } from './helpers';\nimport { SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withStartValidations = withValidations(stringNonEmpty('tenant'));\n\ntype StartFn = <B extends { redirect: boolean }>(\n\ttenantNameOrEmail: string,\n\tconfig?: B\n) => Promise<B extends { redirect: true } ? undefined : SdkResponse>;\n\nconst withSaml = (httpClient: HttpClient) => ({\n\t// eslint-disable-next-line consistent-return\n\tstart: withStartValidations(\n\t\tasync (tenantNameOrEmail: string, redirectUrl?: string, { redirect = false } = {}) => {\n\t\t\tconst resp = await httpClient.get(apiPaths.saml.start, {\n\t\t\t\tqueryParams: { tenant: tenantNameOrEmail, redirectURL: redirectUrl }\n\t\t\t});\n\n\t\t\tif (!redirect || !resp.ok) return transformResponse(Promise.resolve(resp));\n\n\t\t\tconst { url } = await resp.json();\n\t\t\twindow.location.href = url;\n\t\t}\n\t) as StartFn,\n\n\t...withExchange(httpClient)\n});\n\nexport default withSaml;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { User, SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst withVerifyValidations = withValidations(identifierValidations, stringNonEmpty('code'));\nconst withSignUpValidations = withValidations(identifierValidations);\nconst withUpdateValidations = withValidations(identifierValidations);\n\nconst withTotp = (httpClient: HttpClient) => ({\n\tsignUp: withSignUpValidations(\n\t\t(identifier: string, user?: User): Promise<SdkResponse> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.totp.signUp, { externalId: identifier, user }))\n\t),\n\n\tverify: withVerifyValidations(\n\t\t(identifier: string, code: string): Promise<SdkResponse> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.totp.verify, { externalId: identifier, code }))\n\t),\n\n\tupdate: withUpdateValidations(\n\t\t(identifier: string, token?: string): Promise<SdkResponse> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(apiPaths.totp.update, { externalId: identifier }, { token })\n\t\t\t)\n\t)\n});\n\nexport default withTotp;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst originValidations = stringNonEmpty('origin');\n\nconst withSignUpStartValidations = withValidations(\n\tidentifierValidations,\n\toriginValidations,\n\tstringNonEmpty('name')\n);\nconst withSignInStartValidations = withValidations(identifierValidations, originValidations);\nconst withAddStartValidations = withValidations(\n\tidentifierValidations,\n\toriginValidations,\n\tstringNonEmpty('token')\n);\nconst withFinishValidations = withValidations(\n\tstringNonEmpty('transactionId'),\n\tstringNonEmpty('response')\n);\n\nconst withWebauthn = (httpClient: HttpClient) => ({\n\tsignUp: {\n\t\tstart: withSignUpStartValidations(\n\t\t\t(identifier: string, origin: string, name: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUp.start, {\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\texternalId: identifier,\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t},\n\t\t\t\t\t\torigin\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUp.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tsignIn: {\n\t\tstart: withSignInStartValidations(\n\t\t\t(identifier: string, origin: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signIn.start, { externalId: identifier, origin })\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signIn.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tadd: {\n\t\tstart: withAddStartValidations(\n\t\t\t(identifier: string, origin: string, token: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.webauthn.add.start,\n\t\t\t\t\t\t{ externalId: identifier, origin },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.add.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t}\n});\n\nexport default withWebauthn;\n","import withOtp from './otp';\nimport { HttpClient } from '../httpClient';\nimport isJwtExpired, { transformResponse } from './helpers';\nimport { stringNonEmpty, withValidations } from './validations';\nimport withMagicLink from './magicLink';\nimport { apiPaths } from '../constants';\nimport withOauth from './oauth';\nimport withFlow from './flow';\nimport withSaml from './saml';\nimport withTotp from './totp';\nimport withWebauthn from './webauthn';\n\nconst withValidateValidations = withValidations(stringNonEmpty('token'));\n\nexport default (httpClient: HttpClient) => ({\n\totp: withOtp(httpClient),\n\tmagicLink: withMagicLink(httpClient),\n\toauth: withOauth(httpClient),\n\tsaml: withSaml(httpClient),\n\ttotp: withTotp(httpClient),\n\twebauthn: withWebauthn(httpClient),\n\tflow: withFlow(httpClient),\n\trefresh: (token?: string) => transformResponse(httpClient.get(apiPaths.refresh, { token })),\n\tlogout: (token?: string) => transformResponse(httpClient.get(apiPaths.logout, { token })),\n\tisJwtExpired: withValidateValidations(isJwtExpired),\n\thttpClient\n});\n","import { DEFAULT_BASE_API_URL } from './constants';\nimport createHttpClient from './httpClient';\nimport createSdk from './sdk';\nimport { OAuthProviders } from './sdk/oauth/types';\nimport { DeliveryMethods, Logger } from './sdk/types';\nimport { stringNonEmpty, withValidations } from './sdk/validations';\nimport { hasPathValue } from './sdk/validations/validators';\n\nconst withSdkConfigValidations = withValidations([\n\thasPathValue('projectId', stringNonEmpty('projectId'))\n]);\n\nexport default withSdkConfigValidations(\n\t({ projectId, logger, baseUrl }: { projectId: string, logger?: Logger, baseUrl?: string }) =>\n\t\tcreateSdk(createHttpClient({ baseUrl: baseUrl || DEFAULT_BASE_API_URL, projectId, logger }))\n);\n\nexport type DeliveryMethod = keyof typeof DeliveryMethods;\nexport type OAuthProvider = keyof typeof OAuthProviders;\nexport type { SdkResponse } from './sdk/types';\n"],"names":["apiPaths","verify","signIn","signUp","update","email","phone","signUpOrIn","session","start","finish","add","next","httpLogBuilder","msg","headers","headersObj","entries","Object","fromEntries","Headers","JSON","stringify","this","body","Body","url","Url","toString","method","Method","title","Title","status","Status","build","keys","flatMap","key","join","createFetchLogger","logger","receivedFetch","fetchInternal","fetch","Error","args","__awaiter","log","buildRequestLog","resp","ok","respBody","text","Promise","resolve","json","parse","statusText","buildResponseLog","mergeHeaders","sources","reduce","acc","source","srcArr","Array","isArray","from","getSrcArr","_","value","serializeBody","undefined","HTTPMethods","createAuthorizationHeader","projectId","token","Authorization","btoa","createHttpClient","baseUrl","baseConfig","fetchWithLogger","sendRequest","path","queryParams","URL","search","URLSearchParams","urlBuilder","baseHeaders","get","post","put","delete","isJwtExpired","exp","jwtDecode","Date","getTime","pathJoin","replaceAll","transformResponse","response","ret","code","data","error","DeliveryPhone","DeliveryMethods","Routes","createValidator","rule","defaultMsg","val","replace","createValidation","validators","validate","forEach","validator","errMsg","regexMatch","regex","test","validateEmail","validatePhone","isEmail","isPhone","isNotEmpty","min","length","isString","withValidations","argsRules","fn","rulesArr","i","stringNonEmpty","fieldName","stringEmail","stringPhone","identifierValidations","withVerifyValidations","withSignValidations","withUpdatePhoneValidations","withUpdateEmailValidations","withOtp","httpClient","delivery","assign","externalId","user","identifier","uriValidations","withWaitForSessionValidations","withMagicLinkCrossDevice","URI","crossDevice","waitForSession","pendingRef","config","pollingIntervalMs","timeoutMs","Math","max","normalizeWaitForSessionConfig","timeout","interval","setInterval","clearInterval","clearTimeout","setTimeout","message","uri","withMagicLink","withExchangeValidations","withExchange","exchange","OAuthProviders","withOauth","provider","redirectUrl","redirect","redirectURL","window","location","href","withStartValidations","withNextValidations","withFlow","flowId","executionId","stepId","actionId","input","withSaml","tenantNameOrEmail","tenant","withSignUpValidations","withUpdateValidations","withTotp","originValidations","withSignUpStartValidations","withSignInStartValidations","withAddStartValidations","withFinishValidations","withWebauthn","origin","name","transactionId","withValidateValidations","rules","index","validatePathValue","withSdkConfigValidations","createSdk","otp","magicLink","oauth","saml","totp","webauthn","flow","refresh","logout"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/constants/apiPaths.ts","../src/constants/index.ts","../src/httpClient/helpers/createFetchLogger.ts","../src/httpClient/utils.ts","../src/httpClient/index.ts","../src/httpClient/urlBuilder.ts","../src/sdk/helpers/index.ts","../src/sdk/types.ts","../src/sdk/validations/core.ts","../src/sdk/validations/validators.ts","../src/sdk/validations/index.ts","../src/sdk/otp.ts","../src/sdk/magicLink/validations.ts","../src/sdk/magicLink/crossDevice.ts","../src/sdk/magicLink/index.ts","../src/sdk/exchange.ts","../src/sdk/oauth/types.ts","../src/sdk/oauth/index.ts","../src/sdk/flow.ts","../src/sdk/saml.ts","../src/sdk/totp.ts","../src/sdk/webauthn.ts","../src/sdk/index.ts","../src/index.ts"],"sourcesContent":["export default {\n\totp: {\n\t\tverify: '/v1/auth/code/verify',\n\t\tsignIn: '/v1/auth/signin/otp',\n\t\tsignUp: '/v1/auth/signup/otp',\n\t\tupdate: {\n\t\t\temail: '/v1/user/update/email/otp',\n\t\t\tphone: '/v1/user/update/phone/otp'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/sign-up-or-in/otp'\n\t},\n\tmagicLink: {\n\t\tverify: '/v1/auth/magiclink/verify',\n\t\tsignIn: '/v1/auth/signin/magiclink',\n\t\tsignUp: '/v1/auth/signup/magiclink',\n\t\tsession: '/v1/auth/magiclink/session',\n\t\tupdate: {\n\t\t\temail: '/v1/user/update/email/magiclink',\n\t\t\tphone: '/v1/user/update/phone/magiclink'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/sign-up-or-in/magiclink'\n\t},\n\toauth: {\n\t\tstart: '/v1/oauth/authorize',\n\t},\n\tsaml: {\n\t\tstart: '/v1/auth/saml/authorize'\n\t},\n\ttotp: {\n\t\tverify: '/v1/auth/verify/totp',\n\t\tsignUp: '/v1/auth/signup/totp',\n\t\tupdate: '/v1/user/update/totp'\n\t},\n\twebauthn: {\n\t\tsignUp: {\n\t\t\tstart: '/v1/webauthn/signup/start',\n\t\t\tfinish: '/v1/webauthn/signup/finish'\n\t\t},\n\t\tsignIn: {\n\t\t\tstart: '/v1/webauthn/signin/start',\n\t\t\tfinish: '/v1/webauthn/signin/finish'\n\t\t},\n\t\tadd: {\n\t\t\tstart: '/v1/webauthn/device/add/start',\n\t\t\tfinish: '/v1/webauthn/device/add/finish'\n\t\t}\n\t},\n\trefresh: '/v1/auth/refresh',\n\tlogout: '/v1/auth/logoutall',\n\tflow: {\n\t\tstart: '/v1/flow/start',\n\t\tnext: '/v1/flow/next'\n\t},\n\texchange: '/v1/auth/exchange'\n};\n","export const DEFAULT_BASE_API_URL = 'https://api.descope.com';\n\nexport const MAGIC_LINK_MIN_POLLING_INTERVAL_MS = 1000; // 1 second\nexport const MAGIC_LINK_MAX_POLLING_TIMEOUT_MS = 1000 * 60 * 10; // 10 minutes\n\nexport { default as apiPaths } from './apiPaths';\n","import { Logger } from '../../sdk/types';\n\nconst httpLogBuilder = () => {\n\tconst msg: {\n\t\tTitle?: string;\n\t\tUrl?: string;\n\t\tMethod?: string;\n\t\tHeaders?: string;\n\t\tBody?: string;\n\t\tStatus?: string;\n\t} = {};\n\n\treturn {\n\t\theaders(headers: HeadersInit) {\n\t\t\tconst headersObj =\n\t\t\t\ttypeof headers.entries === 'function' ? Object.fromEntries(headers.entries()) : headers;\n\t\t\tmsg.Headers = JSON.stringify(headersObj);\n\n\t\t\treturn this;\n\t\t},\n\n\t\tbody(body: string) {\n\t\t\tmsg.Body = body;\n\t\t\treturn this;\n\t\t},\n\n\t\turl(url: URL | string) {\n\t\t\tmsg.Url = url.toString();\n\t\t\treturn this;\n\t\t},\n\n\t\tmethod(method: string) {\n\t\t\tmsg.Method = method;\n\t\t\treturn this;\n\t\t},\n\n\t\ttitle(title: string) {\n\t\t\tmsg.Title = title;\n\t\t\treturn this;\n\t\t},\n\n\t\tstatus(status: string) {\n\t\t\tmsg.Status = status;\n\t\t\treturn this;\n\t\t},\n\n\t\tbuild() {\n\t\t\treturn Object.keys(msg)\n\t\t\t\t.flatMap((key) => (msg[key] ? [`${key !== 'Title' ? `${key}: ` : ''}${msg[key]}`] : []))\n\t\t\t\t.join('\\n');\n\t\t}\n\t};\n};\n\ntype Fetch = typeof fetch;\n\nconst buildRequestLog = (args: Parameters<Fetch>) =>\n\thttpLogBuilder()\n\t\t.title('Request')\n\t\t.url(args[0])\n\t\t.method(args[1].method)\n\t\t.headers(args[1].headers)\n\t\t.body(args[1].body)\n\t\t.build();\n\nconst buildResponseLog = async (resp: Response) => {\n\tconst respBody = await resp.text();\n\t// eslint-disable-next-line no-param-reassign\n\tresp.text = () => Promise.resolve(respBody);\n\t// eslint-disable-next-line no-param-reassign\n\tresp.json = () => Promise.resolve(JSON.parse(respBody));\n\n\treturn httpLogBuilder()\n\t\t.title('Response')\n\t\t.url(resp.url.toString())\n\t\t.status(`${resp.status} ${resp.statusText}`)\n\t\t.headers(resp.headers)\n\t\t.body(respBody)\n\t\t.build();\n};\n\nconst createFetchLogger = (logger: Logger, receivedFetch?: Fetch) => {\n\tconst fetchInternal = receivedFetch || fetch;\n\tif (!fetchInternal) throw new Error('fetch is not defined');\n\n\tif (!logger) return fetchInternal;\n\n\treturn async (...args: Parameters<Fetch>) => {\n\t\tlogger.log(buildRequestLog(args));\n\t\tconst resp = await fetchInternal(...args);\n\t\tlogger[resp.ok ? 'log' : 'error'](await buildResponseLog(resp));\n\n\t\treturn resp;\n\t};\n};\n\nexport default createFetchLogger;\n","/* eslint-disable no-nested-ternary */\n\nconst getSrcArr = (source: HeadersInit) => {\n\tif (Array.isArray(source)) return source;\n\tif (source instanceof Headers) return Array.from(source.entries());\n\tif (!source) return [];\n\treturn Object.entries(source);\n};\n\nexport const mergeHeaders = (...sources: HeadersInit[]) =>\n\tnew Headers(\n\t\tsources.reduce((acc: Record<string, string>, source) => {\n\t\t\tconst srcArr = getSrcArr(source);\n\t\t\tsrcArr.reduce((_, [key, value]) => {\n\t\t\t\tacc[key] = value;\n\n\t\t\t\treturn acc;\n\t\t\t}, acc);\n\n\t\t\treturn acc;\n\t\t}, {})\n\t);\n\nexport const serializeBody = (body: Record<string, any>) =>\n\tbody === undefined ? undefined : JSON.stringify(body);\n","import { urlBuilder } from './urlBuilder';\nimport { CreateHttpClientConfig, HttpClient } from './types';\nimport createFetchLogger from './helpers/createFetchLogger';\n\nimport { mergeHeaders, serializeBody } from './utils';\n\nenum HTTPMethods {\n\tget = 'GET',\n\tdelete = 'DELETE',\n\tpost = 'POST',\n\tput = 'PUT'\n}\n\nconst createAuthorizationHeader = (projectId: string, token = '') => { \n\tlet bearer = projectId;\n\tif (token !== '') {\n\t\tbearer = bearer +':' + token;\n\t}\n\treturn {\n\t\tAuthorization: `Bearer ${bearer}`\n\t}; \n};\n\nconst createHttpClient = ({\n\tbaseUrl,\n\tprojectId,\n\tbaseConfig,\n\tlogger\n}: CreateHttpClientConfig): HttpClient => {\n\tconst fetchWithLogger = createFetchLogger(logger);\n\n\tconst sendRequest = ({ path, body, headers, queryParams, method, token }) =>\n\t\tfetchWithLogger(urlBuilder({ path, baseUrl, queryParams }), {\n\t\t\theaders: mergeHeaders(\n\t\t\t\tcreateAuthorizationHeader(projectId, token),\n\t\t\t\tbaseConfig?.baseHeaders || {},\n\t\t\t\theaders\n\t\t\t),\n\t\t\tmethod,\n\t\t\tbody: serializeBody(body)\n\t\t});\n\n\treturn {\n\t\tget: (path: string, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body: undefined, method: HTTPMethods.get, token }),\n\t\tpost: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.post, token }),\n\t\tput: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.put, token }),\n\t\tdelete: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.delete, token })\n\t};\n};\n\nexport default createHttpClient;\nexport { HTTPMethods };\nexport type { HttpClient };\n","export const urlBuilder = ({\n\tpath,\n\tbaseUrl,\n\tqueryParams\n}: {\n\tpath: string;\n\tbaseUrl: string;\n\tqueryParams: ConstructorParameters<typeof URLSearchParams>[0];\n}) => {\n\tconst url = new URL(path, baseUrl);\n\tif (queryParams) url.search = new URLSearchParams(queryParams).toString();\n\n\treturn url;\n};\n","import jwtDecode, { JwtPayload } from 'jwt-decode';\nimport { SdkResponse } from '../types';\n\nconst isJwtExpired = (token: string) => {\n\tif (typeof token !== 'string' || !token) throw new Error('Invalid token provided');\n\n\tconst { exp }: JwtPayload = jwtDecode(token);\n\tconst currentTime = new Date().getTime() / 1000;\n\n\treturn currentTime > exp;\n};\n\nexport default isJwtExpired;\n\nexport const pathJoin = (...args: string[]) => args.join('/').replaceAll(/\\/{2,}/g, '/');\n\nexport const transformResponse = async (response: Promise<Response>): Promise<SdkResponse> => {\n\tconst resp = await response;\n\n\tconst ret: SdkResponse = {\n\t\tcode: resp.status,\n\t\tok: resp.ok,\n\t\tresponse: resp\n\t};\n\n\tconst data = await resp.json();\n\n\tif (resp.ok) {\n\t\tret.data = data;\n\t} else {\n\t\tret.error = data;\n\t}\n\n\treturn ret;\n};\n","type SdkFn = (...args: any[]) => Promise<SdkResponse>;\n\nexport type User = {\n\temail?: string;\n\tname?: string;\n\tphone?: string;\n};\n\nexport enum DeliveryPhone {\n\tsms = 'sms',\n\twhatsapp = 'whatsapp'\n}\n\nexport enum DeliveryMethods {\n\temail = 'email',\n\tsms = 'sms',\n\twhatsapp = 'whatsapp'\n}\n\nexport type Deliveries<T extends SdkFn> = Record<DeliveryMethods, T>;\n\nexport enum Routes {\n\tsignUp = 'signup',\n\tsignIn = 'signin',\n\tverify = 'verify'\n}\n\nexport type SdkResponse = {\n\tcode?: number;\n\tok: boolean;\n\tresponse?: Response;\n\terror?: {\n\t\tmessage: string;\n\t\tcode: string;\n\t};\n\tdata?: any;\n};\n\nexport type Logger = Pick<Console, 'debug' | 'log' | 'error'>;\n","import { Validator, ValidationRule, MakeValidator } from './types';\n\nexport const createValidator =\n\t(rule: ValidationRule, defaultMsg?: string): MakeValidator =>\n\t(msg = defaultMsg) =>\n\t(val) =>\n\t\t!rule(val) ? msg.replace('{val}', val) : false;\n\nexport const createValidation = (...validators: Validator[]) => ({\n\tvalidate: (val: any) => {\n\t\tvalidators.forEach((validator) => {\n\t\t\tconst errMsg = validator(val);\n\t\t\tif (errMsg) throw new Error(errMsg);\n\t\t});\n\n\t\treturn true;\n\t}\n});\n","import get from 'lodash.get';\nimport { createValidation, createValidator } from './core';\nimport { Validator } from './types';\n\nconst regexMatch = (regex: RegExp) => (val: any) => regex.test(val);\n\nconst validateString = (val: any) => typeof val === 'string';\nconst validateEmail = regexMatch(\n\t/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/\n);\nconst validatePhone = regexMatch(/^\\+[1-9]{1}[0-9]{3,14}$/);\nconst validateMinLength = (min: number) => (val: any) => val.length >= min;\n// const validatePlainObject = (val: any) => !!val && Object.getPrototypeOf(val) === Object.prototype;\nconst validatePathValue = (path: string, rules: Validator[]) => (val: any) =>\n\tcreateValidation(...rules).validate(get(val, path));\n\nexport const isEmail = createValidator(validateEmail, '\"{val}\" is not a valid email');\nexport const isPhone = createValidator(validatePhone, '\"{val}\" is not a valid phone number');\nexport const isNotEmpty = createValidator(validateMinLength(1), 'Minimum length is 1');\nexport const isString = createValidator(validateString, 'Input is not a string');\n// export const isPlainObject = createValidator(validatePlainObject, 'Input is not a plain object');\nexport const hasPathValue = (path: string, rules: Validator[]) =>\n\tcreateValidator(validatePathValue(path, rules))();\n","import { createValidation } from './core';\nimport { Validator } from './types';\nimport { isEmail, isNotEmpty, isPhone, isString } from './validators';\n\n/**\n *\n * @params each parameter is an array of validators, those validators will be verified against the wrapped function argument which in the same place\n * @throws if any of the validators fails, an error with the relevant message will be thrown\n */\nexport const withValidations =\n\t(...argsRules: Validator[][]) =>\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\targsRules.forEach((rulesArr, i) => createValidation(...rulesArr).validate(args[i]));\n\n\t\treturn fn(...args);\n\t};\n\nexport const stringNonEmpty = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisNotEmpty(`\"${fieldName}\" must not be empty`)\n];\nexport const stringEmail = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisEmail()\n];\nexport const stringPhone = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisPhone()\n];\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { pathJoin, transformResponse } from './helpers';\nimport { DeliveryMethods, Deliveries, User, SdkResponse, DeliveryPhone } from './types';\nimport { stringEmail, stringNonEmpty, stringPhone, withValidations } from './validations';\n\nenum Routes {\n\tsignUp = 'signup',\n\tsignIn = 'signin',\n\tverify = 'verify',\n\tupdatePhone = 'updatePhone'\n}\n\ntype VerifyFn = (identifier: string, code: string) => Promise<SdkResponse>;\ntype SignInFn = (identifier: string) => Promise<SdkResponse>;\ntype SignUpFn = (identifier: string, user?: User) => Promise<SdkResponse>;\ntype UpdatePhoneFn = (identifier: string, phone: string) => Promise<SdkResponse>;\n\ntype Otp = {\n\t[Routes.verify]: Deliveries<VerifyFn>;\n\t[Routes.signIn]: Deliveries<SignInFn>;\n\t[Routes.signUp]: Deliveries<SignUpFn>;\n\t[Routes.updatePhone]: Deliveries<UpdatePhoneFn>;\n};\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst withVerifyValidations = withValidations(identifierValidations, stringNonEmpty('code'));\nconst withSignValidations = withValidations(identifierValidations);\nconst withUpdatePhoneValidations = withValidations(identifierValidations, stringPhone('phone'));\nconst withUpdateEmailValidations = withValidations(identifierValidations, stringEmail('email'));\n\nconst withOtp = (httpClient: HttpClient) => ({\n\tverify: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withVerifyValidations(\n\t\t\t\t(externalId: string, code: string,): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.verify, delivery), { code, externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.verify],\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signIn, delivery), { externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, user?: User): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signUp, delivery), { externalId, user })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signUp],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signUpOrIn, delivery), { externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signIn],\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(identifier: string, email: string, token?: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.otp.update.email, { externalId: identifier, email }, { token })\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(externalId: string, phone: string, token?: string): Promise<SdkResponse> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.otp.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as Otp[Routes.updatePhone]\n\t}\n});\n\nexport default withOtp;\n","import { stringNonEmpty, withValidations, stringPhone, stringEmail } from '../validations';\n\nexport const identifierValidations = stringNonEmpty('identifier');\nexport const uriValidations = stringNonEmpty('uri');\nexport const withVerifyValidations = withValidations(stringNonEmpty('token'));\nexport const withSignValidations = withValidations(identifierValidations, uriValidations);\nexport const withWaitForSessionValidations = withValidations(stringNonEmpty('pendingRef'));\nexport const withUpdatePhoneValidations = withValidations(identifierValidations, stringPhone('phone'), uriValidations);\nexport const withUpdateEmailValidations = withValidations(identifierValidations, stringEmail('email'), uriValidations);","import {\n\tapiPaths,\n\tMAGIC_LINK_MAX_POLLING_TIMEOUT_MS,\n\tMAGIC_LINK_MIN_POLLING_INTERVAL_MS\n} from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { pathJoin, transformResponse } from '../helpers';\nimport { DeliveryMethods, DeliveryPhone, SdkResponse, User } from '../types';\nimport { MagicLink, Routes, WaitForSessionConfig } from './types';\nimport {\n\twithWaitForSessionValidations,\n\twithSignValidations,\n\twithVerifyValidations,\n\twithUpdateEmailValidations,\n\twithUpdatePhoneValidations\n} from './validations';\n\nconst normalizeWaitForSessionConfig = ({\n\tpollingIntervalMs = MAGIC_LINK_MIN_POLLING_INTERVAL_MS,\n\ttimeoutMs = MAGIC_LINK_MAX_POLLING_TIMEOUT_MS\n} = {}) => ({\n\tpollingIntervalMs: Math.max(\n\t\tpollingIntervalMs || MAGIC_LINK_MIN_POLLING_INTERVAL_MS,\n\t\tMAGIC_LINK_MIN_POLLING_INTERVAL_MS\n\t),\n\ttimeoutMs: Math.min(\n\t\ttimeoutMs || MAGIC_LINK_MAX_POLLING_TIMEOUT_MS,\n\t\tMAGIC_LINK_MAX_POLLING_TIMEOUT_MS\n\t)\n});\n\nconst withMagicLinkCrossDevice = (httpClient: HttpClient) => ({\n\tverify: withVerifyValidations(\n\t\t(token: string): Promise<SdkResponse> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.magicLink.verify, { token }))\n\t),\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signIn, delivery), {\n\t\t\t\t\t\t\texternalId,\n\t\t\t\t\t\t\tURI,\n\t\t\t\t\t\t\tcrossDevice: true\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUpOrIn, delivery), {\n\t\t\t\t\t\t\texternalId,\n\t\t\t\t\t\t\tURI,\n\t\t\t\t\t\t\tcrossDevice: true\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string, user?: User): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUp, delivery), {\n\t\t\t\t\t\t\texternalId,\n\t\t\t\t\t\t\tURI,\n\t\t\t\t\t\t\tuser,\n\t\t\t\t\t\t\tcrossDevice: true\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signUp],\n\n\twaitForSession: withWaitForSessionValidations(\n\t\t(pendingRef: string, config?: WaitForSessionConfig): Promise<SdkResponse> =>\n\t\t\tnew Promise((resolve) => {\n\t\t\t\tconst { pollingIntervalMs, timeoutMs } = normalizeWaitForSessionConfig(config);\n\t\t\t\tlet timeout: NodeJS.Timeout;\n\t\t\t\tconst interval = setInterval(async () => {\n\t\t\t\t\tconst resp = await httpClient.post(apiPaths.magicLink.session, { pendingRef });\n\t\t\t\t\tif (resp.ok) {\n\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\t\t\tresolve(transformResponse(Promise.resolve(resp)));\n\t\t\t\t\t}\n\t\t\t\t}, pollingIntervalMs);\n\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\tresolve({\n\t\t\t\t\t\terror: { message: `Session polling timeout exceeded: ${timeoutMs}ms`, code: '0' },\n\t\t\t\t\t\tok: false\n\t\t\t\t\t});\n\t\t\t\t\tclearInterval(interval);\n\t\t\t\t}, timeoutMs);\n\t\t\t})\n\t),\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(identifier: string, email: string, uri: string, token?: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.magicLink.update.email,\n\t\t\t\t\t\t{ externalId: identifier, email, URI: uri, crossDevice: true },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(externalId: string, phone: string, uri: string, token?: string): Promise<SdkResponse> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.magicLink.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone, URI: uri, crossDevice: true },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as MagicLink[Routes.updatePhone]\n\t}\n});\n\nexport default withMagicLinkCrossDevice;\n","import { apiPaths } from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { pathJoin, transformResponse } from '../helpers';\nimport { DeliveryMethods, DeliveryPhone, SdkResponse, User } from '../types';\nimport withMagicLinkCrossDevice from './crossDevice';\nimport { MagicLink, Routes } from './types';\nimport {\n\twithSignValidations,\n\twithVerifyValidations,\n\twithUpdateEmailValidations,\n\twithUpdatePhoneValidations\n} from './validations';\n\nconst withMagicLink = (httpClient: HttpClient) => ({\n\tverify: withVerifyValidations(\n\t\t(token: string): Promise<SdkResponse> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.magicLink.verify, { token }))\n\t),\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signIn, delivery), { externalId, URI })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string, user?: User): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUp, delivery), {\n\t\t\t\t\t\t\texternalId,\n\t\t\t\t\t\t\tURI,\n\t\t\t\t\t\t\tuser\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signUp],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string): Promise<SdkResponse> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUpOrIn, delivery), { externalId, URI })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(identifier: string, email: string, uri: string, token?: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.magicLink.update.email,\n\t\t\t\t\t\t{ externalId: identifier, email, URI: uri },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(externalId: string, phone: string, uri: string, token?: string): Promise<SdkResponse> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.magicLink.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone, URI: uri },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as MagicLink[Routes.updatePhone]\n\t},\n\n\tcrossDevice: withMagicLinkCrossDevice(httpClient)\n});\n\nexport default withMagicLink;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withExchangeValidations = withValidations(stringNonEmpty('code'));\n\nconst withExchange = (httpClient: HttpClient) => ({\n\texchange: withExchangeValidations(\n\t\t(code: string): Promise<SdkResponse> =>\n\t\t\ttransformResponse(httpClient.get(apiPaths.exchange, { queryParams: { code } }))\n\t)\n});\n\nexport default withExchange;\n","import { SdkResponse } from '../types';\n\nenum OAuthProviders {\n\tfacebook = 'facebook',\n\tgithub = 'github',\n\tgoogle = 'google',\n\tmicrosoft = 'microsoft',\n\tgitlab = 'gitlab',\n\tapple = 'apple'\n}\n\ntype StartFn = <B extends { redirect: boolean }>(\n\tconfig?: B\n) => Promise<B extends { redirect: true } ? undefined : SdkResponse>;\ntype VerifyFn = (code: string) => Promise<SdkResponse>;\n\ntype Providers<T> = Record<keyof typeof OAuthProviders, T>;\n\nexport type Oauth = {\n\tstart: Providers<StartFn>;\n\tverify: Providers<VerifyFn>;\n};\n\nexport { OAuthProviders };\n","import { apiPaths } from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport withExchange from '../exchange';\nimport { transformResponse } from '../helpers';\nimport { Oauth, OAuthProviders } from './types';\n\nconst withOauth = (httpClient: HttpClient) => ({\n\tstart: Object.keys(OAuthProviders).reduce(\n\t\t(acc, provider) => ({\n\t\t\t...acc,\n\t\t\t// eslint-disable-next-line consistent-return\n\t\t\t[provider]: async (redirectUrl?: string, { redirect = false } = {}) => {\n\t\t\t\tconst resp = await httpClient.get(apiPaths.oauth.start, {\n\t\t\t\t\tqueryParams: { provider, redirectURL: redirectUrl }\n\t\t\t\t});\n\t\t\t\tif (!redirect || !resp.ok) return transformResponse(Promise.resolve(resp));\n\n\t\t\t\tconst { url } = await resp.json();\n\t\t\t\twindow.location.href = url;\n\t\t\t}\n\t\t}),\n\t\t{}\n\t) as Oauth['start'],\n\n\t...withExchange(httpClient)\n});\n\nexport default withOauth;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withStartValidations = withValidations(stringNonEmpty('flowId'));\nconst withNextValidations = withValidations(stringNonEmpty('executionId'), stringNonEmpty('stepId'), stringNonEmpty('actionId'));\n\nconst withFlow = (httpClient: HttpClient) => ({\n\tstart: withStartValidations((flowId: string) =>\n\t\ttransformResponse(httpClient.post(apiPaths.flow.start, { flowId }))\n\t),\n\tnext: withNextValidations((executionId: string, stepId: string, actionId: string, input?: Record<string, FormDataEntryValue>) => {\n\t\treturn transformResponse(\n\t\t\thttpClient.post(apiPaths.flow.next, { executionId, stepId, actionId, input })\n\t\t);\n\t})\n});\n\nexport default withFlow;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport withExchange from './exchange';\nimport { transformResponse } from './helpers';\nimport { SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withStartValidations = withValidations(stringNonEmpty('tenant'));\n\ntype StartFn = <B extends { redirect: boolean }>(\n\ttenantNameOrEmail: string,\n\tconfig?: B\n) => Promise<B extends { redirect: true } ? undefined : SdkResponse>;\n\nconst withSaml = (httpClient: HttpClient) => ({\n\t// eslint-disable-next-line consistent-return\n\tstart: withStartValidations(\n\t\tasync (tenantNameOrEmail: string, redirectUrl?: string, { redirect = false } = {}) => {\n\t\t\tconst resp = await httpClient.get(apiPaths.saml.start, {\n\t\t\t\tqueryParams: { tenant: tenantNameOrEmail, redirectURL: redirectUrl }\n\t\t\t});\n\n\t\t\tif (!redirect || !resp.ok) return transformResponse(Promise.resolve(resp));\n\n\t\t\tconst { url } = await resp.json();\n\t\t\twindow.location.href = url;\n\t\t}\n\t) as StartFn,\n\n\t...withExchange(httpClient)\n});\n\nexport default withSaml;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { User, SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst withVerifyValidations = withValidations(identifierValidations, stringNonEmpty('code'));\nconst withSignUpValidations = withValidations(identifierValidations);\nconst withUpdateValidations = withValidations(identifierValidations);\n\nconst withTotp = (httpClient: HttpClient) => ({\n\tsignUp: withSignUpValidations(\n\t\t(identifier: string, user?: User): Promise<SdkResponse> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.totp.signUp, { externalId: identifier, user }))\n\t),\n\n\tverify: withVerifyValidations(\n\t\t(identifier: string, code: string): Promise<SdkResponse> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.totp.verify, { externalId: identifier, code }))\n\t),\n\n\tupdate: withUpdateValidations(\n\t\t(identifier: string, token?: string): Promise<SdkResponse> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(apiPaths.totp.update, { externalId: identifier }, { token })\n\t\t\t)\n\t)\n});\n\nexport default withTotp;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst originValidations = stringNonEmpty('origin');\n\nconst withSignUpStartValidations = withValidations(\n\tidentifierValidations,\n\toriginValidations,\n\tstringNonEmpty('name')\n);\nconst withSignInStartValidations = withValidations(identifierValidations, originValidations);\nconst withAddStartValidations = withValidations(\n\tidentifierValidations,\n\toriginValidations,\n\tstringNonEmpty('token')\n);\nconst withFinishValidations = withValidations(\n\tstringNonEmpty('transactionId'),\n\tstringNonEmpty('response')\n);\n\nconst withWebauthn = (httpClient: HttpClient) => ({\n\tsignUp: {\n\t\tstart: withSignUpStartValidations(\n\t\t\t(identifier: string, origin: string, name: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUp.start, {\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\texternalId: identifier,\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t},\n\t\t\t\t\t\torigin\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUp.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tsignIn: {\n\t\tstart: withSignInStartValidations(\n\t\t\t(identifier: string, origin: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signIn.start, { externalId: identifier, origin })\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signIn.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tadd: {\n\t\tstart: withAddStartValidations(\n\t\t\t(identifier: string, origin: string, token: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.webauthn.add.start,\n\t\t\t\t\t\t{ externalId: identifier, origin },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.add.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t}\n});\n\nexport default withWebauthn;\n","import withOtp from './otp';\nimport { HttpClient } from '../httpClient';\nimport isJwtExpired, { transformResponse } from './helpers';\nimport { stringNonEmpty, withValidations } from './validations';\nimport withMagicLink from './magicLink';\nimport { apiPaths } from '../constants';\nimport withOauth from './oauth';\nimport withFlow from './flow';\nimport withSaml from './saml';\nimport withTotp from './totp';\nimport withWebauthn from './webauthn';\n\nconst withValidateValidations = withValidations(stringNonEmpty('token'));\n\nexport default (httpClient: HttpClient) => ({\n\totp: withOtp(httpClient),\n\tmagicLink: withMagicLink(httpClient),\n\toauth: withOauth(httpClient),\n\tsaml: withSaml(httpClient),\n\ttotp: withTotp(httpClient),\n\twebauthn: withWebauthn(httpClient),\n\tflow: withFlow(httpClient),\n\trefresh: (token?: string) => transformResponse(httpClient.get(apiPaths.refresh, { token })),\n\tlogout: (token?: string) => transformResponse(httpClient.get(apiPaths.logout, { token })),\n\tisJwtExpired: withValidateValidations(isJwtExpired),\n\thttpClient\n});\n","import { DEFAULT_BASE_API_URL } from './constants';\nimport createHttpClient from './httpClient';\nimport createSdk from './sdk';\nimport { OAuthProviders } from './sdk/oauth/types';\nimport { DeliveryMethods, Logger } from './sdk/types';\nimport { stringNonEmpty, withValidations } from './sdk/validations';\nimport { hasPathValue } from './sdk/validations/validators';\n\nconst withSdkConfigValidations = withValidations([\n\thasPathValue('projectId', stringNonEmpty('projectId'))\n]);\n\nexport default withSdkConfigValidations(\n\t({ projectId, logger, baseUrl }: { projectId: string, logger?: Logger, baseUrl?: string }) =>\n\t\tcreateSdk(createHttpClient({ baseUrl: baseUrl || DEFAULT_BASE_API_URL, projectId, logger }))\n);\n\nexport type DeliveryMethod = keyof typeof DeliveryMethods;\nexport type OAuthProvider = keyof typeof OAuthProviders;\nexport type { SdkResponse } from './sdk/types';\n"],"names":["apiPaths","verify","signIn","signUp","update","email","phone","signUpOrIn","session","start","finish","add","next","httpLogBuilder","msg","headers","headersObj","entries","Object","fromEntries","Headers","JSON","stringify","this","body","Body","url","Url","toString","method","Method","title","Title","status","Status","build","keys","flatMap","key","join","createFetchLogger","logger","receivedFetch","fetchInternal","fetch","Error","args","__awaiter","log","buildRequestLog","resp","ok","respBody","text","Promise","resolve","json","parse","statusText","buildResponseLog","mergeHeaders","sources","reduce","acc","source","srcArr","Array","isArray","from","getSrcArr","_","value","serializeBody","undefined","HTTPMethods","createAuthorizationHeader","projectId","token","bearer","Authorization","createHttpClient","baseUrl","baseConfig","fetchWithLogger","sendRequest","path","queryParams","URL","search","URLSearchParams","urlBuilder","baseHeaders","get","post","put","delete","isJwtExpired","exp","jwtDecode","Date","getTime","pathJoin","replaceAll","transformResponse","response","ret","code","data","error","DeliveryPhone","DeliveryMethods","Routes","createValidator","rule","defaultMsg","val","replace","createValidation","validators","validate","forEach","validator","errMsg","regexMatch","regex","test","validateEmail","validatePhone","isEmail","isPhone","isNotEmpty","min","length","isString","withValidations","argsRules","fn","rulesArr","i","stringNonEmpty","fieldName","stringEmail","stringPhone","identifierValidations","withVerifyValidations","withSignValidations","withUpdatePhoneValidations","withUpdateEmailValidations","withOtp","httpClient","delivery","assign","externalId","user","identifier","uriValidations","withWaitForSessionValidations","withMagicLinkCrossDevice","URI","crossDevice","waitForSession","pendingRef","config","pollingIntervalMs","timeoutMs","Math","max","normalizeWaitForSessionConfig","timeout","interval","setInterval","clearInterval","clearTimeout","setTimeout","message","uri","withMagicLink","withExchangeValidations","withExchange","exchange","OAuthProviders","withOauth","provider","redirectUrl","redirect","redirectURL","window","location","href","withStartValidations","withNextValidations","withFlow","flowId","executionId","stepId","actionId","input","withSaml","tenantNameOrEmail","tenant","withSignUpValidations","withUpdateValidations","withTotp","originValidations","withSignUpStartValidations","withSignInStartValidations","withAddStartValidations","withFinishValidations","withWebauthn","origin","name","transactionId","withValidateValidations","rules","index","validatePathValue","withSdkConfigValidations","createSdk","otp","magicLink","oauth","saml","totp","webauthn","flow","refresh","logout"],"mappings":"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"}
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).descopeSdk=t()}(this,(function(){"use strict";var e={verify:"/v1/auth/code/verify",signIn:"/v1/auth/signin/otp",signUp:"/v1/auth/signup/otp",update:{email:"/v1/user/update/email/otp",phone:"/v1/user/update/phone/otp"},signUpOrIn:"/v1/auth/sign-up-or-in/otp"},t={verify:"/v1/auth/magiclink/verify",signIn:"/v1/auth/signin/magiclink",signUp:"/v1/auth/signup/magiclink",session:"/v1/auth/magiclink/session",update:{email:"/v1/user/update/email/magiclink",phone:"/v1/user/update/phone/magiclink"},signUpOrIn:"/v1/auth/sign-up-or-in/magiclink"},n={start:"/v1/oauth/authorize"},r={start:"/v1/auth/saml/authorize"},o={verify:"/v1/auth/verify/totp",signUp:"/v1/auth/signup/totp",update:"/v1/user/update/totp"},i={signUp:{start:"/v1/webauthn/signup/start",finish:"/v1/webauthn/signup/finish"},signIn:{start:"/v1/webauthn/signin/start",finish:"/v1/webauthn/signin/finish"},add:{start:"/v1/webauthn/device/add/start",finish:"/v1/webauthn/device/add/finish"}},s="/v1/auth/refresh",a="/v1/auth/logoutall",c={start:"/v1/flow/start",next:"/v1/flow/next"},u="/v1/auth/exchange";const d=1e3,p=6e5;function l(e,t,n,r){return new(n||(n=Promise))((function(o,i){function s(e){try{c(r.next(e))}catch(e){i(e)}}function a(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))}const f=()=>{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},build:()=>Object.keys(e).flatMap((t=>e[t]?[`${"Title"!==t?`${t}: `:""}${e[t]}`]:[])).join("\n")}},h=(e,t)=>{const n=t||fetch;if(!n)throw new Error("fetch is not defined");return e?(...t)=>l(void 0,void 0,void 0,(function*(){e.log((e=>f().title("Request").url(e[0]).method(e[1].method).headers(e[1].headers).body(e[1].body).build())(t));const r=yield n(...t);return e[r.ok?"log":"error"](yield(e=>l(void 0,void 0,void 0,(function*(){const t=yield e.text();return e.text=()=>Promise.resolve(t),e.json=()=>Promise.resolve(JSON.parse(t)),f().title("Response").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).build()})))(r)),r})):n},g=(...e)=>new Headers(e.reduce(((e,t)=>{const n=(e=>Array.isArray(e)?e:e instanceof Headers?Array.from(e.entries()):e?Object.entries(e):[])(t);return n.reduce(((t,[n,r])=>(e[n]=r,e)),e),e}),{})),v=e=>void 0===e?void 0:JSON.stringify(e);var y;!function(e){e.get="GET",e.delete="DELETE",e.post="POST",e.put="PUT"}(y||(y={}));const b=(e,t="")=>({Authorization:`Basic ${btoa(`${e}:${t}`)}`}),m=({baseUrl:e,projectId:t,baseConfig:n,logger:r})=>{const o=h(r),i=({path:r,body:i,headers:s,queryParams:a,method:c,token:u})=>o((({path:e,baseUrl:t,queryParams:n})=>{const r=new URL(e,t);return n&&(r.search=new URLSearchParams(n).toString()),r})({path:r,baseUrl:e,queryParams:a}),{headers:g(b(t,u),(null==n?void 0:n.baseHeaders)||{},s),method:c,body:v(i)});return{get:(e,{headers:t,queryParams:n,token:r}={})=>i({path:e,headers:t,queryParams:n,body:void 0,method:y.get,token:r}),post:(e,t,{headers:n,queryParams:r,token:o}={})=>i({path:e,headers:n,queryParams:r,body:t,method:y.post,token:o}),put:(e,t,{headers:n,queryParams:r,token:o}={})=>i({path:e,headers:n,queryParams:r,body:t,method:y.put,token:o}),delete:(e,t,{headers:n,queryParams:r,token:o}={})=>i({path:e,headers:n,queryParams:r,body:t,method:y.delete,token:o})}};function I(e){this.message=e}I.prototype=new Error,I.prototype.name="InvalidCharacterError";var j="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new I("'atob' failed: The string to be decoded is not correctly encoded.");for(var n,r,o=0,i=0,s="";r=t.charAt(i++);~r&&(n=o%4?64*n+r:r,o++%4)?s+=String.fromCharCode(255&n>>(-2*o&6)):0)r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(r);return s};function O(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(j(e).replace(/(.)/g,(function(e,t){var n=t.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n="0"+n),"%"+n})))}(t)}catch(e){return j(t)}}function k(e){this.message=e}k.prototype=new Error,k.prototype.name="InvalidTokenError";const w=e=>{if("string"!=typeof e||!e)throw new Error("Invalid token provided");const{exp:t}=function(e,t){if("string"!=typeof e)throw new k("Invalid token specified");var n=!0===(t=t||{}).header?0:1;try{return JSON.parse(O(e.split(".")[n]))}catch(e){throw new k("Invalid token specified: "+e.message)}}(e);return(new Date).getTime()/1e3>t},_=(...e)=>e.join("/").replaceAll(/\/{2,}/g,"/"),U=e=>l(void 0,void 0,void 0,(function*(){const t=yield e,n={code:t.status,ok:t.ok,response:t},r=yield t.json();return t.ok?n.data=r:n.error=r,n}));var x,P,$;!function(e){e.sms="sms",e.whatsapp="whatsapp"}(x||(x={})),function(e){e.email="email",e.sms="sms",e.whatsapp="whatsapp"}(P||(P={})),function(e){e.signUp="signup",e.signIn="signin",e.verify="verify"}($||($={}));const S=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),R=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)});var E="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},T="__lodash_hash_undefined__",q="[object Function]",A="[object GeneratorFunction]",M=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,C=/^\w*$/,D=/^\./,z=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,L=/\\(\\)?/g,F=/^\[object .+?Constructor\]$/,J="object"==typeof E&&E&&E.Object===Object&&E,H="object"==typeof self&&self&&self.Object===Object&&self,N=J||H||Function("return this")();var Z,B=Array.prototype,G=Function.prototype,K=Object.prototype,Q=N["__core-js_shared__"],V=(Z=/[^.]+$/.exec(Q&&Q.keys&&Q.keys.IE_PROTO||""))?"Symbol(src)_1."+Z:"",W=G.toString,X=K.hasOwnProperty,Y=K.toString,ee=RegExp("^"+W.call(X).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),te=N.Symbol,ne=B.splice,re=he(N,"Map"),oe=he(Object,"create"),ie=te?te.prototype:void 0,se=ie?ie.toString:void 0;function ae(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function ce(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function ue(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function de(e,t){for(var n,r,o=e.length;o--;)if((n=e[o][0])===(r=t)||n!=n&&r!=r)return o;return-1}function pe(e,t){var n;t=function(e,t){if(be(e))return!1;var n=typeof e;if("number"==n||"symbol"==n||"boolean"==n||null==e||Ie(e))return!0;return C.test(e)||!M.test(e)||null!=t&&e in Object(t)}(t,e)?[t]:be(n=t)?n:ge(n);for(var r=0,o=t.length;null!=e&&r<o;)e=e[ve(t[r++])];return r&&r==o?e:void 0}function le(e){if(!me(e)||(t=e,V&&V in t))return!1;var t,n=function(e){var t=me(e)?Y.call(e):"";return t==q||t==A}(e)||function(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}(e)?ee:F;return n.test(function(e){if(null!=e){try{return W.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e))}function fe(e,t){var n,r,o=e.__data__;return("string"==(r=typeof(n=t))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?o["string"==typeof t?"string":"hash"]:o.map}function he(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return le(n)?n:void 0}ae.prototype.clear=function(){this.__data__=oe?oe(null):{}},ae.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},ae.prototype.get=function(e){var t=this.__data__;if(oe){var n=t[e];return n===T?void 0:n}return X.call(t,e)?t[e]:void 0},ae.prototype.has=function(e){var t=this.__data__;return oe?void 0!==t[e]:X.call(t,e)},ae.prototype.set=function(e,t){return this.__data__[e]=oe&&void 0===t?T:t,this},ce.prototype.clear=function(){this.__data__=[]},ce.prototype.delete=function(e){var t=this.__data__,n=de(t,e);return!(n<0)&&(n==t.length-1?t.pop():ne.call(t,n,1),!0)},ce.prototype.get=function(e){var t=this.__data__,n=de(t,e);return n<0?void 0:t[n][1]},ce.prototype.has=function(e){return de(this.__data__,e)>-1},ce.prototype.set=function(e,t){var n=this.__data__,r=de(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},ue.prototype.clear=function(){this.__data__={hash:new ae,map:new(re||ce),string:new ae}},ue.prototype.delete=function(e){return fe(this,e).delete(e)},ue.prototype.get=function(e){return fe(this,e).get(e)},ue.prototype.has=function(e){return fe(this,e).has(e)},ue.prototype.set=function(e,t){return fe(this,e).set(e,t),this};var ge=ye((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(Ie(e))return se?se.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}(t);var n=[];return D.test(e)&&n.push(""),e.replace(z,(function(e,t,r,o){n.push(r?o.replace(L,"$1"):t||e)})),n}));function ve(e){if("string"==typeof e||Ie(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function ye(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var s=e.apply(this,r);return n.cache=i.set(o,s),s};return n.cache=new(ye.Cache||ue),n}ye.Cache=ue;var be=Array.isArray;function me(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ie(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==Y.call(e)}var je=function(e,t,n){var r=null==e?void 0:pe(e,t);return void 0===r?n:r};const Oe=e=>t=>e.test(t),ke=Oe(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),we=Oe(/^\+[1-9]{1}[0-9]{3,14}$/),_e=S(ke,'"{val}" is not a valid email'),Ue=S(we,'"{val}" is not a valid phone number'),xe=S((Pe=1,e=>e.length>=Pe),"Minimum length is 1");var Pe;const $e=S((e=>"string"==typeof e),"Input is not a string"),Se=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>R(...e).validate(n[t]))),t(...n)),Re=e=>[$e(`"${e}" must be a string`),xe(`"${e}" must not be empty`)],Ee=e=>[$e(`"${e}" must be a string`),_e()],Te=e=>[$e(`"${e}" must be a string`),Ue()];var qe;!function(e){e.signUp="signup",e.signIn="signin",e.verify="verify",e.updatePhone="updatePhone"}(qe||(qe={}));const Ae=Re("identifier"),Me=Se(Ae,Re("code")),Ce=Se(Ae),De=Se(Ae,Te("phone")),ze=Se(Ae,Ee("email")),Le=t=>({verify:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Me(((n,o)=>U(t.post(_(e.verify,r),{code:o,externalId:n}))))})),{}),signIn:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ce((n=>U(t.post(_(e.signIn,r),{externalId:n}))))})),{}),signUp:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ce(((n,o)=>U(t.post(_(e.signUp,r),{externalId:n,user:o}))))})),{}),signUpOrIn:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ce((n=>U(t.post(_(e.signUpOrIn,r),{externalId:n}))))})),{}),update:{email:ze(((n,r,o)=>U(t.post(e.update.email,{externalId:n,email:r},{token:o})))),phone:Object.keys(x).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:De(((n,o,i)=>U(t.post(_(e.update.phone,r),{externalId:n,phone:o},{token:i}))))})),{})}}),Fe=Re("identifier"),Je=Re("uri"),He=Se(Re("token")),Ne=Se(Fe,Je),Ze=Se(Re("pendingRef")),Be=Se(Fe,Te("phone"),Je),Ge=Se(Fe,Ee("email"),Je),Ke=e=>({verify:He((n=>U(e.post(t.verify,{token:n})))),signIn:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ne(((n,o)=>U(e.post(_(t.signIn,r),{externalId:n,URI:o,crossDevice:!0}))))})),{}),signUpOrIn:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ne(((n,o)=>U(e.post(_(t.signUpOrIn,r),{externalId:n,URI:o,crossDevice:!0}))))})),{}),signUp:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ne(((n,o,i)=>U(e.post(_(t.signUp,r),{externalId:n,URI:o,user:i,crossDevice:!0}))))})),{}),waitForSession:Ze(((n,r)=>new Promise((o=>{const{pollingIntervalMs:i,timeoutMs:s}=(({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||d,d),timeoutMs:Math.min(t||p,p)}))(r);let a;const c=setInterval((()=>l(void 0,void 0,void 0,(function*(){const r=yield e.post(t.session,{pendingRef:n});r.ok&&(clearInterval(c),a&&clearTimeout(a),o(U(Promise.resolve(r))))}))),i);a=setTimeout((()=>{o({error:{message:`Session polling timeout exceeded: ${s}ms`,code:"0"},ok:!1}),clearInterval(c)}),s)})))),update:{email:Ge(((n,r,o,i)=>U(e.post(t.update.email,{externalId:n,email:r,URI:o,crossDevice:!0},{token:i})))),phone:Object.keys(x).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Be(((n,o,i,s)=>U(e.post(_(t.update.phone,r),{externalId:n,phone:o,URI:i,crossDevice:!0},{token:s}))))})),{})}}),Qe=e=>({verify:He((n=>U(e.post(t.verify,{token:n})))),signIn:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ne(((n,o)=>U(e.post(_(t.signIn,r),{externalId:n,URI:o}))))})),{}),signUp:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ne(((n,o,i)=>U(e.post(_(t.signUp,r),{externalId:n,URI:o,user:i}))))})),{}),signUpOrIn:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ne(((n,o)=>U(e.post(_(t.signUpOrIn,r),{externalId:n,URI:o}))))})),{}),update:{email:Ge(((n,r,o,i)=>U(e.post(t.update.email,{externalId:n,email:r,URI:o},{token:i})))),phone:Object.keys(x).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Be(((n,o,i,s)=>U(e.post(_(t.update.phone,r),{externalId:n,phone:o,URI:i},{token:s}))))})),{})},crossDevice:Ke(e)}),Ve=Se(Re("code")),We=e=>({exchange:Ve((t=>U(e.get(u,{queryParams:{code:t}}))))});var Xe;!function(e){e.facebook="facebook",e.github="github",e.google="google",e.microsoft="microsoft",e.gitlab="gitlab",e.apple="apple"}(Xe||(Xe={}));const Ye=e=>Object.assign({start:Object.keys(Xe).reduce(((t,r)=>Object.assign(Object.assign({},t),{[r]:(t,{redirect:o=!1}={})=>l(void 0,void 0,void 0,(function*(){const i=yield e.get(n.start,{queryParams:{provider:r,redirectURL:t}});if(!o||!i.ok)return U(Promise.resolve(i));const{url:s}=yield i.json();window.location.href=s}))})),{})},We(e)),et=Se(Re("flowId")),tt=Se(Re("executionId"),Re("stepId"),Re("actionId")),nt=e=>({start:et((t=>U(e.post(c.start,{flowId:t})))),next:tt(((t,n,r,o)=>U(e.post(c.next,{executionId:t,stepId:n,actionId:r,input:o}))))}),rt=Se(Re("tenant")),ot=e=>Object.assign({start:rt(((t,n,{redirect:o=!1}={})=>l(void 0,void 0,void 0,(function*(){const i=yield e.get(r.start,{queryParams:{tenant:t,redirectURL:n}});if(!o||!i.ok)return U(Promise.resolve(i));const{url:s}=yield i.json();window.location.href=s}))))},We(e)),it=Re("identifier"),st=Se(it,Re("code")),at=Se(it),ct=Se(it),ut=e=>({signUp:at(((t,n)=>U(e.post(o.signUp,{externalId:t,user:n})))),verify:st(((t,n)=>U(e.post(o.verify,{externalId:t,code:n})))),update:ct(((t,n)=>U(e.post(o.update,{externalId:t},{token:n}))))}),dt=Re("identifier"),pt=Re("origin"),lt=Se(dt,pt,Re("name")),ft=Se(dt,pt),ht=Se(dt,pt,Re("token")),gt=Se(Re("transactionId"),Re("response")),vt=e=>({signUp:{start:lt(((t,n,r)=>U(e.post(i.signUp.start,{user:{externalId:t,name:r},origin:n})))),finish:gt(((t,n)=>U(e.post(i.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:ft(((t,n)=>U(e.post(i.signIn.start,{externalId:t,origin:n})))),finish:gt(((t,n)=>U(e.post(i.signIn.finish,{transactionId:t,response:n}))))},add:{start:ht(((t,n,r)=>U(e.post(i.add.start,{externalId:t,origin:n},{token:r})))),finish:gt(((t,n)=>U(e.post(i.add.finish,{transactionId:t,response:n}))))}}),yt=Se(Re("token"));var bt,mt;return Se([(bt="projectId",mt=Re("projectId"),S(((e,t)=>n=>R(...t).validate(je(n,e)))(bt,mt))())])((({projectId:e,logger:t,baseUrl:n})=>{return r=m({baseUrl:n||"https://api.descope.com",projectId:e,logger:t}),{otp:Le(r),magicLink:Qe(r),oauth:Ye(r),saml:ot(r),totp:ut(r),webauthn:vt(r),flow:nt(r),refresh:e=>U(r.get(s,{token:e})),logout:e=>U(r.get(a,{token:e})),isJwtExpired:yt(w),httpClient:r};var r}))}));
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).descopeSdk=t()}(this,(function(){"use strict";var e={verify:"/v1/auth/code/verify",signIn:"/v1/auth/signin/otp",signUp:"/v1/auth/signup/otp",update:{email:"/v1/user/update/email/otp",phone:"/v1/user/update/phone/otp"},signUpOrIn:"/v1/auth/sign-up-or-in/otp"},t={verify:"/v1/auth/magiclink/verify",signIn:"/v1/auth/signin/magiclink",signUp:"/v1/auth/signup/magiclink",session:"/v1/auth/magiclink/session",update:{email:"/v1/user/update/email/magiclink",phone:"/v1/user/update/phone/magiclink"},signUpOrIn:"/v1/auth/sign-up-or-in/magiclink"},n={start:"/v1/oauth/authorize"},r={start:"/v1/auth/saml/authorize"},o={verify:"/v1/auth/verify/totp",signUp:"/v1/auth/signup/totp",update:"/v1/user/update/totp"},i={signUp:{start:"/v1/webauthn/signup/start",finish:"/v1/webauthn/signup/finish"},signIn:{start:"/v1/webauthn/signin/start",finish:"/v1/webauthn/signin/finish"},add:{start:"/v1/webauthn/device/add/start",finish:"/v1/webauthn/device/add/finish"}},s="/v1/auth/refresh",a="/v1/auth/logoutall",c={start:"/v1/flow/start",next:"/v1/flow/next"},u="/v1/auth/exchange";const d=1e3,p=6e5;function l(e,t,n,r){return new(n||(n=Promise))((function(o,i){function s(e){try{c(r.next(e))}catch(e){i(e)}}function a(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))}const f=()=>{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},build:()=>Object.keys(e).flatMap((t=>e[t]?[`${"Title"!==t?`${t}: `:""}${e[t]}`]:[])).join("\n")}},h=(e,t)=>{const n=t||fetch;if(!n)throw new Error("fetch is not defined");return e?(...t)=>l(void 0,void 0,void 0,(function*(){e.log((e=>f().title("Request").url(e[0]).method(e[1].method).headers(e[1].headers).body(e[1].body).build())(t));const r=yield n(...t);return e[r.ok?"log":"error"](yield(e=>l(void 0,void 0,void 0,(function*(){const t=yield e.text();return e.text=()=>Promise.resolve(t),e.json=()=>Promise.resolve(JSON.parse(t)),f().title("Response").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).build()})))(r)),r})):n},g=(...e)=>new Headers(e.reduce(((e,t)=>{const n=(e=>Array.isArray(e)?e:e instanceof Headers?Array.from(e.entries()):e?Object.entries(e):[])(t);return n.reduce(((t,[n,r])=>(e[n]=r,e)),e),e}),{})),v=e=>void 0===e?void 0:JSON.stringify(e);var y;!function(e){e.get="GET",e.delete="DELETE",e.post="POST",e.put="PUT"}(y||(y={}));const b=(e,t="")=>{let n=e;return""!==t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},m=({baseUrl:e,projectId:t,baseConfig:n,logger:r})=>{const o=h(r),i=({path:r,body:i,headers:s,queryParams:a,method:c,token:u})=>o((({path:e,baseUrl:t,queryParams:n})=>{const r=new URL(e,t);return n&&(r.search=new URLSearchParams(n).toString()),r})({path:r,baseUrl:e,queryParams:a}),{headers:g(b(t,u),(null==n?void 0:n.baseHeaders)||{},s),method:c,body:v(i)});return{get:(e,{headers:t,queryParams:n,token:r}={})=>i({path:e,headers:t,queryParams:n,body:void 0,method:y.get,token:r}),post:(e,t,{headers:n,queryParams:r,token:o}={})=>i({path:e,headers:n,queryParams:r,body:t,method:y.post,token:o}),put:(e,t,{headers:n,queryParams:r,token:o}={})=>i({path:e,headers:n,queryParams:r,body:t,method:y.put,token:o}),delete:(e,t,{headers:n,queryParams:r,token:o}={})=>i({path:e,headers:n,queryParams:r,body:t,method:y.delete,token:o})}};function I(e){this.message=e}I.prototype=new Error,I.prototype.name="InvalidCharacterError";var j="undefined"!=typeof window&&window.atob&&window.atob.bind(window)||function(e){var t=String(e).replace(/=+$/,"");if(t.length%4==1)throw new I("'atob' failed: The string to be decoded is not correctly encoded.");for(var n,r,o=0,i=0,s="";r=t.charAt(i++);~r&&(n=o%4?64*n+r:r,o++%4)?s+=String.fromCharCode(255&n>>(-2*o&6)):0)r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".indexOf(r);return s};function O(e){var t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw"Illegal base64url string!"}try{return function(e){return decodeURIComponent(j(e).replace(/(.)/g,(function(e,t){var n=t.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n="0"+n),"%"+n})))}(t)}catch(e){return j(t)}}function k(e){this.message=e}k.prototype=new Error,k.prototype.name="InvalidTokenError";const w=e=>{if("string"!=typeof e||!e)throw new Error("Invalid token provided");const{exp:t}=function(e,t){if("string"!=typeof e)throw new k("Invalid token specified");var n=!0===(t=t||{}).header?0:1;try{return JSON.parse(O(e.split(".")[n]))}catch(e){throw new k("Invalid token specified: "+e.message)}}(e);return(new Date).getTime()/1e3>t},_=(...e)=>e.join("/").replaceAll(/\/{2,}/g,"/"),U=e=>l(void 0,void 0,void 0,(function*(){const t=yield e,n={code:t.status,ok:t.ok,response:t},r=yield t.json();return t.ok?n.data=r:n.error=r,n}));var x,P,S;!function(e){e.sms="sms",e.whatsapp="whatsapp"}(x||(x={})),function(e){e.email="email",e.sms="sms",e.whatsapp="whatsapp"}(P||(P={})),function(e){e.signUp="signup",e.signIn="signin",e.verify="verify"}(S||(S={}));const $=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),R=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)});var E="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},T="__lodash_hash_undefined__",q="[object Function]",A="[object GeneratorFunction]",M=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,C=/^\w*$/,D=/^\./,z=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,L=/\\(\\)?/g,F=/^\[object .+?Constructor\]$/,J="object"==typeof E&&E&&E.Object===Object&&E,H="object"==typeof self&&self&&self.Object===Object&&self,N=J||H||Function("return this")();var Z,B=Array.prototype,G=Function.prototype,K=Object.prototype,Q=N["__core-js_shared__"],V=(Z=/[^.]+$/.exec(Q&&Q.keys&&Q.keys.IE_PROTO||""))?"Symbol(src)_1."+Z:"",W=G.toString,X=K.hasOwnProperty,Y=K.toString,ee=RegExp("^"+W.call(X).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),te=N.Symbol,ne=B.splice,re=he(N,"Map"),oe=he(Object,"create"),ie=te?te.prototype:void 0,se=ie?ie.toString:void 0;function ae(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function ce(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function ue(e){var t=-1,n=e?e.length:0;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}function de(e,t){for(var n,r,o=e.length;o--;)if((n=e[o][0])===(r=t)||n!=n&&r!=r)return o;return-1}function pe(e,t){var n;t=function(e,t){if(be(e))return!1;var n=typeof e;if("number"==n||"symbol"==n||"boolean"==n||null==e||Ie(e))return!0;return C.test(e)||!M.test(e)||null!=t&&e in Object(t)}(t,e)?[t]:be(n=t)?n:ge(n);for(var r=0,o=t.length;null!=e&&r<o;)e=e[ve(t[r++])];return r&&r==o?e:void 0}function le(e){if(!me(e)||(t=e,V&&V in t))return!1;var t,n=function(e){var t=me(e)?Y.call(e):"";return t==q||t==A}(e)||function(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}(e)?ee:F;return n.test(function(e){if(null!=e){try{return W.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e))}function fe(e,t){var n,r,o=e.__data__;return("string"==(r=typeof(n=t))||"number"==r||"symbol"==r||"boolean"==r?"__proto__"!==n:null===n)?o["string"==typeof t?"string":"hash"]:o.map}function he(e,t){var n=function(e,t){return null==e?void 0:e[t]}(e,t);return le(n)?n:void 0}ae.prototype.clear=function(){this.__data__=oe?oe(null):{}},ae.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},ae.prototype.get=function(e){var t=this.__data__;if(oe){var n=t[e];return n===T?void 0:n}return X.call(t,e)?t[e]:void 0},ae.prototype.has=function(e){var t=this.__data__;return oe?void 0!==t[e]:X.call(t,e)},ae.prototype.set=function(e,t){return this.__data__[e]=oe&&void 0===t?T:t,this},ce.prototype.clear=function(){this.__data__=[]},ce.prototype.delete=function(e){var t=this.__data__,n=de(t,e);return!(n<0)&&(n==t.length-1?t.pop():ne.call(t,n,1),!0)},ce.prototype.get=function(e){var t=this.__data__,n=de(t,e);return n<0?void 0:t[n][1]},ce.prototype.has=function(e){return de(this.__data__,e)>-1},ce.prototype.set=function(e,t){var n=this.__data__,r=de(n,e);return r<0?n.push([e,t]):n[r][1]=t,this},ue.prototype.clear=function(){this.__data__={hash:new ae,map:new(re||ce),string:new ae}},ue.prototype.delete=function(e){return fe(this,e).delete(e)},ue.prototype.get=function(e){return fe(this,e).get(e)},ue.prototype.has=function(e){return fe(this,e).has(e)},ue.prototype.set=function(e,t){return fe(this,e).set(e,t),this};var ge=ye((function(e){var t;e=null==(t=e)?"":function(e){if("string"==typeof e)return e;if(Ie(e))return se?se.call(e):"";var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}(t);var n=[];return D.test(e)&&n.push(""),e.replace(z,(function(e,t,r,o){n.push(r?o.replace(L,"$1"):t||e)})),n}));function ve(e){if("string"==typeof e||Ie(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}function ye(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var s=e.apply(this,r);return n.cache=i.set(o,s),s};return n.cache=new(ye.Cache||ue),n}ye.Cache=ue;var be=Array.isArray;function me(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function Ie(e){return"symbol"==typeof e||function(e){return!!e&&"object"==typeof e}(e)&&"[object Symbol]"==Y.call(e)}var je=function(e,t,n){var r=null==e?void 0:pe(e,t);return void 0===r?n:r};const Oe=e=>t=>e.test(t),ke=Oe(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),we=Oe(/^\+[1-9]{1}[0-9]{3,14}$/),_e=$(ke,'"{val}" is not a valid email'),Ue=$(we,'"{val}" is not a valid phone number'),xe=$((Pe=1,e=>e.length>=Pe),"Minimum length is 1");var Pe;const Se=$((e=>"string"==typeof e),"Input is not a string"),$e=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>R(...e).validate(n[t]))),t(...n)),Re=e=>[Se(`"${e}" must be a string`),xe(`"${e}" must not be empty`)],Ee=e=>[Se(`"${e}" must be a string`),_e()],Te=e=>[Se(`"${e}" must be a string`),Ue()];var qe;!function(e){e.signUp="signup",e.signIn="signin",e.verify="verify",e.updatePhone="updatePhone"}(qe||(qe={}));const Ae=Re("identifier"),Me=$e(Ae,Re("code")),Ce=$e(Ae),De=$e(Ae,Te("phone")),ze=$e(Ae,Ee("email")),Le=t=>({verify:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Me(((n,o)=>U(t.post(_(e.verify,r),{code:o,externalId:n}))))})),{}),signIn:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ce((n=>U(t.post(_(e.signIn,r),{externalId:n}))))})),{}),signUp:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ce(((n,o)=>U(t.post(_(e.signUp,r),{externalId:n,user:o}))))})),{}),signUpOrIn:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ce((n=>U(t.post(_(e.signUpOrIn,r),{externalId:n}))))})),{}),update:{email:ze(((n,r,o)=>U(t.post(e.update.email,{externalId:n,email:r},{token:o})))),phone:Object.keys(x).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:De(((n,o,i)=>U(t.post(_(e.update.phone,r),{externalId:n,phone:o},{token:i}))))})),{})}}),Fe=Re("identifier"),Je=Re("uri"),He=$e(Re("token")),Ne=$e(Fe,Je),Ze=$e(Re("pendingRef")),Be=$e(Fe,Te("phone"),Je),Ge=$e(Fe,Ee("email"),Je),Ke=e=>({verify:He((n=>U(e.post(t.verify,{token:n})))),signIn:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ne(((n,o)=>U(e.post(_(t.signIn,r),{externalId:n,URI:o,crossDevice:!0}))))})),{}),signUpOrIn:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ne(((n,o)=>U(e.post(_(t.signUpOrIn,r),{externalId:n,URI:o,crossDevice:!0}))))})),{}),signUp:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ne(((n,o,i)=>U(e.post(_(t.signUp,r),{externalId:n,URI:o,user:i,crossDevice:!0}))))})),{}),waitForSession:Ze(((n,r)=>new Promise((o=>{const{pollingIntervalMs:i,timeoutMs:s}=(({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||d,d),timeoutMs:Math.min(t||p,p)}))(r);let a;const c=setInterval((()=>l(void 0,void 0,void 0,(function*(){const r=yield e.post(t.session,{pendingRef:n});r.ok&&(clearInterval(c),a&&clearTimeout(a),o(U(Promise.resolve(r))))}))),i);a=setTimeout((()=>{o({error:{message:`Session polling timeout exceeded: ${s}ms`,code:"0"},ok:!1}),clearInterval(c)}),s)})))),update:{email:Ge(((n,r,o,i)=>U(e.post(t.update.email,{externalId:n,email:r,URI:o,crossDevice:!0},{token:i})))),phone:Object.keys(x).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Be(((n,o,i,s)=>U(e.post(_(t.update.phone,r),{externalId:n,phone:o,URI:i,crossDevice:!0},{token:s}))))})),{})}}),Qe=e=>({verify:He((n=>U(e.post(t.verify,{token:n})))),signIn:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ne(((n,o)=>U(e.post(_(t.signIn,r),{externalId:n,URI:o}))))})),{}),signUp:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ne(((n,o,i)=>U(e.post(_(t.signUp,r),{externalId:n,URI:o,user:i}))))})),{}),signUpOrIn:Object.keys(P).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Ne(((n,o)=>U(e.post(_(t.signUpOrIn,r),{externalId:n,URI:o}))))})),{}),update:{email:Ge(((n,r,o,i)=>U(e.post(t.update.email,{externalId:n,email:r,URI:o},{token:i})))),phone:Object.keys(x).reduce(((n,r)=>Object.assign(Object.assign({},n),{[r]:Be(((n,o,i,s)=>U(e.post(_(t.update.phone,r),{externalId:n,phone:o,URI:i},{token:s}))))})),{})},crossDevice:Ke(e)}),Ve=$e(Re("code")),We=e=>({exchange:Ve((t=>U(e.get(u,{queryParams:{code:t}}))))});var Xe;!function(e){e.facebook="facebook",e.github="github",e.google="google",e.microsoft="microsoft",e.gitlab="gitlab",e.apple="apple"}(Xe||(Xe={}));const Ye=e=>Object.assign({start:Object.keys(Xe).reduce(((t,r)=>Object.assign(Object.assign({},t),{[r]:(t,{redirect:o=!1}={})=>l(void 0,void 0,void 0,(function*(){const i=yield e.get(n.start,{queryParams:{provider:r,redirectURL:t}});if(!o||!i.ok)return U(Promise.resolve(i));const{url:s}=yield i.json();window.location.href=s}))})),{})},We(e)),et=$e(Re("flowId")),tt=$e(Re("executionId"),Re("stepId"),Re("actionId")),nt=e=>({start:et((t=>U(e.post(c.start,{flowId:t})))),next:tt(((t,n,r,o)=>U(e.post(c.next,{executionId:t,stepId:n,actionId:r,input:o}))))}),rt=$e(Re("tenant")),ot=e=>Object.assign({start:rt(((t,n,{redirect:o=!1}={})=>l(void 0,void 0,void 0,(function*(){const i=yield e.get(r.start,{queryParams:{tenant:t,redirectURL:n}});if(!o||!i.ok)return U(Promise.resolve(i));const{url:s}=yield i.json();window.location.href=s}))))},We(e)),it=Re("identifier"),st=$e(it,Re("code")),at=$e(it),ct=$e(it),ut=e=>({signUp:at(((t,n)=>U(e.post(o.signUp,{externalId:t,user:n})))),verify:st(((t,n)=>U(e.post(o.verify,{externalId:t,code:n})))),update:ct(((t,n)=>U(e.post(o.update,{externalId:t},{token:n}))))}),dt=Re("identifier"),pt=Re("origin"),lt=$e(dt,pt,Re("name")),ft=$e(dt,pt),ht=$e(dt,pt,Re("token")),gt=$e(Re("transactionId"),Re("response")),vt=e=>({signUp:{start:lt(((t,n,r)=>U(e.post(i.signUp.start,{user:{externalId:t,name:r},origin:n})))),finish:gt(((t,n)=>U(e.post(i.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:ft(((t,n)=>U(e.post(i.signIn.start,{externalId:t,origin:n})))),finish:gt(((t,n)=>U(e.post(i.signIn.finish,{transactionId:t,response:n}))))},add:{start:ht(((t,n,r)=>U(e.post(i.add.start,{externalId:t,origin:n},{token:r})))),finish:gt(((t,n)=>U(e.post(i.add.finish,{transactionId:t,response:n}))))}}),yt=$e(Re("token"));var bt,mt;return $e([(bt="projectId",mt=Re("projectId"),$(((e,t)=>n=>R(...t).validate(je(n,e)))(bt,mt))())])((({projectId:e,logger:t,baseUrl:n})=>{return r=m({baseUrl:n||"https://api.descope.com",projectId:e,logger:t}),{otp:Le(r),magicLink:Qe(r),oauth:Ye(r),saml:ot(r),totp:ut(r),webauthn:vt(r),flow:nt(r),refresh:e=>U(r.get(s,{token:e})),logout:e=>U(r.get(a,{token:e})),isJwtExpired:yt(w),httpClient:r};var r}))}));
2
2
  //# sourceMappingURL=index.umd.js.map