@incodetech/core 2.0.1-rc.0 → 2.1.0-rc.0

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 (218) hide show
  1. package/dist/{BrowserStorageProvider-CuOW1Er2.esm.js → BrowserStorageProvider-BpJM-gIl.esm.js} +8 -1
  2. package/dist/{IpifyProvider-D7jx52AL.esm.js → IpifyProvider-D4LWD15E.esm.js} +28 -0
  3. package/dist/{MotionSensorProvider-4v7xkqAp.esm.js → MotionSensorProvider-Bx7Mpzt0.esm.js} +63 -13
  4. package/dist/{OpenViduRecordingProvider-CMu6XVdc.esm.js → OpenViduRecordingProvider-O4GjBseO.esm.js} +1 -1
  5. package/dist/StateMachine-BC_nGvrc.d.ts +2 -0
  6. package/dist/StreamCanvasCapture-ImiDQdVA.esm.js +118 -0
  7. package/dist/StreamCanvasCapture-yyl20qd9.d.ts +152 -0
  8. package/dist/{BaseWasmProvider-C_DLEI40.esm.js → WasmUtilProvider-CiEN7Gjn.esm.js} +183 -11
  9. package/dist/{addressSearch-BpTbTWCa.esm.js → addressSearch-DvmWXKZg.esm.js} +63 -57
  10. package/dist/{ae-signature-DDDZmWXj.esm.js → ae-signature-BFZta3TZ.esm.js} +1 -1
  11. package/dist/ae-signature.d.ts +3 -3
  12. package/dist/ae-signature.esm.js +6 -5
  13. package/dist/antifraud.d.ts +5 -46
  14. package/dist/antifraud.esm.js +6 -43
  15. package/dist/antifraudManager-CkV4u-LE.esm.js +55 -0
  16. package/dist/antifraudManager-CznnhyvD.d.ts +63 -0
  17. package/dist/{antifraudStateMachine-O0TMf6yc.esm.js → antifraudStateMachine-Ccrb-Jxc.esm.js} +2 -2
  18. package/dist/apiError-B-j-gyDx.esm.js +51 -0
  19. package/dist/authentication.d.ts +13 -11
  20. package/dist/authentication.esm.js +26 -22
  21. package/dist/{authenticationManager-C83GNIhl.d.ts → authenticationManager-CIVY80H9.d.ts} +4 -4
  22. package/dist/{authenticationManager-5M-fKzXx.esm.js → authenticationManager-ZNotsWnC.esm.js} +6 -6
  23. package/dist/{authenticationStateMachine-BMZqatiF.esm.js → authenticationStateMachine-DksVbF_H.esm.js} +21 -9
  24. package/dist/{backCameraStream-DMdMeGk2.esm.js → backCameraStream-D7Wo4Nbx.esm.js} +95 -7
  25. package/dist/{session-CGtQJJzB.esm.js → browserSimulation-B1dWiXp7.esm.js} +61 -476
  26. package/dist/camera.d.ts +4 -3
  27. package/dist/camera.esm.js +4 -3
  28. package/dist/canvas-SKcRBxsk.esm.js +230 -0
  29. package/dist/consent.d.ts +4 -398
  30. package/dist/consent.esm.js +6 -77
  31. package/dist/consentManager-BLd51QiW.d.ts +419 -0
  32. package/dist/consentManager-BYo9Nu1r.esm.js +90 -0
  33. package/dist/{consentStateMachine-CCT-B60O.esm.js → consentStateMachine-BG3yL8aC.esm.js} +9 -6
  34. package/dist/cpf-ocr.d.ts +4 -199
  35. package/dist/cpf-ocr.esm.js +8 -177
  36. package/dist/cpfOcrManager-BnieFXuG.d.ts +216 -0
  37. package/dist/cpfOcrManager-sSKegxox.esm.js +190 -0
  38. package/dist/cross-document-data-match.d.ts +1 -1
  39. package/dist/cross-document-data-match.esm.js +4 -4
  40. package/dist/curp-validation.d.ts +8 -158
  41. package/dist/curp-validation.esm.js +6 -108
  42. package/dist/curpValidationManager-CFem6zP9.esm.js +122 -0
  43. package/dist/curpValidationManager-RttixpIc.d.ts +184 -0
  44. package/dist/{curpValidationStateMachine-CitWLr2c.esm.js → curpValidationStateMachine-B7V_qp66.esm.js} +20 -13
  45. package/dist/custom-fields.d.ts +2 -2
  46. package/dist/custom-fields.esm.js +4 -4
  47. package/dist/custom-watchlist.d.ts +1 -1
  48. package/dist/custom-watchlist.esm.js +4 -41
  49. package/dist/customWatchlistStateMachine-HmFybXLX.esm.js +50 -0
  50. package/dist/{deepsightLoader-Cm4JIT_z.esm.js → deepsightLoader-65k1Appi.esm.js} +19 -10
  51. package/dist/{deepsightService-CEVxzehb.d.ts → deepsightService-B7ShOkWL.d.ts} +8 -160
  52. package/dist/deepsightService-CrHmvx8X.esm.js +276 -0
  53. package/dist/device.esm.js +4 -3
  54. package/dist/document-capture.d.ts +992 -83
  55. package/dist/document-capture.esm.js +34 -8
  56. package/dist/document-upload.d.ts +47 -47
  57. package/dist/document-upload.esm.js +7 -7
  58. package/dist/{documentCaptureStateMachine-BqzTDy9k.esm.js → documentCaptureStateMachine-WYV1r9le.esm.js} +90 -6
  59. package/dist/dynamic-forms.d.ts +20 -5
  60. package/dist/dynamic-forms.esm.js +150 -61
  61. package/dist/ekyb.d.ts +32 -13
  62. package/dist/ekyb.esm.js +25 -15
  63. package/dist/{ekybStateMachine-BR2let5f.esm.js → ekybStateMachine-aYixw2sL.esm.js} +319 -207
  64. package/dist/ekyc.d.ts +10 -78
  65. package/dist/ekyc.esm.js +17 -12
  66. package/dist/{ekycStateMachine-oeO0Iekd.esm.js → ekycStateMachine-CXbpaJJn.esm.js} +201 -113
  67. package/dist/electronic-signature.d.ts +3 -3
  68. package/dist/electronic-signature.esm.js +5 -4
  69. package/dist/{electronicSignatureManager-D9OHzTpG.esm.js → electronicSignatureManager-BaECdJ1u.esm.js} +91 -23
  70. package/dist/email.d.ts +4 -3
  71. package/dist/email.esm.js +6 -5
  72. package/dist/{emailManager-wAV0LE-H.esm.js → emailManager--D5G3ChB.esm.js} +30 -7
  73. package/dist/{emailManager-DIfnS5g1.d.ts → emailManager-lAzDoQOs.d.ts} +66 -8
  74. package/dist/{emailStateMachine-DOf4j58N.esm.js → emailStateMachine-CxTOMAjC.esm.js} +46 -11
  75. package/dist/{endpoints-CnN3SyDa.esm.js → endpoints-BeTK0Mlt.esm.js} +6 -3
  76. package/dist/{events-D6-e4vok.esm.js → events-Dvvriq9l.esm.js} +3 -1
  77. package/dist/events.d.ts +2 -0
  78. package/dist/events.esm.js +1 -1
  79. package/dist/extensibility.d.ts +32 -16
  80. package/dist/extensibility.esm.js +55 -33
  81. package/dist/face-match.d.ts +32 -2
  82. package/dist/face-match.esm.js +5 -5
  83. package/dist/{faceCaptureManagerFactory-yqtpxjnN.d.ts → faceCaptureManagerFactory-C_hRHx8a.d.ts} +35 -11
  84. package/dist/{faceCaptureManagerFactory-Dh2PdGlF.esm.js → faceCaptureManagerFactory-kqbUqtrr.esm.js} +21 -5
  85. package/dist/{faceCaptureSetup-B3faSpYA.esm.js → faceCaptureSetup-CtvHWd3x.esm.js} +68 -183
  86. package/dist/{faceMatchStateMachine-DNFrxTFS.esm.js → faceMatchStateMachine-DdGXUBnx.esm.js} +60 -6
  87. package/dist/field-comparison.d.ts +4 -0
  88. package/dist/field-comparison.esm.js +7 -0
  89. package/dist/fieldComparisonManager-Bu5TaSr3.d.ts +76 -0
  90. package/dist/fieldComparisonManager-COGI2ARD.esm.js +162 -0
  91. package/dist/fiscal-qr.d.ts +59 -0
  92. package/dist/fiscal-qr.esm.js +323 -0
  93. package/dist/flow-events.d.ts +6 -5
  94. package/dist/flow.d.ts +23 -15
  95. package/dist/flow.esm.js +63 -17
  96. package/dist/flowCompletionService-BdR2cGgB.d.ts +19 -0
  97. package/dist/flowCompletionService-DdGojV9K.esm.js +20 -0
  98. package/dist/{flowServices-DG3IdWw6.esm.js → flowServices-BTuHLHVr.esm.js} +10 -5
  99. package/dist/geolocation.d.ts +4 -4
  100. package/dist/geolocation.esm.js +6 -6
  101. package/dist/{geolocationStateMachine-asasuHY2.esm.js → geolocationStateMachine-Dvh7X0wF.esm.js} +5 -5
  102. package/dist/getBrowser-C8DP7oTB.esm.js +8 -0
  103. package/dist/{getBrowser-BSXUTWXw.esm.js → getDeviceClass-C0olyNFS.esm.js} +1 -8
  104. package/dist/{getDeviceClass-BSntT9_j.esm.js → getDeviceClass-C8Do2qYu.esm.js} +1 -1
  105. package/dist/government-validation.d.ts +28 -8
  106. package/dist/government-validation.esm.js +19 -8
  107. package/dist/{governmentValidationStateMachine-BDDYrJTo.esm.js → governmentValidationStateMachine-DcJ-BfsC.esm.js} +35 -77
  108. package/dist/home.d.ts +15 -14
  109. package/dist/home.esm.js +2 -2
  110. package/dist/http-Cai3IoLS.esm.js +0 -0
  111. package/dist/http.esm.js +1 -0
  112. package/dist/id-ocr.d.ts +54 -54
  113. package/dist/id-ocr.esm.js +5 -5
  114. package/dist/id-verification.d.ts +27 -27
  115. package/dist/id-verification.esm.js +4 -4
  116. package/dist/id.d.ts +12 -10
  117. package/dist/id.esm.js +36 -26
  118. package/dist/{idCaptureManager-Fyd0eam-.d.ts → idCaptureManager-D-QYESvF.d.ts} +28 -14
  119. package/dist/{idCaptureManager-ZPkD7Gjk.esm.js → idCaptureManager-DGVv5l1_.esm.js} +22 -7
  120. package/dist/{idCaptureStateMachine-BK0bPHoc.esm.js → idCaptureStateMachine-DHi7HydI.esm.js} +172 -123
  121. package/dist/{idOcrStateMachine-YbjjC_Gg.esm.js → idOcrStateMachine-CDQ5d_VM.esm.js} +4 -4
  122. package/dist/{idVerificationStateMachine-xbw9HP1Z.esm.js → idVerificationStateMachine-kRxwImzO.esm.js} +2 -2
  123. package/dist/identity-reuse.d.ts +4 -530
  124. package/dist/identity-reuse.esm.js +8 -274
  125. package/dist/identityReuseManager-C6n_97dw.esm.js +95 -0
  126. package/dist/identityReuseManager-DwLtVzUn.d.ts +428 -0
  127. package/dist/identityReuseStateMachine-BfE5YiEr.esm.js +148 -0
  128. package/dist/{index-BcRG8rtJ.d.ts → index-B5hPA0Bg.d.ts} +2 -2
  129. package/dist/{index-DZoqeAo9.d.ts → index-B9NysVDB.d.ts} +469 -195
  130. package/dist/index.d.ts +2 -2
  131. package/dist/index.esm.js +10 -8
  132. package/dist/{invokeOnCaptureCallback-rc6kBHo5.esm.js → invokeOnCaptureCallback-ygByVdnn.esm.js} +1 -1
  133. package/dist/{lib-BB0B_qQX.esm.js → lib-BY67lgbq.esm.js} +1 -1
  134. package/dist/mandatory-consent.d.ts +8 -412
  135. package/dist/mandatory-consent.esm.js +6 -76
  136. package/dist/mandatoryConsentManager-H6D18cZB.esm.js +89 -0
  137. package/dist/mandatoryConsentManager-KfIlURRY.d.ts +429 -0
  138. package/dist/{mandatoryConsentStateMachine-Cnco1jvn.esm.js → mandatoryConsentStateMachine-DtQNW1ji.esm.js} +6 -6
  139. package/dist/openviduLazy-B8L--0oe.esm.js +3 -0
  140. package/dist/{openviduLazy-Cok70ZSg.esm.js → openviduLazy-Dh14JNJc.esm.js} +2 -2
  141. package/dist/otp-CGMdUzBC.esm.js +33 -0
  142. package/dist/otp-DF5A0sFx.d.ts +8 -0
  143. package/dist/permissionGuards-C1ispV96.esm.js +23 -0
  144. package/dist/permissionServices-CG3bMSfG.esm.js +130 -0
  145. package/dist/phone.d.ts +4 -3
  146. package/dist/phone.esm.js +6 -5
  147. package/dist/{phoneManager-DAJbGhlY.esm.js → phoneManager-BmF-0Ez4.esm.js} +30 -7
  148. package/dist/{phoneManager-B6M30hKE.d.ts → phoneManager-fPmIBYQK.d.ts} +65 -7
  149. package/dist/{phoneStateMachine-CuPARRaT.esm.js → phoneStateMachine-BiV0yoEx.esm.js} +46 -11
  150. package/dist/{qe-signature-DFo_Cc-I.esm.js → qe-signature-CUYPcHVo.esm.js} +1 -1
  151. package/dist/qe-signature.d.ts +3 -3
  152. package/dist/qe-signature.esm.js +6 -5
  153. package/dist/{recordingService-Ig2UgbLv.esm.js → recordingService-Bn9EdCmz.esm.js} +197 -179
  154. package/dist/redirect-to-mobile.d.ts +6 -104
  155. package/dist/redirect-to-mobile.esm.js +6 -99
  156. package/dist/redirectToMobileManager-BNe3IzC_.d.ts +178 -0
  157. package/dist/redirectToMobileManager-Dy3t7o0C.esm.js +159 -0
  158. package/dist/{redirectToMobileStateMachine-BOEqe46A.esm.js → redirectToMobileStateMachine-DyAdRxfP.esm.js} +28 -19
  159. package/dist/{runChildModule-CqqwqAkW.esm.js → runChildModule-CuoHZ1cx.esm.js} +35 -3
  160. package/dist/selfie.d.ts +13 -11
  161. package/dist/selfie.esm.js +27 -23
  162. package/dist/{selfieManager-Duisl7qN.esm.js → selfieManager-BjCoKRy0.esm.js} +6 -6
  163. package/dist/{selfieManager-D0lSgd-J.d.ts → selfieManager-dUbKRzOh.d.ts} +4 -4
  164. package/dist/{selfieStateMachine-D76whWEf.esm.js → selfieStateMachine-b4F2q9zw.esm.js} +5 -3
  165. package/dist/session-DoVb-OcB.esm.js +152 -0
  166. package/dist/session.d.ts +37 -5
  167. package/dist/session.esm.js +12 -7
  168. package/dist/sessionInitializer-B8H5MsXM.esm.js +366 -0
  169. package/dist/{setup-C5AITV8m.d.ts → setup-BbkprdVv.d.ts} +57 -6
  170. package/dist/{setup-DsM8IG7k.esm.js → setup-BqEfrdja.esm.js} +162 -24
  171. package/dist/signature.d.ts +2 -2
  172. package/dist/signature.esm.js +4 -4
  173. package/dist/{signatureStateMachine-B5-QVUve.esm.js → signatureStateMachine-C5qqYLRz.esm.js} +3 -3
  174. package/dist/stats-BMNUG1AU.esm.js +41 -0
  175. package/dist/stats.d.ts +13 -2
  176. package/dist/stats.esm.js +3 -2
  177. package/dist/trust-graph.d.ts +33 -4
  178. package/dist/trust-graph.esm.js +21 -15
  179. package/dist/{types-CFV9G_7j.d.ts → types-Bj9hdFjU.d.ts} +1 -1
  180. package/dist/{types-BP1m8VRw.d.ts → types-DOUhndhT.d.ts} +14 -2
  181. package/dist/types-DsnEVMhr.esm.js +34 -0
  182. package/dist/types-DvGZI7BF.d.ts +131 -0
  183. package/dist/{types-B06Ypu2F.d.ts → types-NuT8ftBV.d.ts} +1 -1
  184. package/dist/types-ya0LN_MX.d.ts +5 -0
  185. package/dist/{warmup-CEcppFiS.d.ts → warmup-Dg8Lh-50.d.ts} +8 -0
  186. package/dist/wasm.d.ts +6 -4
  187. package/dist/wasm.esm.js +11 -9
  188. package/dist/watchlist-for-business.d.ts +1 -1
  189. package/dist/watchlist-for-business.esm.js +5 -73
  190. package/dist/watchlist.d.ts +1 -1
  191. package/dist/watchlist.esm.js +4 -41
  192. package/dist/watchlistForBusinessStateMachine-DMl8j2Ov.esm.js +74 -0
  193. package/dist/watchlistStateMachine-DmQlqI6L.esm.js +50 -0
  194. package/dist/workflow.d.ts +153 -100
  195. package/dist/workflow.esm.js +156 -80
  196. package/package.json +19 -1
  197. package/dist/StateMachine-BCQrZJhf.d.ts +0 -2
  198. package/dist/WasmUtilProvider-j98OJf-S.esm.js +0 -114
  199. package/dist/browserSimulation-gxD8cSpM.esm.js +0 -20
  200. package/dist/deepsightService-O74l4Y__.esm.js +0 -489
  201. package/dist/displayErrors-DqJ_IbsG.d.ts +0 -39
  202. package/dist/flowCompletionService-DhkT4SRY.d.ts +0 -10
  203. package/dist/flowCompletionService-P54yzGvA.esm.js +0 -13
  204. package/dist/openviduLazy-Cm0XFh_v.esm.js +0 -3
  205. package/dist/permissionServices-D_i6nzEw.esm.js +0 -50
  206. package/dist/stats-CIfiPzb1.esm.js +0 -16
  207. package/dist/types-CAD4va6a.d.ts +0 -5
  208. package/dist/watchlistServices-DMbUhkBX.esm.js +0 -12
  209. /package/dist/{Actor-CI32dTbG.d.ts → Actor-Y0_Fj-KL.d.ts} +0 -0
  210. /package/dist/{ITimerCapability-C67ZRskg.esm.js → ITimerCapability-CB0I1Uf2.esm.js} +0 -0
  211. /package/dist/{Manager-C8PrhBOx.d.ts → Manager-BHn8wH8K.d.ts} +0 -0
  212. /package/dist/{camera-PA2Ljri3.esm.js → camera-DJWm3V4g.esm.js} +0 -0
  213. /package/dist/{camera-DBSxa6ML.d.ts → camera-SRBpPq2X.d.ts} +0 -0
  214. /package/dist/{chunk-CRF6K_H_.esm.js → chunk-CMUKZ2uL.esm.js} +0 -0
  215. /package/dist/{cpf-PPz2Njto.esm.js → cpf-BRzggV8G.esm.js} +0 -0
  216. /package/dist/{dateUtils-UoN5xswP.esm.js → dateUtils-AksLQmgV.esm.js} +0 -0
  217. /package/dist/{platform-CfrjKhmi.esm.js → platform-SKvEfCBh.esm.js} +0 -0
  218. /package/dist/{xstate.esm-B70JrNqo.esm.js → xstate.esm-C9wncMQa.esm.js} +0 -0
@@ -1,9 +1,11 @@
1
1
  import { t as api } from "./api-CESGtpbH.esm.js";
2
- import { t as endpoints } from "./endpoints-CnN3SyDa.esm.js";
3
- import { a as fromPromise, r as assign } from "./xstate.esm-B70JrNqo.esm.js";
4
- import { a as prepareOnDeviceFaceUpload, i as postOnDeviceFaceResults, n as defaultPrepareFaceUpload, r as isOnDeviceMode, t as faceCaptureMachine } from "./faceCaptureSetup-B3faSpYA.esm.js";
5
- import { m as FACE_ERROR_CODES } from "./recordingService-Ig2UgbLv.esm.js";
6
- import { t as getDeviceClass } from "./getDeviceClass-BSntT9_j.esm.js";
2
+ import { t as endpoints } from "./endpoints-BeTK0Mlt.esm.js";
3
+ import { t as addDeviceStats } from "./stats-BMNUG1AU.esm.js";
4
+ import { a as fromPromise, r as assign } from "./xstate.esm-C9wncMQa.esm.js";
5
+ import { a as defaultPrepareFaceUpload, c as prepareOnDeviceFaceUpload, o as isOnDeviceMode, s as postOnDeviceFaceResults } from "./recordingService-Bn9EdCmz.esm.js";
6
+ import { t as getDeviceClass } from "./getDeviceClass-C8Do2qYu.esm.js";
7
+ import { t as FACE_ERROR_CODES } from "./types-DsnEVMhr.esm.js";
8
+ import { t as faceCaptureMachine } from "./faceCaptureSetup-CtvHWd3x.esm.js";
7
9
 
8
10
  //#region src/modules/authentication/authenticationErrorUtils.ts
9
11
  const AUTH_ERROR_MAP = {
@@ -27,7 +29,7 @@ const AUTH_ERROR_MAP = {
27
29
  NONEXISTENT_CUSTOMER: FACE_ERROR_CODES.NONEXISTENT_CUSTOMER,
28
30
  HINT_NOT_PROVIDED: FACE_ERROR_CODES.HINT_NOT_PROVIDED
29
31
  };
30
- const TERMINAL_AUTH_ERROR_CODES = [FACE_ERROR_CODES.NONEXISTENT_CUSTOMER, FACE_ERROR_CODES.HINT_NOT_PROVIDED];
32
+ const NON_RETRYABLE_AUTH_ERROR_CODES = [FACE_ERROR_CODES.NONEXISTENT_CUSTOMER, FACE_ERROR_CODES.HINT_NOT_PROVIDED];
31
33
  const validateAuthUploadResponse = (response) => {
32
34
  if (!response) return FACE_ERROR_CODES.SERVER;
33
35
  if (response.overallStatus !== "PASS") return AUTH_ERROR_MAP[response.error?.name] ?? FACE_ERROR_CODES.SERVER;
@@ -35,7 +37,7 @@ const validateAuthUploadResponse = (response) => {
35
37
  const isTerminalAuthError = (response, attemptsRemaining) => {
36
38
  if (!response) return false;
37
39
  const mappedError = AUTH_ERROR_MAP[response.error?.name];
38
- if (mappedError && TERMINAL_AUTH_ERROR_CODES.includes(mappedError)) return true;
40
+ if (mappedError && NON_RETRYABLE_AUTH_ERROR_CODES.includes(mappedError)) return true;
39
41
  if (attemptsRemaining <= 0) return true;
40
42
  return false;
41
43
  };
@@ -59,6 +61,12 @@ async function uploadAuthFace(params) {
59
61
  query
60
62
  });
61
63
  if (!res.ok) throw new Error(`POST ${endpoints.authenticate} failed: ${res.status} ${res.statusText}`);
64
+ if (params.deepsightService) addDeviceStats({
65
+ frontIdStatsAnalysisStatus: "",
66
+ backIdStatsAnalysisStatus: "",
67
+ selfieStatsAnalysisStatus: params.deepsightService.getAnalysisStatus(),
68
+ motionStatus: params.deepsightService.getMotionStatus()
69
+ });
62
70
  return res.data;
63
71
  } catch (error) {
64
72
  const errorCode = getAuthErrorCodeFromHttpError(error);
@@ -92,6 +100,7 @@ const _authenticationMachine = faceCaptureMachine.provide({
92
100
  authHint: ctx.authHint,
93
101
  metadata: ctx.deepsightService?.getMetadata(),
94
102
  recordingId: ctx.uploadRecordingId,
103
+ deepsightService: ctx.deepsightService ?? void 0,
95
104
  signal
96
105
  });
97
106
  }),
@@ -105,9 +114,11 @@ const _authenticationMachine = faceCaptureMachine.provide({
105
114
  } }),
106
115
  setTerminalError: assign({ error: ({ context }) => {
107
116
  const resp = context.uploadResponse;
117
+ const moduleErrorCode = resp ? AUTH_ERROR_MAP[resp.error?.name] : void 0;
108
118
  if (context.attemptsRemaining <= 0) return {
109
119
  type: "FACE_AUTH_ERROR",
110
- message: "No more attempts remaining"
120
+ message: "No more attempts remaining",
121
+ moduleErrorCode
111
122
  };
112
123
  if (!resp) return {
113
124
  type: "FACE_AUTH_ERROR",
@@ -115,7 +126,8 @@ const _authenticationMachine = faceCaptureMachine.provide({
115
126
  };
116
127
  return {
117
128
  type: "FACE_AUTH_ERROR",
118
- message: resp.error?.message ?? resp.error?.name ?? "Face authentication error"
129
+ message: resp.error?.message ?? resp.error?.name ?? "Face authentication error",
130
+ moduleErrorCode
119
131
  };
120
132
  } })
121
133
  },
@@ -1,6 +1,6 @@
1
- import { t as sleep } from "./ITimerCapability-C67ZRskg.esm.js";
2
- import { i as stopCameraStream, n as enumerateVideoDevices, r as requestCameraAccess, t as applyTrackConstraints } from "./camera-PA2Ljri3.esm.js";
3
- import { a as isIPhone14OrHigher, o as isSafari, r as isIOS, t as isAndroid } from "./platform-CfrjKhmi.esm.js";
1
+ import { a as isIPhone14OrHigher, o as isSafari, r as isIOS, t as isAndroid } from "./platform-SKvEfCBh.esm.js";
2
+ import { i as stopCameraStream, n as enumerateVideoDevices, r as requestCameraAccess, t as applyTrackConstraints } from "./camera-DJWm3V4g.esm.js";
3
+ import { t as sleep } from "./ITimerCapability-CB0I1Uf2.esm.js";
4
4
 
5
5
  //#region src/internal/camera/backCameraStream.ts
6
6
  const BACK_CAMERA_KEYWORDS = [
@@ -314,12 +314,12 @@ function getDesktopVideoConstraints(level) {
314
314
  }
315
315
  }
316
316
  function getDesktopConstraints(options, level = 0) {
317
- const { deviceId } = options;
317
+ const { deviceId, facingMode = "user" } = options;
318
318
  const resolution = getDesktopVideoConstraints(level);
319
319
  return {
320
320
  audio: isSafari(),
321
321
  video: {
322
- facingMode: "user",
322
+ facingMode,
323
323
  deviceId: deviceId ? { exact: deviceId } : void 0,
324
324
  ...resolution
325
325
  }
@@ -336,11 +336,99 @@ async function getDesktopCameraStream(options, fallbackLevel = 0) {
336
336
  return getDesktopCameraStream(options, nextLevel);
337
337
  }
338
338
  }
339
+ /**
340
+ * Pick the best back-facing device from a list already filtered by label.
341
+ * Prefers the highest megapixel count when labels advertise it, else the first.
342
+ */
343
+ function selectBestBackDevice(devices) {
344
+ if (devices.length === 1) return devices[0];
345
+ const withMp = devices.map((d) => {
346
+ const match = d.label.match(/\b([0-9]+)\s*MP?\b/i);
347
+ return {
348
+ device: d,
349
+ mp: match ? parseInt(match[1], 10) : 0
350
+ };
351
+ });
352
+ const maxMp = Math.max(...withMp.map((w) => w.mp));
353
+ const best = withMp.find((w) => w.mp === maxMp);
354
+ return best ? best.device : devices[0];
355
+ }
356
+ /**
357
+ * Desktop / non-mobile back-camera acquisition with verify-and-correct.
358
+ *
359
+ * Why this exists: devices like the Microsoft Surface fall into the desktop
360
+ * branch (Windows is neither iOS nor Android) and have a documented bug where
361
+ * requesting `facingMode: 'environment'` hands back the FRONT camera — and the
362
+ * reported `facingMode` can falsely say 'environment'. So we never trust
363
+ * facingMode; we verify what we actually got by LABEL only.
364
+ *
365
+ * Flow:
366
+ * 1. Open best-effort with an 'environment' hint.
367
+ * 2. If the opened track's label looks like a back camera → done.
368
+ * 3. Otherwise enumerate and look for a back-LABELLED device, reopen it.
369
+ * 4. If no device has a back label → keep the original stream (never regress).
370
+ *
371
+ * An explicit deviceId from the caller is always trusted as-is.
372
+ */
373
+ async function getDesktopBackCameraStream(deviceId) {
374
+ if (deviceId) return getDesktopCameraStream({ deviceId });
375
+ const original = await getDesktopCameraStream({ facingMode: "environment" });
376
+ const track = original.getVideoTracks()[0];
377
+ if (track && isBackCameraLabel(track.label)) return original;
378
+ const backDevices = (await enumerateVideoDevices()).filter((d) => isBackCameraLabel(d.label));
379
+ if (backDevices.length === 0) return original;
380
+ const target = selectBestBackDevice(backDevices);
381
+ if (track && track.getSettings().deviceId === target.deviceId) return original;
382
+ try {
383
+ const corrected = await getDesktopCameraStream({ deviceId: target.deviceId });
384
+ stopCameraStream(original);
385
+ return corrected;
386
+ } catch {
387
+ return original;
388
+ }
389
+ }
390
+ /**
391
+ * Desktop front-camera (selfie) acquisition with verify-and-correct.
392
+ *
393
+ * Counterpart to {@link getDesktopBackCameraStream}. Requesting a front camera
394
+ * uses an *advisory* `facingMode: 'user'` hint, which the browser may ignore —
395
+ * notably on a Surface after the back camera was explicitly opened by deviceId
396
+ * for ID capture, the browser remembers the rear camera as its preferred device
397
+ * and hands it back for the selfie too.
398
+ *
399
+ * The caller supplies an `open(deviceId?)` callback so this stays agnostic to
400
+ * the selfie resolution strategy. We then verify by LABEL only (never
401
+ * facingMode):
402
+ * 1. Open via the callback.
403
+ * 2. If the opened track is NOT a back camera → trust it, return as-is.
404
+ * 3. If it IS a back camera, enumerate and reopen the first non-back device.
405
+ * 4. If there is no non-back device, or the reopen fails → keep the original.
406
+ *
407
+ * Note: "first non-back device" is intentionally simple — on machines that also
408
+ * expose a Windows Hello IR sensor this could pick the IR camera. Accepted
409
+ * tradeoff; revisit with a front-label allowlist if it proves a problem.
410
+ */
411
+ async function ensureFrontCameraStream(open) {
412
+ const original = await open();
413
+ const track = original.getVideoTracks()[0];
414
+ if (!track || !isBackCameraLabel(track.label)) return original;
415
+ const frontDevices = (await enumerateVideoDevices()).filter((d) => !isBackCameraLabel(d.label));
416
+ if (frontDevices.length === 0) return original;
417
+ const target = frontDevices[0];
418
+ if (track.getSettings().deviceId === target.deviceId) return original;
419
+ try {
420
+ const corrected = await open(target.deviceId);
421
+ stopCameraStream(original);
422
+ return corrected;
423
+ } catch {
424
+ return original;
425
+ }
426
+ }
339
427
  async function getBackCameraStream(deviceId) {
340
428
  if (isIOS()) return { stream: await getIOSCameraStream() };
341
429
  if (isAndroid()) return getAndroidBackCameraStream(0);
342
- return { stream: await getDesktopCameraStream({ deviceId }) };
430
+ return { stream: await getDesktopBackCameraStream(deviceId) };
343
431
  }
344
432
 
345
433
  //#endregion
346
- export { getDesktopCameraStream as n, getBackCameraStream as t };
434
+ export { getBackCameraStream as n, getDesktopCameraStream as r, ensureFrontCameraStream as t };