@incodetech/core 2.0.1 → 2.1.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{BrowserStorageProvider-CuOW1Er2.esm.js → BrowserStorageProvider-BpJM-gIl.esm.js} +8 -1
- package/dist/{IpifyProvider-D7jx52AL.esm.js → IpifyProvider-D4LWD15E.esm.js} +28 -0
- package/dist/{MotionSensorProvider-4v7xkqAp.esm.js → MotionSensorProvider-Bx7Mpzt0.esm.js} +63 -13
- package/dist/{OpenViduRecordingProvider-CMu6XVdc.esm.js → OpenViduRecordingProvider-O4GjBseO.esm.js} +1 -1
- package/dist/StateMachine-BC_nGvrc.d.ts +2 -0
- package/dist/StreamCanvasCapture-ImiDQdVA.esm.js +118 -0
- package/dist/StreamCanvasCapture-yyl20qd9.d.ts +152 -0
- package/dist/{BaseWasmProvider-C_DLEI40.esm.js → WasmUtilProvider-BKWm8rSA.esm.js} +202 -11
- package/dist/{addressSearch-BpTbTWCa.esm.js → addressSearch-DvmWXKZg.esm.js} +63 -57
- package/dist/{ae-signature-DDDZmWXj.esm.js → ae-signature-BFZta3TZ.esm.js} +1 -1
- package/dist/ae-signature.d.ts +3 -3
- package/dist/ae-signature.esm.js +6 -5
- package/dist/antifraud.d.ts +5 -46
- package/dist/antifraud.esm.js +6 -43
- package/dist/antifraudManager-CkV4u-LE.esm.js +55 -0
- package/dist/antifraudManager-CznnhyvD.d.ts +63 -0
- package/dist/{antifraudStateMachine-O0TMf6yc.esm.js → antifraudStateMachine-Ccrb-Jxc.esm.js} +2 -2
- package/dist/apiError-B-j-gyDx.esm.js +51 -0
- package/dist/authentication.d.ts +13 -11
- package/dist/authentication.esm.js +26 -22
- package/dist/{authenticationManager-5M-fKzXx.esm.js → authenticationManager-BlR6mSaG.esm.js} +6 -6
- package/dist/{authenticationManager-C83GNIhl.d.ts → authenticationManager-CaiQbp-q.d.ts} +4 -4
- package/dist/{authenticationStateMachine-BMZqatiF.esm.js → authenticationStateMachine-DkcGUMw5.esm.js} +21 -9
- package/dist/{backCameraStream-DMdMeGk2.esm.js → backCameraStream-D7Wo4Nbx.esm.js} +95 -7
- package/dist/{session-CrkWAs-q.esm.js → browserSimulation-B1dWiXp7.esm.js} +61 -476
- package/dist/camera.d.ts +4 -3
- package/dist/camera.esm.js +4 -3
- package/dist/canvas-SKcRBxsk.esm.js +230 -0
- package/dist/consent.d.ts +4 -398
- package/dist/consent.esm.js +6 -77
- package/dist/consentManager-BYo9Nu1r.esm.js +90 -0
- package/dist/consentManager-Cg5Sk2tv.d.ts +419 -0
- package/dist/{consentStateMachine-CCT-B60O.esm.js → consentStateMachine-BG3yL8aC.esm.js} +9 -6
- package/dist/cpf-ocr.d.ts +4 -199
- package/dist/cpf-ocr.esm.js +8 -177
- package/dist/cpfOcrManager-Dg1s_TY5.d.ts +216 -0
- package/dist/cpfOcrManager-sSKegxox.esm.js +190 -0
- package/dist/cross-document-data-match.d.ts +1 -1
- package/dist/cross-document-data-match.esm.js +4 -4
- package/dist/curp-validation.d.ts +8 -158
- package/dist/curp-validation.esm.js +6 -108
- package/dist/curpValidationManager-CFem6zP9.esm.js +122 -0
- package/dist/curpValidationManager-RttixpIc.d.ts +184 -0
- package/dist/{curpValidationStateMachine-CitWLr2c.esm.js → curpValidationStateMachine-B7V_qp66.esm.js} +20 -13
- package/dist/custom-fields.d.ts +2 -2
- package/dist/custom-fields.esm.js +4 -4
- package/dist/custom-watchlist.d.ts +1 -1
- package/dist/custom-watchlist.esm.js +4 -41
- package/dist/customWatchlistStateMachine-HmFybXLX.esm.js +50 -0
- package/dist/{deepsightLoader-Cm4JIT_z.esm.js → deepsightLoader-8tnddNx-.esm.js} +19 -10
- package/dist/deepsightService-CrHmvx8X.esm.js +276 -0
- package/dist/{deepsightService-CEVxzehb.d.ts → deepsightService-Dh5P-hLf.d.ts} +13 -160
- package/dist/device.esm.js +4 -3
- package/dist/document-capture.d.ts +989 -80
- package/dist/document-capture.esm.js +34 -8
- package/dist/document-upload.d.ts +44 -44
- package/dist/document-upload.esm.js +7 -7
- package/dist/{documentCaptureStateMachine-BqzTDy9k.esm.js → documentCaptureStateMachine-CUTUzUw_.esm.js} +90 -6
- package/dist/dynamic-forms.d.ts +20 -5
- package/dist/dynamic-forms.esm.js +150 -61
- package/dist/ekyb.d.ts +32 -13
- package/dist/ekyb.esm.js +25 -15
- package/dist/{ekybStateMachine-CyMx_kg-.esm.js → ekybStateMachine-klc-AImJ.esm.js} +319 -207
- package/dist/ekyc.d.ts +10 -78
- package/dist/ekyc.esm.js +17 -12
- package/dist/{ekycStateMachine-oeO0Iekd.esm.js → ekycStateMachine-CXbpaJJn.esm.js} +201 -113
- package/dist/electronic-signature.d.ts +3 -3
- package/dist/electronic-signature.esm.js +5 -4
- package/dist/{electronicSignatureManager-D9OHzTpG.esm.js → electronicSignatureManager-BaECdJ1u.esm.js} +91 -23
- package/dist/email.d.ts +4 -3
- package/dist/email.esm.js +6 -5
- package/dist/{emailManager-wAV0LE-H.esm.js → emailManager--D5G3ChB.esm.js} +30 -7
- package/dist/{emailManager-DIfnS5g1.d.ts → emailManager-lAzDoQOs.d.ts} +66 -8
- package/dist/{emailStateMachine-DOf4j58N.esm.js → emailStateMachine-CxTOMAjC.esm.js} +46 -11
- package/dist/{endpoints-CnN3SyDa.esm.js → endpoints-BeTK0Mlt.esm.js} +6 -3
- package/dist/{events-D6-e4vok.esm.js → events-Dvvriq9l.esm.js} +3 -1
- package/dist/events.d.ts +2 -0
- package/dist/events.esm.js +1 -1
- package/dist/extensibility.d.ts +41 -16
- package/dist/extensibility.esm.js +55 -33
- package/dist/face-match.d.ts +21 -2
- package/dist/face-match.esm.js +5 -5
- package/dist/{faceCaptureManagerFactory-yqtpxjnN.d.ts → faceCaptureManagerFactory-CjdBUS6s.d.ts} +48 -17
- package/dist/{faceCaptureManagerFactory-Dh2PdGlF.esm.js → faceCaptureManagerFactory-ej2j1LMr.esm.js} +21 -5
- package/dist/{faceCaptureSetup-B3faSpYA.esm.js → faceCaptureSetup-B9t6bYze.esm.js} +68 -183
- package/dist/{faceMatchStateMachine-DNFrxTFS.esm.js → faceMatchStateMachine-DeXXzSuz.esm.js} +62 -6
- package/dist/field-comparison.d.ts +4 -0
- package/dist/field-comparison.esm.js +7 -0
- package/dist/fieldComparisonManager-Bu5TaSr3.d.ts +76 -0
- package/dist/fieldComparisonManager-COGI2ARD.esm.js +162 -0
- package/dist/fiscal-qr.d.ts +59 -0
- package/dist/fiscal-qr.esm.js +323 -0
- package/dist/flow-events.d.ts +6 -5
- package/dist/flow.d.ts +23 -15
- package/dist/flow.esm.js +56 -17
- package/dist/flowCompletionService-BdR2cGgB.d.ts +19 -0
- package/dist/flowCompletionService-DdGojV9K.esm.js +20 -0
- package/dist/{flowServices-PiNsxLfK.esm.js → flowServices-ChgTNggJ.esm.js} +10 -5
- package/dist/geolocation.d.ts +4 -4
- package/dist/geolocation.esm.js +6 -6
- package/dist/{geolocationStateMachine-asasuHY2.esm.js → geolocationStateMachine-Dvh7X0wF.esm.js} +5 -5
- package/dist/getBrowser-C8DP7oTB.esm.js +8 -0
- package/dist/{getBrowser-BSXUTWXw.esm.js → getDeviceClass-C0olyNFS.esm.js} +1 -8
- package/dist/{getDeviceClass-BSntT9_j.esm.js → getDeviceClass-C8Do2qYu.esm.js} +1 -1
- package/dist/government-validation.d.ts +28 -8
- package/dist/government-validation.esm.js +19 -8
- package/dist/{governmentValidationStateMachine-BDDYrJTo.esm.js → governmentValidationStateMachine-DcJ-BfsC.esm.js} +35 -77
- package/dist/home.d.ts +15 -14
- package/dist/home.esm.js +2 -2
- package/dist/http-Cai3IoLS.esm.js +0 -0
- package/dist/http.esm.js +1 -0
- package/dist/id-ocr.d.ts +54 -54
- package/dist/id-ocr.esm.js +5 -5
- package/dist/id-verification.d.ts +27 -27
- package/dist/id-verification.esm.js +4 -4
- package/dist/id.d.ts +12 -10
- package/dist/id.esm.js +70 -27
- package/dist/{idCaptureManager-Fyd0eam-.d.ts → idCaptureManager-ChCNmgBj.d.ts} +40 -20
- package/dist/{idCaptureManager-D0ktk7Hh.esm.js → idCaptureManager-D3pwWutw.esm.js} +22 -7
- package/dist/{idCaptureStateMachine-dwlBUjbC.esm.js → idCaptureStateMachine-B3AiDIsT.esm.js} +172 -123
- package/dist/{idOcrStateMachine-YbjjC_Gg.esm.js → idOcrStateMachine-CDQ5d_VM.esm.js} +4 -4
- package/dist/{idVerificationStateMachine-xbw9HP1Z.esm.js → idVerificationStateMachine-kRxwImzO.esm.js} +2 -2
- package/dist/identity-reuse.d.ts +4 -530
- package/dist/identity-reuse.esm.js +8 -274
- package/dist/identityReuseManager-C6n_97dw.esm.js +95 -0
- package/dist/identityReuseManager-Cww-NDtd.d.ts +428 -0
- package/dist/identityReuseStateMachine-BfE5YiEr.esm.js +148 -0
- package/dist/{index-BcRG8rtJ.d.ts → index-B5hPA0Bg.d.ts} +2 -2
- package/dist/{index-ChHWNH48.d.ts → index-B9NysVDB.d.ts} +469 -195
- package/dist/index.d.ts +2 -2
- package/dist/index.esm.js +10 -8
- package/dist/{invokeOnCaptureCallback-rc6kBHo5.esm.js → invokeOnCaptureCallback-ygByVdnn.esm.js} +1 -1
- package/dist/{lib-BB0B_qQX.esm.js → lib-BY67lgbq.esm.js} +1 -1
- package/dist/mandatory-consent.d.ts +8 -412
- package/dist/mandatory-consent.esm.js +6 -76
- package/dist/mandatoryConsentManager-Dq6WiOZh.d.ts +429 -0
- package/dist/mandatoryConsentManager-H6D18cZB.esm.js +89 -0
- package/dist/{mandatoryConsentStateMachine-Cnco1jvn.esm.js → mandatoryConsentStateMachine-DtQNW1ji.esm.js} +6 -6
- package/dist/openviduLazy-B8L--0oe.esm.js +3 -0
- package/dist/{openviduLazy-Cok70ZSg.esm.js → openviduLazy-Dh14JNJc.esm.js} +2 -2
- package/dist/otp-CGMdUzBC.esm.js +33 -0
- package/dist/otp-DF5A0sFx.d.ts +8 -0
- package/dist/permissionGuards-D0wGddy7.esm.js +23 -0
- package/dist/permissionServices-Doec4X5L.esm.js +130 -0
- package/dist/phone.d.ts +4 -3
- package/dist/phone.esm.js +6 -5
- package/dist/{phoneManager-DAJbGhlY.esm.js → phoneManager-BmF-0Ez4.esm.js} +30 -7
- package/dist/{phoneManager-B6M30hKE.d.ts → phoneManager-fPmIBYQK.d.ts} +65 -7
- package/dist/{phoneStateMachine-CuPARRaT.esm.js → phoneStateMachine-BiV0yoEx.esm.js} +46 -11
- package/dist/{qe-signature-DFo_Cc-I.esm.js → qe-signature-CUYPcHVo.esm.js} +1 -1
- package/dist/qe-signature.d.ts +3 -3
- package/dist/qe-signature.esm.js +6 -5
- package/dist/{recordingService-Ig2UgbLv.esm.js → recordingService-yRw7hfzU.esm.js} +197 -179
- package/dist/redirect-to-mobile.d.ts +6 -104
- package/dist/redirect-to-mobile.esm.js +6 -99
- package/dist/redirectToMobileManager-BNe3IzC_.d.ts +178 -0
- package/dist/redirectToMobileManager-Dy3t7o0C.esm.js +159 -0
- package/dist/{redirectToMobileStateMachine-BOEqe46A.esm.js → redirectToMobileStateMachine-DyAdRxfP.esm.js} +28 -19
- package/dist/{runChildModule-CqqwqAkW.esm.js → runChildModule-CuoHZ1cx.esm.js} +35 -3
- package/dist/selfie.d.ts +13 -11
- package/dist/selfie.esm.js +53 -24
- package/dist/{selfieManager-Duisl7qN.esm.js → selfieManager-BNuTIGAz.esm.js} +6 -6
- package/dist/{selfieManager-D0lSgd-J.d.ts → selfieManager-C2y_t6DG.d.ts} +4 -4
- package/dist/{selfieStateMachine-D76whWEf.esm.js → selfieStateMachine-Bv99bZJE.esm.js} +5 -3
- package/dist/session-DoVb-OcB.esm.js +152 -0
- package/dist/session.d.ts +37 -5
- package/dist/session.esm.js +12 -7
- package/dist/sessionInitializer-DRB-hgbV.esm.js +366 -0
- package/dist/{setup-C5AITV8m.d.ts → setup-BwCluiw3.d.ts} +86 -6
- package/dist/{setup-DPPAxmXf.esm.js → setup-CUO4mErT.esm.js} +175 -25
- package/dist/signature.d.ts +2 -2
- package/dist/signature.esm.js +4 -4
- package/dist/{signatureStateMachine-B5-QVUve.esm.js → signatureStateMachine-C5qqYLRz.esm.js} +3 -3
- package/dist/stats-BMNUG1AU.esm.js +41 -0
- package/dist/stats.d.ts +13 -2
- package/dist/stats.esm.js +3 -2
- package/dist/trust-graph.d.ts +33 -4
- package/dist/trust-graph.esm.js +21 -15
- package/dist/{types-CFV9G_7j.d.ts → types-Bj9hdFjU.d.ts} +1 -1
- package/dist/{types-BP1m8VRw.d.ts → types-DOUhndhT.d.ts} +14 -2
- package/dist/types-DsnEVMhr.esm.js +34 -0
- package/dist/types-DvGZI7BF.d.ts +131 -0
- package/dist/{types-B06Ypu2F.d.ts → types-NuT8ftBV.d.ts} +1 -1
- package/dist/types-ya0LN_MX.d.ts +5 -0
- package/dist/{warmup-CEcppFiS.d.ts → warmup-Dg8Lh-50.d.ts} +8 -0
- package/dist/wasm.d.ts +6 -4
- package/dist/wasm.esm.js +11 -9
- package/dist/watchlist-for-business.d.ts +1 -1
- package/dist/watchlist-for-business.esm.js +5 -73
- package/dist/watchlist.d.ts +1 -1
- package/dist/watchlist.esm.js +4 -41
- package/dist/watchlistForBusinessStateMachine-DMl8j2Ov.esm.js +74 -0
- package/dist/watchlistStateMachine-DmQlqI6L.esm.js +50 -0
- package/dist/workflow.d.ts +146 -100
- package/dist/workflow.esm.js +116 -66
- package/package.json +19 -1
- package/dist/StateMachine-BCQrZJhf.d.ts +0 -2
- package/dist/WasmUtilProvider-j98OJf-S.esm.js +0 -114
- package/dist/browserSimulation-gxD8cSpM.esm.js +0 -20
- package/dist/deepsightService-O74l4Y__.esm.js +0 -489
- package/dist/displayErrors-DqJ_IbsG.d.ts +0 -39
- package/dist/flowCompletionService-DhkT4SRY.d.ts +0 -10
- package/dist/flowCompletionService-P54yzGvA.esm.js +0 -13
- package/dist/openviduLazy-Cm0XFh_v.esm.js +0 -3
- package/dist/permissionServices-D_i6nzEw.esm.js +0 -50
- package/dist/stats-CIfiPzb1.esm.js +0 -16
- package/dist/types-CAD4va6a.d.ts +0 -5
- package/dist/watchlistServices-DMbUhkBX.esm.js +0 -12
- /package/dist/{Actor-CI32dTbG.d.ts → Actor-Y0_Fj-KL.d.ts} +0 -0
- /package/dist/{ITimerCapability-C67ZRskg.esm.js → ITimerCapability-CB0I1Uf2.esm.js} +0 -0
- /package/dist/{Manager-C8PrhBOx.d.ts → Manager-BHn8wH8K.d.ts} +0 -0
- /package/dist/{camera-PA2Ljri3.esm.js → camera-DJWm3V4g.esm.js} +0 -0
- /package/dist/{camera-DBSxa6ML.d.ts → camera-SRBpPq2X.d.ts} +0 -0
- /package/dist/{chunk-CRF6K_H_.esm.js → chunk-CMUKZ2uL.esm.js} +0 -0
- /package/dist/{cpf-PPz2Njto.esm.js → cpf-BRzggV8G.esm.js} +0 -0
- /package/dist/{dateUtils-UoN5xswP.esm.js → dateUtils-AksLQmgV.esm.js} +0 -0
- /package/dist/{platform-CfrjKhmi.esm.js → platform-SKvEfCBh.esm.js} +0 -0
- /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-
|
|
3
|
-
import {
|
|
4
|
-
import { a as
|
|
5
|
-
import {
|
|
6
|
-
import { t as getDeviceClass } from "./getDeviceClass-
|
|
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-yRw7hfzU.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-B9t6bYze.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
|
|
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 &&
|
|
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
|
|
2
|
-
import { i as stopCameraStream, n as enumerateVideoDevices, r as requestCameraAccess, t as applyTrackConstraints } from "./camera-
|
|
3
|
-
import {
|
|
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
|
|
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
|
|
430
|
+
return { stream: await getDesktopBackCameraStream(deviceId) };
|
|
343
431
|
}
|
|
344
432
|
|
|
345
433
|
//#endregion
|
|
346
|
-
export {
|
|
434
|
+
export { getBackCameraStream as n, getDesktopCameraStream as r, ensureFrontCameraStream as t };
|