@descope/web-component 3.38.2 → 3.39.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/cjs/descope-wc/BaseDescopeWc.js +1 -1
- package/dist/cjs/descope-wc/DescopeWc.js +1 -1
- package/dist/cjs/descope-wc/DescopeWc.js.map +1 -1
- package/dist/cjs/helpers/state.js +1 -1
- package/dist/cjs/helpers/state.js.map +1 -1
- package/dist/cjs/helpers/templates.js +1 -1
- package/dist/cjs/helpers/templates.js.map +1 -1
- package/dist/esm/descope-wc/BaseDescopeWc.js +1 -1
- package/dist/esm/descope-wc/DescopeWc.js +1 -1
- package/dist/esm/descope-wc/DescopeWc.js.map +1 -1
- package/dist/esm/helpers/state.js +1 -1
- package/dist/esm/helpers/state.js.map +1 -1
- package/dist/esm/helpers/templates.js +1 -1
- package/dist/esm/helpers/templates.js.map +1 -1
- package/dist/index.d.ts +44 -43
- package/dist/index.js +2 -2
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sources":["../../../src/lib/helpers/state.ts"],"sourcesContent":["import { createIsChanged } from './helpers';\n\ntype StateObject = Record<string, any>;\n\n// eslint-disable-next-line import/exports-last\nexport type SubscribeCb<T> = (\n state: T,\n prevState: T,\n isChanged: ReturnType<typeof createIsChanged>,\n) => void | Promise<void>;\ntype UpdateStateCb<T> = (state: T) => Partial<T>;\ntype Subscribers<T> = Record
|
|
1
|
+
{"version":3,"file":"state.js","sources":["../../../src/lib/helpers/state.ts"],"sourcesContent":["import { createIsChanged } from './helpers';\n\ntype StateObject = Record<string, any>;\n\n// eslint-disable-next-line import/exports-last\nexport type SubscribeCb<T> = (\n state: T,\n prevState: T,\n isChanged: ReturnType<typeof createIsChanged>,\n) => void | Promise<void>;\n\ntype UpdateStateCb<T> = (state: T) => Partial<T>;\n\ntype Subscribers<T> = Record<\n string,\n { cb: SubscribeCb<ReturnType<SelectorCb<T>>>; selector: SelectorCb<T> }\n>;\n\nexport type SelectorCb<T> = (state: T) => any;\n\nexport type IsChanged<T> = Parameters<SubscribeCb<T>>[2];\n\nfunction isPlainObject(maybeObj: any) {\n if (typeof maybeObj !== 'object' || maybeObj === null) return false;\n const proto = Object.getPrototypeOf(maybeObj);\n return proto === Object.prototype || proto === null;\n}\n\nfunction compareObjects(\n objectA: Record<string, any>,\n objectB: Record<string, any>,\n) {\n const aProperties = Object.getOwnPropertyNames(objectA);\n const bProperties = Object.getOwnPropertyNames(objectB);\n\n if (aProperties.length !== bProperties.length) {\n return false;\n }\n\n for (let i = 0; i < aProperties.length; i += 1) {\n const propName = aProperties[i];\n\n const valA = objectA[propName];\n const valB = objectB[propName];\n if (valA === null || valB === null) {\n if (valA !== valB) {\n return false;\n }\n } else if (typeof valA === 'object' && typeof valB === 'object') {\n // compare nested objects\n if (!compareObjects(valA, valB)) {\n return false;\n }\n } else if (valA !== valB) {\n return false;\n }\n }\n\n return true;\n}\n\nclass State<T extends StateObject> {\n #state: T;\n\n #subscribers: Subscribers<T> = {};\n\n #token = 0;\n\n #forceUpdateAll = true;\n\n constructor(init: T = {} as T, { forceUpdate = false } = {}) {\n this.#state = init;\n this.#forceUpdateAll = forceUpdate;\n }\n\n get current() {\n return { ...this.#state };\n }\n\n set forceUpdate(forceUpdate: boolean) {\n this.#forceUpdateAll = forceUpdate;\n }\n\n update = (newState: Partial<T> | UpdateStateCb<T>) => {\n const internalNewState =\n typeof newState === 'function' ? newState(this.#state) : newState;\n\n const nextState = { ...this.#state, ...internalNewState };\n const prevState = this.#state;\n this.#state = nextState;\n Object.freeze(this.#state);\n\n setTimeout(() => {\n Object.values(this.#subscribers).forEach(({ cb, selector }) => {\n const partialPrevState = selector(prevState);\n const partialNextState = selector(nextState);\n\n if (\n this.#forceUpdateAll ||\n (isPlainObject(partialNextState)\n ? !compareObjects(partialPrevState, partialNextState)\n : partialPrevState !== partialNextState)\n ) {\n cb(\n partialNextState,\n partialPrevState,\n createIsChanged(partialNextState, partialPrevState),\n );\n }\n });\n }, 0);\n };\n\n subscribe<R extends any | Partial<T>>(\n cb: SubscribeCb<R>,\n selector: (state: T) => R = (state: T) => state as unknown as R,\n ) {\n this.#token += 1;\n this.#subscribers[this.#token] = { cb, selector };\n\n return this.#token.toString();\n }\n\n unsubscribe(token: string) {\n const isFound = !!this.#subscribers[token];\n\n if (isFound) {\n delete this.#subscribers[token];\n }\n\n return isFound;\n }\n\n unsubscribeAll() {\n this.#subscribers = {};\n\n return true;\n }\n}\n\nexport default State;\n"],"names":["compareObjects","objectA","objectB","aProperties","Object","getOwnPropertyNames","bProperties","length","i","propName","valA","valB","State","constructor","init","forceUpdate","_State_state","set","this","_State_subscribers","_State_token","_State_forceUpdateAll","update","newState","internalNewState","__classPrivateFieldGet","nextState","prevState","__classPrivateFieldSet","freeze","setTimeout","values","forEach","cb","selector","partialPrevState","partialNextState","maybeObj","proto","getPrototypeOf","prototype","isPlainObject","createIsChanged","current","assign","subscribe","state","toString","unsubscribe","token","isFound","unsubscribeAll"],"mappings":"sIA4BA,SAASA,EACPC,EACAC,GAEA,MAAMC,EAAcC,OAAOC,oBAAoBJ,GACzCK,EAAcF,OAAOC,oBAAoBH,GAE/C,GAAIC,EAAYI,SAAWD,EAAYC,OACrC,OAAO,EAGT,IAAK,IAAIC,EAAI,EAAGA,EAAIL,EAAYI,OAAQC,GAAK,EAAG,CAC9C,MAAMC,EAAWN,EAAYK,GAEvBE,EAAOT,EAAQQ,GACfE,EAAOT,EAAQO,GACrB,GAAa,OAATC,GAA0B,OAATC,GACnB,GAAID,IAASC,EACX,OAAO,OAEJ,GAAoB,iBAATD,GAAqC,iBAATC,GAE5C,IAAKX,EAAeU,EAAMC,GACxB,OAAO,OAEJ,GAAID,IAASC,EAClB,OAAO,CAEV,CAED,OAAO,CACT,CAEA,MAAMC,EASJ,WAAAC,CAAYC,EAAU,CAAO,GAAEC,YAAEA,GAAc,GAAU,IARzDC,EAAUC,IAAAC,UAAA,GAEVC,EAAAF,IAAAC,KAA+B,CAAA,GAE/BE,EAAAH,IAAAC,KAAS,GAETG,EAAAJ,IAAAC,MAAkB,GAelBA,KAAAI,OAAUC,IACR,MAAMC,EACgB,mBAAbD,EAA0BA,EAASE,EAAAP,KAAWF,EAAA,MAAIO,EAErDG,iCAAiBD,EAAAP,aAAgBM,GACjCG,EAAYF,EAAAP,YAClBU,EAAAV,KAAIF,EAAUU,EAAS,KACvBtB,OAAOyB,OAAOJ,EAAAP,KAAIF,EAAA,MAElBc,YAAW,KACT1B,OAAO2B,OAAON,EAAAP,aAAmBc,SAAQ,EAAGC,KAAIC,eAC9C,MAAMC,EAAmBD,EAASP,GAC5BS,EAAmBF,EAASR,IAGhCD,EAAAP,KAAoBG,EAAA,OA5E9B,SAAuBgB,GACrB,GAAwB,iBAAbA,GAAsC,OAAbA,EAAmB,OAAO,EAC9D,MAAMC,EAAQlC,OAAOmC,eAAeF,GACpC,OAAOC,IAAUlC,OAAOoC,WAAuB,OAAVF,CACvC,CAyEWG,CAAcL,GACVpC,EAAemC,EAAkBC,GAClCD,IAAqBC,IAEzBH,EACEG,EACAD,EACAO,EAAgBN,EAAkBD,GAErC,GACD,GACD,EAAE,EAvCLP,EAAAV,KAAIF,EAAUF,EAAI,KAClBc,EAAAV,KAAIG,EAAmBN,EAAW,IACnC,CAED,WAAI4B,GACF,OAAYvC,OAAAwC,OAAA,GAAAnB,EAAAP,KAAIF,EAAA,KACjB,CAED,eAAID,CAAYA,GACda,EAAAV,KAAIG,EAAmBN,EAAW,IACnC,CAgCD,SAAA8B,CACEZ,EACAC,EAA6BY,GAAaA,GAK1C,OAHAlB,EAAeV,KAAAE,EAAAK,EAAAP,KAAAE,EAAA,KAAA,OACfK,EAAAP,KAAIC,EAAA,KAAcM,EAAAP,KAAIE,EAAA,MAAW,CAAEa,KAAIC,YAEhCT,EAAAP,KAAIE,EAAA,KAAQ2B,UACpB,CAED,WAAAC,CAAYC,GACV,MAAMC,IAAYzB,EAAAP,KAAiBC,EAAA,KAAC8B,GAMpC,OAJIC,UACKzB,EAAAP,KAAIC,EAAA,KAAc8B,GAGpBC,CACR,CAED,cAAAC,GAGE,OAFAvB,EAAAV,KAAIC,EAAgB,CAAE,EAAA,MAEf,CACR"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__rest as e}from"tslib";import{escapeMarkdown as t}from"@descope/escape-markdown";import{ELEMENT_TYPE_ATTRIBUTE as o,HAS_DYNAMIC_VALUES_ATTR_NAME as r,DESCOPE_ATTRIBUTE_EXCLUDE_FIELD as
|
|
1
|
+
import{__rest as e}from"tslib";import{escapeMarkdown as t}from"@descope/escape-markdown";import{ELEMENT_TYPE_ATTRIBUTE as o,HAS_DYNAMIC_VALUES_ATTR_NAME as r,DESCOPE_ATTRIBUTE_EXCLUDE_FIELD as c}from"../constants/index.js";import{shouldHandleMarkdown as s}from"./helpers.js";const n=["disabled"],l=(e,t,r="")=>{e.querySelectorAll(`[${o}="${t}"]`).forEach((e=>{e.textContent=r,e.classList[r?"remove":"add"]("hide")}))},i=(e,t)=>{Object.entries(t||{}).forEach((([t,o])=>{Array.from(e.querySelectorAll(`*[name="${t}"]:not([${c}])`)).forEach((e=>{e.value=o}))}))},a=(e,t)=>t.split(".").reduce(((e,t)=>(null==e?void 0:e[t])||""),e),d=(e,o,r)=>e.replace(/{{(.+?)}}/g,((e,c)=>r?t(a(o,c)):a(o,c))),u=(e,t,r)=>{e.querySelectorAll(`[${o}="${t}"]`).forEach((e=>{e.setAttribute("href",r)}))},f=(e,t,o,r)=>{o&&Object.keys(o).forEach((c=>{t.querySelector(c)||r.debug(`Skipping css vars for component "${c}}"`,`Got css vars for component ${c} but Could not find it on next page`);const s=customElements.get(c);s?Object.keys(o[c]).forEach((t=>{var n;const l=o[c],i=null===(n=null==s?void 0:s.cssVarList)||void 0===n?void 0:n[t];if(!i)return void r.info(`Could not find css variable name for ${t} in ${c}`,"Check if the css variable is defined in the component");const a=l[t];e.style.setProperty(i,a)})):r.info(`Could not find component class for ${c}`,"Check if the component is registered")}))},p=(e,t,o)=>{var r,c;const s=null===(r=customElements.get(t))||void 0===r?void 0:r.cssVarList.url;o&&s&&(null===(c=null==e?void 0:e.style)||void 0===c||c.setProperty(s,`url(data:image/jpg;base64,${o})`))},m=(t,o,c,l,i)=>{var a,f;u(t,"totp-link",null===(a=null==o?void 0:o.totp)||void 0===a?void 0:a.provisionUrl),u(t,"notp-link",null===(f=null==o?void 0:o.notp)||void 0===f?void 0:f.redirectUrl),((e,t)=>{e.querySelectorAll("descope-text,descope-link,descope-enriched-text,descope-code-snippet").forEach((e=>{const o=s(e.localName);e.textContent=d(e.textContent,t,o);const r=e.getAttribute("href");r&&e.setAttribute("href",d(r,t))}))})(t,o),((t,o,r)=>{if(!o)return;const{componentsDynamicAttrs:c}=o,s=e(o,["componentsDynamicAttrs"]),n=Object.keys(s).reduce(((e,t)=>(e[`[name=${t}]`]=s[t],e)),{});c&&Object.keys(c).forEach((e=>{const t=c[e];if(t){const{attributes:o}=t;o&&Object.keys(o).length&&(n[e]=o)}})),Object.keys(n).forEach((e=>{t.querySelectorAll(e).forEach((t=>{const o=n[e];Object.keys(o).forEach((e=>{let c=o[e];if("string"!=typeof c)try{c=JSON.stringify(c)}catch(t){r.error(`Could not stringify value "${c}" for "${e}"`,t.message),c=""}t.setAttribute(e,c)}))}))}))})(t,c,i),((e,t)=>{e.querySelectorAll(`[${r}]`).forEach((e=>{Array.from(e.attributes).forEach((e=>{e.value=d(e.value,t)}))}))})(t,o),((e,t)=>{Object.entries(t).forEach((([t,o])=>{e.querySelectorAll(`[name="${t}"]`).forEach((e=>{Object.entries(o).forEach((([t,o])=>{n.includes(t)&&e.setAttribute(t,o)}))}))}))})(t,l)},h=(e,t)=>{i(e,null==t?void 0:t.inputs),i(e,null==t?void 0:t.form)},v=(e,t)=>{p(e,"descope-totp-image",t)},y=(e,t)=>{p(e,"descope-notp-image",t)},b=(e,t)=>{Array.from(e.querySelectorAll('[default-code="autoDetect"]')).forEach((e=>{e.setAttribute("default-code",t)}))},A=e=>{e.querySelectorAll(`descope-button[${o}="biometrics"]`).forEach((e=>e.setAttribute("disabled","true")))};export{A as disableWebauthnButtons,l as replaceElementMessage,f as setCssVars,y as setNOTPVariable,b as setPhoneAutoDetectDefaultCode,v as setTOTPVariable,h as updateScreenFromScreenState,m as updateTemplateFromScreenState};
|
|
2
2
|
//# sourceMappingURL=templates.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sources":["../../../src/lib/helpers/templates.ts"],"sourcesContent":["import { escapeMarkdown } from '@descope/escape-markdown';\nimport {\n ELEMENT_TYPE_ATTRIBUTE,\n DESCOPE_ATTRIBUTE_EXCLUDE_FIELD,\n HAS_DYNAMIC_VALUES_ATTR_NAME,\n} from '../constants';\nimport { ComponentsConfig, CssVars, ScreenState } from '../types';\nimport { shouldHandleMarkdown } from './helpers';\n\nconst ALLOWED_INPUT_CONFIG_ATTRS = ['disabled'];\n\nconst replaceElementMessage = (\n baseEle: DocumentFragment,\n eleType: string,\n message = '',\n) => {\n const eleList = baseEle.querySelectorAll(\n `[${ELEMENT_TYPE_ATTRIBUTE}=\"${eleType}\"]`,\n );\n eleList.forEach((ele: HTMLElement) => {\n // eslint-disable-next-line no-param-reassign\n ele.textContent = message;\n ele.classList[message ? 'remove' : 'add']('hide');\n });\n};\n\n/**\n * Replace the 'value' attribute of screen inputs with screen state's inputs.\n * For example: if base element contains '<input name=\"key1\" ...>' and screen input is in form of { key1: 'val1' },\n * it will add 'val1' as the input value\n */\nconst replaceElementInputs = (\n baseEle: HTMLElement,\n screenInputs: Record<string, string>,\n) => {\n Object.entries(screenInputs || {}).forEach(([name, value]) => {\n const inputEls = Array.from(\n baseEle.querySelectorAll(\n `*[name=\"${name}\"]:not([${DESCOPE_ATTRIBUTE_EXCLUDE_FIELD}])`,\n ),\n ) as HTMLInputElement[];\n inputEls.forEach((inputEle) => {\n // eslint-disable-next-line no-param-reassign\n inputEle.value = value;\n });\n });\n};\n\n/**\n * Get object nested path.\n * Examples:\n * - getByPath({ { a { b: 'rob' } }, 'a.b') => 'hey rob'\n * - getByPath({}, 'a.b') => ''\n */\nconst getByPath = (obj: Record<string, any>, path: string) =>\n path.split('.').reduce((prev, next) => prev?.[next] || '', obj);\n\n/**\n * Apply template language on text, based on screen state.\n * Examples:\n * - 'hey {{a.b}}', { a { b: 'rob' }} => 'hey rob'\n * - 'hey {{not.exists}}', {} => 'hey '\n */\nconst applyTemplates = (\n text: string,\n screenState?: Record<string, any>,\n handleMarkdown?: boolean,\n): string =>\n text.replace(/{{(.+?)}}/g, (_, match) =>\n handleMarkdown\n ? escapeMarkdown(getByPath(screenState, match))\n : getByPath(screenState, match),\n );\n\n/**\n * Replace the templates of content of inner text/link elements with screen state data\n */\nconst replaceElementTemplates = (\n baseEle: DocumentFragment,\n screenState?: Record<string, any>,\n) => {\n const eleList = baseEle.querySelectorAll(\n 'descope-text,descope-link,descope-enriched-text,descope-code-snippet',\n );\n eleList.forEach((inEle: HTMLElement) => {\n const handleMarkdown = shouldHandleMarkdown(inEle.localName);\n // eslint-disable-next-line no-param-reassign\n inEle.textContent = applyTemplates(\n inEle.textContent,\n screenState,\n handleMarkdown,\n );\n const href = inEle.getAttribute('href');\n if (href) {\n inEle.setAttribute('href', applyTemplates(href, screenState));\n }\n });\n};\n\nconst replaceTemplateDynamicAttrValues = (\n baseEle: DocumentFragment,\n screenState?: Record<string, any>,\n) => {\n const eleList = baseEle.querySelectorAll(`[${HAS_DYNAMIC_VALUES_ATTR_NAME}]`);\n eleList.forEach((ele: HTMLElement) => {\n Array.from(ele.attributes).forEach((attr) => {\n // eslint-disable-next-line no-param-reassign\n attr.value = applyTemplates(attr.value, screenState);\n });\n });\n};\n\nconst replaceHrefByDataType = (\n baseEle: DocumentFragment,\n dataType: string,\n provisionUrl?: string,\n) => {\n const eleList = baseEle.querySelectorAll(\n `[${ELEMENT_TYPE_ATTRIBUTE}=\"${dataType}\"]`,\n );\n eleList.forEach((ele: HTMLLinkElement) => {\n // eslint-disable-next-line no-param-reassign\n ele.setAttribute('href', provisionUrl);\n });\n};\n\nconst setFormConfigValues = (\n baseEle: DocumentFragment,\n formData: Record<string, string>,\n) => {\n Object.entries(formData).forEach(([name, config]) => {\n const eles = baseEle.querySelectorAll(`[name=\"${name}\"]`);\n\n eles.forEach((ele) => {\n Object.entries(config).forEach(([attrName, attrValue]) => {\n if (ALLOWED_INPUT_CONFIG_ATTRS.includes(attrName)) {\n ele.setAttribute(attrName, attrValue);\n }\n });\n });\n });\n};\n\nexport const setCssVars = (\n rootEle: HTMLElement,\n nextPageTemplate: DocumentFragment,\n cssVars: CssVars,\n logger: {\n error: (message: string, description: string) => void;\n info: (message: string, description: string) => void;\n debug: (message: string, description: string) => void;\n },\n) => {\n if (!cssVars) {\n return;\n }\n\n Object.keys(cssVars).forEach((componentName) => {\n if (!nextPageTemplate.querySelector(componentName)) {\n logger.debug(\n `Skipping css vars for component \"${componentName}}\"`,\n `Got css vars for component ${componentName} but Could not find it on next page`,\n );\n }\n const componentClass:\n | (CustomElementConstructor & { cssVarList: CssVars })\n | undefined = customElements.get(componentName) as any;\n\n if (!componentClass) {\n logger.info(\n `Could not find component class for ${componentName}`,\n 'Check if the component is registered',\n );\n return;\n }\n\n Object.keys(cssVars[componentName]).forEach((cssVarKey) => {\n const componentCssVars = cssVars[componentName];\n const varName = componentClass?.cssVarList?.[cssVarKey];\n\n if (!varName) {\n logger.info(\n `Could not find css variable name for ${cssVarKey} in ${componentName}`,\n 'Check if the css variable is defined in the component',\n );\n return;\n }\n\n const value = componentCssVars[cssVarKey];\n\n rootEle.style.setProperty(varName, value);\n });\n });\n};\n\nconst setElementConfig = (\n baseEle: DocumentFragment,\n componentsConfig: ComponentsConfig,\n logger?: { error: (message: string, description: string) => void },\n) => {\n if (!componentsConfig) {\n return;\n }\n const { componentsDynamicAttrs, ...rest } = componentsConfig;\n\n const configMap = Object.keys(rest).reduce((acc, componentName) => {\n acc[`[name=${componentName}]`] = rest[componentName];\n return acc;\n }, {});\n\n if (componentsDynamicAttrs) {\n Object.keys(componentsDynamicAttrs).forEach((componentSelector) => {\n const componentDynamicAttrs = componentsDynamicAttrs[componentSelector];\n if (componentDynamicAttrs) {\n const { attributes } = componentDynamicAttrs;\n if (attributes && Object.keys(attributes).length) {\n configMap[componentSelector] = attributes;\n }\n }\n });\n }\n\n // collect components that needs configuration from DOM\n Object.keys(configMap).forEach((componentsSelector) => {\n baseEle.querySelectorAll(componentsSelector).forEach((comp) => {\n const config = configMap[componentsSelector];\n\n Object.keys(config).forEach((attr) => {\n let value = config[attr];\n\n if (typeof value !== 'string') {\n try {\n value = JSON.stringify(value);\n } catch (e) {\n logger.error(\n `Could not stringify value \"${value}\" for \"${attr}\"`,\n e.message,\n );\n value = '';\n }\n }\n\n comp.setAttribute(attr, value);\n });\n });\n });\n};\n\nconst setImageVariable = (\n rootEle: HTMLElement,\n name: string,\n image?: string,\n) => {\n const imageVarName = (\n customElements.get(name) as CustomElementConstructor & {\n cssVarList: Record<string, string>;\n }\n )?.cssVarList.url;\n\n if (image && imageVarName) {\n rootEle?.style?.setProperty(\n imageVarName,\n `url(data:image/jpg;base64,${image})`,\n );\n }\n};\n\n/**\n * Update a screen template based on the screen state\n * - Show/hide error messages\n * - Replace element templates ({{...}} syntax) with screen state object\n */\nexport const updateTemplateFromScreenState = (\n baseEle: DocumentFragment,\n screenState?: ScreenState,\n componentsConfig?: ComponentsConfig,\n flowInputs?: Record<string, string>,\n errorTransformer?: (error: { text: string; type: string }) => string,\n logger?: { error: (message: string, description: string) => void },\n) => {\n let errorText = screenState?.errorText;\n try {\n errorText =\n errorTransformer?.({\n text: screenState?.errorText,\n type: screenState?.errorType,\n }) || screenState?.errorText;\n } catch (e) {\n logger.error('Error transforming error message', e.message);\n }\n replaceElementMessage(baseEle, 'error-message', errorText);\n replaceHrefByDataType(baseEle, 'totp-link', screenState?.totp?.provisionUrl);\n replaceHrefByDataType(baseEle, 'notp-link', screenState?.notp?.redirectUrl);\n replaceElementTemplates(baseEle, screenState);\n setElementConfig(baseEle, componentsConfig, logger);\n replaceTemplateDynamicAttrValues(baseEle, screenState);\n setFormConfigValues(baseEle, flowInputs);\n};\n\n/**\n * Update a screen based on a screen state\n * - Replace values of element inputs with screen state's inputs\n */\nexport const updateScreenFromScreenState = (\n baseEle: HTMLElement,\n screenState?: ScreenState,\n) => {\n replaceElementInputs(baseEle, screenState?.inputs);\n replaceElementInputs(baseEle, screenState?.form);\n};\n\nexport const setTOTPVariable = (rootEle: HTMLElement, image?: string) => {\n setImageVariable(rootEle, 'descope-totp-image', image);\n};\n\nexport const setNOTPVariable = (rootEle: HTMLElement, image?: string) => {\n setImageVariable(rootEle, 'descope-notp-image', image);\n};\n\nexport const setPhoneAutoDetectDefaultCode = (\n fragment: DocumentFragment,\n autoDetectCode?: string,\n) => {\n Array.from(fragment.querySelectorAll('[default-code=\"autoDetect\"]')).forEach(\n (phoneEle) => {\n phoneEle.setAttribute('default-code', autoDetectCode);\n },\n );\n};\n\nexport const disableWebauthnButtons = (fragment: DocumentFragment) => {\n const webauthnButtons = fragment.querySelectorAll(\n `descope-button[${ELEMENT_TYPE_ATTRIBUTE}=\"biometrics\"]`,\n );\n webauthnButtons.forEach((button) => button.setAttribute('disabled', 'true'));\n};\n\nexport const getDescopeUiComponentsList = (clone: DocumentFragment) => [\n ...Array.from(clone.querySelectorAll('*')).reduce<Set<string>>(\n (acc, el: HTMLElement) =>\n el.tagName.startsWith('DESCOPE-')\n ? acc.add(el.tagName.toLocaleLowerCase())\n : acc,\n new Set(),\n ),\n];\n"],"names":["ALLOWED_INPUT_CONFIG_ATTRS","replaceElementInputs","baseEle","screenInputs","Object","entries","forEach","name","value","Array","from","querySelectorAll","DESCOPE_ATTRIBUTE_EXCLUDE_FIELD","inputEle","getByPath","obj","path","split","reduce","prev","next","applyTemplates","text","screenState","handleMarkdown","replace","_","match","escapeMarkdown","replaceHrefByDataType","dataType","provisionUrl","ELEMENT_TYPE_ATTRIBUTE","ele","setAttribute","setCssVars","rootEle","nextPageTemplate","cssVars","logger","keys","componentName","querySelector","debug","componentClass","customElements","get","cssVarKey","componentCssVars","varName","_a","cssVarList","info","style","setProperty","setImageVariable","image","imageVarName","url","_b","updateTemplateFromScreenState","componentsConfig","flowInputs","errorTransformer","errorText","type","errorType","e","error","message","eleType","textContent","classList","replaceElementMessage","totp","notp","redirectUrl","inEle","shouldHandleMarkdown","localName","href","getAttribute","replaceElementTemplates","componentsDynamicAttrs","rest","__rest","configMap","acc","componentSelector","componentDynamicAttrs","attributes","length","componentsSelector","comp","config","attr","JSON","stringify","setElementConfig","HAS_DYNAMIC_VALUES_ATTR_NAME","replaceTemplateDynamicAttrValues","formData","attrName","attrValue","includes","setFormConfigValues","updateScreenFromScreenState","inputs","form","setTOTPVariable","setNOTPVariable","setPhoneAutoDetectDefaultCode","fragment","autoDetectCode","phoneEle","disableWebauthnButtons","button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"templates.js","sources":["../../../src/lib/helpers/templates.ts"],"sourcesContent":["import { escapeMarkdown } from '@descope/escape-markdown';\nimport {\n ELEMENT_TYPE_ATTRIBUTE,\n DESCOPE_ATTRIBUTE_EXCLUDE_FIELD,\n HAS_DYNAMIC_VALUES_ATTR_NAME,\n} from '../constants';\nimport { ComponentsConfig, CssVars, ScreenState } from '../types';\nimport { shouldHandleMarkdown } from './helpers';\n\nconst ALLOWED_INPUT_CONFIG_ATTRS = ['disabled'];\n\nexport const replaceElementMessage = (\n baseEle: HTMLElement,\n eleType: string,\n message = '',\n) => {\n const eleList = baseEle.querySelectorAll(\n `[${ELEMENT_TYPE_ATTRIBUTE}=\"${eleType}\"]`,\n );\n eleList.forEach((ele: HTMLElement) => {\n // eslint-disable-next-line no-param-reassign\n ele.textContent = message;\n ele.classList[message ? 'remove' : 'add']('hide');\n });\n};\n\n/**\n * Replace the 'value' attribute of screen inputs with screen state's inputs.\n * For example: if base element contains '<input name=\"key1\" ...>' and screen input is in form of { key1: 'val1' },\n * it will add 'val1' as the input value\n */\nconst replaceElementInputs = (\n baseEle: HTMLElement,\n screenInputs: Record<string, string>,\n) => {\n Object.entries(screenInputs || {}).forEach(([name, value]) => {\n const inputEls = Array.from(\n baseEle.querySelectorAll(\n `*[name=\"${name}\"]:not([${DESCOPE_ATTRIBUTE_EXCLUDE_FIELD}])`,\n ),\n ) as HTMLInputElement[];\n inputEls.forEach((inputEle) => {\n // eslint-disable-next-line no-param-reassign\n inputEle.value = value;\n });\n });\n};\n\n/**\n * Get object nested path.\n * Examples:\n * - getByPath({ { a { b: 'rob' } }, 'a.b') => 'hey rob'\n * - getByPath({}, 'a.b') => ''\n */\nconst getByPath = (obj: Record<string, any>, path: string) =>\n path.split('.').reduce((prev, next) => prev?.[next] || '', obj);\n\n/**\n * Apply template language on text, based on screen state.\n * Examples:\n * - 'hey {{a.b}}', { a { b: 'rob' }} => 'hey rob'\n * - 'hey {{not.exists}}', {} => 'hey '\n */\nconst applyTemplates = (\n text: string,\n screenState?: Record<string, any>,\n handleMarkdown?: boolean,\n): string =>\n text.replace(/{{(.+?)}}/g, (_, match) =>\n handleMarkdown\n ? escapeMarkdown(getByPath(screenState, match))\n : getByPath(screenState, match),\n );\n\n/**\n * Replace the templates of content of inner text/link elements with screen state data\n */\nconst replaceElementTemplates = (\n baseEle: DocumentFragment,\n screenState?: Record<string, any>,\n) => {\n const eleList = baseEle.querySelectorAll(\n 'descope-text,descope-link,descope-enriched-text,descope-code-snippet',\n );\n eleList.forEach((inEle: HTMLElement) => {\n const handleMarkdown = shouldHandleMarkdown(inEle.localName);\n // eslint-disable-next-line no-param-reassign\n inEle.textContent = applyTemplates(\n inEle.textContent,\n screenState,\n handleMarkdown,\n );\n const href = inEle.getAttribute('href');\n if (href) {\n inEle.setAttribute('href', applyTemplates(href, screenState));\n }\n });\n};\n\nconst replaceTemplateDynamicAttrValues = (\n baseEle: DocumentFragment,\n screenState?: Record<string, any>,\n) => {\n const eleList = baseEle.querySelectorAll(`[${HAS_DYNAMIC_VALUES_ATTR_NAME}]`);\n eleList.forEach((ele: HTMLElement) => {\n Array.from(ele.attributes).forEach((attr) => {\n // eslint-disable-next-line no-param-reassign\n attr.value = applyTemplates(attr.value, screenState);\n });\n });\n};\n\nconst replaceHrefByDataType = (\n baseEle: DocumentFragment,\n dataType: string,\n provisionUrl?: string,\n) => {\n const eleList = baseEle.querySelectorAll(\n `[${ELEMENT_TYPE_ATTRIBUTE}=\"${dataType}\"]`,\n );\n eleList.forEach((ele: HTMLLinkElement) => {\n // eslint-disable-next-line no-param-reassign\n ele.setAttribute('href', provisionUrl);\n });\n};\n\nconst setFormConfigValues = (\n baseEle: DocumentFragment,\n formData: Record<string, string>,\n) => {\n Object.entries(formData).forEach(([name, config]) => {\n const eles = baseEle.querySelectorAll(`[name=\"${name}\"]`);\n\n eles.forEach((ele) => {\n Object.entries(config).forEach(([attrName, attrValue]) => {\n if (ALLOWED_INPUT_CONFIG_ATTRS.includes(attrName)) {\n ele.setAttribute(attrName, attrValue);\n }\n });\n });\n });\n};\n\nexport const setCssVars = (\n rootEle: HTMLElement,\n nextPageTemplate: DocumentFragment,\n cssVars: CssVars,\n logger: {\n error: (message: string, description: string) => void;\n info: (message: string, description: string) => void;\n debug: (message: string, description: string) => void;\n },\n) => {\n if (!cssVars) {\n return;\n }\n\n Object.keys(cssVars).forEach((componentName) => {\n if (!nextPageTemplate.querySelector(componentName)) {\n logger.debug(\n `Skipping css vars for component \"${componentName}}\"`,\n `Got css vars for component ${componentName} but Could not find it on next page`,\n );\n }\n const componentClass:\n | (CustomElementConstructor & { cssVarList: CssVars })\n | undefined = customElements.get(componentName) as any;\n\n if (!componentClass) {\n logger.info(\n `Could not find component class for ${componentName}`,\n 'Check if the component is registered',\n );\n return;\n }\n\n Object.keys(cssVars[componentName]).forEach((cssVarKey) => {\n const componentCssVars = cssVars[componentName];\n const varName = componentClass?.cssVarList?.[cssVarKey];\n\n if (!varName) {\n logger.info(\n `Could not find css variable name for ${cssVarKey} in ${componentName}`,\n 'Check if the css variable is defined in the component',\n );\n return;\n }\n\n const value = componentCssVars[cssVarKey];\n\n rootEle.style.setProperty(varName, value);\n });\n });\n};\n\nconst setElementConfig = (\n baseEle: DocumentFragment,\n componentsConfig: ComponentsConfig,\n logger?: { error: (message: string, description: string) => void },\n) => {\n if (!componentsConfig) {\n return;\n }\n const { componentsDynamicAttrs, ...rest } = componentsConfig;\n\n const configMap = Object.keys(rest).reduce((acc, componentName) => {\n acc[`[name=${componentName}]`] = rest[componentName];\n return acc;\n }, {});\n\n if (componentsDynamicAttrs) {\n Object.keys(componentsDynamicAttrs).forEach((componentSelector) => {\n const componentDynamicAttrs = componentsDynamicAttrs[componentSelector];\n if (componentDynamicAttrs) {\n const { attributes } = componentDynamicAttrs;\n if (attributes && Object.keys(attributes).length) {\n configMap[componentSelector] = attributes;\n }\n }\n });\n }\n\n // collect components that needs configuration from DOM\n Object.keys(configMap).forEach((componentsSelector) => {\n baseEle.querySelectorAll(componentsSelector).forEach((comp) => {\n const config = configMap[componentsSelector];\n\n Object.keys(config).forEach((attr) => {\n let value = config[attr];\n\n if (typeof value !== 'string') {\n try {\n value = JSON.stringify(value);\n } catch (e) {\n logger.error(\n `Could not stringify value \"${value}\" for \"${attr}\"`,\n e.message,\n );\n value = '';\n }\n }\n\n comp.setAttribute(attr, value);\n });\n });\n });\n};\n\nconst setImageVariable = (\n rootEle: HTMLElement,\n name: string,\n image?: string,\n) => {\n const imageVarName = (\n customElements.get(name) as CustomElementConstructor & {\n cssVarList: Record<string, string>;\n }\n )?.cssVarList.url;\n\n if (image && imageVarName) {\n rootEle?.style?.setProperty(\n imageVarName,\n `url(data:image/jpg;base64,${image})`,\n );\n }\n};\n\n/**\n * Update a screen template based on the screen state\n * - Show/hide error messages\n * - Replace element templates ({{...}} syntax) with screen state object\n */\nexport const updateTemplateFromScreenState = (\n baseEle: DocumentFragment,\n screenState?: ScreenState,\n componentsConfig?: ComponentsConfig,\n flowInputs?: Record<string, string>,\n logger?: { error: (message: string, description: string) => void },\n) => {\n replaceHrefByDataType(baseEle, 'totp-link', screenState?.totp?.provisionUrl);\n replaceHrefByDataType(baseEle, 'notp-link', screenState?.notp?.redirectUrl);\n replaceElementTemplates(baseEle, screenState);\n setElementConfig(baseEle, componentsConfig, logger);\n replaceTemplateDynamicAttrValues(baseEle, screenState);\n setFormConfigValues(baseEle, flowInputs);\n};\n\n/**\n * Update a screen based on a screen state\n * - Replace values of element inputs with screen state's inputs\n */\nexport const updateScreenFromScreenState = (\n baseEle: HTMLElement,\n screenState?: ScreenState,\n) => {\n replaceElementInputs(baseEle, screenState?.inputs);\n replaceElementInputs(baseEle, screenState?.form);\n};\n\nexport const setTOTPVariable = (rootEle: HTMLElement, image?: string) => {\n setImageVariable(rootEle, 'descope-totp-image', image);\n};\n\nexport const setNOTPVariable = (rootEle: HTMLElement, image?: string) => {\n setImageVariable(rootEle, 'descope-notp-image', image);\n};\n\nexport const setPhoneAutoDetectDefaultCode = (\n fragment: DocumentFragment,\n autoDetectCode?: string,\n) => {\n Array.from(fragment.querySelectorAll('[default-code=\"autoDetect\"]')).forEach(\n (phoneEle) => {\n phoneEle.setAttribute('default-code', autoDetectCode);\n },\n );\n};\n\nexport const disableWebauthnButtons = (fragment: DocumentFragment) => {\n const webauthnButtons = fragment.querySelectorAll(\n `descope-button[${ELEMENT_TYPE_ATTRIBUTE}=\"biometrics\"]`,\n );\n webauthnButtons.forEach((button) => button.setAttribute('disabled', 'true'));\n};\n\nexport const getDescopeUiComponentsList = (clone: DocumentFragment) => [\n ...Array.from(clone.querySelectorAll('*')).reduce<Set<string>>(\n (acc, el: HTMLElement) =>\n el.tagName.startsWith('DESCOPE-')\n ? acc.add(el.tagName.toLocaleLowerCase())\n : acc,\n new Set(),\n ),\n];\n"],"names":["ALLOWED_INPUT_CONFIG_ATTRS","replaceElementMessage","baseEle","eleType","message","querySelectorAll","ELEMENT_TYPE_ATTRIBUTE","forEach","ele","textContent","classList","replaceElementInputs","screenInputs","Object","entries","name","value","Array","from","DESCOPE_ATTRIBUTE_EXCLUDE_FIELD","inputEle","getByPath","obj","path","split","reduce","prev","next","applyTemplates","text","screenState","handleMarkdown","replace","_","match","escapeMarkdown","replaceHrefByDataType","dataType","provisionUrl","setAttribute","setCssVars","rootEle","nextPageTemplate","cssVars","logger","keys","componentName","querySelector","debug","componentClass","customElements","get","cssVarKey","componentCssVars","varName","_a","cssVarList","info","style","setProperty","setImageVariable","image","imageVarName","url","_b","updateTemplateFromScreenState","componentsConfig","flowInputs","totp","notp","redirectUrl","inEle","shouldHandleMarkdown","localName","href","getAttribute","replaceElementTemplates","componentsDynamicAttrs","rest","__rest","configMap","acc","componentSelector","componentDynamicAttrs","attributes","length","componentsSelector","comp","config","attr","JSON","stringify","e","error","setElementConfig","HAS_DYNAMIC_VALUES_ATTR_NAME","replaceTemplateDynamicAttrValues","formData","attrName","attrValue","includes","setFormConfigValues","updateScreenFromScreenState","inputs","form","setTOTPVariable","setNOTPVariable","setPhoneAutoDetectDefaultCode","fragment","autoDetectCode","phoneEle","disableWebauthnButtons","button"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -200,7 +200,7 @@ declare class State<T extends StateObject> {
|
|
|
200
200
|
get current(): T;
|
|
201
201
|
set forceUpdate(forceUpdate: boolean);
|
|
202
202
|
update: (newState: Partial<T> | UpdateStateCb<T>) => void;
|
|
203
|
-
subscribe(cb: SubscribeCb<T
|
|
203
|
+
subscribe<R extends any | Partial<T>>(cb: SubscribeCb<R>, selector?: (state: T) => R): string;
|
|
204
204
|
unsubscribe(token: string): boolean;
|
|
205
205
|
unsubscribeAll(): boolean;
|
|
206
206
|
}
|
|
@@ -537,9 +537,9 @@ declare const BaseClass: {
|
|
|
537
537
|
focus(options?: FocusOptions): void;
|
|
538
538
|
};
|
|
539
539
|
} & (new (...params: any[]) => {
|
|
540
|
-
"__#
|
|
541
|
-
"__#
|
|
542
|
-
"__#
|
|
540
|
+
"__#27165@#lastBaseUrl"?: string;
|
|
541
|
+
"__#27165@#workingBaseUrl"?: string;
|
|
542
|
+
"__#27165@#getResourceUrls"(filename: string): (URL & {
|
|
543
543
|
baseUrl: string;
|
|
544
544
|
}) | (URL & {
|
|
545
545
|
baseUrl: string;
|
|
@@ -877,39 +877,39 @@ declare const BaseClass: {
|
|
|
877
877
|
blur(): void;
|
|
878
878
|
focus(options?: FocusOptions): void;
|
|
879
879
|
readonly projectId: string;
|
|
880
|
-
"__#
|
|
880
|
+
"__#27164@#handleError"(attrName: string, newValue: string): void;
|
|
881
881
|
init(): Promise<void>;
|
|
882
|
-
"__#
|
|
882
|
+
"__#27163@#observeMappings": {};
|
|
883
883
|
observeAttribute(attrName: string, onAttrChange: (attrName: string, value: string) => void): () => any;
|
|
884
884
|
observeAttributes(attrs: string[], cb: (attrName: string, value: string) => void): () => void;
|
|
885
|
-
"__#
|
|
886
|
-
"__#
|
|
887
|
-
"__#
|
|
885
|
+
"__#27162@#isInit": boolean;
|
|
886
|
+
"__#27161@#logger": _descope_sdk_mixins_static_resources_mixin.Logger;
|
|
887
|
+
"__#27161@#wrapLogger": ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger);
|
|
888
888
|
get logger(): _descope_sdk_mixins_static_resources_mixin.Logger;
|
|
889
889
|
set logger(logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>);
|
|
890
890
|
onLogEvent: ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void);
|
|
891
891
|
}) & (new (...params: any[]) => {
|
|
892
|
-
"__#
|
|
892
|
+
"__#27176@#globalStyle": CSSStyleSheet;
|
|
893
893
|
readonly theme: _descope_sdk_mixins_static_resources_mixin.ThemeOptions;
|
|
894
894
|
readonly styleId: string;
|
|
895
|
-
"__#
|
|
896
|
-
"__#
|
|
897
|
-
readonly "__#
|
|
898
|
-
"__#
|
|
899
|
-
"__#
|
|
900
|
-
"__#
|
|
895
|
+
"__#27176@#_themeResource": Promise<void | Record<string, any>>;
|
|
896
|
+
"__#27176@#fetchTheme"(): Promise<Record<string, any>>;
|
|
897
|
+
readonly "__#27176@#themeResource": Promise<void | Record<string, any>>;
|
|
898
|
+
"__#27176@#loadGlobalStyle"(): Promise<void>;
|
|
899
|
+
"__#27176@#loadComponentsStyle"(): Promise<void>;
|
|
900
|
+
"__#27176@#getFontsConfig"(): Promise<Record<string, {
|
|
901
901
|
url?: string;
|
|
902
902
|
}>>;
|
|
903
|
-
"__#
|
|
904
|
-
"__#
|
|
905
|
-
"__#
|
|
906
|
-
"__#
|
|
907
|
-
"__#
|
|
903
|
+
"__#27176@#loadFonts"(): Promise<void>;
|
|
904
|
+
"__#27176@#applyTheme"(): Promise<void>;
|
|
905
|
+
"__#27176@#onThemeChange": () => void;
|
|
906
|
+
"__#27176@#loadTheme"(): void;
|
|
907
|
+
"__#27176@#toggleOsThemeChangeListener": (listen: boolean) => void;
|
|
908
908
|
init(): Promise<void>;
|
|
909
|
-
"__#
|
|
909
|
+
"__#27163@#observeMappings": {};
|
|
910
910
|
observeAttribute: ((attrName: string, onAttrChange: (attrName: string, value: string) => void) => () => any) & ((attrName: string, onAttrChange: (attrName: string, value: string) => void) => () => any) & ((attrName: string, onAttrChange: (attrName: string, value: string) => void) => () => any) & ((attrName: string, onAttrChange: (attrName: string, value: string) => void) => () => any) & ((attrName: string, onAttrChange: (attrName: string, value: string) => void) => () => any) & ((attrName: string, onAttrChange: (attrName: string, value: string) => void) => () => any) & ((attrName: string, onAttrChange: (attrName: string, value: string) => void) => () => any);
|
|
911
911
|
observeAttributes: ((attrs: string[], cb: (attrName: string, value: string) => void) => () => void) & ((attrs: string[], cb: (attrName: string, value: string) => void) => () => void) & ((attrs: string[], cb: (attrName: string, value: string) => void) => () => void) & ((attrs: string[], cb: (attrName: string, value: string) => void) => () => void) & ((attrs: string[], cb: (attrName: string, value: string) => void) => () => void) & ((attrs: string[], cb: (attrName: string, value: string) => void) => () => void) & ((attrs: string[], cb: (attrName: string, value: string) => void) => () => void);
|
|
912
|
-
"__#
|
|
912
|
+
"__#27162@#isInit": boolean;
|
|
913
913
|
connectedCallback: (() => void) & (() => void) & (() => void) & (() => void) & (() => void) & (() => void) & (() => void) & (() => void) & (() => void) & (() => void) & (() => void) & (() => void) & (() => void) & (() => void) & (() => void) & (() => void) & (() => void);
|
|
914
914
|
accessKey: string;
|
|
915
915
|
readonly accessKeyLabel: string;
|
|
@@ -1236,24 +1236,24 @@ declare const BaseClass: {
|
|
|
1236
1236
|
tabIndex: number;
|
|
1237
1237
|
blur(): void;
|
|
1238
1238
|
focus(options?: FocusOptions): void;
|
|
1239
|
-
"__#
|
|
1240
|
-
"__#
|
|
1239
|
+
"__#27161@#logger": _descope_sdk_mixins_static_resources_mixin.Logger;
|
|
1240
|
+
"__#27161@#wrapLogger": ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger) & ((logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>) => _descope_sdk_mixins_static_resources_mixin.Logger);
|
|
1241
1241
|
get logger(): _descope_sdk_mixins_static_resources_mixin.Logger;
|
|
1242
1242
|
set logger(logger: Partial<_descope_sdk_mixins_static_resources_mixin.Logger>);
|
|
1243
1243
|
onLogEvent: ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void) & ((logLevel: "error" | "warn" | "info" | "debug", data: any[]) => void);
|
|
1244
1244
|
contentRootElement: HTMLElement;
|
|
1245
1245
|
rootElement: HTMLElement;
|
|
1246
1246
|
readonly config: Promise<_descope_sdk_mixins_static_resources_mixin.Config>;
|
|
1247
|
-
"__#
|
|
1248
|
-
"__#
|
|
1249
|
-
"__#
|
|
1250
|
-
"__#
|
|
1247
|
+
"__#27167@#configCacheClear": (() => void) & (() => void);
|
|
1248
|
+
"__#27167@#_configResource": Promise<_descope_sdk_mixins_static_resources_mixin.Config>;
|
|
1249
|
+
"__#27167@#fetchConfig": (() => Promise<_descope_sdk_mixins_static_resources_mixin.Config>) & (() => Promise<_descope_sdk_mixins_static_resources_mixin.Config>);
|
|
1250
|
+
"__#27166@#callbacks": Map<string, () => void> & Map<string, () => void>;
|
|
1251
1251
|
onReset: ((sectionId: string, callback: () => void | Promise<void>) => () => void) & ((sectionId: string, callback: () => void | Promise<void>) => () => void);
|
|
1252
1252
|
reset: ((...sectionIds: string[]) => Promise<void>) & ((...sectionIds: string[]) => Promise<void>);
|
|
1253
|
-
"__#
|
|
1254
|
-
"__#
|
|
1255
|
-
"__#
|
|
1256
|
-
"__#
|
|
1253
|
+
"__#27164@#handleError": ((attrName: string, newValue: string) => void) & ((attrName: string, newValue: string) => void) & ((attrName: string, newValue: string) => void) & ((attrName: string, newValue: string) => void) & ((attrName: string, newValue: string) => void) & ((attrName: string, newValue: string) => void);
|
|
1254
|
+
"__#27165@#lastBaseUrl"?: string;
|
|
1255
|
+
"__#27165@#workingBaseUrl"?: string;
|
|
1256
|
+
"__#27165@#getResourceUrls": ((filename: string) => (URL & {
|
|
1257
1257
|
baseUrl: string;
|
|
1258
1258
|
}) | (URL & {
|
|
1259
1259
|
baseUrl: string;
|
|
@@ -1279,18 +1279,18 @@ declare const BaseClass: {
|
|
|
1279
1279
|
readonly baseStaticUrl: string;
|
|
1280
1280
|
readonly baseUrl: string;
|
|
1281
1281
|
readonly projectId: string;
|
|
1282
|
-
"__#
|
|
1283
|
-
"__#
|
|
1284
|
-
"__#
|
|
1285
|
-
"__#
|
|
1286
|
-
"__#
|
|
1287
|
-
"__#
|
|
1288
|
-
"__#
|
|
1289
|
-
"__#
|
|
1282
|
+
"__#27170@#errorCbsSym": symbol;
|
|
1283
|
+
"__#27170@#loadCbsSym": symbol;
|
|
1284
|
+
"__#27170@#getComponentsVersion"(): Promise<string>;
|
|
1285
|
+
"__#27170@#exposeAlternateEvents"(scriptEle: HTMLScriptElement): void;
|
|
1286
|
+
"__#27170@#handleFallbackScript"(errorCbs: ((error: string) => void)[], loadCbs: (() => void)[], elemId: string, scriptUrl: string): Promise<void>;
|
|
1287
|
+
"__#27170@#registerEvents"(scriptEle: HTMLScriptElement): void;
|
|
1288
|
+
"__#27170@#getDescopeUiLoadingScript"(): Promise<HTMLElement>;
|
|
1289
|
+
"__#27170@#descopeUi": Promise<any>;
|
|
1290
1290
|
readonly descopeUi: Promise<any>;
|
|
1291
|
-
"__#
|
|
1291
|
+
"__#27170@#loadDescopeUiComponent"(componentName: string): Promise<any>;
|
|
1292
1292
|
loadDescopeUiComponents(templateOrComponentNames: string[] | HTMLTemplateElement): Promise<any[]>;
|
|
1293
|
-
"__#
|
|
1293
|
+
"__#27170@#getDescopeUi"(): Promise<unknown>;
|
|
1294
1294
|
readonly baseCdnUrl: string;
|
|
1295
1295
|
}) & {
|
|
1296
1296
|
new (): HTMLElement;
|
|
@@ -1376,6 +1376,7 @@ declare class DescopeWc extends BaseDescopeWc {
|
|
|
1376
1376
|
origin?: string;
|
|
1377
1377
|
} | undefined;
|
|
1378
1378
|
loadSdkScripts(scripts: ClientScript[]): Promise<unknown>;
|
|
1379
|
+
get isDismissScreenErrorOnInput(): boolean;
|
|
1379
1380
|
init(): Promise<void>;
|
|
1380
1381
|
_init(): Promise<void>;
|
|
1381
1382
|
disconnectedCallback(): void;
|