datakeen-session-react 1.1.195-dev.8 → 1.1.195-rc.0

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 (880) hide show
  1. package/README.md +12 -17
  2. package/dist/cjs/_virtual/_commonjsHelpers.js +0 -1
  3. package/dist/cjs/_virtual/heic2any.js +0 -1
  4. package/dist/cjs/_virtual/heic2any2.js +0 -1
  5. package/dist/cjs/assets/Face Scan Square.svg.js +0 -1
  6. package/dist/cjs/assets/Lightbulb.svg.js +0 -1
  7. package/dist/cjs/assets/Monitor Camera.svg.js +0 -1
  8. package/dist/cjs/assets/User Hands.svg.js +0 -1
  9. package/dist/cjs/assets/before-document.png.js +0 -1
  10. package/dist/cjs/assets/before-passport.png.js +0 -1
  11. package/dist/cjs/assets/before-photo.png.js +0 -1
  12. package/dist/cjs/assets/before-verso.png.js +0 -1
  13. package/dist/cjs/assets/check.svg.js +0 -1
  14. package/dist/cjs/assets/icons/shield_magic_link.svg.js +0 -1
  15. package/dist/cjs/assets/selfietake.svg.js +0 -1
  16. package/dist/cjs/components/DatakeenSession.js +0 -1
  17. package/dist/cjs/components/document-collection/DocumentCollection.js +0 -1
  18. package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js +0 -1
  19. package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js +0 -1
  20. package/dist/cjs/components/document-collection/DocumentCollectionSelection.js +0 -1
  21. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js +0 -1
  22. package/dist/cjs/components/document-collection/DocumentError.js +4 -2
  23. package/dist/cjs/components/document-collection/DocumentProcessing.js +0 -1
  24. package/dist/cjs/components/document-collection/DocumentSuccess.js +0 -1
  25. package/dist/cjs/components/document-video/DocumentVideoCapture.js +0 -1
  26. package/dist/cjs/components/document-video/DocumentVideoConfirmation.js +0 -1
  27. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoFlow.js +0 -1
  28. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoInstructions.js +0 -1
  29. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js +0 -1
  30. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoRecorder.js +0 -1
  31. package/dist/cjs/components/icons/ElectronicIcon.js +0 -1
  32. package/dist/cjs/components/icons/PoweredByIcon.js +0 -1
  33. package/dist/cjs/components/icons/PreIntroIcon.js +0 -1
  34. package/dist/cjs/components/icons/StartIcon.js +0 -1
  35. package/dist/cjs/components/id-check/BeforePhoto.js +0 -1
  36. package/dist/cjs/components/id-check/BeforeVersoPhoto.js +0 -1
  37. package/dist/cjs/components/id-check/CameraError.js +0 -1
  38. package/dist/cjs/components/id-check/CameraMask.js +0 -1
  39. package/dist/cjs/components/id-check/OrientationToggle.js +0 -1
  40. package/dist/cjs/components/id-check/Photo.js +0 -1
  41. package/dist/cjs/components/id-check/PhotoConfirmation.js +0 -1
  42. package/dist/cjs/components/id-check/PhotoPreview.js +0 -1
  43. package/dist/cjs/components/jdi/JDDWorkInProgress.js +0 -1
  44. package/dist/cjs/components/jdi/JDICountrySelection.js +0 -1
  45. package/dist/cjs/components/jdi/JDIDocumentSelection.js +0 -1
  46. package/dist/cjs/components/jdi/JDIDocumentUpload.js +0 -1
  47. package/dist/cjs/components/jdi/JDIError.js +4 -2
  48. package/dist/cjs/components/jdi/JDIPreIntroduction.js +0 -1
  49. package/dist/cjs/components/jdi/JDIProcessing.js +0 -1
  50. package/dist/cjs/components/jdi/JDISuccess.js +0 -1
  51. package/dist/cjs/components/legal-consent/LegalConsentNode.js +0 -1
  52. package/dist/cjs/components/nfc-scan/BiometricSymbol.js +0 -1
  53. package/dist/cjs/components/nfc-scan/NfcChipGate.js +0 -1
  54. package/dist/cjs/components/nfc-scan/NfcFallbackSurvey.js +0 -1
  55. package/dist/cjs/components/nfc-scan/NfcOnboardingNotice.js +0 -1
  56. package/dist/cjs/components/nfc-scan/NfcScanNode.js +0 -1
  57. package/dist/cjs/components/nfc-scan/NfcSuccessAnimation.js +0 -1
  58. package/dist/cjs/components/nfc-scan/PuceCniSymbol.js +0 -1
  59. package/dist/cjs/components/selfie/SelfieConfirmation.js +0 -1
  60. package/dist/cjs/components/selfie/Video.css.js +0 -1
  61. package/dist/cjs/components/selfie/Video.js +0 -1
  62. package/dist/cjs/components/selfie/VideoFixes.css.js +0 -1
  63. package/dist/cjs/components/selfie/VideoResetStyles.js +0 -1
  64. package/dist/cjs/components/selfie/hooks/useLiveFrameCapture.js +0 -1
  65. package/dist/cjs/components/selfie/hooks/useVideoRecorderStyles.js +0 -1
  66. package/dist/cjs/components/selfie/selfie-flow/InstructionsSelfie.js +0 -1
  67. package/dist/cjs/components/selfie/selfie-flow/SelfieFlow.js +0 -1
  68. package/dist/cjs/components/selfie/selfie-flow/SelfiePreIntroduction.js +0 -1
  69. package/dist/cjs/components/selfie/selfie-flow/SelfieProcessing.js +0 -1
  70. package/dist/cjs/components/selfie/selfie-flow/SelfieRecorder.js +0 -1
  71. package/dist/cjs/components/selfie/utils/selfieCaptureUtils.js +0 -1
  72. package/dist/cjs/components/selfie/utils/unisseyStrings.js +0 -1
  73. package/dist/cjs/components/selfie/utils/videoElementStyles.js +0 -1
  74. package/dist/cjs/components/session/DocumentCheck.js +0 -1
  75. package/dist/cjs/components/session/EndFlow.js +0 -1
  76. package/dist/cjs/components/session/MobileRedirect.js +0 -1
  77. package/dist/cjs/components/session/PdfGeneration.js +0 -1
  78. package/dist/cjs/components/session/Selfie.js +0 -1
  79. package/dist/cjs/components/session/SessionContent.js +0 -1
  80. package/dist/cjs/components/session/SessionExpired.js +0 -1
  81. package/dist/cjs/components/session/StartSession.js +0 -1
  82. package/dist/cjs/components/session/UserInputForm/AddressFields.js +0 -1
  83. package/dist/cjs/components/session/UserInputForm/ContactFields.js +0 -1
  84. package/dist/cjs/components/session/UserInputForm/CustomFormFields.js +2 -11
  85. package/dist/cjs/components/session/UserInputForm/DatePickerField.js +0 -1
  86. package/dist/cjs/components/session/UserInputForm/IdentityFields.js +0 -1
  87. package/dist/cjs/components/session/UserInputForm/LegalEntityFields.js +0 -1
  88. package/dist/cjs/components/session/UserInputForm/LegalRepFields.js +0 -1
  89. package/dist/cjs/components/session/UserInputForm/NationalityField.js +0 -1
  90. package/dist/cjs/components/session/UserInputForm.js +4 -2
  91. package/dist/cjs/components/session/VideoWorkInProgress.js +0 -1
  92. package/dist/cjs/components/session/controleJdiPolicy.js +0 -1
  93. package/dist/cjs/components/session/endScreenIcons.js +0 -1
  94. package/dist/cjs/components/signature-electronic/DocusealSignature.js +0 -1
  95. package/dist/cjs/components/signature-electronic/SignatureElectronic.js +0 -1
  96. package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js +0 -1
  97. package/dist/cjs/components/signature-electronic/SignedDocumentPreview.js +0 -1
  98. package/dist/cjs/components/start-flow/Start.js +0 -1
  99. package/dist/cjs/components/states/ErrorState.js +0 -1
  100. package/dist/cjs/components/states/LoadingState.js +0 -1
  101. package/dist/cjs/components/states/NoSessionIdState.js +0 -1
  102. package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js +0 -1
  103. package/dist/cjs/components/template/ConditionNodeHandler.js +0 -1
  104. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js +0 -1
  105. package/dist/cjs/components/template/TemplateNodeRenderer.js +0 -1
  106. package/dist/cjs/components/template/conditionNodePolicy.js +0 -1
  107. package/dist/cjs/components/ui/Body.js +0 -1
  108. package/dist/cjs/components/ui/Button.js +0 -1
  109. package/dist/cjs/components/ui/ButtonDesktop.js +0 -1
  110. package/dist/cjs/components/ui/Card.js +0 -1
  111. package/dist/cjs/components/ui/MobilePageLayout.js +0 -1
  112. package/dist/cjs/components/ui/PDFPreview.js +0 -1
  113. package/dist/cjs/components/ui/PageActions.js +0 -1
  114. package/dist/cjs/components/ui/Paper.js +0 -1
  115. package/dist/cjs/components/ui/PoweredBy.js +0 -1
  116. package/dist/cjs/components/ui/QRCodeDisplay.js +0 -1
  117. package/dist/cjs/components/ui/SelectComponent.js +0 -1
  118. package/dist/cjs/components/ui/Subtitle.js +0 -1
  119. package/dist/cjs/components/ui/Title.js +0 -1
  120. package/dist/cjs/config/env.js +0 -1
  121. package/dist/cjs/constants/userInputForm.js +0 -1
  122. package/dist/cjs/context/ConfigContext.js +0 -1
  123. package/dist/cjs/context/DocumentContext.js +0 -1
  124. package/dist/cjs/context/SessionContext.js +0 -1
  125. package/dist/cjs/hooks/useClientInfo.js +0 -1
  126. package/dist/cjs/hooks/useCountryOptions.js +0 -1
  127. package/dist/cjs/hooks/useI18n.js +0 -1
  128. package/dist/cjs/hooks/useIsMobile.js +0 -1
  129. package/dist/cjs/hooks/useNfcSseStatus.js +0 -1
  130. package/dist/cjs/hooks/useRouteCSS.js +0 -1
  131. package/dist/cjs/hooks/useSession.js +0 -1
  132. package/dist/cjs/hooks/useSessionData.js +0 -1
  133. package/dist/cjs/hooks/useStepCSS.js +0 -1
  134. package/dist/cjs/hooks/useStepNavigation.js +18 -1
  135. package/dist/cjs/hooks/useTemplateLoader.js +0 -1
  136. package/dist/cjs/hooks/useUserInputForm.js +38 -1
  137. package/dist/cjs/i18n/country/country.en.json.js +0 -1
  138. package/dist/cjs/i18n/country/country.fr.json.js +0 -1
  139. package/dist/cjs/i18n/country/country.iso2.en.json.js +0 -1
  140. package/dist/cjs/i18n/country/country.iso2.fr.json.js +0 -1
  141. package/dist/cjs/i18n/documents/documents.en.json.js +0 -1
  142. package/dist/cjs/i18n/documents/documents.fr.json.js +0 -1
  143. package/dist/cjs/i18n/en.json.js +0 -1
  144. package/dist/cjs/i18n/es.json.js +0 -1
  145. package/dist/cjs/i18n/fr.json.js +0 -1
  146. package/dist/cjs/i18n/index.js +0 -1
  147. package/dist/cjs/index.css.js +0 -1
  148. package/dist/cjs/index.js +0 -1
  149. package/dist/cjs/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +0 -1
  150. package/dist/cjs/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +0 -1
  151. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchFn.js +0 -1
  152. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +0 -1
  153. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +0 -1
  154. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatLong.js +0 -1
  155. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +0 -1
  156. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/localize.js +0 -1
  157. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/match.js +0 -1
  158. package/dist/cjs/node_modules/date-fns/locale/en-US.js +0 -1
  159. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatDistance.js +0 -1
  160. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatLong.js +0 -1
  161. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatRelative.js +0 -1
  162. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/localize.js +0 -1
  163. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/match.js +0 -1
  164. package/dist/cjs/node_modules/date-fns/locale/fr.js +0 -1
  165. package/dist/cjs/node_modules/heic2any/dist/heic2any.js +0 -1
  166. package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.js +0 -1
  167. package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.worker.js +0 -1
  168. package/dist/cjs/node_modules/style-inject/dist/style-inject.es.js +0 -1
  169. package/dist/cjs/node_modules/tslib/tslib.es6.js +0 -1
  170. package/dist/cjs/providers/I18nProvider.js +0 -1
  171. package/dist/cjs/services/analysis.js +0 -1
  172. package/dist/cjs/services/api.js +0 -1
  173. package/dist/cjs/services/auditTrailService.js +0 -1
  174. package/dist/cjs/services/cameraService.js +0 -1
  175. package/dist/cjs/services/documentEdgeDetectionService.js +0 -1
  176. package/dist/cjs/services/documentTemplate.js +0 -1
  177. package/dist/cjs/services/iadService.js +0 -1
  178. package/dist/cjs/services/integrationService.js +0 -1
  179. package/dist/cjs/services/pollingService.js +0 -1
  180. package/dist/cjs/services/professionalImageQuality.js +0 -1
  181. package/dist/cjs/services/retryService.js +0 -1
  182. package/dist/cjs/services/sessionCredentials.js +2 -2
  183. package/dist/cjs/services/sessionMemoryStore.js +0 -1
  184. package/dist/cjs/services/sessionService.js +0 -1
  185. package/dist/cjs/services/utils.js +0 -1
  186. package/dist/cjs/types/session.js +0 -1
  187. package/dist/cjs/utils/analysisErrors.js +0 -1
  188. package/dist/cjs/utils/apiAnalysis.js +0 -1
  189. package/dist/cjs/utils/conditionEvaluator.js +0 -1
  190. package/dist/cjs/utils/countryFlags.js +0 -1
  191. package/dist/cjs/utils/cssLoader.js +0 -1
  192. package/dist/cjs/utils/customFieldIds.js +0 -1
  193. package/dist/cjs/utils/customFieldLocks.js +27 -0
  194. package/dist/cjs/utils/customFieldValidation.js +0 -1
  195. package/dist/cjs/utils/documentLabels.js +0 -1
  196. package/dist/cjs/utils/europeanCountries.js +0 -1
  197. package/dist/cjs/utils/fileConverter.js +0 -1
  198. package/dist/cjs/utils/imageConverter.js +0 -1
  199. package/dist/cjs/utils/imageProcessing.js +0 -1
  200. package/dist/cjs/utils/isMobileDevice.js +0 -1
  201. package/dist/cjs/utils/isoCountryCodes.js +0 -1
  202. package/dist/cjs/utils/jdiCodes.js +0 -1
  203. package/dist/cjs/utils/labelToKey.js +0 -1
  204. package/dist/cjs/utils/listFieldUtils.js +0 -1
  205. package/dist/cjs/utils/mimeTypes.js +0 -1
  206. package/dist/cjs/utils/navigation.js +0 -1
  207. package/dist/cjs/utils/renderInlineMarkdown.js +0 -1
  208. package/dist/cjs/utils/sessionStatus.js +0 -1
  209. package/dist/cjs/utils/userInputForm.js +0 -1
  210. package/dist/cjs/utils/utils.js +0 -1
  211. package/dist/cjs/utils/validationUtils.js +0 -1
  212. package/dist/esm/_virtual/_commonjsHelpers.js +0 -1
  213. package/dist/esm/_virtual/heic2any.js +0 -1
  214. package/dist/esm/_virtual/heic2any2.js +0 -1
  215. package/dist/esm/assets/Face Scan Square.svg.js +0 -1
  216. package/dist/esm/assets/Lightbulb.svg.js +0 -1
  217. package/dist/esm/assets/Monitor Camera.svg.js +0 -1
  218. package/dist/esm/assets/User Hands.svg.js +0 -1
  219. package/dist/esm/assets/before-document.png.js +0 -1
  220. package/dist/esm/assets/before-passport.png.js +0 -1
  221. package/dist/esm/assets/before-photo.png.js +0 -1
  222. package/dist/esm/assets/before-verso.png.js +0 -1
  223. package/dist/esm/assets/check.svg.js +0 -1
  224. package/dist/esm/assets/icons/shield_magic_link.svg.js +0 -1
  225. package/dist/esm/assets/selfietake.svg.js +0 -1
  226. package/dist/esm/components/DatakeenSession.js +0 -1
  227. package/dist/esm/components/document-collection/DocumentCollection.js +0 -1
  228. package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js +0 -1
  229. package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js +0 -1
  230. package/dist/esm/components/document-collection/DocumentCollectionSelection.js +0 -1
  231. package/dist/esm/components/document-collection/DocumentCollectionUpload.js +0 -1
  232. package/dist/esm/components/document-collection/DocumentError.js +4 -2
  233. package/dist/esm/components/document-collection/DocumentProcessing.js +0 -1
  234. package/dist/esm/components/document-collection/DocumentSuccess.js +0 -1
  235. package/dist/esm/components/document-video/DocumentVideoCapture.js +0 -1
  236. package/dist/esm/components/document-video/DocumentVideoConfirmation.js +0 -1
  237. package/dist/esm/components/document-video/document-video-flow/DocumentVideoFlow.js +0 -1
  238. package/dist/esm/components/document-video/document-video-flow/DocumentVideoInstructions.js +0 -1
  239. package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js +0 -1
  240. package/dist/esm/components/document-video/document-video-flow/DocumentVideoRecorder.js +0 -1
  241. package/dist/esm/components/icons/ElectronicIcon.js +0 -1
  242. package/dist/esm/components/icons/PoweredByIcon.js +0 -1
  243. package/dist/esm/components/icons/PreIntroIcon.js +0 -1
  244. package/dist/esm/components/icons/StartIcon.js +0 -1
  245. package/dist/esm/components/id-check/BeforePhoto.js +0 -1
  246. package/dist/esm/components/id-check/BeforeVersoPhoto.js +0 -1
  247. package/dist/esm/components/id-check/CameraError.js +0 -1
  248. package/dist/esm/components/id-check/CameraMask.js +0 -1
  249. package/dist/esm/components/id-check/OrientationToggle.js +0 -1
  250. package/dist/esm/components/id-check/Photo.js +0 -1
  251. package/dist/esm/components/id-check/PhotoConfirmation.js +0 -1
  252. package/dist/esm/components/id-check/PhotoPreview.js +0 -1
  253. package/dist/esm/components/jdi/JDDWorkInProgress.js +0 -1
  254. package/dist/esm/components/jdi/JDICountrySelection.js +0 -1
  255. package/dist/esm/components/jdi/JDIDocumentSelection.js +0 -1
  256. package/dist/esm/components/jdi/JDIDocumentUpload.js +0 -1
  257. package/dist/esm/components/jdi/JDIError.js +4 -2
  258. package/dist/esm/components/jdi/JDIPreIntroduction.js +0 -1
  259. package/dist/esm/components/jdi/JDIProcessing.js +0 -1
  260. package/dist/esm/components/jdi/JDISuccess.js +0 -1
  261. package/dist/esm/components/legal-consent/LegalConsentNode.js +0 -1
  262. package/dist/esm/components/nfc-scan/BiometricSymbol.js +0 -1
  263. package/dist/esm/components/nfc-scan/NfcChipGate.js +0 -1
  264. package/dist/esm/components/nfc-scan/NfcFallbackSurvey.js +0 -1
  265. package/dist/esm/components/nfc-scan/NfcOnboardingNotice.js +0 -1
  266. package/dist/esm/components/nfc-scan/NfcScanNode.js +0 -1
  267. package/dist/esm/components/nfc-scan/NfcSuccessAnimation.js +0 -1
  268. package/dist/esm/components/nfc-scan/PuceCniSymbol.js +0 -1
  269. package/dist/esm/components/selfie/SelfieConfirmation.js +0 -1
  270. package/dist/esm/components/selfie/Video.css.js +0 -1
  271. package/dist/esm/components/selfie/Video.js +0 -1
  272. package/dist/esm/components/selfie/VideoFixes.css.js +0 -1
  273. package/dist/esm/components/selfie/VideoResetStyles.js +0 -1
  274. package/dist/esm/components/selfie/hooks/useLiveFrameCapture.js +0 -1
  275. package/dist/esm/components/selfie/hooks/useVideoRecorderStyles.js +0 -1
  276. package/dist/esm/components/selfie/selfie-flow/InstructionsSelfie.js +0 -1
  277. package/dist/esm/components/selfie/selfie-flow/SelfieFlow.js +0 -1
  278. package/dist/esm/components/selfie/selfie-flow/SelfiePreIntroduction.js +0 -1
  279. package/dist/esm/components/selfie/selfie-flow/SelfieProcessing.js +0 -1
  280. package/dist/esm/components/selfie/selfie-flow/SelfieRecorder.js +0 -1
  281. package/dist/esm/components/selfie/utils/selfieCaptureUtils.js +0 -1
  282. package/dist/esm/components/selfie/utils/unisseyStrings.js +0 -1
  283. package/dist/esm/components/selfie/utils/videoElementStyles.js +0 -1
  284. package/dist/esm/components/session/DocumentCheck.js +0 -1
  285. package/dist/esm/components/session/EndFlow.js +0 -1
  286. package/dist/esm/components/session/MobileRedirect.js +0 -1
  287. package/dist/esm/components/session/PdfGeneration.js +0 -1
  288. package/dist/esm/components/session/Selfie.js +0 -1
  289. package/dist/esm/components/session/SessionContent.js +0 -1
  290. package/dist/esm/components/session/SessionExpired.js +0 -1
  291. package/dist/esm/components/session/StartSession.js +0 -1
  292. package/dist/esm/components/session/UserInputForm/AddressFields.js +0 -1
  293. package/dist/esm/components/session/UserInputForm/ContactFields.js +0 -1
  294. package/dist/esm/components/session/UserInputForm/CustomFormFields.js +1 -10
  295. package/dist/esm/components/session/UserInputForm/DatePickerField.js +0 -1
  296. package/dist/esm/components/session/UserInputForm/IdentityFields.js +0 -1
  297. package/dist/esm/components/session/UserInputForm/LegalEntityFields.js +0 -1
  298. package/dist/esm/components/session/UserInputForm/LegalRepFields.js +0 -1
  299. package/dist/esm/components/session/UserInputForm/NationalityField.js +0 -1
  300. package/dist/esm/components/session/UserInputForm.js +4 -2
  301. package/dist/esm/components/session/VideoWorkInProgress.js +0 -1
  302. package/dist/esm/components/session/controleJdiPolicy.js +0 -1
  303. package/dist/esm/components/session/endScreenIcons.js +0 -1
  304. package/dist/esm/components/signature-electronic/DocusealSignature.js +0 -1
  305. package/dist/esm/components/signature-electronic/SignatureElectronic.js +0 -1
  306. package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js +0 -1
  307. package/dist/esm/components/signature-electronic/SignedDocumentPreview.js +0 -1
  308. package/dist/esm/components/start-flow/Start.js +0 -1
  309. package/dist/esm/components/states/ErrorState.js +0 -1
  310. package/dist/esm/components/states/LoadingState.js +0 -1
  311. package/dist/esm/components/states/NoSessionIdState.js +0 -1
  312. package/dist/esm/components/template/ComplementaryMandateNodeHandler.js +0 -1
  313. package/dist/esm/components/template/ConditionNodeHandler.js +0 -1
  314. package/dist/esm/components/template/ExternalVerificationNodeHandler.js +0 -1
  315. package/dist/esm/components/template/TemplateNodeRenderer.js +0 -1
  316. package/dist/esm/components/template/conditionNodePolicy.js +0 -1
  317. package/dist/esm/components/ui/Body.js +0 -1
  318. package/dist/esm/components/ui/Button.js +0 -1
  319. package/dist/esm/components/ui/ButtonDesktop.js +0 -1
  320. package/dist/esm/components/ui/Card.js +0 -1
  321. package/dist/esm/components/ui/MobilePageLayout.js +0 -1
  322. package/dist/esm/components/ui/PDFPreview.js +0 -1
  323. package/dist/esm/components/ui/PageActions.js +0 -1
  324. package/dist/esm/components/ui/Paper.js +0 -1
  325. package/dist/esm/components/ui/PoweredBy.js +0 -1
  326. package/dist/esm/components/ui/QRCodeDisplay.js +0 -1
  327. package/dist/esm/components/ui/SelectComponent.js +0 -1
  328. package/dist/esm/components/ui/Subtitle.js +0 -1
  329. package/dist/esm/components/ui/Title.js +0 -1
  330. package/dist/esm/config/env.js +0 -1
  331. package/dist/esm/constants/userInputForm.js +0 -1
  332. package/dist/esm/context/ConfigContext.js +0 -1
  333. package/dist/esm/context/DocumentContext.js +0 -1
  334. package/dist/esm/context/SessionContext.js +0 -1
  335. package/dist/esm/hooks/useClientInfo.js +0 -1
  336. package/dist/esm/hooks/useCountryOptions.js +0 -1
  337. package/dist/esm/hooks/useI18n.js +0 -1
  338. package/dist/esm/hooks/useIsMobile.js +0 -1
  339. package/dist/esm/hooks/useNfcSseStatus.js +0 -1
  340. package/dist/esm/hooks/useRouteCSS.js +0 -1
  341. package/dist/esm/hooks/useSession.js +0 -1
  342. package/dist/esm/hooks/useSessionData.js +0 -1
  343. package/dist/esm/hooks/useStepCSS.js +0 -1
  344. package/dist/esm/hooks/useStepNavigation.js +18 -1
  345. package/dist/esm/hooks/useTemplateLoader.js +0 -1
  346. package/dist/esm/hooks/useUserInputForm.js +38 -1
  347. package/dist/esm/i18n/country/country.en.json.js +0 -1
  348. package/dist/esm/i18n/country/country.fr.json.js +0 -1
  349. package/dist/esm/i18n/country/country.iso2.en.json.js +0 -1
  350. package/dist/esm/i18n/country/country.iso2.fr.json.js +0 -1
  351. package/dist/esm/i18n/documents/documents.en.json.js +0 -1
  352. package/dist/esm/i18n/documents/documents.fr.json.js +0 -1
  353. package/dist/esm/i18n/en.json.js +0 -1
  354. package/dist/esm/i18n/es.json.js +0 -1
  355. package/dist/esm/i18n/fr.json.js +0 -1
  356. package/dist/esm/i18n/index.js +0 -1
  357. package/dist/esm/index.css.js +0 -1
  358. package/dist/esm/index.js +0 -1
  359. package/dist/esm/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +0 -1
  360. package/dist/esm/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +0 -1
  361. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchFn.js +0 -1
  362. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +0 -1
  363. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +0 -1
  364. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatLong.js +0 -1
  365. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +0 -1
  366. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/localize.js +0 -1
  367. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/match.js +0 -1
  368. package/dist/esm/node_modules/date-fns/locale/en-US.js +0 -1
  369. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatDistance.js +0 -1
  370. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatLong.js +0 -1
  371. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatRelative.js +0 -1
  372. package/dist/esm/node_modules/date-fns/locale/fr/_lib/localize.js +0 -1
  373. package/dist/esm/node_modules/date-fns/locale/fr/_lib/match.js +0 -1
  374. package/dist/esm/node_modules/date-fns/locale/fr.js +0 -1
  375. package/dist/esm/node_modules/heic2any/dist/heic2any.js +0 -1
  376. package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.js +0 -1
  377. package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.worker.js +0 -1
  378. package/dist/esm/node_modules/style-inject/dist/style-inject.es.js +0 -1
  379. package/dist/esm/node_modules/tslib/tslib.es6.js +0 -1
  380. package/dist/esm/providers/I18nProvider.js +0 -1
  381. package/dist/esm/services/analysis.js +0 -1
  382. package/dist/esm/services/api.js +0 -1
  383. package/dist/esm/services/auditTrailService.js +0 -1
  384. package/dist/esm/services/cameraService.js +0 -1
  385. package/dist/esm/services/documentEdgeDetectionService.js +0 -1
  386. package/dist/esm/services/documentTemplate.js +0 -1
  387. package/dist/esm/services/iadService.js +0 -1
  388. package/dist/esm/services/integrationService.js +0 -1
  389. package/dist/esm/services/pollingService.js +0 -1
  390. package/dist/esm/services/professionalImageQuality.js +0 -1
  391. package/dist/esm/services/retryService.js +0 -1
  392. package/dist/esm/services/sessionCredentials.js +2 -2
  393. package/dist/esm/services/sessionMemoryStore.js +0 -1
  394. package/dist/esm/services/sessionService.js +0 -1
  395. package/dist/esm/services/utils.js +0 -1
  396. package/dist/esm/types/session.js +0 -1
  397. package/dist/esm/utils/analysisErrors.js +0 -1
  398. package/dist/esm/utils/apiAnalysis.js +0 -1
  399. package/dist/esm/utils/conditionEvaluator.js +0 -1
  400. package/dist/esm/utils/countryFlags.js +0 -1
  401. package/dist/esm/utils/cssLoader.js +0 -1
  402. package/dist/esm/utils/customFieldIds.js +0 -1
  403. package/dist/esm/utils/customFieldLocks.js +24 -0
  404. package/dist/esm/utils/customFieldValidation.js +0 -1
  405. package/dist/esm/utils/documentLabels.js +0 -1
  406. package/dist/esm/utils/europeanCountries.js +0 -1
  407. package/dist/esm/utils/fileConverter.js +0 -1
  408. package/dist/esm/utils/imageConverter.js +0 -1
  409. package/dist/esm/utils/imageProcessing.js +0 -1
  410. package/dist/esm/utils/isMobileDevice.js +0 -1
  411. package/dist/esm/utils/isoCountryCodes.js +0 -1
  412. package/dist/esm/utils/jdiCodes.js +0 -1
  413. package/dist/esm/utils/labelToKey.js +0 -1
  414. package/dist/esm/utils/listFieldUtils.js +0 -1
  415. package/dist/esm/utils/mimeTypes.js +0 -1
  416. package/dist/esm/utils/navigation.js +0 -1
  417. package/dist/esm/utils/renderInlineMarkdown.js +0 -1
  418. package/dist/esm/utils/sessionStatus.js +0 -1
  419. package/dist/esm/utils/userInputForm.js +0 -1
  420. package/dist/esm/utils/utils.js +0 -1
  421. package/dist/esm/utils/validationUtils.js +0 -1
  422. package/package.json +11 -3
  423. package/.gitlab/issue_templates/bug.md +0 -14
  424. package/.gitlab/issue_templates/feature.md +0 -11
  425. package/.gitlab/issue_templates/task.md +0 -11
  426. package/.gitlab/merge_request_templates/default.md +0 -15
  427. package/.gitlab/merge_request_templates/hotfix.md +0 -15
  428. package/.gitlab-ci.yml +0 -290
  429. package/CLAUDE.md +0 -233
  430. package/__mocks__/@unissey-web/sdk-react.js +0 -17
  431. package/__mocks__/fileMock.js +0 -1
  432. package/__mocks__/pdfjs-dist/legacy/build/pdf.js +0 -5
  433. package/__mocks__/pdfjs-dist/legacy/build/pdf.worker.js +0 -1
  434. package/assets/logo.svg +0 -56
  435. package/axios.install.md +0 -2
  436. package/babel.config.js +0 -15
  437. package/dist/cjs/_virtual/_commonjsHelpers.js.map +0 -1
  438. package/dist/cjs/_virtual/heic2any.js.map +0 -1
  439. package/dist/cjs/_virtual/heic2any2.js.map +0 -1
  440. package/dist/cjs/assets/Face Scan Square.svg.js.map +0 -1
  441. package/dist/cjs/assets/Lightbulb.svg.js.map +0 -1
  442. package/dist/cjs/assets/Monitor Camera.svg.js.map +0 -1
  443. package/dist/cjs/assets/User Hands.svg.js.map +0 -1
  444. package/dist/cjs/assets/before-document.png.js.map +0 -1
  445. package/dist/cjs/assets/before-passport.png.js.map +0 -1
  446. package/dist/cjs/assets/before-photo.png.js.map +0 -1
  447. package/dist/cjs/assets/before-verso.png.js.map +0 -1
  448. package/dist/cjs/assets/check.svg.js.map +0 -1
  449. package/dist/cjs/assets/icons/shield_magic_link.svg.js.map +0 -1
  450. package/dist/cjs/assets/selfietake.svg.js.map +0 -1
  451. package/dist/cjs/components/DatakeenSession.js.map +0 -1
  452. package/dist/cjs/components/document-collection/DocumentCollection.js.map +0 -1
  453. package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js.map +0 -1
  454. package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js.map +0 -1
  455. package/dist/cjs/components/document-collection/DocumentCollectionSelection.js.map +0 -1
  456. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js.map +0 -1
  457. package/dist/cjs/components/document-collection/DocumentError.js.map +0 -1
  458. package/dist/cjs/components/document-collection/DocumentProcessing.js.map +0 -1
  459. package/dist/cjs/components/document-collection/DocumentSuccess.js.map +0 -1
  460. package/dist/cjs/components/document-video/DocumentVideoCapture.js.map +0 -1
  461. package/dist/cjs/components/document-video/DocumentVideoConfirmation.js.map +0 -1
  462. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoFlow.js.map +0 -1
  463. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoInstructions.js.map +0 -1
  464. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +0 -1
  465. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoRecorder.js.map +0 -1
  466. package/dist/cjs/components/icons/ElectronicIcon.js.map +0 -1
  467. package/dist/cjs/components/icons/PoweredByIcon.js.map +0 -1
  468. package/dist/cjs/components/icons/PreIntroIcon.js.map +0 -1
  469. package/dist/cjs/components/icons/StartIcon.js.map +0 -1
  470. package/dist/cjs/components/id-check/BeforePhoto.js.map +0 -1
  471. package/dist/cjs/components/id-check/BeforeVersoPhoto.js.map +0 -1
  472. package/dist/cjs/components/id-check/CameraError.js.map +0 -1
  473. package/dist/cjs/components/id-check/CameraMask.js.map +0 -1
  474. package/dist/cjs/components/id-check/OrientationToggle.js.map +0 -1
  475. package/dist/cjs/components/id-check/Photo.js.map +0 -1
  476. package/dist/cjs/components/id-check/PhotoConfirmation.js.map +0 -1
  477. package/dist/cjs/components/id-check/PhotoPreview.js.map +0 -1
  478. package/dist/cjs/components/jdi/JDDWorkInProgress.js.map +0 -1
  479. package/dist/cjs/components/jdi/JDICountrySelection.js.map +0 -1
  480. package/dist/cjs/components/jdi/JDIDocumentSelection.js.map +0 -1
  481. package/dist/cjs/components/jdi/JDIDocumentUpload.js.map +0 -1
  482. package/dist/cjs/components/jdi/JDIError.js.map +0 -1
  483. package/dist/cjs/components/jdi/JDIPreIntroduction.js.map +0 -1
  484. package/dist/cjs/components/jdi/JDIProcessing.js.map +0 -1
  485. package/dist/cjs/components/jdi/JDISuccess.js.map +0 -1
  486. package/dist/cjs/components/legal-consent/LegalConsentNode.js.map +0 -1
  487. package/dist/cjs/components/nfc-scan/BiometricSymbol.js.map +0 -1
  488. package/dist/cjs/components/nfc-scan/NfcChipGate.js.map +0 -1
  489. package/dist/cjs/components/nfc-scan/NfcFallbackSurvey.js.map +0 -1
  490. package/dist/cjs/components/nfc-scan/NfcOnboardingNotice.js.map +0 -1
  491. package/dist/cjs/components/nfc-scan/NfcScanNode.js.map +0 -1
  492. package/dist/cjs/components/nfc-scan/NfcSuccessAnimation.js.map +0 -1
  493. package/dist/cjs/components/nfc-scan/PuceCniSymbol.js.map +0 -1
  494. package/dist/cjs/components/selfie/SelfieConfirmation.js.map +0 -1
  495. package/dist/cjs/components/selfie/Video.css.js.map +0 -1
  496. package/dist/cjs/components/selfie/Video.js.map +0 -1
  497. package/dist/cjs/components/selfie/VideoFixes.css.js.map +0 -1
  498. package/dist/cjs/components/selfie/VideoResetStyles.js.map +0 -1
  499. package/dist/cjs/components/selfie/hooks/useLiveFrameCapture.js.map +0 -1
  500. package/dist/cjs/components/selfie/hooks/useVideoRecorderStyles.js.map +0 -1
  501. package/dist/cjs/components/selfie/selfie-flow/InstructionsSelfie.js.map +0 -1
  502. package/dist/cjs/components/selfie/selfie-flow/SelfieFlow.js.map +0 -1
  503. package/dist/cjs/components/selfie/selfie-flow/SelfiePreIntroduction.js.map +0 -1
  504. package/dist/cjs/components/selfie/selfie-flow/SelfieProcessing.js.map +0 -1
  505. package/dist/cjs/components/selfie/selfie-flow/SelfieRecorder.js.map +0 -1
  506. package/dist/cjs/components/selfie/utils/selfieCaptureUtils.js.map +0 -1
  507. package/dist/cjs/components/selfie/utils/unisseyStrings.js.map +0 -1
  508. package/dist/cjs/components/selfie/utils/videoElementStyles.js.map +0 -1
  509. package/dist/cjs/components/session/DocumentCheck.js.map +0 -1
  510. package/dist/cjs/components/session/EndFlow.js.map +0 -1
  511. package/dist/cjs/components/session/MobileRedirect.js.map +0 -1
  512. package/dist/cjs/components/session/PdfGeneration.js.map +0 -1
  513. package/dist/cjs/components/session/Selfie.js.map +0 -1
  514. package/dist/cjs/components/session/SessionContent.js.map +0 -1
  515. package/dist/cjs/components/session/SessionExpired.js.map +0 -1
  516. package/dist/cjs/components/session/StartSession.js.map +0 -1
  517. package/dist/cjs/components/session/UserInputForm/AddressFields.js.map +0 -1
  518. package/dist/cjs/components/session/UserInputForm/ContactFields.js.map +0 -1
  519. package/dist/cjs/components/session/UserInputForm/CustomFormFields.js.map +0 -1
  520. package/dist/cjs/components/session/UserInputForm/DatePickerField.js.map +0 -1
  521. package/dist/cjs/components/session/UserInputForm/IdentityFields.js.map +0 -1
  522. package/dist/cjs/components/session/UserInputForm/LegalEntityFields.js.map +0 -1
  523. package/dist/cjs/components/session/UserInputForm/LegalRepFields.js.map +0 -1
  524. package/dist/cjs/components/session/UserInputForm/NationalityField.js.map +0 -1
  525. package/dist/cjs/components/session/UserInputForm.js.map +0 -1
  526. package/dist/cjs/components/session/VideoWorkInProgress.js.map +0 -1
  527. package/dist/cjs/components/session/controleJdiPolicy.js.map +0 -1
  528. package/dist/cjs/components/session/endScreenIcons.js.map +0 -1
  529. package/dist/cjs/components/signature-electronic/DocusealSignature.js.map +0 -1
  530. package/dist/cjs/components/signature-electronic/SignatureElectronic.js.map +0 -1
  531. package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js.map +0 -1
  532. package/dist/cjs/components/signature-electronic/SignedDocumentPreview.js.map +0 -1
  533. package/dist/cjs/components/start-flow/Start.js.map +0 -1
  534. package/dist/cjs/components/states/ErrorState.js.map +0 -1
  535. package/dist/cjs/components/states/LoadingState.js.map +0 -1
  536. package/dist/cjs/components/states/NoSessionIdState.js.map +0 -1
  537. package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js.map +0 -1
  538. package/dist/cjs/components/template/ConditionNodeHandler.js.map +0 -1
  539. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js.map +0 -1
  540. package/dist/cjs/components/template/TemplateNodeRenderer.js.map +0 -1
  541. package/dist/cjs/components/template/conditionNodePolicy.js.map +0 -1
  542. package/dist/cjs/components/ui/Body.js.map +0 -1
  543. package/dist/cjs/components/ui/Button.js.map +0 -1
  544. package/dist/cjs/components/ui/ButtonDesktop.js.map +0 -1
  545. package/dist/cjs/components/ui/Card.js.map +0 -1
  546. package/dist/cjs/components/ui/MobilePageLayout.js.map +0 -1
  547. package/dist/cjs/components/ui/PDFPreview.js.map +0 -1
  548. package/dist/cjs/components/ui/PageActions.js.map +0 -1
  549. package/dist/cjs/components/ui/Paper.js.map +0 -1
  550. package/dist/cjs/components/ui/PoweredBy.js.map +0 -1
  551. package/dist/cjs/components/ui/QRCodeDisplay.js.map +0 -1
  552. package/dist/cjs/components/ui/SelectComponent.js.map +0 -1
  553. package/dist/cjs/components/ui/Subtitle.js.map +0 -1
  554. package/dist/cjs/components/ui/Title.js.map +0 -1
  555. package/dist/cjs/config/env.js.map +0 -1
  556. package/dist/cjs/constants/userInputForm.js.map +0 -1
  557. package/dist/cjs/context/ConfigContext.js.map +0 -1
  558. package/dist/cjs/context/DocumentContext.js.map +0 -1
  559. package/dist/cjs/context/SessionContext.js.map +0 -1
  560. package/dist/cjs/hooks/useClientInfo.js.map +0 -1
  561. package/dist/cjs/hooks/useCountryOptions.js.map +0 -1
  562. package/dist/cjs/hooks/useI18n.js.map +0 -1
  563. package/dist/cjs/hooks/useIsMobile.js.map +0 -1
  564. package/dist/cjs/hooks/useNfcSseStatus.js.map +0 -1
  565. package/dist/cjs/hooks/useRouteCSS.js.map +0 -1
  566. package/dist/cjs/hooks/useSession.js.map +0 -1
  567. package/dist/cjs/hooks/useSessionData.js.map +0 -1
  568. package/dist/cjs/hooks/useStepCSS.js.map +0 -1
  569. package/dist/cjs/hooks/useStepNavigation.js.map +0 -1
  570. package/dist/cjs/hooks/useTemplateLoader.js.map +0 -1
  571. package/dist/cjs/hooks/useUserInputForm.js.map +0 -1
  572. package/dist/cjs/i18n/country/country.en.json.js.map +0 -1
  573. package/dist/cjs/i18n/country/country.fr.json.js.map +0 -1
  574. package/dist/cjs/i18n/country/country.iso2.en.json.js.map +0 -1
  575. package/dist/cjs/i18n/country/country.iso2.fr.json.js.map +0 -1
  576. package/dist/cjs/i18n/documents/documents.en.json.js.map +0 -1
  577. package/dist/cjs/i18n/documents/documents.fr.json.js.map +0 -1
  578. package/dist/cjs/i18n/en.json.js.map +0 -1
  579. package/dist/cjs/i18n/es.json.js.map +0 -1
  580. package/dist/cjs/i18n/fr.json.js.map +0 -1
  581. package/dist/cjs/i18n/index.js.map +0 -1
  582. package/dist/cjs/index.css.js.map +0 -1
  583. package/dist/cjs/index.js.map +0 -1
  584. package/dist/cjs/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +0 -1
  585. package/dist/cjs/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +0 -1
  586. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +0 -1
  587. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +0 -1
  588. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +0 -1
  589. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +0 -1
  590. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +0 -1
  591. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/localize.js.map +0 -1
  592. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/match.js.map +0 -1
  593. package/dist/cjs/node_modules/date-fns/locale/en-US.js.map +0 -1
  594. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatDistance.js.map +0 -1
  595. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatLong.js.map +0 -1
  596. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatRelative.js.map +0 -1
  597. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/localize.js.map +0 -1
  598. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/match.js.map +0 -1
  599. package/dist/cjs/node_modules/date-fns/locale/fr.js.map +0 -1
  600. package/dist/cjs/node_modules/heic2any/dist/heic2any.js.map +0 -1
  601. package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.js.map +0 -1
  602. package/dist/cjs/node_modules/pdfjs-dist/legacy/build/pdf.worker.js.map +0 -1
  603. package/dist/cjs/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
  604. package/dist/cjs/node_modules/tslib/tslib.es6.js.map +0 -1
  605. package/dist/cjs/providers/I18nProvider.js.map +0 -1
  606. package/dist/cjs/services/analysis.js.map +0 -1
  607. package/dist/cjs/services/api.js.map +0 -1
  608. package/dist/cjs/services/auditTrailService.js.map +0 -1
  609. package/dist/cjs/services/cameraService.js.map +0 -1
  610. package/dist/cjs/services/documentEdgeDetectionService.js.map +0 -1
  611. package/dist/cjs/services/documentTemplate.js.map +0 -1
  612. package/dist/cjs/services/iadService.js.map +0 -1
  613. package/dist/cjs/services/integrationService.js.map +0 -1
  614. package/dist/cjs/services/pollingService.js.map +0 -1
  615. package/dist/cjs/services/professionalImageQuality.js.map +0 -1
  616. package/dist/cjs/services/retryService.js.map +0 -1
  617. package/dist/cjs/services/sessionCredentials.js.map +0 -1
  618. package/dist/cjs/services/sessionMemoryStore.js.map +0 -1
  619. package/dist/cjs/services/sessionService.js.map +0 -1
  620. package/dist/cjs/services/utils.js.map +0 -1
  621. package/dist/cjs/types/session.js.map +0 -1
  622. package/dist/cjs/utils/analysisErrors.js.map +0 -1
  623. package/dist/cjs/utils/apiAnalysis.js.map +0 -1
  624. package/dist/cjs/utils/conditionEvaluator.js.map +0 -1
  625. package/dist/cjs/utils/countryFlags.js.map +0 -1
  626. package/dist/cjs/utils/cssLoader.js.map +0 -1
  627. package/dist/cjs/utils/customFieldIds.js.map +0 -1
  628. package/dist/cjs/utils/customFieldValidation.js.map +0 -1
  629. package/dist/cjs/utils/documentLabels.js.map +0 -1
  630. package/dist/cjs/utils/europeanCountries.js.map +0 -1
  631. package/dist/cjs/utils/fileConverter.js.map +0 -1
  632. package/dist/cjs/utils/imageConverter.js.map +0 -1
  633. package/dist/cjs/utils/imageProcessing.js.map +0 -1
  634. package/dist/cjs/utils/isMobileDevice.js.map +0 -1
  635. package/dist/cjs/utils/isoCountryCodes.js.map +0 -1
  636. package/dist/cjs/utils/jdiCodes.js.map +0 -1
  637. package/dist/cjs/utils/labelToKey.js.map +0 -1
  638. package/dist/cjs/utils/listFieldUtils.js.map +0 -1
  639. package/dist/cjs/utils/mimeTypes.js.map +0 -1
  640. package/dist/cjs/utils/navigation.js.map +0 -1
  641. package/dist/cjs/utils/renderInlineMarkdown.js.map +0 -1
  642. package/dist/cjs/utils/sessionStatus.js.map +0 -1
  643. package/dist/cjs/utils/userInputForm.js.map +0 -1
  644. package/dist/cjs/utils/utils.js.map +0 -1
  645. package/dist/cjs/utils/validationUtils.js.map +0 -1
  646. package/dist/esm/_virtual/_commonjsHelpers.js.map +0 -1
  647. package/dist/esm/_virtual/heic2any.js.map +0 -1
  648. package/dist/esm/_virtual/heic2any2.js.map +0 -1
  649. package/dist/esm/assets/Face Scan Square.svg.js.map +0 -1
  650. package/dist/esm/assets/Lightbulb.svg.js.map +0 -1
  651. package/dist/esm/assets/Monitor Camera.svg.js.map +0 -1
  652. package/dist/esm/assets/User Hands.svg.js.map +0 -1
  653. package/dist/esm/assets/before-document.png.js.map +0 -1
  654. package/dist/esm/assets/before-passport.png.js.map +0 -1
  655. package/dist/esm/assets/before-photo.png.js.map +0 -1
  656. package/dist/esm/assets/before-verso.png.js.map +0 -1
  657. package/dist/esm/assets/check.svg.js.map +0 -1
  658. package/dist/esm/assets/icons/shield_magic_link.svg.js.map +0 -1
  659. package/dist/esm/assets/selfietake.svg.js.map +0 -1
  660. package/dist/esm/components/DatakeenSession.js.map +0 -1
  661. package/dist/esm/components/document-collection/DocumentCollection.js.map +0 -1
  662. package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js.map +0 -1
  663. package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js.map +0 -1
  664. package/dist/esm/components/document-collection/DocumentCollectionSelection.js.map +0 -1
  665. package/dist/esm/components/document-collection/DocumentCollectionUpload.js.map +0 -1
  666. package/dist/esm/components/document-collection/DocumentError.js.map +0 -1
  667. package/dist/esm/components/document-collection/DocumentProcessing.js.map +0 -1
  668. package/dist/esm/components/document-collection/DocumentSuccess.js.map +0 -1
  669. package/dist/esm/components/document-video/DocumentVideoCapture.js.map +0 -1
  670. package/dist/esm/components/document-video/DocumentVideoConfirmation.js.map +0 -1
  671. package/dist/esm/components/document-video/document-video-flow/DocumentVideoFlow.js.map +0 -1
  672. package/dist/esm/components/document-video/document-video-flow/DocumentVideoInstructions.js.map +0 -1
  673. package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +0 -1
  674. package/dist/esm/components/document-video/document-video-flow/DocumentVideoRecorder.js.map +0 -1
  675. package/dist/esm/components/icons/ElectronicIcon.js.map +0 -1
  676. package/dist/esm/components/icons/PoweredByIcon.js.map +0 -1
  677. package/dist/esm/components/icons/PreIntroIcon.js.map +0 -1
  678. package/dist/esm/components/icons/StartIcon.js.map +0 -1
  679. package/dist/esm/components/id-check/BeforePhoto.js.map +0 -1
  680. package/dist/esm/components/id-check/BeforeVersoPhoto.js.map +0 -1
  681. package/dist/esm/components/id-check/CameraError.js.map +0 -1
  682. package/dist/esm/components/id-check/CameraMask.js.map +0 -1
  683. package/dist/esm/components/id-check/OrientationToggle.js.map +0 -1
  684. package/dist/esm/components/id-check/Photo.js.map +0 -1
  685. package/dist/esm/components/id-check/PhotoConfirmation.js.map +0 -1
  686. package/dist/esm/components/id-check/PhotoPreview.js.map +0 -1
  687. package/dist/esm/components/jdi/JDDWorkInProgress.js.map +0 -1
  688. package/dist/esm/components/jdi/JDICountrySelection.js.map +0 -1
  689. package/dist/esm/components/jdi/JDIDocumentSelection.js.map +0 -1
  690. package/dist/esm/components/jdi/JDIDocumentUpload.js.map +0 -1
  691. package/dist/esm/components/jdi/JDIError.js.map +0 -1
  692. package/dist/esm/components/jdi/JDIPreIntroduction.js.map +0 -1
  693. package/dist/esm/components/jdi/JDIProcessing.js.map +0 -1
  694. package/dist/esm/components/jdi/JDISuccess.js.map +0 -1
  695. package/dist/esm/components/legal-consent/LegalConsentNode.js.map +0 -1
  696. package/dist/esm/components/nfc-scan/BiometricSymbol.js.map +0 -1
  697. package/dist/esm/components/nfc-scan/NfcChipGate.js.map +0 -1
  698. package/dist/esm/components/nfc-scan/NfcFallbackSurvey.js.map +0 -1
  699. package/dist/esm/components/nfc-scan/NfcOnboardingNotice.js.map +0 -1
  700. package/dist/esm/components/nfc-scan/NfcScanNode.js.map +0 -1
  701. package/dist/esm/components/nfc-scan/NfcSuccessAnimation.js.map +0 -1
  702. package/dist/esm/components/nfc-scan/PuceCniSymbol.js.map +0 -1
  703. package/dist/esm/components/selfie/SelfieConfirmation.js.map +0 -1
  704. package/dist/esm/components/selfie/Video.css.js.map +0 -1
  705. package/dist/esm/components/selfie/Video.js.map +0 -1
  706. package/dist/esm/components/selfie/VideoFixes.css.js.map +0 -1
  707. package/dist/esm/components/selfie/VideoResetStyles.js.map +0 -1
  708. package/dist/esm/components/selfie/hooks/useLiveFrameCapture.js.map +0 -1
  709. package/dist/esm/components/selfie/hooks/useVideoRecorderStyles.js.map +0 -1
  710. package/dist/esm/components/selfie/selfie-flow/InstructionsSelfie.js.map +0 -1
  711. package/dist/esm/components/selfie/selfie-flow/SelfieFlow.js.map +0 -1
  712. package/dist/esm/components/selfie/selfie-flow/SelfiePreIntroduction.js.map +0 -1
  713. package/dist/esm/components/selfie/selfie-flow/SelfieProcessing.js.map +0 -1
  714. package/dist/esm/components/selfie/selfie-flow/SelfieRecorder.js.map +0 -1
  715. package/dist/esm/components/selfie/utils/selfieCaptureUtils.js.map +0 -1
  716. package/dist/esm/components/selfie/utils/unisseyStrings.js.map +0 -1
  717. package/dist/esm/components/selfie/utils/videoElementStyles.js.map +0 -1
  718. package/dist/esm/components/session/DocumentCheck.js.map +0 -1
  719. package/dist/esm/components/session/EndFlow.js.map +0 -1
  720. package/dist/esm/components/session/MobileRedirect.js.map +0 -1
  721. package/dist/esm/components/session/PdfGeneration.js.map +0 -1
  722. package/dist/esm/components/session/Selfie.js.map +0 -1
  723. package/dist/esm/components/session/SessionContent.js.map +0 -1
  724. package/dist/esm/components/session/SessionExpired.js.map +0 -1
  725. package/dist/esm/components/session/StartSession.js.map +0 -1
  726. package/dist/esm/components/session/UserInputForm/AddressFields.js.map +0 -1
  727. package/dist/esm/components/session/UserInputForm/ContactFields.js.map +0 -1
  728. package/dist/esm/components/session/UserInputForm/CustomFormFields.js.map +0 -1
  729. package/dist/esm/components/session/UserInputForm/DatePickerField.js.map +0 -1
  730. package/dist/esm/components/session/UserInputForm/IdentityFields.js.map +0 -1
  731. package/dist/esm/components/session/UserInputForm/LegalEntityFields.js.map +0 -1
  732. package/dist/esm/components/session/UserInputForm/LegalRepFields.js.map +0 -1
  733. package/dist/esm/components/session/UserInputForm/NationalityField.js.map +0 -1
  734. package/dist/esm/components/session/UserInputForm.js.map +0 -1
  735. package/dist/esm/components/session/VideoWorkInProgress.js.map +0 -1
  736. package/dist/esm/components/session/controleJdiPolicy.js.map +0 -1
  737. package/dist/esm/components/session/endScreenIcons.js.map +0 -1
  738. package/dist/esm/components/signature-electronic/DocusealSignature.js.map +0 -1
  739. package/dist/esm/components/signature-electronic/SignatureElectronic.js.map +0 -1
  740. package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js.map +0 -1
  741. package/dist/esm/components/signature-electronic/SignedDocumentPreview.js.map +0 -1
  742. package/dist/esm/components/start-flow/Start.js.map +0 -1
  743. package/dist/esm/components/states/ErrorState.js.map +0 -1
  744. package/dist/esm/components/states/LoadingState.js.map +0 -1
  745. package/dist/esm/components/states/NoSessionIdState.js.map +0 -1
  746. package/dist/esm/components/template/ComplementaryMandateNodeHandler.js.map +0 -1
  747. package/dist/esm/components/template/ConditionNodeHandler.js.map +0 -1
  748. package/dist/esm/components/template/ExternalVerificationNodeHandler.js.map +0 -1
  749. package/dist/esm/components/template/TemplateNodeRenderer.js.map +0 -1
  750. package/dist/esm/components/template/conditionNodePolicy.js.map +0 -1
  751. package/dist/esm/components/ui/Body.js.map +0 -1
  752. package/dist/esm/components/ui/Button.js.map +0 -1
  753. package/dist/esm/components/ui/ButtonDesktop.js.map +0 -1
  754. package/dist/esm/components/ui/Card.js.map +0 -1
  755. package/dist/esm/components/ui/MobilePageLayout.js.map +0 -1
  756. package/dist/esm/components/ui/PDFPreview.js.map +0 -1
  757. package/dist/esm/components/ui/PageActions.js.map +0 -1
  758. package/dist/esm/components/ui/Paper.js.map +0 -1
  759. package/dist/esm/components/ui/PoweredBy.js.map +0 -1
  760. package/dist/esm/components/ui/QRCodeDisplay.js.map +0 -1
  761. package/dist/esm/components/ui/SelectComponent.js.map +0 -1
  762. package/dist/esm/components/ui/Subtitle.js.map +0 -1
  763. package/dist/esm/components/ui/Title.js.map +0 -1
  764. package/dist/esm/config/env.js.map +0 -1
  765. package/dist/esm/constants/userInputForm.js.map +0 -1
  766. package/dist/esm/context/ConfigContext.js.map +0 -1
  767. package/dist/esm/context/DocumentContext.js.map +0 -1
  768. package/dist/esm/context/SessionContext.js.map +0 -1
  769. package/dist/esm/hooks/useClientInfo.js.map +0 -1
  770. package/dist/esm/hooks/useCountryOptions.js.map +0 -1
  771. package/dist/esm/hooks/useI18n.js.map +0 -1
  772. package/dist/esm/hooks/useIsMobile.js.map +0 -1
  773. package/dist/esm/hooks/useNfcSseStatus.js.map +0 -1
  774. package/dist/esm/hooks/useRouteCSS.js.map +0 -1
  775. package/dist/esm/hooks/useSession.js.map +0 -1
  776. package/dist/esm/hooks/useSessionData.js.map +0 -1
  777. package/dist/esm/hooks/useStepCSS.js.map +0 -1
  778. package/dist/esm/hooks/useStepNavigation.js.map +0 -1
  779. package/dist/esm/hooks/useTemplateLoader.js.map +0 -1
  780. package/dist/esm/hooks/useUserInputForm.js.map +0 -1
  781. package/dist/esm/i18n/country/country.en.json.js.map +0 -1
  782. package/dist/esm/i18n/country/country.fr.json.js.map +0 -1
  783. package/dist/esm/i18n/country/country.iso2.en.json.js.map +0 -1
  784. package/dist/esm/i18n/country/country.iso2.fr.json.js.map +0 -1
  785. package/dist/esm/i18n/documents/documents.en.json.js.map +0 -1
  786. package/dist/esm/i18n/documents/documents.fr.json.js.map +0 -1
  787. package/dist/esm/i18n/en.json.js.map +0 -1
  788. package/dist/esm/i18n/es.json.js.map +0 -1
  789. package/dist/esm/i18n/fr.json.js.map +0 -1
  790. package/dist/esm/i18n/index.js.map +0 -1
  791. package/dist/esm/index.css.js.map +0 -1
  792. package/dist/esm/index.js.map +0 -1
  793. package/dist/esm/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +0 -1
  794. package/dist/esm/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +0 -1
  795. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +0 -1
  796. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +0 -1
  797. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +0 -1
  798. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +0 -1
  799. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +0 -1
  800. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/localize.js.map +0 -1
  801. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/match.js.map +0 -1
  802. package/dist/esm/node_modules/date-fns/locale/en-US.js.map +0 -1
  803. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatDistance.js.map +0 -1
  804. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatLong.js.map +0 -1
  805. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatRelative.js.map +0 -1
  806. package/dist/esm/node_modules/date-fns/locale/fr/_lib/localize.js.map +0 -1
  807. package/dist/esm/node_modules/date-fns/locale/fr/_lib/match.js.map +0 -1
  808. package/dist/esm/node_modules/date-fns/locale/fr.js.map +0 -1
  809. package/dist/esm/node_modules/heic2any/dist/heic2any.js.map +0 -1
  810. package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.js.map +0 -1
  811. package/dist/esm/node_modules/pdfjs-dist/legacy/build/pdf.worker.js.map +0 -1
  812. package/dist/esm/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
  813. package/dist/esm/node_modules/tslib/tslib.es6.js.map +0 -1
  814. package/dist/esm/providers/I18nProvider.js.map +0 -1
  815. package/dist/esm/services/analysis.js.map +0 -1
  816. package/dist/esm/services/api.js.map +0 -1
  817. package/dist/esm/services/auditTrailService.js.map +0 -1
  818. package/dist/esm/services/cameraService.js.map +0 -1
  819. package/dist/esm/services/documentEdgeDetectionService.js.map +0 -1
  820. package/dist/esm/services/documentTemplate.js.map +0 -1
  821. package/dist/esm/services/iadService.js.map +0 -1
  822. package/dist/esm/services/integrationService.js.map +0 -1
  823. package/dist/esm/services/pollingService.js.map +0 -1
  824. package/dist/esm/services/professionalImageQuality.js.map +0 -1
  825. package/dist/esm/services/retryService.js.map +0 -1
  826. package/dist/esm/services/sessionCredentials.js.map +0 -1
  827. package/dist/esm/services/sessionMemoryStore.js.map +0 -1
  828. package/dist/esm/services/sessionService.js.map +0 -1
  829. package/dist/esm/services/utils.js.map +0 -1
  830. package/dist/esm/types/session.js.map +0 -1
  831. package/dist/esm/utils/analysisErrors.js.map +0 -1
  832. package/dist/esm/utils/apiAnalysis.js.map +0 -1
  833. package/dist/esm/utils/conditionEvaluator.js.map +0 -1
  834. package/dist/esm/utils/countryFlags.js.map +0 -1
  835. package/dist/esm/utils/cssLoader.js.map +0 -1
  836. package/dist/esm/utils/customFieldIds.js.map +0 -1
  837. package/dist/esm/utils/customFieldValidation.js.map +0 -1
  838. package/dist/esm/utils/documentLabels.js.map +0 -1
  839. package/dist/esm/utils/europeanCountries.js.map +0 -1
  840. package/dist/esm/utils/fileConverter.js.map +0 -1
  841. package/dist/esm/utils/imageConverter.js.map +0 -1
  842. package/dist/esm/utils/imageProcessing.js.map +0 -1
  843. package/dist/esm/utils/isMobileDevice.js.map +0 -1
  844. package/dist/esm/utils/isoCountryCodes.js.map +0 -1
  845. package/dist/esm/utils/jdiCodes.js.map +0 -1
  846. package/dist/esm/utils/labelToKey.js.map +0 -1
  847. package/dist/esm/utils/listFieldUtils.js.map +0 -1
  848. package/dist/esm/utils/mimeTypes.js.map +0 -1
  849. package/dist/esm/utils/navigation.js.map +0 -1
  850. package/dist/esm/utils/renderInlineMarkdown.js.map +0 -1
  851. package/dist/esm/utils/sessionStatus.js.map +0 -1
  852. package/dist/esm/utils/userInputForm.js.map +0 -1
  853. package/dist/esm/utils/utils.js.map +0 -1
  854. package/dist/esm/utils/validationUtils.js.map +0 -1
  855. package/docs/COMPLEMENTARY_MANDATE.md +0 -22
  856. package/docs/GITLAB_BADGES_SETUP.md +0 -317
  857. package/docs/JOURNEY_NODE_BUILDER.md +0 -222
  858. package/docs/POLLING_SYSTEM.md +0 -699
  859. package/docs/README.md +0 -254
  860. package/docs/SESSION_TOKEN_MIGRATION.md +0 -52
  861. package/docs/condition-node.md +0 -651
  862. package/docs/configuration.md +0 -113
  863. package/docs/dynamic-configuration.md +0 -97
  864. package/docs/environment.md +0 -27
  865. package/docs/migration-guide.md +0 -120
  866. package/docs/multi-runs.md +0 -111
  867. package/docs/navigation-history.md +0 -163
  868. package/docs/sdk_integration_guide.md +0 -58
  869. package/eslint.config.js +0 -13
  870. package/examples/analysis-progress-example.tsx +0 -220
  871. package/examples/sdk-configuration.ts +0 -187
  872. package/examples/test-updated-urls.ts +0 -162
  873. package/examples/usage-example.tsx +0 -49
  874. package/jest.config.js +0 -32
  875. package/postcss.config.js +0 -6
  876. package/renovate.json +0 -242
  877. package/rollup.asset-url-plugin.js +0 -38
  878. package/rollup.dev.config.js +0 -65
  879. package/setupTests.js +0 -41
  880. package/tailwind.config.js +0 -11
@@ -1 +0,0 @@
1
- {"version":3,"file":"style-inject.es.js","sources":["../../../../../node_modules/style-inject/dist/style-inject.es.js"],"sourcesContent":["function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n"],"names":[],"mappings":";;;;AAAA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE;AAC/B,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;AAChC,EAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ;;AAE7B,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,EAAE,OAAO,CAAC;;AAEzD,EAAE,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtE,EAAE,IAAI,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,EAAE,KAAK,CAAC,IAAI,GAAG,UAAU;;AAEzB,EAAE,IAAI,QAAQ,KAAK,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;AAC/C,IAAI,CAAC,MAAM;AACX,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC7B,IAAI;AACJ,EAAE,CAAC,MAAM;AACT,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AAC3B,EAAE;;AAEF,EAAE,IAAI,KAAK,CAAC,UAAU,EAAE;AACxB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,GAAG,GAAG;AAClC,EAAE,CAAC,MAAM;AACT,IAAI,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AACnD,EAAE;AACF;;;;","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tslib.es6.js","sources":["../../../../node_modules/tslib/tslib.es6.js"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n"],"names":["__assign"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"I18nProvider.js","sources":["../../../../src/providers/I18nProvider.tsx"],"sourcesContent":["import React, { createContext, useContext, useEffect } from 'react';\nimport { I18nextProvider } from 'react-i18next';\nimport sdkI18n from '../i18n';\n// L'instance i18n du SDK est complètement séparée de celle de l'app\n\ninterface I18nContextType {\n language: string;\n setLanguage: (lang: string) => void;\n}\n\nconst I18nContext = createContext<I18nContextType | undefined>(undefined);\n\ninterface I18nProviderProps {\n children: React.ReactNode;\n defaultLanguage?: string;\n}\n\nexport const I18nProvider: React.FC<I18nProviderProps> = ({ \n children, \n defaultLanguage = 'fr' \n}) => {\n const [language, setLanguageState] = React.useState(defaultLanguage);\n\n useEffect(() => {\n // Utiliser l'instance SDK pour changer la langue\n sdkI18n.changeLanguage(language);\n }, [language]);\n\n const setLanguage = (lang: string) => {\n setLanguageState(lang);\n sdkI18n.changeLanguage(lang);\n };\n\n return (\n <I18nextProvider i18n={sdkI18n}>\n <I18nContext.Provider value={{ language, setLanguage }}>\n {children}\n </I18nContext.Provider>\n </I18nextProvider>\n );\n};\n\nexport const useI18nContext = () => {\n const context = useContext(I18nContext);\n if (context === undefined) {\n throw new Error('useI18nContext must be used within an I18nProvider');\n }\n return context;\n};\n"],"names":["createContext","useEffect","sdkI18n","_jsx","I18nextProvider","useContext"],"mappings":";;;;;;;AAUA,IAAM,WAAW,GAAGA,mBAAa,CAA8B,SAAS,CAAC;AAOlE,IAAM,YAAY,GAAgC,UAAC,EAGzD,EAAA;AAFC,IAAA,IAAA,QAAQ,cAAA,EACR,EAAA,GAAA,EAAA,CAAA,eAAsB,EAAtB,eAAe,GAAA,EAAA,KAAA,MAAA,GAAG,IAAI,GAAA,EAAA;AAEhB,IAAA,IAAA,EAAA,GAA+B,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAA7D,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,gBAAgB,QAAmC;AAEpE,IAAAC,eAAS,CAAC,YAAA;;AAER,QAAAC,aAAO,CAAC,cAAc,CAAC,QAAQ,CAAC;AAClC,IAAA,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAEd,IAAM,WAAW,GAAG,UAAC,IAAY,EAAA;QAC/B,gBAAgB,CAAC,IAAI,CAAC;AACtB,QAAAA,aAAO,CAAC,cAAc,CAAC,IAAI,CAAC;AAC9B,IAAA,CAAC;IAED,QACEC,cAAA,CAACC,4BAAe,EAAA,EAAC,IAAI,EAAEF,aAAO,EAAA,QAAA,EAC5BC,cAAA,CAAC,WAAW,CAAC,QAAQ,EAAA,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAA,QAAA,EAAE,WAAW,EAAA,WAAA,EAAE,EAAA,QAAA,EACnD,QAAQ,EAAA,CACY,EAAA,CACP;AAEtB;AAEO,IAAM,cAAc,GAAG,YAAA;AAC5B,IAAA,IAAM,OAAO,GAAGE,gBAAU,CAAC,WAAW,CAAC;AACvC,IAAA,IAAI,OAAO,KAAK,SAAS,EAAE;AACzB,QAAA,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC;IACvE;AACA,IAAA,OAAO,OAAO;AAChB;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"analysis.js","sources":["../../../../src/services/analysis.ts"],"sourcesContent":["import type { onUploadFiles } from \"../types/uploadFiles\";\nimport { dataURLtoFile, getMimeTypeFromDataURL } from \"./utils\";\nimport { mimeTypeToExtension } from \"../utils/mimeTypes\";\nimport { apiService } from \"./api\";\nimport type { SelfieCaptureData } from \"../types/selfie\";\nimport type {\n DocumentVideoCaptureBySide,\n DocumentVideoPreviewBySide,\n} from \"../types/documentVideo\";\nimport { getSessionMemoryUserInput } from \"./sessionMemoryStore\";\nimport {\n logDocumentUploaded,\n logSelfieCaptured,\n logAiControlled,\n logStatusModified,\n} from \"./auditTrailService\";\nimport { pollAnalysisStatus, stopPolling } from \"./pollingService\";\nimport type { PollingOptions } from \"./pollingService\";\n\n// Timeout configurations (in milliseconds)\nconst ANALYSIS_TIMEOUT = 600000; // 10 minutes for document analysis (increased for large files + ML processing)\nconst SELFIE_ANALYSIS_TIMEOUT = 600000; // 10 minutes for selfie analysis\nconst UPLOAD_TIMEOUT = 300000; // 5 minutes for file uploads\n\n// Map pour suivre les analyses en cours et éviter les doublons\nconst ongoingAnalyses = new Map<string, Promise<any>>();\n\nexport interface AnalyzeFilesOptions {\n personPhoto?: string | null;\n save?: boolean;\n incrementAnalysis?: boolean;\n forceUpload?: boolean;\n documentTypeKey?: string | null;\n requiresTwoSides?: boolean;\n enablePolling?: boolean; // Enable polling for analysis progress (default: true)\n pollingOptions?: PollingOptions; // Custom polling configuration\n collectOnly?: boolean; // Bypass AI verification — document is collected as-is\n}\n\ninterface LaunchAnalysisOptions extends AnalyzeFilesOptions {}\n\nfunction createFileName(fileURL: string, baseName: string = \"file\") {\n const mimeType = getMimeTypeFromDataURL(fileURL);\n if (!mimeType) {\n throw new Error(\"Unable to determine MIME type from file URL\");\n }\n\n const ext = mimeTypeToExtension(mimeType);\n const safeBase = baseName.replace(/\\.+$/, \"\");\n return ext ? `${safeBase}.${ext}` : safeBase;\n}\n\nfunction normalizeDocumentTypeKey(\n rawType?: string | null,\n fallback: string = \"document\",\n) {\n if (!rawType) {\n return fallback;\n }\n\n const trimmed = rawType.trim();\n if (!trimmed) {\n return fallback;\n }\n\n const withUnderscores = trimmed\n .replace(/([a-z0-9])([A-Z])/g, \"$1_$2\")\n .replace(/[\\s-]+/g, \"_\")\n .replace(/[^a-zA-Z0-9_]/g, \"_\")\n .replace(/_+/g, \"_\")\n .replace(/^_+|_+$/g, \"\")\n .toLowerCase();\n\n return withUnderscores || fallback;\n}\n\n// Fonction pour créer une clé unique pour identifier une analyse\nfunction createAnalysisKey(\n sessionId: string,\n files: onUploadFiles,\n documentTypeId: string,\n): string {\n const frontHash = files.front ? files.front.substring(0, 50) : \"no-front\";\n const backHash = files.back ? files.back.substring(0, 50) : \"no-back\";\n return `${sessionId}-${documentTypeId}-${frontHash}-${backHash}`;\n}\n\nasync function launchAnalysis(\n sessionId: string,\n nodeId: string,\n files: onUploadFiles,\n documentTypeId: string | null,\n options: LaunchAnalysisOptions = {},\n) {\n if (!sessionId || !files) {\n throw new Error(\"Invalid parameters for analysis\");\n }\n\n const {\n personPhoto = null,\n save = true,\n incrementAnalysis = true,\n forceUpload = false,\n documentTypeKey = null,\n requiresTwoSides,\n collectOnly = false,\n } = options;\n\n const formData = new FormData();\n formData.append(\"sessionId\", sessionId);\n formData.append(\"nodeId\", nodeId);\n formData.append(\"save\", String(save));\n\n const userInput = getSessionMemoryUserInput(sessionId);\n if (Object.keys(userInput).length > 0) {\n const fullName = `${userInput.firstName || \"\"} ${\n userInput.lastName || \"\"\n }`.trim();\n formData.append(\"name\", fullName || \"Unknown\");\n\n formData.append(\"firstName\", userInput.firstName || \"\");\n formData.append(\"lastName\", userInput.lastName || \"\");\n formData.append(\"birthDate\", userInput.birthDate || \"\");\n formData.append(\"countryCode\", userInput.countryCode || \"\");\n }\n\n const fileTypes: Record<string, string> = {};\n const normalizedDocumentType = normalizeDocumentTypeKey(\n documentTypeKey ?? documentTypeId ?? undefined,\n );\n const hyphenDocumentType = normalizedDocumentType.replace(/_/g, \"-\");\n const appendSide =\n typeof requiresTwoSides === \"boolean\"\n ? requiresTwoSides\n : Boolean(files.back);\n\n if (files.front) {\n const frontBaseName = appendSide\n ? `${normalizedDocumentType}_front`\n : normalizedDocumentType;\n const frontFileName = createFileName(files.front, frontBaseName);\n const frontFile = dataURLtoFile(files.front, frontFileName);\n formData.append(\"files\", frontFile, frontFileName);\n\n fileTypes[frontFileName] = appendSide\n ? `${hyphenDocumentType}-front`\n : hyphenDocumentType;\n }\n\n if (files.back) {\n const backBaseName = `${normalizedDocumentType}_back`;\n const backFileName = createFileName(files.back, backBaseName);\n const backFile = dataURLtoFile(files.back, backFileName);\n formData.append(\"files\", backFile, backFileName);\n\n fileTypes[backFileName] = `${hyphenDocumentType}-back`;\n }\n\n formData.append(\"fileTypes\", JSON.stringify(fileTypes));\n formData.append(\"incrementAnalysis\", String(incrementAnalysis));\n formData.append(\"forceUpload\", String(forceUpload));\n\n if (documentTypeId) {\n formData.append(\"documentTemplateId\", documentTypeId);\n }\n\n if (personPhoto) {\n formData.append(\"personPhoto\", personPhoto);\n }\n\n if (collectOnly) {\n formData.append(\"collectOnly\", \"true\");\n }\n\n console.debug(\"FormData prepared for analysis:\", {\n sessionId,\n documentTypeId,\n files: Object.keys(fileTypes),\n save,\n incrementAnalysis,\n forceUpload,\n collectOnly,\n });\n return formData;\n}\n\nexport async function analyzeFiles(\n sessionId: string,\n nodeId: string,\n files: onUploadFiles,\n documentTypeId: string,\n options: AnalyzeFilesOptions = {},\n): Promise<any> {\n // Validate required parameters\n if (!sessionId) {\n throw new Error(\"Missing sessionId: A valid session ID is required.\");\n }\n if (!files || Object.keys(files).length === 0) {\n throw new Error(\n \"Missing files: At least one file must be provided for analysis.\",\n );\n }\n\n const {\n personPhoto = null,\n save = true,\n incrementAnalysis = true,\n forceUpload = false,\n documentTypeKey = null,\n requiresTwoSides,\n enablePolling = true,\n pollingOptions = {},\n collectOnly = false,\n } = options;\n\n // Pour les retry, on ne force pas l'upload mais on écrase l'analyse existante\n const isRetry = !incrementAnalysis && !forceUpload;\n\n // Créer une clé unique pour cette analyse\n const analysisKey = createAnalysisKey(sessionId, files, documentTypeId);\n\n // Vérifier si une analyse identique est déjà en cours\n if (ongoingAnalyses.has(analysisKey) && !isRetry) {\n return ongoingAnalyses.get(analysisKey);\n }\n\n // Helper function for retry logic with exponential backoff\n async function submitAnalysisWithRetry(\n formData: FormData,\n maxAttempts: number = 3,\n ) {\n let lastError: any;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const rawClient = apiService.getRawClient();\n\n const response = await rawClient.post(\n `/session/sdk/${sessionId}/analysis`,\n formData,\n {\n timeout: ANALYSIS_TIMEOUT,\n },\n );\n\n return response;\n } catch (error: any) {\n lastError = error;\n\n // Check if it's a network error (likely backend didn't respond in time)\n if (\n error.code === \"ERR_NETWORK\" ||\n error.message?.includes(\"CORS request did not succeed\")\n ) {\n console.warn(\n `⚠️ Network error on attempt ${attempt}: ${error.message}`,\n );\n\n if (attempt < maxAttempts) {\n // Exponential backoff: wait 2s, 4s, 8s...\n const waitTime = Math.pow(2, attempt) * 1000;\n console.log(`⏳ Retrying in ${waitTime / 1000}s...`);\n await new Promise((resolve) => setTimeout(resolve, waitTime));\n continue;\n }\n }\n\n // For other errors, don't retry\n throw error;\n }\n }\n\n throw lastError;\n }\n\n // Créer la promesse d'analyse et la stocker\n const analysisPromise = (async () => {\n try {\n const formData = await launchAnalysis(\n sessionId,\n nodeId,\n files,\n documentTypeId,\n {\n personPhoto,\n save,\n incrementAnalysis: isRetry ? false : incrementAnalysis,\n forceUpload: isRetry ? true : forceUpload,\n documentTypeKey,\n requiresTwoSides,\n collectOnly,\n },\n );\n\n await logDocumentUploaded(sessionId, {\n documentTypeId: documentTypeId || \"unknown\",\n ...(documentTypeKey ? { documentTypeKey } : {}),\n hasFrontImage: !!files.front,\n hasBackImage: !!files.back,\n });\n\n // Submit with automatic retry on network errors\n const response = await submitAnalysisWithRetry(formData);\n\n // Wrap response to match ApiResponse type\n const wrappedResponse = {\n data: response.data,\n success: true,\n status: response.status,\n };\n\n await logAiControlled(\n sessionId,\n {\n analysisResult: response.data.status || \"unknown\",\n documentTypeId: documentTypeId || \"unknown\",\n },\n response.data.clientInfoId || undefined,\n );\n\n if (!wrappedResponse.success) {\n throw new Error(`Analysis failed: ${response.data}`);\n }\n\n // Start polling for analysis progress if enabled\n if (enablePolling) {\n try {\n const pollConfig: PollingOptions = {\n ...pollingOptions,\n };\n\n const pollingResult = await pollAnalysisStatus(sessionId, pollConfig);\n\n return pollingResult;\n } catch (pollError) {\n console.warn(\n \"⚠️ Polling error (analysis may still be processing):\",\n pollError,\n );\n // Don't throw - polling error shouldn't fail the analysis submission\n // The backend is still processing even if polling fails\n return response.data;\n }\n }\n\n return response.data;\n } catch (error) {\n console.error(\"❌ Analysis failed:\", error);\n // Stop any ongoing polling on error\n stopPolling();\n throw error;\n } finally {\n // Nettoyer la promesse de la map une fois terminée\n ongoingAnalyses.delete(analysisKey);\n }\n })();\n\n // Stocker la promesse pour éviter les appels simultanés\n ongoingAnalyses.set(analysisKey, analysisPromise);\n\n return analysisPromise;\n}\n\nexport async function analyzeSelfie(\n sessionId: string,\n selfieFile: SelfieCaptureData,\n selfiePhoto: string,\n nodeId?: string,\n): Promise<any> {\n console.log(\"🤳 Starting selfie analysis for session:\", sessionId);\n console.log(\"� File size:\", selfieFile.media.size, \"bytes\");\n\n const formData = new FormData();\n formData.append(\"file\", selfieFile.media, \"selfie.mp4\");\n formData.append(\"photo\", selfiePhoto);\n if (selfieFile.metadata?.trim()) {\n formData.append(\"selfie-metadata\", selfieFile.metadata);\n }\n if (nodeId) formData.append(\"nodeId\", nodeId);\n\n try {\n console.log(\"🚀 Sending selfie to UNISSEY API...\");\n\n const response = await apiService.post(\n `/session/unissey/${sessionId}/analyze`,\n formData,\n {\n timeout: SELFIE_ANALYSIS_TIMEOUT,\n },\n );\n\n // Si la réponse API indique un succès, traiter la réponse Unissey\n if (response.success && response.data) {\n console.log(\"🎉 Unissey analysis completed - checking results...\");\n\n // response.data contient directement la réponse Unissey avec status, message, data\n const unisseyResponse = response.data;\n\n // Vérifier si Unissey a répondu avec succès\n if (\n unisseyResponse.status === 200 &&\n (unisseyResponse.message === \"success\" ||\n unisseyResponse.message === \"ok\")\n ) {\n console.log(\"✅ Unissey returned success status\");\n\n // Utiliser les données réelles de la réponse Unissey\n const unisseyData = unisseyResponse.data;\n\n // Vérifier si la comparaison faciale a un niveau de confiance élevé\n const faceComparison = unisseyData.details?.face_comparison;\n const faceComparisonDisabled =\n unisseyData.face_comparison_disabled === true;\n const isHighConfidence = faceComparison?.confidence_level === \"high\";\n const isMatch = !faceComparisonDisabled &&\n unisseyData.is_match && faceComparison?.result === \"match\";\n\n // is_genuine est basé sur la confiance élevée de la comparaison faciale\n const isGenuine = faceComparisonDisabled\n ? unisseyData.is_genuine !== false\n : isHighConfidence && isMatch;\n\n // Log selfie captured in audit trail\n try {\n const analysisResponse = await apiService.get(\n `/session/sdk/${sessionId}`,\n );\n if (analysisResponse.data && analysisResponse.data.analysisId) {\n await logSelfieCaptured(\n sessionId,\n analysisResponse.data.clientInfoId || undefined,\n );\n\n // Log AI control with selfie analysis results\n await logAiControlled(\n sessionId,\n {\n selfieAnalysisResult: isGenuine ? \"genuine\" : \"not_genuine\",\n isMatch: faceComparisonDisabled\n ? \"not_performed\"\n : isMatch\n ? \"match\"\n : \"no_match\",\n confidenceLevel: faceComparison?.confidence_level || \"unknown\",\n },\n analysisResponse.data.clientInfoId || undefined,\n );\n\n await logStatusModified(\n sessionId,\n {\n selfieAnalysisResult: isGenuine ? \"genuine\" : \"not_genuine\",\n isMatch: faceComparisonDisabled\n ? \"not_performed\"\n : isMatch\n ? \"match\"\n : \"no_match\",\n confidenceLevel: faceComparison?.confidence_level || \"unknown\",\n },\n analysisResponse.data.clientInfoId || undefined,\n );\n }\n } catch (err) {\n console.error(\"Failed to log selfie capture in audit trail:\", err);\n // Non-blocking error - continue analysis\n }\n\n // Retourner la structure attendue par l'UI\n return {\n success: true,\n data: {\n ...unisseyData,\n is_genuine: isGenuine, // Basé sur confidence_level === \"high\"\n },\n };\n } else {\n console.error(\n \"❌ Unissey returned error status:\",\n unisseyResponse.status,\n unisseyResponse.message,\n );\n throw new Error(\n `Unissey analysis failed: ${\n unisseyResponse.message || \"Unknown Unissey error\"\n }`,\n );\n }\n }\n\n // Gestion des erreurs spécifiques API\n const errorMessage =\n response.data?.message || response.data || \"Unknown error\";\n console.error(\"❌ API call failed:\", errorMessage);\n throw new Error(`Face comparison analysis failed: ${errorMessage}`);\n } catch (error: any) {\n console.error(\"💥 Analysis error:\", error);\n\n // Améliorer le message d'erreur pour l'UI\n if (error.response?.data?.message) {\n throw new Error(`Analysis failed: ${error.response.data.message}`);\n } else if (error.message) {\n throw error; // Garder le message d'erreur original si déjà formaté\n } else {\n throw new Error(\n \"Face comparison analysis failed due to an unexpected error\",\n );\n }\n }\n}\n\nexport async function uploadConvertedIdCardImage(\n sessionId: string,\n file: File,\n nodeId?: string,\n): Promise<any> {\n if (!sessionId || !file) {\n throw new Error(\"Invalid parameters for uploading converted ID card image\");\n }\n\n // rename file to converted_id_card.png\n const renamedFile = new File([file], \"converted_id_card.png\", {\n type: file.type,\n });\n\n const formData = new FormData();\n formData.append(\"file\", renamedFile, renamedFile.name);\n\n try {\n console.log(\n `🚀 Uploading converted ID card image for session: ${sessionId}`,\n );\n const response = await apiService.post(\n `/session/sdk/${sessionId}/converted_id_card.png${\n nodeId ? `?nodeId=${encodeURIComponent(nodeId)}` : ''\n }`,\n formData,\n {\n timeout: UPLOAD_TIMEOUT,\n },\n );\n console.log(\"✅ Upload response:\", response);\n return response.data;\n } catch (error) {\n console.error(\"❌ Upload error:\", error);\n throw new Error(\"Failed to upload converted ID card image\");\n }\n}\n\n/**\n * Analyzes a document video captured with Unissey DOC_VIDEO preset.\n * Sends the video file and thumbnail to the backend for document verification.\n *\n * @param sessionId - Unique identifier for the current session\n * @param nodeId - Identifier for the current node in the journey\n * @param videoData - Document video capture data containing media blob and metadata\n * @param thumbnail - Base64 thumbnail extracted from the video\n * @param documentTemplateId - Template ID for the document type being verified\n * @returns Analysis response from the backend\n */\nexport async function analyzeDocumentVideo(\n sessionId: string,\n nodeId: string,\n videoData: DocumentVideoCaptureBySide,\n previews: DocumentVideoPreviewBySide,\n documentTemplateId: string,\n options: {\n documentType?: string;\n requiresTwoSides?: boolean;\n enablePolling?: boolean;\n pollingOptions?: PollingOptions;\n } = {},\n): Promise<any> {\n if (!videoData.recto || !previews.recto) {\n throw new Error(\"Missing recto video or preview\");\n }\n\n const normalizedDocumentType = normalizeDocumentTypeKey(\n options.documentType ?? documentTemplateId ?? undefined,\n );\n const hyphenDocumentType = normalizedDocumentType.replace(/_/g, \"-\");\n const appendSide =\n typeof options.requiresTwoSides === \"boolean\"\n ? options.requiresTwoSides\n : Boolean(videoData.verso || previews.verso);\n\n const frontBaseName = appendSide\n ? `${normalizedDocumentType}_front`\n : normalizedDocumentType;\n const backBaseName = `${normalizedDocumentType}_back`;\n\n const previewFrontFileName = `${frontBaseName}.jpg`;\n const previewFrontFile = dataURLtoFile(previews.recto, previewFrontFileName);\n const previewBackFileName = `${backBaseName}.jpg`;\n const previewBackFile = previews.verso\n ? dataURLtoFile(previews.verso, previewBackFileName)\n : null;\n\n const formData = new FormData();\n\n formData.append(\n \"videoFront\",\n videoData.recto.media,\n \"document_video_recto.mp4\",\n );\n if (videoData.verso) {\n formData.append(\n \"videoBack\",\n videoData.verso.media,\n \"document_video_verso.mp4\",\n );\n }\n\n formData.append(\"previewFront\", previewFrontFile, previewFrontFileName);\n if (previewBackFile) {\n formData.append(\"previewBack\", previewBackFile, previewBackFileName);\n }\n\n const fileTypes: Record<string, string> = {};\n fileTypes[previewFrontFileName] = appendSide\n ? `${hyphenDocumentType}-front`\n : hyphenDocumentType;\n if (previewBackFile) {\n fileTypes[previewBackFileName] = `${hyphenDocumentType}-back`;\n }\n\n formData.append(\"fileTypes\", JSON.stringify(fileTypes));\n formData.append(\"sessionId\", sessionId);\n formData.append(\"nodeId\", nodeId);\n formData.append(\"documentTemplateId\", documentTemplateId);\n formData.append(\"documentType\", options.documentType || \"\");\n formData.append(\"requiresTwoSides\", String(appendSide));\n formData.append(\"save\", \"true\");\n\n const { enablePolling = true, pollingOptions = {} } = options;\n\n try {\n console.log(\"🚀 Sending document video to document-video API...\");\n const response = await apiService.post(\n `/session/sdk/${sessionId}/document-video`,\n formData,\n { timeout: ANALYSIS_TIMEOUT },\n );\n\n if (enablePolling) {\n try {\n const pollConfig: PollingOptions = {\n ...pollingOptions,\n defaultValue: {\n sessionId,\n status: \"processing\",\n progress: 50,\n currentStep: \"processing\",\n message: \"Document analysis in progress\",\n analysisId: null,\n startedAt: new Date().toISOString(),\n completedAt: null,\n error: null,\n },\n };\n const pollingResult = await pollAnalysisStatus(sessionId, pollConfig);\n return pollingResult;\n } catch (pollError) {\n console.warn(\n \"⚠️ Polling error (document-video may still be processing):\",\n pollError,\n );\n }\n }\n\n if (response?.success || response?.data?.success) {\n return response.data ?? response;\n }\n\n const errorMessage = response?.data?.message || \"Unknown error\";\n throw new Error(`Document video analysis failed: ${errorMessage}`);\n } catch (error: any) {\n stopPolling();\n if (error.response?.data?.message) {\n throw new Error(`Analysis failed: ${error.response.data.message}`);\n }\n if (error.message) {\n throw error;\n }\n throw new Error(\n \"Document video analysis failed due to an unexpected error\",\n );\n }\n}\n"],"names":["getMimeTypeFromDataURL","mimeTypeToExtension","__awaiter","getSessionMemoryUserInput","dataURLtoFile","apiService","logDocumentUploaded","logAiControlled","__assign","pollAnalysisStatus","stopPolling","logSelfieCaptured","logStatusModified"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","sources":["../../../../src/services/api.ts"],"sourcesContent":["import { credentialForRequest } from './sessionCredentials';\nimport axios, { AxiosError } from \"axios\";\nimport type {\n AxiosInstance,\n AxiosResponse,\n InternalAxiosRequestConfig,\n AxiosRequestConfig,\n} from \"axios\";\nimport { API_BASE_URL } from \"../config/env\";\n\n// Types pour window global\ndeclare global {\n interface Window {\n VITE_API_BASE_URL?: string;\n }\n}\n\n// Helpers\nconst normalizeBaseURL = (url: string | undefined | null): string => {\n const DEFAULT_BASE_URL = \"https://dev2.datakeen.co/backend\";\n if (!url) {\n return DEFAULT_BASE_URL;\n }\n\n const trimmed = url.trim();\n if (!trimmed) {\n return DEFAULT_BASE_URL;\n }\n\n try {\n const parsed = new URL(trimmed);\n const cleanedPath = parsed.pathname.replace(/\\/+$/, \"\");\n const hasBackendSegment = /\\/backend(\\/|$)/.test(cleanedPath);\n const normalizedPath = hasBackendSegment\n ? cleanedPath.replace(/\\/backend(\\/*.*)?$/, \"/backend\")\n : `${cleanedPath}/backend`;\n\n const finalPath = normalizedPath.startsWith(\"/\")\n ? normalizedPath\n : `/${normalizedPath}`;\n\n const normalized = `${parsed.origin}${finalPath}`.replace(/\\/+$/, \"\");\n return normalized;\n } catch {\n const withoutTrailingSlash = trimmed.replace(/\\/+$/, \"\");\n if (/\\/backend(\\/|$)/.test(withoutTrailingSlash)) {\n return withoutTrailingSlash.replace(/\\/backend(\\/*.*)?$/, \"/backend\");\n }\n return `${withoutTrailingSlash}/backend`;\n }\n};\n\n// Configuration globale pour l'URL de base\nlet globalBaseURL: string | null = null;\n\n// Fonction pour définir l'URL de base globalement\nexport const configureApiBaseURL = (baseURL: string): void => {\n const normalizedBaseURL = normalizeBaseURL(baseURL);\n globalBaseURL = normalizedBaseURL;\n // Mettre à jour l'instance existante si elle existe\n if (apiService) {\n apiService.updateBaseURL(normalizedBaseURL);\n }\n};\n\n// Fonction pour récupérer l'URL de base dynamiquement\nexport const getBaseURL = (): string => {\n // Priorité 1: URL configurée dynamiquement\n if (globalBaseURL) {\n return globalBaseURL;\n }\n\n // Priorité 2: Variable d'environnement du projet hôte (si disponible via window)\n if (typeof window !== \"undefined\" && window.VITE_API_BASE_URL) {\n return normalizeBaseURL(window.VITE_API_BASE_URL);\n }\n\n // Priorité 3: Variable d'environnement du SDK via wrapper\n if (API_BASE_URL) {\n return normalizeBaseURL(API_BASE_URL);\n }\n\n // Priorité 4: URL par défaut (dev2 pour développement)\n return normalizeBaseURL(\"https://dev2.datakeen.co/backend\");\n};\n\n// Types pour la configuration de l'API\nexport interface ApiConfig {\n baseURL: string;\n timeout?: number;\n retryAttempts?: number;\n retryDelay?: number;\n headers?: Record<string, string>;\n}\n\n// Types pour les réponses\nexport interface ApiResponse<T = any> {\n data: T;\n message?: string;\n success: boolean;\n status: number;\n}\n\nexport interface ApiError {\n message: string;\n status?: number;\n code?: string;\n details?: any;\n}\n\nexport class ApiService {\n private client: AxiosInstance;\n private config: ApiConfig;\n\n constructor(config: ApiConfig) {\n this.config = config;\n\n this.client = axios.create({\n baseURL: config.baseURL,\n timeout: config.timeout || 30000,\n headers: {\n Accept: \"application/json\",\n ...config.headers,\n },\n });\n\n this.setupInterceptors();\n }\n\n private setupInterceptors(): void {\n // Intercepteur de requête\n this.client.interceptors.request.use(\n (config: InternalAxiosRequestConfig) => {\n const token = credentialForRequest(config.url ?? \"\");\n if (token) config.headers.set(\"X-Session-Token\", token);\n return config;\n },\n (error: AxiosError) => {\n return Promise.reject(this.handleError(error));\n }\n );\n\n // Intercepteur de réponse pour gérer les erreurs\n this.client.interceptors.response.use(\n (response: AxiosResponse) => {\n return response;\n },\n (error: AxiosError) => {\n return Promise.reject(this.handleError(error));\n }\n );\n }\n\n private handleError(error: AxiosError): ApiError {\n let apiError: ApiError = {\n message: \"Une erreur inattendue s'est produite\",\n status: 500,\n };\n\n if (error.response) {\n // Erreur de réponse du serveur\n const { status, data } = error.response;\n apiError = {\n message: (data as any)?.message || `Erreur ${status}`,\n status,\n code: (data as any)?.code,\n details: data,\n };\n } else if (error.code === \"ECONNABORTED\") {\n // Timeout\n apiError = {\n message: \"Délai d'attente dépassé\",\n code: \"TIMEOUT_ERROR\",\n };\n } else if (error.request) {\n // Erreur réseau - Log plus de détails pour debug\n console.error(\"❌ Network error details:\", {\n message: error.message,\n code: error.code,\n config: {\n url: error.config?.url,\n method: error.config?.method,\n baseURL: error.config?.baseURL,\n timeout: error.config?.timeout,\n },\n });\n \n // Vérifier si c'est une erreur CORS\n if (error.message.includes(\"Network Error\") || error.message.includes(\"CORS\")) {\n apiError = {\n message: \"Erreur CORS ou serveur inaccessible. Vérifiez que le serveur backend est démarré et autorise les requêtes depuis votre domaine.\",\n code: \"CORS_OR_NETWORK_ERROR\",\n };\n } else {\n apiError = {\n message: \"Erreur de connexion réseau\",\n code: \"NETWORK_ERROR\",\n };\n }\n }\n\n console.error(\"❌ API Error:\", apiError);\n return apiError;\n }\n\n // Plus de retryRequest, shouldRetry, ni delay : chaque appel Axios ne sera fait qu'une seule fois\n\n // Méthodes publiques pour les requêtes HTTP\n async get<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.client.get<T>(url, config);\n return {\n data: response.data,\n success: true,\n status: response.status,\n };\n }\n\n async post<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.client.post<T>(url, data, config);\n return {\n data: response.data,\n success: true,\n status: response.status,\n };\n }\n\n async put<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.client.put<T>(url, data, config);\n return {\n data: response.data,\n success: true,\n status: response.status,\n };\n }\n\n async patch<T = any>(\n url: string,\n data?: any,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.client.patch<T>(url, data, config);\n return {\n data: response.data,\n success: true,\n status: response.status,\n };\n }\n\n async delete<T = any>(\n url: string,\n config?: AxiosRequestConfig\n ): Promise<ApiResponse<T>> {\n const response = await this.client.delete<T>(url, config);\n return {\n data: response.data,\n success: true,\n status: response.status,\n };\n }\n\n // Méthodes utilitaires\n setDefaultHeader(key: string, value: string): void {\n this.client.defaults.headers.common[key] = value;\n }\n\n removeDefaultHeader(key: string): void {\n delete this.client.defaults.headers.common[key];\n }\n\n // Méthode pour créer une nouvelle instance avec une configuration différente\n createInstance(config: Partial<ApiConfig>): ApiService {\n return new ApiService({ ...this.config, ...config });\n }\n\n // Accès à l'instance Axios pour des cas spéciaux\n getRawClient(): AxiosInstance {\n return this.client;\n }\n\n // Méthode pour mettre à jour dynamiquement l'URL de base\n updateBaseURL(baseURL: string): void {\n this.config.baseURL = baseURL;\n this.client.defaults.baseURL = baseURL;\n }\n}\n\n// In test environment, mock axios to avoid real HTTP requests\nif (\n typeof process !== \"undefined\" &&\n process.env &&\n process.env.NODE_ENV === \"test\"\n) {\n // @ts-ignore\n global.axios = {\n create: () => ({\n get: jest.fn(() =>\n Promise.resolve({ data: {}, status: 200, success: true })\n ),\n post: jest.fn(() =>\n Promise.resolve({ data: {}, status: 200, success: true })\n ),\n put: jest.fn(() =>\n Promise.resolve({ data: {}, status: 200, success: true })\n ),\n patch: jest.fn(() =>\n Promise.resolve({ data: {}, status: 200, success: true })\n ),\n delete: jest.fn(() =>\n Promise.resolve({ data: {}, status: 200, success: true })\n ),\n defaults: { headers: { common: {} } },\n interceptors: {\n request: { use: jest.fn() },\n response: { use: jest.fn() },\n },\n }),\n };\n}\n\n// Factory pour créer une instance\nexport const createApiService = (config: ApiConfig): ApiService => {\n return new ApiService(config);\n};\n\n// Instance par défaut (à configurer selon vos besoins)\nexport const apiService = createApiService({\n baseURL: getBaseURL(),\n timeout: 30000,\n});\n\nexport { normalizeBaseURL };\n"],"names":["API_BASE_URL","__assign","credentialForRequest"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"auditTrailService.js","sources":["../../../../src/services/auditTrailService.ts"],"sourcesContent":["/**\n * Audit Trail Service\n *\n * Service for interacting with the Datakeen Audit Trail API.\n * Handles creating and retrieving audit trail entries.\n */\n\nimport { getSessionCredential } from \"./sessionCredentials\";\nimport { apiService } from \"./api\";\nimport { fetchSessionById } from \"./sessionService\";\n\n/**\n * Event types for audit trail entries.\n * These must match the backend AuditTrailEventType enum.\n */\nexport enum AuditTrailEventType {\n STATUS_MODIFIED = \"STATUS_MODIFIED\",\n INFORMATION_MODIFIED = \"INFORMATION_MODIFIED\",\n AI_CONTROLED = \"AI_CONTROLED\",\n SESSION_STARTED = \"SESSION_STARTED\",\n SESSION_ENDED = \"SESSION_ENDED\",\n SESSION_ABANDONED = \"SESSION_ABANDONED\",\n DOCUMENT_UPLOADED = \"DOCUMENT_UPLOADED\",\n SELFIE_CAPTURED = \"SELFIE_CAPTURED\",\n FORM_SENDED_LINK = \"FORM_SENDED_LINK\",\n SIGNATURE_DOCUMENT_OPENED = \"SIGNATURE_DOCUMENT_OPENED\",\n DOCUMENT_SIGNED = \"DOCUMENT_SIGNED\",\n FORM_VALIDATED = \"FORM_VALIDATED\",\n DOCUMENT_TYPE_SELECTED = \"DOCUMENT_TYPE_SELECTED\",\n CAPTURE_MODE_SELECTED = \"CAPTURE_MODE_SELECTED\",\n PHOTO_CAPTURED = \"PHOTO_CAPTURED\",\n PHOTOS_VALIDATED = \"PHOTOS_VALIDATED\",\n DOCUMENT_LOADED = \"DOCUMENT_LOADED\",\n DOCUMENTS_VALIDATED = \"DOCUMENTS_VALIDATED\",\n VERIFICATION_COMPLETED = \"VERIFICATION_COMPLETED\",\n}\n\n/**\n * Interface for audit trail entry creation request data\n */\nexport interface CreateAuditTrailRequest {\n eventType: AuditTrailEventType;\n analysisId: string;\n documentsName?: Record<string, any>;\n userInputs?: Record<string, any>;\n metadata?: Record<string, any>;\n clientInfoId?: string;\n userId?: string;\n}\n\n/**\n * Interface for audit trail entry response data\n */\nexport interface AuditTrailEntry {\n id: string;\n eventType: AuditTrailEventType;\n documentsName?: Record<string, any>;\n userInputs?: Record<string, any>;\n analysisId: string;\n clientInfoId?: string;\n userId?: string;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Creates an audit trail entry and associates it with an analysis\n *\n * @param auditTrailData - The audit trail data to create\n * @returns The created audit trail entry\n */\nexport const createAuditTrailEntry = async (\n auditTrailData: CreateAuditTrailRequest\n): Promise<AuditTrailEntry> => {\n try {\n const payload = {\n ...auditTrailData,\n toSession: true,\n };\n const token = getSessionCredential(auditTrailData.analysisId);\n const response = token\n ? await apiService.post(\"/session/audit-trail\", payload, { headers: { \"X-Session-Token\": token } })\n : await apiService.post(\"/session/audit-trail\", payload);\n return response.data;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * Fetches all audit trail entries for a specific analysis\n *\n * @param analysisId - The ID of the analysis\n * @returns Array of audit trail entries\n */\nexport const getAuditTrailsByAnalysisId = async (\n analysisId: string\n): Promise<AuditTrailEntry[]> => {\n try {\n const response = await apiService.get(\n `/session/audit-trail/analysis/${analysisId}`\n );\n return response.data;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * Fetches all audit trail entries for a specific session\n *\n * @param sessionId - The ID of the session\n * @returns Array of audit trail entries\n */\nexport const getAuditTrailsBySessionId = async (\n sessionId: string\n): Promise<AuditTrailEntry[]> => {\n try {\n const response = await apiService.get(\n `/session/audit-trail/session/${sessionId}`\n );\n return response.data;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * Creates an audit trail entry when a session is started\n *\n * @param analysisId - The ID of the analysis associated with the session\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logSessionStarted = async (\n analysisId: string,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.SESSION_STARTED,\n analysisId,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a session is ended\n *\n * @param analysisId - The ID of the analysis associated with the session\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logSessionEnded = async (\n analysisId: string,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.SESSION_ENDED,\n analysisId,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a document is uploaded\n *\n * @param analysisId - The ID of the analysis\n * @param documentName - The name or details of the document\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logDocumentUploaded = async (\n analysisId: string,\n documentName: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.DOCUMENT_UPLOADED,\n analysisId,\n documentsName: documentName,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a selfie is captured\n *\n * @param analysisId - The ID of the analysis\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logSelfieCaptured = async (\n analysisId: string,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.SELFIE_CAPTURED,\n analysisId,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when user information is modified\n *\n * @param analysisId - The ID of the analysis\n * @param userInputs - The user inputs that were modified\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logInformationModified = async (\n analysisId: string,\n userInputs: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.INFORMATION_MODIFIED,\n analysisId,\n userInputs,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a session status is modified\n *\n * @param analysisId - The ID of the analysis\n * @param status - The new status value\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logStatusModified = async (\n analysisId: string,\n status: any,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.STATUS_MODIFIED,\n analysisId,\n userInputs: { status },\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when an AI control is performed\n *\n * @param analysisId - The ID of the analysis\n * @param aiResults - The results of the AI control\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logAiControlled = async (\n analysisId: string,\n aiResults: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.AI_CONTROLED,\n analysisId,\n userInputs: aiResults,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a form link is sent\n *\n * @param analysisId - The ID of the analysis\n * @param recipientInfo - Information about the link recipient\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logFormSendedLink = async (\n analysisId: string,\n recipientInfo: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.FORM_SENDED_LINK,\n analysisId,\n userInputs: recipientInfo,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a signature document is opened\n *\n * @param analysisId - The ID of the analysis\n * @param documentInfo - Information about the document being signed\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logSignatureDocumentOpened = async (\n analysisId: string,\n documentInfo?: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.SIGNATURE_DOCUMENT_OPENED,\n analysisId,\n userInputs: documentInfo || {},\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a document is signed\n *\n * @param analysisId - The ID of the analysis\n * @param signatureInfo - Information about the signature\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logDocumentSigned = async (\n analysisId: string,\n signatureInfo?: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.DOCUMENT_SIGNED,\n analysisId,\n userInputs: signatureInfo || {},\n clientInfoId,\n });\n};\n\n// ─── APP3-1763 — Nouveaux events de parcours ─────────────────────────────────\n// Convention : sessionId est passé dans le champ analysisId (backend route via toSession:true).\n// Tous les appels sont fire-and-forget — les callers ne doivent PAS await ces fonctions.\n\nexport const logFormValidated = (\n sessionId: string,\n userInputs?: Record<string, any>,\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.FORM_VALIDATED,\n analysisId: sessionId,\n userInputs: userInputs || {},\n clientInfoId,\n }).catch(() => {});\n};\n\nexport const logDocumentTypeSelected = (\n sessionId: string,\n documentType: string,\n documentLabel?: string,\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.DOCUMENT_TYPE_SELECTED,\n analysisId: sessionId,\n metadata: { documentType, documentLabel: documentLabel ?? documentType },\n clientInfoId,\n }).catch(() => {});\n};\n\nexport const logCaptureModeSelected = (\n sessionId: string,\n captureMode: \"picture\" | \"upload\",\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.CAPTURE_MODE_SELECTED,\n analysisId: sessionId,\n metadata: { captureMode },\n clientInfoId,\n }).catch(() => {});\n};\n\nexport const logPhotoCaptured = (\n sessionId: string,\n side: \"recto\" | \"verso\",\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.PHOTO_CAPTURED,\n analysisId: sessionId,\n metadata: { side },\n clientInfoId,\n }).catch(() => {});\n};\n\nexport const logPhotosValidated = (\n sessionId: string,\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.PHOTOS_VALIDATED,\n analysisId: sessionId,\n clientInfoId,\n }).catch(() => {});\n};\n\nexport const logDocumentLoaded = (\n sessionId: string,\n side: \"recto\" | \"verso\",\n documentType?: string,\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.DOCUMENT_LOADED,\n analysisId: sessionId,\n metadata: { side, ...(documentType ? { documentType } : {}) },\n clientInfoId,\n }).catch(() => {});\n};\n\nexport const logDocumentsValidated = (\n sessionId: string,\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.DOCUMENTS_VALIDATED,\n analysisId: sessionId,\n clientInfoId,\n }).catch(() => {});\n};\n"],"names":["AuditTrailEventType","__awaiter","getSessionCredential","apiService"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"cameraService.js","sources":["../../../../src/services/cameraService.ts"],"sourcesContent":["import type { CameraFacingMode } from \"../types/camera\";\nimport { professionalImageQuality } from \"./professionalImageQuality\";\nimport type { QualityAnalysis } from \"./professionalImageQuality\";\n\n// Permit to enable development mode to test without a camera\nconst DEV_MODE = false; // import.meta.env.DEV;\n// Default image path for development mode\nconst DEFAULT_TEST_IMAGE = \"/mock-id-card.jpeg\";\n\ntype CaptureMethod = \"imageCapture\" | \"canvas\" | \"mock\";\n\nexport interface CameraStartOptions {\n facingMode?: CameraFacingMode;\n idealResolution?: {\n width?: number;\n height?: number;\n };\n deviceId?: string;\n advancedConstraints?: MediaTrackConstraints[];\n preferImageCapture?: boolean;\n}\n\nexport interface CameraStartResult {\n success: boolean;\n error?: string;\n settings?: MediaTrackSettings;\n captureMethod?: CaptureMethod;\n}\n\nexport interface DocumentCropArea {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface CaptureDocumentOptions {\n facingMode?: CameraFacingMode;\n format?: \"png\" | \"jpeg\";\n jpegQuality?: number;\n preferImageCapture?: boolean;\n}\n\nexport interface CaptureDocumentResult {\n dataUrl: string;\n method: CaptureMethod;\n analysis?: QualityAnalysis;\n sourceDimensions?: { width: number; height: number };\n cropDimensions?: { width: number; height: number };\n}\n\nconst DEFAULT_RESOLUTION = {\n width: 4096,\n height: 3072,\n};\n\n// Aligned with imageProcessing.ts's MAX_WIDTH (2048): the app downsizes every\n// captured image to that width right after capture (DocumentCheck.tsx ->\n// resizeAfterCapture), so synthetically upscaling beyond it here only adds a\n// multi-second canvas encode (observed up to several seconds on mobile) for\n// pixels that get thrown away a moment later. Previously targeted 4800x3200\n// with up to 4x upscale — this caused the capture button to appear \"stuck\"\n// for a few seconds after the flash, with no real quality benefit since the\n// oversized image never survives the post-capture resize anyway.\nconst QUALITY_REQUIREMENTS = {\n minArea: 1_600_000, // ~ 1600x1000, same proportion to targetArea as before\n targetArea: 2048 * 1536,\n minLongSide: 2048,\n};\n\nconst supportsImageCapture = (): boolean =>\n typeof window !== \"undefined\" && \"ImageCapture\" in window;\n\ninterface CanvasSource {\n source: CanvasImageSource;\n width: number;\n height: number;\n cleanup?: () => void;\n}\n\nexport class CameraService {\n private stream: MediaStream | null = null;\n private videoTrack: MediaStreamTrack | null = null;\n private imageCapture: ImageCapture | null = null;\n private devMode: boolean = DEV_MODE;\n private mockImagePath: string = DEFAULT_TEST_IMAGE;\n private captureMethod: CaptureMethod = \"canvas\";\n private lastTrackSettings: MediaTrackSettings | null = null;\n private startingPromise: Promise<CameraStartResult> | null = null;\n\n private async startMockCamera(\n videoElement: HTMLVideoElement | null\n ): Promise<CameraStartResult> {\n try {\n if (!videoElement) {\n return { success: false, error: \"Élément vidéo non disponible\" };\n }\n\n const img = new Image();\n img.src = this.mockImagePath;\n\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve();\n img.onerror = () =>\n reject(\n new Error(`Impossible de charger l'image: ${this.mockImagePath}`)\n );\n });\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext(\"2d\");\n\n if (!ctx) {\n return { success: false, error: \"Contexte du canvas non disponible\" };\n }\n\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\n const stream: MediaStream = canvas.captureStream(30);\n this.stream = stream;\n this.captureMethod = \"mock\";\n videoElement.srcObject = stream;\n\n return { success: true, captureMethod: \"mock\" };\n } catch (err) {\n console.error(\"Erreur lors de la création du flux vidéo mock:\", err);\n return {\n success: false,\n error: `Erreur lors de la création du flux vidéo mock: ${\n err instanceof Error ? err.message : String(err)\n }`,\n };\n }\n }\n\n async startCamera(\n videoElement: HTMLVideoElement | null,\n options: CameraStartOptions = {}\n ): Promise<CameraStartResult> {\n if (this.devMode) {\n return this.startMockCamera(videoElement);\n }\n\n if (!videoElement) {\n return { success: false, error: \"Élément vidéo non disponible\" };\n }\n\n if (!navigator?.mediaDevices?.getUserMedia) {\n return {\n success: false,\n error: \"La capture vidéo n'est pas supportée sur cet appareil.\",\n };\n }\n\n // Si un startCamera est déjà en cours, attendre qu'il se termine plutôt que d'en lancer un second\n if (this.startingPromise) {\n return this.startingPromise;\n }\n\n this.startingPromise = this._doStartCamera(videoElement!, options);\n try {\n return await this.startingPromise;\n } finally {\n this.startingPromise = null;\n }\n }\n\n private async _doStartCamera(\n videoElement: HTMLVideoElement,\n options: CameraStartOptions\n ): Promise<CameraStartResult> {\n const facingMode = options.facingMode ?? \"environment\";\n const preferImageCapture = options.preferImageCapture ?? true;\n const desiredWidth = options.idealResolution?.width ?? DEFAULT_RESOLUTION.width;\n const desiredHeight = options.idealResolution?.height ?? DEFAULT_RESOLUTION.height;\n\n try {\n // Close any existing stream before opening a new one\n if (this.stream) {\n this.stream.getTracks().forEach((t) => t.stop());\n this.stream = null;\n this.videoTrack = null;\n this.imageCapture = null;\n }\n\n // Ask directly for the desired resolution as an \"ideal\" constraint — the\n // browser negotiates the closest resolution the device actually supports\n // in this single call. There is no separate probe stream: opening a\n // camera stream just to read its capabilities and closing it right after\n // doubled the hardware-open latency and could trigger a second\n // permission prompt on some mobile browsers.\n const videoConstraints: MediaTrackConstraints = {\n facingMode,\n width: { ideal: desiredWidth },\n height: { ideal: desiredHeight },\n };\n\n if (options.deviceId) {\n videoConstraints.deviceId = { exact: options.deviceId };\n }\n\n if (options.advancedConstraints?.length) {\n videoConstraints.advanced = options.advancedConstraints;\n }\n\n const stream = await navigator.mediaDevices.getUserMedia({\n video: videoConstraints,\n });\n\n this.stream = stream;\n this.videoTrack = stream.getVideoTracks()[0] ?? null;\n this.lastTrackSettings = this.videoTrack?.getSettings() ?? null;\n\n console.debug(\"[CameraService] Camera opened\", {\n desired: { width: desiredWidth, height: desiredHeight },\n actual: this.lastTrackSettings,\n });\n\n // Step 3: Apply continuous autofocus via applyConstraints after stream is open.\n // Done separately so a rejection (unsupported constraint) never kills the stream.\n if (this.videoTrack) {\n try {\n await this.videoTrack.applyConstraints({\n advanced: [{ focusMode: \"continuous\" } as MediaTrackConstraints],\n });\n } catch {\n // Device doesn't support focusMode — stream stays open, autofocus just won't activate\n }\n }\n\n if (supportsImageCapture() && this.videoTrack && preferImageCapture) {\n try {\n this.imageCapture = new ImageCapture(this.videoTrack);\n this.captureMethod = \"imageCapture\";\n } catch (error) {\n console.warn(\n \"ImageCapture API indisponible, fallback sur capture canvas\",\n error\n );\n this.imageCapture = null;\n this.captureMethod = \"canvas\";\n }\n } else {\n this.imageCapture = null;\n this.captureMethod = \"canvas\";\n }\n\n videoElement.srcObject = stream;\n\n await this.waitForVideoReady(videoElement);\n\n return {\n success: true,\n settings: this.lastTrackSettings ?? undefined,\n captureMethod: this.captureMethod,\n };\n } catch (err) {\n console.error(\"Erreur lors de l'accès à la caméra:\", err);\n\n let errorMessage =\n \"Une erreur inconnue s'est produite lors de l'accès à la caméra.\";\n\n if (err instanceof DOMException) {\n if (err.name === \"NotFoundError\") {\n errorMessage = \"Aucune caméra n'a été détectée sur votre appareil.\";\n } else if (err.name === \"NotAllowedError\") {\n errorMessage =\n \"L'accès à la caméra a été refusé. Veuillez autoriser l'accès dans les paramètres de votre navigateur.\";\n } else {\n errorMessage = `Impossible d'accéder à la caméra: ${err.message}`;\n }\n }\n\n return { success: false, error: errorMessage };\n }\n }\n\n async captureDocument(\n videoElement: HTMLVideoElement | null,\n cropArea?: DocumentCropArea | null,\n options: CaptureDocumentOptions = {}\n ): Promise<CaptureDocumentResult> {\n if (!videoElement) {\n throw new Error(\"Élément vidéo requis pour capturer le document\");\n }\n\n if (!videoElement.videoWidth || !videoElement.videoHeight) {\n throw new Error(\n \"La vidéo n'est pas prête. Impossible de déterminer les dimensions.\"\n );\n }\n\n const format = options.format ?? \"jpeg\";\n const jpegQuality = options.jpegQuality ?? 0.95;\n const facingMode = options.facingMode ?? \"environment\";\n const preferImageCapture = options.preferImageCapture ?? true;\n\n const effectiveCropArea: DocumentCropArea = cropArea ?? {\n x: 0,\n y: 0,\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n };\n\n console.debug(\"[CameraService] captureDocument request\", {\n format,\n jpegQuality,\n facingMode,\n preferImageCapture,\n cropArea: effectiveCropArea,\n videoDimensions: {\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n },\n });\n\n if (this.imageCapture && preferImageCapture) {\n try {\n const result = await this.captureWithImageCapture(\n videoElement,\n effectiveCropArea,\n {\n format,\n jpegQuality,\n facingMode,\n }\n );\n\n if (result) {\n console.debug(\"[CameraService] captureDocument via ImageCapture\", {\n cropArea: effectiveCropArea,\n result,\n });\n return result;\n }\n } catch (error) {\n console.warn(\n \"Capture haute résolution impossible, fallback sur capture vidéo\",\n error\n );\n }\n }\n\n const fallback = professionalImageQuality.autoEnhanceImage(\n videoElement,\n effectiveCropArea,\n {\n outputFormat: format,\n jpegQuality,\n flipHorizontal: facingMode === \"user\",\n ...QUALITY_REQUIREMENTS,\n }\n );\n\n console.debug(\"[CameraService] captureDocument via video fallback\", {\n cropArea: effectiveCropArea,\n analysis: fallback.analysis,\n method: this.captureMethod,\n sourceDimensions: {\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n },\n });\n\n return {\n dataUrl: fallback.dataUrl,\n analysis: fallback.analysis,\n method: this.captureMethod,\n sourceDimensions: {\n width: videoElement.videoWidth,\n height: videoElement.videoHeight,\n },\n cropDimensions: {\n width: effectiveCropArea.width,\n height: effectiveCropArea.height,\n },\n };\n }\n\n captureFrame(\n videoElement: HTMLVideoElement | null,\n canvasElement: HTMLCanvasElement | null\n ): string | null {\n if (!videoElement || !canvasElement || !videoElement.videoWidth) {\n return null;\n }\n\n const ctx = canvasElement.getContext(\"2d\");\n if (!ctx) return null;\n\n canvasElement.width = videoElement.videoWidth;\n canvasElement.height = videoElement.videoHeight;\n\n ctx.drawImage(\n videoElement,\n 0,\n 0,\n canvasElement.width,\n canvasElement.height\n );\n\n return canvasElement.toDataURL(\"image/jpeg\");\n }\n\n stopCamera() {\n if (this.stream) {\n this.stream.getTracks().forEach((track) => track.stop());\n this.stream = null;\n }\n\n this.videoTrack = null;\n this.imageCapture = null;\n this.lastTrackSettings = null;\n this.captureMethod = this.devMode ? \"mock\" : \"canvas\";\n }\n\n setDevMode(enabled: boolean): void {\n this.devMode = enabled;\n }\n\n setMockImage(imagePath: string): void {\n this.mockImagePath = imagePath;\n }\n\n isDevModeEnabled(): boolean {\n return this.devMode;\n }\n\n getCurrentCaptureMethod(): CaptureMethod {\n return this.captureMethod;\n }\n\n private async waitForVideoReady(video: HTMLVideoElement): Promise<void> {\n // Explicitly call play() — required on some Android devices even with autoplay attribute\n try {\n await video.play();\n } catch (playError) {\n console.warn(\"[CameraService] video.play() failed, relying on autoplay\", playError);\n }\n\n if (\n video.readyState >= HTMLMediaElement.HAVE_CURRENT_DATA &&\n video.videoWidth > 0\n ) {\n return;\n }\n\n await new Promise<void>((resolve) => {\n const TIMEOUT_MS = 5000;\n\n const onReady = () => {\n clearTimeout(timeout);\n video.removeEventListener(\"loadeddata\", onReady);\n video.removeEventListener(\"playing\", onReady);\n resolve();\n };\n\n // Listen for both events — whichever fires first\n video.addEventListener(\"loadeddata\", onReady, { once: true });\n video.addEventListener(\"playing\", onReady, { once: true });\n\n // Safety timeout to avoid hanging indefinitely\n const timeout = setTimeout(() => {\n video.removeEventListener(\"loadeddata\", onReady);\n video.removeEventListener(\"playing\", onReady);\n console.warn(\"[CameraService] waitForVideoReady timed out after\", TIMEOUT_MS, \"ms\");\n resolve();\n }, TIMEOUT_MS);\n });\n }\n\n private async captureWithImageCapture(\n videoElement: HTMLVideoElement,\n cropArea: DocumentCropArea,\n options: Required<Pick<CaptureDocumentOptions, \"format\" | \"jpegQuality\">> & {\n facingMode: CameraFacingMode;\n }\n ): Promise<CaptureDocumentResult | null> {\n if (!this.imageCapture) {\n return null;\n }\n\n // Use the actual stream resolution for takePhoto to ensure consistency\n const photoSettings: PhotoSettings = {};\n if (this.lastTrackSettings?.width && this.lastTrackSettings?.height) {\n photoSettings.imageWidth = this.lastTrackSettings.width;\n photoSettings.imageHeight = this.lastTrackSettings.height;\n console.debug(\"[CameraService] takePhoto with explicit resolution\", photoSettings);\n }\n\n const blob = await this.imageCapture.takePhoto(photoSettings);\n const { source, width, height, cleanup } = await this.loadCanvasSourceFromBlob(\n blob\n );\n\n try {\n const ratioX = width / videoElement.videoWidth;\n const ratioY = height / videoElement.videoHeight;\n\n if (!isFinite(ratioX) || !isFinite(ratioY)) {\n throw new Error(\"Ratios de capture invalides\");\n }\n\n const scaled = this.scaleCropArea(cropArea, ratioX, ratioY, width, height);\n\n const analysis = professionalImageQuality.analyzeQuality(\n scaled.width,\n scaled.height,\n QUALITY_REQUIREMENTS\n );\n\n const outputWidth = Math.max(\n 1,\n Math.round(scaled.width * analysis.recommendedScale)\n );\n const outputHeight = Math.max(\n 1,\n Math.round(scaled.height * analysis.recommendedScale)\n );\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = outputWidth;\n canvas.height = outputHeight;\n\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n throw new Error(\"Impossible de créer le contexte de rendu\");\n }\n\n ctx.imageSmoothingEnabled = true;\n ctx.imageSmoothingQuality = \"high\";\n\n if (options.facingMode === \"user\") {\n ctx.translate(outputWidth, 0);\n ctx.scale(-1, 1);\n }\n\n ctx.drawImage(\n source,\n scaled.x,\n scaled.y,\n scaled.width,\n scaled.height,\n 0,\n 0,\n outputWidth,\n outputHeight\n );\n\n const dataUrl =\n options.format === \"jpeg\"\n ? canvas.toDataURL(\"image/jpeg\", options.jpegQuality)\n : canvas.toDataURL(\"image/png\");\n\n console.debug(\"[CameraService] ImageCapture crop applied\", {\n originalDimensions: { width, height },\n crop: scaled,\n output: { width: outputWidth, height: outputHeight },\n analysis,\n });\n\n return {\n dataUrl,\n analysis,\n method: \"imageCapture\",\n sourceDimensions: { width, height },\n cropDimensions: {\n width: scaled.width,\n height: scaled.height,\n },\n };\n } finally {\n if (source instanceof ImageBitmap && typeof source.close === \"function\") {\n source.close();\n }\n\n cleanup?.();\n }\n }\n\n private async loadCanvasSourceFromBlob(blob: Blob): Promise<CanvasSource> {\n if (typeof createImageBitmap === \"function\") {\n try {\n const bitmap = await createImageBitmap(blob, {\n imageOrientation: \"from-image\",\n } as ImageBitmapOptions);\n\n return {\n source: bitmap,\n width: bitmap.width,\n height: bitmap.height,\n cleanup: () => {\n if (typeof bitmap.close === \"function\") {\n bitmap.close();\n }\n },\n };\n } catch (error) {\n console.warn(\"createImageBitmap a échoué, fallback sur HTMLImageElement\", error);\n }\n }\n\n const objectUrl = URL.createObjectURL(blob);\n\n const image = await new Promise<HTMLImageElement>((resolve, reject) => {\n const img = new Image();\n img.onload = () => resolve(img);\n img.onerror = (event) => reject(event);\n img.src = objectUrl;\n });\n\n return {\n source: image,\n width: image.naturalWidth,\n height: image.naturalHeight,\n cleanup: () => URL.revokeObjectURL(objectUrl),\n };\n }\n\n private scaleCropArea(\n cropArea: DocumentCropArea,\n ratioX: number,\n ratioY: number,\n maxWidth: number,\n maxHeight: number\n ): { x: number; y: number; width: number; height: number } {\n const scaledX = Math.max(0, Math.round(cropArea.x * ratioX));\n const scaledY = Math.max(0, Math.round(cropArea.y * ratioY));\n const scaledWidth = Math.min(\n maxWidth - scaledX,\n Math.round(cropArea.width * ratioX)\n );\n const scaledHeight = Math.min(\n maxHeight - scaledY,\n Math.round(cropArea.height * ratioY)\n );\n\n if (scaledWidth <= 0 || scaledHeight <= 0) {\n throw new Error(\"Zone de capture invalide après scaling\");\n }\n\n return {\n x: scaledX,\n y: scaledY,\n width: scaledWidth,\n height: scaledHeight,\n };\n }\n}\n\nexport const cameraService = new CameraService();\n"],"names":["__awaiter","professionalImageQuality","__assign"],"mappings":";;;;;AAIA;AACA,IAAM,QAAQ,GAAG,KAAK,CAAC;AACvB;AACA,IAAM,kBAAkB,GAAG,oBAAoB;AA4C/C,IAAM,kBAAkB,GAAG;AACzB,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,MAAM,EAAE,IAAI;CACb;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAM,oBAAoB,GAAG;IAC3B,OAAO,EAAE,OAAS;IAClB,UAAU,EAAE,IAAI,GAAG,IAAI;AACvB,IAAA,WAAW,EAAE,IAAI;CAClB;AAED,IAAM,oBAAoB,GAAG,YAAA;AAC3B,IAAA,OAAA,OAAO,MAAM,KAAK,WAAW,IAAI,cAAc,IAAI,MAAM;AAAzD,CAAyD;AAS3D,IAAA,aAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,aAAA,GAAA;QACU,IAAA,CAAA,MAAM,GAAuB,IAAI;QACjC,IAAA,CAAA,UAAU,GAA4B,IAAI;QAC1C,IAAA,CAAA,YAAY,GAAwB,IAAI;QACxC,IAAA,CAAA,OAAO,GAAY,QAAQ;QAC3B,IAAA,CAAA,aAAa,GAAW,kBAAkB;QAC1C,IAAA,CAAA,aAAa,GAAkB,QAAQ;QACvC,IAAA,CAAA,iBAAiB,GAA8B,IAAI;QACnD,IAAA,CAAA,eAAe,GAAsC,IAAI;IAkjBnE;IAhjBgB,aAAA,CAAA,SAAA,CAAA,eAAe,GAA7B,UACE,YAAqC,EAAA;;;;;;;;wBAGnC,IAAI,CAAC,YAAY,EAAE;4BACjB,OAAA,CAAA,CAAA,aAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAA;wBAClE;wBAEM,KAAA,GAAM,IAAI,KAAK,EAAE;AACvB,wBAAA,KAAG,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa;AAE5B,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,OAAO,CAAO,UAAC,OAAO,EAAE,MAAM,EAAA;gCACtC,KAAG,CAAC,MAAM,GAAG,YAAA,EAAM,OAAA,OAAO,EAAE,CAAA,CAAT,CAAS;gCAC5B,KAAG,CAAC,OAAO,GAAG,YAAA;oCACZ,OAAA,MAAM,CACJ,IAAI,KAAK,CAAC,iCAAA,CAAA,MAAA,CAAkC,KAAI,CAAC,aAAa,CAAE,CAAC,CAClE;AAFD,gCAAA,CAEC;AACL,4BAAA,CAAC,CAAC,CAAA;;AANF,wBAAA,EAAA,CAAA,IAAA,EAME;AAEI,wBAAA,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,wBAAA,MAAM,CAAC,KAAK,GAAG,KAAG,CAAC,KAAK;AACxB,wBAAA,MAAM,CAAC,MAAM,GAAG,KAAG,CAAC,MAAM;AACpB,wBAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;wBAEnC,IAAI,CAAC,GAAG,EAAE;4BACR,OAAA,CAAA,CAAA,aAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAA;wBACvE;AAEA,wBAAA,GAAG,CAAC,SAAS,CAAC,KAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;AAE/C,wBAAA,MAAM,GAAgB,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;AACpD,wBAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,wBAAA,IAAI,CAAC,aAAa,GAAG,MAAM;AAC3B,wBAAA,YAAY,CAAC,SAAS,GAAG,MAAM;wBAE/B,OAAA,CAAA,CAAA,aAAO,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAA;;;AAE/C,wBAAA,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,KAAG,CAAC;wBACpE,OAAA,CAAA,CAAA,aAAO;AACL,gCAAA,OAAO,EAAE,KAAK;AACd,gCAAA,KAAK,EAAE,2DAAA,CAAA,MAAA,CACL,KAAG,YAAY,KAAK,GAAG,KAAG,CAAC,OAAO,GAAG,MAAM,CAAC,KAAG,CAAC,CAChD;6BACH,CAAA;;;;;AAEJ,IAAA,CAAA;AAEK,IAAA,aAAA,CAAA,SAAA,CAAA,WAAW,GAAjB,UAAA,cAAA,EAAA;AACE,QAAA,OAAAA,mBAAA,CAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,UAAA,YAAqC,EACrC,OAAgC,EAAA;;AAAhC,YAAA,IAAA,OAAA,KAAA,MAAA,EAAA,EAAA,OAAA,GAAA,EAAgC,CAAA,CAAA;;;;AAEhC,wBAAA,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,4BAAA,OAAA,CAAA,CAAA,aAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAA;wBAC3C;wBAEA,IAAI,CAAC,YAAY,EAAE;4BACjB,OAAA,CAAA,CAAA,aAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAA;wBAClE;AAEA,wBAAA,IAAI,EAAC,CAAA,EAAA,GAAA,SAAS,aAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,YAAY,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,CAAA,EAAE;4BAC1C,OAAA,CAAA,CAAA,aAAO;AACL,oCAAA,OAAO,EAAE,KAAK;AACd,oCAAA,KAAK,EAAE,wDAAwD;iCAChE,CAAA;wBACH;;AAGA,wBAAA,IAAI,IAAI,CAAC,eAAe,EAAE;4BACxB,OAAA,CAAA,CAAA,aAAO,IAAI,CAAC,eAAe,CAAA;wBAC7B;wBAEA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,YAAa,EAAE,OAAO,CAAC;;;;wBAEzD,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,eAAe,CAAA;AAAjC,oBAAA,KAAA,CAAA,EAAA,OAAA,CAAA,CAAA,aAAO,SAA0B,CAAA;;AAEjC,wBAAA,IAAI,CAAC,eAAe,GAAG,IAAI;;;;;;AAE9B,IAAA,CAAA;AAEa,IAAA,aAAA,CAAA,SAAA,CAAA,cAAc,GAA5B,UACE,YAA8B,EAC9B,OAA2B,EAAA;;;;;;;AAErB,wBAAA,UAAU,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,aAAa;AAChD,wBAAA,kBAAkB,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AACvD,wBAAA,YAAY,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,kBAAkB,CAAC,KAAK;AACzE,wBAAA,aAAa,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,kBAAkB,CAAC,MAAM;;;;;AAIhF,wBAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,4BAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,IAAI,EAAE,CAAA,CAAR,CAAQ,CAAC;AAChD,4BAAA,IAAI,CAAC,MAAM,GAAG,IAAI;AAClB,4BAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,4BAAA,IAAI,CAAC,YAAY,GAAG,IAAI;wBAC1B;AAQM,wBAAA,gBAAgB,GAA0B;AAC9C,4BAAA,UAAU,EAAA,UAAA;AACV,4BAAA,KAAK,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;AAC9B,4BAAA,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;yBACjC;AAED,wBAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;4BACpB,gBAAgB,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE;wBACzD;AAEA,wBAAA,IAAI,MAAA,OAAO,CAAC,mBAAmB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,EAAE;AACvC,4BAAA,gBAAgB,CAAC,QAAQ,GAAG,OAAO,CAAC,mBAAmB;wBACzD;AAEe,wBAAA,OAAA,CAAA,CAAA,YAAM,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC;AACvD,gCAAA,KAAK,EAAE,gBAAgB;AACxB,6BAAA,CAAC,CAAA;;AAFI,wBAAA,MAAM,GAAG,EAAA,CAAA,IAAA,EAEb;AAEF,wBAAA,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,wBAAA,IAAI,CAAC,UAAU,GAAG,CAAA,EAAA,GAAA,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AACpD,wBAAA,IAAI,CAAC,iBAAiB,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AAE/D,wBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE;4BAC7C,OAAO,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE;4BACvD,MAAM,EAAE,IAAI,CAAC,iBAAiB;AAC/B,yBAAA,CAAC;6BAIE,IAAI,CAAC,UAAU,EAAf,OAAA,CAAA,CAAA,YAAA,CAAA,CAAA;;;;AAEA,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;AACrC,gCAAA,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAA2B,CAAC;AACjE,6BAAA,CAAC,CAAA;;AAFF,wBAAA,EAAA,CAAA,IAAA,EAEE;;;;;;wBAMN,IAAI,oBAAoB,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,kBAAkB,EAAE;AACnE,4BAAA,IAAI;gCACF,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;AACrD,gCAAA,IAAI,CAAC,aAAa,GAAG,cAAc;4BACrC;4BAAE,OAAO,KAAK,EAAE;AACd,gCAAA,OAAO,CAAC,IAAI,CACV,4DAA4D,EAC5D,KAAK,CACN;AACD,gCAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,gCAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;4BAC/B;wBACF;6BAAO;AACL,4BAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,4BAAA,IAAI,CAAC,aAAa,GAAG,QAAQ;wBAC/B;AAEA,wBAAA,YAAY,CAAC,SAAS,GAAG,MAAM;AAE/B,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAA;;AAA1C,wBAAA,EAAA,CAAA,IAAA,EAA0C;wBAE1C,OAAA,CAAA,CAAA,aAAO;AACL,gCAAA,OAAO,EAAE,IAAI;AACb,gCAAA,QAAQ,EAAE,CAAA,EAAA,GAAA,IAAI,CAAC,iBAAiB,mCAAI,SAAS;gCAC7C,aAAa,EAAE,IAAI,CAAC,aAAa;6BAClC,CAAA;;;AAED,wBAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAG,CAAC;wBAErD,YAAY,GACd,iEAAiE;AAEnE,wBAAA,IAAI,KAAG,YAAY,YAAY,EAAE;AAC/B,4BAAA,IAAI,KAAG,CAAC,IAAI,KAAK,eAAe,EAAE;gCAChC,YAAY,GAAG,oDAAoD;4BACrE;AAAO,iCAAA,IAAI,KAAG,CAAC,IAAI,KAAK,iBAAiB,EAAE;gCACzC,YAAY;AACV,oCAAA,uGAAuG;4BAC3G;iCAAO;AACL,gCAAA,YAAY,GAAG,mDAAA,CAAA,MAAA,CAAqC,KAAG,CAAC,OAAO,CAAE;4BACnE;wBACF;wBAEA,OAAA,CAAA,CAAA,aAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAA;;;;;AAEjD,IAAA,CAAA;AAEK,IAAA,aAAA,CAAA,SAAA,CAAA,eAAe,GAArB,UAAA,cAAA,EAAA,UAAA,EAAA;sEACE,YAAqC,EACrC,QAAkC,EAClC,OAAoC,EAAA;;;AAApC,YAAA,IAAA,OAAA,KAAA,MAAA,EAAA,EAAA,OAAA,GAAA,EAAoC,CAAA,CAAA;;;;wBAEpC,IAAI,CAAC,YAAY,EAAE;AACjB,4BAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC;wBACnE;wBAEA,IAAI,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;AACzD,4BAAA,MAAM,IAAI,KAAK,CACb,oEAAoE,CACrE;wBACH;AAEM,wBAAA,MAAM,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,MAAM;AACjC,wBAAA,WAAW,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AACzC,wBAAA,UAAU,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,aAAa;AAChD,wBAAA,kBAAkB,GAAG,CAAA,EAAA,GAAA,OAAO,CAAC,kBAAkB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,IAAI;AAEvD,wBAAA,iBAAiB,GAAqB,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAR,QAAQ,GAAI;AACtD,4BAAA,CAAC,EAAE,CAAC;AACJ,4BAAA,CAAC,EAAE,CAAC;4BACJ,KAAK,EAAE,YAAY,CAAC,UAAU;4BAC9B,MAAM,EAAE,YAAY,CAAC,WAAW;yBACjC;AAED,wBAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE;AACvD,4BAAA,MAAM,EAAA,MAAA;AACN,4BAAA,WAAW,EAAA,WAAA;AACX,4BAAA,UAAU,EAAA,UAAA;AACV,4BAAA,kBAAkB,EAAA,kBAAA;AAClB,4BAAA,QAAQ,EAAE,iBAAiB;AAC3B,4BAAA,eAAe,EAAE;gCACf,KAAK,EAAE,YAAY,CAAC,UAAU;gCAC9B,MAAM,EAAE,YAAY,CAAC,WAAW;AACjC,6BAAA;AACF,yBAAA,CAAC;AAEE,wBAAA,IAAA,EAAA,IAAI,CAAC,YAAY,IAAI,kBAAkB,CAAA,EAAvC,OAAA,CAAA,CAAA,YAAA,CAAA,CAAA;;;;AAEe,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,uBAAuB,CAC/C,YAAY,EACZ,iBAAiB,EACjB;AACE,gCAAA,MAAM,EAAA,MAAA;AACN,gCAAA,WAAW,EAAA,WAAA;AACX,gCAAA,UAAU,EAAA,UAAA;AACX,6BAAA,CACF,CAAA;;AARK,wBAAA,MAAM,GAAG,EAAA,CAAA,IAAA,EAQd;wBAED,IAAI,MAAM,EAAE;AACV,4BAAA,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE;AAC9D,gCAAA,QAAQ,EAAE,iBAAiB;AAC7B,gCAAA,MAAM,EAAA,MAAA;AACP,6BAAA,CAAC;AACF,4BAAA,OAAA,CAAA,CAAA,aAAO,MAAM,CAAA;wBACf;;;;AAEA,wBAAA,OAAO,CAAC,IAAI,CACV,iEAAiE,EACjE,OAAK,CACN;;;wBAIC,QAAQ,GAAGC,iDAAwB,CAAC,gBAAgB,CACxD,YAAY,EACZ,iBAAiB,EAAAC,kBAAA,CAAA,EAEf,YAAY,EAAE,MAAM,EACpB,WAAW,EAAA,WAAA,EACX,cAAc,EAAE,UAAU,KAAK,MAAM,EAAA,EAClC,oBAAoB,CAAA,CAE1B;AAED,wBAAA,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE;AAClE,4BAAA,QAAQ,EAAE,iBAAiB;4BAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;4BAC3B,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,4BAAA,gBAAgB,EAAE;gCAChB,KAAK,EAAE,YAAY,CAAC,UAAU;gCAC9B,MAAM,EAAE,YAAY,CAAC,WAAW;AACjC,6BAAA;AACF,yBAAA,CAAC;wBAEF,OAAA,CAAA,CAAA,aAAO;gCACL,OAAO,EAAE,QAAQ,CAAC,OAAO;gCACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gCAC3B,MAAM,EAAE,IAAI,CAAC,aAAa;AAC1B,gCAAA,gBAAgB,EAAE;oCAChB,KAAK,EAAE,YAAY,CAAC,UAAU;oCAC9B,MAAM,EAAE,YAAY,CAAC,WAAW;AACjC,iCAAA;AACD,gCAAA,cAAc,EAAE;oCACd,KAAK,EAAE,iBAAiB,CAAC,KAAK;oCAC9B,MAAM,EAAE,iBAAiB,CAAC,MAAM;AACjC,iCAAA;6BACF,CAAA;;;;AACF,IAAA,CAAA;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,YAAY,GAAZ,UACE,YAAqC,EACrC,aAAuC,EAAA;QAEvC,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE;AAC/D,YAAA,OAAO,IAAI;QACb;QAEA,IAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1C,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,IAAI;AAErB,QAAA,aAAa,CAAC,KAAK,GAAG,YAAY,CAAC,UAAU;AAC7C,QAAA,aAAa,CAAC,MAAM,GAAG,YAAY,CAAC,WAAW;AAE/C,QAAA,GAAG,CAAC,SAAS,CACX,YAAY,EACZ,CAAC,EACD,CAAC,EACD,aAAa,CAAC,KAAK,EACnB,aAAa,CAAC,MAAM,CACrB;AAED,QAAA,OAAO,aAAa,CAAC,SAAS,CAAC,YAAY,CAAC;IAC9C,CAAC;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,UAAU,GAAV,YAAA;AACE,QAAA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,UAAC,KAAK,EAAA,EAAK,OAAA,KAAK,CAAC,IAAI,EAAE,CAAA,CAAZ,CAAY,CAAC;AACxD,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI;QACpB;AAEA,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI;AACtB,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;AACxB,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI;AAC7B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,QAAQ;IACvD,CAAC;IAED,aAAA,CAAA,SAAA,CAAA,UAAU,GAAV,UAAW,OAAgB,EAAA;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;IACxB,CAAC;IAED,aAAA,CAAA,SAAA,CAAA,YAAY,GAAZ,UAAa,SAAiB,EAAA;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;IAChC,CAAC;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,gBAAgB,GAAhB,YAAA;QACE,OAAO,IAAI,CAAC,OAAO;IACrB,CAAC;AAED,IAAA,aAAA,CAAA,SAAA,CAAA,uBAAuB,GAAvB,YAAA;QACE,OAAO,IAAI,CAAC,aAAa;IAC3B,CAAC;IAEa,aAAA,CAAA,SAAA,CAAA,iBAAiB,GAA/B,UAAgC,KAAuB,EAAA;;;;;;;AAGnD,wBAAA,OAAA,CAAA,CAAA,YAAM,KAAK,CAAC,IAAI,EAAE,CAAA;;AAAlB,wBAAA,EAAA,CAAA,IAAA,EAAkB;;;;AAElB,wBAAA,OAAO,CAAC,IAAI,CAAC,0DAA0D,EAAE,WAAS,CAAC;;;AAGrF,wBAAA,IACE,KAAK,CAAC,UAAU,IAAI,gBAAgB,CAAC,iBAAiB;AACtD,4BAAA,KAAK,CAAC,UAAU,GAAG,CAAC,EACpB;4BACA,OAAA,CAAA,CAAA,YAAA;wBACF;AAEA,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,OAAO,CAAO,UAAC,OAAO,EAAA;gCAC9B,IAAM,UAAU,GAAG,IAAI;AAEvB,gCAAA,IAAM,OAAO,GAAG,YAAA;oCACd,YAAY,CAAC,OAAO,CAAC;AACrB,oCAAA,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC;AAChD,oCAAA,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;AAC7C,oCAAA,OAAO,EAAE;AACX,gCAAA,CAAC;;AAGD,gCAAA,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC7D,gCAAA,KAAK,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;gCAG1D,IAAM,OAAO,GAAG,UAAU,CAAC,YAAA;AACzB,oCAAA,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC;AAChD,oCAAA,KAAK,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC;oCAC7C,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,UAAU,EAAE,IAAI,CAAC;AACnF,oCAAA,OAAO,EAAE;gCACX,CAAC,EAAE,UAAU,CAAC;AAChB,4BAAA,CAAC,CAAC,CAAA;;AArBF,wBAAA,EAAA,CAAA,IAAA,EAqBE;;;;;AACH,IAAA,CAAA;AAEa,IAAA,aAAA,CAAA,SAAA,CAAA,uBAAuB,GAArC,UACE,YAA8B,EAC9B,QAA0B,EAC1B,OAEC,EAAA;;;;;;;AAED,wBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,4BAAA,OAAA,CAAA,CAAA,aAAO,IAAI,CAAA;wBACb;wBAGM,aAAa,GAAkB,EAAE;AACvC,wBAAA,IAAI,CAAA,CAAA,EAAA,GAAA,IAAI,CAAC,iBAAiB,0CAAE,KAAK,MAAI,CAAA,EAAA,GAAA,IAAI,CAAC,iBAAiB,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,CAAA,EAAE;4BACnE,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK;4BACvD,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM;AACzD,4BAAA,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,aAAa,CAAC;wBACpF;wBAEa,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;;AAAvD,wBAAA,IAAI,GAAG,EAAA,CAAA,IAAA,EAAgD;AAClB,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,CAAC,wBAAwB,CAC5E,IAAI,CACL,CAAA;;AAFK,wBAAA,EAAA,GAAqC,EAAA,CAAA,IAAA,EAE1C,EAFO,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,KAAK,GAAA,EAAA,CAAA,KAAA,EAAE,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA;AAItC,wBAAA,IAAI;AACI,4BAAA,MAAM,GAAG,KAAK,GAAG,YAAY,CAAC,UAAU;AACxC,4BAAA,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC,WAAW;AAEhD,4BAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1C,gCAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC;4BAChD;AAEM,4BAAA,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;AAEpE,4BAAA,QAAQ,GAAGD,iDAAwB,CAAC,cAAc,CACtD,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,MAAM,EACb,oBAAoB,CACrB;4BAEK,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CACrD;4BACK,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,CAAC,EACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CACtD;AAEK,4BAAA,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,4BAAA,MAAM,CAAC,KAAK,GAAG,WAAW;AAC1B,4BAAA,MAAM,CAAC,MAAM,GAAG,YAAY;AAEtB,4BAAA,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;4BACnC,IAAI,CAAC,GAAG,EAAE;AACR,gCAAA,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC;4BAC7D;AAEA,4BAAA,GAAG,CAAC,qBAAqB,GAAG,IAAI;AAChC,4BAAA,GAAG,CAAC,qBAAqB,GAAG,MAAM;AAElC,4BAAA,IAAI,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE;AACjC,gCAAA,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;gCAC7B,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BAClB;AAEA,4BAAA,GAAG,CAAC,SAAS,CACX,MAAM,EACN,MAAM,CAAC,CAAC,EACR,MAAM,CAAC,CAAC,EACR,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,MAAM,EACb,CAAC,EACD,CAAC,EACD,WAAW,EACX,YAAY,CACb;AAEK,4BAAA,OAAO,GACX,OAAO,CAAC,MAAM,KAAK;kCACf,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC,WAAW;AACpD,kCAAE,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;AAEnC,4BAAA,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE;AACzD,gCAAA,kBAAkB,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE;AACrC,gCAAA,IAAI,EAAE,MAAM;gCACZ,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE;AACpD,gCAAA,QAAQ,EAAA,QAAA;AACT,6BAAA,CAAC;4BAEF,OAAA,CAAA,CAAA,aAAO;AACL,oCAAA,OAAO,EAAA,OAAA;AACP,oCAAA,QAAQ,EAAA,QAAA;AACR,oCAAA,MAAM,EAAE,cAAc;AACtB,oCAAA,gBAAgB,EAAE,EAAE,KAAK,OAAA,EAAE,MAAM,QAAA,EAAE;AACnC,oCAAA,cAAc,EAAE;wCACd,KAAK,EAAE,MAAM,CAAC,KAAK;wCACnB,MAAM,EAAE,MAAM,CAAC,MAAM;AACtB,qCAAA;iCACF,CAAA;wBACH;gCAAU;4BACR,IAAI,MAAM,YAAY,WAAW,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,UAAU,EAAE;gCACvE,MAAM,CAAC,KAAK,EAAE;4BAChB;AAEA,4BAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,EAAI;wBACb;;;;;AACD,IAAA,CAAA;IAEa,aAAA,CAAA,SAAA,CAAA,wBAAwB,GAAtC,UAAuC,IAAU,EAAA;;;;;;AAC3C,wBAAA,IAAA,EAAA,OAAO,iBAAiB,KAAK,UAAU,CAAA,EAAvC,OAAA,CAAA,CAAA,YAAA,CAAA,CAAA;;;;wBAEe,OAAA,CAAA,CAAA,YAAM,iBAAiB,CAAC,IAAI,EAAE;AAC3C,gCAAA,gBAAgB,EAAE,YAAY;AACT,6BAAA,CAAC,CAAA;;AAFlB,wBAAA,QAAA,GAAS,EAAA,CAAA,IAAA,EAES;wBAExB,OAAA,CAAA,CAAA,aAAO;AACL,gCAAA,MAAM,EAAE,QAAM;gCACd,KAAK,EAAE,QAAM,CAAC,KAAK;gCACnB,MAAM,EAAE,QAAM,CAAC,MAAM;AACrB,gCAAA,OAAO,EAAE,YAAA;AACP,oCAAA,IAAI,OAAO,QAAM,CAAC,KAAK,KAAK,UAAU,EAAE;wCACtC,QAAM,CAAC,KAAK,EAAE;oCAChB;gCACF,CAAC;6BACF,CAAA;;;AAED,wBAAA,OAAO,CAAC,IAAI,CAAC,2DAA2D,EAAE,OAAK,CAAC;;;AAI9E,wBAAA,SAAS,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC;AAE7B,wBAAA,OAAA,CAAA,CAAA,YAAM,IAAI,OAAO,CAAmB,UAAC,OAAO,EAAE,MAAM,EAAA;AAChE,gCAAA,IAAM,GAAG,GAAG,IAAI,KAAK,EAAE;gCACvB,GAAG,CAAC,MAAM,GAAG,YAAA,EAAM,OAAA,OAAO,CAAC,GAAG,CAAC,CAAA,CAAZ,CAAY;AAC/B,gCAAA,GAAG,CAAC,OAAO,GAAG,UAAC,KAAK,EAAA,EAAK,OAAA,MAAM,CAAC,KAAK,CAAC,CAAA,CAAb,CAAa;AACtC,gCAAA,GAAG,CAAC,GAAG,GAAG,SAAS;AACrB,4BAAA,CAAC,CAAC,CAAA;;AALI,wBAAA,KAAK,GAAG,EAAA,CAAA,IAAA,EAKZ;wBAEF,OAAA,CAAA,CAAA,aAAO;AACL,gCAAA,MAAM,EAAE,KAAK;gCACb,KAAK,EAAE,KAAK,CAAC,YAAY;gCACzB,MAAM,EAAE,KAAK,CAAC,aAAa;gCAC3B,OAAO,EAAE,YAAA,EAAM,OAAA,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA,CAA9B,CAA8B;6BAC9C,CAAA;;;;AACF,IAAA,CAAA;IAEO,aAAA,CAAA,SAAA,CAAA,aAAa,GAArB,UACE,QAA0B,EAC1B,MAAc,EACd,MAAc,EACd,QAAgB,EAChB,SAAiB,EAAA;AAEjB,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAC5D,QAAA,IAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5D,IAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAC1B,QAAQ,GAAG,OAAO,EAClB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,CACpC;QACD,IAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,SAAS,GAAG,OAAO,EACnB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,CACrC;QAED,IAAI,WAAW,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE;AACzC,YAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC;QAC3D;QAEA,OAAO;AACL,YAAA,CAAC,EAAE,OAAO;AACV,YAAA,CAAC,EAAE,OAAO;AACV,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,MAAM,EAAE,YAAY;SACrB;IACH,CAAC;IACH,OAAA,aAAC;AAAD,CAAC,EA1jBD;AA4jBO,IAAM,aAAa,GAAG,IAAI,aAAa;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"documentEdgeDetectionService.js","sources":["../../../../src/services/documentEdgeDetectionService.ts"],"sourcesContent":["// Détection de document légère basée sur des contours (Canvas 2D), sans modèle\n// ML externe. Remplace l'ancienne approche TensorFlow.js + coco-ssd, qui\n// classait le document via des classes d'objets génériques (\"book\", \"cell\n// phone\", \"tv\", \"laptop\") — peu fiable pour une CNI/passeport et coûteuse à\n// charger (téléchargement de modèle + init WebGL), ce qui contribuait à la\n// lenteur perçue à l'ouverture de la caméra.\n//\n// Le service analyse la luminosité et la netteté (variance du Laplacien, une\n// mesure classique de flou) de la zone du cadre-guide, et en déduit un signal\n// de présence de document ainsi qu'un indice (\"hint\") exploitable pour guider\n// l'utilisateur (trop sombre / trop de reflets / rien à cadrer). Il ne bloque\n// jamais la capture : c'est un signal d'aide, pas une porte.\n\nexport interface ImageDataLike {\n data: Uint8ClampedArray;\n width: number;\n height: number;\n}\n\nexport interface DetectionRegion {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport type DocumentDetectionHint = \"too_dark\" | \"too_bright\" | \"no_document\" | \"ok\";\n\nexport interface DocumentQuality {\n brightness: number; // 0..1\n sharpness: number; // 0..1 (normalisé)\n}\n\nexport interface DocumentDetectionResult {\n hasDocument: boolean;\n isStable: boolean;\n hint: DocumentDetectionHint;\n quality: DocumentQuality;\n timestamp: number;\n}\n\nexport type FrameSampler = (\n video: HTMLVideoElement,\n region: DetectionRegion | null\n) => ImageDataLike | null;\n\nexport const DETECTION_THRESHOLDS = {\n minBrightness: 0.12,\n maxBrightness: 0.92,\n minSharpness: 0.08,\n};\n\nconst STABILITY_WINDOW = 4; // détections positives consécutives requises avant isStable=true\nconst DETECTION_INTERVAL_MS = 200;\nconst SAMPLE_WIDTH = 64;\nconst SAMPLE_HEIGHT = 64;\n\n/**\n * Analyse pure d'une frame : luminosité moyenne + netteté (variance du\n * Laplacien). Pas d'état, pas de dépendance DOM — facilement testable avec\n * des buffers de pixels synthétiques.\n */\nexport function analyzeDocumentFrame(imageData: ImageDataLike): DocumentQuality {\n const { data, width, height } = imageData;\n const pixelCount = width * height;\n\n const gray = new Float32Array(pixelCount);\n let sum = 0;\n for (let i = 0, p = 0; i < data.length; i += 4, p++) {\n const g = (data[i] + data[i + 1] + data[i + 2]) / (3 * 255);\n gray[p] = g;\n sum += g;\n }\n const brightness = pixelCount > 0 ? sum / pixelCount : 0;\n\n let laplacianAbsSum = 0;\n let samples = 0;\n for (let y = 1; y < height - 1; y++) {\n for (let x = 1; x < width - 1; x++) {\n const idx = y * width + x;\n const laplacian =\n gray[idx - 1] + gray[idx + 1] + gray[idx - width] + gray[idx + width] - 4 * gray[idx];\n laplacianAbsSum += Math.abs(laplacian);\n samples++;\n }\n }\n const meanAbsLaplacian = samples > 0 ? laplacianAbsSum / samples : 0;\n // Normalisation empirique : un damier noir/blanc pur (contraste maximal) donne ~4.\n const sharpness = Math.min(1, meanAbsLaplacian / 4);\n\n return { brightness, sharpness };\n}\n\n/**\n * Décision pure hasDocument/hint à partir des métriques de qualité. Ordre de\n * priorité des hints : luminosité (trop sombre/trop de reflets) avant absence\n * de contours, car une image trop sombre ou surexposée ne peut de toute façon\n * pas révéler de contours fiables.\n */\nexport function decideDetection(\n quality: DocumentQuality\n): { hasDocument: boolean; hint: DocumentDetectionHint } {\n if (quality.brightness < DETECTION_THRESHOLDS.minBrightness) {\n return { hasDocument: false, hint: \"too_dark\" };\n }\n if (quality.brightness > DETECTION_THRESHOLDS.maxBrightness) {\n return { hasDocument: false, hint: \"too_bright\" };\n }\n if (quality.sharpness < DETECTION_THRESHOLDS.minSharpness) {\n return { hasDocument: false, hint: \"no_document\" };\n }\n return { hasDocument: true, hint: \"ok\" };\n}\n\n/**\n * Échantillonneur par défaut : downscale la zone (ou toute la frame vidéo si\n * aucune région n'est fournie) vers un petit canvas fixe, pour un coût CPU\n * constant et faible quelle que soit la résolution source.\n */\nconst defaultSampleFrame: FrameSampler = (video, region) => {\n const sourceWidth = region?.width ?? video.videoWidth;\n const sourceHeight = region?.height ?? video.videoHeight;\n if (!sourceWidth || !sourceHeight) {\n return null;\n }\n\n const canvas = document.createElement(\"canvas\");\n canvas.width = SAMPLE_WIDTH;\n canvas.height = SAMPLE_HEIGHT;\n const ctx = canvas.getContext(\"2d\");\n if (!ctx) {\n return null;\n }\n\n ctx.drawImage(\n video,\n region?.x ?? 0,\n region?.y ?? 0,\n sourceWidth,\n sourceHeight,\n 0,\n 0,\n SAMPLE_WIDTH,\n SAMPLE_HEIGHT\n );\n\n return ctx.getImageData(0, 0, SAMPLE_WIDTH, SAMPLE_HEIGHT);\n};\n\nexport class DocumentEdgeDetectionService {\n private detectionTimeoutId: number | null = null;\n private stopped = true;\n private consecutiveMatches = 0;\n private lastRawHasDocument: boolean | null = null;\n private readonly sampleFrame: FrameSampler;\n\n constructor(sampleFrame: FrameSampler = defaultSampleFrame) {\n this.sampleFrame = sampleFrame;\n }\n\n async startDocumentDetection(\n videoElement: HTMLVideoElement | null,\n region: DetectionRegion | null,\n onDetectionChange: (result: DocumentDetectionResult) => void\n ): Promise<{ stop: () => void }> {\n this.stopDocumentDetection();\n this.stopped = false;\n this.consecutiveMatches = 0;\n this.lastRawHasDocument = null;\n\n const detect = () => {\n if (this.stopped) {\n return;\n }\n\n if (!videoElement || !videoElement.videoWidth) {\n this.scheduleNext(detect);\n return;\n }\n\n let imageData: ImageDataLike | null;\n try {\n imageData = this.sampleFrame(videoElement, region);\n } catch (error) {\n console.error(\"[DocumentEdgeDetection] Error sampling frame:\", error);\n this.scheduleNext(detect);\n return;\n }\n\n if (!imageData) {\n this.scheduleNext(detect);\n return;\n }\n\n const quality = analyzeDocumentFrame(imageData);\n const { hasDocument, hint } = decideDetection(quality);\n\n if (hasDocument && this.lastRawHasDocument) {\n this.consecutiveMatches += 1;\n } else {\n this.consecutiveMatches = hasDocument ? 1 : 0;\n }\n this.lastRawHasDocument = hasDocument;\n\n const isStable = hasDocument && this.consecutiveMatches >= STABILITY_WINDOW;\n\n onDetectionChange({\n hasDocument,\n isStable,\n hint,\n quality,\n timestamp: Date.now(),\n });\n\n this.scheduleNext(detect);\n };\n\n detect();\n\n return { stop: () => this.stopDocumentDetection() };\n }\n\n stopDocumentDetection() {\n this.stopped = true;\n if (this.detectionTimeoutId) {\n clearTimeout(this.detectionTimeoutId);\n this.detectionTimeoutId = null;\n }\n }\n\n private scheduleNext(callback: () => void) {\n if (this.detectionTimeoutId) {\n clearTimeout(this.detectionTimeoutId);\n }\n this.detectionTimeoutId = window.setTimeout(callback, DETECTION_INTERVAL_MS);\n }\n}\n\nexport const documentEdgeDetectionService = new DocumentEdgeDetectionService();\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"documentTemplate.js","sources":["../../../../src/services/documentTemplate.ts"],"sourcesContent":["import { apiService } from \"./api\";\nimport type { AcceptedCountry } from \"../types/session\";\n\nexport interface DocumentTemplate {\n id: string;\n name: string;\n countryCode: string;\n acceptedFormats: string[];\n maxFiles: number;\n minFiles: number;\n maxPages: number;\n maxSize: number;\n sides: string;\n}\n\nexport interface FetchedDocumentTemplates {\n status: number;\n message: string;\n data: DocumentTemplate[];\n}\n\nconst DOCUMENT_ID_TO_TYPE: Record<string, keyof AcceptedCountry[\"documents\"]> = {\n passport: \"passport\",\n \"jdi-3\": \"passport\",\n idcard: \"idCard\",\n idCard: \"idCard\",\n \"jdi-2\": \"idCard\",\n driverlicense: \"driverLicense\",\n driverLicense: \"driverLicense\",\n \"jdi-4\": \"driverLicense\",\n residencepermit: \"residencePermit\",\n residencePermit: \"residencePermit\",\n \"jdi-5\": \"residencePermit\",\n pinkdriverlicense: \"pinkDriverLicense\",\n pinkDriverLicense: \"pinkDriverLicense\",\n};\n\n\n/**\n * Retrieves the document type key for API requests based on the document type.\n * \n * @param docType - The document type from the AcceptedCountry documents\n * @returns The corresponding document type key string used in API requests\n * \n * @example\n * ```typescript\n * getDocTypeKey('passport') // returns 'passport'\n * getDocTypeKey('idCard') // returns 'id_card'\n * getDocTypeKey('driverLicense') // returns 'driving_license'\n * ```\n */\nexport const getDocTypeKey = (docType: keyof AcceptedCountry[\"documents\"]): string => {\n switch (docType) {\n case \"passport\":\n return \"passport\";\n case \"idCard\":\n return \"id_card\";\n case \"residencePermit\":\n return \"residency_permit\";\n case \"driverLicense\":\n return \"driving_license\";\n case \"pinkDriverLicense\":\n return \"driving_license_1989\";\n default:\n return String(docType).toLowerCase();\n }\n};\n\n\n\n/**\n * Resolves a document ID string to its corresponding document type.\n * Performs case-insensitive matching against the DOCUMENT_ID_TO_TYPE mapping.\n * \n * @param documentId - The document identifier to resolve\n * @returns The resolved document type or undefined if no match is found\n * \n * @internal\n */\nconst resolveDocumentType = (documentId: string): keyof AcceptedCountry[\"documents\"] | undefined => {\n return DOCUMENT_ID_TO_TYPE[documentId] ?? DOCUMENT_ID_TO_TYPE[documentId.toLowerCase()];\n};\n\n\n/**\n * Retrieves the document template ID for a specific country and document type.\n * First attempts to find the template ID from acceptedCountries data.\n * If not found, falls back to searching through documentTemplates by matching country code and template name.\n * \n * @param params - Configuration object\n * @param params.countryCode - The ISO country code (case-insensitive)\n * @param params.documentId - The document type identifier\n * @param params.acceptedCountries - Optional array of accepted countries with their document configurations\n * @param params.documentTemplates - Optional fetched document templates to search through\n * @returns The document template ID if found, otherwise undefined\n * \n * @example\n * ```typescript\n * const templateId = getDocumentTemplateId({\n * countryCode: 'FR',\n * documentId: 'passport',\n * acceptedCountries: countries,\n * documentTemplates: templates\n * });\n * ```\n */\nexport const getDocumentTemplateId = (params: {\n countryCode: string;\n documentId: string;\n acceptedCountries?: AcceptedCountry[];\n documentTemplates?: FetchedDocumentTemplates;\n}): string | undefined => {\n const { countryCode, documentId, acceptedCountries, documentTemplates } = params;\n const normalizedCountry = countryCode?.toUpperCase();\n const resolvedType = resolveDocumentType(documentId);\n\n const documents = acceptedCountries?.find(\n (country) => country.code?.toUpperCase() === normalizedCountry\n )?.documents;\n\n if (resolvedType && documents?.[resolvedType]?.length && documents?.[resolvedType][0] != \"INT\" && documents?.[resolvedType][0] != \"EU\") {\n // Special case for France pink driving license (1989 format)\n const docName = documentTemplates?.data?.find(tpl => tpl.id === documents[resolvedType][0])?.name;\n if (normalizedCountry === \"FR\" && resolvedType === \"driverLicense\" && docName === \"france_driving_license_1989\" && documents[resolvedType][1]) {\n return documents[resolvedType][1];\n }\n return documents[resolvedType][0];\n }\n\n if (!resolvedType) {\n return undefined;\n }\n\n const templateKey = getDocTypeKey(resolvedType).toLowerCase();\n const matchedTemplate = documentTemplates?.data?.findLast((tpl) => {\n return (\n tpl.countryCode === normalizedCountry &&\n (tpl.name?.toLowerCase() || \"\").includes(templateKey)\n );\n });\n\n return matchedTemplate?.id;\n};\n\n\n/**\n * Fetches all document templates from the API with optional filtering.\n * \n * @param params - Optional configuration object for filtering results\n * @param params.type - Filter templates by document type\n * @param params.tags - Filter templates by tags array\n * @returns Promise resolving to fetched document templates data\n * @throws {Error} Throws an error if the API request fails\n * \n * @example\n * ```typescript\n * // Fetch all templates\n * const allTemplates = await getAllDocumentTemplates();\n * \n * // Fetch templates with filters\n * const filteredTemplates = await getAllDocumentTemplates({\n * type: 'proof_of_identity',\n * tags: ['biometric', 'eu']\n * });\n * ```\n */\nexport const getAllDocumentTemplates = async (params?: {\n type?: string;\n tags?: string[];\n}): Promise<FetchedDocumentTemplates> => {\n const query = new URLSearchParams();\n if (params?.type) query.append(\"type\", params.type);\n if (params?.tags && params.tags.length > 0) {\n params.tags.forEach((tag) => query.append(\"tags\", tag));\n }\n\n const url = \"document/get-all-document-templates\";\n const response = await apiService.get<FetchedDocumentTemplates>(\n `${url}?${query.toString()}`\n );\n if (!response.success) {\n throw new Error(\"Failed to fetch document templates\");\n }\n return response.data;\n};\n"],"names":["__awaiter","apiService"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"iadService.js","sources":["../../../../src/services/iadService.ts"],"sourcesContent":["import type { IadMode } from \"@unissey-web/sdk-react\";\nimport { apiService } from \"./api\";\n\nexport interface IadPreparation {\n data: string;\n mode: IadMode;\n}\n\nexport async function prepareIadCapture(\n sessionId: string,\n): Promise<IadPreparation> {\n const response = await apiService.post<{\n status: number;\n message: string;\n data: IadPreparation;\n }>(`/session/sdk/${sessionId}/iad/prepare`);\n const preparation = response.data?.data;\n\n if (\n !preparation ||\n typeof preparation.data !== \"string\" ||\n preparation.data.length === 0 ||\n (preparation.mode !== \"passive\" &&\n preparation.mode !== \"active-fallback\")\n ) {\n throw new Error(\"Invalid IAD preparation response\");\n }\n\n return preparation;\n}\n"],"names":["apiService"],"mappings":";;;;;AAQM,SAAgB,iBAAiB,CACrC,SAAiB,EAAA;;;;;;wBAEA,OAAA,CAAA,CAAA,YAAMA,cAAU,CAAC,IAAI,CAInC,uBAAgB,SAAS,EAAA,cAAA,CAAc,CAAC,CAAA;;AAJrC,oBAAA,QAAQ,GAAG,EAAA,CAAA,IAAA,EAI0B;AACrC,oBAAA,WAAW,GAAG,CAAA,EAAA,GAAA,QAAQ,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI;AAEvC,oBAAA,IACE,CAAC,WAAW;AACZ,wBAAA,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ;AACpC,wBAAA,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;AAC7B,yBAAC,WAAW,CAAC,IAAI,KAAK,SAAS;AAC7B,4BAAA,WAAW,CAAC,IAAI,KAAK,iBAAiB,CAAC,EACzC;AACA,wBAAA,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;oBACrD;AAEA,oBAAA,OAAA,CAAA,CAAA,aAAO,WAAW,CAAA;;;;AACnB;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"integrationService.js","sources":["../../../../src/services/integrationService.ts"],"sourcesContent":["import { getSessionCredential } from './sessionCredentials';\nimport { apiService } from \"./api\";\n\n/**\n * Fetches a DocuSeal signing token for the electronic signature session.\n * The backend generates a JWT token — pre-filling happens client-side\n * via the DocusealForm component props, not server-side.\n *\n * @param sessionId - The current session identifier\n * @param templateId - The DocuSeal template identifier (external_id from node)\n * @returns Object containing the JWT token and DocuSeal host\n */\nexport const getDocusealSigningToken = async (\n sessionId: string,\n templateId: string,\n): Promise<{ token: string; host: string }> => {\n try {\n const response = await apiService.get(`/integrations/docuseal/signing-token`, {\n headers: { \"X-Session-Token\": getSessionCredential(sessionId) },\n params: { sessionId, templateId },\n });\n return (response.data as any).data;\n } catch (error) {\n throw error;\n }\n};\n"],"names":["__awaiter","apiService","getSessionCredential"],"mappings":";;;;;;AAGA;;;;;;;;AAQG;AACI,IAAM,uBAAuB,GAAG,UACnC,SAAiB,EACjB,UAAkB,EAAA,EAAA,OAAAA,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;;;;AAGG,gBAAA,OAAA,CAAA,CAAA,YAAMC,cAAU,CAAC,GAAG,CAAC,sCAAsC,EAAE;wBAC1E,OAAO,EAAE,EAAE,iBAAiB,EAAEC,uCAAoB,CAAC,SAAS,CAAC,EAAE;AAC/D,wBAAA,MAAM,EAAE,EAAE,SAAS,WAAA,EAAE,UAAU,YAAA,EAAE;AACpC,qBAAA,CAAC,CAAA;;AAHI,gBAAA,QAAQ,GAAG,EAAA,CAAA,IAAA,EAGf;AACF,gBAAA,OAAA,CAAA,CAAA,aAAQ,QAAQ,CAAC,IAAY,CAAC,IAAI,CAAA;;;AAElC,gBAAA,MAAM,OAAK;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pollingService.js","sources":["../../../../src/services/pollingService.ts"],"sourcesContent":["import { apiService } from \"./api\";\nimport type { JdiMismatchDetail } from \"../utils/apiAnalysis\";\n\nexport interface AnalysisStatusResponse {\n sessionId: string;\n status: \"pending\" | \"processing\" | \"completed\" | \"failed\";\n progress: number; // 0-100\n currentStep: string; // Backend status: 'analyzing', 'approved', 'rejected', 'to_verify', 'failed', 'error'\n message: string;\n analysisId: string | null;\n analysisStatus?: string; // Raw backend analysis status for debugging\n code?: string; // Conformity code from document (e.g., \"1.0\", \"2.0\", etc.)\n codeName?: string; // Code name (e.g., \"conform\", \"non_conform\")\n codeDescription?: string; // Code description\n // Présent uniquement pour le code 7.0, quand un mismatch d'identité est détecté.\n mismatchDetails?: JdiMismatchDetail[];\n startedAt: string | null;\n completedAt: string | null;\n hasResults?: boolean;\n elapsedSeconds?: number;\n}\n\nexport interface PollingOptions {\n interval?: number; // milliseconds between polls (default: 2000)\n maxAttempts?: number; // max number of polls (default: 300 = 10 minutes at 2s interval)\n onProgress?: (status: AnalysisStatusResponse) => void; // callback on status update\n onComplete?: (status: AnalysisStatusResponse) => void; // callback when analysis completes\n onFailed?: (status: AnalysisStatusResponse, error?: string) => void; // callback when analysis fails\n timeout?: number; // total timeout in milliseconds (default: 600000 = 10 minutes)\n}\n\nlet pollingTimeoutId: NodeJS.Timeout | null = null;\nlet pollingStartTime: number = 0;\nlet isPollingActive: boolean = false;\n\n/**\n * Get user-friendly message based on analysis status\n */\nfunction getUserFriendlyMessage(status: AnalysisStatusResponse): string {\n const { currentStep, progress } = status;\n\n // Processing (50%)\n if (progress === 50 && currentStep === 'analyzing') {\n return 'Analyzing your documents...';\n }\n\n // Completed (100%)\n if (progress === 100) {\n switch (currentStep) {\n case 'approved':\n return 'Document verified successfully ✓';\n case 'rejected':\n return 'Document verification failed';\n case 'to_verify':\n return 'Manual verification required';\n case 'failed':\n case 'error':\n return 'Analysis error occurred';\n case 'completed':\n default:\n return 'Analysis completed';\n }\n }\n\n // Default fallback\n return status.message || 'Processing...';\n}\n\n/**\n * Poll the analysis status endpoint until analysis is complete or fails\n * @param sessionId Session ID to check status for\n * @param options Polling configuration\n * @returns Promise that resolves when analysis completes or rejects on failure\n */\nexport async function pollAnalysisStatus(\n sessionId: string,\n options: PollingOptions = {}\n): Promise<AnalysisStatusResponse> {\n const {\n interval = 2000,\n maxAttempts = 300,\n onProgress,\n onComplete,\n onFailed,\n timeout = 600000,\n } = options;\n\n console.log(\n `📡 Starting polling for session ${sessionId} (interval: ${interval}ms, max attempts: ${maxAttempts})`\n );\n\n pollingStartTime = Date.now();\n let attempts = 0;\n isPollingActive = true;\n\n return new Promise((resolve, reject) => {\n // Clear any existing polling\n if (pollingTimeoutId) {\n clearTimeout(pollingTimeoutId);\n }\n\n const poll = async () => {\n if (!isPollingActive) {\n reject(new Error(\"Polling stopped\"));\n return;\n }\n\n try {\n attempts++;\n\n // Check if we've exceeded timeout\n const elapsedTime = Date.now() - pollingStartTime;\n if (elapsedTime > timeout) {\n const errorMsg = `⏱️ Polling timeout exceeded (${elapsedTime}ms)`;\n console.warn(errorMsg);\n isPollingActive = false;\n pollingTimeoutId = null;\n reject(new Error(errorMsg));\n return;\n }\n\n // Check if we've exceeded max attempts\n if (attempts > maxAttempts) {\n const errorMsg = `⚠️ Polling max attempts exceeded (${maxAttempts} attempts)`;\n console.warn(errorMsg);\n isPollingActive = false;\n pollingTimeoutId = null;\n reject(new Error(errorMsg));\n return;\n }\n\n // Fetch status from backend\n const response = await apiService.get<AnalysisStatusResponse>(\n `session/sdk/${sessionId}/analysis-status`\n );\n\n const status = response.data;\n\n // Add user-friendly message\n const userMessage = getUserFriendlyMessage(status);\n\n // Call progress callback with user-friendly message\n if (onProgress) {\n onProgress({\n ...status,\n message: userMessage,\n });\n }\n\n // Check if analysis is complete (progress = 100%)\n if (status.progress === 100) {\n // Check if it's a failure\n if (status.currentStep === 'failed' || status.currentStep === 'error') {\n console.error(\n `❌ Analysis failed for session ${sessionId}: ${status.message}`\n );\n if (onFailed) {\n onFailed(status, status.message);\n }\n isPollingActive = false;\n pollingTimeoutId = null;\n reject(new Error(`Analysis failed: ${userMessage}`));\n return;\n }\n\n // Analysis completed successfully (approved, rejected, to_verify, or completed)\n console.log(`✅ Analysis completed for session ${sessionId} with status: ${status.currentStep}`);\n if (onComplete) {\n onComplete({\n ...status,\n message: userMessage,\n });\n }\n isPollingActive = false;\n pollingTimeoutId = null;\n resolve({\n ...status,\n message: userMessage,\n });\n return;\n }\n\n // Still processing (progress = 50%), schedule next poll\n pollingTimeoutId = setTimeout(poll, interval);\n } catch (error) {\n const errorMsg =\n error instanceof Error ? error.message : \"Unknown error\";\n console.error(\n `❌ Polling error on attempt #${attempts}: ${errorMsg}`\n );\n\n // On network error, retry if we haven't exceeded attempts\n if (attempts < maxAttempts) {\n console.log(`🔄 Retrying in ${interval}ms...`);\n pollingTimeoutId = setTimeout(poll, interval);\n } else {\n isPollingActive = false;\n pollingTimeoutId = null;\n reject(\n new Error(\n `Failed to get analysis status after ${attempts} attempts: ${errorMsg}`\n )\n );\n }\n }\n };\n\n // Start polling\n poll();\n });\n}\n\n/**\n * Stop polling for analysis status\n */\nexport function stopPolling(): void {\n isPollingActive = false;\n if (pollingTimeoutId) {\n clearTimeout(pollingTimeoutId);\n pollingTimeoutId = null;\n }\n console.log(\"🛑 Polling stopped\");\n}\n"],"names":["__awaiter","apiService"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"professionalImageQuality.js","sources":["../../../../src/services/professionalImageQuality.ts"],"sourcesContent":["/**\n * Service professionnel d'amélioration de la qualité d'image\n * \n * Objectif : Améliorer la qualité des captures de documents ID tout en préservant\n * parfaitement le masque et les proportions existantes.\n * \n * Principes :\n * 1. Préservation exacte du ratio d'aspect\n * 2. Amélioration intelligente de la résolution\n * 3. Optimisation adaptative selon l'appareil\n * 4. Aucun impact sur le design existant\n */\n\nexport interface QualityEnhancementOptions {\n /** Facteur de scaling pour améliorer la résolution (1 = aucun scaling) */\n scaleFactor?: number;\n /** Format de sortie (PNG recommandé pour documents) */\n outputFormat?: 'png' | 'jpeg';\n /** Qualité JPEG si format jpeg sélectionné (0.1 à 1.0) */\n jpegQuality?: number;\n /** Activer l'anti-aliasing pour un rendu plus lisse */\n smoothing?: boolean;\n /** Flip horizontal pour caméra frontale */\n flipHorizontal?: boolean;\n /** Aire cible souhaitée pour le document (en pixels) */\n targetArea?: number;\n /** Aire minimale attendue avant d'accepter l'image */\n minArea?: number;\n /** Taille minimale du grand côté (en pixels) */\n minLongSide?: number;\n}\n\nexport interface QualityAnalysis {\n /** La résolution actuelle nécessite-t-elle une amélioration ? */\n needsEnhancement: boolean;\n /** Facteur de scaling recommandé */\n recommendedScale: number;\n /** Résolution actuelle en pixels */\n currentResolution: { width: number; height: number; area: number };\n /** Résolution cible après amélioration */\n targetResolution: { width: number; height: number; area: number };\n /** Ratio d'aspect original */\n aspectRatio: number;\n /** Dimensions supplémentaires pour diagnostique */\n longSide: number;\n shortSide: number;\n}\n\nexport class ProfessionalImageQualityService {\n \n // Seuils de qualité pour différents types d'appareils\n private static readonly QUALITY_THRESHOLDS = {\n /** Aire minimale acceptable (~3500x2200) */\n MIN_ACCEPTABLE_AREA: 3500 * 2200,\n /** Aire cible pour un rendu très haute définition (~4800x3200) */\n TARGET_OPTIMAL_AREA: 4800 * 3200,\n /** Long côté minimal souhaité pour limiter les images trop petites */\n MIN_LONG_EDGE: 3200,\n /** Facteur de scaling maximum pour éviter des fichiers trop volumineux */\n MAX_SCALE_FACTOR: 4,\n /** Seuil de tolérance pour la vérification du ratio d'aspect (1% par défaut) */\n ASPECT_RATIO_TOLERANCE: 0.01\n };\n\n /**\n * Analyse la qualité actuelle et détermine les améliorations nécessaires\n */\n analyzeQuality(\n width: number,\n height: number,\n overrides?: {\n minArea?: number;\n targetArea?: number;\n minLongSide?: number;\n }\n ): QualityAnalysis {\n const currentArea = width * height;\n const aspectRatio = width / height;\n const longSide = Math.max(width, height);\n const shortSide = Math.min(width, height);\n\n const minArea = overrides?.minArea ?? ProfessionalImageQualityService.QUALITY_THRESHOLDS.MIN_ACCEPTABLE_AREA;\n const targetArea = overrides?.targetArea ?? ProfessionalImageQualityService.QUALITY_THRESHOLDS.TARGET_OPTIMAL_AREA;\n const minLongSide = overrides?.minLongSide ?? ProfessionalImageQualityService.QUALITY_THRESHOLDS.MIN_LONG_EDGE;\n const normalizedTargetArea = Math.max(targetArea, minArea);\n \n // Détermine si une amélioration est nécessaire\n const needsEnhancement = currentArea < minArea || longSide < minLongSide;\n \n // Calcule le facteur de scaling optimal\n let recommendedScale = 1;\n if (needsEnhancement || currentArea < normalizedTargetArea) {\n const scaleFromArea = Math.sqrt(normalizedTargetArea / currentArea);\n const scaleFromLongSide = minLongSide / longSide;\n\n recommendedScale = Math.max(1, scaleFromArea, scaleFromLongSide);\n recommendedScale = Math.min(recommendedScale, ProfessionalImageQualityService.QUALITY_THRESHOLDS.MAX_SCALE_FACTOR);\n }\n\n return {\n needsEnhancement,\n recommendedScale,\n currentResolution: { width, height, area: currentArea },\n targetResolution: {\n width: Math.round(width * recommendedScale),\n height: Math.round(height * recommendedScale),\n area: Math.round(currentArea * recommendedScale * recommendedScale)\n },\n aspectRatio,\n longSide,\n shortSide\n };\n }\n\n /**\n * Améliore la qualité d'une image capturée depuis une vidéo\n * GARANTIT la préservation exacte du ratio d'aspect\n */\n enhanceImageFromVideo(\n video: HTMLVideoElement,\n cropArea: { x: number; y: number; width: number; height: number },\n options: QualityEnhancementOptions = {}\n ): string {\n const {\n scaleFactor = 1,\n outputFormat = 'png',\n jpegQuality = 0.95,\n smoothing = true,\n flipHorizontal = false\n } = options;\n\n // Validation des paramètres d'entrée\n this.validateInputs(video, cropArea, scaleFactor);\n\n // Calcul des dimensions finales avec préservation exacte du ratio\n const originalRatio = cropArea.width / cropArea.height;\n const finalWidth = Math.round(cropArea.width * scaleFactor);\n const finalHeight = Math.round(cropArea.height * scaleFactor);\n \n // Vérification critique du ratio d'aspect\n const finalRatio = finalWidth / finalHeight;\n const ratioError = Math.abs(originalRatio - finalRatio) / originalRatio;\n \n if (ratioError > ProfessionalImageQualityService.QUALITY_THRESHOLDS.ASPECT_RATIO_TOLERANCE) {\n console.warn('⚠️ Attention: Ratio d\\'aspect non préservé exactement', {\n original: originalRatio,\n final: finalRatio,\n error: ratioError,\n tolerance: ProfessionalImageQualityService.QUALITY_THRESHOLDS.ASPECT_RATIO_TOLERANCE\n });\n }\n\n // Création du canvas avec les dimensions optimales\n const canvas = document.createElement('canvas');\n canvas.width = finalWidth;\n canvas.height = finalHeight;\n\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n throw new Error('Impossible de créer le contexte 2D du canvas');\n }\n\n // Configuration pour la qualité maximale\n if (smoothing) {\n ctx.imageSmoothingEnabled = true;\n ctx.imageSmoothingQuality = 'high';\n } else {\n ctx.imageSmoothingEnabled = false;\n }\n\n // Nettoyage du canvas\n ctx.clearRect(0, 0, finalWidth, finalHeight);\n\n // Gestion du flip horizontal pour caméra frontale\n if (flipHorizontal) {\n ctx.save();\n ctx.scale(-1, 1);\n ctx.translate(-finalWidth, 0);\n }\n\n // Extraction et scaling de la zone d'intérêt avec préservation du ratio\n ctx.drawImage(\n video,\n cropArea.x, cropArea.y, cropArea.width, cropArea.height,\n 0, 0, finalWidth, finalHeight\n );\n\n // Restaurer le contexte si on a fait un flip\n if (flipHorizontal) {\n ctx.restore();\n }\n\n // Export avec le format et la qualité spécifiés\n if (outputFormat === 'jpeg') {\n return canvas.toDataURL('image/jpeg', jpegQuality);\n } else {\n return canvas.toDataURL('image/png');\n }\n }\n\n /**\n * Améliore automatiquement une image en analysant sa qualité actuelle\n */\n autoEnhanceImage(\n video: HTMLVideoElement,\n cropArea: { x: number; y: number; width: number; height: number },\n options: Partial<QualityEnhancementOptions> = {}\n ): { dataUrl: string; analysis: QualityAnalysis; enhanced: boolean } {\n \n // Analyse de la qualité actuelle\n const analysis = this.analyzeQuality(cropArea.width, cropArea.height, {\n minArea: options.minArea,\n targetArea: options.targetArea,\n minLongSide: options.minLongSide\n });\n \n // Configuration automatique basée sur l'analyse\n const enhancementOptions: QualityEnhancementOptions = {\n scaleFactor: analysis.recommendedScale,\n outputFormat: 'png', // PNG par défaut pour les documents\n smoothing: true,\n ...options // Permet de surcharger les paramètres automatiques\n };\n\n // Application de l'amélioration\n const dataUrl = this.enhanceImageFromVideo(video, cropArea, enhancementOptions);\n\n return {\n dataUrl,\n analysis,\n enhanced: analysis.needsEnhancement\n };\n }\n\n /**\n * Capture une image en mode standard (sans amélioration)\n * Utilisé comme fallback ou pour les images déjà de bonne qualité\n */\n standardCapture(\n video: HTMLVideoElement,\n cropArea: { x: number; y: number; width: number; height: number },\n outputFormat: 'png' | 'jpeg' = 'png',\n flipHorizontal: boolean = false\n ): string {\n return this.enhanceImageFromVideo(video, cropArea, {\n scaleFactor: 1,\n outputFormat,\n smoothing: false,\n flipHorizontal\n });\n }\n\n /**\n * Validation des paramètres d'entrée\n */\n private validateInputs(\n video: HTMLVideoElement,\n cropArea: { x: number; y: number; width: number; height: number },\n scaleFactor: number\n ): void {\n if (!video || video.videoWidth === 0 || video.videoHeight === 0) {\n throw new Error('Vidéo invalide ou non prête');\n }\n\n if (cropArea.width <= 0 || cropArea.height <= 0) {\n throw new Error('Zone de crop invalide');\n }\n\n if (scaleFactor <= 0 || scaleFactor > ProfessionalImageQualityService.QUALITY_THRESHOLDS.MAX_SCALE_FACTOR) {\n throw new Error(`Facteur de scaling invalide: ${scaleFactor}. Doit être entre 0 et ${ProfessionalImageQualityService.QUALITY_THRESHOLDS.MAX_SCALE_FACTOR}`);\n }\n\n // Vérification que la zone de crop est dans les limites de la vidéo\n if (cropArea.x < 0 || cropArea.y < 0 || \n cropArea.x + cropArea.width > video.videoWidth ||\n cropArea.y + cropArea.height > video.videoHeight) {\n throw new Error('Zone de crop en dehors des limites de la vidéo');\n }\n }\n}\n\n// Instance singleton pour utilisation globale\nexport const professionalImageQuality = new ProfessionalImageQualityService();\n"],"names":["__assign"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"retryService.js","sources":["../../../../src/services/retryService.ts"],"sourcesContent":["import type { SessionData } from \"../types/session\";\nimport { apiService } from \"./api\";\n\n/**\n * Get the retry count for a specific node from session data\n * @param session - The session data object\n * @param nodeId - The ID of the node to get retry count for\n * @returns The retry count for the node (defaults to 0 if not found)\n */\nexport function getNodeRetryCount(session: SessionData | null, nodeId: string): number {\n if (!session || !nodeId) {\n return 0;\n }\n\n const retryCounts = session.retryCounts || {};\n return retryCounts[nodeId] || 0;\n}\n\n/**\n * Update the retry count for a specific node in the session\n * @param sessionId - The session ID\n * @param nodeId - The ID of the node to update retry count for\n * @param retryCount - The new retry count value\n * @returns Updated session data\n */\nexport async function updateNodeRetryCount(\n sessionId: string,\n nodeId: string,\n retryCount: number\n): Promise<SessionData> {\n const response = await apiService.patch(`/session/sdk/${sessionId}`, {\n retryCounts: {\n [nodeId]: retryCount,\n },\n });\n return response.data;\n}\n\n/**\n * Increment the retry count for a specific node in the session\n * @param sessionId - The session ID\n * @param nodeId - The ID of the node to increment retry count for\n * @param currentCount - The current retry count\n * @returns Updated session data\n */\nexport async function incrementNodeRetryCount(\n sessionId: string,\n nodeId: string,\n currentCount: number\n): Promise<SessionData> {\n return updateNodeRetryCount(sessionId, nodeId, currentCount + 1);\n}\n"],"names":["apiService"],"mappings":";;;;;AAGA;;;;;AAKG;AACG,SAAU,iBAAiB,CAAC,OAA2B,EAAE,MAAc,EAAA;AACzE,IAAA,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE;AACrB,QAAA,OAAO,CAAC;IACZ;AAEA,IAAA,IAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE;AAC7C,IAAA,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC;AACnC;AAEA;;;;;;AAMG;SACmB,oBAAoB,CACtC,SAAiB,EACjB,MAAc,EACd,UAAkB,EAAA;;;;;;AAED,gBAAA,KAAA,CAAA,EAAA,OAAA,CAAA,CAAA,YAAMA,cAAU,CAAC,KAAK,CAAC,eAAA,CAAA,MAAA,CAAgB,SAAS,CAAE,EAAE;wBACjE,WAAW,GAAA,EAAA,GAAA,EAAA;4BACP,EAAA,CAAC,MAAM,IAAG,UAAU;AACvB,4BAAA,EAAA,CAAA;AACJ,qBAAA,CAAC,CAAA;;AAJI,oBAAA,QAAQ,GAAG,EAAA,CAAA,IAAA,EAIf;oBACF,OAAA,CAAA,CAAA,aAAO,QAAQ,CAAC,IAAI,CAAA;;;;AACvB;AAED;;;;;;AAMG;SACmB,uBAAuB,CACzC,SAAiB,EACjB,MAAc,EACd,YAAoB,EAAA;;;YAEpB,OAAA,CAAA,CAAA,aAAO,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,CAAC,CAAC,CAAA;;;AACnE;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sessionCredentials.js","sources":["../../../../src/services/sessionCredentials.ts"],"sourcesContent":["/** Memory-only credentials, bound to a session and never sent to unrelated URLs. */\nconst credentials = new Map<string, string>();\nexport function setSessionCredential(sessionId: string, token?: string): void {\n if (token) credentials.set(sessionId, token);\n else credentials.delete(sessionId);\n}\nexport function getSessionCredential(sessionId: string): string | undefined {\n return credentials.get(sessionId);\n}\nexport function credentialForRequest(url: string): string | undefined {\n if (/^[a-z]+:/i.test(url) || url.startsWith('//')) return undefined;\n const match = url.match(/^\\/?session\\/sdk\\/([^/?]+)/);\n return match ? credentials.get(decodeURIComponent(match[1])) : undefined;\n}\n"],"names":[],"mappings":";;AAAA;AACA,IAAM,WAAW,GAAG,IAAI,GAAG,EAAkB;AACvC,SAAU,oBAAoB,CAAC,SAAiB,EAAE,KAAc,EAAA;AACpE,IAAA,IAAI,KAAK;AAAE,QAAA,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC;;AACvC,QAAA,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC;AACpC;AACM,SAAU,oBAAoB,CAAC,SAAiB,EAAA;AACpD,IAAA,OAAO,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;AACnC;AACM,SAAU,oBAAoB,CAAC,GAAW,EAAA;AAC9C,IAAA,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,SAAS;IACnE,IAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC;IACrD,OAAO,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;AAC1E;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sessionMemoryStore.js","sources":["../../../../src/services/sessionMemoryStore.ts"],"sourcesContent":["import type { ContactInfo } from \"../types/contactInfo\";\nimport type { UserInput } from \"../types/userInput\";\n\ninterface SessionMemoryEntry {\n userInput: UserInput;\n contactInfo: ContactInfo;\n}\n\nconst sessionMemory = new Map<string, SessionMemoryEntry>();\nlet activeSessionId: string | null = null;\n\nconst defaultContactInfo = (): ContactInfo => ({\n email: \"\",\n phoneNumber: \"\",\n});\n\nconst getOrCreateEntry = (sessionId: string): SessionMemoryEntry => {\n const existing = sessionMemory.get(sessionId);\n if (existing) {\n return existing;\n }\n\n const created: SessionMemoryEntry = {\n userInput: {},\n contactInfo: defaultContactInfo(),\n };\n sessionMemory.set(sessionId, created);\n return created;\n};\n\nexport const setActiveSessionId = (sessionId: string | null): void => {\n activeSessionId = sessionId;\n};\n\nexport const getActiveSessionId = (): string | null => activeSessionId;\n\nexport const setSessionMemoryUserInput = (\n sessionId: string,\n userInput: UserInput\n): void => {\n if (!sessionId) {\n return;\n }\n\n const entry = getOrCreateEntry(sessionId);\n entry.userInput = { ...userInput };\n};\n\nexport const getSessionMemoryUserInput = (sessionId: string): UserInput => {\n if (!sessionId) {\n return {};\n }\n\n return { ...getOrCreateEntry(sessionId).userInput };\n};\n\nexport const setSessionMemoryContactInfo = (\n sessionId: string,\n contactInfo: ContactInfo\n): void => {\n if (!sessionId) {\n return;\n }\n\n const entry = getOrCreateEntry(sessionId);\n entry.contactInfo = { ...defaultContactInfo(), ...contactInfo };\n};\n\nexport const getSessionMemoryContactInfo = (sessionId: string): ContactInfo => {\n if (!sessionId) {\n return defaultContactInfo();\n }\n\n return { ...defaultContactInfo(), ...getOrCreateEntry(sessionId).contactInfo };\n};\n\nexport const clearSessionMemory = (sessionId?: string): void => {\n if (sessionId) {\n sessionMemory.delete(sessionId);\n if (activeSessionId === sessionId) {\n activeSessionId = null;\n }\n return;\n }\n\n sessionMemory.clear();\n activeSessionId = null;\n};\n"],"names":["__assign"],"mappings":";;;;AAQA,IAAM,aAAa,GAAG,IAAI,GAAG,EAA8B;AAC3D,IAAI,eAAe,GAAkB,IAAI;AAEzC,IAAM,kBAAkB,GAAG,YAAA,EAAmB,QAAC;AAC7C,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,WAAW,EAAE,EAAE;CAChB,EAAC,CAH4C,CAG5C;AAEF,IAAM,gBAAgB,GAAG,UAAC,SAAiB,EAAA;IACzC,IAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;IAC7C,IAAI,QAAQ,EAAE;AACZ,QAAA,OAAO,QAAQ;IACjB;AAEA,IAAA,IAAM,OAAO,GAAuB;AAClC,QAAA,SAAS,EAAE,EAAE;QACb,WAAW,EAAE,kBAAkB,EAAE;KAClC;AACD,IAAA,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC;AACrC,IAAA,OAAO,OAAO;AAChB,CAAC;AAEM,IAAM,kBAAkB,GAAG,UAAC,SAAwB,EAAA;IACzD,eAAe,GAAG,SAAS;AAC7B;IAEa,kBAAkB,GAAG,cAAqB,OAAA,eAAe,CAAA,CAAf;AAEhD,IAAM,yBAAyB,GAAG,UACvC,SAAiB,EACjB,SAAoB,EAAA;IAEpB,IAAI,CAAC,SAAS,EAAE;QACd;IACF;AAEA,IAAA,IAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC;AACzC,IAAA,KAAK,CAAC,SAAS,GAAAA,kBAAA,CAAA,EAAA,EAAQ,SAAS,CAAE;AACpC;AAEO,IAAM,yBAAyB,GAAG,UAAC,SAAiB,EAAA;IACzD,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,OAAO,EAAE;IACX;AAEA,IAAA,OAAAA,kBAAA,CAAA,EAAA,EAAY,gBAAgB,CAAC,SAAS,CAAC,CAAC,SAAS,CAAA;AACnD;AAEO,IAAM,2BAA2B,GAAG,UACzC,SAAiB,EACjB,WAAwB,EAAA;IAExB,IAAI,CAAC,SAAS,EAAE;QACd;IACF;AAEA,IAAA,IAAM,KAAK,GAAG,gBAAgB,CAAC,SAAS,CAAC;IACzC,KAAK,CAAC,WAAW,GAAAA,kBAAA,CAAAA,kBAAA,CAAA,EAAA,EAAQ,kBAAkB,EAAE,CAAA,EAAK,WAAW,CAAE;AACjE;AAEO,IAAM,2BAA2B,GAAG,UAAC,SAAiB,EAAA;IAC3D,IAAI,CAAC,SAAS,EAAE;QACd,OAAO,kBAAkB,EAAE;IAC7B;IAEA,OAAAA,kBAAA,CAAAA,kBAAA,CAAA,EAAA,EAAY,kBAAkB,EAAE,CAAA,EAAK,gBAAgB,CAAC,SAAS,CAAC,CAAC,WAAW,CAAA;AAC9E;AAEO,IAAM,kBAAkB,GAAG,UAAC,SAAkB,EAAA;IACnD,IAAI,SAAS,EAAE;AACb,QAAA,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC;AAC/B,QAAA,IAAI,eAAe,KAAK,SAAS,EAAE;YACjC,eAAe,GAAG,IAAI;QACxB;QACA;IACF;IAEA,aAAa,CAAC,KAAK,EAAE;IACrB,eAAe,GAAG,IAAI;AACxB;;;;;;;;;;"}