@smileid/usesmileid 12.0.0 → 12.0.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/CHANGELOG.md +4 -0
- package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.d.ts +11 -0
- package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.d.ts.map +1 -0
- package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.js +17 -0
- package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.js.map +1 -0
- package/dist/core/exception/capture_validation_exceptions.d.ts +1 -0
- package/dist/core/exception/capture_validation_exceptions.d.ts.map +1 -1
- package/dist/core/exception/capture_validation_exceptions.js +1 -0
- package/dist/core/exception/capture_validation_exceptions.js.map +1 -1
- package/dist/core/exception/index.d.ts +1 -0
- package/dist/core/exception/index.d.ts.map +1 -1
- package/dist/core/exception/index.js +1 -0
- package/dist/core/exception/index.js.map +1 -1
- package/dist/core/exception/use_smile_id_error_code.d.ts +1 -0
- package/dist/core/exception/use_smile_id_error_code.d.ts.map +1 -1
- package/dist/core/exception/use_smile_id_error_code.js +1 -0
- package/dist/core/exception/use_smile_id_error_code.js.map +1 -1
- package/dist/core/models/config.d.ts +19 -0
- package/dist/core/models/config.d.ts.map +1 -1
- package/dist/core/models/document_type.d.ts +1 -1
- package/dist/core/models/document_type.d.ts.map +1 -1
- package/dist/core/models/document_type.js +2 -2
- package/dist/core/models/document_type.js.map +1 -1
- package/dist/core/models/global_privacy_control.d.ts +36 -0
- package/dist/core/models/global_privacy_control.d.ts.map +1 -0
- package/dist/core/models/global_privacy_control.js +39 -0
- package/dist/core/models/global_privacy_control.js.map +1 -0
- package/dist/core/models/network_config.d.ts +2 -2
- package/dist/core/models/network_config.js +2 -2
- package/dist/data/api/interceptors/smile_auth_interceptor.d.ts.map +1 -1
- package/dist/data/api/interceptors/smile_auth_interceptor.js +3 -17
- package/dist/data/api/interceptors/smile_auth_interceptor.js.map +1 -1
- package/dist/data/api/smile_id_api.d.ts +1 -1
- package/dist/data/api/smile_id_api.d.ts.map +1 -1
- package/dist/data/dsl/builder/retry_config_builder.d.ts +4 -4
- package/dist/data/dsl/builder/retry_config_builder.d.ts.map +1 -1
- package/dist/data/dsl/builder/retry_config_builder.js +6 -6
- package/dist/data/dsl/builder/retry_config_builder.js.map +1 -1
- package/dist/data/smile_id_urls.d.ts +1 -1
- package/dist/data/smile_id_urls.js +1 -1
- package/dist/data/smile_id_urls.js.map +1 -1
- package/dist/data/util/retry_util.d.ts +1 -1
- package/dist/data/util/retry_util.d.ts.map +1 -1
- package/dist/data/util/retry_util.js +5 -0
- package/dist/data/util/retry_util.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/metadata/builder_configuration.d.ts +5 -0
- package/dist/metadata/builder_configuration.d.ts.map +1 -1
- package/dist/metadata/builder_configuration.js +1 -0
- package/dist/metadata/builder_configuration.js.map +1 -1
- package/dist/metadata/metadata_configuration_mappers.d.ts +2 -3
- package/dist/metadata/metadata_configuration_mappers.d.ts.map +1 -1
- package/dist/metadata/metadata_configuration_mappers.js +13 -6
- package/dist/metadata/metadata_configuration_mappers.js.map +1 -1
- package/dist/metadata/use_smile_id_metadata_factory.d.ts.map +1 -1
- package/dist/metadata/use_smile_id_metadata_factory.js +14 -5
- package/dist/metadata/use_smile_id_metadata_factory.js.map +1 -1
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.d.ts +5 -2
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.d.ts.map +1 -1
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.js +8 -3
- package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.js.map +1 -1
- package/dist/presentation/components/use_smile_id_instructions_hero.d.ts.map +1 -1
- package/dist/presentation/components/use_smile_id_instructions_hero.js +8 -3
- package/dist/presentation/components/use_smile_id_instructions_hero.js.map +1 -1
- package/dist/presentation/flow/dsl/builder/config_builder.d.ts +16 -0
- package/dist/presentation/flow/dsl/builder/config_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/builder/config_builder.js +18 -0
- package/dist/presentation/flow/dsl/builder/config_builder.js.map +1 -1
- package/dist/presentation/flow/dsl/builder/screens_builder.d.ts +3 -6
- package/dist/presentation/flow/dsl/builder/screens_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/builder/screens_builder.js +3 -6
- package/dist/presentation/flow/dsl/builder/screens_builder.js.map +1 -1
- package/dist/presentation/flow/flow_navigation_manager.d.ts +5 -1
- package/dist/presentation/flow/flow_navigation_manager.d.ts.map +1 -1
- package/dist/presentation/flow/flow_navigation_manager.js +7 -1
- package/dist/presentation/flow/flow_navigation_manager.js.map +1 -1
- package/dist/presentation/flow/model/instructions_defaults.d.ts.map +1 -1
- package/dist/presentation/flow/model/instructions_defaults.js +1 -1
- package/dist/presentation/flow/model/instructions_defaults.js.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_capture_screen.d.ts.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_capture_screen.js +13 -3
- package/dist/presentation/flow/screen/orchestrated_capture_screen.js.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_consent_screen.d.ts.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_consent_screen.js +3 -1
- package/dist/presentation/flow/screen/orchestrated_consent_screen.js.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_preview_screen.d.ts.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_preview_screen.js +0 -8
- package/dist/presentation/flow/screen/orchestrated_preview_screen.js.map +1 -1
- package/dist/presentation/flow/use_smile_id_flow.d.ts.map +1 -1
- package/dist/presentation/flow/use_smile_id_flow.js +10 -4
- package/dist/presentation/flow/use_smile_id_flow.js.map +1 -1
- package/dist/presentation/flow/validation/flow_validator.d.ts.map +1 -1
- package/dist/presentation/flow/validation/flow_validator.js +42 -20
- package/dist/presentation/flow/validation/flow_validator.js.map +1 -1
- package/dist/presentation/screen/helpers/capture_ui_state.d.ts +6 -6
- package/dist/presentation/screen/helpers/capture_ui_state.d.ts.map +1 -1
- package/dist/presentation/screen/helpers/capture_ui_state.js +19 -19
- package/dist/presentation/screen/helpers/capture_ui_state.js.map +1 -1
- package/dist/presentation/screen/helpers/ess_turn_haptics.d.ts +2 -2
- package/dist/presentation/screen/helpers/ess_turn_haptics.d.ts.map +1 -1
- package/dist/presentation/screen/helpers/ess_turn_haptics.js +6 -6
- package/dist/presentation/screen/helpers/ess_turn_haptics.js.map +1 -1
- package/dist/presentation/screen/helpers/scan_state_to_overlay_state.d.ts +5 -5
- package/dist/presentation/screen/helpers/scan_state_to_overlay_state.d.ts.map +1 -1
- package/dist/presentation/screen/helpers/scan_state_to_overlay_state.js +11 -11
- package/dist/presentation/screen/helpers/scan_state_to_overlay_state.js.map +1 -1
- package/dist/presentation/screen/helpers/use_capture_orientation_lock.d.ts +13 -3
- package/dist/presentation/screen/helpers/use_capture_orientation_lock.d.ts.map +1 -1
- package/dist/presentation/screen/helpers/use_capture_orientation_lock.js +48 -6
- package/dist/presentation/screen/helpers/use_capture_orientation_lock.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_capture_screen.d.ts +4 -2
- package/dist/presentation/screen/use_smile_id_capture_screen.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_capture_screen.js +36 -15
- package/dist/presentation/screen/use_smile_id_capture_screen.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_consent_screen.d.ts +7 -0
- package/dist/presentation/screen/use_smile_id_consent_screen.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_consent_screen.js +6 -5
- package/dist/presentation/screen/use_smile_id_consent_screen.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_document_back_instructions.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_document_back_instructions.js +5 -13
- package/dist/presentation/screen/use_smile_id_document_back_instructions.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_document_preview_screen.js +1 -1
- package/dist/presentation/screen/use_smile_id_document_preview_screen.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_preview_screen.d.ts +1 -21
- package/dist/presentation/screen/use_smile_id_preview_screen.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_preview_screen.js +3 -14
- package/dist/presentation/screen/use_smile_id_preview_screen.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_processing_screen.js +1 -1
- package/dist/presentation/screen/use_smile_id_processing_screen.js.map +1 -1
- package/dist/presentation/utils/locale_utils.d.ts +10 -4
- package/dist/presentation/utils/locale_utils.d.ts.map +1 -1
- package/dist/presentation/utils/locale_utils.js +13 -5
- package/dist/presentation/utils/locale_utils.js.map +1 -1
- package/dist/testing/fake_face_analyzer.d.ts +43 -0
- package/dist/testing/fake_face_analyzer.d.ts.map +1 -0
- package/dist/testing/fake_face_analyzer.js +52 -0
- package/dist/testing/fake_face_analyzer.js.map +1 -0
- package/dist/testing/index.d.ts +5 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +7 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/scenario_expectations.d.ts +28 -0
- package/dist/testing/scenario_expectations.d.ts.map +1 -0
- package/dist/testing/scenario_expectations.js +65 -0
- package/dist/testing/scenario_expectations.js.map +1 -0
- package/dist/testing/scenario_loader.d.ts +11 -0
- package/dist/testing/scenario_loader.d.ts.map +1 -0
- package/dist/testing/scenario_loader.js +64 -0
- package/dist/testing/scenario_loader.js.map +1 -0
- package/dist/testing/scripted_scan_results.d.ts +17 -0
- package/dist/testing/scripted_scan_results.d.ts.map +1 -0
- package/dist/testing/scripted_scan_results.js +52 -0
- package/dist/testing/scripted_scan_results.js.map +1 -0
- package/package.json +11 -4
- package/src/__tests__/dsl.test.ts +51 -1
- package/src/__tests__/setup_react_native.ts +17 -2
- package/src/__tests__/snapshots/__snapshots__/screens_structural.test.tsx.snap +5261 -0
- package/src/__tests__/snapshots/screens_structural.test.tsx +230 -0
- package/src/camera/__tests__/use_smile_id_camera_system.test.ts +103 -0
- package/src/core/exception/__tests__/builder_validation_exceptions.test.ts +67 -0
- package/src/core/exception/agent_mode_with_enhanced_liveness_exception.ts +20 -0
- package/src/core/exception/capture_validation_exceptions.ts +1 -0
- package/src/core/exception/index.ts +1 -0
- package/src/core/exception/use_smile_id_error_code.ts +1 -0
- package/src/core/models/__tests__/document_type.test.ts +2 -2
- package/src/core/models/__tests__/flow_models.test.ts +26 -0
- package/src/core/models/config.ts +22 -0
- package/src/core/models/document_type.ts +2 -2
- package/src/core/models/global_privacy_control.ts +45 -0
- package/src/core/models/network_config.ts +2 -2
- package/src/data/api/__tests__/smile_id_api.test.ts +1 -1
- package/src/data/api/interceptors/__tests__/gzip_interceptor.test.ts +83 -0
- package/src/data/api/interceptors/smile_auth_interceptor.ts +3 -18
- package/src/data/compression/__tests__/payload_compressor_real_jpeg.test.ts +6 -2
- package/src/data/dsl/builder/__tests__/config_builders.test.ts +62 -0
- package/src/data/dsl/builder/retry_config_builder.ts +6 -6
- package/src/data/factory/__tests__/retry_gzip_mac_composition.test.ts +163 -0
- package/src/data/factory/__tests__/signed_job_submission_headers.test.ts +1 -1
- package/src/data/repository/__tests__/network_retries.test.ts +1 -1
- package/src/data/repository/__tests__/use_smile_id_repository.test.ts +1 -1
- package/src/data/security/__tests__/request_canonicalizer.test.ts +132 -0
- package/src/data/smile_id_urls.ts +1 -1
- package/src/data/util/__tests__/retry_util.test.ts +25 -0
- package/src/data/util/retry_util.ts +9 -1
- package/src/index.ts +6 -4
- package/src/metadata/__tests__/metadata_configuration_mappers.test.ts +39 -0
- package/src/metadata/__tests__/metadata_configuration_objects.test.ts +2 -1
- package/src/metadata/__tests__/metadata_device_context.test.ts +3 -3
- package/src/metadata/__tests__/metadata_device_os_android.test.ts +18 -0
- package/src/metadata/__tests__/metadata_golden_fixture.json +1 -1
- package/src/metadata/__tests__/metadata_payload_golden.test.ts +4 -4
- package/src/metadata/__tests__/use_smile_id_metadata.test.ts +1 -1
- package/src/metadata/builder_configuration.ts +6 -0
- package/src/metadata/metadata_configuration_mappers.ts +21 -7
- package/src/metadata/use_smile_id_metadata_factory.ts +17 -6
- package/src/presentation/assets/si_document_green_book_hero_animation.json +1 -4668
- package/src/presentation/assets/si_document_hero_animation.json +1 -4799
- package/src/presentation/assets/si_document_hero_back_animation.json +1 -2039
- package/src/presentation/assets/si_document_passport_hero_animation.json +1 -14491
- package/src/presentation/assets/si_ess_all_directions_hero_animation.json +1 -0
- package/src/presentation/assets/si_ess_animation_all_directions.json +1 -6589
- package/src/presentation/assets/si_selfie_hero_animation.json +1 -1439
- package/src/presentation/assets/si_smile_to_capture_animation.json +1 -1439
- package/src/presentation/components/__tests__/use_smile_id_enhanced_smart_selfie_clip.test.tsx +9 -4
- package/src/presentation/components/__tests__/use_smile_id_instructions_hero.test.tsx +44 -0
- package/src/presentation/components/use_smile_id_enhanced_smart_selfie_clip.tsx +9 -3
- package/src/presentation/components/use_smile_id_instructions_hero.tsx +10 -0
- package/src/presentation/flow/__tests__/document_flow_navigation.test.ts +3 -3
- package/src/presentation/flow/__tests__/flow_navigation_manager.test.ts +49 -0
- package/src/presentation/flow/dsl/builder/__tests__/config_builder.test.ts +25 -0
- package/src/presentation/flow/dsl/builder/config_builder.ts +21 -0
- package/src/presentation/flow/dsl/builder/screens_builder.ts +3 -6
- package/src/presentation/flow/flow_navigation_manager.ts +6 -1
- package/src/presentation/flow/model/instructions_defaults.ts +1 -1
- package/src/presentation/flow/screen/orchestrated_capture_screen.tsx +18 -3
- package/src/presentation/flow/screen/orchestrated_consent_screen.tsx +5 -0
- package/src/presentation/flow/screen/orchestrated_preview_screen.tsx +0 -12
- package/src/presentation/flow/use_smile_id_flow.tsx +11 -4
- package/src/presentation/flow/validation/__tests__/flow_validator.test.ts +61 -1
- package/src/presentation/flow/validation/flow_validator.ts +55 -26
- package/src/presentation/screen/__tests__/capture_ui_state.test.ts +66 -47
- package/src/presentation/screen/__tests__/ess_turn_haptics.test.ts +15 -11
- package/src/presentation/screen/__tests__/scan_state_to_overlay_state.test.ts +47 -27
- package/src/presentation/screen/__tests__/use_smile_id_capture_screen.test.tsx +176 -14
- package/src/presentation/screen/__tests__/use_smile_id_document_back_instructions.test.tsx +1 -1
- package/src/presentation/screen/__tests__/use_smile_id_preview_screen.test.tsx +10 -40
- package/src/presentation/screen/helpers/__tests__/use_capture_orientation_lock.test.tsx +212 -0
- package/src/presentation/screen/helpers/capture_ui_state.ts +27 -27
- package/src/presentation/screen/helpers/ess_turn_haptics.ts +9 -9
- package/src/presentation/screen/helpers/scan_state_to_overlay_state.ts +13 -13
- package/src/presentation/screen/helpers/use_capture_orientation_lock.ts +69 -7
- package/src/presentation/screen/use_smile_id_capture_screen.tsx +47 -19
- package/src/presentation/screen/use_smile_id_consent_screen.tsx +16 -5
- package/src/presentation/screen/use_smile_id_document_back_instructions.tsx +14 -23
- package/src/presentation/screen/use_smile_id_document_preview_screen.tsx +1 -1
- package/src/presentation/screen/use_smile_id_preview_screen.tsx +13 -45
- package/src/presentation/screen/use_smile_id_processing_screen.tsx +1 -1
- package/src/presentation/utils/__tests__/locale_utils.test.ts +46 -5
- package/src/presentation/utils/locale_utils.ts +13 -4
- package/src/testing/__tests__/fake_face_analyzer.test.ts +42 -0
- package/src/testing/__tests__/scenario_expectations.test.ts +110 -0
- package/src/testing/__tests__/scenario_loader.test.ts +64 -0
- package/src/testing/fake_face_analyzer.ts +82 -0
- package/src/testing/index.ts +15 -0
- package/src/testing/scenario_expectations.ts +87 -0
- package/src/testing/scenario_loader.ts +83 -0
- package/src/testing/scripted_scan_results.ts +66 -0
- package/dist/presentation/components/use_smile_id_face_silhouette_overlay.d.ts +0 -15
- package/dist/presentation/components/use_smile_id_face_silhouette_overlay.d.ts.map +0 -1
- package/dist/presentation/components/use_smile_id_face_silhouette_overlay.js +0 -19
- package/dist/presentation/components/use_smile_id_face_silhouette_overlay.js.map +0 -1
- package/src/presentation/components/use_smile_id_face_silhouette_overlay.tsx +0 -27
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
ScriptedScenario,
|
|
3
|
+
ScriptedScenarioStep,
|
|
4
|
+
} from "./fake_face_analyzer";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Emission vocabulary of the shared `e2e-scenarios` schema (`schema.json` in
|
|
8
|
+
* every repo's scenario folder). A step whose `emit` is outside this set is a
|
|
9
|
+
* drift bug — the loader rejects it rather than letting the fake silently treat
|
|
10
|
+
* it as "no detection".
|
|
11
|
+
*/
|
|
12
|
+
const KNOWN_EMITS: ReadonlySet<string> = new Set([
|
|
13
|
+
"noFace",
|
|
14
|
+
"faceTooFar",
|
|
15
|
+
"faceCentered",
|
|
16
|
+
"headTurnLeft",
|
|
17
|
+
"headTurnRight",
|
|
18
|
+
"headTurnUp",
|
|
19
|
+
"satisfied",
|
|
20
|
+
"noDocument",
|
|
21
|
+
"documentFound",
|
|
22
|
+
"documentUnstable",
|
|
23
|
+
]);
|
|
24
|
+
|
|
25
|
+
const CAPTURE_TYPES: ReadonlySet<string> = new Set(["selfie", "document"]);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Validates a parsed shared-scenario JSON object and returns the typed
|
|
29
|
+
* [ScriptedScenario]. Kept I/O-free (takes an already-parsed object) so the
|
|
30
|
+
* `@smileid/usesmileid/testing` subpath stays environment-agnostic — the caller
|
|
31
|
+
* owns how the JSON is read. Throws with a specific message on any shape drift
|
|
32
|
+
* so a malformed or vocabulary-drifted script fails loudly at load time instead
|
|
33
|
+
* of producing a misleading capture sequence.
|
|
34
|
+
*/
|
|
35
|
+
export function parseScriptedScenario(raw: unknown): ScriptedScenario {
|
|
36
|
+
if (typeof raw !== "object" || raw === null) {
|
|
37
|
+
throw new Error("scenario must be a JSON object");
|
|
38
|
+
}
|
|
39
|
+
const record = raw as Record<string, unknown>;
|
|
40
|
+
|
|
41
|
+
const name = record.name;
|
|
42
|
+
if (typeof name !== "string" || name.length === 0) {
|
|
43
|
+
throw new Error("scenario.name must be a non-empty string");
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const captureType = record.captureType;
|
|
47
|
+
if (typeof captureType !== "string" || !CAPTURE_TYPES.has(captureType)) {
|
|
48
|
+
throw new Error(
|
|
49
|
+
`scenario.captureType must be one of ${[...CAPTURE_TYPES].join(", ")}, got ${String(captureType)}`,
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (!Array.isArray(record.steps) || record.steps.length === 0) {
|
|
54
|
+
throw new Error(`scenario.steps must be a non-empty array in ${name}`);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const steps: ScriptedScenarioStep[] = record.steps.map((step, index) => {
|
|
58
|
+
if (typeof step !== "object" || step === null) {
|
|
59
|
+
throw new Error(`scenario.steps[${index}] must be an object in ${name}`);
|
|
60
|
+
}
|
|
61
|
+
const stepRecord = step as Record<string, unknown>;
|
|
62
|
+
const emit = stepRecord.emit;
|
|
63
|
+
if (typeof emit !== "string" || !KNOWN_EMITS.has(emit)) {
|
|
64
|
+
throw new Error(
|
|
65
|
+
`scenario.steps[${index}].emit "${String(emit)}" is not a known emission in ${name}`,
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
const holdFrames = stepRecord.holdFrames;
|
|
69
|
+
if (
|
|
70
|
+
holdFrames !== undefined &&
|
|
71
|
+
(typeof holdFrames !== "number" ||
|
|
72
|
+
!Number.isInteger(holdFrames) ||
|
|
73
|
+
holdFrames < 1)
|
|
74
|
+
) {
|
|
75
|
+
throw new Error(
|
|
76
|
+
`scenario.steps[${index}].holdFrames must be a positive integer in ${name}`,
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
return holdFrames === undefined ? { emit } : { emit, holdFrames };
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
return { name, captureType, steps };
|
|
83
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CaptureReadyEventKind,
|
|
3
|
+
UseSmileIDScanStateType,
|
|
4
|
+
} from "@smileid/usesmileid_bridge";
|
|
5
|
+
import type {
|
|
6
|
+
CaptureReadyEvent,
|
|
7
|
+
FaceScanResult,
|
|
8
|
+
} from "@smileid/usesmileid_bridge";
|
|
9
|
+
import type { ScriptedScenario } from "./fake_face_analyzer";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Turns a shared E2E scenario into the `FaceScanResult` sequence a capture
|
|
13
|
+
* screen receives frame-by-frame, so a headless test can replay the shared
|
|
14
|
+
* script through the frame stream's `onResult` seam (per-frame detection is a
|
|
15
|
+
* native frame-processor concern; pixels never reach JS).
|
|
16
|
+
*
|
|
17
|
+
* `noFace` → `initial`; `faceTooFar` / `faceCentered` → `found`; the terminal
|
|
18
|
+
* `satisfied` → one `finished` result carrying a `selfie` event plus
|
|
19
|
+
* [livenessCount] `liveness` events at opaque `file://` URLs the screen never
|
|
20
|
+
* reads. Exported only behind the `@smileid/usesmileid/testing` subpath.
|
|
21
|
+
*/
|
|
22
|
+
export function scriptedFaceScanResults(
|
|
23
|
+
scenario: ScriptedScenario,
|
|
24
|
+
options: { readonly livenessCount?: number } = {},
|
|
25
|
+
): FaceScanResult[] {
|
|
26
|
+
const livenessCount = options.livenessCount ?? 2;
|
|
27
|
+
const output: FaceScanResult["output"] = { faces: [], brightness: 128 };
|
|
28
|
+
const results: FaceScanResult[] = [];
|
|
29
|
+
|
|
30
|
+
for (const step of scenario.steps) {
|
|
31
|
+
if (step.emit === "satisfied") {
|
|
32
|
+
results.push({
|
|
33
|
+
output,
|
|
34
|
+
state: { type: UseSmileIDScanStateType.Finished },
|
|
35
|
+
capturedEvents: captureEvents(livenessCount),
|
|
36
|
+
});
|
|
37
|
+
return results;
|
|
38
|
+
}
|
|
39
|
+
const type =
|
|
40
|
+
step.emit === "noFace"
|
|
41
|
+
? UseSmileIDScanStateType.Initial
|
|
42
|
+
: UseSmileIDScanStateType.Found;
|
|
43
|
+
for (let frame = 0; frame < (step.holdFrames ?? 1); frame++) {
|
|
44
|
+
results.push({ output, state: { type }, capturedEvents: [] });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return results;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function captureEvents(livenessCount: number): CaptureReadyEvent[] {
|
|
51
|
+
const events: CaptureReadyEvent[] = [
|
|
52
|
+
{
|
|
53
|
+
kind: CaptureReadyEventKind.Selfie,
|
|
54
|
+
captureIndex: 0,
|
|
55
|
+
url: "file://selfie-0.jpg",
|
|
56
|
+
},
|
|
57
|
+
];
|
|
58
|
+
for (let index = 1; index <= livenessCount; index++) {
|
|
59
|
+
events.push({
|
|
60
|
+
kind: CaptureReadyEventKind.Liveness,
|
|
61
|
+
captureIndex: index,
|
|
62
|
+
url: `file://liveness-${index}.jpg`,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
return events;
|
|
66
|
+
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { UseSmileIDTheme } from "../theme/theme";
|
|
2
|
-
export type UseSmileIDFaceSilhouetteOverlayProps = {
|
|
3
|
-
readonly visible: boolean;
|
|
4
|
-
readonly theme?: UseSmileIDTheme;
|
|
5
|
-
};
|
|
6
|
-
/**
|
|
7
|
-
* Silhouette guide rendered inside the face oval during the
|
|
8
|
-
* `INSTRUCTION` state — gives the user a visual hint of where to
|
|
9
|
-
* place their face before the analyzer kicks in.
|
|
10
|
-
*
|
|
11
|
-
* **STUB.** Silhouette SVG / vector pending; current implementation
|
|
12
|
-
* is an empty view.
|
|
13
|
-
*/
|
|
14
|
-
export declare function UseSmileIDFaceSilhouetteOverlay(props: UseSmileIDFaceSilhouetteOverlayProps): import("react").JSX.Element | null;
|
|
15
|
-
//# sourceMappingURL=use_smile_id_face_silhouette_overlay.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_face_silhouette_overlay.d.ts","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_face_silhouette_overlay.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD,MAAM,MAAM,oCAAoC,GAAG;IACjD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,oCAAoC,sCAQ5C"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { View } from "react-native";
|
|
3
|
-
import { useUseSmileIDTheme } from "../theme/theme_context";
|
|
4
|
-
/**
|
|
5
|
-
* Silhouette guide rendered inside the face oval during the
|
|
6
|
-
* `INSTRUCTION` state — gives the user a visual hint of where to
|
|
7
|
-
* place their face before the analyzer kicks in.
|
|
8
|
-
*
|
|
9
|
-
* **STUB.** Silhouette SVG / vector pending; current implementation
|
|
10
|
-
* is an empty view.
|
|
11
|
-
*/
|
|
12
|
-
export function UseSmileIDFaceSilhouetteOverlay(props) {
|
|
13
|
-
const themeFromContext = useUseSmileIDTheme();
|
|
14
|
-
const theme = props.theme ?? themeFromContext;
|
|
15
|
-
if (!props.visible)
|
|
16
|
-
return null;
|
|
17
|
-
return (_jsx(View, { style: { opacity: 0.3, backgroundColor: theme.colors.stroke } }));
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=use_smile_id_face_silhouette_overlay.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_face_silhouette_overlay.js","sourceRoot":"","sources":["../../../src/presentation/components/use_smile_id_face_silhouette_overlay.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAO5D;;;;;;;GAOG;AACH,MAAM,UAAU,+BAA+B,CAC7C,KAA2C;IAE3C,MAAM,gBAAgB,GAAG,kBAAkB,EAAE,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,gBAAgB,CAAC;IAC9C,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,CACL,KAAC,IAAI,IAAC,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAI,CACxE,CAAC;AACJ,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { View } from "react-native";
|
|
2
|
-
import type { UseSmileIDTheme } from "../theme/theme";
|
|
3
|
-
import { useUseSmileIDTheme } from "../theme/theme_context";
|
|
4
|
-
|
|
5
|
-
export type UseSmileIDFaceSilhouetteOverlayProps = {
|
|
6
|
-
readonly visible: boolean;
|
|
7
|
-
readonly theme?: UseSmileIDTheme;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Silhouette guide rendered inside the face oval during the
|
|
12
|
-
* `INSTRUCTION` state — gives the user a visual hint of where to
|
|
13
|
-
* place their face before the analyzer kicks in.
|
|
14
|
-
*
|
|
15
|
-
* **STUB.** Silhouette SVG / vector pending; current implementation
|
|
16
|
-
* is an empty view.
|
|
17
|
-
*/
|
|
18
|
-
export function UseSmileIDFaceSilhouetteOverlay(
|
|
19
|
-
props: UseSmileIDFaceSilhouetteOverlayProps,
|
|
20
|
-
) {
|
|
21
|
-
const themeFromContext = useUseSmileIDTheme();
|
|
22
|
-
const theme = props.theme ?? themeFromContext;
|
|
23
|
-
if (!props.visible) return null;
|
|
24
|
-
return (
|
|
25
|
-
<View style={{ opacity: 0.3, backgroundColor: theme.colors.stroke }} />
|
|
26
|
-
);
|
|
27
|
-
}
|