@incodetech/core 2.4.0 → 2.4.1-agentic.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.
Files changed (252) hide show
  1. package/dist/BrowserNetworkStatusProvider-BrDXBEDd.esm.js +21 -0
  2. package/dist/{multipartRecordingService-CLwrF5wD.esm.js → CameraCompositor-DN7NkJzV.esm.js} +7 -744
  3. package/dist/{FaceDetectionProvider-DcPOC2gS.esm.js → FaceDetectionProvider-CAY43vSI.esm.js} +28 -64
  4. package/dist/IBrowserEnvironmentCapability-D7JG7ML3.esm.js +16 -0
  5. package/dist/IGeolocationCapability-r49Qo7rR.d.ts +10 -0
  6. package/dist/{IWasmUtilCapability-GF2n7sfm.d.ts → IWasmUtilCapability-Cqiaxydi.d.ts} +31 -4
  7. package/dist/MultipartRecordingProvider-D9mauUdS.esm.js +146 -0
  8. package/dist/{PhoneValidationProvider-SZiOS0jB.esm.js → PhoneValidationProvider-Co4zk2en.esm.js} +7 -0
  9. package/dist/{StreamCanvasCapture-7JRf-2ck.d.ts → StreamCanvasCapture-C3xNfOsv.d.ts} +12 -3
  10. package/dist/StreamCanvasProcessingSession-CBnbTnOr.esm.js +42 -0
  11. package/dist/{WasmUtilProvider-DtJuBdt-.esm.js → WasmUtilProvider-Dp2V-Uct.esm.js} +75 -22
  12. package/dist/WorkerEncoderRecordingProvider-B1ODYtgN.esm.js +80 -0
  13. package/dist/addressSearch-DzbE9Ogt.esm.js +254 -0
  14. package/dist/{advanceableErrors-q_pfU3Cn.esm.js → advanceableErrors-k-U-cL5m.esm.js} +1 -2
  15. package/dist/ae-signature.esm.js +1 -1
  16. package/dist/antifraud.esm.js +2 -2
  17. package/dist/{antifraudManager-CaweCYnY.esm.js → antifraudManager-BObuHBjn.esm.js} +2 -2
  18. package/dist/{antifraudStateMachine-DRl0UVyA.esm.js → antifraudStateMachine-Dfrd2-26.esm.js} +1 -1
  19. package/dist/{api-Cz90EHyu.esm.js → api-CpP4PS4S.esm.js} +8 -5
  20. package/dist/{apiError-DPwFas2f.esm.js → apiError-DH-CH4Nz.esm.js} +1 -1
  21. package/dist/attemptCarry-WOkfvFMw.esm.js +45 -0
  22. package/dist/authentication.d.ts +3 -3
  23. package/dist/authentication.esm.js +2 -2
  24. package/dist/{authenticationManager-BIZC55Bi.d.ts → authenticationManager-CWmh7aSY.d.ts} +1 -1
  25. package/dist/{authenticationManager-2Lr5V_7p.esm.js → authenticationManager-DjX0XDyH.esm.js} +5 -5
  26. package/dist/{authenticationStateMachine-C99B0GFP.esm.js → authenticationStateMachine-BMbZL8wm.esm.js} +3 -3
  27. package/dist/backCameraLabel-yda5ugE4.esm.js +67 -0
  28. package/dist/{backCameraStream-CMvXj4X4.esm.js → backCameraStream-DS1oDiUq.esm.js} +12 -107
  29. package/dist/{browser-DlFgHpoC-DnyrCR8r.esm.js → browser-pQZA35G2-DtkAf6sn.esm.js} +161 -150
  30. package/dist/{camera-sIa9ceW2.esm.js → camera-E_Kcre4O.esm.js} +15 -23
  31. package/dist/camera.d.ts +2 -2
  32. package/dist/camera.esm.js +1 -1
  33. package/dist/certificate-issuance.esm.js +2 -2
  34. package/dist/{certificateIssuanceManager-BfeMv2PU.esm.js → certificateIssuanceManager-C1nETQos.esm.js} +2 -2
  35. package/dist/{certificateIssuanceStateMachine-Frgjbjw8.esm.js → certificateIssuanceStateMachine-DThXMDqr.esm.js} +2 -2
  36. package/dist/cnpj-Co1ottYN.esm.js +77 -0
  37. package/dist/connectivity-BCuEoQ-n.esm.js +114 -0
  38. package/dist/consent.d.ts +1 -1
  39. package/dist/consent.esm.js +2 -2
  40. package/dist/{consentManager-CvEu8h_W.esm.js → consentManager-DMlSL6Ax.esm.js} +4 -3
  41. package/dist/{consentManager-Cv_0QKLD.d.ts → consentManager-bjfVXO7p.d.ts} +9 -2
  42. package/dist/{consentStateMachine-DJTgN_-1.esm.js → consentStateMachine-DIYSMxKQ.esm.js} +20 -7
  43. package/dist/cross-document-data-match.esm.js +1 -1
  44. package/dist/{crossDocumentDataMatchManager-Cu141CE8.esm.js → crossDocumentDataMatchManager-BFTdiEDB.esm.js} +2 -2
  45. package/dist/curp-validation.d.ts +1 -1
  46. package/dist/curp-validation.esm.js +2 -2
  47. package/dist/{curpValidationManager-B-z9q5V3.esm.js → curpValidationManager-DNpC3wyf.esm.js} +3 -2
  48. package/dist/{curpValidationManager-C9sqoh9n.d.ts → curpValidationManager-z8428oCM.d.ts} +1 -1
  49. package/dist/{curpValidationStateMachine-vDEFLMPw.esm.js → curpValidationStateMachine-B3iVsDyt.esm.js} +28 -20
  50. package/dist/custom-fields.esm.js +1 -1
  51. package/dist/custom-watchlist.esm.js +2 -2
  52. package/dist/{customFieldsManager-D1ex2cFM.esm.js → customFieldsManager-CvI-pDT3.esm.js} +2 -2
  53. package/dist/{customWatchlistManager-CTI-SGk0.esm.js → customWatchlistManager-BuHtUb0y.esm.js} +2 -2
  54. package/dist/{customWatchlistStateMachine-hmRd0f2I.esm.js → customWatchlistStateMachine-CiVD9wyF.esm.js} +1 -1
  55. package/dist/{deepsightService-CKTYDIXD.esm.js → deepsightLoader-B7DEYoyY.esm.js} +40 -74
  56. package/dist/{createCameraCycleOwnership-Dj_LHUvN.esm.js → desktopCameraElection-BGMtYwk3.esm.js} +177 -40
  57. package/dist/device.esm.js +2 -2
  58. package/dist/document-capture.d.ts +3 -3
  59. package/dist/document-capture.esm.js +2 -2
  60. package/dist/{documentCaptureManager-DkyDtm3Y.d.ts → documentCaptureManager-CD5iQiUI.d.ts} +37 -4
  61. package/dist/{documentCaptureManager-DUJwpKC5.esm.js → documentCaptureManager-DLPqruXJ.esm.js} +27 -19
  62. package/dist/{documentCaptureStateMachine-B8i7GnLh.esm.js → documentCaptureStateMachine-DCvWQhFG.esm.js} +105 -56
  63. package/dist/dynamic-forms.d.ts +2 -2
  64. package/dist/dynamic-forms.esm.js +2 -2
  65. package/dist/{dynamicFormsManager-C0dHs1ty.d.ts → dynamicFormsManager-9kwY8Bf5.d.ts} +1 -1
  66. package/dist/{dynamicFormsManager-DiKYjcF3.esm.js → dynamicFormsManager-DfqCEPg9.esm.js} +2 -2
  67. package/dist/{dynamicFormsStateMachine-DEI45xYW.esm.js → dynamicFormsStateMachine-USQMB-uV.esm.js} +2 -2
  68. package/dist/ekyb.d.ts +4 -4
  69. package/dist/ekyb.esm.js +3 -3
  70. package/dist/{ekybManager-BaZ_7CEu.d.ts → ekybManager-BLOkwmWO.d.ts} +2 -2
  71. package/dist/{ekybManager-8WLkNcqg.esm.js → ekybManager-CR8YSYux.esm.js} +2 -2
  72. package/dist/{ekybStateMachine-BLRT45Ex.esm.js → ekybStateMachine-kHwdz6hm.esm.js} +28 -44
  73. package/dist/ekybUtils-Cw8Ta9Qi.esm.js +140 -0
  74. package/dist/ekyc.d.ts +4 -3
  75. package/dist/ekyc.esm.js +3 -3
  76. package/dist/{ekycManager-DW-ynodd.d.ts → ekycManager-DlGIn9wA.d.ts} +2 -1
  77. package/dist/{ekycManager-BO-Lui3t.esm.js → ekycManager-DymCvmVB.esm.js} +2 -2
  78. package/dist/ekycStateMachine-CoFCUJ2z.esm.js +7578 -0
  79. package/dist/ekycUtils-GRuMELYr.esm.js +1472 -0
  80. package/dist/electronic-signature.esm.js +1 -1
  81. package/dist/{electronicSignatureManager-CcIMOb_Y.esm.js → electronicSignatureManager-BCE3uA3z.esm.js} +4 -4
  82. package/dist/email.esm.js +2 -2
  83. package/dist/{emailManager-ButFktRm.esm.js → emailManager-CGoE3CUe.esm.js} +2 -2
  84. package/dist/{emailStateMachine-BXtlC0NV.esm.js → emailStateMachine-KgHfDNvM.esm.js} +32 -20
  85. package/dist/{events-Du2A4-Qr.esm.js → events-ggpBBaZ8.esm.js} +2 -2
  86. package/dist/events.esm.js +1 -1
  87. package/dist/extensibility.d.ts +37 -22
  88. package/dist/extensibility.esm.js +36 -35
  89. package/dist/{externalFetch-DrR9xshk.esm.js → externalFetch-CQY41QT1.esm.js} +4 -1
  90. package/dist/face-match.d.ts +1 -1
  91. package/dist/face-match.esm.js +2 -2
  92. package/dist/{faceCaptureManagerFactory-1hzeS_rB.d.ts → faceCaptureManagerFactory-DV2ULUYS.d.ts} +71 -66
  93. package/dist/{faceCaptureManagerFactory-BlGvXzXA.esm.js → faceCaptureManagerFactory-Dp90bedH.esm.js} +4 -4
  94. package/dist/{faceCaptureSetup-TY8RXc2N.esm.js → faceCaptureSetup-ZfiWg0fo.esm.js} +84 -457
  95. package/dist/{faceMatchManager-DWFUQjMQ.esm.js → faceMatchManager-D2xKPjjQ.esm.js} +2 -2
  96. package/dist/{faceMatchManager-DIgG-UFS.d.ts → faceMatchManager-Z4UDLwAv.d.ts} +16 -7
  97. package/dist/{faceMatchStateMachine-CUCvlydD.esm.js → faceMatchStateMachine-CUvwiQi9.esm.js} +40 -27
  98. package/dist/{feature-management-B5rR10uS.esm.js → feature-management-BbCIA4og.esm.js} +35 -21
  99. package/dist/feature-management.esm.js +1 -1
  100. package/dist/field-comparison.esm.js +1 -1
  101. package/dist/{fieldComparisonManager-v3knTYV_.esm.js → fieldComparisonManager-DgDbEeFZ.esm.js} +2 -2
  102. package/dist/fiscal-qr.esm.js +1 -1
  103. package/dist/{fiscalQrManager-Dt9fHG7h.esm.js → fiscalQrManager-BZeklojR.esm.js} +4 -4
  104. package/dist/flow-events.d.ts +1 -1
  105. package/dist/flow.d.ts +10 -10
  106. package/dist/flow.esm.js +10 -9
  107. package/dist/{flowCompletionService-BDI5QpfR.esm.js → flowCompletionService-CcCnPs_T.esm.js} +2 -2
  108. package/dist/{flowServices-roD0oIQL.esm.js → flowServices-Dmnc8Rye.esm.js} +69 -185
  109. package/dist/geolocation.d.ts +1 -1
  110. package/dist/geolocation.esm.js +2 -2
  111. package/dist/{geolocationManager-Dn24g1fl.d.ts → geolocationManager-6e1i9UIR.d.ts} +15 -17
  112. package/dist/{geolocationManager-DnONzWL5.esm.js → geolocationManager-BJJ3m_I8.esm.js} +6 -8
  113. package/dist/{geolocationStateMachine-eWy_G4Os.esm.js → geolocationStateMachine-CTI3m4Ie.esm.js} +12 -8
  114. package/dist/{getDeviceClass-bsWdEDxP.esm.js → getDeviceClass-DoIWuKI8.esm.js} +1 -1
  115. package/dist/government-validation.esm.js +2 -2
  116. package/dist/{governmentValidationManager-BtXWHICu.esm.js → governmentValidationManager-CjChjZ3C.esm.js} +2 -2
  117. package/dist/{governmentValidationStateMachine-COL-Vs48.esm.js → governmentValidationStateMachine-AEbn3Afi.esm.js} +1 -1
  118. package/dist/home.d.ts +1 -1
  119. package/dist/home.esm.js +1 -1
  120. package/dist/http.esm.js +1 -1
  121. package/dist/id-ocr.d.ts +1 -1
  122. package/dist/id-ocr.esm.js +2 -2
  123. package/dist/id-selfie-flow.d.ts +1 -1
  124. package/dist/id-selfie-flow.esm.js +10 -9
  125. package/dist/id-verification.esm.js +2 -2
  126. package/dist/id.d.ts +3 -16
  127. package/dist/id.esm.js +4 -4
  128. package/dist/{idCaptureDefaults-BGsG2OAs.esm.js → idCaptureDefaults-Dszuq9ng.esm.js} +3 -3
  129. package/dist/{idCaptureManager-BrfYjCm_.esm.js → idCaptureManager-B3oR4RnA.esm.js} +64 -17
  130. package/dist/{idCaptureManager-0M02hSuC.d.ts → idCaptureManager-CCA2D1Ah.d.ts} +68 -5
  131. package/dist/{idCaptureServices-BSj6EH2l.esm.js → idCaptureServices-DK0QboqT.esm.js} +29 -198
  132. package/dist/{idCaptureStateMachine-dXKBYHQp.esm.js → idCaptureStateMachine-zzar9MPy.esm.js} +914 -536
  133. package/dist/{idOcrManager-DT3kPIB3.d.ts → idOcrManager-BTdHlJ9D.d.ts} +1 -1
  134. package/dist/{idOcrManager-D3-HNMXP.esm.js → idOcrManager-xyEZNOBa.esm.js} +2 -2
  135. package/dist/{idOcrStateMachine-DyENX6Ki.esm.js → idOcrStateMachine-DNKXh4Rn.esm.js} +2 -2
  136. package/dist/{idVerificationManager-iWz7Avkr.esm.js → idVerificationManager-DdnvYfgN.esm.js} +2 -2
  137. package/dist/{idVerificationStateMachine-CL1kUdBe.esm.js → idVerificationStateMachine-DtIBCa32.esm.js} +1 -1
  138. package/dist/identity-reuse.esm.js +2 -2
  139. package/dist/{identityReuseManager-CD1ucp1d.esm.js → identityReuseManager-CcpovlfD.esm.js} +2 -2
  140. package/dist/{identityReuseStateMachine-DfV81wQC.esm.js → identityReuseStateMachine-DxZFWy47.esm.js} +1 -1
  141. package/dist/{index-CKQ9QBZP.d.ts → index-DC0P2Vzw.d.ts} +1 -1
  142. package/dist/{index-BKOWUhxG.d.ts → index-DEfwds5y.d.ts} +55 -8
  143. package/dist/index.d.ts +1 -1
  144. package/dist/index.esm.js +1 -1
  145. package/dist/{invokeOnCaptureCallback-DYrkOXO6.esm.js → invokeOnCaptureCallback-BJ0GVHGr.esm.js} +1 -1
  146. package/dist/kyb-checks.d.ts +3 -0
  147. package/dist/kyb-checks.esm.js +3 -0
  148. package/dist/kybChecksManager-CblEL97E.d.ts +95 -0
  149. package/dist/kybChecksManager-DpGOp4Su.esm.js +89 -0
  150. package/dist/kybChecksStateMachine-B43NAnv7.esm.js +718 -0
  151. package/dist/mandatory-consent.d.ts +2 -2
  152. package/dist/mandatory-consent.esm.js +2 -2
  153. package/dist/{mandatoryConsentManager-Cwqx1nK7.esm.js → mandatoryConsentManager-B4vCYslr.esm.js} +4 -3
  154. package/dist/{mandatoryConsentManager-BQ43yndC.d.ts → mandatoryConsentManager-B88Sm5nd.d.ts} +10 -3
  155. package/dist/{mandatoryConsentStateMachine-pXWqAHo_.esm.js → mandatoryConsentStateMachine-DWslYPA3.esm.js} +20 -7
  156. package/dist/mediaRecorderOptions-B9-IEVtV.esm.js +70 -0
  157. package/dist/multipartRecordingService-BTqkHGG9.esm.js +407 -0
  158. package/dist/nationalIds-B91f_RuB.esm.js +99 -0
  159. package/dist/{permissionGuards-gcy3U0SL.esm.js → permissionGuards-DFV-Ws0a.esm.js} +1 -1
  160. package/dist/{permissionServices-Ca-tSNhT.esm.js → permissionServices-D190ATGD.esm.js} +11 -9
  161. package/dist/phone-number.d.ts +7 -1
  162. package/dist/phone-number.esm.js +15 -2
  163. package/dist/phone.d.ts +1 -1
  164. package/dist/phone.esm.js +2 -2
  165. package/dist/phoneFormat-JJNaWthV.esm.js +75 -0
  166. package/dist/{phoneManager-BO-LTih5.d.ts → phoneManager-6nrJkvkG.d.ts} +5 -0
  167. package/dist/{phoneManager-KKUq-Vgo.esm.js → phoneManager-Dy5tODCU.esm.js} +3 -3
  168. package/dist/phoneServices-DJgyOzU2.esm.js +77 -0
  169. package/dist/{phoneStateMachine-D2QWS2cu.esm.js → phoneStateMachine-DnlPhnw7.esm.js} +54 -82
  170. package/dist/{phoneValidation-DnBcNUNh.esm.js → phoneValidation-OggtfjRt.esm.js} +1 -2
  171. package/dist/{platform-DkcRc9JV.esm.js → platform-aPh7gTWh.esm.js} +15 -1
  172. package/dist/processFaceMatch-Bst83HaS.esm.js +21 -0
  173. package/dist/qe-signature.esm.js +1 -1
  174. package/dist/recordingService-CTko6Cjn.esm.js +397 -0
  175. package/dist/redirect-to-mobile.d.ts +2 -2
  176. package/dist/redirect-to-mobile.esm.js +2 -2
  177. package/dist/{redirectToMobileManager-uHW3dyuQ.esm.js → redirectToMobileManager-CgGaT2NP.esm.js} +5 -4
  178. package/dist/{redirectToMobileManager-CVsvpVbQ.d.ts → redirectToMobileManager-Dm9ctRCC.d.ts} +3 -1
  179. package/dist/{redirectToMobileStateMachine-b-H-ipGM.esm.js → redirectToMobileStateMachine-CbhN8uVN.esm.js} +65 -26
  180. package/dist/resolveForm-O7-r79VA.esm.js +351 -0
  181. package/dist/{runChildModule-BF_atgNx.esm.js → runChildModule-BffFArwl.esm.js} +3 -3
  182. package/dist/{sdkVersion-CsIbltJF.esm.js → sdkVersion-CDd_gaR7.esm.js} +1 -1
  183. package/dist/selfie.d.ts +4 -4
  184. package/dist/selfie.esm.js +10 -10
  185. package/dist/{selfieErrorUtils-BY0-YbPW.esm.js → selfieErrorUtils-f4MgAG2A.esm.js} +1 -1
  186. package/dist/{selfieManager-BJdNu_nd.d.ts → selfieManager-DmZFzs1-.d.ts} +1 -1
  187. package/dist/{selfieManager-vAAwzsHk.esm.js → selfieManager-hopelYEk.esm.js} +5 -5
  188. package/dist/{selfieStateMachine-BFVp3ElQ.esm.js → selfieStateMachine-DaZIVv3Q.esm.js} +3 -3
  189. package/dist/{session-CpwfoVdH.esm.js → session-CdSX4wsZ.esm.js} +77 -9
  190. package/dist/session.d.ts +96 -10
  191. package/dist/session.esm.js +7 -6
  192. package/dist/{sessionInitializer-BTjYgE-V.esm.js → sessionInitializer-DsL7X2j9.esm.js} +465 -206
  193. package/dist/{setup-YPKTUCY5.d.ts → setup-D9qt8YVU.d.ts} +2 -2
  194. package/dist/{setup-BInNAvQw.esm.js → setup-DDahygZs.esm.js} +44 -30
  195. package/dist/signature.esm.js +2 -2
  196. package/dist/{signatureManager-f_dPAGXn.esm.js → signatureManager-CwqjcxPg.esm.js} +2 -2
  197. package/dist/{signatureStateMachine-C-nUq_oq.esm.js → signatureStateMachine-DBVDd1Eu.esm.js} +1 -1
  198. package/dist/{stats-BEvexnKC.esm.js → stats-CatA2dea.esm.js} +1 -1
  199. package/dist/stats.esm.js +1 -1
  200. package/dist/textRules-D4NRinKY.d.ts +41 -0
  201. package/dist/{tri-xzRLIIMN.esm.js → tri-DG6priFa.esm.js} +142 -8
  202. package/dist/tri.d.ts +1 -1
  203. package/dist/tri.esm-CzTNi5Q_.esm.js +3826 -0
  204. package/dist/tri.esm.js +1 -1
  205. package/dist/{trueSightService-BMT-TubT.esm.js → trueSightService-GuLthUVK.esm.js} +19 -10
  206. package/dist/trust-graph.esm.js +1 -1
  207. package/dist/types-B9C8W01q.d.ts +34 -0
  208. package/dist/{types-yPH8lAH-.d.ts → types-BEVHQbbC.d.ts} +2 -2
  209. package/dist/{types-BAxn7MpY.d.ts → types-BPm1JSu7.d.ts} +123 -48
  210. package/dist/{types-0L-eFDmr.d.ts → types-BgRHw-dR.d.ts} +1 -1
  211. package/dist/{types-B6HsSzpk.d.ts → types-CRaFu6wS.d.ts} +6 -3
  212. package/dist/types-CTaL0XJz.d.ts +80 -0
  213. package/dist/{types-Ckir_BEs.d.ts → types-Cd0J0F9D.d.ts} +1 -1
  214. package/dist/{types-CK8Jbjkp.d.ts → types-Csh8vzPo.d.ts} +1 -1
  215. package/dist/types-CuMJ2M7D.d.ts +210 -0
  216. package/dist/{types-DUnFZ08M.d.ts → types-CyNndVAT.d.ts} +16 -8
  217. package/dist/{types-DPIDuhut.d.ts → types-DNVzoRvi.d.ts} +2 -1
  218. package/dist/types-J6g6iKe_.d.ts +6 -0
  219. package/dist/{urlUtils-6jsE6rKp.esm.js → urlUtils-eYiyWjh0.esm.js} +4 -1
  220. package/dist/video-selfie.d.ts +8 -8
  221. package/dist/video-selfie.esm.js +97 -22
  222. package/dist/{videoSelfieCameraWarmer-D1xA0u8y.esm.js → videoSelfieCameraWarmer-e3irGfcO.esm.js} +18 -21
  223. package/dist/{videoSelfieStepDetector-CGsTltqB.d.ts → videoSelfieStepDetector-Dv3Mgws-.d.ts} +9 -4
  224. package/dist/virtualCameraCheck-eFOm2C9q.esm.js +27 -0
  225. package/dist/{warmup-BElYWRh7.esm.js → warmup-DtB0DJpl.esm.js} +198 -27
  226. package/dist/wasm.d.ts +2 -2
  227. package/dist/wasm.esm.js +3 -3
  228. package/dist/{wasmDsFlagSync-CYj5LL9z.esm.js → wasmDsFlagSync-BtiR5pig.esm.js} +1 -1
  229. package/dist/wasmMetadataVersionSync-U8EFUr1T.esm.js +27 -0
  230. package/dist/{wasmWebClient-BjZw_7OB.esm.js → wasmWebClient-BDrax6Eu.esm.js} +55 -26
  231. package/dist/watchlist-for-business.d.ts +2 -1
  232. package/dist/watchlist-for-business.esm.js +2 -2
  233. package/dist/watchlist.esm.js +2 -2
  234. package/dist/{watchlistForBusinessManager-B3GDPZrr.d.ts → watchlistForBusinessManager-DX2AyM4Y.d.ts} +54 -18
  235. package/dist/{watchlistForBusinessManager-CZZOFkGl.esm.js → watchlistForBusinessManager-DqUpAEj_.esm.js} +37 -7
  236. package/dist/watchlistForBusinessStateMachine-DdaPl2PS.esm.js +166 -0
  237. package/dist/{watchlistManager-DXtX94SN.esm.js → watchlistManager-CdpXzT4B.esm.js} +2 -2
  238. package/dist/{watchlistStateMachine-McALifag.esm.js → watchlistStateMachine-ofHW_lPk.esm.js} +1 -1
  239. package/dist/workflow.d.ts +5 -2
  240. package/dist/workflow.esm.js +60 -50
  241. package/package.json +12 -5
  242. package/dist/IBrowserEnvironmentCapability-DEaRRk-R.esm.js +0 -9
  243. package/dist/addressSearch-DPjIKJrX.esm.js +0 -563
  244. package/dist/deepsightLoader-DeNvGU3c.esm.js +0 -55
  245. package/dist/ekycStateMachine-CDnI_NRq.esm.js +0 -1443
  246. package/dist/ekycUtils-zY8CdKJL.esm.js +0 -300
  247. package/dist/thumbmark.esm-CRc0cYvz.esm.js +0 -1242
  248. package/dist/tri.esm-BIjHhBJ2.esm.js +0 -2620
  249. package/dist/types-BvLo3U4u.d.ts +0 -134
  250. package/dist/types-zOgZqMni.d.ts +0 -6
  251. package/dist/watchlistForBusinessStateMachine-B66E7jud.esm.js +0 -78
  252. /package/dist/{types-BSBzhHRH2.d.ts → types-BSBzhHRH.d.ts} +0 -0
@@ -1,23 +1,123 @@
1
- import { C as subscribeEvent, b as getAnalyticsBatcher, y as addEvent } from "./events-Du2A4-Qr.esm.js";
2
- import { c as setToken, r as getToken, t as api, u as endpoints } from "./api-Cz90EHyu.esm.js";
3
- import { C as noteTokenActivated, _ as isFeatureEnabled, b as noteEnvironment, c as startTrueSightCollection, g as fetchFeatureConfig, u as trueSightLog, v as resetFeatureConfigCache } from "./trueSightService-BMT-TubT.esm.js";
4
- import { t as SDK_VERSION } from "./sdkVersion-CsIbltJF.esm.js";
5
- import { E as updateFeatureManagementUser } from "./feature-management-B5rR10uS.esm.js";
6
- import { n as flushDeviceStatsQueue, r as resetDeviceStatsQueue } from "./stats-BEvexnKC.esm.js";
1
+ import { n as getTimestamp } from "./IBrowserEnvironmentCapability-D7JG7ML3.esm.js";
2
+ import { n as setWasmMetadataV2Enabled } from "./wasmMetadataVersionSync-U8EFUr1T.esm.js";
3
+ import { C as subscribeEvent, b as getAnalyticsBatcher, y as addEvent } from "./events-ggpBBaZ8.esm.js";
4
+ import { c as setToken, r as getToken, t as api, u as endpoints } from "./api-CpP4PS4S.esm.js";
5
+ import { C as noteTokenActivated, _ as isFeatureEnabled, b as noteEnvironment, c as startTrueSightCollection, g as fetchFeatureConfig, u as trueSightLog, v as resetFeatureConfigCache } from "./trueSightService-GuLthUVK.esm.js";
6
+ import { t as SDK_VERSION } from "./sdkVersion-CDd_gaR7.esm.js";
7
+ import { t as BrowserTimerProvider } from "./BrowserTimerProvider-BXhgNxLt.esm.js";
8
+ import { E as updateFeatureManagementUser } from "./feature-management-BbCIA4og.esm.js";
9
+ import { n as flushDeviceStatsQueue, r as resetDeviceStatsQueue } from "./stats-CatA2dea.esm.js";
7
10
  import { t as getParsedUserAgent } from "./getParsedUserAgent-DhQPeKqw.esm.js";
8
- import { t as BrowserLazyImportProvider } from "./BrowserLazyImportProvider-BhoA957O.esm.js";
9
- import { a as isIOS } from "./platform-DkcRc9JV.esm.js";
11
+ import { a as isIOS } from "./platform-aPh7gTWh.esm.js";
10
12
  import { t as getUserAgent } from "./getBrowser-CBiibsL-.esm.js";
11
- import { i as linkSessionWithTRI, r as isTRIStarted } from "./tri-xzRLIIMN.esm.js";
13
+ import { a as linkSessionWithTRI, i as isTRIStarted, o as readTRIFpSignals } from "./tri-DG6priFa.esm.js";
14
+ import { i as retryAfterReconnect } from "./connectivity-BCuEoQ-n.esm.js";
15
+ //#region src/internal/version/sdkPlatform.ts
16
+ /**
17
+ * The platform SDK 2 reports to the backend: the device fingerprint post's
18
+ * `deviceType`, and the SDK platform the WASM module stamps on capture
19
+ * metadata and fingerprint signals. Keep them in one place so they agree.
20
+ */
21
+ const SDK_PLATFORM = "WEBAPP";
22
+ //#endregion
23
+ //#region src/internal/fingerprint/incodeDeviceHash.ts
24
+ function isNonEmptyString(value) {
25
+ return typeof value === "string" && value.trim() !== "";
26
+ }
27
+ /**
28
+ * Reads the device hash from a PID signal response. The SDK never pairs a
29
+ * hash with an algorithm user-service didn't name, so all three fields must be
30
+ * present.
31
+ */
32
+ function readIncodeDeviceHash(data) {
33
+ if (typeof data !== "object" || data === null) return null;
34
+ const { deviceHash, algorithmName, algorithmVersion } = data;
35
+ if (!isNonEmptyString(deviceHash) || !isNonEmptyString(algorithmName) || !isNonEmptyString(algorithmVersion)) return null;
36
+ return {
37
+ hash: deviceHash,
38
+ algorithmName,
39
+ algorithmVersion
40
+ };
41
+ }
42
+ function createIncodeDeviceHashWaiter(timer) {
43
+ const pendingByToken = /* @__PURE__ */ new Map();
44
+ function pendingFor(token) {
45
+ let pending = pendingByToken.get(token);
46
+ if (!pending) {
47
+ let settle = () => void 0;
48
+ const deviceHash = new Promise((resolve) => {
49
+ settle = resolve;
50
+ });
51
+ let release = () => void 0;
52
+ const released = new Promise((resolve) => {
53
+ release = () => resolve(null);
54
+ });
55
+ pending = {
56
+ deviceHash,
57
+ settle,
58
+ released,
59
+ release
60
+ };
61
+ pendingByToken.set(token, pending);
62
+ }
63
+ return pending;
64
+ }
65
+ return {
66
+ settle(token, deviceHash) {
67
+ pendingFor(token).settle(deviceHash);
68
+ },
69
+ release(token) {
70
+ pendingFor(token).release();
71
+ },
72
+ async waitFor(token, timeoutMs) {
73
+ let timeout;
74
+ const timedOut = new Promise((resolve) => {
75
+ timeout = timer.setTimeout(() => resolve(null), Math.max(0, timeoutMs));
76
+ });
77
+ const pending = pendingFor(token);
78
+ try {
79
+ return await Promise.race([
80
+ pending.deviceHash,
81
+ pending.released,
82
+ timedOut
83
+ ]);
84
+ } finally {
85
+ if (timeout !== void 0) timer.clearTimeout(timeout);
86
+ }
87
+ },
88
+ reset() {
89
+ pendingByToken.forEach((pending) => pending.settle(null));
90
+ pendingByToken.clear();
91
+ }
92
+ };
93
+ }
94
+ const incodeDeviceHashWaiter = createIncodeDeviceHashWaiter(BrowserTimerProvider.getInstance());
95
+ //#endregion
12
96
  //#region src/internal/fingerprint/fingerprintSignalsReporter.ts
13
97
  const START_INTERVIEW_EVENT = "modelLoadEnd";
14
98
  const CAPTURE_INTERVIEW_EVENT = "captureAttemptFinished";
15
- const START_SIGNALS = ["pid", "device"];
99
+ const START_SIGNALS = ["device"];
100
+ const MAX_KEPT_SIGNALS = 20;
101
+ /**
102
+ * The native envelope reads the SDK platform and version, and the start batch
103
+ * goes out before any capture's Deepsight session has set them. A failure is
104
+ * rethrown under its own name, so TrueSight does not blame the read.
105
+ */
106
+ function setSdkIdentity(wasmUtil) {
107
+ try {
108
+ wasmUtil.setSdkPlatform(SDK_PLATFORM);
109
+ wasmUtil.setSdkVersion(SDK_VERSION);
110
+ } catch (error) {
111
+ const message = error instanceof Error ? error.message : String(error);
112
+ throw new Error(`setting the SDK platform and version failed: ${message}`);
113
+ }
114
+ }
16
115
  function createFingerprintSignalsReporter(deps) {
17
116
  let enabled = true;
18
117
  let sessionActive = false;
19
118
  let wasmReady = false;
20
119
  let started = false;
120
+ let pidStarted = false;
21
121
  let pendingStartSignals = START_SIGNALS;
22
122
  let prefetchStarted = false;
23
123
  let deviceDataUpdated = true;
@@ -26,6 +126,21 @@ function createFingerprintSignalsReporter(deps) {
26
126
  let optInPending = false;
27
127
  let queue = Promise.resolve();
28
128
  let generation = 0;
129
+ let keptSignals = [];
130
+ let forward = null;
131
+ let forwardRefused = false;
132
+ function keepOrForward(metadata) {
133
+ if (forward) {
134
+ if (!forward(metadata)) {
135
+ forward = null;
136
+ forwardRefused = true;
137
+ }
138
+ return;
139
+ }
140
+ if (forwardRefused) return;
141
+ keptSignals.push(metadata);
142
+ if (keptSignals.length > MAX_KEPT_SIGNALS) keptSignals.shift();
143
+ }
29
144
  function enqueue(work) {
30
145
  const scheduledGeneration = generation;
31
146
  queue = queue.then(async () => {
@@ -34,13 +149,26 @@ function createFingerprintSignalsReporter(deps) {
34
149
  });
35
150
  }
36
151
  async function send(token, interviewEvent, type) {
37
- const metadata = await (await deps.getWasmUtil()).getFingerprintSignals(type);
38
- if (!metadata) return;
39
- if (deps.getToken() !== token) return;
40
- await deps.post(endpoints.deviceFingerprintSignals, {
41
- interviewEvent,
42
- metadata
43
- }, { "X-Incode-Hardware-Id": token });
152
+ const isPid = type === "pid";
153
+ let deviceHash = null;
154
+ try {
155
+ const wasmUtil = await deps.getWasmUtil();
156
+ setSdkIdentity(wasmUtil);
157
+ const metadata = await wasmUtil.getFingerprintSignals(type);
158
+ if (!metadata || deps.getToken() !== token) return;
159
+ keepOrForward(metadata);
160
+ const response = await deps.post(endpoints.deviceFingerprintSignals, isPid ? {
161
+ interviewEvent,
162
+ metadata,
163
+ deviceHashRequested: true
164
+ } : {
165
+ interviewEvent,
166
+ metadata
167
+ }, { "X-Incode-Hardware-Id": token });
168
+ deviceHash = isPid && enabled ? readIncodeDeviceHash(response) : null;
169
+ } finally {
170
+ if (isPid) deps.onDeviceHash(token, deviceHash);
171
+ }
44
172
  }
45
173
  /**
46
174
  * Sends `types` in order and stops at the first failure. Resolves to the
@@ -98,6 +226,7 @@ function createFingerprintSignalsReporter(deps) {
98
226
  if (!token) return;
99
227
  startPrefetch();
100
228
  if (optInPending) enqueue(applyNativeOptIn);
229
+ startPid(token);
101
230
  if (started || !sessionActive) return;
102
231
  started = true;
103
232
  ensureSubscribed();
@@ -117,6 +246,38 @@ function createFingerprintSignalsReporter(deps) {
117
246
  if (unsent.length > 0) allowRetry(unsent);
118
247
  });
119
248
  }
249
+ /**
250
+ * PID goes ahead of activation: the activation post waits for the pid. It is
251
+ * queued before DEVICE, so it still precedes it.
252
+ */
253
+ function startPid(token) {
254
+ if (pidStarted) return;
255
+ pidStarted = true;
256
+ const pidGeneration = generation;
257
+ enqueue(async () => {
258
+ if ((await sendAll(token, START_INTERVIEW_EVENT, ["pid"])).length > 0 && pidGeneration === generation) pidStarted = false;
259
+ });
260
+ }
261
+ /** Resolves the pid user-service returned for a host's PID, or `null`. */
262
+ async function postHostPid(token, readPid) {
263
+ try {
264
+ const metadata = await readPid();
265
+ if (!metadata || deps.getToken() !== token) return null;
266
+ const response = await deps.post(endpoints.deviceFingerprintSignals, {
267
+ interviewEvent: START_INTERVIEW_EVENT,
268
+ metadata,
269
+ deviceHashRequested: true
270
+ }, { "X-Incode-Hardware-Id": token });
271
+ return enabled ? readIncodeDeviceHash(response) : null;
272
+ } catch (error) {
273
+ deps.reportFailure({
274
+ message: error instanceof Error ? error.message : String(error),
275
+ signalsType: "pid",
276
+ interviewEvent: START_INTERVIEW_EVENT
277
+ });
278
+ return null;
279
+ }
280
+ }
120
281
  function onCaptureAttemptFinished() {
121
282
  wasmReady = true;
122
283
  tryStart();
@@ -142,6 +303,7 @@ function createFingerprintSignalsReporter(deps) {
142
303
  generation += 1;
143
304
  sessionActive = false;
144
305
  started = false;
306
+ pidStarted = false;
145
307
  pendingStartSignals = START_SIGNALS;
146
308
  optInPending = false;
147
309
  deviceDataUpdated = true;
@@ -173,6 +335,32 @@ function createFingerprintSignalsReporter(deps) {
173
335
  onCameraInfoUpdated() {
174
336
  deviceDataUpdated = true;
175
337
  },
338
+ sendHostPid(token, readPid) {
339
+ if (!enabled || pidStarted) return Promise.resolve(false);
340
+ pidStarted = true;
341
+ const pidGeneration = generation;
342
+ const sent = queue.then(async () => {
343
+ if (pidGeneration !== generation) return false;
344
+ const deviceHash = await postHostPid(token, readPid);
345
+ if (pidGeneration !== generation) return false;
346
+ if (deviceHash) {
347
+ deps.onDeviceHash(token, deviceHash);
348
+ return true;
349
+ }
350
+ pidStarted = false;
351
+ tryStart();
352
+ return false;
353
+ });
354
+ queue = sent.then(() => void 0);
355
+ return sent;
356
+ },
357
+ forwardTo(sink) {
358
+ forward = sink;
359
+ forwardRefused = false;
360
+ const kept = keptSignals;
361
+ keptSignals = [];
362
+ kept.forEach(keepOrForward);
363
+ },
176
364
  resetSession,
177
365
  reset() {
178
366
  resetSession();
@@ -181,16 +369,19 @@ function createFingerprintSignalsReporter(deps) {
181
369
  prefetchStarted = false;
182
370
  unsubscribe?.();
183
371
  unsubscribe = null;
372
+ keptSignals = [];
373
+ forward = null;
374
+ forwardRefused = false;
184
375
  }
185
376
  };
186
377
  }
187
378
  const fingerprintSignalsReporter = createFingerprintSignalsReporter({
188
379
  getWasmUtil: async () => {
189
- const { WasmUtilProvider } = await import("./WasmUtilProvider-DtJuBdt-.esm.js").then((n) => n.n);
190
- return WasmUtilProvider.getInstance();
380
+ return (await import("./WasmUtilProvider-Dp2V-Uct.esm.js").then((n) => n.n)).WasmUtilProvider.getInstance();
191
381
  },
192
382
  getToken: () => getToken(),
193
- post: (url, body, headers) => api.post(url, body, { headers }),
383
+ post: async (url, body, headers) => (await api.post(url, body, { headers })).data,
384
+ onDeviceHash: (token, deviceHash) => incodeDeviceHashWaiter.settle(token, deviceHash),
194
385
  subscribe: (listener) => subscribeEvent(listener),
195
386
  reportFailure: ({ message, signalsType, interviewEvent }) => trueSightLog("warning", "wasm", "other", `fingerprint signals failed type=${signalsType} event=${interviewEvent} error=${message}`)
196
387
  });
@@ -328,6 +519,55 @@ var BrowserInfoProvider = class {
328
519
  }
329
520
  };
330
521
  //#endregion
522
+ //#region ../infra/src/providers/browser/IpifyProvider.ts
523
+ let cachedIp;
524
+ let inFlightLookup;
525
+ /**
526
+ * Resets the module-level IP cache. Intended for tests and full session resets.
527
+ */
528
+ function resetIpifyCache() {
529
+ cachedIp = void 0;
530
+ inFlightLookup = void 0;
531
+ }
532
+ async function fetchIpFromIpify() {
533
+ if (typeof fetch === "undefined") return "";
534
+ let timeoutId = 0;
535
+ const controller = new AbortController();
536
+ if (AbortSignal.timeout) {
537
+ const signal = AbortSignal.timeout(3e3);
538
+ return (await (await fetch("https://api.ipify.org?format=json", { signal })).json()).ip;
539
+ }
540
+ const timeoutPromise = new Promise((_, reject) => {
541
+ timeoutId = setTimeout(() => {
542
+ controller.abort();
543
+ reject(/* @__PURE__ */ new Error("Request timeout"));
544
+ }, 3e3);
545
+ });
546
+ const fetchPromise = fetch("https://api.ipify.org?format=json", { signal: controller.signal }).then((res) => res.json()).then((data) => data.ip);
547
+ const result = await Promise.race([fetchPromise, timeoutPromise]);
548
+ clearTimeout(timeoutId);
549
+ return result;
550
+ }
551
+ var IpifyProvider = class {
552
+ async getIp() {
553
+ if (cachedIp !== void 0) return cachedIp;
554
+ if (inFlightLookup) return inFlightLookup;
555
+ inFlightLookup = (async () => {
556
+ try {
557
+ const ip = await fetchIpFromIpify();
558
+ cachedIp = ip;
559
+ return ip;
560
+ } catch {
561
+ cachedIp = "";
562
+ return "";
563
+ } finally {
564
+ inFlightLookup = void 0;
565
+ }
566
+ })();
567
+ return inFlightLookup;
568
+ }
569
+ };
570
+ //#endregion
331
571
  //#region ../infra/src/device/getDeviceData.ts
332
572
  const HIGH_ENTROPY_HINTS = /* @__PURE__ */ new Set([
333
573
  "model",
@@ -425,171 +665,59 @@ async function getDeviceFingerprintInfo() {
425
665
  }
426
666
  }
427
667
  //#endregion
428
- //#region ../infra/src/scheduling/yieldUntilNextPaint.ts
429
- /**
430
- * Resolves after the browser has had a chance to commit and paint a queued
431
- * render.
432
- *
433
- * Strategy:
434
- * - `requestAnimationFrame` callbacks fire BEFORE the paint of the frame
435
- * they belong to (per the HTML5 "update the rendering" step). If we
436
- * resolve the promise inside a rAF callback, the await-continuation
437
- * runs as a microtask immediately after the callback returns — still
438
- * before the paint phase of that frame. A caller that then blocks the
439
- * main thread (e.g. synchronous WASM `processPhoto`) starves the paint.
440
- * - We therefore chain rAF → setTimeout: the rAF fires before frame N's
441
- * paint, the setTimeout runs as a macrotask scheduled after frame N's
442
- * "update the rendering" step, which the browser will only get to once
443
- * the paint actually lands. By the time setTimeout fires, the paint
444
- * for the queued render is on screen.
445
- * - In environments where rAF never ticks (jsdom, happy-dom, backgrounded
446
- * tabs), a parallel `setTimeout` fallback at 100 ms resolves instead.
447
- * 100 ms is comfortably longer than two real-browser frames so rAF +
448
- * setTimeout wins reliably in any foregrounded browser. (An earlier
449
- * implementation raced rAF against a `MessageChannel` macrotask, but
450
- * MessageChannel drains immediately after the current task's
451
- * microtasks — before the next paint — so it resolved the promise too
452
- * early and defeated the whole point of the helper.)
453
- *
454
- * Lives in infra because it touches browser APIs (`requestAnimationFrame`,
455
- * `setTimeout`) that the architecture rules forbid from core. Core modules
456
- * that need to yield to the browser render loop should import this helper
457
- * directly via its file path.
458
- */
459
- function yieldUntilNextPaint() {
460
- return new Promise((resolve) => {
461
- let resolved = false;
462
- const done = () => {
463
- if (resolved) return;
464
- resolved = true;
465
- resolve();
466
- };
467
- if (typeof requestAnimationFrame === "function") requestAnimationFrame(() => {
468
- requestAnimationFrame(() => {
469
- setTimeout(done, 0);
470
- });
471
- });
472
- setTimeout(done, 100);
473
- });
474
- }
475
- //#endregion
476
- //#region ../infra/src/providers/browser/thumbmarkAdapter.ts
477
- /**
478
- * Adapter for @thumbmarkjs/thumbmarkjs. Single point of dependency so bundlers
479
- * resolve it from infra's node_modules when building apps that depend on core → infra.
480
- */
481
- const THUMBMARK_ALGORITHM = {
482
- algorithmName: "thumbmarkjs",
483
- algorithmVersion: "1.6.4"
484
- };
485
- /**
486
- * `logging` must stay disabled. With it on (the upstream default) `getThumbmark()`
487
- * evaluates a bare, unguarded storage read:
488
- *
489
- * options.logging && !sessionStorage.getItem("_tmjs_l") && Math.random() < 1e-4
490
- *
491
- * Hosts that delete the bare global as a self-XSS mitigation (`delete
492
- * window.sessionStorage`) make that a `ReferenceError`, which would cost us the
493
- * device fingerprint. `logging: false` short-circuits the expression before the
494
- * read. It also stops upstream's 1-in-10 000 telemetry POST to
495
- * api.thumbmarkjs.com. Re-check this when bumping the dependency.
496
- */
497
- const THUMBMARK_OPTIONS = {
498
- logging: false,
499
- yield: yieldUntilNextPaint
500
- };
501
- const lazyThumbmark = BrowserLazyImportProvider.getInstance().create(() => import("./thumbmark.esm-CRc0cYvz.esm.js"), {
502
- label: "Fingerprint",
503
- moduleName: "@thumbmarkjs/thumbmarkjs",
504
- timeoutMs: 1e4,
505
- disabledMessage: "the device fingerprint is unavailable for this attempt."
506
- });
507
- async function getThumbmarkId() {
508
- const module = await lazyThumbmark.load();
509
- if (!module) throw new Error("@thumbmarkjs/thumbmarkjs failed to load");
510
- return (await new module.Thumbmark(THUMBMARK_OPTIONS).get()).thumbmark;
511
- }
512
- //#endregion
513
668
  //#region ../infra/src/providers/browser/FingerprintProvider.ts
514
669
  var FingerprintProvider = class {
515
- constructor(ipLookup) {
670
+ /**
671
+ * @param readVisitorId - The device id to report, or `null` without one;
672
+ * the result then has an empty `visitorId` and no algorithm fields.
673
+ */
674
+ constructor(ipLookup, readVisitorId) {
516
675
  this.ipLookup = ipLookup;
517
- }
518
- prime() {
519
- this.startVisitorId();
520
- }
521
- startVisitorId() {
522
- if (!this.visitorIdPromise) {
523
- this.visitorIdPromise = getThumbmarkId();
524
- this.visitorIdPromise.catch(() => void 0);
525
- }
526
- return this.visitorIdPromise;
676
+ this.readVisitorId = readVisitorId;
527
677
  }
528
678
  async getFingerprint(disableIpify = false) {
529
- const visitorId = await this.startVisitorId();
530
- const [deviceInfo, ip] = await Promise.all([getDeviceFingerprintInfo(), disableIpify ? Promise.resolve("") : this.ipLookup.getIp()]);
679
+ const [visitor, deviceInfo, ip] = await Promise.all([
680
+ this.readVisitorId(),
681
+ getDeviceFingerprintInfo(),
682
+ disableIpify ? Promise.resolve("") : this.ipLookup.getIp()
683
+ ]);
531
684
  return {
532
- visitorId,
685
+ ...visitor ?? { visitorId: "" },
533
686
  ip,
534
- deviceInfo,
535
- ...THUMBMARK_ALGORITHM
687
+ deviceInfo
536
688
  };
537
689
  }
538
690
  };
539
691
  //#endregion
540
- //#region ../infra/src/providers/browser/IpifyProvider.ts
541
- let cachedIp;
542
- let inFlightLookup;
692
+ //#region src/internal/fingerprint/fingerprintApi.ts
693
+ const PID_WAIT_MS = 3e3;
543
694
  /**
544
- * Resets the module-level IP cache. Intended for tests and full session resets.
695
+ * Collects the device fingerprint: device info, the IP, and the Incode pid.
696
+ *
697
+ * `visitorId` is the current session's Incode pid, the device hash
698
+ * user-service returned for the session's PID signal, with the
699
+ * `algorithmName` and `algorithmVersion` it named. While that signal is in
700
+ * flight, this waits up to 3 s for it.
701
+ *
702
+ * Without a session (no token), with `setup({ fingerprint: false })`, or when
703
+ * no pid arrives within 3 s (WASM not loaded, or an older server), `visitorId`
704
+ * is `''` and `algorithmName` and `algorithmVersion` are absent.
705
+ *
706
+ * @param disableIpify - Skip the IP lookup. Defaults to the session's setting.
545
707
  */
546
- function resetIpifyCache() {
547
- cachedIp = void 0;
548
- inFlightLookup = void 0;
549
- }
550
- async function fetchIpFromIpify() {
551
- if (typeof fetch === "undefined") return "";
552
- let timeoutId = 0;
553
- const controller = new AbortController();
554
- if (AbortSignal.timeout) {
555
- const signal = AbortSignal.timeout(3e3);
556
- return (await (await fetch("https://api.ipify.org?format=json", { signal })).json()).ip;
557
- }
558
- const timeoutPromise = new Promise((_, reject) => {
559
- timeoutId = setTimeout(() => {
560
- controller.abort();
561
- reject(/* @__PURE__ */ new Error("Request timeout"));
562
- }, 3e3);
563
- });
564
- const fetchPromise = fetch("https://api.ipify.org?format=json", { signal: controller.signal }).then((res) => res.json()).then((data) => data.ip);
565
- const result = await Promise.race([fetchPromise, timeoutPromise]);
566
- clearTimeout(timeoutId);
567
- return result;
568
- }
569
- var IpifyProvider = class {
570
- async getIp() {
571
- if (cachedIp !== void 0) return cachedIp;
572
- if (inFlightLookup) return inFlightLookup;
573
- inFlightLookup = (async () => {
574
- try {
575
- const ip = await fetchIpFromIpify();
576
- cachedIp = ip;
577
- return ip;
578
- } catch {
579
- cachedIp = "";
580
- return "";
581
- } finally {
582
- inFlightLookup = void 0;
583
- }
584
- })();
585
- return inFlightLookup;
586
- }
587
- };
588
- //#endregion
589
- //#region src/internal/fingerprint/fingerprintApi.ts
590
708
  async function getFingerprint(disableIpify) {
591
709
  const shouldDisableIpify = disableIpify ?? getDisableIpify();
592
- return new FingerprintProvider(new IpifyProvider()).getFingerprint(shouldDisableIpify);
710
+ return new FingerprintProvider(new IpifyProvider(), readSessionPid).getFingerprint(shouldDisableIpify);
711
+ }
712
+ async function readSessionPid() {
713
+ const token = getToken();
714
+ if (!token || !getFingerprintEnabled()) return null;
715
+ const pid = await incodeDeviceHashWaiter.waitFor(token, PID_WAIT_MS);
716
+ return pid ? {
717
+ visitorId: pid.hash,
718
+ algorithmName: pid.algorithmName,
719
+ algorithmVersion: pid.algorithmVersion
720
+ } : null;
593
721
  }
594
722
  //#endregion
595
723
  //#region src/internal/device/hasLiedBrowser.ts
@@ -657,25 +785,37 @@ function formatBrowser(browser) {
657
785
  if (!browser.name || !browser.version) return "Unknown";
658
786
  return `${browser.name} ${browser.version}`;
659
787
  }
788
+ /**
789
+ * The session's activation post: device data (IP, browser, OS) and, when it
790
+ * arrives in time, the pid as the device hash. Mandatory consent rides on its
791
+ * response.
792
+ */
660
793
  async function submitDeviceFingerprint(options = {}, dependencies) {
661
794
  const { disableIpify = false, hostingApp, signal } = options;
662
795
  const token = getToken();
663
- const fingerprint = await dependencies.fingerprintProvider.getFingerprint(disableIpify);
796
+ const [deviceInfo, ip, deviceHash] = await Promise.all([
797
+ getDeviceFingerprintInfo(),
798
+ disableIpify ? Promise.resolve("") : dependencies.ipLookup.getIp(),
799
+ dependencies.getDeviceHash?.() ?? null
800
+ ]);
664
801
  if (getToken() !== token || dependencies.isCurrentSession?.() === false) throw new Error("Session changed during fingerprint collection");
665
802
  const hasLiedBrowser = isBrowserSimulation(dependencies.browserEnv);
666
803
  const payload = {
667
- hash: fingerprint.visitorId || "",
668
- ip: fingerprint.ip || "",
669
- deviceType: "WEBAPP",
670
- data: JSON.stringify(fingerprint),
671
- osVersion: formatOsVersion(fingerprint.deviceInfo.os),
672
- deviceModel: fingerprint.deviceInfo.device.model || "",
673
- browser: formatBrowser(fingerprint.deviceInfo.browser),
804
+ hash: deviceHash?.hash ?? "",
805
+ ip,
806
+ deviceType: SDK_PLATFORM,
807
+ data: JSON.stringify({
808
+ ip,
809
+ deviceInfo
810
+ }),
811
+ osVersion: formatOsVersion(deviceInfo.os),
812
+ deviceModel: deviceInfo.device.model || "",
813
+ browser: formatBrowser(deviceInfo.browser),
674
814
  hasLiedBrowser,
675
815
  sdkVersion: SDK_VERSION,
676
816
  hostingApp: hostingApp ?? "Web SDK",
677
- algorithmName: fingerprint.algorithmName,
678
- algorithmVersion: fingerprint.algorithmVersion
817
+ algorithmName: deviceHash?.algorithmName,
818
+ algorithmVersion: deviceHash?.algorithmVersion
679
819
  };
680
820
  const response = await api.post(endpoints.deviceFingerprint, payload, { signal });
681
821
  if (!response.ok) throw new Error(`Failed to submit fingerprint: ${response.status} ${response.statusText}`);
@@ -718,6 +858,9 @@ let cachedDisableIpify = false;
718
858
  let clientIpLookupEnabled = true;
719
859
  let clientFingerprintEnabled = true;
720
860
  let clientHostingApp;
861
+ let clientWasmConfig;
862
+ let clientWasmDisabled = false;
863
+ const DEVICE_HASH_WAIT_MS = 3e3;
721
864
  function setClientIpLookupEnabled(enabled) {
722
865
  clientIpLookupEnabled = enabled;
723
866
  }
@@ -735,6 +878,79 @@ function setClientFingerprintEnabled(enabled) {
735
878
  clientFingerprintEnabled = enabled;
736
879
  fingerprintSignalsReporter.setEnabled(enabled);
737
880
  }
881
+ /**
882
+ * The known WASM config: from `setup({ wasm })`, `setWasmConfig`, or
883
+ * `<incode-flow>` / `<incode-workflow>`, which pass the config their captures
884
+ * load. Activation loads the WASM runtime only when it is known, so headless
885
+ * hosts that never configured WASM don't download it.
886
+ */
887
+ function setClientWasmConfig(config) {
888
+ clientWasmConfig = config;
889
+ }
890
+ /**
891
+ * `setup({ wasm: false })`: activations load no WASM runtime, so their post
892
+ * sends no device hash, until `setup({ wasm })` or `reset()`.
893
+ */
894
+ function setClientWasmDisabled(disabled) {
895
+ clientWasmDisabled = disabled;
896
+ }
897
+ const SLOW_EFFECTIVE_TYPES = /* @__PURE__ */ new Set([
898
+ "slow-2g",
899
+ "2g",
900
+ "3g"
901
+ ]);
902
+ function isSlowNetwork() {
903
+ const connection = new BrowserEnvironmentProvider().getNavigatorProperty("connection");
904
+ return connection?.saveData === true || SLOW_EFFECTIVE_TYPES.has(connection?.effectiveType);
905
+ }
906
+ /** Why this activation's post won't wait for a pid, if it won't. */
907
+ function deviceHashSkipReason(activationOptedOut) {
908
+ if (activationOptedOut || clientWasmDisabled) return "wasmDisabled";
909
+ if (!clientWasmConfig && !isTRIStarted()) return "noWasmConfig";
910
+ return isSlowNetwork() ? "slowNetwork" : void 0;
911
+ }
912
+ /**
913
+ * TRI first: TRI's fpSignals PID is signed with the same key as the runtime's
914
+ * (old signing format, so one string serves every session), so it goes to
915
+ * user-service unchanged as this session's PID and no runtime starts for it.
916
+ * Without a pid back (fpSignals off, blocked or timed out, or a step-up after
917
+ * the tenant's replay window, 11,100 s by default) the runtime starts for the
918
+ * pid as before. Needs TRI's signed `getFpSignals()`: an older TRI's string is
919
+ * unsigned, so user-service returns no pid and the runtime is used.
920
+ */
921
+ function startSessionPid(token, config) {
922
+ if (!isTRIStarted()) {
923
+ if (config) startSessionWasm(token, config);
924
+ return;
925
+ }
926
+ fingerprintSignalsReporter.sendHostPid(token, async () => (await readTRIFpSignals())?.pid ?? null).then((sent) => {
927
+ if (sent || getToken() !== token) return;
928
+ if (config) startSessionWasm(token, config);
929
+ else incodeDeviceHashWaiter.settle(token, null);
930
+ });
931
+ }
932
+ /**
933
+ * Starts the WASM runtime, without models, so the PID signal can return the
934
+ * pid while activation runs: it is the device hash of the activation post.
935
+ * Capture modules add their pipelines later. A runtime that fails to start
936
+ * ends the post's wait at once.
937
+ */
938
+ function startSessionWasm(token, config) {
939
+ (async () => {
940
+ try {
941
+ const warmupModule = await import("./warmup-DtB0DJpl.esm.js").then((n) => n.c);
942
+ const warmup = warmupModule.warmupWasm({
943
+ ...config,
944
+ pipelines: []
945
+ });
946
+ warmup.catch(() => void 0);
947
+ await Promise.race([warmup, warmupModule.whenWasmRuntimeReady()]);
948
+ fingerprintSignalsReporter.onWasmReady();
949
+ } catch {
950
+ incodeDeviceHashWaiter.settle(token, null);
951
+ }
952
+ })();
953
+ }
738
954
  function resolveDisableIpify(serverDisableIpify) {
739
955
  return !clientIpLookupEnabled || serverDisableIpify;
740
956
  }
@@ -773,6 +989,24 @@ function whenSessionFingerprintSettled() {
773
989
  return fingerprintSettled?.promise ?? Promise.resolve(cachedFingerprintResult);
774
990
  }
775
991
  /**
992
+ * A screen now waits for the activation post (its consent decision), so the
993
+ * post stops waiting for the pid and goes with what it has. The pid needs the
994
+ * WASM runtime to download and start, about 2 s even on a fast desktop, so it
995
+ * goes with the post only when it is in before the post goes out.
996
+ */
997
+ function endDeviceHashWait() {
998
+ const token = getToken();
999
+ if (token) incodeDeviceHashWaiter.release(token);
1000
+ }
1001
+ /** Best-effort: the format latch must never fail session initialization. */
1002
+ function applyCaptureMetadataFormat(v2Enabled) {
1003
+ try {
1004
+ setWasmMetadataV2Enabled(v2Enabled);
1005
+ } catch (error) {
1006
+ trueSightLog("warning", "session", "orchestration", `capture metadata format not applied error=${String(error)}`);
1007
+ }
1008
+ }
1009
+ /**
776
1010
  * Activates a session by setting the auth token on the HTTP client and
777
1011
  * preloading session-scoped state.
778
1012
  *
@@ -802,7 +1036,7 @@ function whenSessionFingerprintSettled() {
802
1036
  * ```
803
1037
  */
804
1038
  async function initializeSession(options = {}) {
805
- const { token, hostingApp = clientHostingApp, signal, preloadFlow, awaitFingerprint = true } = options;
1039
+ const { token, hostingApp = clientHostingApp, signal, preloadFlow, awaitFingerprint = true, wasm } = options;
806
1040
  let triLinkPromise = Promise.resolve();
807
1041
  if (token !== void 0 && token !== getToken()) {
808
1042
  setToken(token);
@@ -835,32 +1069,37 @@ async function initializeSession(options = {}) {
835
1069
  }
836
1070
  const settled = createFingerprintSettled();
837
1071
  fingerprintSettled = settled;
838
- const fingerprintProvider = clientFingerprintEnabled ? new FingerprintProvider(new IpifyProvider()) : void 0;
839
- fingerprintProvider?.prime?.();
1072
+ const fingerprintEnabled = clientFingerprintEnabled;
1073
+ const activeToken = getToken();
1074
+ const skipReason = deviceHashSkipReason(wasm === false);
1075
+ if (activeToken && fingerprintEnabled && !skipReason) startSessionPid(activeToken, clientWasmConfig);
840
1076
  let fingerprintPromise;
841
1077
  sessionInitPromise = (async () => {
842
1078
  let features;
843
1079
  let serverDisableIpify = false;
1080
+ let captureMetadataV2 = false;
844
1081
  try {
845
- features = await fetchFeatureConfig(signal);
1082
+ features = await retryAfterReconnect(() => fetchFeatureConfig(signal), signal);
846
1083
  serverDisableIpify = isFeatureEnabled("DISABLE_IPIFY", features.features);
1084
+ captureMetadataV2 = isFeatureEnabled("DEEPSIGHT_V2", features.features);
847
1085
  startTrueSightCollection(features);
848
1086
  } catch {
849
1087
  features = { sessionIdentifier: "" };
850
1088
  trueSightLog("warning", "session", "orchestration", "feature-config fetch failed");
851
1089
  startTrueSightCollection();
852
1090
  }
1091
+ applyCaptureMetadataFormat(captureMetadataV2);
853
1092
  const disableIpify = resolveDisableIpify(serverDisableIpify);
1093
+ fingerprintPromise = submitSessionFingerprint(fingerprintEnabled, {
1094
+ disableIpify,
1095
+ hostingApp,
1096
+ signal
1097
+ }, settled, skipReason);
854
1098
  const preloadedFlow = await flowPreloadPromise;
855
1099
  await updateFeatureManagementUser({ customIDs: {
856
1100
  hashed_onboarding_id: features.sessionIdentifier || void 0,
857
1101
  flow_id: preloadedFlow?.flowId
858
1102
  } });
859
- fingerprintPromise = submitSessionFingerprint(fingerprintProvider, {
860
- disableIpify,
861
- hostingApp,
862
- signal
863
- }, settled);
864
1103
  try {
865
1104
  const browserInfo = new BrowserInfoProvider().getBrowserInfo();
866
1105
  const language = new BrowserEnvironmentProvider().getNavigatorProperty("language");
@@ -910,25 +1149,43 @@ async function initializeSession(options = {}) {
910
1149
  * while it still belongs to the current activation (a token change resets
911
1150
  * `fingerprintSettled`) and always settles the waiter.
912
1151
  */
913
- async function submitSessionFingerprint(fingerprintProvider, options, settled) {
1152
+ async function submitSessionFingerprint(enabled, options, settled, skipReason) {
914
1153
  const isCurrent = () => fingerprintSettled === settled;
1154
+ const token = getToken();
1155
+ const startedAtMs = getTimestamp();
1156
+ const deadlineMs = startedAtMs + DEVICE_HASH_WAIT_MS;
1157
+ let outcomeLogged = false;
1158
+ const logOutcome = (outcome) => {
1159
+ if (!outcomeLogged) {
1160
+ outcomeLogged = true;
1161
+ trueSightLog("info", "session", "other", `device hash ${outcome}`);
1162
+ }
1163
+ };
1164
+ const getDeviceHash = !skipReason && token ? async () => {
1165
+ const deviceHash = await incodeDeviceHashWaiter.waitFor(token, deadlineMs - getTimestamp());
1166
+ logOutcome(`${deviceHash ? "sent" : "missing"} waitMs=${getTimestamp() - startedAtMs}`);
1167
+ return deviceHash;
1168
+ } : void 0;
915
1169
  try {
916
- if (fingerprintProvider) try {
917
- const result = await submitDeviceFingerprint(options, {
918
- fingerprintProvider,
919
- browserEnv: new BrowserEnvironmentProvider(),
920
- isCurrentSession: isCurrent
921
- });
922
- if (isCurrent()) {
923
- cachedFingerprintResult = result;
924
- cachedFingerprintSuccess = true;
925
- flushDeviceStatsQueue();
1170
+ if (enabled) {
1171
+ if (skipReason) logOutcome(`skipped reason=${skipReason}`);
1172
+ try {
1173
+ const result = await retryAfterReconnect(() => submitDeviceFingerprint(options, {
1174
+ ipLookup: new IpifyProvider(),
1175
+ browserEnv: new BrowserEnvironmentProvider(),
1176
+ isCurrentSession: isCurrent,
1177
+ getDeviceHash
1178
+ }), options.signal);
1179
+ if (isCurrent()) {
1180
+ cachedFingerprintResult = result;
1181
+ cachedFingerprintSuccess = true;
1182
+ flushDeviceStatsQueue();
1183
+ }
1184
+ } catch (error) {
1185
+ console.warn("Failed to submit device fingerprint:", error);
1186
+ trueSightLog("warning", "session", "other", "device fingerprint submit failed");
926
1187
  }
927
- } catch (error) {
928
- console.warn("Failed to submit device fingerprint:", error);
929
- trueSightLog("warning", "session", "other", "device fingerprint submit failed");
930
- }
931
- else if (isCurrent()) flushDeviceStatsQueue();
1188
+ } else if (isCurrent()) flushDeviceStatsQueue();
932
1189
  } finally {
933
1190
  settled.resolve(isCurrent() ? cachedFingerprintResult : void 0);
934
1191
  }
@@ -957,7 +1214,9 @@ function getFingerprintEnabled() {
957
1214
  * Useful for testing or when starting a new session.
958
1215
  */
959
1216
  function resetSessionInit() {
1217
+ applyCaptureMetadataFormat(false);
960
1218
  fingerprintSignalsReporter.resetSession();
1219
+ incodeDeviceHashWaiter.reset();
961
1220
  sessionInitialized = false;
962
1221
  cachedFeatures = null;
963
1222
  cachedDisableIpify = false;
@@ -970,4 +1229,4 @@ function resetSessionInit() {
970
1229
  resetDeviceStatsQueue();
971
1230
  }
972
1231
  //#endregion
973
- export { IpifyProvider as _, resetSessionInit as a, BrowserEnvironmentProvider as b, setClientIpLookupEnabled as c, registerFlowPreloader as d, resetStandaloneFlowPolicy as f, getFingerprint as g, isBrowserSimulation as h, initializeSession as i, whenSessionFingerprintSettled as l, setStandaloneFlowPolicy as m, getFingerprintEnabled as n, setClientFingerprintEnabled as o, resolveStandaloneFlowPolicy as p, getSessionFingerprintResult as r, setClientHostingApp as s, getDisableIpify as t, getStandaloneFlowPolicy as u, getThumbmarkId as v, fingerprintSignalsReporter as x, getDeviceFingerprintInfo as y };
1232
+ export { fingerprintSignalsReporter as C, BrowserEnvironmentProvider as S, setStandaloneFlowPolicy as _, initializeSession as a, getDeviceFingerprintInfo as b, setClientHostingApp as c, setClientWasmDisabled as d, whenSessionFingerprintSettled as f, resolveStandaloneFlowPolicy as g, resetStandaloneFlowPolicy as h, getSessionFingerprintResult as i, setClientIpLookupEnabled as l, registerFlowPreloader as m, getDisableIpify as n, resetSessionInit as o, getStandaloneFlowPolicy as p, getFingerprintEnabled as r, setClientFingerprintEnabled as s, endDeviceHashWait as t, setClientWasmConfig as u, isBrowserSimulation as v, SDK_PLATFORM as w, IpifyProvider as x, getFingerprint as y };