@smileid/usesmileid 12.0.0 → 12.0.2
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 +8 -0
- package/README.md +1 -1
- package/dist/camera/camera_defaults.d.ts +2 -0
- package/dist/camera/camera_defaults.d.ts.map +1 -1
- package/dist/camera/camera_defaults.js +2 -0
- package/dist/camera/camera_defaults.js.map +1 -1
- 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/flow_exceptions.d.ts +4 -2
- package/dist/core/exception/flow_exceptions.d.ts.map +1 -1
- package/dist/core/exception/flow_exceptions.js +3 -2
- package/dist/core/exception/flow_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/missing_job_type_exception.d.ts +1 -3
- package/dist/core/exception/missing_job_type_exception.d.ts.map +1 -1
- package/dist/core/exception/missing_job_type_exception.js +2 -4
- package/dist/core/exception/missing_job_type_exception.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 +5 -1
- package/dist/data/api/smile_id_api.d.ts.map +1 -1
- package/dist/data/api/smile_id_api.js +30 -27
- package/dist/data/api/smile_id_api.js.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/model/job_request.d.ts +28 -12
- package/dist/data/model/job_request.d.ts.map +1 -1
- package/dist/data/model/token_payload.d.ts +78 -0
- package/dist/data/model/token_payload.d.ts.map +1 -0
- package/dist/data/model/token_payload.js +132 -0
- package/dist/data/model/token_payload.js.map +1 -0
- package/dist/data/model/user_details_payload.d.ts +39 -0
- package/dist/data/model/user_details_payload.d.ts.map +1 -0
- package/dist/data/model/user_details_payload.js +53 -0
- package/dist/data/model/user_details_payload.js.map +1 -0
- 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/data/util/use_smile_id_token_decoder.d.ts +15 -3
- package/dist/data/util/use_smile_id_token_decoder.d.ts.map +1 -1
- package/dist/data/util/use_smile_id_token_decoder.js +20 -8
- package/dist/data/util/use_smile_id_token_decoder.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/l10n/strings_en.d.ts +4 -1
- package/dist/l10n/strings_en.d.ts.map +1 -1
- package/dist/l10n/strings_en.js +4 -1
- package/dist/l10n/strings_en.js.map +1 -1
- package/dist/l10n/use_smile_id_localizations.d.ts +10 -0
- package/dist/l10n/use_smile_id_localizations.d.ts.map +1 -1
- package/dist/l10n/use_smile_id_localizations.js +59 -3
- package/dist/l10n/use_smile_id_localizations.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_button.d.ts.map +1 -1
- package/dist/presentation/components/use_smile_id_button.js +8 -2
- package/dist/presentation/components/use_smile_id_button.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 +6 -12
- package/dist/presentation/flow/dsl/builder/screens_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/builder/screens_builder.js +7 -12
- package/dist/presentation/flow/dsl/builder/screens_builder.js.map +1 -1
- package/dist/presentation/flow/dsl/use_smile_id_flow_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/use_smile_id_flow_builder.js +23 -1
- package/dist/presentation/flow/dsl/use_smile_id_flow_builder.js.map +1 -1
- package/dist/presentation/flow/flow_navigation_manager.d.ts +22 -3
- package/dist/presentation/flow/flow_navigation_manager.d.ts.map +1 -1
- package/dist/presentation/flow/flow_navigation_manager.js +84 -46
- 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/screen/orchestrated_processing_screen.d.ts.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_processing_screen.js +25 -5
- package/dist/presentation/flow/screen/orchestrated_processing_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 +45 -12
- package/dist/presentation/flow/use_smile_id_flow.js.map +1 -1
- package/dist/presentation/flow/validation/flow_validator.d.ts +16 -2
- package/dist/presentation/flow/validation/flow_validator.d.ts.map +1 -1
- package/dist/presentation/flow/validation/flow_validator.js +61 -47
- package/dist/presentation/flow/validation/flow_validator.js.map +1 -1
- package/dist/presentation/flow/validation/job_type_validator.d.ts +7 -0
- package/dist/presentation/flow/validation/job_type_validator.d.ts.map +1 -1
- package/dist/presentation/flow/validation/job_type_validator.js +52 -27
- package/dist/presentation/flow/validation/job_type_validator.js.map +1 -1
- package/dist/presentation/flow/validation/user_details_validator.d.ts +9 -0
- package/dist/presentation/flow/validation/user_details_validator.d.ts.map +1 -0
- package/dist/presentation/flow/validation/user_details_validator.js +40 -0
- package/dist/presentation/flow/validation/user_details_validator.js.map +1 -0
- package/dist/presentation/screen/helpers/capture_screen_helpers.d.ts.map +1 -1
- package/dist/presentation/screen/helpers/capture_screen_helpers.js +1 -0
- package/dist/presentation/screen/helpers/capture_screen_helpers.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 +90 -23
- 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__/react_native_mock.tsx +22 -0
- package/src/__tests__/setup_react_native.ts +17 -2
- package/src/__tests__/snapshots/__snapshots__/screens_structural.test.tsx.snap +5267 -0
- package/src/__tests__/snapshots/screens_structural.test.tsx +230 -0
- package/src/camera/__tests__/camera_permissions.test.ts +72 -0
- package/src/camera/__tests__/camera_system_focus.test.ts +173 -0
- package/src/camera/__tests__/use_smile_id_camera_preview.test.tsx +461 -0
- package/src/camera/__tests__/use_smile_id_camera_system.test.ts +103 -0
- package/src/camera/__tests__/use_smile_id_frame_stream_hook.test.tsx +229 -0
- package/src/camera/camera_defaults.ts +3 -0
- package/src/core/exception/__tests__/builder_validation_exceptions.test.ts +81 -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/flow_exceptions.test.ts +10 -0
- package/src/core/exception/flow_exceptions.ts +3 -2
- package/src/core/exception/index.ts +1 -0
- package/src/core/exception/missing_job_type_exception.ts +2 -4
- 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 +275 -1
- package/src/data/api/interceptors/__tests__/credential_header_redaction.test.ts +144 -0
- 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/api/smile_id_api.ts +36 -49
- package/src/data/compression/__tests__/payload_compressor_real_jpeg.test.ts +6 -2
- package/src/data/dsl/__tests__/use_smile_id_network_builder.test.ts +157 -0
- 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/model/__tests__/token_payload.test.ts +224 -0
- package/src/data/model/__tests__/user_details_payload.test.ts +100 -0
- package/src/data/model/job_request.ts +27 -12
- package/src/data/model/token_payload.ts +182 -0
- package/src/data/model/user_details_payload.ts +84 -0
- package/src/data/repository/__tests__/network_retries.test.ts +1 -1
- package/src/data/repository/__tests__/repository_dispatch.test.ts +366 -0
- 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/security/__tests__/signing_crypto.test.ts +203 -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/__tests__/use_smile_id_token_decoder.test.ts +179 -0
- package/src/data/util/retry_util.ts +9 -1
- package/src/data/util/use_smile_id_token_decoder.ts +29 -8
- package/src/index.ts +6 -4
- package/src/l10n/__tests__/use_smile_id_localizations.test.ts +122 -5
- package/src/l10n/__tests__/use_smile_id_localizations_provider.test.tsx +112 -0
- package/src/l10n/__tests__/use_smile_id_localizations_surface.test.ts +231 -0
- package/src/l10n/strings_en.ts +5 -1
- package/src/l10n/use_smile_id_localizations.ts +80 -3
- package/src/metadata/__tests__/device_orientation_sampling.test.ts +165 -0
- package/src/metadata/__tests__/geolocation.test.ts +150 -0
- 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__/optional_native_modules.test.ts +234 -0
- package/src/metadata/__tests__/use_smile_id_metadata.test.ts +1 -1
- package/src/metadata/__tests__/use_smile_id_metadata_factory.test.ts +615 -0
- 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_content_card.test.tsx +112 -0
- package/src/presentation/components/__tests__/use_smile_id_enhanced_smart_selfie_clip.test.tsx +9 -4
- package/src/presentation/components/__tests__/use_smile_id_face_oval_image.test.tsx +190 -0
- package/src/presentation/components/__tests__/use_smile_id_instructions_hero.test.tsx +44 -0
- package/src/presentation/components/__tests__/use_smile_id_learn_more_content.test.tsx +159 -0
- package/src/presentation/components/__tests__/use_smile_id_processing_center_indicator.test.tsx +88 -0
- package/src/presentation/components/use_smile_id_button.tsx +7 -2
- 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 +372 -1
- package/src/presentation/flow/__tests__/use_smile_id_flow.test.tsx +651 -0
- package/src/presentation/flow/dsl/__tests__/use_smile_id_builder_component.test.tsx +120 -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 +7 -12
- package/src/presentation/flow/dsl/use_smile_id_flow_builder.ts +27 -1
- package/src/presentation/flow/flow_navigation_manager.ts +108 -93
- package/src/presentation/flow/graph/__tests__/screen_renderer.test.tsx +102 -0
- package/src/presentation/flow/model/instructions_defaults.ts +1 -1
- package/src/presentation/flow/screen/__tests__/orchestrated_capture_screen.test.tsx +836 -0
- package/src/presentation/flow/screen/__tests__/orchestrated_consent_screen.test.tsx +165 -0
- package/src/presentation/flow/screen/__tests__/orchestrated_instructions_screen.test.tsx +163 -0
- package/src/presentation/flow/screen/__tests__/orchestrated_preview_screen.test.tsx +224 -0
- package/src/presentation/flow/screen/__tests__/orchestrated_processing_screen.test.tsx +338 -0
- 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/screen/orchestrated_processing_screen.tsx +42 -5
- package/src/presentation/flow/use_smile_id_flow.tsx +63 -12
- package/src/presentation/flow/validation/__tests__/flow_validator.test.ts +219 -1
- package/src/presentation/flow/validation/__tests__/job_type_validator.test.ts +200 -0
- package/src/presentation/flow/validation/flow_validator.ts +85 -57
- package/src/presentation/flow/validation/job_type_validator.ts +73 -39
- package/src/presentation/flow/validation/user_details_validator.ts +53 -0
- 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__/feedback_copy_table.test.ts +145 -0
- 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 +524 -14
- package/src/presentation/screen/__tests__/use_smile_id_document_back_instructions.test.tsx +4 -2
- package/src/presentation/screen/__tests__/use_smile_id_permission_screen.test.tsx +68 -0
- 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_screen_helpers.ts +1 -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 +107 -28
- 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/theme/__tests__/use_use_smile_id_fonts.test.tsx +166 -0
- 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
|
@@ -2,7 +2,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect } from "react";
|
|
3
3
|
import { UseSmileIDProcessingScreen, } from "../../screen/use_smile_id_processing_screen";
|
|
4
4
|
import { UseSmileIDOrchestratedScreenHost } from "./use_smile_id_orchestrated_screen_host";
|
|
5
|
-
import { ProcessingCancelledException } from "../../../core/exception";
|
|
5
|
+
import { NetworkResponseParseException, NetworkTimeoutException, NetworkTransportException, NetworkUnknownException, ProcessingCancelledException, } from "../../../core/exception";
|
|
6
|
+
import { useUseSmileIDLocalizations } from "../../../l10n/use_smile_id_localizations_provider";
|
|
6
7
|
import { JobType, requiresDocument, requiresSelfie, } from "../../../core/models/job_type";
|
|
7
8
|
/**
|
|
8
9
|
* Orchestrated processing screen. Mounts the visual processing screen,
|
|
@@ -31,21 +32,28 @@ function ProcessingScreenBody(props) {
|
|
|
31
32
|
? navigationManager.captured.frontDocumentPath
|
|
32
33
|
: undefined;
|
|
33
34
|
const documentAspectRatio = navigationManager.documentFrameAspectRatio;
|
|
34
|
-
|
|
35
|
+
const loc = useUseSmileIDLocalizations();
|
|
36
|
+
return (_jsx(UseSmileIDProcessingScreen, { state: mapToProcessingState(navigationManager.jobSubmissionState, loc), showFaceOval: requiresSelfie(jobType) || requiresDocument(jobType), showProgressPercentage: props.processingConfig.showProgressPercentage, showAttribution: props.processingConfig.showAttribution, ...(documentImageUri !== undefined ? { documentImageUri } : {}), ...(documentImageUri !== undefined && documentAspectRatio !== undefined
|
|
35
37
|
? { documentAspectRatio }
|
|
36
38
|
: {}), ...(navigationManager.captured.selfiePath !== undefined
|
|
37
39
|
? { capturedSelfiePath: navigationManager.captured.selfiePath }
|
|
38
40
|
: {}), onContinue: props.onContinue, onRetry: () => navigationManager.retrySubmission(), onExit: () => navigationManager.exit({
|
|
39
41
|
kind: "failed",
|
|
40
|
-
error:
|
|
42
|
+
error: exitError(navigationManager.jobSubmissionState),
|
|
41
43
|
}) }));
|
|
42
44
|
}
|
|
45
|
+
/** The error the flow exits with when the user leaves the processing screen; an already-failed submission is delivered as its own failure. */
|
|
46
|
+
function exitError(state) {
|
|
47
|
+
return state.kind === "failure"
|
|
48
|
+
? state.error
|
|
49
|
+
: new ProcessingCancelledException();
|
|
50
|
+
}
|
|
43
51
|
/**
|
|
44
52
|
* Translate `JobSubmissionState` to the screen's `ProcessingState`.
|
|
45
53
|
* `notAttempted` maps to `loading` so the brief pre-submission window
|
|
46
54
|
* doesn't render an empty card.
|
|
47
55
|
*/
|
|
48
|
-
function mapToProcessingState(state) {
|
|
56
|
+
function mapToProcessingState(state, loc) {
|
|
49
57
|
switch (state.kind) {
|
|
50
58
|
case "notAttempted":
|
|
51
59
|
case "loading":
|
|
@@ -53,7 +61,19 @@ function mapToProcessingState(state) {
|
|
|
53
61
|
case "success":
|
|
54
62
|
return { kind: "success", message: state.response.message };
|
|
55
63
|
case "failure":
|
|
56
|
-
return { kind: "failed", errorMessage: state.error
|
|
64
|
+
return { kind: "failed", errorMessage: userFacingMessage(state.error, loc) };
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/** Transport/timeout and parse/unknown network failures carry technical text — every other failure keeps its message. */
|
|
68
|
+
function userFacingMessage(error, loc) {
|
|
69
|
+
if (error instanceof NetworkTransportException ||
|
|
70
|
+
error instanceof NetworkTimeoutException) {
|
|
71
|
+
return loc.siProcessingErrorNoConnection;
|
|
72
|
+
}
|
|
73
|
+
if (error instanceof NetworkResponseParseException ||
|
|
74
|
+
error instanceof NetworkUnknownException) {
|
|
75
|
+
return loc.siProcessingErrorGeneric;
|
|
57
76
|
}
|
|
77
|
+
return error.message;
|
|
58
78
|
}
|
|
59
79
|
//# sourceMappingURL=orchestrated_processing_screen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrated_processing_screen.js","sourceRoot":"","sources":["../../../../src/presentation/flow/screen/orchestrated_processing_screen.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIlC,OAAO,EACL,0BAA0B,GAE3B,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,gCAAgC,EAAE,MAAM,yCAAyC,CAAC;AAC3F,OAAO,
|
|
1
|
+
{"version":3,"file":"orchestrated_processing_screen.js","sourceRoot":"","sources":["../../../../src/presentation/flow/screen/orchestrated_processing_screen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_flow.d.ts","sourceRoot":"","sources":["../../../src/presentation/flow/use_smile_id_flow.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAc/D,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AA2BtF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAC/D,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC;IAC7E,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,QAAQ,EACR,eAAe,GAChB,EAAE,0BAA0B,sCAwB5B;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;CAC3C,CAAC;
|
|
1
|
+
{"version":3,"file":"use_smile_id_flow.d.ts","sourceRoot":"","sources":["../../../src/presentation/flow/use_smile_id_flow.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAc/D,OAAO,EAIL,KAAK,gBAAgB,EACtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AA2BtF,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,EAAE;QAAE,IAAI,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IAC/D,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC;IAC7E,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACnC,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,QAAQ,EACR,eAAe,GAChB,EAAE,0BAA0B,sCAwB5B;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;CAC3C,CAAC;AAKF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,aAAa,GACd,EAAE,wBAAwB,+BAgQ1B"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useEffect, useMemo, useReducer, useRef } from "react";
|
|
3
|
-
import { Text, useColorScheme, View } from "react-native";
|
|
2
|
+
import { useEffect, useMemo, useReducer, useRef, useState } from "react";
|
|
3
|
+
import { AppState, Text, useColorScheme, View } from "react-native";
|
|
4
4
|
import { FlowNavigationManager, } from "./flow_navigation_manager";
|
|
5
5
|
import { FlowNavigationProvider } from "./flow_navigation_context";
|
|
6
6
|
import { ScreenRenderer } from "./graph/screen_renderer";
|
|
@@ -23,8 +23,8 @@ import { RetryStrategy, } from "../../core/models/network_config";
|
|
|
23
23
|
* whether the partner constructs `network.retry` explicitly or not.
|
|
24
24
|
*/
|
|
25
25
|
const DEFAULT_RETRY = Object.freeze({
|
|
26
|
-
maxAttempts:
|
|
27
|
-
strategy: RetryStrategy.
|
|
26
|
+
maxAttempts: 1,
|
|
27
|
+
strategy: RetryStrategy.none,
|
|
28
28
|
initialDelay: 1,
|
|
29
29
|
multiplier: 2,
|
|
30
30
|
maxDelay: 32,
|
|
@@ -69,6 +69,8 @@ export function FlowInvalidDispatcher({ result, onResult, enableDebugMode, }) {
|
|
|
69
69
|
}
|
|
70
70
|
return null;
|
|
71
71
|
}
|
|
72
|
+
/** Ceiling on the first-frame font wait — past it the flow renders regardless. */
|
|
73
|
+
const FONT_REGISTRATION_TIMEOUT_MS = 1000;
|
|
72
74
|
/**
|
|
73
75
|
* Walks the partner through the configured screen list, dispatches
|
|
74
76
|
* frames to the chosen analyzer, submits the resulting artifacts, and
|
|
@@ -105,11 +107,19 @@ export function FlowSuccessRenderer({ configuration, }) {
|
|
|
105
107
|
: isDark
|
|
106
108
|
? defaultDarkTheme
|
|
107
109
|
: defaultLightTheme;
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
110
|
+
// The first frame waits on font registration: a label laid out in the system font and re-measured in DM Sans can settle clipped.
|
|
111
|
+
const fontsLoaded = useUseSmileIDFonts();
|
|
112
|
+
const [fontWaitElapsed, setFontWaitElapsed] = useState(false);
|
|
113
|
+
useEffect(() => {
|
|
114
|
+
if (fontsLoaded)
|
|
115
|
+
return;
|
|
116
|
+
const timer = setTimeout(() => setFontWaitElapsed(true), FONT_REGISTRATION_TIMEOUT_MS);
|
|
117
|
+
return () => clearTimeout(timer);
|
|
118
|
+
}, [fontsLoaded]);
|
|
112
119
|
const enableCrashReporting = configuration.config?.enableCrashReporting !== false;
|
|
120
|
+
// Sandbox sessions are test traffic and must not pollute the production
|
|
121
|
+
// Sentry project; the reporter also drops debug bundles internally.
|
|
122
|
+
const useSandbox = configuration.network?.config?.partnerConfig?.useSandbox === true;
|
|
113
123
|
// Per-flow session id used as the Sentry user-id so every event
|
|
114
124
|
// captured during this verification flow correlates under one issue
|
|
115
125
|
// thread. Generated once per mount; survives re-renders via `useRef`
|
|
@@ -121,7 +131,10 @@ export function FlowSuccessRenderer({ configuration, }) {
|
|
|
121
131
|
}
|
|
122
132
|
useEffect(() => {
|
|
123
133
|
if (enableCrashReporting) {
|
|
124
|
-
|
|
134
|
+
// Tear down any prior client first so a changed useSandbox flag takes
|
|
135
|
+
// effect — enable() short-circuits when already enabled.
|
|
136
|
+
UseSmileIDCrashReporting.disable();
|
|
137
|
+
UseSmileIDCrashReporting.enable({ useSandbox });
|
|
125
138
|
UseSmileIDCrashReporting.setUserId(flowSessionIdRef.current);
|
|
126
139
|
UseSmileIDCrashReporting.captureBreadcrumb({
|
|
127
140
|
category: "flow.navigation",
|
|
@@ -131,12 +144,14 @@ export function FlowSuccessRenderer({ configuration, }) {
|
|
|
131
144
|
return () => {
|
|
132
145
|
UseSmileIDCrashReporting.disable();
|
|
133
146
|
};
|
|
134
|
-
}, [enableCrashReporting]);
|
|
147
|
+
}, [enableCrashReporting, useSandbox]);
|
|
135
148
|
// `onResult` lives in a ref so the manager's `onExit` closure
|
|
136
149
|
// captures the latest partner callback without recreating the
|
|
137
150
|
// manager on every parent render.
|
|
138
151
|
const onResultRef = useRef(configuration.onResult);
|
|
139
152
|
onResultRef.current = configuration.onResult;
|
|
153
|
+
// Latched by `handleExit` so an unmounted-before-finishing flow can deliver exactly once.
|
|
154
|
+
const finishedRef = useRef(false);
|
|
140
155
|
// Force-update reducer drives re-renders when the manager's cursor
|
|
141
156
|
// or captured artifacts change. Cheaper than mirroring state into
|
|
142
157
|
// React state — the manager is the single source of truth.
|
|
@@ -168,6 +183,7 @@ export function FlowSuccessRenderer({ configuration, }) {
|
|
|
168
183
|
}, [configuration.network]);
|
|
169
184
|
const manager = useMemo(() => {
|
|
170
185
|
const handleExit = (reason) => {
|
|
186
|
+
finishedRef.current = true;
|
|
171
187
|
const onResult = onResultRef.current;
|
|
172
188
|
try {
|
|
173
189
|
if (reason.kind === "completed") {
|
|
@@ -220,6 +236,13 @@ export function FlowSuccessRenderer({ configuration, }) {
|
|
|
220
236
|
manager.dispose();
|
|
221
237
|
};
|
|
222
238
|
}, [manager]);
|
|
239
|
+
// A flow unmounted before finishing delivers a cancelled result exactly once.
|
|
240
|
+
useEffect(() => () => {
|
|
241
|
+
if (!finishedRef.current) {
|
|
242
|
+
finishedRef.current = true;
|
|
243
|
+
onResultRef.current(cancelled());
|
|
244
|
+
}
|
|
245
|
+
}, []);
|
|
223
246
|
// Resolve localizations:
|
|
224
247
|
// 1. Explicit `configuration.localizations` (partner-set on the
|
|
225
248
|
// builder) — wins over everything.
|
|
@@ -228,6 +251,16 @@ export function FlowSuccessRenderer({ configuration, }) {
|
|
|
228
251
|
// registered locales with `UseSmileIDLocalizations.register(...)`.
|
|
229
252
|
// 3. English defaults — no provider mounted, screens read from
|
|
230
253
|
// the context's default English-only instance.
|
|
254
|
+
// A device locale change requires leaving the app, so re-reading on foreground is what makes a mid-flow switch observable.
|
|
255
|
+
const [localeEpoch, bumpLocaleEpoch] = useReducer((x) => x + 1, 0);
|
|
256
|
+
useEffect(() => {
|
|
257
|
+
const subscription = AppState.addEventListener("change", (nextState) => {
|
|
258
|
+
if (nextState === "active")
|
|
259
|
+
bumpLocaleEpoch();
|
|
260
|
+
});
|
|
261
|
+
return () => subscription.remove();
|
|
262
|
+
}, []);
|
|
263
|
+
const activeLocaleKey = UseSmileIDLocalizations.activeLocaleKey;
|
|
231
264
|
const resolved = useMemo(() => {
|
|
232
265
|
if (configuration.localizations)
|
|
233
266
|
return configuration.localizations;
|
|
@@ -235,7 +268,7 @@ export function FlowSuccessRenderer({ configuration, }) {
|
|
|
235
268
|
return UseSmileIDLocalizations.forActiveLocale();
|
|
236
269
|
}
|
|
237
270
|
return null;
|
|
238
|
-
}, [configuration.localizations]);
|
|
271
|
+
}, [configuration.localizations, activeLocaleKey, localeEpoch]);
|
|
239
272
|
const step = manager.currentScreen;
|
|
240
273
|
// Empty-screens sentinel: a partner who forgot to call
|
|
241
274
|
// `b.screens(...)` would otherwise see a blank screen with no clue
|
|
@@ -255,7 +288,7 @@ export function FlowSuccessRenderer({ configuration, }) {
|
|
|
255
288
|
// Localizations provider only mounts when registered locales
|
|
256
289
|
// resolve — the context default (English) covers the no-provider
|
|
257
290
|
// path without an extra wrapper.
|
|
258
|
-
const themed = (_jsx(UseSmileIDThemeProvider, { value: theme, children: inner }));
|
|
291
|
+
const themed = (_jsx(UseSmileIDThemeProvider, { value: theme, children: fontsLoaded || fontWaitElapsed ? (inner) : (_jsx(View, { style: { flex: 1, backgroundColor: theme.colors.background }, testID: "si_flow_font_gate" })) }));
|
|
259
292
|
if (resolved) {
|
|
260
293
|
return (_jsx(UseSmileIDLocalizationsProvider, { value: resolved, children: themed }));
|
|
261
294
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_flow.js","sourceRoot":"","sources":["../../../src/presentation/flow/use_smile_id_flow.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"use_smile_id_flow.js","sourceRoot":"","sources":["../../../src/presentation/flow/use_smile_id_flow.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import type { MLConfig } from "../../../core/models/ml_config";
|
|
|
2
2
|
import type { NetworkConfig } from "../../../core/models/network_config";
|
|
3
3
|
import type { BiometricKYCParams, ConsentInformation, DocumentVerificationParams, EnhancedDocumentVerificationParams, EnhancedKYCParams, UserDetails } from "../../../core/models/params";
|
|
4
4
|
import type { ScreenSpec } from "../dsl/builder/screens_builder";
|
|
5
|
+
import type { TokenPayload } from "../../../data/model/token_payload";
|
|
5
6
|
import { ValidationState, type ValidationIssue } from "./validation_state";
|
|
6
7
|
/**
|
|
7
8
|
* Pure flow validator — returns typed `UseSmileIDValidationException`
|
|
@@ -35,6 +36,12 @@ type FlowValidatorInput = {
|
|
|
35
36
|
readonly documentVerificationParams?: DocumentVerificationParams | undefined;
|
|
36
37
|
readonly enhancedDocumentVerificationParams?: EnhancedDocumentVerificationParams | undefined;
|
|
37
38
|
readonly userDetails?: UserDetails | undefined;
|
|
39
|
+
/**
|
|
40
|
+
* User-detail/consent bindings decoded from the JWT `payload` claim.
|
|
41
|
+
* `undefined` (no token, offline mode, legacy token) keeps every rule
|
|
42
|
+
* exactly as strict as before token support existed.
|
|
43
|
+
*/
|
|
44
|
+
readonly tokenPayload?: TokenPayload | undefined;
|
|
38
45
|
};
|
|
39
46
|
/**
|
|
40
47
|
* Quick triage of the in-progress builder state. Today the only rule
|
|
@@ -86,12 +93,19 @@ export declare function runConsentValidation(consent: ConsentInformation): Valid
|
|
|
86
93
|
* keep working unchanged after the consolidation away from nesting
|
|
87
94
|
* `userDetails` inside the KYC param shapes.
|
|
88
95
|
*
|
|
96
|
+
* Each field requirement is evaluated against the union of builder
|
|
97
|
+
* input and token bindings: a field the token binds (see
|
|
98
|
+
* `TokenPayload`) never has to be supplied locally — the server
|
|
99
|
+
* injects it, and the SDK drops the local value from the wire. With
|
|
100
|
+
* no `tokenPayload` the behavior is exactly the pre-token rule set.
|
|
101
|
+
*
|
|
89
102
|
* Exposed via `b.validateUserDetails(payload)` so partners can
|
|
90
103
|
* pre-flight a payload before assigning to `b.userDetails`, mirroring
|
|
91
104
|
* the existing `b.validateConsent` / `b.validateEnhancedKYCParams`
|
|
92
|
-
* pattern
|
|
105
|
+
* pattern (the pre-flight helper always validates strictly, without
|
|
106
|
+
* token context).
|
|
93
107
|
*/
|
|
94
|
-
export declare function runUserDetailsValidation(userDetails: UserDetails): ValidationIssue[];
|
|
108
|
+
export declare function runUserDetailsValidation(userDetails: UserDetails, tokenPayload?: TokenPayload): ValidationIssue[];
|
|
95
109
|
/**
|
|
96
110
|
* Find the first `error`-severity issue in a state. Returns
|
|
97
111
|
* `undefined` for a valid state, or for a state whose only issues
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow_validator.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flow/validation/flow_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,kCAAkC,EAClC,iBAAiB,EACjB,WAAW,EACZ,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"flow_validator.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flow/validation/flow_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAE/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,kCAAkC,EAClC,iBAAiB,EACjB,WAAW,EACZ,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAEV,UAAU,EAEX,MAAM,gCAAgC,CAAC;AAoBxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAI3E;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,KAAK,kBAAkB,GAAG;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,0BAA0B,CAAC,EAAE,0BAA0B,GAAG,SAAS,CAAC;IAC7E,QAAQ,CAAC,kCAAkC,CAAC,EACxC,kCAAkC,GAClC,SAAS,CAAC;IACd,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC/C;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CAClD,CAAC;AA+CF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,UAAU,EAAE,GAC3B,eAAe,EAAE,CAMnB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,kBAAkB,GACxB,eAAe,EAAE,CA2InB;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,iBAAiB,GACxB,eAAe,EAAE,CAEnB;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,kBAAkB,GACzB,eAAe,EAAE,CAEnB;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,CACrD,MAAM,EAAE,0BAA0B,GACjC,eAAe,EAAE,CAmBnB;AAED;;;GAGG;AACH,wBAAgB,+CAA+C,CAC7D,MAAM,EAAE,kCAAkC,GACzC,eAAe,EAAE,CAcnB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,kBAAkB,GAC1B,eAAe,EAAE,CAuBnB;AAuBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,WAAW,EACxB,YAAY,CAAC,EAAE,YAAY,GAC1B,eAAe,EAAE,CAEnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,eAAe,GACrB,eAAe,GAAG,SAAS,CAG7B"}
|
|
@@ -1,11 +1,49 @@
|
|
|
1
1
|
import { CaptureType } from "../../../core/models/ml_config";
|
|
2
|
-
import { JobType } from "../../../core/models/job_type";
|
|
2
|
+
import { JobType, jobTypeFromValue } from "../../../core/models/job_type";
|
|
3
3
|
import { IssueSeverity } from "../../../core/exception/issue_severity";
|
|
4
4
|
import { InvalidConsentConfigException, InvalidConsentInformationException, } from "../../../core/exception/consent_validation_exceptions";
|
|
5
5
|
import { InvalidFieldValueException, MissingJobTypeException, MissingMLConfigurationBlockException, MissingNetworkConfigurationBlockException, } from "../../../core/exception/job_validation_exceptions";
|
|
6
|
-
import { InvalidDocumentCaptureConfigException, InvalidMissingCaptureTypeException, } from "../../../core/exception/capture_validation_exceptions";
|
|
6
|
+
import { AgentModeWithEnhancedLivenessException, InvalidDocumentCaptureConfigException, InvalidMissingCaptureTypeException, } from "../../../core/exception/capture_validation_exceptions";
|
|
7
7
|
import { EmptyScreensBlockException } from "../../../core/exception/screen_config_validation_exceptions";
|
|
8
8
|
import { collectJobTypeIssues } from "./job_type_validator";
|
|
9
|
+
import { missingUserDetailsFieldIssues } from "./user_details_validator";
|
|
10
|
+
/**
|
|
11
|
+
* Agent mode captures on the rear lens while the head-turn challenge is only
|
|
12
|
+
* validated for front-camera framing, so the pair is refused rather than
|
|
13
|
+
* silently dropping one of them.
|
|
14
|
+
*/
|
|
15
|
+
function selfieConfigIssues(config) {
|
|
16
|
+
if (config?.allowAgentMode && config.enableEnhancedLiveness) {
|
|
17
|
+
return [new AgentModeWithEnhancedLivenessException()];
|
|
18
|
+
}
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
/** Surfaces at most one issue: missing block > missing type > bad aspect ratio. */
|
|
22
|
+
function documentConfigIssues(config) {
|
|
23
|
+
if (config === undefined) {
|
|
24
|
+
return [
|
|
25
|
+
new InvalidDocumentCaptureConfigException({
|
|
26
|
+
reason: "document is required when mode is Document",
|
|
27
|
+
}),
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
if (config.documentType === undefined) {
|
|
31
|
+
return [
|
|
32
|
+
new InvalidDocumentCaptureConfigException({
|
|
33
|
+
reason: "documentType is required for document capture",
|
|
34
|
+
}),
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
if (config.knownIdAspectRatio !== undefined &&
|
|
38
|
+
config.knownIdAspectRatio <= 0) {
|
|
39
|
+
return [
|
|
40
|
+
new InvalidDocumentCaptureConfigException({
|
|
41
|
+
reason: "knownIdAspectRatio must be > 0 if provided",
|
|
42
|
+
}),
|
|
43
|
+
];
|
|
44
|
+
}
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
9
47
|
/**
|
|
10
48
|
* Quick triage of the in-progress builder state. Today the only rule
|
|
11
49
|
* surfaced is the empty-screens-block error — `b.screens(...)` must
|
|
@@ -43,26 +81,11 @@ export function runFlowValidation(input) {
|
|
|
43
81
|
if (step.config.captureType === undefined) {
|
|
44
82
|
issues.push(new InvalidMissingCaptureTypeException());
|
|
45
83
|
}
|
|
46
|
-
|
|
47
|
-
|
|
84
|
+
if (step.config.captureType === CaptureType.selfie) {
|
|
85
|
+
issues.push(...selfieConfigIssues(step.config.selfieConfig));
|
|
86
|
+
}
|
|
48
87
|
if (step.config.captureType === CaptureType.document) {
|
|
49
|
-
|
|
50
|
-
if (documentConfig === undefined) {
|
|
51
|
-
issues.push(new InvalidDocumentCaptureConfigException({
|
|
52
|
-
reason: "document is required when mode is Document",
|
|
53
|
-
}));
|
|
54
|
-
}
|
|
55
|
-
else if (documentConfig.documentType === undefined) {
|
|
56
|
-
issues.push(new InvalidDocumentCaptureConfigException({
|
|
57
|
-
reason: "documentType is required for document capture",
|
|
58
|
-
}));
|
|
59
|
-
}
|
|
60
|
-
else if (documentConfig.knownIdAspectRatio !== undefined &&
|
|
61
|
-
documentConfig.knownIdAspectRatio <= 0) {
|
|
62
|
-
issues.push(new InvalidDocumentCaptureConfigException({
|
|
63
|
-
reason: "knownIdAspectRatio must be > 0 if provided",
|
|
64
|
-
}));
|
|
65
|
-
}
|
|
88
|
+
issues.push(...documentConfigIssues(step.config.documentConfig));
|
|
66
89
|
}
|
|
67
90
|
}
|
|
68
91
|
}
|
|
@@ -78,9 +101,11 @@ export function runFlowValidation(input) {
|
|
|
78
101
|
// build (ERROR) whenever it's missing — whether or not a network
|
|
79
102
|
// block was provided. The missing-network WARNING above still fires
|
|
80
103
|
// alongside this when the block is absent.
|
|
104
|
+
// `jobTypeFromValue` collapses the unknown sentinel and any out-of-enum value, so an unrecognised job_type_id fails the build too.
|
|
81
105
|
if (hasProcessingScreen) {
|
|
82
106
|
const jobType = input.network?.config?.jobType;
|
|
83
|
-
if (jobType === undefined ||
|
|
107
|
+
if (jobType === undefined ||
|
|
108
|
+
jobTypeFromValue(jobType) === JobType.unknown) {
|
|
84
109
|
issues.push(new MissingJobTypeException());
|
|
85
110
|
}
|
|
86
111
|
}
|
|
@@ -113,7 +138,9 @@ export function runFlowValidation(input) {
|
|
|
113
138
|
reason: "Exactly one form of consent is required — remove the consent { } screen if using consentInformation, or clear consentInformation if using the consent screen",
|
|
114
139
|
}));
|
|
115
140
|
}
|
|
116
|
-
|
|
141
|
+
// A token consent binding supersedes the preset entirely (token data
|
|
142
|
+
// always wins), so the ignored preset's contents are not validated.
|
|
143
|
+
if (input.consentInformation && input.tokenPayload?.consent === undefined) {
|
|
117
144
|
issues.push(...runConsentValidation(input.consentInformation));
|
|
118
145
|
}
|
|
119
146
|
if (input.enhancedKYCParams) {
|
|
@@ -129,7 +156,7 @@ export function runFlowValidation(input) {
|
|
|
129
156
|
issues.push(...runEnhancedDocumentVerificationParamsValidation(input.enhancedDocumentVerificationParams));
|
|
130
157
|
}
|
|
131
158
|
if (input.userDetails) {
|
|
132
|
-
issues.push(...runUserDetailsValidation(input.userDetails));
|
|
159
|
+
issues.push(...runUserDetailsValidation(input.userDetails, input.tokenPayload));
|
|
133
160
|
}
|
|
134
161
|
// Every flow-composition rule (screen ordering, duplicate screens,
|
|
135
162
|
// preview placement, analyzer dependencies, per-job field
|
|
@@ -240,33 +267,20 @@ function runKYCParamsValidation(params) {
|
|
|
240
267
|
* keep working unchanged after the consolidation away from nesting
|
|
241
268
|
* `userDetails` inside the KYC param shapes.
|
|
242
269
|
*
|
|
270
|
+
* Each field requirement is evaluated against the union of builder
|
|
271
|
+
* input and token bindings: a field the token binds (see
|
|
272
|
+
* `TokenPayload`) never has to be supplied locally — the server
|
|
273
|
+
* injects it, and the SDK drops the local value from the wire. With
|
|
274
|
+
* no `tokenPayload` the behavior is exactly the pre-token rule set.
|
|
275
|
+
*
|
|
243
276
|
* Exposed via `b.validateUserDetails(payload)` so partners can
|
|
244
277
|
* pre-flight a payload before assigning to `b.userDetails`, mirroring
|
|
245
278
|
* the existing `b.validateConsent` / `b.validateEnhancedKYCParams`
|
|
246
|
-
* pattern
|
|
279
|
+
* pattern (the pre-flight helper always validates strictly, without
|
|
280
|
+
* token context).
|
|
247
281
|
*/
|
|
248
|
-
export function runUserDetailsValidation(userDetails) {
|
|
249
|
-
|
|
250
|
-
for (const field of ["givenNames", "lastName"]) {
|
|
251
|
-
const value = userDetails[field];
|
|
252
|
-
if (!value || !value.trim()) {
|
|
253
|
-
issues.push(new InvalidFieldValueException({
|
|
254
|
-
fieldName: `userDetails.${field}`,
|
|
255
|
-
reason: "must not be blank",
|
|
256
|
-
}));
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
// At-least-one-of contact rule: email and phoneNumber are each
|
|
260
|
-
// optional, but the partner must supply one of them.
|
|
261
|
-
const hasEmail = !!userDetails.email && userDetails.email.trim().length > 0;
|
|
262
|
-
const hasPhone = !!userDetails.phoneNumber && userDetails.phoneNumber.trim().length > 0;
|
|
263
|
-
if (!hasEmail && !hasPhone) {
|
|
264
|
-
issues.push(new InvalidFieldValueException({
|
|
265
|
-
fieldName: "userDetails",
|
|
266
|
-
reason: "at least one of email or phoneNumber must be non blank",
|
|
267
|
-
}));
|
|
268
|
-
}
|
|
269
|
-
return issues;
|
|
282
|
+
export function runUserDetailsValidation(userDetails, tokenPayload) {
|
|
283
|
+
return missingUserDetailsFieldIssues(userDetails, tokenPayload);
|
|
270
284
|
}
|
|
271
285
|
/**
|
|
272
286
|
* Find the first `error`-severity issue in a state. Returns
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flow_validator.js","sourceRoot":"","sources":["../../../../src/presentation/flow/validation/flow_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAU7D,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"flow_validator.js","sourceRoot":"","sources":["../../../../src/presentation/flow/validation/flow_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAU7D,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAQ1E,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EACL,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EACvB,oCAAoC,EACpC,yCAAyC,GAC1C,MAAM,mDAAmD,CAAC;AAC3D,OAAO,EACL,sCAAsC,EACtC,qCAAqC,EACrC,kCAAkC,GACnC,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6DAA6D,CAAC;AAGzG,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AA6CzE;;;;GAIG;AACH,SAAS,kBAAkB,CACzB,MAA8C;IAE9C,IAAI,MAAM,EAAE,cAAc,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;QAC5D,OAAO,CAAC,IAAI,sCAAsC,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,mFAAmF;AACnF,SAAS,oBAAoB,CAC3B,MAAgD;IAEhD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,qCAAqC,CAAC;gBACxC,MAAM,EAAE,4CAA4C;aACrD,CAAC;SACH,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO;YACL,IAAI,qCAAqC,CAAC;gBACxC,MAAM,EAAE,+CAA+C;aACxD,CAAC;SACH,CAAC;IACJ,CAAC;IACD,IACE,MAAM,CAAC,kBAAkB,KAAK,SAAS;QACvC,MAAM,CAAC,kBAAkB,IAAI,CAAC,EAC9B,CAAC;QACD,OAAO;YACL,IAAI,qCAAqC,CAAC;gBACxC,MAAM,EAAE,4CAA4C;aACrD,CAAC;SACH,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAA4B;IAE5B,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAAyB;IAEzB,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,0BAA0B,EAAE,CAAC,CAAC;QAC9C,+DAA+D;QAC/D,sCAAsC;QACtC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,uEAAuE;IACvE,sEAAsE;IACtE,0EAA0E;IAC1E,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,kCAAkC,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;gBACnD,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;gBACrD,MAAM,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACvE,MAAM,mBAAmB,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAE7E,IAAI,gBAAgB,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,IAAI,oCAAoC,EAAE,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,mBAAmB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,yCAAyC,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,mEAAmE;IACnE,iEAAiE;IACjE,oEAAoE;IACpE,2CAA2C;IAC3C,mIAAmI;IACnI,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;QAC/C,IACE,OAAO,KAAK,SAAS;YACrB,gBAAgB,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,EAC7C,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,6DAA6D;IAC7D,4DAA4D;IAC5D,mCAAmC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAClC,CAAC,CAAC,EAA0B,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CACpD,CAAC;IACF,IACE,WAAW;QACX,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAC3E,CAAC;QACD,MAAM,CAAC,IAAI,CACT,IAAI,6BAA6B,CAAC;YAChC,MAAM,EAAE,6BAA6B;SACtC,CAAC,CACH,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QAChE,MAAM,CAAC,IAAI,CACT,IAAI,6BAA6B,CAAC;YAChC,MAAM,EAAE,gDAAgD;SACzD,CAAC,CACH,CAAC;IACJ,CAAC;IACD,IACE,WAAW;QACX,CAAC,WAAW,CAAC,MAAM,CAAC,uBAAuB,KAAK,SAAS;YACvD,CAAC,WAAW,CAAC,MAAM,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC,EACrD,CAAC;QACD,MAAM,CAAC,IAAI,CACT,IAAI,6BAA6B,CAAC;YAChC,MAAM,EAAE,4DAA4D;SACrE,CAAC,CACH,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GAAG,WAAW,KAAK,SAAS,CAAC;IACnD,IAAI,gBAAgB,IAAI,KAAK,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAC/D,MAAM,CAAC,IAAI,CACT,IAAI,6BAA6B,CAAC;YAChC,MAAM,EACJ,8JAA8J;SACjK,CAAC,CACH,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,oEAAoE;IACpE,IAAI,KAAK,CAAC,kBAAkB,IAAI,KAAK,CAAC,YAAY,EAAE,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1E,MAAM,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,8BAA8B,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,GAAG,+BAA+B,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,KAAK,CAAC,0BAA0B,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CACT,GAAG,uCAAuC,CACxC,KAAK,CAAC,0BAA0B,CACjC,CACF,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,kCAAkC,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CACT,GAAG,+CAA+C,CAChD,KAAK,CAAC,kCAAkC,CACzC,CACF,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CACT,GAAG,wBAAwB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,YAAY,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,mEAAmE;IACnE,0DAA0D;IAC1D,mEAAmE;IACnE,mEAAmE;IACnE,oEAAoE;IACpE,qEAAqE;IACrE,6DAA6D;IAC7D,2CAA2C;IAC3C,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEpC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,MAAyB;IAEzB,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAC7C,MAA0B;IAE1B,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;AACxC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uCAAuC,CACrD,MAAkC;IAElC,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9C,MAAM,CAAC,IAAI,CACT,IAAI,0BAA0B,CAAC;YAC7B,SAAS,EAAE,SAAS;YACpB,MAAM,EAAE,mBAAmB;SAC5B,CAAC,CACH,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACzD,MAAM,CAAC,IAAI,CACT,IAAI,0BAA0B,CAAC;YAC7B,SAAS,EAAE,QAAQ;YACnB,MAAM,EAAE,mBAAmB;SAC5B,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,+CAA+C,CAC7D,MAA0C;IAE1C,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CACT,IAAI,0BAA0B,CAAC;gBAC7B,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,mBAAmB;aAC5B,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAA2B;IAE3B,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CACT,IAAI,kCAAkC,CAAC;YACrC,MAAM,EAAE,sBAAsB;SAC/B,CAAC,CACH,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,KAAK,IAAI;QAClB,WAAW;QACX,gBAAgB;QAChB,wBAAwB;KAChB,EAAE,CAAC;QACX,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,CACT,IAAI,kCAAkC,CAAC;gBACrC,MAAM,EAAE,GAAG,KAAK,oBAAoB;aACrC,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,sBAAsB,CAC7B,MAA8C;IAE9C,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,kDAAkD;IAClD,KAAK,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAU,EAAE,CAAC;QAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CACT,IAAI,0BAA0B,CAAC;gBAC7B,SAAS,EAAE,KAAK;gBAChB,MAAM,EAAE,mBAAmB;aAC5B,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAwB,EACxB,YAA2B;IAE3B,OAAO,6BAA6B,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAsB;IAEtB,IAAI,KAAK,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,aAAa,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -3,6 +3,7 @@ import type { NetworkConfig } from "../../../core/models/network_config";
|
|
|
3
3
|
import type { BiometricKYCParams, ConsentInformation, DocumentVerificationParams, EnhancedDocumentVerificationParams, EnhancedKYCParams, UserDetails } from "../../../core/models/params";
|
|
4
4
|
import { JobType } from "../../../core/models/job_type";
|
|
5
5
|
import type { ScreenSpec } from "../dsl/builder/screens_builder";
|
|
6
|
+
import { type TokenPayload } from "../../../data/model/token_payload";
|
|
6
7
|
import type { ValidationIssue } from "./validation_state";
|
|
7
8
|
/**
|
|
8
9
|
* Job-type-specific flow validation rules.
|
|
@@ -46,6 +47,12 @@ export type JobTypeValidatorInput = {
|
|
|
46
47
|
readonly documentVerificationParams?: DocumentVerificationParams | undefined;
|
|
47
48
|
readonly enhancedDocumentVerificationParams?: EnhancedDocumentVerificationParams | undefined;
|
|
48
49
|
readonly userDetails?: UserDetails | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* User-detail/consent bindings decoded from the JWT `payload` claim.
|
|
52
|
+
* `undefined` (no token, offline mode, legacy token) keeps every rule
|
|
53
|
+
* exactly as strict as before token support existed.
|
|
54
|
+
*/
|
|
55
|
+
readonly tokenPayload?: TokenPayload | undefined;
|
|
49
56
|
};
|
|
50
57
|
/**
|
|
51
58
|
* Validates selfie-only flows: BiometricKyc, SmartSelfieAuthentication,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job_type_validator.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flow/validation/job_type_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACzE,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,kCAAkC,EAClC,iBAAiB,EACjB,WAAW,EACZ,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AASjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC;CACzE;AAED;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC7C,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,SAAS,CAAC;IAC3D,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAC7D,QAAQ,CAAC,0BAA0B,CAAC,EAAE,0BAA0B,GAAG,SAAS,CAAC;IAC7E,QAAQ,CAAC,kCAAkC,CAAC,EACxC,kCAAkC,GAClC,SAAS,CAAC;IACd,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"job_type_validator.d.ts","sourceRoot":"","sources":["../../../../src/presentation/flow/validation/job_type_validator.ts"],"names":[],"mappings":"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"}
|