@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
@@ -69,7 +69,7 @@ const sharedTypography = {
69
69
  cardHeading: {
70
70
  fontFamily: dmSans("800"),
71
71
  fontSize: 20,
72
- lineHeight: 26,
72
+ lineHeight: 25.5,
73
73
  fontWeight: "800",
74
74
  letterSpacing: -0.425,
75
75
  },
@@ -130,17 +130,17 @@ export const defaultLightTheme = {
130
130
  accent: "#4D88FF",
131
131
  background: "#F9FAFB",
132
132
  cardBackground: "#FFFFFF",
133
- instructionCardBackground: "#F9F0E766",
133
+ instructionCardBackground: "#F9F0E7",
134
134
  titleText: "#21232C",
135
135
  cardText: "#5E646E",
136
136
  disabledBackground: "#E4E7EC",
137
137
  disabledForeground: "#98A2B3",
138
138
  stroke: "#EAECF0",
139
- warningFill: "#FEF3C7",
140
- warningIcon: "#FF5805",
141
- warningStroke: "#FFEDD5",
142
- successFill: "#DCFCE7",
143
- successIcon: "#2CC05C",
139
+ warningFill: "#EF43431A", // warning red @10%
140
+ warningIcon: "#EF4343",
141
+ warningStroke: "#EF43434D", // warning red @30%
142
+ successFill: "#00C8531A", // success green @10%
143
+ successIcon: "#00C853",
144
144
  captureOverlayBackground: "#FFFFFFE5",
145
145
  documentOverlayScrim: "#00000066", // black @40% — surround dim outside the frame
146
146
  captureOverlayStroke: "#151F72",
@@ -151,8 +151,9 @@ export const defaultLightTheme = {
151
151
  ovalActive: "#2CC05C",
152
152
  ovalWarning: "#EF4343",
153
153
  ovalDirectionalIndicator: "#EF4343",
154
- // Preview/accept/submitting tokens are theme-static (same in dark) so the
155
- // capture review surface reads identically across themes.
154
+ // Preview accept/reject tokens are theme-static (same in dark) so the
155
+ // review affordances read identically across themes; the page surface
156
+ // (`captureReviewBackground`) follows the active theme's background.
156
157
  previewAcceptBackground: "#04B04A1A", // 10% green
157
158
  previewAcceptIcon: "#12B76A",
158
159
  previewAcceptBorder: "#04B04A4D", // 30% green
@@ -163,7 +164,7 @@ export const defaultLightTheme = {
163
164
  submittingIndicator: "#2CC05C",
164
165
  cardShadow: "#0000001A", // black @10%
165
166
  backButtonBorder: "#FFFFFF1A", // white @10% rim on the dark fill
166
- smileIdYellow: "#F2BD51",
167
+ smileIdYellow: "#FDB515",
167
168
  offBlack: "#2D2B2A",
168
169
  offWhite: "#F9F0E7",
169
170
  },
@@ -187,11 +188,11 @@ export const defaultDarkTheme = {
187
188
  disabledForeground: "#667085",
188
189
  // 15% alpha — divider stroke on dark surfaces.
189
190
  stroke: "#EAECF026",
190
- warningFill: "#3B2F12",
191
- warningIcon: "#FF5805",
192
- warningStroke: "#5C3A1A",
193
- successFill: "#163B27",
194
- successIcon: "#2CC05C",
191
+ warningFill: "#EA2D2D",
192
+ warningIcon: "#FFFFFF",
193
+ warningStroke: "#9F0000",
194
+ successFill: "#00E676",
195
+ successIcon: "#FFFFFF",
195
196
  captureOverlayBackground: "#FFFFFFE5",
196
197
  documentOverlayScrim: "#00000066", // black @40% — surround dim outside the frame (identical in dark)
197
198
  captureOverlayStroke: "#4D88FF",
@@ -202,18 +203,19 @@ export const defaultDarkTheme = {
202
203
  ovalActive: "#2CC05C",
203
204
  ovalWarning: "#EF4343",
204
205
  ovalDirectionalIndicator: "#EF4343",
205
- // Theme-static (match light) — the capture review surface stays consistent.
206
+ // Accept/reject affordances are theme-static (match light); the page
207
+ // surface behind them follows the dark background so cards read on-theme.
206
208
  previewAcceptBackground: "#04B04A1A", // 10% green
207
209
  previewAcceptIcon: "#12B76A",
208
210
  previewAcceptBorder: "#04B04A4D", // 30% green
209
211
  previewRejectBackground: "#F8FAFC",
210
212
  previewRejectIcon: "#90A1B9",
211
213
  previewRejectBorder: "#E2E8F0",
212
- captureReviewBackground: "#F8FAFC",
214
+ captureReviewBackground: "#1A1C23",
213
215
  submittingIndicator: "#2CC05C",
214
216
  cardShadow: "#0000001A", // black @10%
215
217
  backButtonBorder: "#0000001A", // black @10% rim on the light fill
216
- smileIdYellow: "#F2BD51",
218
+ smileIdYellow: "#FDB515",
217
219
  offBlack: "#F9F0E7",
218
220
  offWhite: "#2D2B2A",
219
221
  },
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/presentation/theme/theme.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/presentation/theme/theme.ts"],"names":[],"mappings":"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"}
@@ -2,10 +2,10 @@ export interface ForceMaxBrightnessProps {
2
2
  /** Target brightness in the range 0.0–1.0. Defaults to 1.0 (max). */
3
3
  readonly brightness?: number;
4
4
  /**
5
- * When false the component is a no-op. Defaults to true. Selfie capture uses
6
- * the front camera with the screen as fill light, so callers enable it for
7
- * the selfie path only; document capture uses the rear camera, where screen
8
- * brightness does not help.
5
+ * When false the component is a no-op. Defaults to true. Every capture
6
+ * screen (selfie and document) mounts this enabled so the preview always
7
+ * runs at full brightness with the screen kept awake for the duration of
8
+ * the capture.
9
9
  */
10
10
  readonly enabled?: boolean;
11
11
  }
@@ -1,3 +1,4 @@
1
+ import { GlobalPrivacyControl } from "../../core/models/global_privacy_control";
1
2
  /**
2
3
  * Returns the device's resolved BCP-47 locale tag (e.g. `"en-US"`).
3
4
  *
@@ -16,10 +17,15 @@ export declare function getDeviceLocale(): string;
16
17
  */
17
18
  export declare function isDeviceLocaleInEU(locale?: string): boolean;
18
19
  /**
19
- * Returns the default consent checkbox state based on the device locale.
20
+ * Returns the default consent checkbox state for the partner-declared
21
+ * `GlobalPrivacyControl` posture.
20
22
  *
21
- * - EU locales: unticked (`false`) to comply with GDPR opt-in.
22
- * - Non-EU locales: ticked (`true`).
23
+ * - `GlobalPrivacyControl.OptOut` (default): ticked (`true`) universally —
24
+ * the opt-out layout is enforced for every session and the device region
25
+ * is never consulted.
26
+ * - `GlobalPrivacyControl.OptIn`: legacy regional mechanics — EU locales
27
+ * start unticked (`false`, explicit opt-in per GDPR), everywhere else
28
+ * starts ticked (`true`).
23
29
  */
24
- export declare function getDefaultConsentState(locale?: string): boolean;
30
+ export declare function getDefaultConsentState(globalPrivacyControl?: GlobalPrivacyControl, locale?: string): boolean;
25
31
  //# sourceMappingURL=locale_utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"locale_utils.d.ts","sourceRoot":"","sources":["../../../src/presentation/utils/locale_utils.ts"],"names":[],"mappings":"AA8BA;;;;;;;GAOG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAMxC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,GAAE,MAA0B,GACjC,OAAO,CAGT;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,GAAE,MAA0B,GACjC,OAAO,CAET"}
1
+ {"version":3,"file":"locale_utils.d.ts","sourceRoot":"","sources":["../../../src/presentation/utils/locale_utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AA+BhF;;;;;;;GAOG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAMxC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,GAAE,MAA0B,GACjC,OAAO,CAGT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,oBAAoB,GAAE,oBAAkD,EACxE,MAAM,GAAE,MAA0B,GACjC,OAAO,CAIT"}
@@ -1,3 +1,4 @@
1
+ import { GlobalPrivacyControl } from "../../core/models/global_privacy_control";
1
2
  const EU_COUNTRY_CODES = new Set([
2
3
  "AT",
3
4
  "BE",
@@ -55,12 +56,19 @@ export function isDeviceLocaleInEU(locale = getDeviceLocale()) {
55
56
  return country !== undefined && EU_COUNTRY_CODES.has(country);
56
57
  }
57
58
  /**
58
- * Returns the default consent checkbox state based on the device locale.
59
+ * Returns the default consent checkbox state for the partner-declared
60
+ * `GlobalPrivacyControl` posture.
59
61
  *
60
- * - EU locales: unticked (`false`) to comply with GDPR opt-in.
61
- * - Non-EU locales: ticked (`true`).
62
+ * - `GlobalPrivacyControl.OptOut` (default): ticked (`true`) universally —
63
+ * the opt-out layout is enforced for every session and the device region
64
+ * is never consulted.
65
+ * - `GlobalPrivacyControl.OptIn`: legacy regional mechanics — EU locales
66
+ * start unticked (`false`, explicit opt-in per GDPR), everywhere else
67
+ * starts ticked (`true`).
62
68
  */
63
- export function getDefaultConsentState(locale = getDeviceLocale()) {
64
- return !isDeviceLocaleInEU(locale);
69
+ export function getDefaultConsentState(globalPrivacyControl = GlobalPrivacyControl.OptOut, locale = getDeviceLocale()) {
70
+ return globalPrivacyControl === GlobalPrivacyControl.OptOut
71
+ ? true
72
+ : !isDeviceLocaleInEU(locale);
65
73
  }
66
74
  //# sourceMappingURL=locale_utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locale_utils.js","sourceRoot":"","sources":["../../../src/presentation/utils/locale_utils.ts"],"names":[],"mappings":"AAAA,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC;IACpD,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACL,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,eAAe,EAAE;IAElC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IACpD,OAAO,OAAO,KAAK,SAAS,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAAiB,eAAe,EAAE;IAElC,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"locale_utils.js","sourceRoot":"","sources":["../../../src/presentation/utils/locale_utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC;IACpD,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACL,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,eAAe,EAAE;IAElC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;IACpD,OAAO,OAAO,KAAK,SAAS,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CACpC,uBAA6C,oBAAoB,CAAC,MAAM,EACxE,SAAiB,eAAe,EAAE;IAElC,OAAO,oBAAoB,KAAK,oBAAoB,CAAC,MAAM;QACzD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;AAClC,CAAC"}
@@ -0,0 +1,43 @@
1
+ import type { FaceAnalyzer } from "@smileid/usesmileid_platform_interface";
2
+ import { AnalyzerFactoryKey } from "@smileid/usesmileid_bridge";
3
+ /**
4
+ * Deterministic fake face analyzer for scripted-scenario E2E runs. Exported
5
+ * only behind the `@smileid/usesmileid/testing` subpath so it cannot leak into
6
+ * partner production bundles.
7
+ *
8
+ * Per-frame detection runs in the provider's native frame-processor plugin
9
+ * (pixels never cross into JS), so `frameProcessorPluginName` points at a
10
+ * plugin that does not exist — the capture screen surfaces that as its
11
+ * camera-unavailable state. This fake covers the DSL registration seam and the
12
+ * capture-free flows; capture progression is driven via `onResult` instead.
13
+ */
14
+ export interface ScriptedScenarioStep {
15
+ readonly emit: string;
16
+ readonly holdFrames?: number;
17
+ }
18
+ export interface ScriptedScenario {
19
+ readonly name: string;
20
+ readonly captureType: string;
21
+ readonly steps: readonly ScriptedScenarioStep[];
22
+ }
23
+ export declare class FakeFaceAnalyzer implements FaceAnalyzer {
24
+ private readonly scenario;
25
+ readonly kind: "face";
26
+ readonly key: AnalyzerFactoryKey;
27
+ readonly frameProcessorPluginName = "e2e-fake-face";
28
+ configureCallCount: number;
29
+ resetCallCount: number;
30
+ flushCallCount: number;
31
+ closeCallCount: number;
32
+ private stepIndex;
33
+ private framesLeftInStep;
34
+ constructor(scenario: ScriptedScenario);
35
+ /** Frame-by-frame cursor; the final step repeats indefinitely. */
36
+ nextEmit(): string;
37
+ configure(): Promise<void>;
38
+ reset(): Promise<void>;
39
+ flush(): Promise<void>;
40
+ close(): Promise<void>;
41
+ }
42
+ export declare function makeFakeFaceAnalyzer(scenario: ScriptedScenario): FakeFaceAnalyzer;
43
+ //# sourceMappingURL=fake_face_analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake_face_analyzer.d.ts","sourceRoot":"","sources":["../../src/testing/fake_face_analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACjD;AAED,qBAAa,gBAAiB,YAAW,YAAY;IAavC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAZrC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,QAAQ,CAAC,GAAG,EAAE,kBAAkB,CAAgC;IAChE,QAAQ,CAAC,wBAAwB,mBAAmB;IAEpD,kBAAkB,SAAK;IACvB,cAAc,SAAK;IACnB,cAAc,SAAK;IACnB,cAAc,SAAK;IAEnB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,gBAAgB,CAAS;gBAEJ,QAAQ,EAAE,gBAAgB;IAIvD,kEAAkE;IAClE,QAAQ,IAAI,MAAM;IAalB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAK1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAIvB;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,gBAAgB,GACzB,gBAAgB,CAElB"}
@@ -0,0 +1,52 @@
1
+ import { AnalyzerFactoryKey } from "@smileid/usesmileid_bridge";
2
+ export class FakeFaceAnalyzer {
3
+ scenario;
4
+ kind = "face";
5
+ key = AnalyzerFactoryKey.MLKitFace;
6
+ frameProcessorPluginName = "e2e-fake-face";
7
+ configureCallCount = 0;
8
+ resetCallCount = 0;
9
+ flushCallCount = 0;
10
+ closeCallCount = 0;
11
+ stepIndex = 0;
12
+ framesLeftInStep;
13
+ constructor(scenario) {
14
+ this.scenario = scenario;
15
+ this.framesLeftInStep = scenario.steps[0]?.holdFrames ?? 1;
16
+ }
17
+ /** Frame-by-frame cursor; the final step repeats indefinitely. */
18
+ nextEmit() {
19
+ const steps = this.scenario.steps;
20
+ const step = steps[this.stepIndex];
21
+ if (step === undefined)
22
+ return "noFace";
23
+ if (this.stepIndex === steps.length - 1)
24
+ return step.emit;
25
+ this.framesLeftInStep -= 1;
26
+ if (this.framesLeftInStep <= 0) {
27
+ this.stepIndex += 1;
28
+ this.framesLeftInStep = steps[this.stepIndex]?.holdFrames ?? 1;
29
+ }
30
+ return step.emit;
31
+ }
32
+ configure() {
33
+ this.configureCallCount += 1;
34
+ return Promise.resolve();
35
+ }
36
+ reset() {
37
+ this.resetCallCount += 1;
38
+ return Promise.resolve();
39
+ }
40
+ flush() {
41
+ this.flushCallCount += 1;
42
+ return Promise.resolve();
43
+ }
44
+ close() {
45
+ this.closeCallCount += 1;
46
+ return Promise.resolve();
47
+ }
48
+ }
49
+ export function makeFakeFaceAnalyzer(scenario) {
50
+ return new FakeFaceAnalyzer(scenario);
51
+ }
52
+ //# sourceMappingURL=fake_face_analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake_face_analyzer.js","sourceRoot":"","sources":["../../src/testing/fake_face_analyzer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAwBhE,MAAM,OAAO,gBAAgB;IAaE;IAZpB,IAAI,GAAG,MAAe,CAAC;IACvB,GAAG,GAAuB,kBAAkB,CAAC,SAAS,CAAC;IACvD,wBAAwB,GAAG,eAAe,CAAC;IAEpD,kBAAkB,GAAG,CAAC,CAAC;IACvB,cAAc,GAAG,CAAC,CAAC;IACnB,cAAc,GAAG,CAAC,CAAC;IACnB,cAAc,GAAG,CAAC,CAAC;IAEX,SAAS,GAAG,CAAC,CAAC;IACd,gBAAgB,CAAS;IAEjC,YAA6B,QAA0B;QAA1B,aAAQ,GAAR,QAAQ,CAAkB;QACrD,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC;IAC7D,CAAC;IAED,kEAAkE;IAClE,QAAQ;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAClC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QACxC,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAC1D,IAAI,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC3B,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;YACpB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,SAAS;QACP,IAAI,CAAC,kBAAkB,IAAI,CAAC,CAAC;QAC7B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QACzB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QACzB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;QACzB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,UAAU,oBAAoB,CAClC,QAA0B;IAE1B,OAAO,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { FakeFaceAnalyzer, makeFakeFaceAnalyzer, type ScriptedScenario, type ScriptedScenarioStep, } from "./fake_face_analyzer";
2
+ export { scriptedFaceScanResults } from "./scripted_scan_results";
3
+ export { parseScriptedScenario } from "./scenario_loader";
4
+ export { type ScenarioExpectations, parseScenarioExpectations, expectSubsetInOrder, } from "./scenario_expectations";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EACL,KAAK,oBAAoB,EACzB,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // Test-support entry — exported behind the `@smileid/usesmileid/testing`
2
+ // subpath only. Nothing here may be re-exported from the main index.
3
+ export { FakeFaceAnalyzer, makeFakeFaceAnalyzer, } from "./fake_face_analyzer";
4
+ export { scriptedFaceScanResults } from "./scripted_scan_results";
5
+ export { parseScriptedScenario } from "./scenario_loader";
6
+ export { parseScenarioExpectations, expectSubsetInOrder, } from "./scenario_expectations";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,qEAAqE;AACrE,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GAGrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAEL,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Capture-scoped expectations from the shared `e2e-scenarios` schema's `expected`
3
+ * block (screen + analytics-event names, terminal state). Framework-agnostic (no
4
+ * vitest/jest import) so a partner app's own e2e runner can reuse it.
5
+ */
6
+ export interface ScenarioExpectations {
7
+ /** Ordered `screen_viewed` sequence for the canonical consent-first flow. */
8
+ readonly screens: readonly string[];
9
+ /** Ordered analytics event types that must fire (subset-in-order). */
10
+ readonly events: readonly string[];
11
+ /** How the capture session ends. */
12
+ readonly terminal?: "submitted" | "timeout" | "unsatisfied";
13
+ }
14
+ /**
15
+ * Extracts and validates the `expected` block from an already-parsed shared
16
+ * scenario JSON object. Returns empty screen/event arrays when the block is
17
+ * absent (older scenarios), and throws on a malformed block so drift fails
18
+ * loudly rather than silently weakening the contract.
19
+ */
20
+ export declare function parseScenarioExpectations(raw: unknown): ScenarioExpectations;
21
+ /**
22
+ * Asserts that every element of [expected] appears in [recorded] in the same
23
+ * relative order (a minimal ordered-subset match — unlisted items may
24
+ * interleave, exact-match is deliberately NOT required). Throws a descriptive
25
+ * Error on failure so it works under any test runner.
26
+ */
27
+ export declare function expectSubsetInOrder(recorded: readonly string[], expected: readonly string[], label?: string): void;
28
+ //# sourceMappingURL=scenario_expectations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario_expectations.d.ts","sourceRoot":"","sources":["../../src/testing/scenario_expectations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,oCAAoC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,CAAC;CAC7D;AAQD;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,oBAAoB,CA4B5E;AAUD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,QAAQ,EAAE,SAAS,MAAM,EAAE,EAC3B,KAAK,SAAa,GACjB,IAAI,CAYN"}
@@ -0,0 +1,65 @@
1
+ const TERMINALS = new Set([
2
+ "submitted",
3
+ "timeout",
4
+ "unsatisfied",
5
+ ]);
6
+ /**
7
+ * Extracts and validates the `expected` block from an already-parsed shared
8
+ * scenario JSON object. Returns empty screen/event arrays when the block is
9
+ * absent (older scenarios), and throws on a malformed block so drift fails
10
+ * loudly rather than silently weakening the contract.
11
+ */
12
+ export function parseScenarioExpectations(raw) {
13
+ if (typeof raw !== "object" || raw === null) {
14
+ throw new Error("scenario must be a JSON object");
15
+ }
16
+ const expected = raw.expected;
17
+ if (expected === undefined) {
18
+ return { screens: [], events: [] };
19
+ }
20
+ if (typeof expected !== "object" || expected === null) {
21
+ throw new Error("scenario.expected must be an object when present");
22
+ }
23
+ const record = expected;
24
+ const screens = readStringArray(record.screens, "scenario.expected.screens");
25
+ const events = readStringArray(record.events, "scenario.expected.events");
26
+ const terminal = record.terminal;
27
+ if (terminal === undefined) {
28
+ return { screens, events };
29
+ }
30
+ if (typeof terminal !== "string" || !TERMINALS.has(terminal)) {
31
+ throw new Error(`scenario.expected.terminal must be one of ${[...TERMINALS].join(", ")}, got ${String(terminal)}`);
32
+ }
33
+ return {
34
+ screens,
35
+ events,
36
+ terminal: terminal,
37
+ };
38
+ }
39
+ function readStringArray(value, label) {
40
+ if (value === undefined)
41
+ return [];
42
+ if (!Array.isArray(value) || value.some((item) => typeof item !== "string")) {
43
+ throw new Error(`${label} must be an array of strings`);
44
+ }
45
+ return value;
46
+ }
47
+ /**
48
+ * Asserts that every element of [expected] appears in [recorded] in the same
49
+ * relative order (a minimal ordered-subset match — unlisted items may
50
+ * interleave, exact-match is deliberately NOT required). Throws a descriptive
51
+ * Error on failure so it works under any test runner.
52
+ */
53
+ export function expectSubsetInOrder(recorded, expected, label = "sequence") {
54
+ let cursor = 0;
55
+ for (const item of recorded) {
56
+ if (cursor < expected.length && item === expected[cursor])
57
+ cursor += 1;
58
+ }
59
+ if (cursor !== expected.length) {
60
+ throw new Error(`${label}: expected [${expected
61
+ .slice(cursor)
62
+ .join(", ")}] to appear in order within [${recorded.join(", ")}]`);
63
+ }
64
+ }
65
+ //# sourceMappingURL=scenario_expectations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario_expectations.js","sourceRoot":"","sources":["../../src/testing/scenario_expectations.ts"],"names":[],"mappings":"AAcA,MAAM,SAAS,GAAwB,IAAI,GAAG,CAAC;IAC7C,WAAW;IACX,SAAS;IACT,aAAa;CACd,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAAY;IACpD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,QAAQ,GAAI,GAA+B,CAAC,QAAQ,CAAC;IAC3D,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,MAAM,GAAG,QAAmC,CAAC;IACnD,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IAC1E,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;IACjC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CACb,6CAA6C,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,QAAQ,CAAC,EAAE,CAClG,CAAC;IACJ,CAAC;IACD,OAAO;QACL,OAAO;QACP,MAAM;QACN,QAAQ,EAAE,QAAmD;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAc,EAAE,KAAa;IACpD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,8BAA8B,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,KAAiB,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAA2B,EAC3B,QAA2B,EAC3B,KAAK,GAAG,UAAU;IAElB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,GAAG,KAAK,eAAe,QAAQ;aAC5B,KAAK,CAAC,MAAM,CAAC;aACb,IAAI,CAAC,IAAI,CAAC,gCAAgC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACpE,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ScriptedScenario } from "./fake_face_analyzer";
2
+ /**
3
+ * Validates a parsed shared-scenario JSON object and returns the typed
4
+ * [ScriptedScenario]. Kept I/O-free (takes an already-parsed object) so the
5
+ * `@smileid/usesmileid/testing` subpath stays environment-agnostic — the caller
6
+ * owns how the JSON is read. Throws with a specific message on any shape drift
7
+ * so a malformed or vocabulary-drifted script fails loudly at load time instead
8
+ * of producing a misleading capture sequence.
9
+ */
10
+ export declare function parseScriptedScenario(raw: unknown): ScriptedScenario;
11
+ //# sourceMappingURL=scenario_loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario_loader.d.ts","sourceRoot":"","sources":["../../src/testing/scenario_loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAEjB,MAAM,sBAAsB,CAAC;AAuB9B;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CAgDpE"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Emission vocabulary of the shared `e2e-scenarios` schema (`schema.json` in
3
+ * every repo's scenario folder). A step whose `emit` is outside this set is a
4
+ * drift bug — the loader rejects it rather than letting the fake silently treat
5
+ * it as "no detection".
6
+ */
7
+ const KNOWN_EMITS = new Set([
8
+ "noFace",
9
+ "faceTooFar",
10
+ "faceCentered",
11
+ "headTurnLeft",
12
+ "headTurnRight",
13
+ "headTurnUp",
14
+ "satisfied",
15
+ "noDocument",
16
+ "documentFound",
17
+ "documentUnstable",
18
+ ]);
19
+ const CAPTURE_TYPES = new Set(["selfie", "document"]);
20
+ /**
21
+ * Validates a parsed shared-scenario JSON object and returns the typed
22
+ * [ScriptedScenario]. Kept I/O-free (takes an already-parsed object) so the
23
+ * `@smileid/usesmileid/testing` subpath stays environment-agnostic — the caller
24
+ * owns how the JSON is read. Throws with a specific message on any shape drift
25
+ * so a malformed or vocabulary-drifted script fails loudly at load time instead
26
+ * of producing a misleading capture sequence.
27
+ */
28
+ export function parseScriptedScenario(raw) {
29
+ if (typeof raw !== "object" || raw === null) {
30
+ throw new Error("scenario must be a JSON object");
31
+ }
32
+ const record = raw;
33
+ const name = record.name;
34
+ if (typeof name !== "string" || name.length === 0) {
35
+ throw new Error("scenario.name must be a non-empty string");
36
+ }
37
+ const captureType = record.captureType;
38
+ if (typeof captureType !== "string" || !CAPTURE_TYPES.has(captureType)) {
39
+ throw new Error(`scenario.captureType must be one of ${[...CAPTURE_TYPES].join(", ")}, got ${String(captureType)}`);
40
+ }
41
+ if (!Array.isArray(record.steps) || record.steps.length === 0) {
42
+ throw new Error(`scenario.steps must be a non-empty array in ${name}`);
43
+ }
44
+ const steps = record.steps.map((step, index) => {
45
+ if (typeof step !== "object" || step === null) {
46
+ throw new Error(`scenario.steps[${index}] must be an object in ${name}`);
47
+ }
48
+ const stepRecord = step;
49
+ const emit = stepRecord.emit;
50
+ if (typeof emit !== "string" || !KNOWN_EMITS.has(emit)) {
51
+ throw new Error(`scenario.steps[${index}].emit "${String(emit)}" is not a known emission in ${name}`);
52
+ }
53
+ const holdFrames = stepRecord.holdFrames;
54
+ if (holdFrames !== undefined &&
55
+ (typeof holdFrames !== "number" ||
56
+ !Number.isInteger(holdFrames) ||
57
+ holdFrames < 1)) {
58
+ throw new Error(`scenario.steps[${index}].holdFrames must be a positive integer in ${name}`);
59
+ }
60
+ return holdFrames === undefined ? { emit } : { emit, holdFrames };
61
+ });
62
+ return { name, captureType, steps };
63
+ }
64
+ //# sourceMappingURL=scenario_loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scenario_loader.js","sourceRoot":"","sources":["../../src/testing/scenario_loader.ts"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,MAAM,WAAW,GAAwB,IAAI,GAAG,CAAC;IAC/C,QAAQ;IACR,YAAY;IACZ,cAAc;IACd,cAAc;IACd,eAAe;IACf,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,eAAe;IACf,kBAAkB;CACnB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;AAE3E;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,MAAM,GAAG,GAA8B,CAAC;IAE9C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACvC,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CACb,uCAAuC,CAAC,GAAG,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,WAAW,CAAC,EAAE,CACnG,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9D,MAAM,IAAI,KAAK,CAAC,+CAA+C,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,KAAK,GAA2B,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACrE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,kBAAkB,KAAK,0BAA0B,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,UAAU,GAAG,IAA+B,CAAC;QACnD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC7B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,WAAW,MAAM,CAAC,IAAI,CAAC,gCAAgC,IAAI,EAAE,CACrF,CAAC;QACJ,CAAC;QACD,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;QACzC,IACE,UAAU,KAAK,SAAS;YACxB,CAAC,OAAO,UAAU,KAAK,QAAQ;gBAC7B,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC;gBAC7B,UAAU,GAAG,CAAC,CAAC,EACjB,CAAC;YACD,MAAM,IAAI,KAAK,CACb,kBAAkB,KAAK,8CAA8C,IAAI,EAAE,CAC5E,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { FaceScanResult } from "@smileid/usesmileid_bridge";
2
+ import type { ScriptedScenario } from "./fake_face_analyzer";
3
+ /**
4
+ * Turns a shared E2E scenario into the `FaceScanResult` sequence a capture
5
+ * screen receives frame-by-frame, so a headless test can replay the shared
6
+ * script through the frame stream's `onResult` seam (per-frame detection is a
7
+ * native frame-processor concern; pixels never reach JS).
8
+ *
9
+ * `noFace` → `initial`; `faceTooFar` / `faceCentered` → `found`; the terminal
10
+ * `satisfied` → one `finished` result carrying a `selfie` event plus
11
+ * [livenessCount] `liveness` events at opaque `file://` URLs the screen never
12
+ * reads. Exported only behind the `@smileid/usesmileid/testing` subpath.
13
+ */
14
+ export declare function scriptedFaceScanResults(scenario: ScriptedScenario, options?: {
15
+ readonly livenessCount?: number;
16
+ }): FaceScanResult[];
17
+ //# sourceMappingURL=scripted_scan_results.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripted_scan_results.d.ts","sourceRoot":"","sources":["../../src/testing/scripted_scan_results.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,cAAc,EACf,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,gBAAgB,EAC1B,OAAO,GAAE;IAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,cAAc,EAAE,CAuBlB"}
@@ -0,0 +1,52 @@
1
+ import { CaptureReadyEventKind, UseSmileIDScanStateType, } from "@smileid/usesmileid_bridge";
2
+ /**
3
+ * Turns a shared E2E scenario into the `FaceScanResult` sequence a capture
4
+ * screen receives frame-by-frame, so a headless test can replay the shared
5
+ * script through the frame stream's `onResult` seam (per-frame detection is a
6
+ * native frame-processor concern; pixels never reach JS).
7
+ *
8
+ * `noFace` → `initial`; `faceTooFar` / `faceCentered` → `found`; the terminal
9
+ * `satisfied` → one `finished` result carrying a `selfie` event plus
10
+ * [livenessCount] `liveness` events at opaque `file://` URLs the screen never
11
+ * reads. Exported only behind the `@smileid/usesmileid/testing` subpath.
12
+ */
13
+ export function scriptedFaceScanResults(scenario, options = {}) {
14
+ const livenessCount = options.livenessCount ?? 2;
15
+ const output = { faces: [], brightness: 128 };
16
+ const results = [];
17
+ for (const step of scenario.steps) {
18
+ if (step.emit === "satisfied") {
19
+ results.push({
20
+ output,
21
+ state: { type: UseSmileIDScanStateType.Finished },
22
+ capturedEvents: captureEvents(livenessCount),
23
+ });
24
+ return results;
25
+ }
26
+ const type = step.emit === "noFace"
27
+ ? UseSmileIDScanStateType.Initial
28
+ : UseSmileIDScanStateType.Found;
29
+ for (let frame = 0; frame < (step.holdFrames ?? 1); frame++) {
30
+ results.push({ output, state: { type }, capturedEvents: [] });
31
+ }
32
+ }
33
+ return results;
34
+ }
35
+ function captureEvents(livenessCount) {
36
+ const events = [
37
+ {
38
+ kind: CaptureReadyEventKind.Selfie,
39
+ captureIndex: 0,
40
+ url: "file://selfie-0.jpg",
41
+ },
42
+ ];
43
+ for (let index = 1; index <= livenessCount; index++) {
44
+ events.push({
45
+ kind: CaptureReadyEventKind.Liveness,
46
+ captureIndex: index,
47
+ url: `file://liveness-${index}.jpg`,
48
+ });
49
+ }
50
+ return events;
51
+ }
52
+ //# sourceMappingURL=scripted_scan_results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripted_scan_results.js","sourceRoot":"","sources":["../../src/testing/scripted_scan_results.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,4BAA4B,CAAC;AAOpC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAA0B,EAC1B,UAA+C,EAAE;IAEjD,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC;IACjD,MAAM,MAAM,GAA6B,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IACxE,MAAM,OAAO,GAAqB,EAAE,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM;gBACN,KAAK,EAAE,EAAE,IAAI,EAAE,uBAAuB,CAAC,QAAQ,EAAE;gBACjD,cAAc,EAAE,aAAa,CAAC,aAAa,CAAC;aAC7C,CAAC,CAAC;YACH,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,GACR,IAAI,CAAC,IAAI,KAAK,QAAQ;YACpB,CAAC,CAAC,uBAAuB,CAAC,OAAO;YACjC,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC;QACpC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,aAAa,CAAC,aAAqB;IAC1C,MAAM,MAAM,GAAwB;QAClC;YACE,IAAI,EAAE,qBAAqB,CAAC,MAAM;YAClC,YAAY,EAAE,CAAC;YACf,GAAG,EAAE,qBAAqB;SAC3B;KACF,CAAC;IACF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,aAAa,EAAE,KAAK,EAAE,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,qBAAqB,CAAC,QAAQ;YACpC,YAAY,EAAE,KAAK;YACnB,GAAG,EAAE,mBAAmB,KAAK,MAAM;SACpC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}