@smileid/usesmileid 12.0.0-beta01 → 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.
Files changed (556) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +701 -89
  3. package/dist/camera/camera_defaults.d.ts +14 -9
  4. package/dist/camera/camera_defaults.d.ts.map +1 -1
  5. package/dist/camera/camera_defaults.js +11 -9
  6. package/dist/camera/camera_defaults.js.map +1 -1
  7. package/dist/camera/orientation_degrees.d.ts +5 -6
  8. package/dist/camera/orientation_degrees.d.ts.map +1 -1
  9. package/dist/camera/orientation_degrees.js +5 -6
  10. package/dist/camera/orientation_degrees.js.map +1 -1
  11. package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.d.ts +11 -0
  12. package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.d.ts.map +1 -0
  13. package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.js +17 -0
  14. package/dist/core/exception/agent_mode_with_enhanced_liveness_exception.js.map +1 -0
  15. package/dist/core/exception/capture_validation_exceptions.d.ts +1 -0
  16. package/dist/core/exception/capture_validation_exceptions.d.ts.map +1 -1
  17. package/dist/core/exception/capture_validation_exceptions.js +1 -0
  18. package/dist/core/exception/capture_validation_exceptions.js.map +1 -1
  19. package/dist/core/exception/index.d.ts +1 -0
  20. package/dist/core/exception/index.d.ts.map +1 -1
  21. package/dist/core/exception/index.js +1 -0
  22. package/dist/core/exception/index.js.map +1 -1
  23. package/dist/core/exception/use_smile_id_error_code.d.ts +1 -0
  24. package/dist/core/exception/use_smile_id_error_code.d.ts.map +1 -1
  25. package/dist/core/exception/use_smile_id_error_code.js +1 -0
  26. package/dist/core/exception/use_smile_id_error_code.js.map +1 -1
  27. package/dist/core/models/config.d.ts +19 -0
  28. package/dist/core/models/config.d.ts.map +1 -1
  29. package/dist/core/models/document_capture_mode.d.ts +8 -0
  30. package/dist/core/models/document_capture_mode.d.ts.map +1 -1
  31. package/dist/core/models/document_capture_mode.js +24 -0
  32. package/dist/core/models/document_capture_mode.js.map +1 -1
  33. package/dist/core/models/document_type.d.ts +2 -2
  34. package/dist/core/models/document_type.d.ts.map +1 -1
  35. package/dist/core/models/document_type.js +7 -5
  36. package/dist/core/models/document_type.js.map +1 -1
  37. package/dist/core/models/global_privacy_control.d.ts +36 -0
  38. package/dist/core/models/global_privacy_control.d.ts.map +1 -0
  39. package/dist/core/models/global_privacy_control.js +39 -0
  40. package/dist/core/models/global_privacy_control.js.map +1 -0
  41. package/dist/core/models/network_config.d.ts +2 -2
  42. package/dist/core/models/network_config.js +2 -2
  43. package/dist/core/models/result.d.ts +9 -8
  44. package/dist/core/models/result.d.ts.map +1 -1
  45. package/dist/core/models/result.js +5 -6
  46. package/dist/core/models/result.js.map +1 -1
  47. package/dist/data/api/interceptors/smile_auth_interceptor.d.ts.map +1 -1
  48. package/dist/data/api/interceptors/smile_auth_interceptor.js +3 -17
  49. package/dist/data/api/interceptors/smile_auth_interceptor.js.map +1 -1
  50. package/dist/data/api/interceptors/smile_integrity_interceptor.d.ts +11 -0
  51. package/dist/data/api/interceptors/smile_integrity_interceptor.d.ts.map +1 -1
  52. package/dist/data/api/interceptors/smile_integrity_interceptor.js +13 -0
  53. package/dist/data/api/interceptors/smile_integrity_interceptor.js.map +1 -1
  54. package/dist/data/api/interceptors/smile_request_mac_interceptor.d.ts +8 -0
  55. package/dist/data/api/interceptors/smile_request_mac_interceptor.d.ts.map +1 -1
  56. package/dist/data/api/interceptors/smile_request_mac_interceptor.js +11 -0
  57. package/dist/data/api/interceptors/smile_request_mac_interceptor.js.map +1 -1
  58. package/dist/data/api/smile_id_api.d.ts +1 -1
  59. package/dist/data/api/smile_id_api.d.ts.map +1 -1
  60. package/dist/data/compression/compressible_asset.d.ts +41 -0
  61. package/dist/data/compression/compressible_asset.d.ts.map +1 -0
  62. package/dist/data/compression/compressible_asset.js +34 -0
  63. package/dist/data/compression/compressible_asset.js.map +1 -0
  64. package/dist/data/compression/payload_compression_config.d.ts +36 -0
  65. package/dist/data/compression/payload_compression_config.d.ts.map +1 -0
  66. package/dist/data/compression/payload_compression_config.js +52 -0
  67. package/dist/data/compression/payload_compression_config.js.map +1 -0
  68. package/dist/data/compression/payload_compression_runner.d.ts +29 -0
  69. package/dist/data/compression/payload_compression_runner.d.ts.map +1 -0
  70. package/dist/data/compression/payload_compression_runner.js +55 -0
  71. package/dist/data/compression/payload_compression_runner.js.map +1 -0
  72. package/dist/data/compression/payload_compressor.d.ts +40 -0
  73. package/dist/data/compression/payload_compressor.d.ts.map +1 -0
  74. package/dist/data/compression/payload_compressor.js +126 -0
  75. package/dist/data/compression/payload_compressor.js.map +1 -0
  76. package/dist/data/compression/uri_compressible_asset.d.ts +23 -0
  77. package/dist/data/compression/uri_compressible_asset.d.ts.map +1 -0
  78. package/dist/data/compression/uri_compressible_asset.js +77 -0
  79. package/dist/data/compression/uri_compressible_asset.js.map +1 -0
  80. package/dist/data/dsl/builder/cache_config_builder.d.ts +2 -1
  81. package/dist/data/dsl/builder/cache_config_builder.d.ts.map +1 -1
  82. package/dist/data/dsl/builder/cache_config_builder.js +2 -1
  83. package/dist/data/dsl/builder/cache_config_builder.js.map +1 -1
  84. package/dist/data/dsl/builder/config_builder.d.ts +40 -14
  85. package/dist/data/dsl/builder/config_builder.d.ts.map +1 -1
  86. package/dist/data/dsl/builder/config_builder.js +40 -14
  87. package/dist/data/dsl/builder/config_builder.js.map +1 -1
  88. package/dist/data/dsl/builder/interceptor_config_builder.d.ts +9 -7
  89. package/dist/data/dsl/builder/interceptor_config_builder.d.ts.map +1 -1
  90. package/dist/data/dsl/builder/interceptor_config_builder.js +9 -7
  91. package/dist/data/dsl/builder/interceptor_config_builder.js.map +1 -1
  92. package/dist/data/dsl/builder/retry_config_builder.d.ts +19 -4
  93. package/dist/data/dsl/builder/retry_config_builder.d.ts.map +1 -1
  94. package/dist/data/dsl/builder/retry_config_builder.js +21 -6
  95. package/dist/data/dsl/builder/retry_config_builder.js.map +1 -1
  96. package/dist/data/dsl/builder/timeout_config_builder.d.ts +4 -0
  97. package/dist/data/dsl/builder/timeout_config_builder.d.ts.map +1 -1
  98. package/dist/data/dsl/builder/timeout_config_builder.js +4 -0
  99. package/dist/data/dsl/builder/timeout_config_builder.js.map +1 -1
  100. package/dist/data/dsl/use_smile_id_network_builder.d.ts +17 -0
  101. package/dist/data/dsl/use_smile_id_network_builder.d.ts.map +1 -1
  102. package/dist/data/dsl/use_smile_id_network_builder.js +17 -0
  103. package/dist/data/dsl/use_smile_id_network_builder.js.map +1 -1
  104. package/dist/data/factory/networking_factory.d.ts.map +1 -1
  105. package/dist/data/factory/networking_factory.js +11 -1
  106. package/dist/data/factory/networking_factory.js.map +1 -1
  107. package/dist/data/repository/use_smile_id_repository_impl.d.ts +6 -0
  108. package/dist/data/repository/use_smile_id_repository_impl.d.ts.map +1 -1
  109. package/dist/data/repository/use_smile_id_repository_impl.js +82 -8
  110. package/dist/data/repository/use_smile_id_repository_impl.js.map +1 -1
  111. package/dist/data/security/request_canonicalizer.d.ts.map +1 -1
  112. package/dist/data/security/request_canonicalizer.js +14 -2
  113. package/dist/data/security/request_canonicalizer.js.map +1 -1
  114. package/dist/data/security/security_policy.d.ts +43 -0
  115. package/dist/data/security/security_policy.d.ts.map +1 -0
  116. package/dist/data/security/security_policy.js +61 -0
  117. package/dist/data/security/security_policy.js.map +1 -0
  118. package/dist/data/smile_id_urls.d.ts +1 -1
  119. package/dist/data/smile_id_urls.js +1 -1
  120. package/dist/data/smile_id_urls.js.map +1 -1
  121. package/dist/data/util/retry_util.d.ts +2 -2
  122. package/dist/data/util/retry_util.d.ts.map +1 -1
  123. package/dist/data/util/retry_util.js +7 -1
  124. package/dist/data/util/retry_util.js.map +1 -1
  125. package/dist/data/util/use_smile_id_token_decoder.d.ts +22 -0
  126. package/dist/data/util/use_smile_id_token_decoder.d.ts.map +1 -1
  127. package/dist/data/util/use_smile_id_token_decoder.js +58 -24
  128. package/dist/data/util/use_smile_id_token_decoder.js.map +1 -1
  129. package/dist/index.d.ts +2 -2
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/index.js +2 -2
  132. package/dist/index.js.map +1 -1
  133. package/dist/l10n/strings_en.d.ts +2 -1
  134. package/dist/l10n/strings_en.d.ts.map +1 -1
  135. package/dist/l10n/strings_en.js +2 -1
  136. package/dist/l10n/strings_en.js.map +1 -1
  137. package/dist/l10n/use_smile_id_localizations.d.ts +1 -0
  138. package/dist/l10n/use_smile_id_localizations.d.ts.map +1 -1
  139. package/dist/l10n/use_smile_id_localizations.js +3 -0
  140. package/dist/l10n/use_smile_id_localizations.js.map +1 -1
  141. package/dist/metadata/builder_configuration.d.ts +44 -0
  142. package/dist/metadata/builder_configuration.d.ts.map +1 -0
  143. package/dist/metadata/builder_configuration.js +35 -0
  144. package/dist/metadata/builder_configuration.js.map +1 -0
  145. package/dist/metadata/captured_image_properties.d.ts +11 -0
  146. package/dist/metadata/captured_image_properties.d.ts.map +1 -0
  147. package/dist/metadata/captured_image_properties.js +11 -0
  148. package/dist/metadata/captured_image_properties.js.map +1 -0
  149. package/dist/metadata/device_orientation_collector.d.ts +17 -0
  150. package/dist/metadata/device_orientation_collector.d.ts.map +1 -0
  151. package/dist/metadata/device_orientation_collector.js +66 -0
  152. package/dist/metadata/device_orientation_collector.js.map +1 -0
  153. package/dist/metadata/geolocation.d.ts +20 -0
  154. package/dist/metadata/geolocation.d.ts.map +1 -0
  155. package/dist/metadata/geolocation.js +40 -0
  156. package/dist/metadata/geolocation.js.map +1 -0
  157. package/dist/metadata/metadata_configuration_mappers.d.ts +47 -0
  158. package/dist/metadata/metadata_configuration_mappers.d.ts.map +1 -0
  159. package/dist/metadata/metadata_configuration_mappers.js +178 -0
  160. package/dist/metadata/metadata_configuration_mappers.js.map +1 -0
  161. package/dist/metadata/model_configuration.d.ts +41 -0
  162. package/dist/metadata/model_configuration.d.ts.map +1 -0
  163. package/dist/metadata/model_configuration.js +44 -0
  164. package/dist/metadata/model_configuration.js.map +1 -0
  165. package/dist/metadata/optional_native_modules.d.ts +79 -3
  166. package/dist/metadata/optional_native_modules.d.ts.map +1 -1
  167. package/dist/metadata/optional_native_modules.js +108 -3
  168. package/dist/metadata/optional_native_modules.js.map +1 -1
  169. package/dist/metadata/use_smile_id_metadata.d.ts +45 -7
  170. package/dist/metadata/use_smile_id_metadata.d.ts.map +1 -1
  171. package/dist/metadata/use_smile_id_metadata.js +85 -13
  172. package/dist/metadata/use_smile_id_metadata.js.map +1 -1
  173. package/dist/metadata/use_smile_id_metadata_factory.d.ts +37 -0
  174. package/dist/metadata/use_smile_id_metadata_factory.d.ts.map +1 -1
  175. package/dist/metadata/use_smile_id_metadata_factory.js +197 -16
  176. package/dist/metadata/use_smile_id_metadata_factory.js.map +1 -1
  177. package/dist/presentation/assets/svg/document_shimmer_strings.d.ts +14 -0
  178. package/dist/presentation/assets/svg/document_shimmer_strings.d.ts.map +1 -0
  179. package/dist/presentation/assets/svg/document_shimmer_strings.js +14 -0
  180. package/dist/presentation/assets/svg/document_shimmer_strings.js.map +1 -0
  181. package/dist/presentation/assets/svg/instruction_svg_strings.d.ts +12 -4
  182. package/dist/presentation/assets/svg/instruction_svg_strings.d.ts.map +1 -1
  183. package/dist/presentation/assets/svg/instruction_svg_strings.js +19 -8
  184. package/dist/presentation/assets/svg/instruction_svg_strings.js.map +1 -1
  185. package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.d.ts +0 -5
  186. package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.d.ts.map +1 -1
  187. package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.js +0 -5
  188. package/dist/presentation/components/helpers/enhanced_smart_selfie_animation_frames.js.map +1 -1
  189. package/dist/presentation/components/icons/index.d.ts +24 -8
  190. package/dist/presentation/components/icons/index.d.ts.map +1 -1
  191. package/dist/presentation/components/icons/index.js +31 -11
  192. package/dist/presentation/components/icons/index.js.map +1 -1
  193. package/dist/presentation/components/use_smile_id_attribution.d.ts +1 -1
  194. package/dist/presentation/components/use_smile_id_button.d.ts +2 -2
  195. package/dist/presentation/components/use_smile_id_button.js +4 -4
  196. package/dist/presentation/components/use_smile_id_button.js.map +1 -1
  197. package/dist/presentation/components/use_smile_id_capture_content.d.ts +13 -0
  198. package/dist/presentation/components/use_smile_id_capture_content.d.ts.map +1 -1
  199. package/dist/presentation/components/use_smile_id_capture_content.js +15 -9
  200. package/dist/presentation/components/use_smile_id_capture_content.js.map +1 -1
  201. package/dist/presentation/components/use_smile_id_captured_document_image.d.ts +2 -3
  202. package/dist/presentation/components/use_smile_id_captured_document_image.d.ts.map +1 -1
  203. package/dist/presentation/components/use_smile_id_captured_document_image.js +1 -3
  204. package/dist/presentation/components/use_smile_id_captured_document_image.js.map +1 -1
  205. package/dist/presentation/components/use_smile_id_document_capture_controls.d.ts +12 -6
  206. package/dist/presentation/components/use_smile_id_document_capture_controls.d.ts.map +1 -1
  207. package/dist/presentation/components/use_smile_id_document_capture_controls.js +59 -16
  208. package/dist/presentation/components/use_smile_id_document_capture_controls.js.map +1 -1
  209. package/dist/presentation/components/use_smile_id_document_overlay.d.ts +22 -5
  210. package/dist/presentation/components/use_smile_id_document_overlay.d.ts.map +1 -1
  211. package/dist/presentation/components/use_smile_id_document_overlay.js +80 -40
  212. package/dist/presentation/components/use_smile_id_document_overlay.js.map +1 -1
  213. package/dist/presentation/components/use_smile_id_document_shimmer.d.ts +15 -0
  214. package/dist/presentation/components/use_smile_id_document_shimmer.d.ts.map +1 -0
  215. package/dist/presentation/components/use_smile_id_document_shimmer.js +23 -0
  216. package/dist/presentation/components/use_smile_id_document_shimmer.js.map +1 -0
  217. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.d.ts +5 -2
  218. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.d.ts.map +1 -1
  219. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.js +9 -6
  220. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_clip.js.map +1 -1
  221. package/dist/presentation/components/use_smile_id_guideline_thumbnail.d.ts.map +1 -1
  222. package/dist/presentation/components/use_smile_id_guideline_thumbnail.js +84 -1
  223. package/dist/presentation/components/use_smile_id_guideline_thumbnail.js.map +1 -1
  224. package/dist/presentation/components/use_smile_id_instructions_hero.d.ts +3 -1
  225. package/dist/presentation/components/use_smile_id_instructions_hero.d.ts.map +1 -1
  226. package/dist/presentation/components/use_smile_id_instructions_hero.js +25 -5
  227. package/dist/presentation/components/use_smile_id_instructions_hero.js.map +1 -1
  228. package/dist/presentation/components/use_smile_id_oval_border_palette.d.ts.map +1 -1
  229. package/dist/presentation/components/use_smile_id_oval_border_palette.js +7 -3
  230. package/dist/presentation/components/use_smile_id_oval_border_palette.js.map +1 -1
  231. package/dist/presentation/flow/dsl/builder/config_builder.d.ts +28 -0
  232. package/dist/presentation/flow/dsl/builder/config_builder.d.ts.map +1 -1
  233. package/dist/presentation/flow/dsl/builder/config_builder.js +30 -0
  234. package/dist/presentation/flow/dsl/builder/config_builder.js.map +1 -1
  235. package/dist/presentation/flow/dsl/builder/ml_builder.d.ts +13 -4
  236. package/dist/presentation/flow/dsl/builder/ml_builder.d.ts.map +1 -1
  237. package/dist/presentation/flow/dsl/builder/ml_builder.js +3 -2
  238. package/dist/presentation/flow/dsl/builder/ml_builder.js.map +1 -1
  239. package/dist/presentation/flow/dsl/builder/screens_builder.d.ts +110 -12
  240. package/dist/presentation/flow/dsl/builder/screens_builder.d.ts.map +1 -1
  241. package/dist/presentation/flow/dsl/builder/screens_builder.js +110 -12
  242. package/dist/presentation/flow/dsl/builder/screens_builder.js.map +1 -1
  243. package/dist/presentation/flow/dsl/builder/theme_builder.d.ts +15 -2
  244. package/dist/presentation/flow/dsl/builder/theme_builder.d.ts.map +1 -1
  245. package/dist/presentation/flow/dsl/builder/theme_builder.js +15 -2
  246. package/dist/presentation/flow/dsl/builder/theme_builder.js.map +1 -1
  247. package/dist/presentation/flow/dsl/use_smile_id_builder.d.ts +6 -4
  248. package/dist/presentation/flow/dsl/use_smile_id_builder.d.ts.map +1 -1
  249. package/dist/presentation/flow/dsl/use_smile_id_builder.js.map +1 -1
  250. package/dist/presentation/flow/dsl/use_smile_id_flow_builder.d.ts +62 -36
  251. package/dist/presentation/flow/dsl/use_smile_id_flow_builder.d.ts.map +1 -1
  252. package/dist/presentation/flow/dsl/use_smile_id_flow_builder.js +62 -36
  253. package/dist/presentation/flow/dsl/use_smile_id_flow_builder.js.map +1 -1
  254. package/dist/presentation/flow/flow_navigation_manager.d.ts +44 -5
  255. package/dist/presentation/flow/flow_navigation_manager.d.ts.map +1 -1
  256. package/dist/presentation/flow/flow_navigation_manager.js +148 -11
  257. package/dist/presentation/flow/flow_navigation_manager.js.map +1 -1
  258. package/dist/presentation/flow/model/instruction_guideline.d.ts +9 -0
  259. package/dist/presentation/flow/model/instruction_guideline.d.ts.map +1 -1
  260. package/dist/presentation/flow/model/instructions_defaults.d.ts +11 -2
  261. package/dist/presentation/flow/model/instructions_defaults.d.ts.map +1 -1
  262. package/dist/presentation/flow/model/instructions_defaults.js +74 -26
  263. package/dist/presentation/flow/model/instructions_defaults.js.map +1 -1
  264. package/dist/presentation/flow/screen/orchestrated_capture_screen.d.ts.map +1 -1
  265. package/dist/presentation/flow/screen/orchestrated_capture_screen.js +48 -14
  266. package/dist/presentation/flow/screen/orchestrated_capture_screen.js.map +1 -1
  267. package/dist/presentation/flow/screen/orchestrated_consent_screen.d.ts.map +1 -1
  268. package/dist/presentation/flow/screen/orchestrated_consent_screen.js +3 -1
  269. package/dist/presentation/flow/screen/orchestrated_consent_screen.js.map +1 -1
  270. package/dist/presentation/flow/screen/orchestrated_instructions_screen.js +1 -1
  271. package/dist/presentation/flow/screen/orchestrated_instructions_screen.js.map +1 -1
  272. package/dist/presentation/flow/screen/orchestrated_preview_screen.d.ts.map +1 -1
  273. package/dist/presentation/flow/screen/orchestrated_preview_screen.js +3 -9
  274. package/dist/presentation/flow/screen/orchestrated_preview_screen.js.map +1 -1
  275. package/dist/presentation/flow/screen/orchestrated_processing_screen.js +3 -3
  276. package/dist/presentation/flow/screen/orchestrated_processing_screen.js.map +1 -1
  277. package/dist/presentation/flow/use_smile_id_flow.d.ts.map +1 -1
  278. package/dist/presentation/flow/use_smile_id_flow.js +10 -4
  279. package/dist/presentation/flow/use_smile_id_flow.js.map +1 -1
  280. package/dist/presentation/flow/validation/flow_validator.d.ts.map +1 -1
  281. package/dist/presentation/flow/validation/flow_validator.js +42 -20
  282. package/dist/presentation/flow/validation/flow_validator.js.map +1 -1
  283. package/dist/presentation/flow/validation/job_type_validator.d.ts.map +1 -1
  284. package/dist/presentation/flow/validation/job_type_validator.js +14 -0
  285. package/dist/presentation/flow/validation/job_type_validator.js.map +1 -1
  286. package/dist/presentation/screen/helpers/capture_screen_helpers.d.ts.map +1 -1
  287. package/dist/presentation/screen/helpers/capture_screen_helpers.js +1 -0
  288. package/dist/presentation/screen/helpers/capture_screen_helpers.js.map +1 -1
  289. package/dist/presentation/screen/helpers/capture_ui_state.d.ts +6 -6
  290. package/dist/presentation/screen/helpers/capture_ui_state.d.ts.map +1 -1
  291. package/dist/presentation/screen/helpers/capture_ui_state.js +19 -19
  292. package/dist/presentation/screen/helpers/capture_ui_state.js.map +1 -1
  293. package/dist/presentation/screen/helpers/ess_turn_haptics.d.ts +2 -2
  294. package/dist/presentation/screen/helpers/ess_turn_haptics.d.ts.map +1 -1
  295. package/dist/presentation/screen/helpers/ess_turn_haptics.js +6 -6
  296. package/dist/presentation/screen/helpers/ess_turn_haptics.js.map +1 -1
  297. package/dist/presentation/screen/helpers/instructions_screen_helpers.d.ts +1 -0
  298. package/dist/presentation/screen/helpers/instructions_screen_helpers.d.ts.map +1 -1
  299. package/dist/presentation/screen/helpers/instructions_screen_helpers.js +6 -2
  300. package/dist/presentation/screen/helpers/instructions_screen_helpers.js.map +1 -1
  301. package/dist/presentation/screen/helpers/scan_state_to_overlay_state.d.ts +5 -5
  302. package/dist/presentation/screen/helpers/scan_state_to_overlay_state.d.ts.map +1 -1
  303. package/dist/presentation/screen/helpers/scan_state_to_overlay_state.js +14 -11
  304. package/dist/presentation/screen/helpers/scan_state_to_overlay_state.js.map +1 -1
  305. package/dist/presentation/screen/helpers/use_capture_orientation_lock.d.ts +13 -3
  306. package/dist/presentation/screen/helpers/use_capture_orientation_lock.d.ts.map +1 -1
  307. package/dist/presentation/screen/helpers/use_capture_orientation_lock.js +48 -6
  308. package/dist/presentation/screen/helpers/use_capture_orientation_lock.js.map +1 -1
  309. package/dist/presentation/screen/use_smile_id_capture_screen.d.ts +21 -3
  310. package/dist/presentation/screen/use_smile_id_capture_screen.d.ts.map +1 -1
  311. package/dist/presentation/screen/use_smile_id_capture_screen.js +188 -32
  312. package/dist/presentation/screen/use_smile_id_capture_screen.js.map +1 -1
  313. package/dist/presentation/screen/use_smile_id_consent_screen.d.ts +7 -0
  314. package/dist/presentation/screen/use_smile_id_consent_screen.d.ts.map +1 -1
  315. package/dist/presentation/screen/use_smile_id_consent_screen.js +6 -5
  316. package/dist/presentation/screen/use_smile_id_consent_screen.js.map +1 -1
  317. package/dist/presentation/screen/use_smile_id_document_back_instructions.d.ts.map +1 -1
  318. package/dist/presentation/screen/use_smile_id_document_back_instructions.js +5 -13
  319. package/dist/presentation/screen/use_smile_id_document_back_instructions.js.map +1 -1
  320. package/dist/presentation/screen/use_smile_id_document_preview_screen.d.ts +2 -3
  321. package/dist/presentation/screen/use_smile_id_document_preview_screen.d.ts.map +1 -1
  322. package/dist/presentation/screen/use_smile_id_document_preview_screen.js +17 -12
  323. package/dist/presentation/screen/use_smile_id_document_preview_screen.js.map +1 -1
  324. package/dist/presentation/screen/use_smile_id_instructions_screen.d.ts +2 -0
  325. package/dist/presentation/screen/use_smile_id_instructions_screen.d.ts.map +1 -1
  326. package/dist/presentation/screen/use_smile_id_instructions_screen.js +2 -1
  327. package/dist/presentation/screen/use_smile_id_instructions_screen.js.map +1 -1
  328. package/dist/presentation/screen/use_smile_id_preview_screen.d.ts +7 -26
  329. package/dist/presentation/screen/use_smile_id_preview_screen.d.ts.map +1 -1
  330. package/dist/presentation/screen/use_smile_id_preview_screen.js +10 -20
  331. package/dist/presentation/screen/use_smile_id_preview_screen.js.map +1 -1
  332. package/dist/presentation/screen/use_smile_id_processing_screen.d.ts +2 -3
  333. package/dist/presentation/screen/use_smile_id_processing_screen.d.ts.map +1 -1
  334. package/dist/presentation/screen/use_smile_id_processing_screen.js +4 -3
  335. package/dist/presentation/screen/use_smile_id_processing_screen.js.map +1 -1
  336. package/dist/presentation/theme/theme.d.ts +1 -1
  337. package/dist/presentation/theme/theme.d.ts.map +1 -1
  338. package/dist/presentation/theme/theme.js +20 -18
  339. package/dist/presentation/theme/theme.js.map +1 -1
  340. package/dist/presentation/utils/force_max_brightness.d.ts +4 -4
  341. package/dist/presentation/utils/locale_utils.d.ts +10 -4
  342. package/dist/presentation/utils/locale_utils.d.ts.map +1 -1
  343. package/dist/presentation/utils/locale_utils.js +13 -5
  344. package/dist/presentation/utils/locale_utils.js.map +1 -1
  345. package/dist/testing/fake_face_analyzer.d.ts +43 -0
  346. package/dist/testing/fake_face_analyzer.d.ts.map +1 -0
  347. package/dist/testing/fake_face_analyzer.js +52 -0
  348. package/dist/testing/fake_face_analyzer.js.map +1 -0
  349. package/dist/testing/index.d.ts +5 -0
  350. package/dist/testing/index.d.ts.map +1 -0
  351. package/dist/testing/index.js +7 -0
  352. package/dist/testing/index.js.map +1 -0
  353. package/dist/testing/scenario_expectations.d.ts +28 -0
  354. package/dist/testing/scenario_expectations.d.ts.map +1 -0
  355. package/dist/testing/scenario_expectations.js +65 -0
  356. package/dist/testing/scenario_expectations.js.map +1 -0
  357. package/dist/testing/scenario_loader.d.ts +11 -0
  358. package/dist/testing/scenario_loader.d.ts.map +1 -0
  359. package/dist/testing/scenario_loader.js +64 -0
  360. package/dist/testing/scenario_loader.js.map +1 -0
  361. package/dist/testing/scripted_scan_results.d.ts +17 -0
  362. package/dist/testing/scripted_scan_results.d.ts.map +1 -0
  363. package/dist/testing/scripted_scan_results.js +52 -0
  364. package/dist/testing/scripted_scan_results.js.map +1 -0
  365. package/package.json +34 -7
  366. package/src/__tests__/dsl.test.ts +51 -1
  367. package/src/__tests__/react_native_mock.tsx +8 -0
  368. package/src/__tests__/setup_react_native.ts +17 -2
  369. package/src/__tests__/snapshots/__snapshots__/screens_structural.test.tsx.snap +5261 -0
  370. package/src/__tests__/snapshots/screens_structural.test.tsx +230 -0
  371. package/src/camera/__tests__/use_smile_id_camera_system.test.ts +103 -0
  372. package/src/camera/camera_defaults.ts +11 -9
  373. package/src/camera/orientation_degrees.ts +5 -6
  374. package/src/core/exception/__tests__/builder_validation_exceptions.test.ts +67 -0
  375. package/src/core/exception/agent_mode_with_enhanced_liveness_exception.ts +20 -0
  376. package/src/core/exception/capture_validation_exceptions.ts +1 -0
  377. package/src/core/exception/index.ts +1 -0
  378. package/src/core/exception/use_smile_id_error_code.ts +1 -0
  379. package/src/core/models/__tests__/document_type.test.ts +7 -5
  380. package/src/core/models/__tests__/flow_models.test.ts +26 -0
  381. package/src/core/models/config.ts +22 -0
  382. package/src/core/models/document_capture_mode.ts +27 -0
  383. package/src/core/models/document_type.ts +7 -5
  384. package/src/core/models/global_privacy_control.ts +45 -0
  385. package/src/core/models/network_config.ts +2 -2
  386. package/src/core/models/result.ts +9 -8
  387. package/src/data/api/__tests__/smile_id_api.test.ts +1 -1
  388. package/src/data/api/interceptors/__tests__/gzip_interceptor.test.ts +83 -0
  389. package/src/data/api/interceptors/__tests__/smile_integrity_interceptor.test.ts +37 -1
  390. package/src/data/api/interceptors/__tests__/smile_request_mac_interceptor.test.ts +59 -1
  391. package/src/data/api/interceptors/smile_auth_interceptor.ts +3 -18
  392. package/src/data/api/interceptors/smile_integrity_interceptor.ts +20 -0
  393. package/src/data/api/interceptors/smile_request_mac_interceptor.ts +13 -0
  394. package/src/data/compression/__tests__/payload_compressor.test.ts +200 -0
  395. package/src/data/compression/__tests__/payload_compressor_real_jpeg.test.ts +226 -0
  396. package/src/data/compression/compressible_asset.ts +62 -0
  397. package/src/data/compression/payload_compression_config.ts +53 -0
  398. package/src/data/compression/payload_compression_runner.ts +102 -0
  399. package/src/data/compression/payload_compressor.ts +164 -0
  400. package/src/data/compression/uri_compressible_asset.ts +85 -0
  401. package/src/data/dsl/builder/__tests__/config_builders.test.ts +62 -0
  402. package/src/data/dsl/builder/cache_config_builder.ts +3 -1
  403. package/src/data/dsl/builder/config_builder.ts +45 -14
  404. package/src/data/dsl/builder/interceptor_config_builder.ts +9 -7
  405. package/src/data/dsl/builder/retry_config_builder.ts +27 -6
  406. package/src/data/dsl/builder/timeout_config_builder.ts +7 -0
  407. package/src/data/dsl/use_smile_id_network_builder.ts +17 -0
  408. package/src/data/factory/__tests__/retry_gzip_mac_composition.test.ts +163 -0
  409. package/src/data/factory/__tests__/signed_job_submission_headers.test.ts +1 -1
  410. package/src/data/factory/networking_factory.ts +14 -1
  411. package/src/data/repository/__tests__/network_retries.test.ts +117 -0
  412. package/src/data/repository/__tests__/use_smile_id_repository.test.ts +1 -1
  413. package/src/data/repository/use_smile_id_repository_impl.ts +96 -9
  414. package/src/data/security/__tests__/request_canonicalizer.test.ts +132 -0
  415. package/src/data/security/__tests__/security_policy.test.ts +96 -0
  416. package/src/data/security/__tests__/smile_id_crypto_manager.test.ts +18 -0
  417. package/src/data/security/request_canonicalizer.ts +15 -2
  418. package/src/data/security/security_policy.ts +70 -0
  419. package/src/data/smile_id_urls.ts +1 -1
  420. package/src/data/util/__tests__/retry_util.test.ts +25 -0
  421. package/src/data/util/__tests__/use_smile_id_token_decoder.test.ts +57 -1
  422. package/src/data/util/retry_util.ts +12 -3
  423. package/src/data/util/use_smile_id_token_decoder.ts +76 -28
  424. package/src/index.ts +6 -4
  425. package/src/l10n/strings_en.ts +2 -1
  426. package/src/l10n/use_smile_id_localizations.ts +3 -0
  427. package/src/metadata/__tests__/device_orientation_collector.test.ts +15 -0
  428. package/src/metadata/__tests__/metadata_configuration_mappers.test.ts +254 -0
  429. package/src/metadata/__tests__/metadata_configuration_objects.test.ts +86 -0
  430. package/src/metadata/__tests__/metadata_device_context.test.ts +147 -0
  431. package/src/metadata/__tests__/metadata_device_os_android.test.ts +18 -0
  432. package/src/metadata/__tests__/metadata_golden_fixture.json +13 -0
  433. package/src/metadata/__tests__/metadata_payload_golden.test.ts +193 -0
  434. package/src/metadata/__tests__/use_smile_id_metadata.test.ts +19 -25
  435. package/src/metadata/builder_configuration.ts +69 -0
  436. package/src/metadata/captured_image_properties.ts +10 -0
  437. package/src/metadata/device_orientation_collector.ts +75 -0
  438. package/src/metadata/geolocation.ts +46 -0
  439. package/src/metadata/metadata_configuration_mappers.ts +248 -0
  440. package/src/metadata/model_configuration.ts +68 -0
  441. package/src/metadata/optional_native_modules.ts +157 -3
  442. package/src/metadata/use_smile_id_metadata.ts +140 -17
  443. package/src/metadata/use_smile_id_metadata_factory.ts +211 -16
  444. package/src/presentation/assets/si_document_green_book_hero_animation.json +1 -4668
  445. package/src/presentation/assets/si_document_hero_animation.json +1 -4799
  446. package/src/presentation/assets/si_document_hero_back_animation.json +1 -2039
  447. package/src/presentation/assets/si_document_passport_hero_animation.json +1 -14491
  448. package/src/presentation/assets/si_ess_all_directions_hero_animation.json +1 -0
  449. package/src/presentation/assets/si_ess_animation_all_directions.json +1 -5575
  450. package/src/presentation/assets/si_selfie_hero_animation.json +1 -1439
  451. package/src/presentation/assets/si_smile_to_capture_animation.json +1 -1439
  452. package/src/presentation/assets/svg/document_shimmer_strings.ts +17 -0
  453. package/src/presentation/assets/svg/instruction_svg_strings.ts +34 -12
  454. package/src/presentation/components/__tests__/enhanced_smart_selfie_animation_frames.test.ts +1 -3
  455. package/src/presentation/components/__tests__/use_smile_id_enhanced_smart_selfie_clip.test.tsx +12 -8
  456. package/src/presentation/components/__tests__/use_smile_id_guideline_thumbnail.test.tsx +34 -1
  457. package/src/presentation/components/__tests__/use_smile_id_instructions_hero.test.tsx +71 -0
  458. package/src/presentation/components/__tests__/use_smile_id_oval_border_palette.test.ts +7 -5
  459. package/src/presentation/components/helpers/enhanced_smart_selfie_animation_frames.ts +0 -6
  460. package/src/presentation/components/icons/index.tsx +65 -18
  461. package/src/presentation/components/use_smile_id_attribution.tsx +1 -1
  462. package/src/presentation/components/use_smile_id_button.tsx +4 -4
  463. package/src/presentation/components/use_smile_id_capture_content.tsx +36 -12
  464. package/src/presentation/components/use_smile_id_captured_document_image.tsx +3 -8
  465. package/src/presentation/components/use_smile_id_document_capture_controls.tsx +103 -39
  466. package/src/presentation/components/use_smile_id_document_overlay.tsx +134 -44
  467. package/src/presentation/components/use_smile_id_document_shimmer.tsx +51 -0
  468. package/src/presentation/components/use_smile_id_enhanced_smart_selfie_clip.tsx +9 -6
  469. package/src/presentation/components/use_smile_id_guideline_thumbnail.tsx +131 -2
  470. package/src/presentation/components/use_smile_id_instructions_hero.tsx +111 -60
  471. package/src/presentation/components/use_smile_id_oval_border_palette.ts +7 -3
  472. package/src/presentation/flow/__tests__/document_flow_navigation.test.ts +203 -4
  473. package/src/presentation/flow/__tests__/flow_navigation_manager.test.ts +49 -0
  474. package/src/presentation/flow/dsl/builder/__tests__/config_builder.test.ts +25 -0
  475. package/src/presentation/flow/dsl/builder/config_builder.ts +35 -0
  476. package/src/presentation/flow/dsl/builder/ml_builder.ts +13 -4
  477. package/src/presentation/flow/dsl/builder/screens_builder.ts +110 -12
  478. package/src/presentation/flow/dsl/builder/theme_builder.ts +19 -2
  479. package/src/presentation/flow/dsl/use_smile_id_builder.tsx +6 -4
  480. package/src/presentation/flow/dsl/use_smile_id_flow_builder.ts +62 -36
  481. package/src/presentation/flow/flow_navigation_manager.ts +185 -14
  482. package/src/presentation/flow/model/instruction_guideline.ts +6 -0
  483. package/src/presentation/flow/model/instructions_defaults.ts +104 -26
  484. package/src/presentation/flow/screen/orchestrated_capture_screen.tsx +60 -12
  485. package/src/presentation/flow/screen/orchestrated_consent_screen.tsx +5 -0
  486. package/src/presentation/flow/screen/orchestrated_instructions_screen.tsx +1 -0
  487. package/src/presentation/flow/screen/orchestrated_preview_screen.tsx +4 -14
  488. package/src/presentation/flow/screen/orchestrated_processing_screen.tsx +3 -3
  489. package/src/presentation/flow/use_smile_id_flow.tsx +11 -4
  490. package/src/presentation/flow/validation/__tests__/flow_validator.test.ts +61 -1
  491. package/src/presentation/flow/validation/__tests__/job_type_validator.test.ts +64 -0
  492. package/src/presentation/flow/validation/flow_validator.ts +55 -26
  493. package/src/presentation/flow/validation/job_type_validator.ts +24 -0
  494. package/src/presentation/screen/__tests__/capture_ui_state.test.ts +66 -47
  495. package/src/presentation/screen/__tests__/ess_turn_haptics.test.ts +15 -11
  496. package/src/presentation/screen/__tests__/instructions_screen_helpers.test.ts +15 -3
  497. package/src/presentation/screen/__tests__/scan_state_to_overlay_state.test.ts +47 -27
  498. package/src/presentation/screen/__tests__/use_smile_id_capture_screen.test.tsx +182 -18
  499. package/src/presentation/screen/__tests__/use_smile_id_document_back_instructions.test.tsx +1 -1
  500. package/src/presentation/screen/__tests__/use_smile_id_preview_screen.test.tsx +10 -40
  501. package/src/presentation/screen/helpers/__tests__/use_capture_orientation_lock.test.tsx +212 -0
  502. package/src/presentation/screen/helpers/capture_screen_helpers.ts +1 -0
  503. package/src/presentation/screen/helpers/capture_ui_state.ts +27 -27
  504. package/src/presentation/screen/helpers/ess_turn_haptics.ts +9 -9
  505. package/src/presentation/screen/helpers/instructions_screen_helpers.ts +7 -2
  506. package/src/presentation/screen/helpers/scan_state_to_overlay_state.ts +16 -13
  507. package/src/presentation/screen/helpers/use_capture_orientation_lock.ts +69 -7
  508. package/src/presentation/screen/use_smile_id_capture_screen.tsx +280 -54
  509. package/src/presentation/screen/use_smile_id_consent_screen.tsx +16 -5
  510. package/src/presentation/screen/use_smile_id_document_back_instructions.tsx +14 -23
  511. package/src/presentation/screen/use_smile_id_document_preview_screen.tsx +33 -23
  512. package/src/presentation/screen/use_smile_id_instructions_screen.tsx +4 -0
  513. package/src/presentation/screen/use_smile_id_preview_screen.tsx +21 -53
  514. package/src/presentation/screen/use_smile_id_processing_screen.tsx +8 -8
  515. package/src/presentation/theme/theme.ts +21 -19
  516. package/src/presentation/utils/__tests__/locale_utils.test.ts +46 -5
  517. package/src/presentation/utils/force_max_brightness.tsx +4 -4
  518. package/src/presentation/utils/locale_utils.ts +13 -4
  519. package/src/testing/__tests__/fake_face_analyzer.test.ts +42 -0
  520. package/src/testing/__tests__/scenario_expectations.test.ts +110 -0
  521. package/src/testing/__tests__/scenario_loader.test.ts +64 -0
  522. package/src/testing/fake_face_analyzer.ts +82 -0
  523. package/src/testing/index.ts +15 -0
  524. package/src/testing/scenario_expectations.ts +87 -0
  525. package/src/testing/scenario_loader.ts +83 -0
  526. package/src/testing/scripted_scan_results.ts +66 -0
  527. package/dist/camera/frame_processor_plugin.d.ts +0 -28
  528. package/dist/camera/frame_processor_plugin.d.ts.map +0 -1
  529. package/dist/camera/frame_processor_plugin.js +0 -21
  530. package/dist/camera/frame_processor_plugin.js.map +0 -1
  531. package/dist/camera/use_smile_id_frame_processor.d.ts +0 -38
  532. package/dist/camera/use_smile_id_frame_processor.d.ts.map +0 -1
  533. package/dist/camera/use_smile_id_frame_processor.js +0 -2
  534. package/dist/camera/use_smile_id_frame_processor.js.map +0 -1
  535. package/dist/presentation/components/use_smile_id_document_frame_glyph.d.ts +0 -17
  536. package/dist/presentation/components/use_smile_id_document_frame_glyph.d.ts.map +0 -1
  537. package/dist/presentation/components/use_smile_id_document_frame_glyph.js +0 -17
  538. package/dist/presentation/components/use_smile_id_document_frame_glyph.js.map +0 -1
  539. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.d.ts +0 -24
  540. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.d.ts.map +0 -1
  541. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.js +0 -91
  542. package/dist/presentation/components/use_smile_id_enhanced_smart_selfie_animation.js.map +0 -1
  543. package/dist/presentation/components/use_smile_id_face_silhouette_overlay.d.ts +0 -15
  544. package/dist/presentation/components/use_smile_id_face_silhouette_overlay.d.ts.map +0 -1
  545. package/dist/presentation/components/use_smile_id_face_silhouette_overlay.js +0 -19
  546. package/dist/presentation/components/use_smile_id_face_silhouette_overlay.js.map +0 -1
  547. package/dist/presentation/components/use_smile_id_instruction_card.d.ts +0 -31
  548. package/dist/presentation/components/use_smile_id_instruction_card.d.ts.map +0 -1
  549. package/dist/presentation/components/use_smile_id_instruction_card.js +0 -43
  550. package/dist/presentation/components/use_smile_id_instruction_card.js.map +0 -1
  551. package/dist/presentation/screen/helpers/use_document_orientation_lock.d.ts +0 -24
  552. package/dist/presentation/screen/helpers/use_document_orientation_lock.d.ts.map +0 -1
  553. package/dist/presentation/screen/helpers/use_document_orientation_lock.js +0 -47
  554. package/dist/presentation/screen/helpers/use_document_orientation_lock.js.map +0 -1
  555. package/src/presentation/components/use_smile_id_document_frame_glyph.tsx +0 -162
  556. package/src/presentation/components/use_smile_id_face_silhouette_overlay.tsx +0 -27
@@ -0,0 +1,18 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+
3
+ vi.mock("react-native", () => ({
4
+ Platform: { OS: "android", Version: 31, constants: { Release: "12" } },
5
+ Dimensions: {
6
+ get: () => ({ width: 1080, height: 2400, scale: 3 }),
7
+ },
8
+ }));
9
+
10
+ import { UseSmileIDMetadataFactory } from "../use_smile_id_metadata_factory";
11
+
12
+ describe("device_os on Android", () => {
13
+ it("reports the release version, not the API level", () => {
14
+ const factory = new UseSmileIDMetadataFactory();
15
+
16
+ expect(factory.make().toFields().deviceOs).toBe("Android 12");
17
+ });
18
+ });
@@ -0,0 +1,13 @@
1
+ {
2
+ "_comment": "Shared cross-SDK golden parity vectors. These metadata keys must serialise to the EXACT same wire value on Android, iOS, Flutter, and React Native for the standard fully-populated golden snapshot. Each SDK's metadata-payload golden test asserts its payload contains every entry below verbatim. Maintained manually — keep the four copies (android/ios/flutter/react-native-expo test dirs) in sync.",
3
+ "expected": {
4
+ "sdk_version": "12.0.1",
5
+ "proxy": "true",
6
+ "proximity_sensor": "true",
7
+ "sdk_config_source": "sdk_config",
8
+ "battery_status": "0",
9
+ "sdk_launch_count": "5",
10
+ "vpn": "false",
11
+ "privileges": "{\"1\":\"100010\",\"8\":\"100100\"}"
12
+ }
13
+ }
@@ -0,0 +1,193 @@
1
+ import { describe, expect, it } from "vitest";
2
+
3
+ import {
4
+ UseSmileIDMetadata,
5
+ type UseSmileIDMetadataFields,
6
+ } from "../use_smile_id_metadata";
7
+ import goldenFixture from "./metadata_golden_fixture.json";
8
+
9
+ /**
10
+ * Golden check that a fully-populated `UseSmileIDMetadata` emits the device-context payload with the
11
+ * right value shapes, and that a default snapshot emits only the always-present keys.
12
+ *
13
+ * Capture-telemetry / document-origin / config-object keys ride as flow-manager `extraEntries`
14
+ * (verified in `document_flow_navigation.test.ts`); this suite covers the field-based device-context
15
+ * keys, using the same inputs/expected values as the sibling Android / iOS / Flutter golden suites.
16
+ */
17
+ describe("metadata payload (golden, device-context fields)", () => {
18
+ function fullyPopulated(): UseSmileIDMetadataFields {
19
+ return {
20
+ sdkVersion: "12.0.1",
21
+ sdk: "react-native-expo",
22
+ deviceOs: "Android 14",
23
+ deviceModel: "Google Pixel 8",
24
+ appName: "TestApp",
25
+ sessionId: "session-123",
26
+ clientIp: "192.168.1.5",
27
+ networkConnection: "wifi",
28
+ carrierInfo: "MTN",
29
+ proxy: true,
30
+ timezone: "Africa/Lagos",
31
+ locale: "en_NG",
32
+ screenResolution: "1080x2400",
33
+ memoryInfoMb: 7777,
34
+ deviceOrientation: "portrait",
35
+ systemArchitecture: "arm64-v8a",
36
+ numberOfCameras: 3,
37
+ hostApplication: "TestApp v1.2",
38
+ proximitySensor: true,
39
+ securityPolicyVersion: "12.0.0",
40
+ sdkConfigSource: "sdk_config",
41
+ imageWidth: 480,
42
+ imageHeight: 640,
43
+ livenessImageWidth: 320,
44
+ livenessImageHeight: 240,
45
+ timezoneOffsetMinutes: 60,
46
+ buildBrand: "Google",
47
+ buildDevice: "husky",
48
+ buildFingerprint: "google/husky:14",
49
+ buildProduct: "husky",
50
+ buildHardware: "husky",
51
+ buildSource: "com.android.vending",
52
+ packageName: "com.partner.app",
53
+ fingerprint: "android-id-123",
54
+ localTimeOfEnrolment: "2026-06-24T10:00:00.000+03:00",
55
+ batteryStatus: 0,
56
+ vpn: false,
57
+ certificateDigest: ["AA:BB", "CC:DD"],
58
+ wrapperName: "react_native_expo",
59
+ wrapperVersion: "12.0.1",
60
+ sdkLaunchCount: 5,
61
+ geolocation: {
62
+ latitude: 1.5,
63
+ longitude: -2.5,
64
+ accuracy: "precise",
65
+ source: "gps",
66
+ },
67
+ privileges: '{"1":"100010","8":"100100"}',
68
+ };
69
+ }
70
+
71
+ function entriesOf(fields: UseSmileIDMetadataFields): Map<string, string> {
72
+ return new Map(
73
+ new UseSmileIDMetadata(fields).toEntries().map((e) => [e.name, e.value]),
74
+ );
75
+ }
76
+
77
+ // Field-based device-context keys the fully-populated payload must emit.
78
+ const expectedKeys = [
79
+ "sdk_version",
80
+ "sdk",
81
+ "device_os",
82
+ "device_model",
83
+ "app_name",
84
+ "session_id",
85
+ "proxy",
86
+ "proximity_sensor",
87
+ "sdk_config_source",
88
+ "client_ip",
89
+ "network_connection",
90
+ "carrier_info",
91
+ "timezone",
92
+ "locale",
93
+ "screen_resolution",
94
+ "device_orientation",
95
+ "system_architecture",
96
+ "host_application",
97
+ "security_policy_version",
98
+ "selfie_image_dimensions",
99
+ "liveness_image_dimensions",
100
+ "timezone_offset",
101
+ "memory_info",
102
+ "number_of_cameras",
103
+ "build_brand",
104
+ "build_device",
105
+ "build_fingerprint",
106
+ "build_product",
107
+ "build_hardware",
108
+ "build_source",
109
+ "package_name",
110
+ "fingerprint",
111
+ "local_time_of_enrolment",
112
+ "battery_status",
113
+ "vpn",
114
+ "certificate_digest",
115
+ "wrapper_name",
116
+ "wrapper_version",
117
+ "sdk_launch_count",
118
+ "geolocation",
119
+ "privileges",
120
+ ];
121
+
122
+ it("emits every expected device-context key", () => {
123
+ const map = entriesOf(fullyPopulated());
124
+ for (const key of expectedKeys) {
125
+ expect(map.has(key), `missing key: ${key}`).toBe(true);
126
+ }
127
+ });
128
+
129
+ it("emits scalar + meaningful-falsey + JSON-shaped values correctly", () => {
130
+ const map = entriesOf(fullyPopulated());
131
+ expect(map.get("sdk_version")).toBe("12.0.1");
132
+ expect(map.get("proxy")).toBe("true");
133
+ expect(map.get("battery_status")).toBe("0"); // 0 is meaningful
134
+ expect(map.get("sdk_config_source")).toBe("sdk_config");
135
+ expect(map.get("wrapper_name")).toBe("react_native_expo");
136
+ expect(map.get("privileges")).toBe('{"1":"100010","8":"100100"}'); // verbatim
137
+ expect(map.get("vpn")).toBe("false"); // false is meaningful
138
+ expect(map.get("fingerprint")).toBe("android-id-123");
139
+ expect(map.get("package_name")).toBe("com.partner.app");
140
+ expect(JSON.parse(map.get("certificate_digest")!)).toEqual([
141
+ "AA:BB",
142
+ "CC:DD",
143
+ ]);
144
+ expect(JSON.parse(map.get("geolocation")!).accuracy).toBe("precise");
145
+ });
146
+
147
+ it("matches the cross-SDK parity fixture values", () => {
148
+ const map = entriesOf(fullyPopulated());
149
+ for (const [key, value] of Object.entries(goldenFixture.expected)) {
150
+ expect(map.get(key), `cross-SDK parity mismatch for ${key}`).toBe(value);
151
+ }
152
+ });
153
+
154
+ it("default snapshot emits only the always-present keys", () => {
155
+ const minimal: UseSmileIDMetadataFields = {
156
+ sdkVersion: "12.0.1",
157
+ sdk: "react-native-expo",
158
+ deviceOs: "Android 14",
159
+ deviceModel: "",
160
+ appName: "App",
161
+ sessionId: "s",
162
+ clientIp: "",
163
+ networkConnection: "",
164
+ carrierInfo: "",
165
+ timezone: "",
166
+ locale: "",
167
+ screenResolution: "",
168
+ memoryInfoMb: 0,
169
+ deviceOrientation: "",
170
+ systemArchitecture: "",
171
+ numberOfCameras: 0,
172
+ hostApplication: "",
173
+ securityPolicyVersion: "",
174
+ sdkConfigSource: "default",
175
+ imageWidth: 0,
176
+ imageHeight: 0,
177
+ livenessImageWidth: 0,
178
+ livenessImageHeight: 0,
179
+ };
180
+ const keys = new Set(entriesOf(minimal).keys());
181
+ // device_model is "" here so it omits; the rest of the required identity keys + source.
182
+ expect(keys.has("sdk_version")).toBe(true);
183
+ expect(keys.has("sdk_config_source")).toBe(true);
184
+ // Never-measured booleans → omitted rather than an inaccurate false.
185
+ expect(keys.has("proxy")).toBe(false);
186
+ expect(keys.has("proximity_sensor")).toBe(false);
187
+ // Optionals absent → omitted.
188
+ expect(keys.has("build_brand")).toBe(false);
189
+ expect(keys.has("geolocation")).toBe(false);
190
+ expect(keys.has("privileges")).toBe(false);
191
+ expect(keys.has("battery_status")).toBe(false);
192
+ });
193
+ });
@@ -18,11 +18,12 @@ import { UseSmileIDMetadataFactory } from "../use_smile_id_metadata_factory";
18
18
  import type { SdkConfig } from "../../data/model/sdk_config";
19
19
  import { SdkConfigSource } from "../../data/model/sdk_config_source";
20
20
 
21
- // Minimum baseline — every conditional field empty / zero. The
22
- // only fields that survive `toEntries()` from this fixture are the
23
- // truly-always-present ones (SDK constants, sessionId, booleans, sdk_config_source).
21
+ // Minimum baseline — every conditional field empty / zero and the measured
22
+ // booleans (proxy, proximitySensor) left undefined. The only fields that
23
+ // survive `toEntries()` from this fixture are the truly-always-present ones
24
+ // (SDK constants, sessionId, sdk_config_source).
24
25
  const baseFields: UseSmileIDMetadataFields = Object.freeze({
25
- sdkVersion: "12.0.0",
26
+ sdkVersion: "12.0.1",
26
27
  sdk: "react-native-expo",
27
28
  deviceOs: "",
28
29
  deviceModel: "",
@@ -31,7 +32,6 @@ const baseFields: UseSmileIDMetadataFields = Object.freeze({
31
32
  clientIp: "",
32
33
  networkConnection: "",
33
34
  carrierInfo: "",
34
- proxy: false,
35
35
  timezone: "",
36
36
  locale: "",
37
37
  screenResolution: "",
@@ -40,21 +40,23 @@ const baseFields: UseSmileIDMetadataFields = Object.freeze({
40
40
  systemArchitecture: "",
41
41
  numberOfCameras: 0,
42
42
  hostApplication: "",
43
- proximitySensor: false,
44
43
  securityPolicyVersion: "12.0.0",
45
44
  // sdk_config provenance — always-present (non-empty by construction).
46
45
  sdkConfigSource: SdkConfigSource.defaultSource,
47
46
  // Dimensions — zero in baseline fixture → omitted from entries.
48
47
  imageWidth: 0,
49
48
  imageHeight: 0,
49
+ livenessImageWidth: 0,
50
+ livenessImageHeight: 0,
50
51
  });
51
52
 
52
53
  describe("UseSmileIDMetadata.toEntries — standardized multipart wire format", () => {
53
54
  it("always emits the always-present fields, including device_os / device_model / app_name even when empty", () => {
54
55
  // `device_os`, `device_model`, and `app_name` are part of the
55
56
  // always-present field set: they are emitted unconditionally (even
56
- // when empty), alongside the SDK constants, the session UUID, and
57
- // the booleans. `sdk_config_source` is also always-present.
57
+ // when empty), alongside the SDK constants and the session UUID.
58
+ // `sdk_config_source` is also always-present. The measured booleans
59
+ // (proxy, proximity_sensor) are undefined in the baseline → omitted.
58
60
  const meta = new UseSmileIDMetadata(baseFields);
59
61
  const names = meta.toEntries().map((e) => e.name);
60
62
  expect(names).toEqual([
@@ -64,8 +66,6 @@ describe("UseSmileIDMetadata.toEntries — standardized multipart wire format",
64
66
  "device_model",
65
67
  "app_name",
66
68
  "session_id",
67
- "proxy",
68
- "proximity_sensor",
69
69
  "security_policy_version",
70
70
  "sdk_config_source",
71
71
  ]);
@@ -88,8 +88,6 @@ describe("UseSmileIDMetadata.toEntries — standardized multipart wire format",
88
88
  "device_model",
89
89
  "app_name",
90
90
  "session_id",
91
- "proxy",
92
- "proximity_sensor",
93
91
  "security_policy_version",
94
92
  "sdk_config_source",
95
93
  ]);
@@ -122,7 +120,7 @@ describe("UseSmileIDMetadata.toEntries — standardized multipart wire format",
122
120
  expect(names).not.toContain("number_of_cameras");
123
121
  });
124
122
 
125
- it("emits non-empty conditionals between the booleans and the trailer", () => {
123
+ it("emits non-empty conditionals between the identity block and the trailer", () => {
126
124
  const meta = new UseSmileIDMetadata({
127
125
  ...baseFields,
128
126
  // Populate the upper-conditional triple so the canonical
@@ -143,8 +141,6 @@ describe("UseSmileIDMetadata.toEntries — standardized multipart wire format",
143
141
  "device_model",
144
142
  "app_name",
145
143
  "session_id",
146
- "proxy",
147
- "proximity_sensor",
148
144
  "timezone",
149
145
  "locale",
150
146
  "memory_info",
@@ -267,10 +263,10 @@ describe("UseSmileIDMetadataFactory", () => {
267
263
  expect(names).toContain("app_name");
268
264
  // sdk_config_source is always-present (non-empty string by construction).
269
265
  expect(names).toContain("sdk_config_source");
270
- // image_width / image_height are emitted when > 0.
266
+ // Selfie + liveness dimensions are emitted as "WxH" when both sides > 0.
271
267
  // Factory defaults to 480 × 640 so they appear without an sdkConfig override.
272
- expect(names).toContain("image_width");
273
- expect(names).toContain("image_height");
268
+ expect(names).toContain("selfie_image_dimensions");
269
+ expect(names).toContain("liveness_image_dimensions");
274
270
  });
275
271
  });
276
272
 
@@ -372,7 +368,7 @@ describe("UseSmileIDMetadata.toEntries — sdk_config provenance", () => {
372
368
  expect(valueByName(meta).sdk_config_source).toBe("sdk_config");
373
369
  });
374
370
 
375
- it("emits image_width and image_height when > 0", () => {
371
+ it("emits selfie_image_dimensions as WxH when both sides > 0", () => {
376
372
  const values = valueByName(
377
373
  new UseSmileIDMetadata({
378
374
  ...baseFields,
@@ -381,18 +377,16 @@ describe("UseSmileIDMetadata.toEntries — sdk_config provenance", () => {
381
377
  imageHeight: 480,
382
378
  }),
383
379
  );
384
- expect(values["image_width"]).toBe("640");
385
- expect(values["image_height"]).toBe("480");
380
+ expect(values["selfie_image_dimensions"]).toBe("640x480");
386
381
  });
387
382
 
388
- it("omits image_width and image_height when zero (fallback to SDK defaults not set)", () => {
389
- // baseFields has imageWidth: 0 / imageHeight: 0 — these must be absent
383
+ it("omits selfie_image_dimensions when a side is zero (fallback to SDK defaults not set)", () => {
384
+ // baseFields has imageWidth: 0 / imageHeight: 0 — the "WxH" key must be absent
390
385
  // from the wire payload so the server doesn't see an explicit zero.
391
386
  const names = new UseSmileIDMetadata(baseFields)
392
387
  .toEntries()
393
388
  .map((e) => e.name);
394
- expect(names).not.toContain("image_width");
395
- expect(names).not.toContain("image_height");
389
+ expect(names).not.toContain("selfie_image_dimensions");
396
390
  });
397
391
  });
398
392
 
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Snapshot of the partner's structural SDK configuration, derived from the
3
+ * flow they assembled through the Builder DSL and appended to a job request as
4
+ * the `builder_configuration_object` entry. Lets the server correlate fraud
5
+ * signals with how the SDK was set up.
6
+ *
7
+ * Build instances with `flowConfigurationToBuilderConfiguration`.
8
+ */
9
+
10
+ /**
11
+ * Intrinsic pixel dimensions of the partner-supplied consent icon. On React
12
+ * Native the consent icon is a `ReactNode` with no measurable pixel size at
13
+ * configuration time, so this is currently always reported as `null`.
14
+ */
15
+ export type ConsentIconDimensions = {
16
+ readonly width: number;
17
+ readonly height: number;
18
+ };
19
+
20
+ export type BuilderConfiguration = {
21
+ readonly consentScreenUsed: boolean;
22
+ readonly consentIconProvided: boolean;
23
+ readonly consentIconDimensions: ConsentIconDimensions | null;
24
+ readonly consentAttributionShown: boolean;
25
+ readonly instructionsScreenUsed: boolean;
26
+ readonly selfiePreviewEnabled: boolean;
27
+ readonly documentPreviewEnabled: boolean;
28
+ readonly submissionSkipped: boolean;
29
+ readonly allowAgentMode: boolean;
30
+ readonly enhancedLivenessEnabled: boolean;
31
+ readonly autoCaptureEnabled: string;
32
+ readonly allowGalleryUpload: boolean;
33
+ readonly captureBothSides: boolean;
34
+ readonly allowSkipBack: boolean;
35
+ /**
36
+ * Partner-declared GPC posture ("opt-out" / "opt-in") — the consent
37
+ * layout every session ran under.
38
+ */
39
+ readonly globalPrivacyControl: string;
40
+ };
41
+
42
+ /**
43
+ * Serialises a [BuilderConfiguration] to its snake_case wire object, emitting
44
+ * `consent_icon_dimensions` as explicit `null` when no dimensions are available.
45
+ */
46
+ export function builderConfigurationToJson(
47
+ configuration: BuilderConfiguration,
48
+ ): Record<string, unknown> {
49
+ const dimensions = configuration.consentIconDimensions;
50
+ return {
51
+ consent_screen_used: configuration.consentScreenUsed,
52
+ consent_icon_provided: configuration.consentIconProvided,
53
+ consent_icon_dimensions: dimensions
54
+ ? { width: dimensions.width, height: dimensions.height }
55
+ : null,
56
+ consent_attribution_shown: configuration.consentAttributionShown,
57
+ instructions_screen_used: configuration.instructionsScreenUsed,
58
+ selfie_preview_enabled: configuration.selfiePreviewEnabled,
59
+ document_preview_enabled: configuration.documentPreviewEnabled,
60
+ submission_skipped: configuration.submissionSkipped,
61
+ allow_agent_mode: configuration.allowAgentMode,
62
+ enhanced_liveness_enabled: configuration.enhancedLivenessEnabled,
63
+ auto_capture_enabled: configuration.autoCaptureEnabled,
64
+ allow_gallery_upload: configuration.allowGalleryUpload,
65
+ capture_both_sides: configuration.captureBothSides,
66
+ allow_skip_back: configuration.allowSkipBack,
67
+ global_privacy_control: configuration.globalPrivacyControl,
68
+ };
69
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Fixed image properties for the captured artifacts, emitted as `*_image_color_depth` and
3
+ * `*_image_pixel_config`.
4
+ *
5
+ * These describe the submitted artifact — a baseline JPEG (3-channel RGB, no alpha) — not the
6
+ * 32-bit RGBA bitmap it decodes to in memory. Per-image byte sizes (`*_original_size` /
7
+ * `*_final_compressed_size`) are measured in the repository around the compression pass.
8
+ */
9
+ export const CAPTURE_IMAGE_COLOR_DEPTH = 24;
10
+ export const CAPTURE_IMAGE_PIXEL_CONFIG = "RGB_888";
@@ -0,0 +1,75 @@
1
+ import {
2
+ loadExpoSensors,
3
+ type AccelerometerSubscription,
4
+ } from "./optional_native_modules";
5
+
6
+ /**
7
+ * Samples the accelerometer during capture for two metadata signals:
8
+ * - `device_positions`: `"epochMs,x,y,z"` samples throttled to ~15 Hz, capped at
9
+ * {@link MAX_DURATION_MS} to bound payload size.
10
+ * - `device_movement_detected`: the span (max − min) of movement magnitude
11
+ * (`|‖accel‖ − gravity|`, in g) across the session, or `null` when no samples ran.
12
+ *
13
+ * The `expo-sensors` subscription lives only between {@link start} and {@link stop}
14
+ * (tied to the capture screen lifecycle). When `expo-sensors` isn't installed the
15
+ * collector silently no-ops and the keys are omitted.
16
+ */
17
+ const SAMPLE_INTERVAL_MS = Math.floor(1000 / 15);
18
+ const MAX_DURATION_MS = 90 * 1000;
19
+ // expo-sensors reports acceleration in g; gravity is ~1 g (v11 parity value).
20
+ const GRAVITY = 0.981;
21
+
22
+ export class DeviceOrientationCollector {
23
+ private subscription: AccelerometerSubscription | null = null;
24
+ private positions: string[] = [];
25
+ private movements: number[] = [];
26
+ private startedAt = 0;
27
+ private lastSampleMs = 0;
28
+
29
+ /** Begins accelerometer sampling for a fresh capture session. No-op if running or unavailable. */
30
+ start(): void {
31
+ if (this.subscription) return;
32
+ const sensors = loadExpoSensors();
33
+ if (!sensors) return;
34
+ this.positions = [];
35
+ this.movements = [];
36
+ this.startedAt = Date.now();
37
+ this.lastSampleMs = 0;
38
+ sensors.Accelerometer.setUpdateInterval(SAMPLE_INTERVAL_MS);
39
+ this.subscription = sensors.Accelerometer.addListener((data) =>
40
+ this.onSample(data),
41
+ );
42
+ }
43
+
44
+ /** Stops sampling but preserves the collected data for the getters below. */
45
+ stop(): void {
46
+ this.subscription?.remove();
47
+ this.subscription = null;
48
+ }
49
+
50
+ private onSample(data: { x: number; y: number; z: number }): void {
51
+ const now = Date.now();
52
+ if (now - this.startedAt > MAX_DURATION_MS) {
53
+ this.stop();
54
+ return;
55
+ }
56
+ if (now - this.lastSampleMs < SAMPLE_INTERVAL_MS) return;
57
+ this.lastSampleMs = now;
58
+ this.positions.push(`${now},${data.x},${data.y},${data.z}`);
59
+ const magnitude = Math.sqrt(
60
+ data.x * data.x + data.y * data.y + data.z * data.z,
61
+ );
62
+ this.movements.push(Math.abs(magnitude - GRAVITY));
63
+ }
64
+
65
+ /** Collected `"epochMs,x,y,z"` samples (empty when no capture ran). */
66
+ get devicePositions(): readonly string[] {
67
+ return this.positions;
68
+ }
69
+
70
+ /** Span of movement magnitude across the session; `null` when no samples were collected. */
71
+ get deviceMovementDetected(): number | null {
72
+ if (this.movements.length === 0) return null;
73
+ return Math.max(...this.movements) - Math.min(...this.movements);
74
+ }
75
+ }
@@ -0,0 +1,46 @@
1
+ import { loadExpoLocation } from "./optional_native_modules";
2
+
3
+ /**
4
+ * Coarse last-known location, emitted as the `geolocation` metadata (JSON-object string).
5
+ *
6
+ * `accuracy` is `precise` (<20 m), `approximate` (<100 m), or `unknown`; `source` is `gps`.
7
+ */
8
+ export interface Geolocation {
9
+ readonly latitude: number;
10
+ readonly longitude: number;
11
+ readonly accuracy: string;
12
+ readonly source: string;
13
+ }
14
+
15
+ function classifyAccuracy(meters: number | null): string {
16
+ if (meters === null || meters <= 0) return "unknown";
17
+ if (meters < 20) return "precise";
18
+ if (meters < 100) return "approximate";
19
+ return "unknown";
20
+ }
21
+
22
+ /**
23
+ * Resolves the last-known location for the `geolocation` metadata — only when a location
24
+ * permission is **already** granted. The SDK never requests it (uses
25
+ * `getForegroundPermissionsAsync`, not `requestForegroundPermissionsAsync`), so this never
26
+ * prompts. Returns `null` when permission is absent, no cached fix exists, or `expo-location`
27
+ * isn't installed.
28
+ */
29
+ export async function resolveGeolocation(): Promise<Geolocation | null> {
30
+ const location = loadExpoLocation();
31
+ if (!location) return null;
32
+ try {
33
+ const permission = await location.getForegroundPermissionsAsync();
34
+ if (!permission.granted) return null;
35
+ const position = await location.getLastKnownPositionAsync();
36
+ if (!position) return null;
37
+ return {
38
+ latitude: position.coords.latitude,
39
+ longitude: position.coords.longitude,
40
+ accuracy: classifyAccuracy(position.coords.accuracy),
41
+ source: "gps",
42
+ };
43
+ } catch {
44
+ return null;
45
+ }
46
+ }