@incodetech/core 2.0.0-alpha.8 → 2.0.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.
- package/dist/Actor-CI32dTbG.d.ts +2 -0
- package/dist/BaseWasmProvider-C_DLEI40.esm.js +1118 -0
- package/dist/BrowserStorageProvider-CuOW1Er2.esm.js +55 -0
- package/dist/BrowserTimerProvider-DhNc_x02.esm.js +22 -0
- package/dist/ITimerCapability-C67ZRskg.esm.js +7 -0
- package/dist/IpifyProvider-D7jx52AL.esm.js +139 -0
- package/dist/MotionSensorProvider-4v7xkqAp.esm.js +254 -0
- package/dist/OpenViduRecordingProvider-CMu6XVdc.esm.js +87 -0
- package/dist/StateMachine-BCQrZJhf.d.ts +2 -0
- package/dist/WasmUtilProvider-j98OJf-S.esm.js +114 -0
- package/dist/addressSearch-BpTbTWCa.esm.js +430 -0
- package/dist/ae-signature-DDDZmWXj.esm.js +12 -0
- package/dist/ae-signature.d.ts +25 -0
- package/dist/ae-signature.esm.js +8 -0
- package/dist/antifraud.d.ts +57 -0
- package/dist/antifraud.esm.js +45 -0
- package/dist/antifraudStateMachine-O0TMf6yc.esm.js +39 -0
- package/dist/api-CESGtpbH.esm.js +53 -0
- package/dist/authentication.d.ts +12 -0
- package/dist/authentication.esm.js +25 -0
- package/dist/authenticationManager-5M-fKzXx.esm.js +67 -0
- package/dist/authenticationManager-C83GNIhl.d.ts +66 -0
- package/dist/authenticationStateMachine-BMZqatiF.esm.js +139 -0
- package/dist/backCameraStream-DMdMeGk2.esm.js +346 -0
- package/dist/browserSimulation-gxD8cSpM.esm.js +20 -0
- package/dist/camera-DBSxa6ML.d.ts +4 -0
- package/dist/camera-PA2Ljri3.esm.js +22 -0
- package/dist/camera.d.ts +15 -0
- package/dist/camera.esm.js +5 -0
- package/dist/consent.d.ts +398 -0
- package/dist/consent.esm.js +79 -0
- package/dist/consentStateMachine-CCT-B60O.esm.js +151 -0
- package/dist/cpf-PPz2Njto.esm.js +38 -0
- package/dist/cpf-ocr.d.ts +204 -0
- package/dist/cpf-ocr.esm.js +177 -0
- package/dist/cross-document-data-match.d.ts +34 -0
- package/dist/cross-document-data-match.esm.js +71 -0
- package/dist/curp-validation.d.ts +188 -0
- package/dist/curp-validation.esm.js +110 -0
- package/dist/curpValidationStateMachine-CitWLr2c.esm.js +595 -0
- package/dist/custom-fields.d.ts +115 -0
- package/dist/custom-fields.esm.js +177 -0
- package/dist/custom-watchlist.d.ts +66 -0
- package/dist/custom-watchlist.esm.js +86 -0
- package/dist/dateUtils-UoN5xswP.esm.js +23 -0
- package/dist/deepsightLoader-Cm4JIT_z.esm.js +52 -0
- package/dist/deepsightService-CEVxzehb.d.ts +412 -0
- package/dist/deepsightService-O74l4Y__.esm.js +489 -0
- package/dist/device.d.ts +46 -0
- package/dist/device.esm.js +106 -0
- package/dist/displayErrors-DqJ_IbsG.d.ts +39 -0
- package/dist/document-capture.d.ts +906 -0
- package/dist/document-capture.esm.js +156 -0
- package/dist/document-upload.d.ts +331 -0
- package/dist/document-upload.esm.js +203 -0
- package/dist/documentCaptureStateMachine-BqzTDy9k.esm.js +394 -0
- package/dist/dynamic-forms.d.ts +178 -0
- package/dist/dynamic-forms.esm.js +323 -0
- package/dist/ekyb.d.ts +148 -0
- package/dist/ekyb.esm.js +127 -0
- package/dist/ekybStateMachine-B59rQjgj.esm.js +674 -0
- package/dist/ekyc.d.ts +164 -0
- package/dist/ekyc.esm.js +104 -0
- package/dist/ekycStateMachine-oeO0Iekd.esm.js +10626 -0
- package/dist/electronic-signature.d.ts +4 -0
- package/dist/electronic-signature.esm.js +7 -0
- package/dist/electronicSignatureManager-D9OHzTpG.esm.js +428 -0
- package/dist/email.d.ts +3 -263
- package/dist/email.esm.js +7 -477
- package/dist/emailManager-DIfnS5g1.d.ts +352 -0
- package/dist/emailManager-wAV0LE-H.esm.js +238 -0
- package/dist/emailStateMachine-DOf4j58N.esm.js +292 -0
- package/dist/endpoints-CnN3SyDa.esm.js +87 -0
- package/dist/events-D6-e4vok.esm.js +596 -0
- package/dist/events.d.ts +265 -0
- package/dist/events.esm.js +4 -0
- package/dist/extensibility.d.ts +122 -0
- package/dist/extensibility.esm.js +43 -0
- package/dist/face-match.d.ts +228 -0
- package/dist/face-match.esm.js +173 -0
- package/dist/faceCaptureManagerFactory-Dh2PdGlF.esm.js +290 -0
- package/dist/faceCaptureManagerFactory-yqtpxjnN.d.ts +690 -0
- package/dist/faceCaptureSetup-B3faSpYA.esm.js +873 -0
- package/dist/faceMatchStateMachine-DNFrxTFS.esm.js +127 -0
- package/dist/flow-events.d.ts +6 -0
- package/dist/flow-events.esm.js +0 -0
- package/dist/flow.d.ts +101 -321
- package/dist/flow.esm.js +370 -173
- package/dist/flowCompletionService-DhkT4SRY.d.ts +10 -0
- package/dist/flowCompletionService-P54yzGvA.esm.js +13 -0
- package/dist/flowServices-DTsm-Vf1.esm.js +188 -0
- package/dist/geolocation.d.ts +127 -0
- package/dist/geolocation.esm.js +89 -0
- package/dist/geolocationStateMachine-asasuHY2.esm.js +105 -0
- package/dist/getBrowser-BSXUTWXw.esm.js +41 -0
- package/dist/getDeviceClass-BSntT9_j.esm.js +14 -0
- package/dist/government-validation.d.ts +67 -0
- package/dist/government-validation.esm.js +81 -0
- package/dist/governmentValidationStateMachine-BDDYrJTo.esm.js +271 -0
- package/dist/home.d.ts +99 -0
- package/dist/home.esm.js +61 -0
- package/dist/http.d.ts +68 -0
- package/dist/http.esm.js +3 -0
- package/dist/id-ocr.d.ts +635 -0
- package/dist/id-ocr.esm.js +86 -0
- package/dist/id-verification.d.ts +190 -0
- package/dist/id-verification.esm.js +43 -0
- package/dist/id.d.ts +24 -0
- package/dist/id.esm.js +164 -0
- package/dist/idCaptureManager-B9TGA5dq.d.ts +956 -0
- package/dist/idCaptureManager-DMK0GIt3.esm.js +581 -0
- package/dist/idCaptureStateMachine-Bq0fVZXl.esm.js +2954 -0
- package/dist/idOcrStateMachine-YbjjC_Gg.esm.js +388 -0
- package/dist/idVerificationStateMachine-xbw9HP1Z.esm.js +71 -0
- package/dist/identity-reuse.d.ts +530 -0
- package/dist/identity-reuse.esm.js +274 -0
- package/dist/index-BLKtMA0g.d.ts +1177 -0
- package/dist/index-BcRG8rtJ.d.ts +97 -0
- package/dist/index.d.ts +3 -226
- package/dist/index.esm.js +11 -154
- package/dist/invokeOnCaptureCallback-rc6kBHo5.esm.js +30 -0
- package/dist/{lib-Bu9XGMBW.esm.js → lib-BB0B_qQX.esm.js} +801 -2
- package/dist/mandatory-consent.d.ts +412 -0
- package/dist/mandatory-consent.esm.js +78 -0
- package/dist/mandatoryConsentStateMachine-Cnco1jvn.esm.js +126 -0
- package/dist/openviduLazy-Cm0XFh_v.esm.js +3 -0
- package/dist/openviduLazy-Cok70ZSg.esm.js +12 -0
- package/dist/permissionServices-D_i6nzEw.esm.js +50 -0
- package/dist/phone.d.ts +3 -291
- package/dist/phone.esm.js +7 -548
- package/dist/phoneManager-B6M30hKE.d.ts +397 -0
- package/dist/phoneManager-DAJbGhlY.esm.js +256 -0
- package/dist/phoneStateMachine-CuPARRaT.esm.js +351 -0
- package/dist/platform-CfrjKhmi.esm.js +83 -0
- package/dist/qe-signature-DFo_Cc-I.esm.js +12 -0
- package/dist/qe-signature.d.ts +25 -0
- package/dist/qe-signature.esm.js +8 -0
- package/dist/recordingService-Ig2UgbLv.esm.js +1003 -0
- package/dist/redirect-to-mobile.d.ts +107 -0
- package/dist/redirect-to-mobile.esm.js +102 -0
- package/dist/redirectToMobileStateMachine-BOEqe46A.esm.js +249 -0
- package/dist/runChildModule-CqqwqAkW.esm.js +219 -0
- package/dist/selfie.d.ts +21 -754
- package/dist/selfie.esm.js +113 -962
- package/dist/selfieManager-D0lSgd-J.d.ts +68 -0
- package/dist/selfieManager-Duisl7qN.esm.js +60 -0
- package/dist/selfieStateMachine-D76whWEf.esm.js +68 -0
- package/dist/session-BS-d_vuE.esm.js +3206 -0
- package/dist/session.d.ts +217 -0
- package/dist/session.esm.js +9 -0
- package/dist/setup-Buy-hyj4.esm.js +887 -0
- package/dist/setup-C5AITV8m.d.ts +254 -0
- package/dist/signature.d.ts +94 -0
- package/dist/signature.esm.js +66 -0
- package/dist/signatureStateMachine-B5-QVUve.esm.js +132 -0
- package/dist/stats-CIfiPzb1.esm.js +16 -0
- package/dist/stats.d.ts +16 -0
- package/dist/stats.esm.js +4 -0
- package/dist/trust-graph.d.ts +54 -0
- package/dist/trust-graph.esm.js +56 -0
- package/dist/types-B06Ypu2F.d.ts +49 -0
- package/dist/types-BP1m8VRw.d.ts +340 -0
- package/dist/types-CFV9G_7j.d.ts +24 -0
- package/dist/{warmup-CEJTfxQr.d.ts → warmup-CEcppFiS.d.ts} +11 -3
- package/dist/wasm.d.ts +15 -0
- package/dist/wasm.esm.js +12 -0
- package/dist/watchlist-for-business.d.ts +79 -0
- package/dist/watchlist-for-business.esm.js +148 -0
- package/dist/watchlist.d.ts +62 -0
- package/dist/watchlist.esm.js +86 -0
- package/dist/watchlistServices-DMbUhkBX.esm.js +12 -0
- package/dist/workflow.d.ts +907 -0
- package/dist/workflow.esm.js +702 -0
- package/dist/{xstate.esm-B_rda9yU.esm.js → xstate.esm-B70JrNqo.esm.js} +144 -1
- package/package.json +203 -6
- package/dist/OpenViduLogger-BdPfiZO6.esm.js +0 -3
- package/dist/OpenViduLogger-CQyDxBvM.esm.js +0 -803
- package/dist/StateMachine-DRE1oH2B.d.ts +0 -2
- package/dist/addEvent-W0ORK0jT.esm.js +0 -16
- package/dist/endpoints-BSTFaHYo.esm.js +0 -1706
- package/dist/permissionServices-I6vX6DBy.esm.js +0 -72
- /package/dist/{Manager-BGfxEmyv.d.ts → Manager-C8PrhBOx.d.ts} +0 -0
- /package/dist/{chunk-C_Yo44FK.esm.js → chunk-CRF6K_H_.esm.js} +0 -0
- /package/dist/{types-iZi2rawo.d.ts → types-CAD4va6a.d.ts} +0 -0
|
@@ -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-BS-d_vuE.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 };
|