@descope/core-js-sdk 0.0.41-alpha.7 → 0.0.41-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{index.cjs.js → cjs/index.cjs.js} +1 -1
- package/dist/cjs/index.cjs.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/index.d.ts +10 -8
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/package.json +7 -2
- package/dist/index.cjs.js.map +0 -1
package/dist/index.cjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.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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"}
|