@incodetech/web 0.0.0-dev-20260608-c8c427ca → 0.0.0-dev-20260609-11ba3e8a

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.
Files changed (211) hide show
  1. package/dist/ae-signature/ae-signature.es.js +15 -13
  2. package/dist/aligndevicelottie-DY_bX_p8.js +12769 -0
  3. package/dist/antifraud/antifraud.es.js +22 -19
  4. package/dist/authentication/authentication.es.js +42 -33
  5. package/dist/autoFocusTitle-DM6PvgcP.js +29 -0
  6. package/dist/{back-horizontal-hint-DsPhKbR4.js → back-horizontal-hint-BXYix0Wj.js} +26 -26
  7. package/dist/back-tutorial-vb1MxlrT.js +14597 -0
  8. package/dist/{back-vertical-hint-BFJbYQrX.js → back-vertical-hint-DNSh6JNH.js} +27 -27
  9. package/dist/backdevicelottie-HypPqBz7.js +16690 -0
  10. package/dist/base.css +5 -0
  11. package/dist/blurdevicelottie-CBXtBFiJ.js +15951 -0
  12. package/dist/bottomSheet-BuzqNQtG.js +39 -0
  13. package/dist/browser-ponyfill-CLLvZCVg.js +441 -0
  14. package/dist/button-B-qlr4iI.js +35 -0
  15. package/dist/checkbox-CTPETqo5.js +96 -0
  16. package/dist/consent/consent.es.js +75 -64
  17. package/dist/countrySelector-CzyuaDIs.js +60 -0
  18. package/dist/cpf-ocr/cpf-ocr.es.js +2 -2
  19. package/dist/cpfOcr-DQVs3r8N.js +92 -0
  20. package/dist/cpfOcr-WNklFuxT.js +2 -0
  21. package/dist/cross-document-data-match/cross-document-data-match.es.js +20 -17
  22. package/dist/curp-validation/curp-validation.es.js +246 -211
  23. package/dist/customFields-B4MqqDI6.js +140 -0
  24. package/dist/customWatchlist-Dfqw1DQP.js +36 -0
  25. package/dist/dateInputComposed-BsPQHG5o.js +1 -0
  26. package/dist/dateInputComposed-DY97tQVK.js +69 -0
  27. package/dist/defineProperty-mefzVtTv.js +39 -0
  28. package/dist/document-capture/document-capture.es.js +2 -2
  29. package/dist/documentCapture-BE78MIlR.js +876 -0
  30. package/dist/documentCapture-BVfNZL29.js +2 -0
  31. package/dist/dropdownComposed-BF4L-7mJ.js +380 -0
  32. package/dist/dropdownComposed-mvHuRFHn.js +1 -0
  33. package/dist/dynamicForms-BYGGAQoc.js +352 -0
  34. package/dist/ekyb/ekyb.es.js +2 -2
  35. package/dist/ekybModule-BUPX0QhW.js +2 -0
  36. package/dist/ekybModule-CkTXu-4u.js +279 -0
  37. package/dist/ekyc/ekyc.es.js +2 -2
  38. package/dist/ekycModule-BWsVX39d.js +257 -0
  39. package/dist/ekycModule-DNDPqvUc.js +2 -0
  40. package/dist/electronic-signature/electronic-signature.es.js +2 -2
  41. package/dist/electronic-signature-BJSyzex9.js +426 -0
  42. package/dist/email/email.es.js +198 -78
  43. package/dist/emailInput-BHp4Apt4.js +39 -0
  44. package/dist/errorIcon-B0rmz3rw.js +26 -0
  45. package/dist/expiredId-C105HVKv.js +85 -0
  46. package/dist/extensibility-DJwVxojG.js +3070 -0
  47. package/dist/extensibility.es.js +26 -26
  48. package/dist/face-match/face-match.es.js +2 -2
  49. package/dist/faceMatch-BOFGxzzx.js +343 -0
  50. package/dist/faceMatch-CDMcFQwR.js +2 -0
  51. package/dist/field-comparison/field-comparison.es.js +2 -2
  52. package/dist/fieldComparison-BMDmQ8eA.js +88 -0
  53. package/dist/fieldComparison-Z1NleSxD.js +2 -0
  54. package/dist/{flip-animation-CuQ57qTn.js → flip-animation-BGRvygw9.js} +4221 -4221
  55. package/dist/flow/flow.es.js +597 -493
  56. package/dist/flow/styles.css +0 -8
  57. package/dist/{front-horizontal-hint-CKm7PnmS.js → front-horizontal-hint-CLSU0iVo.js} +70 -70
  58. package/dist/{front-vertical-hint-CLHC2qoH.js → front-vertical-hint-BWq-yWQ8.js} +81 -81
  59. package/dist/frontdevicelottie-CLqitJhG.js +17314 -0
  60. package/dist/geolocation/geolocation.es.js +485 -395
  61. package/dist/glaredevicelottie-BS04U6Fc.js +14478 -0
  62. package/dist/governmentValidation/governmentValidation.es.js +145 -64
  63. package/dist/governmentValidation/styles.css +0 -36
  64. package/dist/homeScreen-BsEYyiDB.js +264 -0
  65. package/dist/hooks-BtgmGvba.js +149 -0
  66. package/dist/i18n-gTHArCl9.js +2971 -0
  67. package/dist/icons-DKY3xDkf.js +360 -0
  68. package/dist/id/id.es.js +565 -413
  69. package/dist/id-laser-h-DX8UbVNH.js +467 -0
  70. package/dist/id-laser-v-DhnHdjlB.js +490 -0
  71. package/dist/id-tutorial-lj4iKtYT.js +13165 -0
  72. package/dist/id-verification/id-verification.es.js +21 -18
  73. package/dist/idOcr-BS77o1VC.js +123 -0
  74. package/dist/identity-reuse/identity-reuse.es.js +168 -130
  75. package/dist/incode-logo-57XFniXU.js +4 -0
  76. package/dist/incodeComponent-CDJxFZvS.js +63 -0
  77. package/dist/incodeModule-DkA_yd0X.js +13 -0
  78. package/dist/index.es.js +16 -14
  79. package/dist/inputComposed-5V2nLTqH.js +99 -0
  80. package/dist/inputComposed-BPOYwUBl.js +1 -0
  81. package/dist/loadingIcon-DN62ugKs.js +148 -0
  82. package/dist/lottie_light-Dp9Bz3mf.js +9031 -0
  83. package/dist/mandatoryConsent-DP189TUn.js +107 -0
  84. package/dist/modal-B5QeulDu.js +153 -0
  85. package/dist/modal.hooks-C7K9k_pY.js +202 -0
  86. package/dist/numberedStep-DVAyTPv1.js +13 -0
  87. package/dist/optionAccessibleLabel-Czc2YC8z.js +202 -0
  88. package/dist/otpInput-2IQ-JCK8.js +195 -0
  89. package/dist/page-BZ-0eNWq.js +71 -0
  90. package/dist/{passport-horizontal-hint-C_le0HVU.js → passport-horizontal-hint-DfVsf4Cc.js} +55 -55
  91. package/dist/{passport-tutorial-BYN4T_TE.js → passport-tutorial-zT1ZoA-D.js} +7096 -7084
  92. package/dist/{passport-vertical-hint-H-pyICSv.js → passport-vertical-hint-DVxbTyQp.js} +49 -49
  93. package/dist/pdf-BZA70WbM.js +22398 -0
  94. package/dist/pdfViewer-Dr63sJ51.js +114 -0
  95. package/dist/phone/phone.es.js +214 -87
  96. package/dist/phoneInputComposed-D_IabWKJ.js +12142 -0
  97. package/dist/processing-B_u8wUB7.js +8 -0
  98. package/dist/qe-signature/qe-signature.es.js +15 -13
  99. package/dist/radioGroupComposed-DwYW-Ld-.js +215 -0
  100. package/dist/redirect-to-mobile/redirect-to-mobile.es.js +2099 -859
  101. package/dist/registerIncodeElement-BJJGzVdq.js +11 -0
  102. package/dist/requiredLabelHint-DEadtiwx.js +17 -0
  103. package/dist/richText-C7GUm0WL.js +3153 -0
  104. package/dist/rolldown-runtime--E5BIlTp.js +33 -0
  105. package/dist/selfie/selfie.es.js +54 -42
  106. package/dist/selfieTutorial-CtruLyO2.js +2689 -0
  107. package/dist/signature/signature.es.js +765 -406
  108. package/dist/snackbar-Dz9crm39.js +16 -0
  109. package/dist/spinner-BfBIZkDQ.js +42 -0
  110. package/dist/spinner-DEDtE7Pz.js +1 -0
  111. package/dist/statusPage-CVCoieyd.js +28 -0
  112. package/dist/successIcon-rmzr-pxu.js +30 -0
  113. package/dist/tabs--UMd6eEB.js +103 -0
  114. package/dist/transitionSpinner-CWhGcr7c.js +26 -0
  115. package/dist/{tutorial-QzQ536BL.js → tutorial-Jv0noW4z.js} +832 -578
  116. package/dist/types/extensibility.d.ts +3 -1
  117. package/dist/types/index.d.ts +13 -4
  118. package/dist/typography-BK4AmfKX.js +45 -0
  119. package/dist/uiConfig-sgEkFuuA.js +25 -0
  120. package/dist/useModuleLoader-CuhHtmgr.js +670 -0
  121. package/dist/vendor-preact-BH7vOa2r.js +957 -0
  122. package/dist/verificationResult-CJ0JyV6A.js +64 -0
  123. package/dist/verifiedByIncode-8QBn-kgZ.js +103 -0
  124. package/dist/watchlist/watchlist.es.js +31 -26
  125. package/dist/watchlistForBusiness-RZcnjVDb.js +80 -0
  126. package/dist/workflow/styles.css +0 -8
  127. package/dist/workflow/workflow.es.js +251 -209
  128. package/package.json +4 -2
  129. package/dist/aligndevicelottie-D8KsO77t.js +0 -12757
  130. package/dist/autoFocusTitle-BpYdaSUM.js +0 -16
  131. package/dist/back-tutorial-DhSE2FJo.js +0 -14585
  132. package/dist/backdevicelottie-CJWGVMdw.js +0 -16678
  133. package/dist/blurdevicelottie-Dxt2deEB.js +0 -15939
  134. package/dist/bottomSheet-QrpyatOD.js +0 -31
  135. package/dist/browser-ponyfill-Crda_c5R.js +0 -299
  136. package/dist/button-DcCUEn2n.js +0 -24
  137. package/dist/checkbox-DCCzBAuF.js +0 -86
  138. package/dist/countrySelector-CJ8egQ4C.js +0 -58
  139. package/dist/cpfOcr-Db06i-Lm.js +0 -2
  140. package/dist/cpfOcr-FixhUeMQ.js +0 -79
  141. package/dist/customFields-C1G9xHNX.js +0 -125
  142. package/dist/customWatchlist-IKEblz7u.js +0 -31
  143. package/dist/dateInputComposed-Cg8BvYSK.js +0 -1
  144. package/dist/dateInputComposed-Ddd7HLyM.js +0 -58
  145. package/dist/defineProperty-xczUyn-m.js +0 -39
  146. package/dist/documentCapture-D9I7FjGe.js +0 -2
  147. package/dist/documentCapture-b61wlala.js +0 -765
  148. package/dist/dropdownComposed-B4U0AIak.js +0 -1
  149. package/dist/dropdownComposed-CS2pyn-g.js +0 -293
  150. package/dist/dynamicForms-tYQog0kw.js +0 -298
  151. package/dist/ekybModule-C33C4JES.js +0 -237
  152. package/dist/ekybModule-LON6G2Bz.js +0 -2
  153. package/dist/ekycModule-BJOgtTAh.js +0 -225
  154. package/dist/ekycModule-BSf_DIG7.js +0 -2
  155. package/dist/electronic-signature-OdgTyso4.js +0 -406
  156. package/dist/emailInput-CU7mLB21.js +0 -37
  157. package/dist/errorIcon-DpHzAoAo.js +0 -24
  158. package/dist/expiredId-nfVAZgTL.js +0 -70
  159. package/dist/extensibility-BbNy3mVG.js +0 -2602
  160. package/dist/faceMatch-BIila4kf.js +0 -2
  161. package/dist/faceMatch-DJ7Mqujx.js +0 -206
  162. package/dist/fieldComparison-D2RSFYl-.js +0 -84
  163. package/dist/fieldComparison-DbUyouFd.js +0 -2
  164. package/dist/frontdevicelottie-65Vyfpff.js +0 -17302
  165. package/dist/glaredevicelottie-BEyaqtc6.js +0 -14466
  166. package/dist/homeScreen-CyPddxWl.js +0 -227
  167. package/dist/hooks-MxHtZWTS.js +0 -112
  168. package/dist/i18n-Kzzvkz94.js +0 -2019
  169. package/dist/icons-9I5g9-_1.js +0 -292
  170. package/dist/id-laser-h-iCPbFixz.js +0 -467
  171. package/dist/id-laser-v-CNzwliP2.js +0 -483
  172. package/dist/id-tutorial-CF4nO4oX.js +0 -13153
  173. package/dist/idOcr-DlMLMDqa.js +0 -97
  174. package/dist/incode-logo-DX016usY.js +0 -4
  175. package/dist/incodeComponent-BoFhgK7G.js +0 -50
  176. package/dist/incodeModule-BiCoAJ5k.js +0 -13
  177. package/dist/inputComposed-DAEey9xm.js +0 -94
  178. package/dist/inputComposed-eS4B0Mkh.js +0 -1
  179. package/dist/loadingIcon-BN5YRQUb.js +0 -104
  180. package/dist/lottie_light-DLqSnziX.js +0 -4419
  181. package/dist/mandatoryConsent-DNz2jZ43.js +0 -98
  182. package/dist/modal-ZqAhwiRF.js +0 -135
  183. package/dist/modal.hooks-LdusROLW.js +0 -126
  184. package/dist/numberedStep-CdLWASwL.js +0 -11
  185. package/dist/optionAccessibleLabel-DcygPaME.js +0 -140
  186. package/dist/otpInput-C4pk4BJU.js +0 -157
  187. package/dist/page-DA3R7q0J.js +0 -69
  188. package/dist/pdf-51QeiFSx.js +0 -14967
  189. package/dist/pdfViewer-rKzTHket.js +0 -64
  190. package/dist/phoneInputComposed-CjAxk2Gj.js +0 -11230
  191. package/dist/processing-DPktVde2.js +0 -6
  192. package/dist/radioGroupComposed-DRRxVk9Z.js +0 -178
  193. package/dist/registerIncodeElement-BHWOwdSS.js +0 -7
  194. package/dist/requiredLabelHint-B6FN3v88.js +0 -13
  195. package/dist/richText-6pIbydcz.js +0 -1973
  196. package/dist/rolldown-runtime-CYMK-g2i.js +0 -20
  197. package/dist/selfieTutorial-Yo9AlUoT.js +0 -2677
  198. package/dist/snackbar-CQiiWO4p.js +0 -14
  199. package/dist/spinner-B4dcie2T.js +0 -1
  200. package/dist/spinner-CKnjVHxw.js +0 -39
  201. package/dist/statusPage-B8b3Jg6N.js +0 -28
  202. package/dist/successIcon-SlKgTSty.js +0 -28
  203. package/dist/tabs-D7lGst3Q.js +0 -78
  204. package/dist/transitionSpinner-Di3bOyOu.js +0 -17
  205. package/dist/typography-CxjaknHN.js +0 -28
  206. package/dist/uiConfig-CwpQ-IM6.js +0 -20
  207. package/dist/useModuleLoader-Bqs7fglI.js +0 -517
  208. package/dist/vendor-preact-D6SntenC.js +0 -958
  209. package/dist/verificationResult-DhT3hH1b.js +0 -90
  210. package/dist/verifiedByIncode-DpbxzO0y.js +0 -101
  211. package/dist/watchlistForBusiness-CRXVbH4l.js +0 -75
@@ -1,288 +1,330 @@
1
- import { n as e, o as t } from "../i18n-Kzzvkz94.js";
2
- import { _ as n, c as r, l as i, o as a, p as o, v as s } from "../vendor-preact-D6SntenC.js";
3
- import { t as c } from "../uiConfig-CwpQ-IM6.js";
4
- import { c as l } from "../hooks-MxHtZWTS.js";
5
- import { t as u } from "../incodeComponent-BoFhgK7G.js";
6
- import { t as d } from "../transitionSpinner-Di3bOyOu.js";
7
- import { t as f } from "../incodeModule-BiCoAJ5k.js";
8
- import { a as p, g as m, i as h, l as g, o as _, s as v, t as y, v as b, y as x } from "../useModuleLoader-Bqs7fglI.js";
9
- import { resolveWasmConfig as S, upgradeToWasmHttpClient as C, warmupWasm as w } from "@incodetech/core/wasm";
10
- import { getDeviceClass as T } from "@incodetech/core/device";
11
- import { bootstrapSession as E, refreshQrUrlUuid as D } from "@incodetech/core/session";
12
- import { createWorkflowManager as O } from "@incodetech/core/workflow";
1
+ import { n as useTranslation, o as readStoredLanguage } from "../i18n-gTHArCl9.js";
2
+ import { _ as y, c as z, l as A, o as P, p as d, v as u } from "../vendor-preact-BH7vOa2r.js";
3
+ import { t as setUiConfig } from "../uiConfig-sgEkFuuA.js";
4
+ import { c as useManager } from "../hooks-BtgmGvba.js";
5
+ import { t as IncodeComponent } from "../incodeComponent-CDJxFZvS.js";
6
+ import { t as TransitionSpinner } from "../transitionSpinner-CWhGcr7c.js";
7
+ import { t as registerIncodeModuleElement } from "../incodeModule-DkA_yd0X.js";
8
+ import { a as resolveApiKey, g as setupSDK, i as HEADLESS_WORKFLOW_MODULE_KEYS, l as LAZY_UI_MODULES, o as extractIncodeStatus, s as UnsupportedModule, t as useModuleLoader, v as fetchAndApplyTheme, y as TerminalErrorPage } from "../useModuleLoader-CuhHtmgr.js";
9
+ import { resolveWasmConfig, upgradeToWasmHttpClient, warmupWasm } from "@incodetech/core/wasm";
10
+ import { getDeviceClass } from "@incodetech/core/device";
11
+ import { bootstrapSession, refreshQrUrlUuid } from "@incodetech/core/session";
12
+ import { createWorkflowManager } from "@incodetech/core/workflow";
13
13
  //#region src/modules/workflow/workflowInit.ts
14
- var k = {
15
- ...g,
16
- REDIRECT_TO_MOBILE: () => import("../redirect-to-mobile/redirect-to-mobile.es.js").then((e) => e.RedirectToMobile),
17
- ID: () => import("../id-verification/id-verification.es.js").then((e) => e.IdVerification),
18
- IDENTITY_REUSE: () => import("../identity-reuse/identity-reuse.es.js").then((e) => e.IdentityReuse)
14
+ var LAZY_WORKFLOW_MODULES = {
15
+ ...LAZY_UI_MODULES,
16
+ REDIRECT_TO_MOBILE: () => import("../redirect-to-mobile/redirect-to-mobile.es.js").then((m) => m.RedirectToMobile),
17
+ ID: () => import("../id-verification/id-verification.es.js").then((m) => m.IdVerification),
18
+ IDENTITY_REUSE: () => import("../identity-reuse/identity-reuse.es.js").then((m) => m.IdentityReuse)
19
19
  };
20
- async function A() {
20
+ async function fetchWorkflowTheme() {
21
21
  try {
22
- let e = await b();
22
+ const theme = await fetchAndApplyTheme();
23
23
  return {
24
- theme: e,
24
+ theme,
25
25
  uiConfig: {
26
- logoSrc: e.logo,
27
- hideFooterBranding: e.hideFooterBranding
26
+ logoSrc: theme.logo,
27
+ hideFooterBranding: theme.hideFooterBranding
28
28
  }
29
29
  };
30
30
  } catch {
31
31
  return {};
32
32
  }
33
33
  }
34
- function j(e = {}) {
35
- return O({
36
- customModuleCallback: e.customModuleCallback,
37
- interviewId: e.interviewId,
38
- isDesktop: e.isDesktop ?? T() === "desktop"
34
+ function createWorkflowUIManager(options = {}) {
35
+ return createWorkflowManager({
36
+ customModuleCallback: options.customModuleCallback,
37
+ interviewId: options.interviewId,
38
+ isDesktop: options.isDesktop ?? getDeviceClass() === "desktop"
39
39
  });
40
40
  }
41
- function M(e) {
42
- if (e === !1) return;
43
- let t = S({
44
- ...e,
45
- pipelines: e?.pipelines ?? ["selfie", "idCapture"]
46
- }), n = {
47
- ...t,
48
- pipelines: t.pipelines ? [...t.pipelines] : void 0
41
+ function warmupWorkflowWasm(wasmConfig) {
42
+ if (wasmConfig === false) return;
43
+ const resolved = resolveWasmConfig({
44
+ ...wasmConfig,
45
+ pipelines: wasmConfig?.pipelines ?? ["selfie", "idCapture"]
46
+ });
47
+ const upgradeConfig = {
48
+ ...resolved,
49
+ pipelines: resolved.pipelines ? [...resolved.pipelines] : void 0
49
50
  };
50
- w(t).then(() => C(n)).catch((e) => {
51
- console.error("Workflow WASM warmup failed:", e);
51
+ warmupWasm(resolved).then(() => upgradeToWasmHttpClient(upgradeConfig)).catch((error) => {
52
+ console.error("Workflow WASM warmup failed:", error);
52
53
  });
53
54
  }
54
55
  //#endregion
55
56
  //#region src/modules/workflow/createWorkflowSession.ts
56
- async function N(e, t) {
57
- return E(await p(e), {
58
- configurationId: e.configurationId,
59
- externalId: e.externalId,
60
- externalCustomerId: e.externalCustomerId,
61
- language: e.lang,
62
- customFields: e.customFields,
63
- uuid: e.uuid,
64
- urlUuid: e.urlUuid,
65
- loginHint: e.loginHint,
66
- onUrlUuidRefreshed: e.onUrlUuidRefreshed
67
- }, t);
57
+ async function createWorkflowSession(config, signal) {
58
+ return bootstrapSession(await resolveApiKey(config), {
59
+ configurationId: config.configurationId,
60
+ externalId: config.externalId,
61
+ externalCustomerId: config.externalCustomerId,
62
+ language: config.lang,
63
+ customFields: config.customFields,
64
+ uuid: config.uuid,
65
+ urlUuid: config.urlUuid,
66
+ loginHint: config.loginHint,
67
+ onUrlUuidRefreshed: config.onUrlUuidRefreshed
68
+ }, signal);
68
69
  }
69
70
  //#endregion
70
71
  //#region src/modules/workflow/workflowConfig.ts
71
- function P(e) {
72
- return typeof e.token == "string";
72
+ function hasWorkflowToken(config) {
73
+ return typeof config.token === "string";
73
74
  }
74
- function F(e) {
75
- let t = e;
76
- return typeof t.configurationId == "string" && (typeof t.apiKey == "string" || typeof t.clientId == "string");
75
+ function isSelfLoadingWorkflowConfig(config) {
76
+ const bootstrapConfig = config;
77
+ return typeof bootstrapConfig.configurationId === "string" && (typeof bootstrapConfig.apiKey === "string" || typeof bootstrapConfig.clientId === "string");
77
78
  }
78
79
  //#endregion
79
80
  //#region src/modules/workflow/useWorkflowInitialization.ts
80
- function I(e) {
81
- let { onError: t, onUrlUuidRefreshed: r } = e, [a, s] = o({ status: "initializing" }), l = i(null);
82
- return n(() => {
83
- if (a.status !== "initializing") return;
84
- let n = new AbortController(), { signal: i } = n;
85
- return (async () => {
81
+ function useWorkflowInitialization(options) {
82
+ const { onError, onUrlUuidRefreshed } = options;
83
+ const [state, setState] = d({ status: "initializing" });
84
+ const managerRef = A(null);
85
+ y(() => {
86
+ if (state.status !== "initializing") return;
87
+ const abortController = new AbortController();
88
+ const { signal } = abortController;
89
+ const initialize = async () => {
86
90
  try {
87
- let t, n;
88
- if (P(e)) t = e.token, n = e.interviewId, e.urlUuid && await D({
89
- urlUuid: e.urlUuid,
90
- onboardingId: null,
91
- onRefreshed: r
92
- }, i);
93
- else if (F(e)) {
94
- let r = await N(e, i);
95
- t = r.token, n = r.interviewId;
96
- } else throw Error("Workflow requires token, or configurationId with apiKey or clientId");
97
- if (i.aborted || (await m({
98
- token: t,
99
- lang: e.lang
100
- }), i.aborted)) return;
101
- let a = e.disableDashboardTheme ? Promise.resolve() : A().then((e) => {
102
- e.uiConfig && c(e.uiConfig);
91
+ let resolvedToken;
92
+ let resolvedInterviewId;
93
+ if (hasWorkflowToken(options)) {
94
+ resolvedToken = options.token;
95
+ resolvedInterviewId = options.interviewId;
96
+ if (options.urlUuid) await refreshQrUrlUuid({
97
+ urlUuid: options.urlUuid,
98
+ onboardingId: null,
99
+ onRefreshed: onUrlUuidRefreshed
100
+ }, signal);
101
+ } else if (isSelfLoadingWorkflowConfig(options)) {
102
+ const session = await createWorkflowSession(options, signal);
103
+ resolvedToken = session.token;
104
+ resolvedInterviewId = session.interviewId;
105
+ } else throw new Error("Workflow requires token, or configurationId with apiKey or clientId");
106
+ if (signal.aborted) return;
107
+ await setupSDK({
108
+ token: resolvedToken,
109
+ lang: options.lang
110
+ });
111
+ if (signal.aborted) return;
112
+ const themePromise = options.disableDashboardTheme ? Promise.resolve() : fetchWorkflowTheme().then((result) => {
113
+ if (result.uiConfig) setUiConfig(result.uiConfig);
114
+ });
115
+ warmupWorkflowWasm(options.wasmConfig);
116
+ if (signal.aborted) return;
117
+ managerRef.current = createWorkflowUIManager({
118
+ customModuleCallback: options.customModuleCallback,
119
+ interviewId: resolvedInterviewId,
120
+ isDesktop: options.isDesktop
103
121
  });
104
- if (M(e.wasmConfig), i.aborted || (l.current = j({
105
- customModuleCallback: e.customModuleCallback,
106
- interviewId: n,
107
- isDesktop: e.isDesktop
108
- }), l.current.load(), await a, i.aborted)) return;
109
- s({
122
+ managerRef.current.load();
123
+ await themePromise;
124
+ if (signal.aborted) return;
125
+ setState({
110
126
  status: "ready",
111
- workflowManager: l.current
127
+ workflowManager: managerRef.current
112
128
  });
113
- } catch (e) {
114
- if (i.aborted) return;
115
- let n = e instanceof Error ? e.message : "Failed to initialize SDK", r = _(e);
116
- s({
129
+ } catch (error) {
130
+ if (signal.aborted) return;
131
+ const errorMessage = error instanceof Error ? error.message : "Failed to initialize SDK";
132
+ const errorCode = extractIncodeStatus(error);
133
+ setState({
117
134
  status: "error",
118
- error: n,
119
- errorCode: r
120
- }), t?.(n, r);
135
+ error: errorMessage,
136
+ errorCode
137
+ });
138
+ onError?.(errorMessage, errorCode);
121
139
  }
122
- })(), () => {
123
- n.abort(), l.current?.stop(), l.current = null;
124
140
  };
125
- }, []), a;
141
+ initialize();
142
+ return () => {
143
+ abortController.abort();
144
+ managerRef.current?.stop();
145
+ managerRef.current = null;
146
+ };
147
+ }, []);
148
+ return state;
126
149
  }
127
150
  //#endregion
128
151
  //#region src/modules/workflow/workflow.tsx
129
- var L = r(() => import("../homeScreen-CyPddxWl.js").then((e) => ({ default: e.HomeScreen })));
130
- function R(e) {
131
- let { moduleKey: t, config: n, workflowId: r, authHint: i, lang: a, mergeSessionRecordings: o, ageAssurance: s } = e;
132
- switch (t) {
152
+ var LazyHomeScreen = z(() => import("../homeScreen-BsEYyiDB.js").then((module) => ({ default: module.HomeScreen })));
153
+ function mapModuleConfig(options) {
154
+ const { moduleKey, config, workflowId, authHint, lang, mergeSessionRecordings, ageAssurance } = options;
155
+ switch (moduleKey) {
133
156
  case "AUTHENTICATION": return {
134
- ...n,
135
- authHint: i
157
+ ...config,
158
+ authHint
136
159
  };
137
160
  case "REDIRECT_TO_MOBILE": return {
138
- ...n,
139
- flowId: r,
140
- authHint: i,
141
- lang: a
161
+ ...config,
162
+ flowId: workflowId,
163
+ authHint,
164
+ lang
142
165
  };
143
166
  case "ID_CAPTURE":
144
167
  case "TUTORIAL_ID": return {
145
- ...n,
146
- mergeSessionRecordings: n.mergeSessionRecordings ?? o,
147
- ageAssurance: n.ageAssurance ?? s,
148
- skipProcessId: !0
168
+ ...config,
169
+ mergeSessionRecordings: config.mergeSessionRecordings ?? mergeSessionRecordings,
170
+ ageAssurance: config.ageAssurance ?? ageAssurance,
171
+ skipProcessId: true
149
172
  };
150
- case "ID": return n;
173
+ case "ID": return config;
151
174
  case "SELFIE": return {
152
- ...n,
153
- ageAssurance: n.ageAssurance ?? s
175
+ ...config,
176
+ ageAssurance: config.ageAssurance ?? ageAssurance
154
177
  };
155
178
  case "ADDRESS": return {
156
- ...n,
179
+ ...config,
157
180
  processingType: "addressStatement"
158
181
  };
159
182
  case "SECOND_ID": return {
160
- ...n,
161
- isSecondId: !0
183
+ ...config,
184
+ isSecondId: true
162
185
  };
163
186
  case "MANDATORY_CONSENT": return {
164
- ...n,
187
+ ...config,
165
188
  type: "MANDATORY"
166
189
  };
167
- default: return n;
190
+ default: return config;
168
191
  }
169
192
  }
170
- var z = ({ config: e, workflowManager: t, onFinish: r, onError: o }) => {
171
- let [c, u] = l(() => t, {
172
- autoLoad: !1,
173
- manageLifecycle: !1
174
- }), f = y({
175
- moduleKey: c?.status === "ready" ? c.currentNode.moduleKey : void 0,
176
- modules: k,
177
- headlessModuleKeys: h,
178
- onModuleLoading: e.onModuleLoading,
179
- onModuleLoaded: e.onModuleLoaded,
180
- onError: o
181
- }), p = i(!1);
182
- n(() => {
183
- if (!p.current) {
184
- if (c?.status === "finished") {
185
- p.current = !0;
186
- let e = c.finishStatus;
187
- queueMicrotask(() => r?.(e));
188
- return;
189
- }
190
- if (c?.status === "asyncResolution") {
191
- p.current = !0, queueMicrotask(() => r?.());
192
- return;
193
- }
194
- if (c?.status === "error" && o) {
195
- p.current = !0;
196
- let { error: e, errorCode: t } = c;
197
- queueMicrotask(() => o(e, t));
198
- }
193
+ /**
194
+ * Inner component mounted only after `useWorkflowInitialization` has resolved
195
+ * the session and constructed the manager. Splitting this out keeps the
196
+ * `useManager` factory call out of the init path — token-mode and
197
+ * self-loading mode both arrive here with a fully-constructed manager.
198
+ */
199
+ var IncodeWorkflowReady = ({ config, workflowManager: initialManager, onFinish, onError }) => {
200
+ const [workflowState, workflowManager] = useManager(() => initialManager, {
201
+ autoLoad: false,
202
+ manageLifecycle: false
203
+ });
204
+ const moduleLoaderState = useModuleLoader({
205
+ moduleKey: workflowState?.status === "ready" ? workflowState.currentNode.moduleKey : void 0,
206
+ modules: LAZY_WORKFLOW_MODULES,
207
+ headlessModuleKeys: HEADLESS_WORKFLOW_MODULE_KEYS,
208
+ onModuleLoading: config.onModuleLoading,
209
+ onModuleLoaded: config.onModuleLoaded,
210
+ onError
211
+ });
212
+ const terminalFiredRef = A(false);
213
+ y(() => {
214
+ if (terminalFiredRef.current) return;
215
+ if (workflowState?.status === "finished") {
216
+ terminalFiredRef.current = true;
217
+ const finishStatus = workflowState.finishStatus;
218
+ queueMicrotask(() => onFinish?.(finishStatus));
219
+ return;
220
+ }
221
+ if (workflowState?.status === "asyncResolution") {
222
+ terminalFiredRef.current = true;
223
+ queueMicrotask(() => onFinish?.());
224
+ return;
225
+ }
226
+ if (workflowState?.status === "error" && onError) {
227
+ terminalFiredRef.current = true;
228
+ const { error, errorCode } = workflowState;
229
+ queueMicrotask(() => onError(error, errorCode));
199
230
  }
200
231
  }, [
201
- c?.status,
202
- r,
203
- o,
204
- c
232
+ workflowState?.status,
233
+ onFinish,
234
+ onError,
235
+ workflowState
205
236
  ]);
206
- let m = !(e.spinnerConfig?.title || e.spinnerConfig?.subtitle), g = () => /* @__PURE__ */ s("div", {
237
+ const hideSpinnerText = !(config.spinnerConfig?.title || config.spinnerConfig?.subtitle);
238
+ const renderSpinner = () => /* @__PURE__ */ u("div", {
207
239
  class: "IncodeWorkflow",
208
- children: /* @__PURE__ */ s(d, {
209
- spinnerConfig: e.spinnerConfig,
210
- hideText: m
240
+ children: /* @__PURE__ */ u(TransitionSpinner, {
241
+ spinnerConfig: config.spinnerConfig,
242
+ hideText: hideSpinnerText
211
243
  })
212
- }), _ = (e, t, n) => {
213
- u.errorModule(e ?? "Module error", n);
244
+ });
245
+ const handleModuleError = (error, _errorCode, moduleErrorCode) => {
246
+ workflowManager.errorModule(error ?? "Module error", moduleErrorCode);
214
247
  };
215
- if (c && "homeScreen" in c && c.homeScreen.visible) return /* @__PURE__ */ s("div", {
248
+ if (workflowState && "homeScreen" in workflowState && workflowState.homeScreen.visible) return /* @__PURE__ */ u("div", {
216
249
  class: "IncodeWorkflow",
217
- children: /* @__PURE__ */ s(a, {
250
+ children: /* @__PURE__ */ u(P, {
218
251
  fallback: null,
219
- children: /* @__PURE__ */ s(L, {
220
- isContinueLoading: c.homeScreen.isContinueLoading,
221
- onContinue: () => u.continueFromHome()
252
+ children: /* @__PURE__ */ u(LazyHomeScreen, {
253
+ isContinueLoading: workflowState.homeScreen.isContinueLoading,
254
+ onContinue: () => workflowManager.continueFromHome()
222
255
  })
223
256
  })
224
257
  });
225
- if (!c || c.status === "idle" || c.status === "loading") return g();
226
- if (c.status === "error") return /* @__PURE__ */ s("div", {
258
+ if (!workflowState || workflowState.status === "idle" || workflowState.status === "loading") return renderSpinner();
259
+ if (workflowState.status === "error") return /* @__PURE__ */ u("div", {
227
260
  class: "IncodeWorkflow",
228
- children: /* @__PURE__ */ s(x, { message: c.error })
261
+ children: /* @__PURE__ */ u(TerminalErrorPage, { message: workflowState.error })
229
262
  });
230
- if (c.status === "finished" || c.status === "asyncResolution" || c.status === "closed") return null;
231
- if (f.status === "unsupported") return /* @__PURE__ */ s("div", {
263
+ if (workflowState.status === "finished" || workflowState.status === "asyncResolution" || workflowState.status === "closed") return null;
264
+ if (moduleLoaderState.status === "unsupported") return /* @__PURE__ */ u("div", {
232
265
  class: "IncodeWorkflow",
233
- children: /* @__PURE__ */ s(v, {
234
- moduleKey: c.currentNode.moduleKey,
235
- onNext: () => u.completeModule()
266
+ children: /* @__PURE__ */ u(UnsupportedModule, {
267
+ moduleKey: workflowState.currentNode.moduleKey,
268
+ onNext: () => workflowManager.completeModule()
236
269
  })
237
270
  });
238
- if (f.status === "idle" || f.status === "loading" || f.status === "error") return g();
239
- let { Component: b } = f, S = R({
240
- moduleKey: c.currentNode.moduleKey,
241
- config: c.config,
242
- workflowId: c.workflowConfig.id,
243
- authHint: e.authHint,
244
- lang: e.lang,
245
- mergeSessionRecordings: c.workflowConfig.mergeSessionRecordings,
246
- ageAssurance: c.workflowConfig.ageAssurance
247
- }), C = {};
248
- return c.currentNode.moduleKey === "REDIRECT_TO_MOBILE" && (C = { onContinue: () => u.completeModule() }), /* @__PURE__ */ s("div", {
271
+ if (moduleLoaderState.status === "idle" || moduleLoaderState.status === "loading" || moduleLoaderState.status === "error") return renderSpinner();
272
+ const { Component } = moduleLoaderState;
273
+ const moduleConfig = mapModuleConfig({
274
+ moduleKey: workflowState.currentNode.moduleKey,
275
+ config: workflowState.config,
276
+ workflowId: workflowState.workflowConfig.id,
277
+ authHint: config.authHint,
278
+ lang: config.lang,
279
+ mergeSessionRecordings: workflowState.workflowConfig.mergeSessionRecordings,
280
+ ageAssurance: workflowState.workflowConfig.ageAssurance
281
+ });
282
+ let extraProps = {};
283
+ if (workflowState.currentNode.moduleKey === "REDIRECT_TO_MOBILE") extraProps = { onContinue: () => workflowManager.completeModule() };
284
+ return /* @__PURE__ */ u("div", {
249
285
  class: "IncodeWorkflow",
250
- children: /* @__PURE__ */ s(b, {
251
- config: S,
252
- onFinish: () => u.completeModule(),
253
- onError: _,
254
- ...C
255
- }, c.currentNode.id)
286
+ children: /* @__PURE__ */ u(Component, {
287
+ config: moduleConfig,
288
+ onFinish: () => workflowManager.completeModule(),
289
+ onError: handleModuleError,
290
+ ...extraProps
291
+ }, workflowState.currentNode.id)
256
292
  });
257
- }, B = ({ config: r, onFinish: i, onError: a }) => {
258
- let { i18n: o } = e(), c = I({
259
- ...r,
260
- onError: a
293
+ };
294
+ var IncodeWorkflowContent = ({ config, onFinish, onError }) => {
295
+ const { i18n } = useTranslation();
296
+ const initState = useWorkflowInitialization({
297
+ ...config,
298
+ onError
261
299
  });
262
- n(() => {
263
- t() || r.lang && o.language !== r.lang && o.changeLanguage(r.lang);
264
- }, [r.lang, o]);
265
- let l = !(r.spinnerConfig?.title || r.spinnerConfig?.subtitle);
266
- return c.status === "error" ? /* @__PURE__ */ s("div", {
300
+ y(() => {
301
+ if (readStoredLanguage()) return;
302
+ if (config.lang && i18n.language !== config.lang) i18n.changeLanguage(config.lang);
303
+ }, [config.lang, i18n]);
304
+ const hideSpinnerText = !(config.spinnerConfig?.title || config.spinnerConfig?.subtitle);
305
+ if (initState.status === "error") return /* @__PURE__ */ u("div", {
267
306
  class: "IncodeWorkflow",
268
- children: /* @__PURE__ */ s(x, { message: c.error })
269
- }) : c.status === "initializing" ? /* @__PURE__ */ s("div", {
307
+ children: /* @__PURE__ */ u(TerminalErrorPage, { message: initState.error })
308
+ });
309
+ if (initState.status === "initializing") return /* @__PURE__ */ u("div", {
270
310
  class: "IncodeWorkflow",
271
- children: /* @__PURE__ */ s(d, {
272
- spinnerConfig: r.spinnerConfig,
273
- hideText: l
311
+ children: /* @__PURE__ */ u(TransitionSpinner, {
312
+ spinnerConfig: config.spinnerConfig,
313
+ hideText: hideSpinnerText
274
314
  })
275
- }) : /* @__PURE__ */ s(z, {
276
- config: r,
277
- workflowManager: c.workflowManager,
278
- onFinish: i,
279
- onError: a
280
315
  });
281
- }, V = ({ config: e, onFinish: t, onError: n }) => /* @__PURE__ */ s(u, { children: e ? /* @__PURE__ */ s(B, {
282
- config: e,
283
- onFinish: t,
284
- onError: n
316
+ return /* @__PURE__ */ u(IncodeWorkflowReady, {
317
+ config,
318
+ workflowManager: initState.workflowManager,
319
+ onFinish,
320
+ onError
321
+ });
322
+ };
323
+ var IncodeWorkflow = ({ config, onFinish, onError }) => /* @__PURE__ */ u(IncodeComponent, { children: config ? /* @__PURE__ */ u(IncodeWorkflowContent, {
324
+ config,
325
+ onFinish,
326
+ onError
285
327
  }) : null });
286
- f(V, "incode-workflow");
328
+ registerIncodeModuleElement(IncodeWorkflow, "incode-workflow");
287
329
  //#endregion
288
- export { V as IncodeWorkflow, R as mapModuleConfig };
330
+ export { IncodeWorkflow, mapModuleConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@incodetech/web",
3
- "version": "0.0.0-dev-20260608-c8c427ca",
3
+ "version": "0.0.0-dev-20260609-11ba3e8a",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/IncodeTechnologies/incode-web-sdk.git"
@@ -255,7 +255,7 @@
255
255
  "qrcode": "^1.5.4",
256
256
  "signature_pad": "^5.1.3",
257
257
  "tailwindcss": "^4.1.17",
258
- "@incodetech/core": "0.0.0-dev-20260608-c8c427ca"
258
+ "@incodetech/core": "0.0.0-dev-20260609-11ba3e8a"
259
259
  },
260
260
  "devDependencies": {
261
261
  "@microsoft/api-extractor": "^7.53.3",
@@ -282,6 +282,7 @@
282
282
  "rollup-plugin-visualizer": "^7.0.1",
283
283
  "storybook": "^10.4.1",
284
284
  "stylelint": "^17.5.0",
285
+ "terser": "^5.48.0",
285
286
  "typescript": "^5.9.3",
286
287
  "vite": "^8.0.0",
287
288
  "vite-plugin-dts": "^4.5.4",
@@ -291,6 +292,7 @@
291
292
  },
292
293
  "scripts": {
293
294
  "build": "rm -rf dist && vite build",
295
+ "build:cdn": "rm -rf dist && NODE_OPTIONS=--experimental-strip-types BUILD_TARGET=cdn vite build",
294
296
  "build:dev": "NODE_ENV=development vite build",
295
297
  "build:analyze": "rm -rf dist && ANALYZE=1 vite build && echo '\\nBundle report: packages/ui/dist/stats.html\\n'",
296
298
  "test": "vitest run",