@sekyro/web 0.1.0-rc.6 → 0.1.0-rc.8

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 (118) hide show
  1. package/CHANGELOG.md +114 -0
  2. package/LICENSE +25 -16
  3. package/README.md +6 -8
  4. package/THIRD-PARTY-NOTICES.txt +154 -0
  5. package/dist/background-monitor-A7FKJOAG.js +1 -0
  6. package/dist/capture-session-doc-YBE3UMJJ.js +1 -0
  7. package/dist/{capture-session-v3-Okq0EQHG.d.ts → capture-session-v3-CQK-G-qX.d.ts} +72 -3
  8. package/dist/{capture-session-v3-UQU_WjO2.d.cts → capture-session-v3-Dvob-uH2.d.cts} +72 -3
  9. package/dist/chunk-4RS2YIL4.js +1 -0
  10. package/dist/chunk-7V2M6Y2W.js +1 -0
  11. package/dist/chunk-7ZCZY3ZP.js +1 -0
  12. package/dist/chunk-A3FUGHAH.js +2 -0
  13. package/dist/chunk-BPE5NSQ2.js +1 -0
  14. package/dist/chunk-CJHMFPL6.js +1 -0
  15. package/dist/chunk-DFTCAWMP.js +1 -0
  16. package/dist/chunk-DK5YPBDQ.js +1 -0
  17. package/dist/chunk-DQWW4OCK.js +1 -0
  18. package/dist/chunk-FHJ7HO3M.js +1 -0
  19. package/dist/chunk-FPXL63KZ.js +1 -0
  20. package/dist/chunk-G6LKLN4U.js +1 -0
  21. package/dist/chunk-GI3UFGRQ.js +1 -0
  22. package/dist/chunk-LQ7C44JG.js +1 -0
  23. package/dist/chunk-M43ET4NJ.js +1 -0
  24. package/dist/chunk-MXWLCDFX.js +1 -0
  25. package/dist/chunk-MY6EXEL2.js +1 -0
  26. package/dist/chunk-O5WKNZ2C.js +1 -0
  27. package/dist/chunk-OKWG3PVH.js +1 -0
  28. package/dist/chunk-POIQGEZM.js +1 -0
  29. package/dist/chunk-RI3E7GBN.js +1 -0
  30. package/dist/chunk-RNRFHUJA.js +1 -0
  31. package/dist/chunk-RVHAKRAI.js +1 -0
  32. package/dist/chunk-SMKCBUJL.js +1 -0
  33. package/dist/chunk-SXZCL5NO.js +1 -0
  34. package/dist/chunk-TDLIXFDT.js +1 -0
  35. package/dist/chunk-XLN5OT25.js +1 -0
  36. package/dist/chunk-YDQBVWXG.js +1 -0
  37. package/dist/chunk-YPG7CB4O.js +1 -0
  38. package/dist/client/index.cjs +1 -357
  39. package/dist/client/index.d.cts +13 -3
  40. package/dist/client/index.d.ts +13 -3
  41. package/dist/client/index.js +1 -15
  42. package/dist/core/index.cjs +1 -1639
  43. package/dist/core/index.d.cts +3 -3
  44. package/dist/core/index.d.ts +3 -3
  45. package/dist/core/index.js +1 -139
  46. package/dist/core/ocr/worker.bundle.js +42 -0
  47. package/dist/core/ocr/worker.cjs +42 -0
  48. package/dist/core/ocr/worker.d.cts +84 -0
  49. package/dist/core/ocr/worker.d.ts +84 -0
  50. package/dist/core/ocr/worker.js +41 -0
  51. package/dist/core/v3/detect-worker.cjs +1 -392
  52. package/dist/core/v3/detect-worker.d.cts +1 -1
  53. package/dist/core/v3/detect-worker.d.ts +1 -1
  54. package/dist/core/v3/detect-worker.js +1 -13
  55. package/dist/create-document-capture-T4APHJMY.js +1 -0
  56. package/dist/create-portrait-capture-B57GE5FU.js +1 -0
  57. package/dist/create-verification-C0AVIcVW.d.ts +2787 -0
  58. package/dist/create-verification-DoFpgzok.d.cts +2787 -0
  59. package/dist/{detect-worker-CKXHlXx9.d.cts → detect-worker-DclNxkZT.d.cts} +6 -0
  60. package/dist/{detect-worker-CKXHlXx9.d.ts → detect-worker-DclNxkZT.d.ts} +6 -0
  61. package/dist/detector-scanic-YCDNLCGV.js +1 -0
  62. package/dist/icao-gate-D8qm1O2t.d.cts +1655 -0
  63. package/dist/icao-gate-D8qm1O2t.d.ts +1655 -0
  64. package/dist/icao-gate-PWBMKRGC.js +1 -0
  65. package/dist/icao-tuning-4GGVX6B4.js +1 -0
  66. package/dist/index.cjs +1 -3030
  67. package/dist/index.d.cts +52 -6
  68. package/dist/index.d.ts +52 -6
  69. package/dist/index.js +1 -85
  70. package/dist/internal/index.cjs +1 -4439
  71. package/dist/internal/index.d.cts +352 -312
  72. package/dist/internal/index.d.ts +352 -312
  73. package/dist/internal/index.js +1 -657
  74. package/dist/keyframe-rank-YAJLYJYF.js +1 -0
  75. package/dist/landmarker-KB7LVXAU.js +1 -0
  76. package/dist/mrz-band-VYHOTDHY.js +1 -0
  77. package/dist/plan-runner-UBK4B4CG.js +1 -0
  78. package/dist/popup/index.cjs +1 -76
  79. package/dist/popup/index.js +1 -11
  80. package/dist/scanic-ml-stub-KW7IZHUT.js +1 -0
  81. package/dist/segmenter-USLNBX65.js +1 -0
  82. package/dist/turnstile-FATNZ4AG.js +1 -0
  83. package/package.json +25 -10
  84. package/sbom.cdx.json +195 -0
  85. package/dist/chunk-MWNFSNMP.js +0 -52
  86. package/dist/chunk-MWNFSNMP.js.map +0 -1
  87. package/dist/chunk-NILNKLK6.js +0 -50
  88. package/dist/chunk-NILNKLK6.js.map +0 -1
  89. package/dist/chunk-NWF46H7K.js +0 -359
  90. package/dist/chunk-NWF46H7K.js.map +0 -1
  91. package/dist/chunk-R3SJQHYU.js +0 -1173
  92. package/dist/chunk-R3SJQHYU.js.map +0 -1
  93. package/dist/chunk-TG5IE552.js +0 -1128
  94. package/dist/chunk-TG5IE552.js.map +0 -1
  95. package/dist/chunk-WY6U7AIK.js +0 -193
  96. package/dist/chunk-WY6U7AIK.js.map +0 -1
  97. package/dist/chunk-YVFF4Q4G.js +0 -327
  98. package/dist/chunk-YVFF4Q4G.js.map +0 -1
  99. package/dist/client/index.cjs.map +0 -1
  100. package/dist/client/index.js.map +0 -1
  101. package/dist/core/index.cjs.map +0 -1
  102. package/dist/core/index.js.map +0 -1
  103. package/dist/core/v3/detect-worker.cjs.map +0 -1
  104. package/dist/core/v3/detect-worker.js.map +0 -1
  105. package/dist/create-verification-BKc9NFQj.d.cts +0 -455
  106. package/dist/create-verification-DjcMZHAQ.d.ts +0 -455
  107. package/dist/detector-scanic-4C6IEW2K.js +0 -787
  108. package/dist/detector-scanic-4C6IEW2K.js.map +0 -1
  109. package/dist/hosted-client-DJXq_CB9.d.cts +0 -449
  110. package/dist/hosted-client-DJXq_CB9.d.ts +0 -449
  111. package/dist/index.cjs.map +0 -1
  112. package/dist/index.js.map +0 -1
  113. package/dist/internal/index.cjs.map +0 -1
  114. package/dist/internal/index.js.map +0 -1
  115. package/dist/popup/index.cjs.map +0 -1
  116. package/dist/popup/index.js.map +0 -1
  117. package/dist/scanic-ml-stub-S2OZ6HEF.js +0 -10
  118. package/dist/scanic-ml-stub-S2OZ6HEF.js.map +0 -1
@@ -1,7 +1,7 @@
1
- import { C as CameraErrorKind } from '../capture-session-v3-UQU_WjO2.cjs';
2
- export { a as CLIP_MS, b as CaptureArtifacts, c as CaptureErrorKind, d as CaptureSessionEvents, e as CaptureSessionV3, f as CaptureSessionV3Events, g as CaptureSessionV3Options, h as CaptureSessionV3StartOptions, i as CaptureState, j as CaptureTiming, k as ClipError, l as ClipErrorKind, m as ClipRecorder, n as ClipResult, D as DEFAULT_CLIP_MIME, o as DEVICE_PROFILES, p as DeviceClass, q as DeviceProbe, r as DeviceProfile, s as DeviceProfiler, E as EscalationClipArtifact, t as EscalationHook, F as FaceGateV3, G as GateChecks, K as KEYFRAME_CANDIDATES, u as KEYFRAME_WINDOW_MS, M as MAX_CLIP_BYTES, v as MIME_CANDIDATES, S as STOP_GRACE_MS, T as TIMESLICE_MS, V as V3ChecksPayload, w as V3GateFactor, x as V3GateQuality, y as V3GateThresholds, z as V3GateTick, A as V3GateTickInput, B as V3TelemetryEvent, H as V3_GATE_DEFAULTS, I as VIDEO_BPS, J as buildLivenessV2FormData, L as cameraPreflight, N as classifyDevice, O as extForMime, P as isClipTooLarge, Q as isMediaRecorderSupported, R as mapGetUserMediaError, U as pickMimeType, W as probeDevice } from '../capture-session-v3-UQU_WjO2.cjs';
1
+ import { C as CameraErrorKind } from '../capture-session-v3-Dvob-uH2.cjs';
2
+ export { a as CLIP_MS, b as CaptureArtifacts, c as CaptureErrorKind, d as CaptureSessionEvents, e as CaptureSessionV3, f as CaptureSessionV3Events, g as CaptureSessionV3Options, h as CaptureSessionV3StartOptions, i as CaptureState, j as CaptureTiming, k as ClipError, l as ClipErrorKind, m as ClipRecorder, n as ClipResult, D as DEFAULT_CLIP_MIME, o as DEVICE_PROFILES, p as DeviceClass, q as DeviceProbe, r as DeviceProfile, s as DeviceProfiler, E as EscalationClipArtifact, t as EscalationHook, F as FaceGateV3, G as GATE_SNAPSHOT_MS, u as GateBlockEntry, v as GateBlockReason, w as GateBlockStats, x as GateBlockSummary, y as GateChecks, K as KEYFRAME_CANDIDATES, z as KEYFRAME_WINDOW_MS, M as MAX_CLIP_BYTES, A as MIME_CANDIDATES, S as STOP_GRACE_MS, T as TIMESLICE_MS, V as V3ChecksPayload, B as V3GateFactor, H as V3GateQuality, I as V3GateThresholds, J as V3GateTick, L as V3GateTickInput, N as V3TelemetryEvent, O as V3_GATE_DEFAULTS, P as VIDEO_BPS, Q as blockReasonOf, R as buildLivenessV2FormData, U as cameraPreflight, W as classifyDevice, X as extForMime, Y as isClipTooLarge, Z as isMediaRecorderSupported, _ as mapGetUserMediaError, $ as pickMimeType, a0 as probeDevice } from '../capture-session-v3-Dvob-uH2.cjs';
3
3
  export { C as CENTERED_FACTOR, a as CIRCLE_RADIUS_FACTOR, I as IN_CIRCLE_FACTOR, b as buildCaptureConstraints, d as detectIsMobile } from '../capture-constraints-BujkZcfb.cjs';
4
- export { C as CreateDetectorOptions, D as DEFAULT_TIER_ORDER, a as DEFAULT_V3_ASSET_BASE_URL, b as Detector, c as DetectorLadderError, F as FaceObservation, d as createDetector, i as intrinsicSize, t as toStreamPixels } from '../detect-worker-CKXHlXx9.cjs';
4
+ export { C as CreateDetectorOptions, D as DEFAULT_TIER_ORDER, a as DEFAULT_V3_ASSET_BASE_URL, b as Detector, c as DetectorLadderError, F as FaceObservation, d as createDetector, i as intrinsicSize, t as toStreamPixels } from '../detect-worker-DclNxkZT.cjs';
5
5
 
6
6
  declare function captureMirroredKeyframe(video: HTMLVideoElement, canvas: HTMLCanvasElement, quality?: number): Promise<Blob>;
7
7
 
@@ -1,7 +1,7 @@
1
- import { C as CameraErrorKind } from '../capture-session-v3-Okq0EQHG.js';
2
- export { a as CLIP_MS, b as CaptureArtifacts, c as CaptureErrorKind, d as CaptureSessionEvents, e as CaptureSessionV3, f as CaptureSessionV3Events, g as CaptureSessionV3Options, h as CaptureSessionV3StartOptions, i as CaptureState, j as CaptureTiming, k as ClipError, l as ClipErrorKind, m as ClipRecorder, n as ClipResult, D as DEFAULT_CLIP_MIME, o as DEVICE_PROFILES, p as DeviceClass, q as DeviceProbe, r as DeviceProfile, s as DeviceProfiler, E as EscalationClipArtifact, t as EscalationHook, F as FaceGateV3, G as GateChecks, K as KEYFRAME_CANDIDATES, u as KEYFRAME_WINDOW_MS, M as MAX_CLIP_BYTES, v as MIME_CANDIDATES, S as STOP_GRACE_MS, T as TIMESLICE_MS, V as V3ChecksPayload, w as V3GateFactor, x as V3GateQuality, y as V3GateThresholds, z as V3GateTick, A as V3GateTickInput, B as V3TelemetryEvent, H as V3_GATE_DEFAULTS, I as VIDEO_BPS, J as buildLivenessV2FormData, L as cameraPreflight, N as classifyDevice, O as extForMime, P as isClipTooLarge, Q as isMediaRecorderSupported, R as mapGetUserMediaError, U as pickMimeType, W as probeDevice } from '../capture-session-v3-Okq0EQHG.js';
1
+ import { C as CameraErrorKind } from '../capture-session-v3-CQK-G-qX.js';
2
+ export { a as CLIP_MS, b as CaptureArtifacts, c as CaptureErrorKind, d as CaptureSessionEvents, e as CaptureSessionV3, f as CaptureSessionV3Events, g as CaptureSessionV3Options, h as CaptureSessionV3StartOptions, i as CaptureState, j as CaptureTiming, k as ClipError, l as ClipErrorKind, m as ClipRecorder, n as ClipResult, D as DEFAULT_CLIP_MIME, o as DEVICE_PROFILES, p as DeviceClass, q as DeviceProbe, r as DeviceProfile, s as DeviceProfiler, E as EscalationClipArtifact, t as EscalationHook, F as FaceGateV3, G as GATE_SNAPSHOT_MS, u as GateBlockEntry, v as GateBlockReason, w as GateBlockStats, x as GateBlockSummary, y as GateChecks, K as KEYFRAME_CANDIDATES, z as KEYFRAME_WINDOW_MS, M as MAX_CLIP_BYTES, A as MIME_CANDIDATES, S as STOP_GRACE_MS, T as TIMESLICE_MS, V as V3ChecksPayload, B as V3GateFactor, H as V3GateQuality, I as V3GateThresholds, J as V3GateTick, L as V3GateTickInput, N as V3TelemetryEvent, O as V3_GATE_DEFAULTS, P as VIDEO_BPS, Q as blockReasonOf, R as buildLivenessV2FormData, U as cameraPreflight, W as classifyDevice, X as extForMime, Y as isClipTooLarge, Z as isMediaRecorderSupported, _ as mapGetUserMediaError, $ as pickMimeType, a0 as probeDevice } from '../capture-session-v3-CQK-G-qX.js';
3
3
  export { C as CENTERED_FACTOR, a as CIRCLE_RADIUS_FACTOR, I as IN_CIRCLE_FACTOR, b as buildCaptureConstraints, d as detectIsMobile } from '../capture-constraints-BujkZcfb.js';
4
- export { C as CreateDetectorOptions, D as DEFAULT_TIER_ORDER, a as DEFAULT_V3_ASSET_BASE_URL, b as Detector, c as DetectorLadderError, F as FaceObservation, d as createDetector, i as intrinsicSize, t as toStreamPixels } from '../detect-worker-CKXHlXx9.js';
4
+ export { C as CreateDetectorOptions, D as DEFAULT_TIER_ORDER, a as DEFAULT_V3_ASSET_BASE_URL, b as Detector, c as DetectorLadderError, F as FaceObservation, d as createDetector, i as intrinsicSize, t as toStreamPixels } from '../detect-worker-DclNxkZT.js';
5
5
 
6
6
  declare function captureMirroredKeyframe(video: HTMLVideoElement, canvas: HTMLCanvasElement, quality?: number): Promise<Blob>;
7
7
 
@@ -1,139 +1 @@
1
- import {
2
- CENTERED_FACTOR,
3
- CIRCLE_RADIUS_FACTOR,
4
- CLIP_MS,
5
- CaptureSessionV3,
6
- ClipError,
7
- ClipRecorder,
8
- DEFAULT_CLIP_MIME,
9
- DEVICE_PROFILES,
10
- DetectScheduler,
11
- DeviceProfiler,
12
- FaceGateV3,
13
- IN_CIRCLE_FACTOR,
14
- KEYFRAME_CANDIDATES,
15
- KEYFRAME_WINDOW_MS,
16
- MAX_CLIP_BYTES,
17
- MIME_CANDIDATES,
18
- STOP_GRACE_MS,
19
- TIMESLICE_MS,
20
- V3_GATE_DEFAULTS,
21
- VIDEO_BPS,
22
- buildCaptureConstraints,
23
- buildLivenessV2FormData,
24
- cameraPreflight,
25
- captureMirroredKeyframe,
26
- classifyDevice,
27
- detectIsMobile,
28
- extForMime,
29
- isClipTooLarge,
30
- isMediaRecorderSupported,
31
- mapGetUserMediaError,
32
- pickMimeType,
33
- probeDevice
34
- } from "../chunk-TG5IE552.js";
35
- import {
36
- DEFAULT_TIER_ORDER,
37
- DEFAULT_V3_ASSET_BASE_URL,
38
- DetectorLadderError,
39
- createDetector,
40
- intrinsicSize,
41
- toStreamPixels
42
- } from "../chunk-NWF46H7K.js";
43
- import {
44
- EXPOSURE_BAND,
45
- SHARP_REF,
46
- exposure,
47
- meanLuma,
48
- sharpness
49
- } from "../chunk-MWNFSNMP.js";
50
-
51
- // src/core/messages.ts
52
- var errorCopy = {
53
- permission: {
54
- key: "fcv2.err.permission",
55
- fr: "Autorisez la cam\xE9ra dans les r\xE9glages du navigateur (ic\xF4ne cam\xE9ra dans la barre d\u2019adresse), puis r\xE9essayez."
56
- },
57
- notfound: {
58
- key: "fcv2.err.notfound",
59
- fr: "Aucune cam\xE9ra d\xE9tect\xE9e. Branchez ou activez une cam\xE9ra, puis r\xE9essayez."
60
- },
61
- inuse: {
62
- key: "fcv2.err.inuse",
63
- fr: "La cam\xE9ra est utilis\xE9e par une autre application. Fermez-la puis r\xE9essayez."
64
- },
65
- overconstrained: {
66
- key: "fcv2.err.overconstrained",
67
- fr: "La cam\xE9ra ne prend pas en charge les r\xE9glages demand\xE9s. Nouvel essai en cours\u2026"
68
- },
69
- insecure: {
70
- key: "fcv2.err.insecure",
71
- fr: "La cam\xE9ra n\xE9cessite une connexion s\xE9curis\xE9e (HTTPS). Ouvrez la page en HTTPS."
72
- },
73
- unsupported: {
74
- key: "fcv2.err.unsupported",
75
- fr: "Votre navigateur ne prend pas en charge l\u2019enregistrement vid\xE9o. Utilisez un navigateur r\xE9cent."
76
- },
77
- generic: {
78
- key: "fcv2.err.generic",
79
- fr: "Cam\xE9ra indisponible. R\xE9essayez ou contactez le support."
80
- }
81
- };
82
- var uiCopy = {
83
- recording: { key: "fcv2.recording", fr: "Enregistrement en cours\u2026" },
84
- uploading: { key: "fcv2.uploading", fr: "Envoi en cours\u2026" },
85
- clipTooLarge: {
86
- key: "fcv2.err.cliptoolarge",
87
- fr: "La vid\xE9o est trop volumineuse. R\xE9essayez dans un endroit mieux \xE9clair\xE9."
88
- },
89
- retry: { key: "fcv2.retry", fr: "R\xE9essayer" },
90
- listen: { key: "fcv2.listen", fr: "\xC9couter" }
91
- };
92
- export {
93
- CENTERED_FACTOR,
94
- CIRCLE_RADIUS_FACTOR,
95
- CLIP_MS,
96
- CaptureSessionV3,
97
- ClipError,
98
- ClipRecorder,
99
- DEFAULT_CLIP_MIME,
100
- DEFAULT_TIER_ORDER,
101
- DEFAULT_V3_ASSET_BASE_URL,
102
- DEVICE_PROFILES,
103
- DetectScheduler,
104
- DetectorLadderError,
105
- DeviceProfiler,
106
- EXPOSURE_BAND,
107
- FaceGateV3,
108
- IN_CIRCLE_FACTOR,
109
- KEYFRAME_CANDIDATES,
110
- KEYFRAME_WINDOW_MS,
111
- MAX_CLIP_BYTES,
112
- MIME_CANDIDATES,
113
- SHARP_REF,
114
- STOP_GRACE_MS,
115
- TIMESLICE_MS,
116
- V3_GATE_DEFAULTS,
117
- VIDEO_BPS,
118
- buildCaptureConstraints,
119
- buildLivenessV2FormData,
120
- cameraPreflight,
121
- captureMirroredKeyframe,
122
- classifyDevice,
123
- createDetector,
124
- detectIsMobile,
125
- errorCopy,
126
- exposure,
127
- extForMime,
128
- intrinsicSize,
129
- isClipTooLarge,
130
- isMediaRecorderSupported,
131
- mapGetUserMediaError,
132
- meanLuma,
133
- pickMimeType,
134
- probeDevice,
135
- sharpness,
136
- toStreamPixels,
137
- uiCopy
138
- };
139
- //# sourceMappingURL=index.js.map
1
+ import{a as e,b as r,c as o,d as n,e as a,f as v,g as y,h as g,i as x,j as k,k as z,l as C,m as S,n as V,o as j,p as q,q as w,r as D,s as G,t as I,u as J}from"../chunk-DQWW4OCK.js";import{a as A,b as H,c as K,d as P}from"../chunk-POIQGEZM.js";import{a as s,b as t,c as i,d as c,e as p,f as u,g as f,h as m,i as d,j as l}from"../chunk-FHJ7HO3M.js";import{a as B,b as F,c as N,d as O,e as U}from"../chunk-FPXL63KZ.js";import"../chunk-LQ7C44JG.js";import{a as L,b as T,c as E,d as R,e as h,f as b}from"../chunk-OKWG3PVH.js";var M={permission:{key:"fcv2.err.permission",fr:"Autorisez la cam\xE9ra dans les r\xE9glages du navigateur (ic\xF4ne cam\xE9ra dans la barre d\u2019adresse), puis r\xE9essayez."},notfound:{key:"fcv2.err.notfound",fr:"Aucune cam\xE9ra d\xE9tect\xE9e. Branchez ou activez une cam\xE9ra, puis r\xE9essayez."},inuse:{key:"fcv2.err.inuse",fr:"La cam\xE9ra est utilis\xE9e par une autre application. Fermez-la puis r\xE9essayez."},overconstrained:{key:"fcv2.err.overconstrained",fr:"La cam\xE9ra ne prend pas en charge les r\xE9glages demand\xE9s. Nouvel essai en cours\u2026"},insecure:{key:"fcv2.err.insecure",fr:"La cam\xE9ra n\xE9cessite une connexion s\xE9curis\xE9e (HTTPS). Ouvrez la page en HTTPS."},unsupported:{key:"fcv2.err.unsupported",fr:"Votre navigateur ne prend pas en charge l\u2019enregistrement vid\xE9o. Utilisez un navigateur r\xE9cent."},generic:{key:"fcv2.err.generic",fr:"Cam\xE9ra indisponible. R\xE9essayez ou contactez le support."}},Q={recording:{key:"fcv2.recording",fr:"Enregistrement en cours\u2026"},uploading:{key:"fcv2.uploading",fr:"Envoi en cours\u2026"},clipTooLarge:{key:"fcv2.err.cliptoolarge",fr:"La vid\xE9o est trop volumineuse. R\xE9essayez dans un endroit mieux \xE9clair\xE9."},retry:{key:"fcv2.retry",fr:"R\xE9essayer"},listen:{key:"fcv2.listen",fr:"\xC9couter"}};export{a as CENTERED_FACTOR,o as CIRCLE_RADIUS_FACTOR,v as CLIP_MS,J as CaptureSessionV3,k as ClipError,z as ClipRecorder,i as DEFAULT_CLIP_MIME,T as DEFAULT_TIER_ORDER,L as DEFAULT_V3_ASSET_BASE_URL,A as DEVICE_PROFILES,S as DetectScheduler,E as DetectorLadderError,P as DeviceProfiler,F as EXPOSURE_BAND,j as FaceGateV3,D as GATE_SNAPSHOT_MS,w as GateBlockStats,n as IN_CIRCLE_FACTOR,G as KEYFRAME_CANDIDATES,I as KEYFRAME_WINDOW_MS,f as MAX_CLIP_BYTES,s as MIME_CANDIDATES,B as SHARP_REF,g as STOP_GRACE_MS,y as TIMESLICE_MS,V as V3_GATE_DEFAULTS,x as VIDEO_BPS,q as blockReasonOf,e as buildCaptureConstraints,l as buildLivenessV2FormData,p as cameraPreflight,C as captureMirroredKeyframe,K as classifyDevice,b as createDetector,r as detectIsMobile,M as errorCopy,U as exposure,d as extForMime,R as intrinsicSize,m as isClipTooLarge,u as isMediaRecorderSupported,c as mapGetUserMediaError,N as meanLuma,t as pickMimeType,H as probeDevice,O as sharpness,h as toStreamPixels,Q as uiCopy};
@@ -0,0 +1,42 @@
1
+ var Y={fp12:"08390000c48a",engine:"sekyro-ocr-1",precision:"fp32",files:{"sekyro-ocr.wasm":{bytes:3550608,sha256:"c15968a6de3d2225e2fdbf36d71a9214c2910419056c6878444fd2d0567bb748",tier:"live",contentType:"application/wasm"},"sekyro-ocr.mjs":{bytes:4270,sha256:"209a78d96ca53344996a0c2300aed4ff8a5c69e142713216975a2840eec08cac",tier:"bundled",contentType:"text/javascript"},"det.param":{bytes:24252,sha256:"c39ba0b1195e8ad37cfc5bdd7acedcfc1d9cb901e7b8eb1c9c4f6e5a66c04eb3",tier:"live",contentType:"text/plain"},"det.bin":{bytes:4685856,sha256:"652bafe366565109a1a5766caf482bc46f01481f8044d3a785bd9a1be67c63bb",tier:"live",contentType:"application/octet-stream"},"mrz-rec.param":{bytes:3510,sha256:"bc69b1b9683e35f6605b21001fadeb81468063459c00c0fc83c67c139f23df01",tier:"live",contentType:"text/plain"},"mrz-rec.bin":{bytes:494196,sha256:"de93a2aa2f08670cc7dedd17ba378d2f5d7cf6ae409054a9eac863a02c2febae",tier:"live",contentType:"application/octet-stream"},"mrz_dict.txt":{bytes:73,sha256:"b19858a4de2ccbbbdd4b53982188ea2c7664013183bbd1ae9d20ab52c661f97f",tier:"live",contentType:"text/plain"},"latin-rec.param":{bytes:19602,sha256:"2ae30dfdc7ee482c6cbbc0419c16ee125e880e9eaf69053d61953694bb0fcf4c",tier:"lazy",contentType:"text/plain"},"latin-rec.bin":{bytes:10750388,sha256:"f91ebdcf4d6b58c58a87704160e59d07ae56bc2d5021eae09d095c5a20bf7525",tier:"lazy",contentType:"application/octet-stream"},"ppocr_keys_v1.txt":{bytes:26249,sha256:"28b2362ad4ab2dc38769aa72feb535e3a9ddb3fd2a7585a05920e6393b1dc7f7",tier:"lazy",contentType:"text/plain"},"arabic-rec.param":{bytes:9858,sha256:"4e5cc85667dfaaa0c67d3f308400645a578c08bd43f952cab6c55b7bce143ea9",tier:"lazy",contentType:"text/plain"},"arabic-rec.bin":{bytes:8853572,sha256:"5acc3265a1738dc31316258383830d5dbdfa5e8ebc2e710f9001f832ecfbffb0",tier:"lazy",contentType:"application/octet-stream"},"arabic_dict.txt":{bytes:405,sha256:"637c27c88512c22089bef927b34ada08f748dc132ac70facd68d8202384c2726",tier:"lazy",contentType:"text/plain"}}};var ut="sekyro-mrz-1";function dt(e){return Array.from(new Uint8Array(e),t=>t.toString(16).padStart(2,"0")).join("")}async function be(e){return dt(await crypto.subtle.digest("SHA-256",e))}function Ne(e,t){return be(new TextEncoder().encode(`${ut}\0${e}\0${t.join(`
2
+ `)}`))}var G=class extends Error{constructor(t){super(t),this.name="AssetFailure",this.reason=t}},_e=Object.keys(Y.files).filter(e=>Y.files[e].tier==="live"),rn=Object.keys(Y.files).filter(e=>Y.files[e].tier==="lazy");function ft(e,t){return`${e.replace(/\/+$/,"")}/${Y.fp12}/${t}`}async function mt(e,t,n,s=fetch,r=()=>performance.now()){let o=Y.files[t],i=r(),l=async b=>{try{let f=await s(ft(e,t),{cache:b,signal:n,credentials:"omit"});if(!f.ok)throw new G("download");return await f.arrayBuffer()}catch(f){throw f instanceof G?f:new G("download")}},a=async b=>b.byteLength===o.bytes&&await be(b)===o.sha256,d=await l("force-cache");if(!await a(d)&&(d=await l("reload"),!await a(d)))throw new G("integrity");return{bytes:d,ms:r()-i}}async function Te(e,t,n,s=fetch,r=()=>performance.now()){let o=new AbortController,i=new Map,l=t.reduce((f,p)=>f+Y.files[p].bytes,0),a=r(),d=!0,b=0;for(let f of t){let p=await mt(e,f,o.signal,s,r);i.set(f,p.bytes),p.ms>=50&&(d=!1),b+=p.bytes.byteLength;let y=r()-a;if(b<l&&y>0&&y*l/b>n)throw o.abort(),new G("download")}return{files:i,downloadMs:Math.round(r()-a),cached:d}}var I=class extends Error{constructor(t){super(t),this.name="OcrFailure",this.code=t}};function Oe(e){return[...e.split(`
3
+ `)," "]}function Le(e,t,n,s,r){if(n<2||e.length===0||e.length!==t.length||s.length<n-1)throw new I("OCR_INFERENCE_FAILED");let o="",i=-1,l=0,a=0;for(let b=0;b<e.length;b++){let f=e[b];if(!Number.isInteger(f)||f<0||f>=n)throw new I("OCR_INFERENCE_FAILED");f!==0&&f!==i&&(o+=s[f-1],l+=Math.fround(t[b]),a++),i=f}return{text:r?Array.from(o).reverse().join(""):o,score:a===0?0:l/a}}var we=e=>e.reduce((t,n)=>t+n,0)/e.length;function De(e){let t=e.filter(r=>r.score>=.5);if(t.length===0)return[];if(t.some(r=>r.box.length!==4||!Number.isFinite(r.score)||r.box.some(o=>!Number.isFinite(o.x)||!Number.isFinite(o.y))))throw new I("OCR_INFERENCE_FAILED");let n=we(t.map(r=>r.box[2].y-r.box[0].y)),s=[];for(let r of t){let o=(r.box[0].y+r.box[2].y)/2,i=s.find(l=>Math.abs((l[0].box[0].y+l[0].box[2].y)/2-o)<n/2);i===void 0?s.push([r]):i.push(r)}for(let r of s)r.sort((o,i)=>o.box[0].x-i.box[0].x);return s.sort((r,o)=>r[0].box[0].y-o[0].box[0].y),s.map(r=>{let o=r[0].box,i=r[r.length-1].box,l=[o[0],i[1],i[2],o[3]];return{text:r.map(a=>a.text).join(" "),x:Math.min(...l.map(a=>a.x)),y:Math.min(...l.map(a=>a.y)),x2:Math.max(...l.map(a=>a.x)),y2:Math.max(...l.map(a=>a.y)),score:we(r.map(a=>a.score))}})}var j={of(e,t,n){return!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n)||t<1||t>12||n<1||n>new Date(Date.UTC(e,t,0)).getUTCDate()?null:{year:e,month:t,day:n}},iso(e){return`${String(e.year).padStart(4,"0")}-${String(e.month).padStart(2,"0")}-${String(e.day).padStart(2,"0")}`},parse(e){let[t,n,s]=e.split("-").map(Number);return{year:t,month:n,day:s}},today(){let e=new Date;return{year:e.getFullYear(),month:e.getMonth()+1,day:e.getDate()}}},ve=30,Pe=36,Ue=44,ge="MRT",bt=[7,3,1],gt=/^[0-9]{6}$/,ye=/^[0-9]{10}$/,Fe=e=>e!==void 0&&e.length===1&&e>="0"&&e<="9";function pt(e){return e>="0"&&e<="9"?e.charCodeAt(0)-48:e>="A"&&e<="Z"?e.charCodeAt(0)-55:0}function ue(e){let t=0;for(let n=0;n<e.length;n++)t+=pt(e[n])*bt[n%3];return String(t%10)}function D(e,t){return t==="<"?null:Fe(t)?ue(e)===t:!1}function ce(e){return e.trim().toUpperCase().replaceAll(" ","")}function yt(e,t){return(ce(e)+"<".repeat(t)).slice(0,t)}function k(e){return e.replace(/^<+|<+$/g,"")}var ht=new Set(`ABW AFG AGO AIA ALA ALB AND ARE ARG ARM ASM ATA ATF ATG AUS AUT AZE BDI BEL BEN BES BFA BGD BGR BHR
4
+ BHS BIH BLM BLR BLZ BMU BOL BRA BRB BRN BTN BVT BWA CAF CAN CCK CHE CHL CHN CIV CMR COD COG COK COL
5
+ COM CPV CRI CUB CUW CXR CYM CYP CZE DEU DJI DMA DNK DOM DZA ECU EGY ERI ESH ESP EST ETH FIN FJI FLK
6
+ FRA FRO FSM GAB GBR GEO GGY GHA GIB GIN GLP GMB GNB GNQ GRC GRD GRL GTM GUF GUM GUY HKG HMD HND HRV
7
+ HTI HUN IDN IMN IND IOT IRL IRN IRQ ISL ISR ITA JAM JEY JOR JPN KAZ KEN KGZ KHM KIR KNA KOR KWT LAO
8
+ LBN LBR LBY LCA LIE LKA LSO LTU LUX LVA MAC MAF MAR MCO MDA MDG MDV MEX MHL MKD MLI MLT MMR MNE MNG
9
+ MNP MOZ MRT MSR MTQ MUS MWI MYS MYT NAM NCL NER NFK NGA NIC NIU NLD NOR NPL NRU NZL OMN PAK PAN PCN
10
+ PER PHL PLW PNG POL PRI PRK PRT PRY PSE PYF QAT REU ROU RUS RWA SAU SDN SEN SGP SGS SHN SJM SLB SLE
11
+ SLV SMR SOM SPM SRB SSD STP SUR SVK SVN SWE SWZ SXM SYC SYR TCA TCD TGO THA TJK TKL TKM TLS TON TTO
12
+ TUN TUR TUV TWN TZA UGA UKR UMI URY USA UZB VAT VCT VEN VGB VIR VNM VUT WLF WSM XKK YEM ZAF ZMB ZWE`.trim().split(/\s+/)),At=new Set(`D GBD GBN GBO GBP GBS RKS UNK UNO UNA EUE XBA XIM XCC XCE XCO XDC XEC XES XMP XOM XPO XXA XXB XXC
13
+ XXX ANT NTZ UTO`.trim().split(/\s+/));function xt(e){return ht.has(e)||At.has(e)}var Mt="012568",Rt="OIZSGB",St="OQDILZSGB",It="000112568";function pe(e){let t=Mt.indexOf(e);return e.length!==1||t<0?e:Rt[t]}function Ct(e){let t=St.indexOf(e);return e.length!==1||t<0?e:It[t]}var Et=[["\xAB","<<"],["\u2039","<"],["\uFF1C","<"],["\u3008","<"],["\xD7","X"]],Ge=[`aaccc${"x".repeat(9)}n${"x".repeat(15)}`,`${"n".repeat(7)}x${"n".repeat(7)}ccc${"x".repeat(11)}n`,"a".repeat(30)],Ke=[`aaccc${"a".repeat(31)}`,`${"x".repeat(9)}nccc${"n".repeat(7)}x${"n".repeat(7)}${"x".repeat(7)}n`],ze=[`aaccc${"a".repeat(39)}`,`${"x".repeat(9)}nccc${"n".repeat(7)}x${"n".repeat(7)}${"x".repeat(14)}nn`];function Nt(e,t){let n="",s=0;for(;s<t.length;){let r=t[s];if(r==="c"){let i=e.substring(s,s+3),l=Array.from(i,pe).join("");n+=l!==i&&xt(l.replaceAll("<",""))?l:i,s+=3;continue}let o=e[s];n+=r==="a"?pe(o):r==="n"?Ct(o):o,s++}return n}function ee(e,t,n){return n.slice(0,e.length).map((s,r)=>{let o=Et.reduce((i,[l,a])=>i.replaceAll(l,a),ce(e[r]));return Nt(yt(o,t),s)})}function He(e,t){let n=e.filter(s=>s.trim().length>0);return t==="TD1"?ee(n.slice(0,3),ve,Ge):t==="TD2"?ee(n.slice(0,2),Pe,Ke):ee(n.slice(0,2),Ue,ze)}function he(e){let t=`${e.toUpperCase()}<<`.slice(0,2);return t==="AC"?"unknown":t==="IR"||t==="AR"||t[0]==="A"||t[0]==="C"?"residence_permit":t[0]==="P"?"passport":t[0]==="I"?"carte_identite":"unknown"}function _t(e){return ye.test(e)&&Number(e)%97===1}function Tt(e,t,n){if(!gt.test(e))return null;let s=Number(e.slice(0,2)),r=t?2e3+s:s>n.year%100?1900+s:2e3+s;return j.of(r,Number(e.slice(2,4)),Number(e.slice(4,6)))}function te(e,t,n){let s=Tt(e,t,n);return s?j.iso(s):""}function Ae(e){let t=e.split("<<").filter(n=>k(n).length>0);return[(t[0]??"").replaceAll("<"," ").trim(),(t[1]??"").replaceAll("<"," ").trim()]}var xe=e=>e==="M"||e==="F"?e:"",Ot=e=>e.substring(0,2).replaceAll("<",""),oe=e=>e.substring(2,5).replaceAll("<","");function We(e,t,n){if(t==="<"&&k(n).length>0){let s=n.indexOf("<"),r=s<0?n:n.slice(0,s);if(r.length>=2){let o=e+r.slice(0,-1);if(D(o,r[r.length-1])===!0)return{value:k(o),ok:!0,warn:null}}return{value:k(e),ok:!1,warn:"docnum_cd_mismatch"}}return{value:k(e),ok:D(e,t),warn:null}}var K=(e,t)=>({success:!1,error:e,fields:{},checkDigits:{},hardCdFail:!1,warns:[],...t===void 0?{}:{linesCount:t}});function Me(e,t,n,s,r,o,i){return{success:!0,documentType:e,format:t,documentCode:Ot(n),fields:s,checkDigits:r,hardCdFail:o,warns:i}}function Lt(e,t){if(e.length<3)return K("mrz_incomplete");let[n,s,r]=ee(e.slice(0,3),ve,Ge),o=oe(n)===ge||s.substring(15,18)===ge||_t(n.substring(15,25)),i=[],l={},a,d,b=!1;if(o){a=k(n.substring(5,14));let A=n[14];Fe(A)?(d=ue(n.substring(5,14))===A,d||i.push("td1_docnum_cd_mismatch")):d=null}else{let A=We(n.substring(5,14),n[14],n.substring(15,30));if(A.ok===null)return K("mrz_incomplete");a=A.value,d=A.ok,b=A.ok===!1&&A.warn===null,A.warn!==null&&i.push(A.warn)}l.document_number=d;let f=D(s.substring(0,6),s[6]),p=D(s.substring(8,14),s[14]);if(l.birth_date=f,l.expiry_date=p,f===null||p===null)return K("mrz_incomplete");let y=D(n.substring(5,30)+s.substring(0,7)+s.substring(8,15)+s.substring(18,29),s[29]);l.composite=y,y===!1&&i.push("composite_cd_mismatch");let m=o?n.substring(15,25):"",[u,R]=Ae(r),S=f===!1||p===!1||b;return Me(he(n.substring(0,2)),"TD1",n,{issuing_state:oe(n),document_number:a,nni:ye.test(m)?m:"",birth_date:te(s.substring(0,6),!1,t),expiry_date:te(s.substring(8,14),!0,t),sex:xe(s[7]),nationality:k(s.substring(15,18)),surname:u,given_names:R},l,S,i)}function wt(e,t){if(e.length<2)return K("mrz_incomplete");let[n,s]=ee(e.slice(0,2),Pe,Ke),r=[],o=We(s.substring(0,9),s[9],s.substring(28,35));o.warn!==null&&r.push(o.warn);let i=D(s.substring(13,19),s[19]),l=D(s.substring(21,27),s[27]),a={document_number:o.ok,birth_date:i,expiry_date:l};if(o.ok===null||i===null||l===null)return K("mrz_incomplete");let d=D(s.substring(0,10)+s.substring(13,20)+s.substring(21,35),s[35]);a.composite=d,d===!1&&r.push("composite_cd_mismatch");let[b,f]=Ae(n.substring(5,36)),p=o.ok===!1&&o.warn===null||i===!1||l===!1;return Me(he(n.substring(0,2)),"TD2",n,{issuing_state:oe(n),document_number:o.value,nni:"",birth_date:te(s.substring(13,19),!1,t),expiry_date:te(s.substring(21,27),!0,t),sex:xe(s[20]),nationality:k(s.substring(10,13)),surname:b,given_names:f},a,p,r)}function ke(e,t){if(e.length<2)return K("mrz_incomplete");let[n,s]=ee(e.slice(0,2),Ue,ze),r=oe(n)===ge,o=[],i={},l=s.substring(0,9),a=D(l,s[9]),d=D(s.substring(13,19),s[19]),b=D(s.substring(21,27),s[27]);if(i.document_number=a,i.birth_date=d,i.expiry_date=b,a===null||d===null||b===null)return K("mrz_incomplete");let f=s.substring(28,42),p="";if(k(f).length>0){let S=D(f,s[42]);i.personal_number=S;let A=k(f);r&&S!==!1&&ye.test(A)&&(p=A)}let y=D(s.substring(0,10)+s.substring(13,20)+s.substring(21,43),s[43]);i.composite=y,y===!1&&o.push("composite_cd_mismatch");let[m,u]=Ae(n.substring(5,44)),R=a===!1||d===!1||b===!1;return Me(he(n.substring(0,2)),"TD3",n,{issuing_state:oe(n),document_number:k(l),nni_candidate:p,birth_date:te(s.substring(13,19),!1,t),expiry_date:te(s.substring(21,27),!0,t),sex:xe(s[20]),nationality:k(s.substring(10,13)),surname:m,given_names:u},i,R,o)}var Be=new Set(["A","C","I"]);function Ve(e,t=j.today()){let n=e.filter(r=>r.trim().length>0);if(n.length===0)return K("mrz_unrecognized",0);let s=Array.from(ce(n[0]).slice(0,1),pe).join("");return n.length===3&&Be.has(s)?Lt(n,t):n.length===2&&s==="P"?ke(n,t):n.length===2&&Be.has(s)?Math.max(...n.map(r=>ce(r).length))>40?ke(n,t):wt(n,t):K("mrz_unrecognized",n.length)}var Dt=new Map([...(`ABWAW AFGAF AGOAO AIAAI ALAAX ALBAL ANDAD AREAE ARGAR ARMAM ASMAS ATAAQ
14
+ ATFTF ATGAG AUSAU AUTAT AZEAZ BDIBI BELBE BENBJ BESBQ BFABF BGDBD BGRBG
15
+ BHRBH BHSBS BIHBA BLMBL BLRBY BLZBZ BMUBM BOLBO BRABR BRBBB BRNBN BTNBT
16
+ BVTBV BWABW CAFCF CANCA CCKCC CHECH CHLCL CHNCN CIVCI CMRCM CODCD COGCG
17
+ COKCK COLCO COMKM CPVCV CRICR CUBCU CUWCW CXRCX CYMKY CYPCY CZECZ DEUDE
18
+ DJIDJ DMADM DNKDK DOMDO DZADZ ECUEC EGYEG ERIER ESHEH ESPES ESTEE ETHET
19
+ FINFI FJIFJ FLKFK FRAFR FROFO FSMFM GABGA GBRGB GEOGE GGYGG GHAGH GIBGI
20
+ GINGN GLPGP GMBGM GNBGW GNQGQ GRCGR GRDGD GRLGL GTMGT GUFGF GUMGU GUYGY
21
+ HKGHK HMDHM HNDHN HRVHR HTIHT HUNHU IDNID IMNIM INDIN IOTIO IRLIE IRNIR
22
+ IRQIQ ISLIS ISRIL ITAIT JAMJM JEYJE JORJO JPNJP KAZKZ KENKE KGZKG KHMKH
23
+ KIRKI KNAKN KORKR KWTKW LAOLA LBNLB LBRLR LBYLY LCALC LIELI LKALK LSOLS
24
+ LTULT LUXLU LVALV MACMO MAFMF MARMA MCOMC MDAMD MDGMG MDVMV MEXMX MHLMH
25
+ MKDMK MLIML MLTMT MMRMM MNEME MNGMN MNPMP MOZMZ MRTMR MSRMS MTQMQ MUSMU
26
+ MWIMW MYSMY MYTYT NAMNA NCLNC NERNE NFKNF NGANG NICNI NIUNU NLDNL NORNO
27
+ NPLNP NRUNR NZLNZ OMNOM PAKPK PANPA PCNPN PERPE PHLPH PLWPW PNGPG POLPL
28
+ PRIPR PRKKP PRTPT PRYPY PSEPS PYFPF QATQA REURE ROURO RUSRU RWARW SAUSA
29
+ SDNSD SENSN SGPSG SGSGS SHNSH SJMSJ SLBSB SLESL SLVSV SMRSM SOMSO SPMPM
30
+ SRBRS SSDSS STPST SURSR SVKSK SVNSI SWESE SWZSZ SXMSX SYCSC SYRSY TCATC
31
+ TCDTD TGOTG THATH TJKTJ TKLTK TKMTM TLSTL TONTO TTOTT TUNTN TURTR TUVTV
32
+ TWNTW TZATZ UGAUG UKRUA UMIUM URYUY USAUS UZBUZ VATVA VCTVC VENVE VGBVG
33
+ VIRVI VNMVN VUTVU WLFWF WSMWS YEMYE ZAFZA ZMBZM ZWEZW`.match(/[A-Z]{5}/g)??[]).map(e=>[e.slice(0,3),e.slice(3)]),["D","DE"]]),Ye={of(e){return Dt.get(e.replaceAll("<",""))??null}};var Se=e=>ue(e);function Qe(e){return e.slice(0,5e4).split(/\r?\n/).slice(0,200).map(t=>t.toUpperCase().replace(/[«‹〈]/g,"<").replace(/[^A-Z0-9<]/g,"")).filter(t=>t.length>0)}var Ze=e=>e.replace(/[OQ]/g,"0").replace(/[IL]/g,"1").replaceAll("Z","2").replaceAll("S","5").replaceAll("B","8");function Xe(e,t){let n=Ze(e),s=Ze(t);if(!/^\d{6}$/.test(n)||Se(n)!==s)return null;let r=2e3+Number(n.slice(0,2)),o=Number(n.slice(2,4)),i=Number(n.slice(4,6));return o>=1&&o<=12&&i>=1&&i<=new Date(Date.UTC(r,o,0)).getUTCDate()?n:null}function Re(e,t){let n=e.replace(/<+$/,"");return/^[A-Z0-9]+$/.test(n)&&Se(e)===t?n:null}function kt(e){if(e.length<15)return null;if(e[14]!=="<")return Re(e.substring(5,14),e[14]);let t=/^([A-Z0-9]+)</.exec(e.substring(15,Math.min(30,e.length)))?.[1];return t===void 0||t.length<2?null:Re(e.substring(5,14)+t.slice(0,-1),t[t.length-1])}var x=(e,t,n)=>t>=e.length?"":e.substring(t,Math.min(n,e.length)),Z=(e,t)=>t<e.length?e[t]:"",$e=/^[IAC][A-Z<][A-Z<]{3}/,Bt=/^P[A-Z<][A-Z<]{3}/,qe=/^[PIAC][A-Z<][A-Z<]{3}/;function vt(e){let t=Qe(e),n=[],s=[];for(let o=0;o<t.length;o++){let i="",l=0;for(;l<6&&o+l<t.length&&(i+=t[o+l],!(i.length>300));)s.push(i),l++}let r=(o,i,l)=>{if(i.length<(l?15:28))return;let a=new Map,d=l?kt(o):Re(x(i,0,9),Z(i,9)),b=Xe(l?x(i,0,6):x(i,13,19),l?Z(i,6):Z(i,19)),f=Xe(l?x(i,8,14):x(i,21,27),l?Z(i,14):Z(i,27));d!==null&&a.set("docNumber",d),b!==null&&a.set("dob6",b),f!==null&&a.set("expiry6",f),a.size>0&&n.push({fields:a,country:Ye.of(x(o,2,5))})};for(let o of s)$e.test(o)&&(o.length>=45&&r(o.substring(0,30),o.substring(30),!0),o.length>=64&&r(o.substring(0,36),o.substring(36),!1)),Bt.test(o)&&o.length>=72&&r(o.substring(0,44),o.substring(44),!1);for(let o=0;o<t.length-1;o++){let i=t[o],l=t[o+1];$e.test(i)&&i.length>=15&&i.length<=30&&r(i,l,!0),qe.test(i)&&i.length>=5&&i.length<=44&&r(i,l,!1)}return n}function Pt(e){let t=vt(e);if(t.length===0)return{};let n=Math.max(...t.map(o=>o.fields.size)),s=t.filter(o=>o.fields.size===n),r={};for(let o of["docNumber","dob6","expiry6"]){let i=new Set(s.map(l=>l.fields.get(o)).filter(l=>l!==void 0));i.size===1&&s.every(l=>l.fields.has(o))&&(r[o]=[...i][0])}return r}function Ut(e){let t=Pt(e),n=t.docNumber,s=t.dob6,r=t.expiry6;return n!==void 0&&s!==void 0&&r!==void 0?{docNumber:n,dob6:s,expiry6:r}:null}function et(e){let t=Gt(e);return t.length===1?t[0]:null}var Ft=e=>JSON.stringify([e.documentNumber,e.nationality,e.dob,e.sex,e.expiry,e.primaryIdentifier,e.secondaryIdentifier,e.optional]);function Gt(e){let t=Qe(e),n=[];for(let r=0;r<t.length;r++){let o=t[r];if(!qe.test(o))continue;let i=o.startsWith("P")?[44]:[30,36];for(let l of i){let a=l===30?3:2,d=t.slice(r,Math.min(t.length,r+a));d.length===a&&d.every(p=>p.length<=l)&&n.push(d.map(p=>p.padEnd(l,"<")).join(`
34
+ `));let b="",f=0;for(;f<6&&r+f<t.length&&(b+=t[r+f],b.length===l*a&&n.push(b),!(b.length>=l*a));)f++}}let s=new Map;for(let r of n){let o=Ut(r);if(o===null)continue;let i=r.includes(`
35
+ `)?r.split(`
36
+ `):r.match(r.length===90?/.{30}/g:r.length===88?/.{44}/g:/.{36}/g)??[],l=i[0]??"",a=i[1]??"",d=i.length===3,b=d?x(l,5,30)+x(a,0,7)+x(a,8,15)+x(a,18,29):x(a,0,10)+x(a,13,20)+x(a,21,a.length-1),f=d?Z(a,29):Z(a,a.length-1);if(!/^[0-9]$/.test(f)||Se(b)!==f)continue;let p=Kt(r);if(p===null||p.primaryIdentifier.length===0&&p.secondaryIdentifier.length===0||!/^[MFX]?$/.test(p.sex))continue;let y={...p,documentNumber:o.docNumber,dob:o.dob6,expiry:o.expiry6};s.set(Ft(y),{fields:y,mrzLines:i})}return[...s.values()]}var P=e=>e.replaceAll("<"," ").replace(/\s+/g," ").trim();function Je(e){let t=e.split("<<");return[P(t[0]??""),P(t.slice(1).join("<<"))]}var je=e=>e.length===0?null:e;function Kt(e){let t=e.split(/\r?\n/).map(s=>s.replace(/\s+$/,"")).filter(s=>s.length>0),n=e.replace(/[\r\n]/g,"");if(t.length===1&&(n.length===90?t=[n.substring(0,30),n.substring(30,60),n.substring(60,90)]:n.length===72?t=[n.substring(0,36),n.substring(36,72)]:n.length===88&&(t=[n.substring(0,44),n.substring(44,88)])),t.length===3){let[s,r,o]=t,i=Z(s,14)==="<"?/^([A-Z0-9]+)</.exec(x(s,15,30))?.[1]:void 0,l=P(x(s,5,14)+(i!==void 0&&i.length>1?i.slice(0,-1):"")),[a,d]=Je(o),b=P(`${x(s,15,30)}<${x(r,18,29)}`);return{documentNumber:l,nationality:P(x(r,15,18)),dob:x(r,0,6),sex:P(x(r,7,8)),expiry:x(r,8,14),primaryIdentifier:a,secondaryIdentifier:d,optional:je(b)}}if(t.length===2){let[s,r]=t,o=s.length>=44,[i,l]=Je(x(s,5,o?44:36));return{documentNumber:P(x(r,0,9)),nationality:P(x(r,10,13)),dob:x(r,13,19),sex:P(x(r,20,21)),expiry:x(r,21,27),primaryIdentifier:i,secondaryIdentifier:l,optional:je(P(o?x(r,28,42):x(r,28,35)))}}return null}function tt(e,t=j.today()){let n=Ve(e,t),s=n.format??null,r=s==="TD1"||s==="TD2"||s==="TD3"?He(e,s):[...e];return{format:s,documentCode:n.documentCode??null,lines:r,valid:n.success&&!n.hardCdFail}}var zt=/^[A-Z0-9<]{25,}$/;function Ht(e){return e.toUpperCase().replaceAll(" ","").replaceAll("\xAB","<").replaceAll("\u2039","<")}var Ie=(e,t,n)=>e.length>=t&&e.length<=n;function nt(e){let t=e.map(Ht).filter(n=>zt.test(n));for(let n=0;n+3<=t.length;n++){let s=t.slice(n,n+3);if(s.every(r=>Ie(r,28,32))&&"IAC".includes(s[0][0]))return s}for(let n=0;n+2<=t.length;n++){let s=t.slice(n,n+2);if(s.every(r=>Ie(r,40,46))&&s[0].startsWith("P")||s.every(r=>Ie(r,34,38))&&"IACPV".includes(s[0][0]))return s}return[]}var ne={SIZE:80,SCRIPT:64,OFFSET:68,STEPS:72},L={DETECTOR:0,LATIN:1,ARABIC:2},U={NONE:0,LATIN:1,ARABIC:2,BOTH:3},de=3;var X=e=>Math.round(Math.min(1,Math.max(0,e))*1e4)/1e4;async function Ce(e,t,n,s,r){let o=r.now??(()=>performance.now()),i=o(),a=e.read(t,n,s,r.region??[0,0,1,1],1,de,U.LATIN,r.detectorLimit).map(u=>({text:u.latin.text,score:u.latin.score,box:[0,1,2,3].map(R=>({x:u.box[2*R],y:u.box[2*R+1]}))})),d=De([...a].reverse()),b=d.map(u=>u.text),f=[...et(b.join(`
37
+ `))?.mrzLines??nt(b)],p=d.map(u=>[X(u.x/n),X(u.y/s),X((u.x2-u.x)/n),X((u.y2-u.y)/s)]),y={kind:"band",ms:0,lineBoxes:p,lineCount:f.length,valid:!1},m=Vt(d.map(u=>u.text),p,f);if(m!==null&&(y.mrzBox=m),f.length>0){let u=tt(f,r.today??j.today());u.format&&(y.format=u.format),u.documentCode&&/^[A-Z<]{1,2}$/.test(u.documentCode)&&(y.documentCode=u.documentCode),u.valid&&(y.valid=!0,y.digest=await Ne(r.salt,u.lines))}return y.ms=Math.round(o()-i),y}var rt=e=>e.toUpperCase().replace(/\s+/g,"");function Wt(e,t){let n=Math.max(e.length,t.length);if(n===0)return 0;let s=0;for(let r=0;r<Math.min(e.length,t.length);r++)e[r]===t[r]&&s++;return s/n}function Vt(e,t,n){if(n.length===0||e.length===0)return null;let s=new Set,r=[];for(let d of n){let b=-1,f=.5;if(e.forEach((p,y)=>{let m=s.has(y)?0:Wt(rt(p),rt(d));m>f&&(f=m,b=y)}),b<0)return null;s.add(b),r.push(t[b])}let o=Math.min(...r.map(d=>d[0])),i=Math.min(...r.map(d=>d[1])),l=Math.max(...r.map(d=>d[0]+d[2])),a=Math.max(...r.map(d=>d[1]+d[3]));return[X(o),X(i),X(l-o),X(a-i)]}var Sn=Object.freeze({minLines:4,fillMin:.55,fillMax:.98,offsetMax:.12,steadyFillDelta:.04,steadyOffsetDelta:.03,layoutShiftMax:.025,lineCountDelta:1,lockMs:600,steadyMs:900,minFrames:3});function st(e,t,n){let s=r=>Math.round(Math.min(1,Math.max(0,r))*1e4)/1e4;return e.map(r=>{let o=[r[0],r[2],r[4],r[6]],i=[r[1],r[3],r[5],r[7]],l=Math.min(...o),a=Math.min(...i);return[s(l/t),s(a/n),s((Math.max(...o)-l)/t),s((Math.max(...i)-a)/n)]}).sort((r,o)=>r[1]-o[1]||r[0]-o[0])}async function Yt(e={}){var t,n=e,s=import.meta.url,r="",o,i;try{r=new URL(".",s).href}catch{}i=c=>{var h=new XMLHttpRequest;return h.open("GET",c,!1),h.responseType="arraybuffer",h.send(null),new Uint8Array(h.response)},o=async c=>{if(c=await fetch(c,{credentials:"same-origin"}),c.ok)return c.arrayBuffer();throw Error(c.status+" : "+c.url)};var l=console.log.bind(console),a=console.error.bind(console),d=!1,b,f,p,y,m,u=!1;function R(){var c=ae.buffer;new Int8Array(c),new Int16Array(c),n.HEAPU8=p=new Uint8Array(c),new Uint16Array(c),new Int32Array(c),y=new Uint32Array(c),new Float32Array(c),new Float64Array(c),m=new BigInt64Array(c),new BigUint64Array(c)}function S(c){throw c="Aborted("+c+")",a(c),d=!0,c+=". Build with -sASSERTIONS for more info.",u&&Q(),c=new WebAssembly.RuntimeError(c),f?.(c),c}var A;async function w(c){try{var h=await o(c);return new Uint8Array(h)}catch{}if(i)c=i(c);else throw"both async and sync fetching of the wasm failed";return c}async function B(c,h){try{var g=await w(c);return await WebAssembly.instantiate(g,h)}catch(C){a(`failed to asynchronously prepare wasm: ${C}`),S(C)}}async function z(c){var h=A;try{var g=fetch(h,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(g,c)}catch(C){a(`wasm streaming compile failed: ${C}`),a("falling back to ArrayBuffer instantiation")}return B(h,c)}var H={},W=()=>{if(!$){var c={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:"./this.program"},h;for(h in H)H[h]===void 0?delete c[h]:c[h]=H[h];var g=[];for(h in c)g.push(`${h}=${c[h]}`);$=g}return $},$,J=[null,[],[]],ie=globalThis.TextDecoder&&new TextDecoder,Q,ae,ct={i:()=>S(""),b:function(c,h,g){return 0<=c&&3>=c?(m[g>>3]=BigInt(Math.round(1e6*(c===0?Date.now():performance.now()))),0):28},d:()=>1073741824,c:c=>{var h=p.length;if(c>>>=0,1073741824<c)return!1;for(var g=1;4>=g;g*=2){var C=h*(1+.2/g);C=Math.min(C,c+100663296);e:{C=(Math.min(1073741824,65536*Math.ceil(Math.max(c,C)/65536))-ae.buffer.byteLength+65535)/65536|0;try{ae.grow(C),R();var _=1;break e}catch{}_=void 0}if(_)return!0}return!1},f:(c,h)=>{var g=0,C=0,_;for(_ of W()){var M=h+g;y[c+C>>2]=M;for(var q=_,O=p,re=M,F=M+1/0-1,E=0;E<q.length;++E){var N=q.codePointAt(E);if(127>=N){if(M>=F)break;O[M++]=N}else if(2047>=N){if(M+1>=F)break;O[M++]=192|N>>6,O[M++]=128|N&63}else if(65535>=N){if(M+2>=F)break;O[M++]=224|N>>12,O[M++]=128|N>>6&63,O[M++]=128|N&63}else{if(M+3>=F)break;O[M++]=240|N>>18,O[M++]=128|N>>12&63,O[M++]=128|N>>6&63,O[M++]=128|N&63,E++}}O[M]=0,q=M-re,g+=q+1,C+=4}return 0},g:(c,h)=>{var g=W();y[c>>2]=g.length,c=0;for(var C of g){for(var _=g=0;_<C.length;++_){var M=C.charCodeAt(_);127>=M?g++:2047>=M?g+=2:55296<=M&&57343>=M?(g+=4,++_):g+=3}c+=g+1}return y[h>>2]=c,0},j:()=>52,h:()=>52,e:function(){return 70},a:(c,h,g,C)=>{for(var _=0,M=0;M<g;M++){var q=y[h>>2],O=y[h+4>>2];h+=8;for(var re=0;re<O;re++){var F=c,E=p[q+re],N=J[F];if(E===0||E===10){F=F===1?l:a,E=N;for(var V=0,se=E,v=V,T=v+void 0;se[v]&&!(v>=T);)++v;if(se=v,16<se-V&&E.buffer&&ie)E=ie.decode(E.subarray(V,se));else{for(v="";V<se;)if(T=E[V++],T&128){var me=E[V++]&63;if((T&224)==192)v+=String.fromCharCode((T&31)<<6|me);else{var Ee=E[V++]&63;T=(T&240)==224?(T&15)<<12|me<<6|Ee:(T&7)<<18|me<<12|Ee<<6|E[V++]&63,65536>T?v+=String.fromCharCode(T):(T-=65536,v+=String.fromCharCode(55296|T>>10,56320|T&1023))}}else v+=String.fromCharCode(T);E=v}F(E),N.length=0}else N.push(E)}_+=O}return y[C>>2]=_,0}},le;return le=await(async function(){function c(g){return g=le=g.exports,n._skw_engine_id=g.m,n._skw_load=g.n,n._skw_unload=g.o,n._skw_set_detector_limit=g.p,n._skw_read=g.q,n._skw_line_count=g.r,n._skw_lines=g.s,n._skw_best=g.t,n._skw_values=g.u,n._skw_sharpness=g.v,n._free=g.w,n._malloc=g.x,Q=g.y,ae=g.k,R(),le}var h={a:ct};return n.instantiateWasm?new Promise(g=>{n.instantiateWasm(h,(C,_)=>{g(c(C,_))})}):(A??(A=n.locateFile?n.locateFile?n.locateFile("sekyro-ocr.wasm",r):r+"sekyro-ocr.wasm":new URL("sekyro-ocr.wasm",import.meta.url).href),c((await z(h)).instance))})(),n.calledRun=!0,d||(u=!0,le.l(),b?.(n)),u?t=n:t=new Promise((c,h)=>{b=c,f=h}),t}var ot=Yt;function it(e){return e===1||e===5?new I("OCR_IMAGE_INVALID"):e===2?new I("OCR_ASSET_INVALID"):e===4?new I("OCR_CANCELLED"):e===6?new I("OCR_BUSY"):e===7?new I("OCR_UNAVAILABLE"):new I("OCR_INFERENCE_FAILED")}var fe=class{constructor(t){this.m=t;this.px=0;this.pxBytes=0;this.dicts=[null,null,null];this.classes=[0,0,0];this.held=[[],[],[]];this.latinKind="latin"}engineId(){let t=this.m._skw_engine_id(),n="";for(let s=t;this.m.HEAPU8[s]!==0&&s<t+64;s++)n+=String.fromCharCode(this.m.HEAPU8[s]);return n}put(t){let n=this.m._malloc(t.length);if(!n)throw new I("OCR_UNAVAILABLE");return this.m.HEAPU8.set(t,n),n}load(t,n,s,r,o={}){this.unload(t);let i=new Uint8Array(n),l=new Uint8Array(i.byteLength+1);l.set(i);let a=r===void 0?null:Oe(r),d=r===void 0?0:at(r);if(o.mrz===!0){if(t!==L.LATIN||r===void 0||!$t(r))throw new I("OCR_ASSET_INVALID")}else if(t===L.LATIN&&(r===void 0||r.endsWith(`
38
+ `)||d!==6625))throw new I("OCR_ASSET_INVALID");if(t===L.ARABIC&&(r===void 0||!r.endsWith(`
39
+ `)||d!==163||a[161]!==""))throw new I("OCR_ASSET_INVALID");let b=new Uint8Array(s),f=this.put(l),p=this.put(b);this.held[t]=[f,p];let y=this.m._skw_load(t,f,l.length,p,b.byteLength,d);if(y!==0)throw this.unload(t),it(y);this.dicts[t]=a,this.classes[t]=d,t===L.LATIN&&(this.latinKind=o.mrz===!0?"mrz":"latin")}recognizer(){return this.loaded(L.LATIN)?this.latinKind:null}unload(t){this.held[t].length&&this.m._skw_unload(t);for(let n of this.held[t])this.m._free(n);this.held[t]=[],this.dicts[t]=null}loaded(t){return this.held[t].length>0}pixels(t){if(t.length>this.pxBytes){if(this.px&&this.m._free(this.px),this.px=this.m._malloc(t.length),!this.px)throw new I("OCR_UNAVAILABLE");this.pxBytes=t.length}return this.m.HEAPU8.set(t,this.px),this.px}sharpness(t,n,s){let r=this.m._skw_sharpness(this.pixels(t),n,s);return r>=0&&Number.isFinite(r)?r:null}read(t,n,s,r,o,i,l,a){if(!Zt(l))throw new I("OCR_IMAGE_INVALID");if(l&U.LATIN&&!this.dicts[L.LATIN]||l&U.ARABIC&&!this.dicts[L.ARABIC]||!this.loaded(0))throw new I("OCR_UNAVAILABLE");let d=this.pixels(t);this.m._skw_set_detector_limit(a);let b=this.m._skw_read(d,n,s,r[0],r[1],r[2],r[3],o,i,l);if(b!==0)throw it(b);let f=this.m._skw_line_count(),p=this.m.HEAPU8.buffer,y=new DataView(p,this.m._skw_lines(),f*ne.SIZE),m=new Int32Array(p,this.m._skw_best()),u=new Float32Array(p,this.m._skw_values()),R=[];for(let S=0;S<f;S++){let A=S*ne.SIZE,w=y.getInt32(A+ne.SCRIPT,!0),B=y.getInt32(A+ne.OFFSET,!0),z=y.getInt32(A+ne.STEPS,!0);if(l===U.NONE){R.push({box:Array.from({length:8},(ie,Q)=>y.getFloat64(A+8*Q,!0))});continue}let H=this.dicts[w];if(!H)throw new I("OCR_INFERENCE_FAILED");let W=Le(m.subarray(B,B+z),u.subarray(B,B+z),this.classes[w],H,w===L.ARABIC),$=Array.from({length:8},(ie,Q)=>y.getFloat64(A+8*Q,!0)),J=R[R.length-1];w===L.ARABIC&&J&&J.arabic===void 0&&J.latin!==void 0&&Xt(J.box,$)?J.arabic=W:R.push(w===L.ARABIC?{box:$,arabic:W}:{box:$,latin:W})}return R}heapBytes(){return this.m.HEAPU8.length}dispose(){for(let t of[0,1,2])this.unload(t);this.px&&this.m._free(this.px),this.px=0,this.pxBytes=0}};function at(e){return(e.endsWith(`
40
+ `)?e.slice(0,-1):e).split(`
41
+ `).length+2}var Zt=e=>Number.isInteger(e)&&e>=U.NONE&&e<=U.BOTH,Xt=(e,t)=>e.every((n,s)=>n===t[s]);function $t(e){let t=e.split(`
42
+ `);return t.length===37&&new Set(t).size===37&&t.every(n=>/^[0-9A-Z<]$/.test(n))&&at(e)===39}async function lt(e){let t=await ot({instantiateWasm:(n,s)=>(WebAssembly.instantiate(e,n).then(r=>s(r,e)),{})});return new fe(t)}function Jt(){let e=null,t=null;return(n,s)=>{if(typeof OffscreenCanvas!="function"||(e||(e=new OffscreenCanvas(n,s),t=e.getContext("2d",{willReadFrequently:!0})),!t))return null;(e.width!==n||e.height!==s)&&(e.width=n,e.height=s);let r=t;return{draw(o){return r.clearRect(0,0,n,s),r.drawImage(o,0,0),r.getImageData(0,0,n,s).data}}}}function jt(){return{fetch:(...e)=>fetch(...e),now:()=>performance.now(),canvas:Jt(),instantiate:lt}}function Qt(e,t=jt()){let n=null,s="",r=960,o=0,i=!1,l=Promise.resolve(),a=m=>e.postMessage(m);async function d(m){if(t.canvas(1,1)===null)return a({id:m.id,kind:"failed",reason:"unsupported"});s=m.salt,r=m.detectorLimit;try{let u=await Te(m.baseUrl,_e,m.maxDownloadMs,t.fetch,t.now);o=u.downloadMs,i=u.cached;let R=await WebAssembly.compile(u.files.get("sekyro-ocr.wasm")),S=await t.instantiate(R),A=new TextDecoder("utf-8",{fatal:!0}).decode(u.files.get("mrz_dict.txt"));S.load(L.DETECTOR,u.files.get("det.param"),u.files.get("det.bin")),S.load(L.LATIN,u.files.get("mrz-rec.param"),u.files.get("mrz-rec.bin"),A,{mrz:!0}),u.files.clear(),n=S,a({id:m.id,kind:"ready",warmupMs:0,downloadMs:o,cached:i})}catch(u){a({id:m.id,kind:"failed",reason:u instanceof G?u.reason:"error"})}}async function b(m,u,R,S){if(!n)return u.close(),a({id:m,kind:"error",code:"not_ready"});let A=u.width,w=u.height,B=t.canvas(A,w);if(!B)return u.close(),a({id:m,kind:"failed",reason:"unsupported"});let z=B.draw(u);u.close();try{a({id:m,...await Ce(n,z,A,w,{detectorLimit:S,salt:s,region:R,now:t.now})})}catch{a({id:m,kind:"error",code:"OCR_INFERENCE_FAILED"})}}async function f(m,u,R){if(!n)return u.close(),a({id:m,kind:"error",code:"not_ready"});let S=u.width,A=u.height,w=t.canvas(S,A);if(!w)return u.close(),a({id:m,kind:"failed",reason:"unsupported"});let B=w.draw(u);u.close();try{let z=t.now(),H=n.read(B,S,A,[0,0,1,1],1,de,U.NONE,R);a({id:m,kind:"layout",ms:Math.round(t.now()-z),lineBoxes:st(H.map(W=>W.box),S,A)})}catch{a({id:m,kind:"error",code:"OCR_INFERENCE_FAILED"})}}async function p(m){if(!n)return a({id:m,kind:"error",code:"not_ready"});let u=t.now(),R=960,S=200,A=new Uint8Array(R*S*4).fill(255);try{await Ce(n,A,R,S,{detectorLimit:r,salt:s,now:t.now})}catch{return a({id:m,kind:"error",code:"OCR_INFERENCE_FAILED"})}a({id:m,kind:"ready",warmupMs:Math.round(t.now()-u),downloadMs:o,cached:i})}async function y(m){switch(m.kind){case"init":return d(m);case"warmup":return p(m.id);case"band":return b(m.id,m.bitmap,void 0,m.detectorLimit);case"still":return b(m.id,m.bitmap,m.region,m.detectorLimit);case"layout":return f(m.id,m.bitmap,m.detectorLimit);case"dispose":n?.dispose(),n=null,e.close();return}}e.onmessage=m=>{let u=m.data;l=l.then(()=>y(u)).catch(()=>a({id:u.id,kind:"error",code:"OCR_INFERENCE_FAILED"}))}}typeof WorkerGlobalScope<"u"&&typeof self<"u"&&self instanceof WorkerGlobalScope&&Qt(self);export{jt as defaultDeps,Qt as installOcrWorkerHost};
@@ -0,0 +1,42 @@
1
+ "use strict";var be=Object.defineProperty;var bt=Object.getOwnPropertyDescriptor;var gt=Object.getOwnPropertyNames;var pt=Object.prototype.hasOwnProperty;var yt=(e,t)=>{for(var n in t)be(e,n,{get:t[n],enumerable:!0})},ht=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of gt(t))!pt.call(e,r)&&r!==n&&be(e,r,{get:()=>t[r],enumerable:!(s=bt(t,r))||s.enumerable});return e};var At=e=>ht(be({},"__esModule",{value:!0}),e);var ln={};yt(ln,{defaultDeps:()=>dt,installOcrWorkerHost:()=>ft});module.exports=At(ln);var Y={fp12:"08390000c48a",engine:"sekyro-ocr-1",precision:"fp32",files:{"sekyro-ocr.wasm":{bytes:3550608,sha256:"c15968a6de3d2225e2fdbf36d71a9214c2910419056c6878444fd2d0567bb748",tier:"live",contentType:"application/wasm"},"sekyro-ocr.mjs":{bytes:4270,sha256:"209a78d96ca53344996a0c2300aed4ff8a5c69e142713216975a2840eec08cac",tier:"bundled",contentType:"text/javascript"},"det.param":{bytes:24252,sha256:"c39ba0b1195e8ad37cfc5bdd7acedcfc1d9cb901e7b8eb1c9c4f6e5a66c04eb3",tier:"live",contentType:"text/plain"},"det.bin":{bytes:4685856,sha256:"652bafe366565109a1a5766caf482bc46f01481f8044d3a785bd9a1be67c63bb",tier:"live",contentType:"application/octet-stream"},"mrz-rec.param":{bytes:3510,sha256:"bc69b1b9683e35f6605b21001fadeb81468063459c00c0fc83c67c139f23df01",tier:"live",contentType:"text/plain"},"mrz-rec.bin":{bytes:494196,sha256:"de93a2aa2f08670cc7dedd17ba378d2f5d7cf6ae409054a9eac863a02c2febae",tier:"live",contentType:"application/octet-stream"},"mrz_dict.txt":{bytes:73,sha256:"b19858a4de2ccbbbdd4b53982188ea2c7664013183bbd1ae9d20ab52c661f97f",tier:"live",contentType:"text/plain"},"latin-rec.param":{bytes:19602,sha256:"2ae30dfdc7ee482c6cbbc0419c16ee125e880e9eaf69053d61953694bb0fcf4c",tier:"lazy",contentType:"text/plain"},"latin-rec.bin":{bytes:10750388,sha256:"f91ebdcf4d6b58c58a87704160e59d07ae56bc2d5021eae09d095c5a20bf7525",tier:"lazy",contentType:"application/octet-stream"},"ppocr_keys_v1.txt":{bytes:26249,sha256:"28b2362ad4ab2dc38769aa72feb535e3a9ddb3fd2a7585a05920e6393b1dc7f7",tier:"lazy",contentType:"text/plain"},"arabic-rec.param":{bytes:9858,sha256:"4e5cc85667dfaaa0c67d3f308400645a578c08bd43f952cab6c55b7bce143ea9",tier:"lazy",contentType:"text/plain"},"arabic-rec.bin":{bytes:8853572,sha256:"5acc3265a1738dc31316258383830d5dbdfa5e8ebc2e710f9001f832ecfbffb0",tier:"lazy",contentType:"application/octet-stream"},"arabic_dict.txt":{bytes:405,sha256:"637c27c88512c22089bef927b34ada08f748dc132ac70facd68d8202384c2726",tier:"lazy",contentType:"text/plain"}}};var xt="sekyro-mrz-1";function Mt(e){return Array.from(new Uint8Array(e),t=>t.toString(16).padStart(2,"0")).join("")}async function ge(e){return Mt(await crypto.subtle.digest("SHA-256",e))}function _e(e,t){return ge(new TextEncoder().encode(`${xt}\0${e}\0${t.join(`
2
+ `)}`))}var G=class extends Error{constructor(t){super(t),this.name="AssetFailure",this.reason=t}},Te=Object.keys(Y.files).filter(e=>Y.files[e].tier==="live"),bn=Object.keys(Y.files).filter(e=>Y.files[e].tier==="lazy");function Rt(e,t){return`${e.replace(/\/+$/,"")}/${Y.fp12}/${t}`}async function St(e,t,n,s=fetch,r=()=>performance.now()){let o=Y.files[t],i=r(),l=async b=>{try{let f=await s(Rt(e,t),{cache:b,signal:n,credentials:"omit"});if(!f.ok)throw new G("download");return await f.arrayBuffer()}catch(f){throw f instanceof G?f:new G("download")}},a=async b=>b.byteLength===o.bytes&&await ge(b)===o.sha256,d=await l("force-cache");if(!await a(d)&&(d=await l("reload"),!await a(d)))throw new G("integrity");return{bytes:d,ms:r()-i}}async function Oe(e,t,n,s=fetch,r=()=>performance.now()){let o=new AbortController,i=new Map,l=t.reduce((f,p)=>f+Y.files[p].bytes,0),a=r(),d=!0,b=0;for(let f of t){let p=await St(e,f,o.signal,s,r);i.set(f,p.bytes),p.ms>=50&&(d=!1),b+=p.bytes.byteLength;let y=r()-a;if(b<l&&y>0&&y*l/b>n)throw o.abort(),new G("download")}return{files:i,downloadMs:Math.round(r()-a),cached:d}}var I=class extends Error{constructor(t){super(t),this.name="OcrFailure",this.code=t}};function Le(e){return[...e.split(`
3
+ `)," "]}function we(e,t,n,s,r){if(n<2||e.length===0||e.length!==t.length||s.length<n-1)throw new I("OCR_INFERENCE_FAILED");let o="",i=-1,l=0,a=0;for(let b=0;b<e.length;b++){let f=e[b];if(!Number.isInteger(f)||f<0||f>=n)throw new I("OCR_INFERENCE_FAILED");f!==0&&f!==i&&(o+=s[f-1],l+=Math.fround(t[b]),a++),i=f}return{text:r?Array.from(o).reverse().join(""):o,score:a===0?0:l/a}}var De=e=>e.reduce((t,n)=>t+n,0)/e.length;function ke(e){let t=e.filter(r=>r.score>=.5);if(t.length===0)return[];if(t.some(r=>r.box.length!==4||!Number.isFinite(r.score)||r.box.some(o=>!Number.isFinite(o.x)||!Number.isFinite(o.y))))throw new I("OCR_INFERENCE_FAILED");let n=De(t.map(r=>r.box[2].y-r.box[0].y)),s=[];for(let r of t){let o=(r.box[0].y+r.box[2].y)/2,i=s.find(l=>Math.abs((l[0].box[0].y+l[0].box[2].y)/2-o)<n/2);i===void 0?s.push([r]):i.push(r)}for(let r of s)r.sort((o,i)=>o.box[0].x-i.box[0].x);return s.sort((r,o)=>r[0].box[0].y-o[0].box[0].y),s.map(r=>{let o=r[0].box,i=r[r.length-1].box,l=[o[0],i[1],i[2],o[3]];return{text:r.map(a=>a.text).join(" "),x:Math.min(...l.map(a=>a.x)),y:Math.min(...l.map(a=>a.y)),x2:Math.max(...l.map(a=>a.x)),y2:Math.max(...l.map(a=>a.y)),score:De(r.map(a=>a.score))}})}var j={of(e,t,n){return!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n)||t<1||t>12||n<1||n>new Date(Date.UTC(e,t,0)).getUTCDate()?null:{year:e,month:t,day:n}},iso(e){return`${String(e.year).padStart(4,"0")}-${String(e.month).padStart(2,"0")}-${String(e.day).padStart(2,"0")}`},parse(e){let[t,n,s]=e.split("-").map(Number);return{year:t,month:n,day:s}},today(){let e=new Date;return{year:e.getFullYear(),month:e.getMonth()+1,day:e.getDate()}}},Pe=30,Ue=36,Fe=44,pe="MRT",It=[7,3,1],Ct=/^[0-9]{6}$/,he=/^[0-9]{10}$/,Ge=e=>e!==void 0&&e.length===1&&e>="0"&&e<="9";function Et(e){return e>="0"&&e<="9"?e.charCodeAt(0)-48:e>="A"&&e<="Z"?e.charCodeAt(0)-55:0}function ue(e){let t=0;for(let n=0;n<e.length;n++)t+=Et(e[n])*It[n%3];return String(t%10)}function D(e,t){return t==="<"?null:Ge(t)?ue(e)===t:!1}function ce(e){return e.trim().toUpperCase().replaceAll(" ","")}function Nt(e,t){return(ce(e)+"<".repeat(t)).slice(0,t)}function k(e){return e.replace(/^<+|<+$/g,"")}var _t=new Set(`ABW AFG AGO AIA ALA ALB AND ARE ARG ARM ASM ATA ATF ATG AUS AUT AZE BDI BEL BEN BES BFA BGD BGR BHR
4
+ BHS BIH BLM BLR BLZ BMU BOL BRA BRB BRN BTN BVT BWA CAF CAN CCK CHE CHL CHN CIV CMR COD COG COK COL
5
+ COM CPV CRI CUB CUW CXR CYM CYP CZE DEU DJI DMA DNK DOM DZA ECU EGY ERI ESH ESP EST ETH FIN FJI FLK
6
+ FRA FRO FSM GAB GBR GEO GGY GHA GIB GIN GLP GMB GNB GNQ GRC GRD GRL GTM GUF GUM GUY HKG HMD HND HRV
7
+ HTI HUN IDN IMN IND IOT IRL IRN IRQ ISL ISR ITA JAM JEY JOR JPN KAZ KEN KGZ KHM KIR KNA KOR KWT LAO
8
+ LBN LBR LBY LCA LIE LKA LSO LTU LUX LVA MAC MAF MAR MCO MDA MDG MDV MEX MHL MKD MLI MLT MMR MNE MNG
9
+ MNP MOZ MRT MSR MTQ MUS MWI MYS MYT NAM NCL NER NFK NGA NIC NIU NLD NOR NPL NRU NZL OMN PAK PAN PCN
10
+ PER PHL PLW PNG POL PRI PRK PRT PRY PSE PYF QAT REU ROU RUS RWA SAU SDN SEN SGP SGS SHN SJM SLB SLE
11
+ SLV SMR SOM SPM SRB SSD STP SUR SVK SVN SWE SWZ SXM SYC SYR TCA TCD TGO THA TJK TKL TKM TLS TON TTO
12
+ TUN TUR TUV TWN TZA UGA UKR UMI URY USA UZB VAT VCT VEN VGB VIR VNM VUT WLF WSM XKK YEM ZAF ZMB ZWE`.trim().split(/\s+/)),Tt=new Set(`D GBD GBN GBO GBP GBS RKS UNK UNO UNA EUE XBA XIM XCC XCE XCO XDC XEC XES XMP XOM XPO XXA XXB XXC
13
+ XXX ANT NTZ UTO`.trim().split(/\s+/));function Ot(e){return _t.has(e)||Tt.has(e)}var Lt="012568",wt="OIZSGB",Dt="OQDILZSGB",kt="000112568";function ye(e){let t=Lt.indexOf(e);return e.length!==1||t<0?e:wt[t]}function Bt(e){let t=Dt.indexOf(e);return e.length!==1||t<0?e:kt[t]}var vt=[["\xAB","<<"],["\u2039","<"],["\uFF1C","<"],["\u3008","<"],["\xD7","X"]],Ke=[`aaccc${"x".repeat(9)}n${"x".repeat(15)}`,`${"n".repeat(7)}x${"n".repeat(7)}ccc${"x".repeat(11)}n`,"a".repeat(30)],ze=[`aaccc${"a".repeat(31)}`,`${"x".repeat(9)}nccc${"n".repeat(7)}x${"n".repeat(7)}${"x".repeat(7)}n`],He=[`aaccc${"a".repeat(39)}`,`${"x".repeat(9)}nccc${"n".repeat(7)}x${"n".repeat(7)}${"x".repeat(14)}nn`];function Pt(e,t){let n="",s=0;for(;s<t.length;){let r=t[s];if(r==="c"){let i=e.substring(s,s+3),l=Array.from(i,ye).join("");n+=l!==i&&Ot(l.replaceAll("<",""))?l:i,s+=3;continue}let o=e[s];n+=r==="a"?ye(o):r==="n"?Bt(o):o,s++}return n}function ee(e,t,n){return n.slice(0,e.length).map((s,r)=>{let o=vt.reduce((i,[l,a])=>i.replaceAll(l,a),ce(e[r]));return Pt(Nt(o,t),s)})}function We(e,t){let n=e.filter(s=>s.trim().length>0);return t==="TD1"?ee(n.slice(0,3),Pe,Ke):t==="TD2"?ee(n.slice(0,2),Ue,ze):ee(n.slice(0,2),Fe,He)}function Ae(e){let t=`${e.toUpperCase()}<<`.slice(0,2);return t==="AC"?"unknown":t==="IR"||t==="AR"||t[0]==="A"||t[0]==="C"?"residence_permit":t[0]==="P"?"passport":t[0]==="I"?"carte_identite":"unknown"}function Ut(e){return he.test(e)&&Number(e)%97===1}function Ft(e,t,n){if(!Ct.test(e))return null;let s=Number(e.slice(0,2)),r=t?2e3+s:s>n.year%100?1900+s:2e3+s;return j.of(r,Number(e.slice(2,4)),Number(e.slice(4,6)))}function te(e,t,n){let s=Ft(e,t,n);return s?j.iso(s):""}function xe(e){let t=e.split("<<").filter(n=>k(n).length>0);return[(t[0]??"").replaceAll("<"," ").trim(),(t[1]??"").replaceAll("<"," ").trim()]}var Me=e=>e==="M"||e==="F"?e:"",Gt=e=>e.substring(0,2).replaceAll("<",""),oe=e=>e.substring(2,5).replaceAll("<","");function Ve(e,t,n){if(t==="<"&&k(n).length>0){let s=n.indexOf("<"),r=s<0?n:n.slice(0,s);if(r.length>=2){let o=e+r.slice(0,-1);if(D(o,r[r.length-1])===!0)return{value:k(o),ok:!0,warn:null}}return{value:k(e),ok:!1,warn:"docnum_cd_mismatch"}}return{value:k(e),ok:D(e,t),warn:null}}var K=(e,t)=>({success:!1,error:e,fields:{},checkDigits:{},hardCdFail:!1,warns:[],...t===void 0?{}:{linesCount:t}});function Re(e,t,n,s,r,o,i){return{success:!0,documentType:e,format:t,documentCode:Gt(n),fields:s,checkDigits:r,hardCdFail:o,warns:i}}function Kt(e,t){if(e.length<3)return K("mrz_incomplete");let[n,s,r]=ee(e.slice(0,3),Pe,Ke),o=oe(n)===pe||s.substring(15,18)===pe||Ut(n.substring(15,25)),i=[],l={},a,d,b=!1;if(o){a=k(n.substring(5,14));let A=n[14];Ge(A)?(d=ue(n.substring(5,14))===A,d||i.push("td1_docnum_cd_mismatch")):d=null}else{let A=Ve(n.substring(5,14),n[14],n.substring(15,30));if(A.ok===null)return K("mrz_incomplete");a=A.value,d=A.ok,b=A.ok===!1&&A.warn===null,A.warn!==null&&i.push(A.warn)}l.document_number=d;let f=D(s.substring(0,6),s[6]),p=D(s.substring(8,14),s[14]);if(l.birth_date=f,l.expiry_date=p,f===null||p===null)return K("mrz_incomplete");let y=D(n.substring(5,30)+s.substring(0,7)+s.substring(8,15)+s.substring(18,29),s[29]);l.composite=y,y===!1&&i.push("composite_cd_mismatch");let m=o?n.substring(15,25):"",[u,R]=xe(r),S=f===!1||p===!1||b;return Re(Ae(n.substring(0,2)),"TD1",n,{issuing_state:oe(n),document_number:a,nni:he.test(m)?m:"",birth_date:te(s.substring(0,6),!1,t),expiry_date:te(s.substring(8,14),!0,t),sex:Me(s[7]),nationality:k(s.substring(15,18)),surname:u,given_names:R},l,S,i)}function zt(e,t){if(e.length<2)return K("mrz_incomplete");let[n,s]=ee(e.slice(0,2),Ue,ze),r=[],o=Ve(s.substring(0,9),s[9],s.substring(28,35));o.warn!==null&&r.push(o.warn);let i=D(s.substring(13,19),s[19]),l=D(s.substring(21,27),s[27]),a={document_number:o.ok,birth_date:i,expiry_date:l};if(o.ok===null||i===null||l===null)return K("mrz_incomplete");let d=D(s.substring(0,10)+s.substring(13,20)+s.substring(21,35),s[35]);a.composite=d,d===!1&&r.push("composite_cd_mismatch");let[b,f]=xe(n.substring(5,36)),p=o.ok===!1&&o.warn===null||i===!1||l===!1;return Re(Ae(n.substring(0,2)),"TD2",n,{issuing_state:oe(n),document_number:o.value,nni:"",birth_date:te(s.substring(13,19),!1,t),expiry_date:te(s.substring(21,27),!0,t),sex:Me(s[20]),nationality:k(s.substring(10,13)),surname:b,given_names:f},a,p,r)}function Be(e,t){if(e.length<2)return K("mrz_incomplete");let[n,s]=ee(e.slice(0,2),Fe,He),r=oe(n)===pe,o=[],i={},l=s.substring(0,9),a=D(l,s[9]),d=D(s.substring(13,19),s[19]),b=D(s.substring(21,27),s[27]);if(i.document_number=a,i.birth_date=d,i.expiry_date=b,a===null||d===null||b===null)return K("mrz_incomplete");let f=s.substring(28,42),p="";if(k(f).length>0){let S=D(f,s[42]);i.personal_number=S;let A=k(f);r&&S!==!1&&he.test(A)&&(p=A)}let y=D(s.substring(0,10)+s.substring(13,20)+s.substring(21,43),s[43]);i.composite=y,y===!1&&o.push("composite_cd_mismatch");let[m,u]=xe(n.substring(5,44)),R=a===!1||d===!1||b===!1;return Re(Ae(n.substring(0,2)),"TD3",n,{issuing_state:oe(n),document_number:k(l),nni_candidate:p,birth_date:te(s.substring(13,19),!1,t),expiry_date:te(s.substring(21,27),!0,t),sex:Me(s[20]),nationality:k(s.substring(10,13)),surname:m,given_names:u},i,R,o)}var ve=new Set(["A","C","I"]);function Ye(e,t=j.today()){let n=e.filter(r=>r.trim().length>0);if(n.length===0)return K("mrz_unrecognized",0);let s=Array.from(ce(n[0]).slice(0,1),ye).join("");return n.length===3&&ve.has(s)?Kt(n,t):n.length===2&&s==="P"?Be(n,t):n.length===2&&ve.has(s)?Math.max(...n.map(r=>ce(r).length))>40?Be(n,t):zt(n,t):K("mrz_unrecognized",n.length)}var Ht=new Map([...(`ABWAW AFGAF AGOAO AIAAI ALAAX ALBAL ANDAD AREAE ARGAR ARMAM ASMAS ATAAQ
14
+ ATFTF ATGAG AUSAU AUTAT AZEAZ BDIBI BELBE BENBJ BESBQ BFABF BGDBD BGRBG
15
+ BHRBH BHSBS BIHBA BLMBL BLRBY BLZBZ BMUBM BOLBO BRABR BRBBB BRNBN BTNBT
16
+ BVTBV BWABW CAFCF CANCA CCKCC CHECH CHLCL CHNCN CIVCI CMRCM CODCD COGCG
17
+ COKCK COLCO COMKM CPVCV CRICR CUBCU CUWCW CXRCX CYMKY CYPCY CZECZ DEUDE
18
+ DJIDJ DMADM DNKDK DOMDO DZADZ ECUEC EGYEG ERIER ESHEH ESPES ESTEE ETHET
19
+ FINFI FJIFJ FLKFK FRAFR FROFO FSMFM GABGA GBRGB GEOGE GGYGG GHAGH GIBGI
20
+ GINGN GLPGP GMBGM GNBGW GNQGQ GRCGR GRDGD GRLGL GTMGT GUFGF GUMGU GUYGY
21
+ HKGHK HMDHM HNDHN HRVHR HTIHT HUNHU IDNID IMNIM INDIN IOTIO IRLIE IRNIR
22
+ IRQIQ ISLIS ISRIL ITAIT JAMJM JEYJE JORJO JPNJP KAZKZ KENKE KGZKG KHMKH
23
+ KIRKI KNAKN KORKR KWTKW LAOLA LBNLB LBRLR LBYLY LCALC LIELI LKALK LSOLS
24
+ LTULT LUXLU LVALV MACMO MAFMF MARMA MCOMC MDAMD MDGMG MDVMV MEXMX MHLMH
25
+ MKDMK MLIML MLTMT MMRMM MNEME MNGMN MNPMP MOZMZ MRTMR MSRMS MTQMQ MUSMU
26
+ MWIMW MYSMY MYTYT NAMNA NCLNC NERNE NFKNF NGANG NICNI NIUNU NLDNL NORNO
27
+ NPLNP NRUNR NZLNZ OMNOM PAKPK PANPA PCNPN PERPE PHLPH PLWPW PNGPG POLPL
28
+ PRIPR PRKKP PRTPT PRYPY PSEPS PYFPF QATQA REURE ROURO RUSRU RWARW SAUSA
29
+ SDNSD SENSN SGPSG SGSGS SHNSH SJMSJ SLBSB SLESL SLVSV SMRSM SOMSO SPMPM
30
+ SRBRS SSDSS STPST SURSR SVKSK SVNSI SWESE SWZSZ SXMSX SYCSC SYRSY TCATC
31
+ TCDTD TGOTG THATH TJKTJ TKLTK TKMTM TLSTL TONTO TTOTT TUNTN TURTR TUVTV
32
+ TWNTW TZATZ UGAUG UKRUA UMIUM URYUY USAUS UZBUZ VATVA VCTVC VENVE VGBVG
33
+ VIRVI VNMVN VUTVU WLFWF WSMWS YEMYE ZAFZA ZMBZM ZWEZW`.match(/[A-Z]{5}/g)??[]).map(e=>[e.slice(0,3),e.slice(3)]),["D","DE"]]),Ze={of(e){return Ht.get(e.replaceAll("<",""))??null}};var Ie=e=>ue(e);function qe(e){return e.slice(0,5e4).split(/\r?\n/).slice(0,200).map(t=>t.toUpperCase().replace(/[«‹〈]/g,"<").replace(/[^A-Z0-9<]/g,"")).filter(t=>t.length>0)}var Xe=e=>e.replace(/[OQ]/g,"0").replace(/[IL]/g,"1").replaceAll("Z","2").replaceAll("S","5").replaceAll("B","8");function $e(e,t){let n=Xe(e),s=Xe(t);if(!/^\d{6}$/.test(n)||Ie(n)!==s)return null;let r=2e3+Number(n.slice(0,2)),o=Number(n.slice(2,4)),i=Number(n.slice(4,6));return o>=1&&o<=12&&i>=1&&i<=new Date(Date.UTC(r,o,0)).getUTCDate()?n:null}function Se(e,t){let n=e.replace(/<+$/,"");return/^[A-Z0-9]+$/.test(n)&&Ie(e)===t?n:null}function Wt(e){if(e.length<15)return null;if(e[14]!=="<")return Se(e.substring(5,14),e[14]);let t=/^([A-Z0-9]+)</.exec(e.substring(15,Math.min(30,e.length)))?.[1];return t===void 0||t.length<2?null:Se(e.substring(5,14)+t.slice(0,-1),t[t.length-1])}var x=(e,t,n)=>t>=e.length?"":e.substring(t,Math.min(n,e.length)),Z=(e,t)=>t<e.length?e[t]:"",Je=/^[IAC][A-Z<][A-Z<]{3}/,Vt=/^P[A-Z<][A-Z<]{3}/,et=/^[PIAC][A-Z<][A-Z<]{3}/;function Yt(e){let t=qe(e),n=[],s=[];for(let o=0;o<t.length;o++){let i="",l=0;for(;l<6&&o+l<t.length&&(i+=t[o+l],!(i.length>300));)s.push(i),l++}let r=(o,i,l)=>{if(i.length<(l?15:28))return;let a=new Map,d=l?Wt(o):Se(x(i,0,9),Z(i,9)),b=$e(l?x(i,0,6):x(i,13,19),l?Z(i,6):Z(i,19)),f=$e(l?x(i,8,14):x(i,21,27),l?Z(i,14):Z(i,27));d!==null&&a.set("docNumber",d),b!==null&&a.set("dob6",b),f!==null&&a.set("expiry6",f),a.size>0&&n.push({fields:a,country:Ze.of(x(o,2,5))})};for(let o of s)Je.test(o)&&(o.length>=45&&r(o.substring(0,30),o.substring(30),!0),o.length>=64&&r(o.substring(0,36),o.substring(36),!1)),Vt.test(o)&&o.length>=72&&r(o.substring(0,44),o.substring(44),!1);for(let o=0;o<t.length-1;o++){let i=t[o],l=t[o+1];Je.test(i)&&i.length>=15&&i.length<=30&&r(i,l,!0),et.test(i)&&i.length>=5&&i.length<=44&&r(i,l,!1)}return n}function Zt(e){let t=Yt(e);if(t.length===0)return{};let n=Math.max(...t.map(o=>o.fields.size)),s=t.filter(o=>o.fields.size===n),r={};for(let o of["docNumber","dob6","expiry6"]){let i=new Set(s.map(l=>l.fields.get(o)).filter(l=>l!==void 0));i.size===1&&s.every(l=>l.fields.has(o))&&(r[o]=[...i][0])}return r}function Xt(e){let t=Zt(e),n=t.docNumber,s=t.dob6,r=t.expiry6;return n!==void 0&&s!==void 0&&r!==void 0?{docNumber:n,dob6:s,expiry6:r}:null}function tt(e){let t=Jt(e);return t.length===1?t[0]:null}var $t=e=>JSON.stringify([e.documentNumber,e.nationality,e.dob,e.sex,e.expiry,e.primaryIdentifier,e.secondaryIdentifier,e.optional]);function Jt(e){let t=qe(e),n=[];for(let r=0;r<t.length;r++){let o=t[r];if(!et.test(o))continue;let i=o.startsWith("P")?[44]:[30,36];for(let l of i){let a=l===30?3:2,d=t.slice(r,Math.min(t.length,r+a));d.length===a&&d.every(p=>p.length<=l)&&n.push(d.map(p=>p.padEnd(l,"<")).join(`
34
+ `));let b="",f=0;for(;f<6&&r+f<t.length&&(b+=t[r+f],b.length===l*a&&n.push(b),!(b.length>=l*a));)f++}}let s=new Map;for(let r of n){let o=Xt(r);if(o===null)continue;let i=r.includes(`
35
+ `)?r.split(`
36
+ `):r.match(r.length===90?/.{30}/g:r.length===88?/.{44}/g:/.{36}/g)??[],l=i[0]??"",a=i[1]??"",d=i.length===3,b=d?x(l,5,30)+x(a,0,7)+x(a,8,15)+x(a,18,29):x(a,0,10)+x(a,13,20)+x(a,21,a.length-1),f=d?Z(a,29):Z(a,a.length-1);if(!/^[0-9]$/.test(f)||Ie(b)!==f)continue;let p=jt(r);if(p===null||p.primaryIdentifier.length===0&&p.secondaryIdentifier.length===0||!/^[MFX]?$/.test(p.sex))continue;let y={...p,documentNumber:o.docNumber,dob:o.dob6,expiry:o.expiry6};s.set($t(y),{fields:y,mrzLines:i})}return[...s.values()]}var P=e=>e.replaceAll("<"," ").replace(/\s+/g," ").trim();function je(e){let t=e.split("<<");return[P(t[0]??""),P(t.slice(1).join("<<"))]}var Qe=e=>e.length===0?null:e;function jt(e){let t=e.split(/\r?\n/).map(s=>s.replace(/\s+$/,"")).filter(s=>s.length>0),n=e.replace(/[\r\n]/g,"");if(t.length===1&&(n.length===90?t=[n.substring(0,30),n.substring(30,60),n.substring(60,90)]:n.length===72?t=[n.substring(0,36),n.substring(36,72)]:n.length===88&&(t=[n.substring(0,44),n.substring(44,88)])),t.length===3){let[s,r,o]=t,i=Z(s,14)==="<"?/^([A-Z0-9]+)</.exec(x(s,15,30))?.[1]:void 0,l=P(x(s,5,14)+(i!==void 0&&i.length>1?i.slice(0,-1):"")),[a,d]=je(o),b=P(`${x(s,15,30)}<${x(r,18,29)}`);return{documentNumber:l,nationality:P(x(r,15,18)),dob:x(r,0,6),sex:P(x(r,7,8)),expiry:x(r,8,14),primaryIdentifier:a,secondaryIdentifier:d,optional:Qe(b)}}if(t.length===2){let[s,r]=t,o=s.length>=44,[i,l]=je(x(s,5,o?44:36));return{documentNumber:P(x(r,0,9)),nationality:P(x(r,10,13)),dob:x(r,13,19),sex:P(x(r,20,21)),expiry:x(r,21,27),primaryIdentifier:i,secondaryIdentifier:l,optional:Qe(P(o?x(r,28,42):x(r,28,35)))}}return null}function nt(e,t=j.today()){let n=Ye(e,t),s=n.format??null,r=s==="TD1"||s==="TD2"||s==="TD3"?We(e,s):[...e];return{format:s,documentCode:n.documentCode??null,lines:r,valid:n.success&&!n.hardCdFail}}var Qt=/^[A-Z0-9<]{25,}$/;function qt(e){return e.toUpperCase().replaceAll(" ","").replaceAll("\xAB","<").replaceAll("\u2039","<")}var Ce=(e,t,n)=>e.length>=t&&e.length<=n;function rt(e){let t=e.map(qt).filter(n=>Qt.test(n));for(let n=0;n+3<=t.length;n++){let s=t.slice(n,n+3);if(s.every(r=>Ce(r,28,32))&&"IAC".includes(s[0][0]))return s}for(let n=0;n+2<=t.length;n++){let s=t.slice(n,n+2);if(s.every(r=>Ce(r,40,46))&&s[0].startsWith("P")||s.every(r=>Ce(r,34,38))&&"IACPV".includes(s[0][0]))return s}return[]}var ne={SIZE:80,SCRIPT:64,OFFSET:68,STEPS:72},L={DETECTOR:0,LATIN:1,ARABIC:2},U={NONE:0,LATIN:1,ARABIC:2,BOTH:3},de=3;var X=e=>Math.round(Math.min(1,Math.max(0,e))*1e4)/1e4;async function Ee(e,t,n,s,r){let o=r.now??(()=>performance.now()),i=o(),a=e.read(t,n,s,r.region??[0,0,1,1],1,de,U.LATIN,r.detectorLimit).map(u=>({text:u.latin.text,score:u.latin.score,box:[0,1,2,3].map(R=>({x:u.box[2*R],y:u.box[2*R+1]}))})),d=ke([...a].reverse()),b=d.map(u=>u.text),f=[...tt(b.join(`
37
+ `))?.mrzLines??rt(b)],p=d.map(u=>[X(u.x/n),X(u.y/s),X((u.x2-u.x)/n),X((u.y2-u.y)/s)]),y={kind:"band",ms:0,lineBoxes:p,lineCount:f.length,valid:!1},m=tn(d.map(u=>u.text),p,f);if(m!==null&&(y.mrzBox=m),f.length>0){let u=nt(f,r.today??j.today());u.format&&(y.format=u.format),u.documentCode&&/^[A-Z<]{1,2}$/.test(u.documentCode)&&(y.documentCode=u.documentCode),u.valid&&(y.valid=!0,y.digest=await _e(r.salt,u.lines))}return y.ms=Math.round(o()-i),y}var st=e=>e.toUpperCase().replace(/\s+/g,"");function en(e,t){let n=Math.max(e.length,t.length);if(n===0)return 0;let s=0;for(let r=0;r<Math.min(e.length,t.length);r++)e[r]===t[r]&&s++;return s/n}function tn(e,t,n){if(n.length===0||e.length===0)return null;let s=new Set,r=[];for(let d of n){let b=-1,f=.5;if(e.forEach((p,y)=>{let m=s.has(y)?0:en(st(p),st(d));m>f&&(f=m,b=y)}),b<0)return null;s.add(b),r.push(t[b])}let o=Math.min(...r.map(d=>d[0])),i=Math.min(...r.map(d=>d[1])),l=Math.max(...r.map(d=>d[0]+d[2])),a=Math.max(...r.map(d=>d[1]+d[3]));return[X(o),X(i),X(l-o),X(a-i)]}var Dn=Object.freeze({minLines:4,fillMin:.55,fillMax:.98,offsetMax:.12,steadyFillDelta:.04,steadyOffsetDelta:.03,layoutShiftMax:.025,lineCountDelta:1,lockMs:600,steadyMs:900,minFrames:3});function ot(e,t,n){let s=r=>Math.round(Math.min(1,Math.max(0,r))*1e4)/1e4;return e.map(r=>{let o=[r[0],r[2],r[4],r[6]],i=[r[1],r[3],r[5],r[7]],l=Math.min(...o),a=Math.min(...i);return[s(l/t),s(a/n),s((Math.max(...o)-l)/t),s((Math.max(...i)-a)/n)]}).sort((r,o)=>r[1]-o[1]||r[0]-o[0])}var it={};async function nn(e={}){var t,n=e,s=it.url,r="",o,i;try{r=new URL(".",s).href}catch{}i=c=>{var h=new XMLHttpRequest;return h.open("GET",c,!1),h.responseType="arraybuffer",h.send(null),new Uint8Array(h.response)},o=async c=>{if(c=await fetch(c,{credentials:"same-origin"}),c.ok)return c.arrayBuffer();throw Error(c.status+" : "+c.url)};var l=console.log.bind(console),a=console.error.bind(console),d=!1,b,f,p,y,m,u=!1;function R(){var c=ae.buffer;new Int8Array(c),new Int16Array(c),n.HEAPU8=p=new Uint8Array(c),new Uint16Array(c),new Int32Array(c),y=new Uint32Array(c),new Float32Array(c),new Float64Array(c),m=new BigInt64Array(c),new BigUint64Array(c)}function S(c){throw c="Aborted("+c+")",a(c),d=!0,c+=". Build with -sASSERTIONS for more info.",u&&Q(),c=new WebAssembly.RuntimeError(c),f?.(c),c}var A;async function w(c){try{var h=await o(c);return new Uint8Array(h)}catch{}if(i)c=i(c);else throw"both async and sync fetching of the wasm failed";return c}async function B(c,h){try{var g=await w(c);return await WebAssembly.instantiate(g,h)}catch(C){a(`failed to asynchronously prepare wasm: ${C}`),S(C)}}async function z(c){var h=A;try{var g=fetch(h,{credentials:"same-origin"});return await WebAssembly.instantiateStreaming(g,c)}catch(C){a(`wasm streaming compile failed: ${C}`),a("falling back to ArrayBuffer instantiation")}return B(h,c)}var H={},W=()=>{if(!$){var c={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:(globalThis.navigator?.language??"C").replace("-","_")+".UTF-8",_:"./this.program"},h;for(h in H)H[h]===void 0?delete c[h]:c[h]=H[h];var g=[];for(h in c)g.push(`${h}=${c[h]}`);$=g}return $},$,J=[null,[],[]],ie=globalThis.TextDecoder&&new TextDecoder,Q,ae,mt={i:()=>S(""),b:function(c,h,g){return 0<=c&&3>=c?(m[g>>3]=BigInt(Math.round(1e6*(c===0?Date.now():performance.now()))),0):28},d:()=>1073741824,c:c=>{var h=p.length;if(c>>>=0,1073741824<c)return!1;for(var g=1;4>=g;g*=2){var C=h*(1+.2/g);C=Math.min(C,c+100663296);e:{C=(Math.min(1073741824,65536*Math.ceil(Math.max(c,C)/65536))-ae.buffer.byteLength+65535)/65536|0;try{ae.grow(C),R();var _=1;break e}catch{}_=void 0}if(_)return!0}return!1},f:(c,h)=>{var g=0,C=0,_;for(_ of W()){var M=h+g;y[c+C>>2]=M;for(var q=_,O=p,re=M,F=M+1/0-1,E=0;E<q.length;++E){var N=q.codePointAt(E);if(127>=N){if(M>=F)break;O[M++]=N}else if(2047>=N){if(M+1>=F)break;O[M++]=192|N>>6,O[M++]=128|N&63}else if(65535>=N){if(M+2>=F)break;O[M++]=224|N>>12,O[M++]=128|N>>6&63,O[M++]=128|N&63}else{if(M+3>=F)break;O[M++]=240|N>>18,O[M++]=128|N>>12&63,O[M++]=128|N>>6&63,O[M++]=128|N&63,E++}}O[M]=0,q=M-re,g+=q+1,C+=4}return 0},g:(c,h)=>{var g=W();y[c>>2]=g.length,c=0;for(var C of g){for(var _=g=0;_<C.length;++_){var M=C.charCodeAt(_);127>=M?g++:2047>=M?g+=2:55296<=M&&57343>=M?(g+=4,++_):g+=3}c+=g+1}return y[h>>2]=c,0},j:()=>52,h:()=>52,e:function(){return 70},a:(c,h,g,C)=>{for(var _=0,M=0;M<g;M++){var q=y[h>>2],O=y[h+4>>2];h+=8;for(var re=0;re<O;re++){var F=c,E=p[q+re],N=J[F];if(E===0||E===10){F=F===1?l:a,E=N;for(var V=0,se=E,v=V,T=v+void 0;se[v]&&!(v>=T);)++v;if(se=v,16<se-V&&E.buffer&&ie)E=ie.decode(E.subarray(V,se));else{for(v="";V<se;)if(T=E[V++],T&128){var me=E[V++]&63;if((T&224)==192)v+=String.fromCharCode((T&31)<<6|me);else{var Ne=E[V++]&63;T=(T&240)==224?(T&15)<<12|me<<6|Ne:(T&7)<<18|me<<12|Ne<<6|E[V++]&63,65536>T?v+=String.fromCharCode(T):(T-=65536,v+=String.fromCharCode(55296|T>>10,56320|T&1023))}}else v+=String.fromCharCode(T);E=v}F(E),N.length=0}else N.push(E)}_+=O}return y[C>>2]=_,0}},le;return le=await(async function(){function c(g){return g=le=g.exports,n._skw_engine_id=g.m,n._skw_load=g.n,n._skw_unload=g.o,n._skw_set_detector_limit=g.p,n._skw_read=g.q,n._skw_line_count=g.r,n._skw_lines=g.s,n._skw_best=g.t,n._skw_values=g.u,n._skw_sharpness=g.v,n._free=g.w,n._malloc=g.x,Q=g.y,ae=g.k,R(),le}var h={a:mt};return n.instantiateWasm?new Promise(g=>{n.instantiateWasm(h,(C,_)=>{g(c(C,_))})}):(A??(A=n.locateFile?n.locateFile?n.locateFile("sekyro-ocr.wasm",r):r+"sekyro-ocr.wasm":new URL("sekyro-ocr.wasm",it.url).href),c((await z(h)).instance))})(),n.calledRun=!0,d||(u=!0,le.l(),b?.(n)),u?t=n:t=new Promise((c,h)=>{b=c,f=h}),t}var at=nn;function lt(e){return e===1||e===5?new I("OCR_IMAGE_INVALID"):e===2?new I("OCR_ASSET_INVALID"):e===4?new I("OCR_CANCELLED"):e===6?new I("OCR_BUSY"):e===7?new I("OCR_UNAVAILABLE"):new I("OCR_INFERENCE_FAILED")}var fe=class{constructor(t){this.m=t;this.px=0;this.pxBytes=0;this.dicts=[null,null,null];this.classes=[0,0,0];this.held=[[],[],[]];this.latinKind="latin"}engineId(){let t=this.m._skw_engine_id(),n="";for(let s=t;this.m.HEAPU8[s]!==0&&s<t+64;s++)n+=String.fromCharCode(this.m.HEAPU8[s]);return n}put(t){let n=this.m._malloc(t.length);if(!n)throw new I("OCR_UNAVAILABLE");return this.m.HEAPU8.set(t,n),n}load(t,n,s,r,o={}){this.unload(t);let i=new Uint8Array(n),l=new Uint8Array(i.byteLength+1);l.set(i);let a=r===void 0?null:Le(r),d=r===void 0?0:ct(r);if(o.mrz===!0){if(t!==L.LATIN||r===void 0||!on(r))throw new I("OCR_ASSET_INVALID")}else if(t===L.LATIN&&(r===void 0||r.endsWith(`
38
+ `)||d!==6625))throw new I("OCR_ASSET_INVALID");if(t===L.ARABIC&&(r===void 0||!r.endsWith(`
39
+ `)||d!==163||a[161]!==""))throw new I("OCR_ASSET_INVALID");let b=new Uint8Array(s),f=this.put(l),p=this.put(b);this.held[t]=[f,p];let y=this.m._skw_load(t,f,l.length,p,b.byteLength,d);if(y!==0)throw this.unload(t),lt(y);this.dicts[t]=a,this.classes[t]=d,t===L.LATIN&&(this.latinKind=o.mrz===!0?"mrz":"latin")}recognizer(){return this.loaded(L.LATIN)?this.latinKind:null}unload(t){this.held[t].length&&this.m._skw_unload(t);for(let n of this.held[t])this.m._free(n);this.held[t]=[],this.dicts[t]=null}loaded(t){return this.held[t].length>0}pixels(t){if(t.length>this.pxBytes){if(this.px&&this.m._free(this.px),this.px=this.m._malloc(t.length),!this.px)throw new I("OCR_UNAVAILABLE");this.pxBytes=t.length}return this.m.HEAPU8.set(t,this.px),this.px}sharpness(t,n,s){let r=this.m._skw_sharpness(this.pixels(t),n,s);return r>=0&&Number.isFinite(r)?r:null}read(t,n,s,r,o,i,l,a){if(!rn(l))throw new I("OCR_IMAGE_INVALID");if(l&U.LATIN&&!this.dicts[L.LATIN]||l&U.ARABIC&&!this.dicts[L.ARABIC]||!this.loaded(0))throw new I("OCR_UNAVAILABLE");let d=this.pixels(t);this.m._skw_set_detector_limit(a);let b=this.m._skw_read(d,n,s,r[0],r[1],r[2],r[3],o,i,l);if(b!==0)throw lt(b);let f=this.m._skw_line_count(),p=this.m.HEAPU8.buffer,y=new DataView(p,this.m._skw_lines(),f*ne.SIZE),m=new Int32Array(p,this.m._skw_best()),u=new Float32Array(p,this.m._skw_values()),R=[];for(let S=0;S<f;S++){let A=S*ne.SIZE,w=y.getInt32(A+ne.SCRIPT,!0),B=y.getInt32(A+ne.OFFSET,!0),z=y.getInt32(A+ne.STEPS,!0);if(l===U.NONE){R.push({box:Array.from({length:8},(ie,Q)=>y.getFloat64(A+8*Q,!0))});continue}let H=this.dicts[w];if(!H)throw new I("OCR_INFERENCE_FAILED");let W=we(m.subarray(B,B+z),u.subarray(B,B+z),this.classes[w],H,w===L.ARABIC),$=Array.from({length:8},(ie,Q)=>y.getFloat64(A+8*Q,!0)),J=R[R.length-1];w===L.ARABIC&&J&&J.arabic===void 0&&J.latin!==void 0&&sn(J.box,$)?J.arabic=W:R.push(w===L.ARABIC?{box:$,arabic:W}:{box:$,latin:W})}return R}heapBytes(){return this.m.HEAPU8.length}dispose(){for(let t of[0,1,2])this.unload(t);this.px&&this.m._free(this.px),this.px=0,this.pxBytes=0}};function ct(e){return(e.endsWith(`
40
+ `)?e.slice(0,-1):e).split(`
41
+ `).length+2}var rn=e=>Number.isInteger(e)&&e>=U.NONE&&e<=U.BOTH,sn=(e,t)=>e.every((n,s)=>n===t[s]);function on(e){let t=e.split(`
42
+ `);return t.length===37&&new Set(t).size===37&&t.every(n=>/^[0-9A-Z<]$/.test(n))&&ct(e)===39}async function ut(e){let t=await at({instantiateWasm:(n,s)=>(WebAssembly.instantiate(e,n).then(r=>s(r,e)),{})});return new fe(t)}function an(){let e=null,t=null;return(n,s)=>{if(typeof OffscreenCanvas!="function"||(e||(e=new OffscreenCanvas(n,s),t=e.getContext("2d",{willReadFrequently:!0})),!t))return null;(e.width!==n||e.height!==s)&&(e.width=n,e.height=s);let r=t;return{draw(o){return r.clearRect(0,0,n,s),r.drawImage(o,0,0),r.getImageData(0,0,n,s).data}}}}function dt(){return{fetch:(...e)=>fetch(...e),now:()=>performance.now(),canvas:an(),instantiate:ut}}function ft(e,t=dt()){let n=null,s="",r=960,o=0,i=!1,l=Promise.resolve(),a=m=>e.postMessage(m);async function d(m){if(t.canvas(1,1)===null)return a({id:m.id,kind:"failed",reason:"unsupported"});s=m.salt,r=m.detectorLimit;try{let u=await Oe(m.baseUrl,Te,m.maxDownloadMs,t.fetch,t.now);o=u.downloadMs,i=u.cached;let R=await WebAssembly.compile(u.files.get("sekyro-ocr.wasm")),S=await t.instantiate(R),A=new TextDecoder("utf-8",{fatal:!0}).decode(u.files.get("mrz_dict.txt"));S.load(L.DETECTOR,u.files.get("det.param"),u.files.get("det.bin")),S.load(L.LATIN,u.files.get("mrz-rec.param"),u.files.get("mrz-rec.bin"),A,{mrz:!0}),u.files.clear(),n=S,a({id:m.id,kind:"ready",warmupMs:0,downloadMs:o,cached:i})}catch(u){a({id:m.id,kind:"failed",reason:u instanceof G?u.reason:"error"})}}async function b(m,u,R,S){if(!n)return u.close(),a({id:m,kind:"error",code:"not_ready"});let A=u.width,w=u.height,B=t.canvas(A,w);if(!B)return u.close(),a({id:m,kind:"failed",reason:"unsupported"});let z=B.draw(u);u.close();try{a({id:m,...await Ee(n,z,A,w,{detectorLimit:S,salt:s,region:R,now:t.now})})}catch{a({id:m,kind:"error",code:"OCR_INFERENCE_FAILED"})}}async function f(m,u,R){if(!n)return u.close(),a({id:m,kind:"error",code:"not_ready"});let S=u.width,A=u.height,w=t.canvas(S,A);if(!w)return u.close(),a({id:m,kind:"failed",reason:"unsupported"});let B=w.draw(u);u.close();try{let z=t.now(),H=n.read(B,S,A,[0,0,1,1],1,de,U.NONE,R);a({id:m,kind:"layout",ms:Math.round(t.now()-z),lineBoxes:ot(H.map(W=>W.box),S,A)})}catch{a({id:m,kind:"error",code:"OCR_INFERENCE_FAILED"})}}async function p(m){if(!n)return a({id:m,kind:"error",code:"not_ready"});let u=t.now(),R=960,S=200,A=new Uint8Array(R*S*4).fill(255);try{await Ee(n,A,R,S,{detectorLimit:r,salt:s,now:t.now})}catch{return a({id:m,kind:"error",code:"OCR_INFERENCE_FAILED"})}a({id:m,kind:"ready",warmupMs:Math.round(t.now()-u),downloadMs:o,cached:i})}async function y(m){switch(m.kind){case"init":return d(m);case"warmup":return p(m.id);case"band":return b(m.id,m.bitmap,void 0,m.detectorLimit);case"still":return b(m.id,m.bitmap,m.region,m.detectorLimit);case"layout":return f(m.id,m.bitmap,m.detectorLimit);case"dispose":n?.dispose(),n=null,e.close();return}}e.onmessage=m=>{let u=m.data;l=l.then(()=>y(u)).catch(()=>a({id:u.id,kind:"error",code:"OCR_INFERENCE_FAILED"}))}}typeof WorkerGlobalScope<"u"&&typeof self<"u"&&self instanceof WorkerGlobalScope&&ft(self);0&&(module.exports={defaultDeps,installOcrWorkerHost});
@@ -0,0 +1,84 @@
1
+ interface OcrDecoded {
2
+ readonly text: string;
3
+ readonly score: number;
4
+ }
5
+
6
+ /** The Emscripten module surface the binding exports (bindings/exports.json). */
7
+ interface SekyroOcrModule {
8
+ HEAPU8: Uint8Array;
9
+ _malloc(n: number): number;
10
+ _free(p: number): void;
11
+ _skw_engine_id(): number;
12
+ _skw_load(model: number, param: number, paramBytes: number, weights: number, weightBytes: number, classes: number): number;
13
+ _skw_unload(model: number): void;
14
+ _skw_set_detector_limit(limit: number): void;
15
+ _skw_read(px: number, w: number, h: number, x: number, y: number, rw: number, rh: number, scale: number, op: number, scripts: number): number;
16
+ _skw_line_count(): number;
17
+ _skw_lines(): number;
18
+ _skw_best(): number;
19
+ _skw_values(): number;
20
+ _skw_sharpness(px: number, w: number, h: number): number;
21
+ }
22
+ /** One detected line: its source box (x1,y1 … x4,y4, source pixels) and each requested script's decode. */
23
+ interface EngineLine {
24
+ readonly box: readonly number[];
25
+ readonly latin?: OcrDecoded;
26
+ readonly arabic?: OcrDecoded;
27
+ }
28
+ declare class WasmEngine {
29
+ private readonly m;
30
+ private px;
31
+ private pxBytes;
32
+ private dicts;
33
+ private classes;
34
+ private held;
35
+ private latinKind;
36
+ constructor(m: SekyroOcrModule);
37
+ engineId(): string;
38
+ private put;
39
+ /**
40
+ * Loads a net; `dict` (UTF-8 text) for a recognizer. The heap copies live until [unload] (ncnn keeps pointers).
41
+ * `mrz`: the MRZ-only recognizer (spec D10; sekyro-mobile/ocr-models/mrz) in the LATIN slot instead of PP-OCR Latin:
42
+ * the same engine read and `recognize` callback, its own 37-symbol dictionary (39 classes with blank + space).
43
+ */
44
+ load(model: 0 | 1 | 2, param: ArrayBuffer | Uint8Array, weights: ArrayBuffer | Uint8Array, dict?: string, o?: {
45
+ mrz?: boolean;
46
+ }): void;
47
+ /** Which recognizer the LATIN slot holds (null when none). */
48
+ recognizer(): "latin" | "mrz" | null;
49
+ unload(model: 0 | 1 | 2): void;
50
+ loaded(model: 0 | 1 | 2): boolean;
51
+ private pixels;
52
+ /** Blur-gate measure of an RGBA image; null when not measurable (Kotlin `N.s(...).takeIf { it >= 0 }`). */
53
+ sharpness(rgba: Uint8Array | Uint8ClampedArray, w: number, h: number): number | null;
54
+ /**
55
+ * One engine read: `region` normalized [x, y, w, h], `op` the detector operation (3 cover … 9 inkLines), `scripts`
56
+ * SCRIPTS.LATIN | ARABIC | BOTH (or NONE: the detected line boxes only, no recognizer), `limit` the detector input
57
+ * long side.
58
+ */
59
+ read(rgba: Uint8Array | Uint8ClampedArray, w: number, h: number, region: readonly number[], scale: number, op: number, scripts: number, limit: number): EngineLine[];
60
+ /** Current wasm heap size (it only grows): the memory telemetry of a read profile. */
61
+ heapBytes(): number;
62
+ dispose(): void;
63
+ }
64
+
65
+ interface OcrWorkerScope {
66
+ onmessage: ((event: {
67
+ data: unknown;
68
+ }) => void) | null;
69
+ postMessage(data: unknown): void;
70
+ close(): void;
71
+ }
72
+ interface OcrWorkerDeps {
73
+ fetch: typeof fetch;
74
+ now: () => number;
75
+ /** The 2D canvas the worker draws bitmaps on (null = unsupported: OffscreenCanvas 2D missing in this worker). */
76
+ canvas: (w: number, h: number) => {
77
+ draw(bitmap: ImageBitmap): Uint8ClampedArray;
78
+ } | null;
79
+ instantiate: (module: WebAssembly.Module) => Promise<WasmEngine>;
80
+ }
81
+ declare function defaultDeps(): OcrWorkerDeps;
82
+ declare function installOcrWorkerHost(scope: OcrWorkerScope, deps?: OcrWorkerDeps): void;
83
+
84
+ export { type OcrWorkerDeps, type OcrWorkerScope, defaultDeps, installOcrWorkerHost };
@@ -0,0 +1,84 @@
1
+ interface OcrDecoded {
2
+ readonly text: string;
3
+ readonly score: number;
4
+ }
5
+
6
+ /** The Emscripten module surface the binding exports (bindings/exports.json). */
7
+ interface SekyroOcrModule {
8
+ HEAPU8: Uint8Array;
9
+ _malloc(n: number): number;
10
+ _free(p: number): void;
11
+ _skw_engine_id(): number;
12
+ _skw_load(model: number, param: number, paramBytes: number, weights: number, weightBytes: number, classes: number): number;
13
+ _skw_unload(model: number): void;
14
+ _skw_set_detector_limit(limit: number): void;
15
+ _skw_read(px: number, w: number, h: number, x: number, y: number, rw: number, rh: number, scale: number, op: number, scripts: number): number;
16
+ _skw_line_count(): number;
17
+ _skw_lines(): number;
18
+ _skw_best(): number;
19
+ _skw_values(): number;
20
+ _skw_sharpness(px: number, w: number, h: number): number;
21
+ }
22
+ /** One detected line: its source box (x1,y1 … x4,y4, source pixels) and each requested script's decode. */
23
+ interface EngineLine {
24
+ readonly box: readonly number[];
25
+ readonly latin?: OcrDecoded;
26
+ readonly arabic?: OcrDecoded;
27
+ }
28
+ declare class WasmEngine {
29
+ private readonly m;
30
+ private px;
31
+ private pxBytes;
32
+ private dicts;
33
+ private classes;
34
+ private held;
35
+ private latinKind;
36
+ constructor(m: SekyroOcrModule);
37
+ engineId(): string;
38
+ private put;
39
+ /**
40
+ * Loads a net; `dict` (UTF-8 text) for a recognizer. The heap copies live until [unload] (ncnn keeps pointers).
41
+ * `mrz`: the MRZ-only recognizer (spec D10; sekyro-mobile/ocr-models/mrz) in the LATIN slot instead of PP-OCR Latin:
42
+ * the same engine read and `recognize` callback, its own 37-symbol dictionary (39 classes with blank + space).
43
+ */
44
+ load(model: 0 | 1 | 2, param: ArrayBuffer | Uint8Array, weights: ArrayBuffer | Uint8Array, dict?: string, o?: {
45
+ mrz?: boolean;
46
+ }): void;
47
+ /** Which recognizer the LATIN slot holds (null when none). */
48
+ recognizer(): "latin" | "mrz" | null;
49
+ unload(model: 0 | 1 | 2): void;
50
+ loaded(model: 0 | 1 | 2): boolean;
51
+ private pixels;
52
+ /** Blur-gate measure of an RGBA image; null when not measurable (Kotlin `N.s(...).takeIf { it >= 0 }`). */
53
+ sharpness(rgba: Uint8Array | Uint8ClampedArray, w: number, h: number): number | null;
54
+ /**
55
+ * One engine read: `region` normalized [x, y, w, h], `op` the detector operation (3 cover … 9 inkLines), `scripts`
56
+ * SCRIPTS.LATIN | ARABIC | BOTH (or NONE: the detected line boxes only, no recognizer), `limit` the detector input
57
+ * long side.
58
+ */
59
+ read(rgba: Uint8Array | Uint8ClampedArray, w: number, h: number, region: readonly number[], scale: number, op: number, scripts: number, limit: number): EngineLine[];
60
+ /** Current wasm heap size (it only grows): the memory telemetry of a read profile. */
61
+ heapBytes(): number;
62
+ dispose(): void;
63
+ }
64
+
65
+ interface OcrWorkerScope {
66
+ onmessage: ((event: {
67
+ data: unknown;
68
+ }) => void) | null;
69
+ postMessage(data: unknown): void;
70
+ close(): void;
71
+ }
72
+ interface OcrWorkerDeps {
73
+ fetch: typeof fetch;
74
+ now: () => number;
75
+ /** The 2D canvas the worker draws bitmaps on (null = unsupported: OffscreenCanvas 2D missing in this worker). */
76
+ canvas: (w: number, h: number) => {
77
+ draw(bitmap: ImageBitmap): Uint8ClampedArray;
78
+ } | null;
79
+ instantiate: (module: WebAssembly.Module) => Promise<WasmEngine>;
80
+ }
81
+ declare function defaultDeps(): OcrWorkerDeps;
82
+ declare function installOcrWorkerHost(scope: OcrWorkerScope, deps?: OcrWorkerDeps): void;
83
+
84
+ export { type OcrWorkerDeps, type OcrWorkerScope, defaultDeps, installOcrWorkerHost };