@incodetech/core 2.0.0 → 2.0.1-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 (178) hide show
  1. package/dist/Actor-CI32dTbG.d.ts +2 -0
  2. package/dist/BaseWasmProvider-C_DLEI40.esm.js +1118 -0
  3. package/dist/BrowserStorageProvider-CuOW1Er2.esm.js +55 -0
  4. package/dist/BrowserTimerProvider-DhNc_x02.esm.js +22 -0
  5. package/dist/ITimerCapability-C67ZRskg.esm.js +7 -0
  6. package/dist/IpifyProvider-D7jx52AL.esm.js +139 -0
  7. package/dist/Manager-C8PrhBOx.d.ts +19 -0
  8. package/dist/MotionSensorProvider-4v7xkqAp.esm.js +254 -0
  9. package/dist/OpenViduRecordingProvider-CMu6XVdc.esm.js +87 -0
  10. package/dist/StateMachine-BCQrZJhf.d.ts +2 -0
  11. package/dist/WasmUtilProvider-j98OJf-S.esm.js +114 -0
  12. package/dist/addressSearch-BpTbTWCa.esm.js +430 -0
  13. package/dist/ae-signature-DDDZmWXj.esm.js +12 -0
  14. package/dist/ae-signature.d.ts +25 -0
  15. package/dist/ae-signature.esm.js +8 -0
  16. package/dist/antifraud.d.ts +57 -0
  17. package/dist/antifraud.esm.js +45 -0
  18. package/dist/antifraudStateMachine-O0TMf6yc.esm.js +39 -0
  19. package/dist/api-CESGtpbH.esm.js +53 -0
  20. package/dist/authentication.d.ts +12 -0
  21. package/dist/authentication.esm.js +25 -0
  22. package/dist/authenticationManager-5M-fKzXx.esm.js +67 -0
  23. package/dist/authenticationManager-C83GNIhl.d.ts +66 -0
  24. package/dist/authenticationStateMachine-BMZqatiF.esm.js +139 -0
  25. package/dist/backCameraStream-DMdMeGk2.esm.js +346 -0
  26. package/dist/browserSimulation-gxD8cSpM.esm.js +20 -0
  27. package/dist/camera-DBSxa6ML.d.ts +4 -0
  28. package/dist/camera-PA2Ljri3.esm.js +22 -0
  29. package/dist/camera.d.ts +15 -0
  30. package/dist/camera.esm.js +5 -0
  31. package/dist/chunk-CRF6K_H_.esm.js +49 -0
  32. package/dist/consent.d.ts +398 -0
  33. package/dist/consent.esm.js +79 -0
  34. package/dist/consentStateMachine-CCT-B60O.esm.js +151 -0
  35. package/dist/cpf-PPz2Njto.esm.js +38 -0
  36. package/dist/cpf-ocr.d.ts +204 -0
  37. package/dist/cpf-ocr.esm.js +177 -0
  38. package/dist/cross-document-data-match.d.ts +34 -0
  39. package/dist/cross-document-data-match.esm.js +71 -0
  40. package/dist/curp-validation.d.ts +188 -0
  41. package/dist/curp-validation.esm.js +110 -0
  42. package/dist/curpValidationStateMachine-CitWLr2c.esm.js +595 -0
  43. package/dist/custom-fields.d.ts +115 -0
  44. package/dist/custom-fields.esm.js +177 -0
  45. package/dist/custom-watchlist.d.ts +66 -0
  46. package/dist/custom-watchlist.esm.js +86 -0
  47. package/dist/dateUtils-UoN5xswP.esm.js +23 -0
  48. package/dist/deepsightLoader-Cm4JIT_z.esm.js +52 -0
  49. package/dist/deepsightService-CEVxzehb.d.ts +412 -0
  50. package/dist/deepsightService-O74l4Y__.esm.js +489 -0
  51. package/dist/device.d.ts +46 -0
  52. package/dist/device.esm.js +106 -0
  53. package/dist/displayErrors-DqJ_IbsG.d.ts +39 -0
  54. package/dist/document-capture.d.ts +906 -0
  55. package/dist/document-capture.esm.js +156 -0
  56. package/dist/document-upload.d.ts +331 -0
  57. package/dist/document-upload.esm.js +203 -0
  58. package/dist/documentCaptureStateMachine-BqzTDy9k.esm.js +394 -0
  59. package/dist/dynamic-forms.d.ts +178 -0
  60. package/dist/dynamic-forms.esm.js +323 -0
  61. package/dist/ekyb.d.ts +148 -0
  62. package/dist/ekyb.esm.js +127 -0
  63. package/dist/ekybStateMachine-BR2let5f.esm.js +674 -0
  64. package/dist/ekyc.d.ts +164 -0
  65. package/dist/ekyc.esm.js +104 -0
  66. package/dist/ekycStateMachine-oeO0Iekd.esm.js +10626 -0
  67. package/dist/electronic-signature.d.ts +4 -0
  68. package/dist/electronic-signature.esm.js +7 -0
  69. package/dist/electronicSignatureManager-D9OHzTpG.esm.js +428 -0
  70. package/dist/email.d.ts +4 -0
  71. package/dist/email.esm.js +9 -0
  72. package/dist/emailManager-DIfnS5g1.d.ts +352 -0
  73. package/dist/emailManager-wAV0LE-H.esm.js +238 -0
  74. package/dist/emailStateMachine-DOf4j58N.esm.js +292 -0
  75. package/dist/endpoints-CnN3SyDa.esm.js +87 -0
  76. package/dist/events-D6-e4vok.esm.js +596 -0
  77. package/dist/events.d.ts +265 -0
  78. package/dist/events.esm.js +4 -0
  79. package/dist/extensibility.d.ts +122 -0
  80. package/dist/extensibility.esm.js +43 -0
  81. package/dist/face-match.d.ts +228 -0
  82. package/dist/face-match.esm.js +173 -0
  83. package/dist/faceCaptureManagerFactory-Dh2PdGlF.esm.js +290 -0
  84. package/dist/faceCaptureManagerFactory-yqtpxjnN.d.ts +690 -0
  85. package/dist/faceCaptureSetup-B3faSpYA.esm.js +873 -0
  86. package/dist/faceMatchStateMachine-DNFrxTFS.esm.js +127 -0
  87. package/dist/flow-events.d.ts +6 -0
  88. package/dist/flow-events.esm.js +0 -0
  89. package/dist/flow.d.ts +358 -0
  90. package/dist/flow.esm.js +825 -0
  91. package/dist/flowCompletionService-DhkT4SRY.d.ts +10 -0
  92. package/dist/flowCompletionService-P54yzGvA.esm.js +13 -0
  93. package/dist/flowServices-DG3IdWw6.esm.js +188 -0
  94. package/dist/geolocation.d.ts +127 -0
  95. package/dist/geolocation.esm.js +89 -0
  96. package/dist/geolocationStateMachine-asasuHY2.esm.js +105 -0
  97. package/dist/getBrowser-BSXUTWXw.esm.js +41 -0
  98. package/dist/getDeviceClass-BSntT9_j.esm.js +14 -0
  99. package/dist/government-validation.d.ts +67 -0
  100. package/dist/government-validation.esm.js +81 -0
  101. package/dist/governmentValidationStateMachine-BDDYrJTo.esm.js +271 -0
  102. package/dist/home.d.ts +99 -0
  103. package/dist/home.esm.js +61 -0
  104. package/dist/http.d.ts +68 -0
  105. package/dist/http.esm.js +3 -0
  106. package/dist/id-ocr.d.ts +635 -0
  107. package/dist/id-ocr.esm.js +86 -0
  108. package/dist/id-verification.d.ts +190 -0
  109. package/dist/id-verification.esm.js +43 -0
  110. package/dist/id.d.ts +24 -0
  111. package/dist/id.esm.js +164 -0
  112. package/dist/idCaptureManager-Fyd0eam-.d.ts +958 -0
  113. package/dist/idCaptureManager-ZPkD7Gjk.esm.js +581 -0
  114. package/dist/idCaptureStateMachine-BK0bPHoc.esm.js +2963 -0
  115. package/dist/idOcrStateMachine-YbjjC_Gg.esm.js +388 -0
  116. package/dist/idVerificationStateMachine-xbw9HP1Z.esm.js +71 -0
  117. package/dist/identity-reuse.d.ts +530 -0
  118. package/dist/identity-reuse.esm.js +274 -0
  119. package/dist/index-BcRG8rtJ.d.ts +97 -0
  120. package/dist/index-DZoqeAo9.d.ts +1177 -0
  121. package/dist/index.d.ts +3 -0
  122. package/dist/index.esm.js +12 -0
  123. package/dist/invokeOnCaptureCallback-rc6kBHo5.esm.js +30 -0
  124. package/dist/lib-BB0B_qQX.esm.js +12499 -0
  125. package/dist/mandatory-consent.d.ts +412 -0
  126. package/dist/mandatory-consent.esm.js +78 -0
  127. package/dist/mandatoryConsentStateMachine-Cnco1jvn.esm.js +126 -0
  128. package/dist/openviduLazy-Cm0XFh_v.esm.js +3 -0
  129. package/dist/openviduLazy-Cok70ZSg.esm.js +12 -0
  130. package/dist/permissionServices-D_i6nzEw.esm.js +50 -0
  131. package/dist/phone.d.ts +4 -0
  132. package/dist/phone.esm.js +9 -0
  133. package/dist/phoneManager-B6M30hKE.d.ts +397 -0
  134. package/dist/phoneManager-DAJbGhlY.esm.js +256 -0
  135. package/dist/phoneStateMachine-CuPARRaT.esm.js +351 -0
  136. package/dist/platform-CfrjKhmi.esm.js +83 -0
  137. package/dist/qe-signature-DFo_Cc-I.esm.js +12 -0
  138. package/dist/qe-signature.d.ts +25 -0
  139. package/dist/qe-signature.esm.js +8 -0
  140. package/dist/recordingService-Ig2UgbLv.esm.js +1003 -0
  141. package/dist/redirect-to-mobile.d.ts +107 -0
  142. package/dist/redirect-to-mobile.esm.js +102 -0
  143. package/dist/redirectToMobileStateMachine-BOEqe46A.esm.js +249 -0
  144. package/dist/runChildModule-CqqwqAkW.esm.js +219 -0
  145. package/dist/selfie.d.ts +26 -0
  146. package/dist/selfie.esm.js +146 -0
  147. package/dist/selfieManager-D0lSgd-J.d.ts +68 -0
  148. package/dist/selfieManager-Duisl7qN.esm.js +60 -0
  149. package/dist/selfieStateMachine-D76whWEf.esm.js +68 -0
  150. package/dist/session-CGtQJJzB.esm.js +3206 -0
  151. package/dist/session.d.ts +217 -0
  152. package/dist/session.esm.js +9 -0
  153. package/dist/setup-C5AITV8m.d.ts +254 -0
  154. package/dist/setup-DsM8IG7k.esm.js +887 -0
  155. package/dist/signature.d.ts +94 -0
  156. package/dist/signature.esm.js +66 -0
  157. package/dist/signatureStateMachine-B5-QVUve.esm.js +132 -0
  158. package/dist/stats-CIfiPzb1.esm.js +16 -0
  159. package/dist/stats.d.ts +16 -0
  160. package/dist/stats.esm.js +4 -0
  161. package/dist/trust-graph.d.ts +54 -0
  162. package/dist/trust-graph.esm.js +56 -0
  163. package/dist/types-B06Ypu2F.d.ts +49 -0
  164. package/dist/types-BP1m8VRw.d.ts +340 -0
  165. package/dist/types-CAD4va6a.d.ts +5 -0
  166. package/dist/types-CFV9G_7j.d.ts +24 -0
  167. package/dist/warmup-CEcppFiS.d.ts +63 -0
  168. package/dist/wasm.d.ts +15 -0
  169. package/dist/wasm.esm.js +12 -0
  170. package/dist/watchlist-for-business.d.ts +79 -0
  171. package/dist/watchlist-for-business.esm.js +148 -0
  172. package/dist/watchlist.d.ts +62 -0
  173. package/dist/watchlist.esm.js +86 -0
  174. package/dist/watchlistServices-DMbUhkBX.esm.js +12 -0
  175. package/dist/workflow.d.ts +907 -0
  176. package/dist/workflow.esm.js +702 -0
  177. package/dist/xstate.esm-B70JrNqo.esm.js +3404 -0
  178. package/package.json +1 -1
@@ -0,0 +1,10 @@
1
+ //#region src/modules/flow/flowCompletionService.d.ts
2
+ type FinishStatus = {
3
+ redirectionUrl: string;
4
+ action: 'approved' | 'rejected' | 'none';
5
+ scoreStatus: 'OK' | 'WARN' | 'MANUAL_OK' | 'FAIL' | 'UNKNOWN' | 'MANUAL_FAIL';
6
+ };
7
+ type GetFinishStatusFn = (flowId: string | undefined | null, signal?: AbortSignal) => Promise<FinishStatus>;
8
+ declare const getFinishStatus: GetFinishStatusFn;
9
+ //#endregion
10
+ export { GetFinishStatusFn as n, getFinishStatus as r, FinishStatus as t };
@@ -0,0 +1,13 @@
1
+ import { t as api } from "./api-CESGtpbH.esm.js";
2
+ import { t as endpoints } from "./endpoints-CnN3SyDa.esm.js";
3
+
4
+ //#region src/modules/flow/flowCompletionService.ts
5
+ const getFinishStatus = async (flowId, signal) => {
6
+ const url = `${endpoints.finishStatus}${flowId ? `?flowId=${flowId}` : ""}`;
7
+ const res = await api.get(url, { signal });
8
+ if (!res.ok) throw new Error(`GET ${url} failed: ${res.status} ${res.statusText}`);
9
+ return res.data;
10
+ };
11
+
12
+ //#endregion
13
+ export { getFinishStatus as t };
@@ -0,0 +1,188 @@
1
+ import { t as api } from "./api-CESGtpbH.esm.js";
2
+ import { t as endpoints } from "./endpoints-CnN3SyDa.esm.js";
3
+ import { n as getSessionFingerprintResult, r as initializeSession } from "./session-CGtQJJzB.esm.js";
4
+
5
+ //#region src/modules/flow/flowUtils.ts
6
+ const WASM_MODULE_PIPELINES = {
7
+ SELFIE: "selfie",
8
+ AUTHENTICATION: "selfie",
9
+ FACE_MATCH: "selfie",
10
+ VIDEO_ONBOARDING: "selfie",
11
+ ID: "idCapture",
12
+ TUTORIAL_ID: "idCapture",
13
+ SECOND_ID: "idCapture"
14
+ };
15
+ const FACE_MODULES_WITH_ON_DEVICE_VARIANT = new Set(["SELFIE", "AUTHENTICATION"]);
16
+ function isOnDeviceFaceModule(module) {
17
+ if (!FACE_MODULES_WITH_ON_DEVICE_VARIANT.has(module.key)) return false;
18
+ return module.configuration?.onDeviceFaceResultsSubmissionEnabled === true;
19
+ }
20
+ /**
21
+ * Analyzes a flow configuration and returns the WASM pipelines needed.
22
+ * Use this to conditionally warmup WASM only when required by the flow.
23
+ *
24
+ * Modules with `onDeviceFaceResultsSubmissionEnabled: true` (currently SELFIE
25
+ * and AUTHENTICATION) select the 6-model `'onDeviceSelfie'` bundle instead of
26
+ * the default 4-model `'selfie'` bundle.
27
+ *
28
+ * @param flow - The flow configuration from /omni/onboarding/flow
29
+ * @returns Array of WASM pipelines needed (e.g., ['selfie', 'idCapture'])
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * const pipelines = getRequiredWasmPipelines(flow);
34
+ * if (pipelines.length > 0) {
35
+ * warmupWasm({ ...wasmConfig, pipelines });
36
+ * }
37
+ * ```
38
+ */
39
+ function getRequiredWasmPipelines(flow) {
40
+ const pipelines = /* @__PURE__ */ new Set();
41
+ for (const module of flow.flowModules) {
42
+ if (isOnDeviceFaceModule(module)) {
43
+ pipelines.add("onDeviceSelfie");
44
+ continue;
45
+ }
46
+ const pipeline = WASM_MODULE_PIPELINES[module.key];
47
+ if (pipeline) pipelines.add(pipeline);
48
+ }
49
+ return [...pipelines];
50
+ }
51
+ /**
52
+ * Normalizes flow modules by expanding TUTORIAL_ID into ID + SECOND_ID
53
+ * based on configuration flags. Matches legacy flowService behavior.
54
+ *
55
+ * - TUTORIAL_ID becomes ID (with same config)
56
+ * - If secondId: true, adds SECOND_ID module with isSecondId: true
57
+ * - thirdId is deprecated and ignored; the flow continues to the next step
58
+ * - Bare ID following TUTORIAL_ID is dropped (already merged)
59
+ */
60
+ function normalizeFlowModules(flow, options = {}) {
61
+ let modules = normalizeIdModules(flow.flowModules);
62
+ modules = normalizeCpfModules(modules, options);
63
+ modules = dropWatchlistBusinessIfEkyb(modules);
64
+ if (shouldInjectRedirect(flow, modules, options)) modules = addRedirect(flow, modules, options);
65
+ return modules;
66
+ }
67
+ /**
68
+ * Drops WATCHLIST_BUSINESS when EKYB is present in the same flow.
69
+ * The EKYB module performs a superset of the watchlist-for-business check,
70
+ * so running both would be redundant.
71
+ */
72
+ function dropWatchlistBusinessIfEkyb(modules) {
73
+ if (!hasModule(modules, "EKYB")) return modules;
74
+ return modules.filter((m) => m.key !== "WATCHLIST_BUSINESS");
75
+ }
76
+ function normalizeIdModules(modules) {
77
+ return modules.flatMap((module, idx, arr) => {
78
+ if (module.key === "TUTORIAL_ID") {
79
+ const idConfig = module.configuration;
80
+ const result = [{
81
+ key: "ID",
82
+ configuration: idConfig
83
+ }];
84
+ if (idConfig.secondId) result.push({
85
+ key: "SECOND_ID",
86
+ configuration: {
87
+ ...idConfig,
88
+ isSecondId: true
89
+ }
90
+ });
91
+ return result;
92
+ }
93
+ const prev = arr[idx - 1];
94
+ if (module.key === "ID" && prev?.key === "TUTORIAL_ID") return [];
95
+ return [module];
96
+ });
97
+ }
98
+ function normalizeCpfModules(modules, options) {
99
+ if (options.useCPF !== true) return modules;
100
+ return modules.map((module) => module.key === "ID_OCR" ? {
101
+ key: "CPF_OCR",
102
+ configuration: {}
103
+ } : module);
104
+ }
105
+ function shouldInjectRedirect(flow, modules, options) {
106
+ return options.isDesktop === true && flow.redirectDesktopToMobile === true && !hasModule(modules, "REDIRECT_TO_MOBILE");
107
+ }
108
+ function addRedirect(flow, modules, options) {
109
+ return [{
110
+ key: "REDIRECT_TO_MOBILE",
111
+ configuration: {
112
+ flowId: flow.flowId,
113
+ disableSmsOption: flow.disableSmsOption ?? false,
114
+ addContinueToDesktop: flow.addContinueToDesktop ?? false,
115
+ qrPhishingResistance: flow.qrPhishingResistance ?? false,
116
+ authHint: options.authHint,
117
+ lang: options.lang
118
+ }
119
+ }, ...modules];
120
+ }
121
+ function hasModule(modules, key) {
122
+ return modules.some((module) => module.key === key);
123
+ }
124
+
125
+ //#endregion
126
+ //#region src/modules/flow/flowServices.ts
127
+ const REGULATION_TYPES = [
128
+ "US",
129
+ "Worldwide",
130
+ "Other",
131
+ "US_Illinois",
132
+ "US_Texas",
133
+ "US_California",
134
+ "US_Washington"
135
+ ];
136
+ const REGULATION_TYPE_ALIASES = {
137
+ us: "US",
138
+ worldwide: "Worldwide",
139
+ worldwide_consent: "Worldwide",
140
+ other: "Other",
141
+ us_illinois: "US_Illinois",
142
+ usillinois: "US_Illinois",
143
+ us_texas: "US_Texas",
144
+ ustexas: "US_Texas",
145
+ us_california: "US_California",
146
+ uscalifornia: "US_California",
147
+ us_washington: "US_Washington",
148
+ uswashington: "US_Washington"
149
+ };
150
+ function toRegulationType(value) {
151
+ if (!value) return "Other";
152
+ if (REGULATION_TYPES.includes(value)) return value;
153
+ return REGULATION_TYPE_ALIASES[value.trim().toLowerCase().replace(/[\s-]+/g, "_")] ?? "Other";
154
+ }
155
+ function prependMandatoryConsent(flow) {
156
+ if (flow.mandatoryConsentCheck === false) return flow;
157
+ const fingerprintResult = getSessionFingerprintResult();
158
+ if (!fingerprintResult?.showMandatoryConsent) return flow;
159
+ if (flow.flowModules.find((module) => module.key === "MANDATORY_CONSENT")) return flow;
160
+ const mandatoryConsentModule = {
161
+ key: "MANDATORY_CONSENT",
162
+ configuration: { consentType: toRegulationType(fingerprintResult.regulationType) }
163
+ };
164
+ return {
165
+ ...flow,
166
+ flowModules: [mandatoryConsentModule, ...flow.flowModules]
167
+ };
168
+ }
169
+ const getFlow = async (signal, options = {}) => {
170
+ const sessionPromise = initializeSession({ signal }).catch(() => void 0);
171
+ const res = await api.get(endpoints.flow, { signal });
172
+ if (!res.ok) throw new Error(`GET /flow failed: ${res.status} ${res.statusText}`);
173
+ const data = res.data;
174
+ if (data.mandatoryConsentCheck !== false) await sessionPromise;
175
+ const flow = prependMandatoryConsent(data);
176
+ const normalizedModules = normalizeFlowModules(flow, options);
177
+ console.log({
178
+ ...flow,
179
+ flowModules: normalizedModules
180
+ });
181
+ return {
182
+ ...flow,
183
+ flowModules: normalizedModules
184
+ };
185
+ };
186
+
187
+ //#endregion
188
+ export { getRequiredWasmPipelines as n, normalizeFlowModules as r, getFlow as t };
@@ -0,0 +1,127 @@
1
+ import { t as Manager } from "./Manager-C8PrhBOx.js";
2
+ import "./Actor-CI32dTbG.js";
3
+
4
+ //#region ../infra/src/capabilities/IGeolocationCapability.d.ts
5
+ type GeolocationCoords = {
6
+ latitude: number;
7
+ longitude: number;
8
+ };
9
+ type IGeolocationCapability = {
10
+ getCurrentPosition(): Promise<GeolocationCoords>;
11
+ };
12
+ //#endregion
13
+ //#region src/modules/geolocation/types.d.ts
14
+ /**
15
+ * Configuration options for the Geolocation module.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const config: GeolocationConfig = {
20
+ * allowUserToSkipGeolocation: true,
21
+ * };
22
+ * ```
23
+ */
24
+ type GeolocationConfig = {
25
+ /**
26
+ * Whether the user is allowed to skip geolocation capture.
27
+ * When true, a skip button is shown on the permission-denied screen.
28
+ * Backend field name from flow/workflow configuration.
29
+ * @default false
30
+ */
31
+ allowUserToSkipGeolocation?: boolean;
32
+ };
33
+ //#endregion
34
+ //#region src/modules/geolocation/geolocationStateMachine.d.ts
35
+ type GeolocationDeviceType = 'ios' | 'android' | 'desktop';
36
+ declare const geolocationMachine: any;
37
+ //#endregion
38
+ //#region src/modules/geolocation/geolocationActor.d.ts
39
+ type CreateGeolocationActorOptions = {
40
+ config: GeolocationConfig;
41
+ geolocation?: IGeolocationCapability;
42
+ };
43
+ //#endregion
44
+ //#region src/modules/geolocation/geolocationManager.d.ts
45
+ /** Geolocation manager is in initial state, waiting for `request()` to be called */
46
+ type GeolocationIdleState = {
47
+ status: 'idle';
48
+ };
49
+ /** Browser geolocation permission prompt is active */
50
+ type GeolocationRequestingState = {
51
+ status: 'requestingLocation';
52
+ };
53
+ /** Coordinates are being submitted to the backend */
54
+ type GeolocationSubmittingState = {
55
+ status: 'submitting';
56
+ };
57
+ /**
58
+ * Location successfully acquired — call `continue()` to proceed
59
+ * @property location - Location name returned from backend, or 'Unknown'
60
+ */
61
+ type GeolocationAcquiredState = {
62
+ status: 'locationAcquired';
63
+ location: string;
64
+ };
65
+ /**
66
+ * User denied geolocation permission — shows device-specific instructions
67
+ * @property deviceType - Used by UI to render the correct instruction panel
68
+ * @property canSkip - Whether the skip button should be shown
69
+ */
70
+ type GeolocationPermissionDeniedState = {
71
+ status: 'permissionDenied';
72
+ deviceType: GeolocationDeviceType;
73
+ canSkip: boolean;
74
+ };
75
+ /** Geolocation flow completed successfully */
76
+ type GeolocationFinishedState = {
77
+ status: 'finished';
78
+ };
79
+ /**
80
+ * Union of all possible geolocation manager states.
81
+ *
82
+ * @example
83
+ * ```typescript
84
+ * const state = geolocationManager.getState();
85
+ * if (state.status === 'locationAcquired') {
86
+ * console.log(state.location);
87
+ * }
88
+ * if (state.status === 'permissionDenied') {
89
+ * console.log(state.deviceType); // 'ios' | 'android' | 'desktop'
90
+ * }
91
+ * ```
92
+ */
93
+ type GeolocationState = GeolocationIdleState | GeolocationRequestingState | GeolocationSubmittingState | GeolocationAcquiredState | GeolocationPermissionDeniedState | GeolocationFinishedState;
94
+ /**
95
+ * Creates a geolocation manager for headless or UI-driven usage.
96
+ *
97
+ * @example Headless usage
98
+ * ```typescript
99
+ * const manager = createGeolocationManager({ config: { allowUserToSkipGeolocation: true } });
100
+ * manager.subscribe((state) => console.log(state.status));
101
+ * manager.request();
102
+ * ```
103
+ */
104
+ declare function createGeolocationManager(options: CreateGeolocationActorOptions): Manager<GeolocationState> & {
105
+ /**
106
+ * Initiates the browser geolocation permission request.
107
+ * Transitions from 'idle' to 'requestingLocation'.
108
+ */
109
+ request(): void;
110
+ /**
111
+ * Confirms the acquired location and completes the module.
112
+ * Should be called when state is 'locationAcquired'.
113
+ */
114
+ continue(): void;
115
+ /**
116
+ * Skips geolocation when the user has denied permission.
117
+ * Only works when `config.allowUserToSkipGeolocation` is true.
118
+ */
119
+ skip(): void;
120
+ /**
121
+ * Resets the manager back to initial state.
122
+ */
123
+ reset(): void;
124
+ };
125
+ type GeolocationManager = ReturnType<typeof createGeolocationManager>;
126
+ //#endregion
127
+ export { type GeolocationConfig, type GeolocationManager, type GeolocationState, createGeolocationManager, geolocationMachine };
@@ -0,0 +1,89 @@
1
+ import "./api-CESGtpbH.esm.js";
2
+ import { n as eventModuleNames, o as createManagerInstrumentation } from "./events-D6-e4vok.esm.js";
3
+ import "./endpoints-CnN3SyDa.esm.js";
4
+ import { c as createManager, s as createActor } from "./xstate.esm-B70JrNqo.esm.js";
5
+ import "./platform-CfrjKhmi.esm.js";
6
+ import { t as geolocationMachine } from "./geolocationStateMachine-asasuHY2.esm.js";
7
+
8
+ //#region ../infra/src/providers/browser/BrowserGeolocationProvider.ts
9
+ var BrowserGeolocationProvider = class {
10
+ getCurrentPosition() {
11
+ return new Promise((resolve, reject) => {
12
+ navigator.geolocation.getCurrentPosition((pos) => resolve({
13
+ latitude: pos.coords.latitude,
14
+ longitude: pos.coords.longitude
15
+ }), reject);
16
+ });
17
+ }
18
+ };
19
+
20
+ //#endregion
21
+ //#region src/modules/geolocation/geolocationActor.ts
22
+ function createGeolocationActor(options) {
23
+ const geolocation = options.geolocation ?? new BrowserGeolocationProvider();
24
+ return createActor(geolocationMachine, { input: {
25
+ config: options.config,
26
+ geolocation
27
+ } }).start();
28
+ }
29
+
30
+ //#endregion
31
+ //#region src/modules/geolocation/geolocationManager.ts
32
+ function mapState(snapshot) {
33
+ const typedSnapshot = snapshot;
34
+ const { context } = typedSnapshot;
35
+ if (typedSnapshot.matches("idle")) return { status: "idle" };
36
+ if (typedSnapshot.matches("requestingLocation")) return { status: "requestingLocation" };
37
+ if (typedSnapshot.matches("submitting")) return { status: "submitting" };
38
+ if (typedSnapshot.matches("locationAcquired")) return {
39
+ status: "locationAcquired",
40
+ location: context.location ?? "Unknown"
41
+ };
42
+ if (typedSnapshot.matches("permissionDenied")) return {
43
+ status: "permissionDenied",
44
+ deviceType: context.deviceType,
45
+ canSkip: context.config.allowUserToSkipGeolocation === true
46
+ };
47
+ if (typedSnapshot.matches("finished")) return { status: "finished" };
48
+ return { status: "idle" };
49
+ }
50
+ function createApi({ actor, trackElementClicked }) {
51
+ return {
52
+ request() {
53
+ trackElementClicked?.("request");
54
+ actor.send({ type: "REQUEST" });
55
+ },
56
+ continue() {
57
+ trackElementClicked?.("continue");
58
+ actor.send({ type: "CONTINUE" });
59
+ },
60
+ skip() {
61
+ trackElementClicked?.("skip");
62
+ actor.send({ type: "SKIP" });
63
+ },
64
+ reset() {
65
+ actor.send({ type: "RESET" });
66
+ }
67
+ };
68
+ }
69
+ /**
70
+ * Creates a geolocation manager for headless or UI-driven usage.
71
+ *
72
+ * @example Headless usage
73
+ * ```typescript
74
+ * const manager = createGeolocationManager({ config: { allowUserToSkipGeolocation: true } });
75
+ * manager.subscribe((state) => console.log(state.status));
76
+ * manager.request();
77
+ * ```
78
+ */
79
+ function createGeolocationManager(options) {
80
+ return createManager({
81
+ actor: createGeolocationActor(options),
82
+ mapState,
83
+ createApi,
84
+ instrumentation: createManagerInstrumentation(eventModuleNames.geolocation)
85
+ });
86
+ }
87
+
88
+ //#endregion
89
+ export { createGeolocationManager, geolocationMachine };
@@ -0,0 +1,105 @@
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, t as setup } from "./xstate.esm-B70JrNqo.esm.js";
4
+ import { r as isIOS, t as isAndroid } from "./platform-CfrjKhmi.esm.js";
5
+
6
+ //#region src/modules/geolocation/geolocationServices.ts
7
+ async function addGeolocation(params, signal) {
8
+ const res = await api.post(endpoints.addGeolocation, {
9
+ latitude: params.latitude,
10
+ longitude: params.longitude
11
+ }, { signal });
12
+ if (!res.ok) throw new Error(`POST ${endpoints.addGeolocation} failed: ${res.status} ${res.statusText}`);
13
+ return res.data;
14
+ }
15
+
16
+ //#endregion
17
+ //#region src/modules/geolocation/geolocationStateMachine.ts
18
+ function detectDeviceType() {
19
+ if (isIOS()) return "ios";
20
+ if (isAndroid()) return "android";
21
+ return "desktop";
22
+ }
23
+ const geolocationMachine = setup({
24
+ types: {
25
+ context: {},
26
+ events: {},
27
+ input: {}
28
+ },
29
+ actors: {
30
+ requestPosition: fromPromise(async ({ input }) => {
31
+ return input.geolocation.getCurrentPosition();
32
+ }),
33
+ submitPosition: fromPromise(async ({ input, signal }) => {
34
+ try {
35
+ return await addGeolocation(input, signal);
36
+ } catch {
37
+ return { location: "Unknown" };
38
+ }
39
+ })
40
+ },
41
+ actions: {
42
+ setCoords: assign(({ event }) => ({ coords: event.output })),
43
+ setLocation: assign(({ event }) => ({ location: event.output.location })),
44
+ setDeviceType: assign({ deviceType: () => detectDeviceType() }),
45
+ resetContext: assign(({ context }) => ({
46
+ config: context.config,
47
+ geolocation: context.geolocation,
48
+ coords: void 0,
49
+ location: void 0,
50
+ deviceType: detectDeviceType()
51
+ }))
52
+ },
53
+ guards: { canSkip: ({ context }) => context.config.allowUserToSkipGeolocation === true }
54
+ }).createMachine({
55
+ id: "geolocation",
56
+ initial: "idle",
57
+ context: ({ input }) => ({
58
+ config: input.config,
59
+ geolocation: input.geolocation,
60
+ coords: void 0,
61
+ location: void 0,
62
+ deviceType: detectDeviceType()
63
+ }),
64
+ states: {
65
+ idle: { on: { REQUEST: { target: "requestingLocation" } } },
66
+ requestingLocation: { invoke: {
67
+ id: "requestPosition",
68
+ src: "requestPosition",
69
+ input: ({ context }) => ({ geolocation: context.geolocation }),
70
+ onDone: {
71
+ target: "submitting",
72
+ actions: "setCoords"
73
+ },
74
+ onError: {
75
+ target: "permissionDenied",
76
+ actions: "setDeviceType"
77
+ }
78
+ } },
79
+ submitting: { invoke: {
80
+ id: "submitPosition",
81
+ src: "submitPosition",
82
+ input: ({ context }) => ({
83
+ latitude: context.coords?.latitude ?? 0,
84
+ longitude: context.coords?.longitude ?? 0
85
+ }),
86
+ onDone: {
87
+ target: "locationAcquired",
88
+ actions: "setLocation"
89
+ },
90
+ onError: {
91
+ target: "locationAcquired",
92
+ actions: assign({ location: () => "Unknown" })
93
+ }
94
+ } },
95
+ locationAcquired: { on: { CONTINUE: { target: "finished" } } },
96
+ permissionDenied: { on: { SKIP: {
97
+ target: "finished",
98
+ guard: "canSkip"
99
+ } } },
100
+ finished: { type: "final" }
101
+ }
102
+ });
103
+
104
+ //#endregion
105
+ export { geolocationMachine as t };
@@ -0,0 +1,41 @@
1
+ //#region ../infra/src/device/getDeviceClass.ts
2
+ function getDeviceInfo() {
3
+ if (typeof navigator === "undefined") return {
4
+ userAgent: "",
5
+ platform: "",
6
+ maxTouchPoints: 0
7
+ };
8
+ return {
9
+ userAgent: navigator.userAgent,
10
+ platform: navigator.platform,
11
+ maxTouchPoints: navigator.maxTouchPoints
12
+ };
13
+ }
14
+ /**
15
+ * Gets the current window dimensions.
16
+ * Returns default values (1280x720) in non-browser environments.
17
+ */
18
+ function getWindowDimensions(defaultWidth = 1280, defaultHeight = 720) {
19
+ if (typeof window === "undefined") return {
20
+ outerWidth: defaultWidth,
21
+ outerHeight: defaultHeight,
22
+ innerWidth: defaultWidth,
23
+ innerHeight: defaultHeight
24
+ };
25
+ return {
26
+ outerWidth: window.outerWidth,
27
+ outerHeight: window.outerHeight,
28
+ innerWidth: window.innerWidth,
29
+ innerHeight: window.innerHeight
30
+ };
31
+ }
32
+
33
+ //#endregion
34
+ //#region ../infra/src/device/getBrowser.ts
35
+ function getUserAgent() {
36
+ if (typeof navigator === "undefined") return "";
37
+ return navigator.userAgent;
38
+ }
39
+
40
+ //#endregion
41
+ export { getDeviceInfo as n, getWindowDimensions as r, getUserAgent as t };
@@ -0,0 +1,14 @@
1
+ import { n as getDeviceInfo } from "./getBrowser-BSXUTWXw.esm.js";
2
+
3
+ //#region src/internal/device/getDeviceClass.ts
4
+ function getDeviceClass() {
5
+ const { userAgent, platform, maxTouchPoints } = getDeviceInfo();
6
+ if (!userAgent) return "desktop";
7
+ const ua = userAgent.toLowerCase();
8
+ if (/iphone|ipad|ipod/.test(ua) || platform === "MacIntel" && maxTouchPoints > 1) return "ios";
9
+ if (/android/.test(ua)) return "android";
10
+ return "desktop";
11
+ }
12
+
13
+ //#endregion
14
+ export { getDeviceClass as t };
@@ -0,0 +1,67 @@
1
+ import { t as Manager } from "./Manager-C8PrhBOx.js";
2
+ import "./Actor-CI32dTbG.js";
3
+
4
+ //#region src/modules/government-validation/types.d.ts
5
+ type GovernmentValidationConfig = {
6
+ validationCountries: string[];
7
+ facialValidation: boolean;
8
+ dataValidation: boolean;
9
+ faceAndDataValidation: boolean;
10
+ addressValidation: boolean;
11
+ backgroundExecution: boolean;
12
+ faceMatchOverrideDataScore: boolean;
13
+ useCroppedIdFacePhoto: boolean;
14
+ maxOtpAttempts?: number;
15
+ };
16
+ //#endregion
17
+ //#region src/modules/government-validation/governmentValidationStateMachine.d.ts
18
+
19
+ declare const governmentValidationMachine: any;
20
+ //#endregion
21
+ //#region src/modules/government-validation/governmentValidationActor.d.ts
22
+ type CreateGovernmentValidationActorOptions = {
23
+ config: GovernmentValidationConfig;
24
+ };
25
+ //#endregion
26
+ //#region src/modules/government-validation/governmentValidationManager.d.ts
27
+ type GovernmentValidationIdleState = {
28
+ status: 'idle';
29
+ };
30
+ type GovernmentValidationLoadingState = {
31
+ status: 'loading';
32
+ };
33
+ type GovernmentValidationProcessingState = {
34
+ status: 'processing';
35
+ };
36
+ type GovernmentValidationAwaitingOtpState = {
37
+ status: 'awaitingOtp';
38
+ resendTimer: number;
39
+ canResend: boolean;
40
+ attemptsRemaining: number;
41
+ otpError?: string;
42
+ };
43
+ type GovernmentValidationVerifyingOtpState = {
44
+ status: 'verifyingOtp';
45
+ };
46
+ type GovernmentValidationFinishedState = {
47
+ status: 'finished';
48
+ };
49
+ type GovernmentValidationErrorState = {
50
+ status: 'error';
51
+ error: string;
52
+ };
53
+ type GovernmentValidationUnknownState = {
54
+ status: 'unknown';
55
+ error: string;
56
+ };
57
+ type GovernmentValidationState = GovernmentValidationIdleState | GovernmentValidationLoadingState | GovernmentValidationProcessingState | GovernmentValidationAwaitingOtpState | GovernmentValidationVerifyingOtpState | GovernmentValidationFinishedState | GovernmentValidationErrorState | GovernmentValidationUnknownState;
58
+ declare function createGovernmentValidationManager(options: CreateGovernmentValidationActorOptions): Manager<GovernmentValidationState> & {
59
+ load(): void;
60
+ setOtpCode(code: string): void;
61
+ submitOtp(code: string): void;
62
+ resendOtp(): void;
63
+ retry(): void;
64
+ };
65
+ type GovernmentValidationManager = ReturnType<typeof createGovernmentValidationManager>;
66
+ //#endregion
67
+ export { type GovernmentValidationConfig, type GovernmentValidationManager, type GovernmentValidationState, createGovernmentValidationManager, governmentValidationMachine };