smartcomply-web-sdk 1.0.3 → 1.0.4

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 (130) hide show
  1. package/README.md +43 -0
  2. package/dist/esm/camera/ActionDetector.d.ts +26 -0
  3. package/dist/esm/camera/ActionDetector.d.ts.map +1 -0
  4. package/dist/esm/camera/ActionDetector.js +110 -0
  5. package/dist/esm/camera/ActionDetector.js.map +1 -0
  6. package/dist/esm/camera/CameraManager.d.ts +7 -0
  7. package/dist/esm/camera/CameraManager.d.ts.map +1 -0
  8. package/dist/esm/camera/CameraManager.js +27 -0
  9. package/dist/esm/camera/CameraManager.js.map +1 -0
  10. package/dist/esm/camera/FaceDetector.d.ts +12 -0
  11. package/dist/esm/camera/FaceDetector.d.ts.map +1 -0
  12. package/dist/esm/camera/FaceDetector.js +51 -0
  13. package/dist/esm/camera/FaceDetector.js.map +1 -0
  14. package/dist/esm/camera/Permission.d.ts +42 -0
  15. package/dist/esm/camera/Permission.d.ts.map +1 -0
  16. package/dist/esm/camera/Permission.js +101 -0
  17. package/dist/esm/camera/Permission.js.map +1 -0
  18. package/dist/esm/camera/VideoRecorder.d.ts +12 -0
  19. package/dist/esm/camera/VideoRecorder.d.ts.map +1 -0
  20. package/dist/esm/camera/VideoRecorder.js +47 -0
  21. package/dist/esm/camera/VideoRecorder.js.map +1 -0
  22. package/dist/esm/client/Config.d.ts +9 -0
  23. package/dist/esm/client/Config.d.ts.map +1 -0
  24. package/dist/esm/client/Config.js +5 -0
  25. package/dist/esm/client/Config.js.map +1 -0
  26. package/dist/esm/client/HttpClient.d.ts +44 -0
  27. package/dist/esm/client/HttpClient.d.ts.map +1 -0
  28. package/dist/esm/client/HttpClient.js +145 -0
  29. package/dist/esm/client/HttpClient.js.map +1 -0
  30. package/dist/esm/client/Smartcomply.d.ts +50 -0
  31. package/dist/esm/client/Smartcomply.d.ts.map +1 -0
  32. package/dist/esm/client/Smartcomply.js +73 -0
  33. package/dist/esm/client/Smartcomply.js.map +1 -0
  34. package/dist/esm/components/CameraView.d.ts +59 -0
  35. package/dist/esm/components/CameraView.d.ts.map +1 -0
  36. package/dist/esm/components/CameraView.js +238 -0
  37. package/dist/esm/components/CameraView.js.map +1 -0
  38. package/dist/esm/components/DocumentUpload.d.ts +21 -0
  39. package/dist/esm/components/DocumentUpload.d.ts.map +1 -0
  40. package/dist/esm/components/DocumentUpload.js +216 -0
  41. package/dist/esm/components/DocumentUpload.js.map +1 -0
  42. package/dist/esm/errors/AuthError.d.ts +8 -0
  43. package/dist/esm/errors/AuthError.d.ts.map +1 -0
  44. package/dist/esm/errors/AuthError.js +11 -0
  45. package/dist/esm/errors/AuthError.js.map +1 -0
  46. package/dist/esm/errors/NetworkError.d.ts +8 -0
  47. package/dist/esm/errors/NetworkError.d.ts.map +1 -0
  48. package/dist/esm/errors/NetworkError.js +11 -0
  49. package/dist/esm/errors/NetworkError.js.map +1 -0
  50. package/dist/esm/errors/SDKError.d.ts +7 -0
  51. package/dist/esm/errors/SDKError.d.ts.map +1 -0
  52. package/dist/esm/errors/SDKError.js +10 -0
  53. package/dist/esm/errors/SDKError.js.map +1 -0
  54. package/dist/esm/flow/DocumentCapture.d.ts +54 -0
  55. package/dist/esm/flow/DocumentCapture.d.ts.map +1 -0
  56. package/dist/esm/flow/DocumentCapture.js +797 -0
  57. package/dist/esm/flow/DocumentCapture.js.map +1 -0
  58. package/dist/esm/flow/SmartComplyFlow.d.ts +104 -0
  59. package/dist/esm/flow/SmartComplyFlow.d.ts.map +1 -0
  60. package/dist/esm/flow/SmartComplyFlow.js +1722 -0
  61. package/dist/esm/flow/SmartComplyFlow.js.map +1 -0
  62. package/dist/esm/flow/theme.d.ts +30 -0
  63. package/dist/esm/flow/theme.d.ts.map +1 -0
  64. package/dist/esm/flow/theme.js +99 -0
  65. package/dist/esm/flow/theme.js.map +1 -0
  66. package/dist/esm/index.d.ts +20 -0
  67. package/dist/esm/index.d.ts.map +1 -0
  68. package/dist/esm/index.js +15 -0
  69. package/dist/esm/index.js.map +1 -0
  70. package/dist/esm/modules/liveness/LivenessUI.d.ts +46 -0
  71. package/dist/esm/modules/liveness/LivenessUI.d.ts.map +1 -0
  72. package/dist/esm/modules/liveness/LivenessUI.js +605 -0
  73. package/dist/esm/modules/liveness/LivenessUI.js.map +1 -0
  74. package/dist/esm/modules/liveness/index.d.ts +5 -0
  75. package/dist/esm/modules/liveness/index.d.ts.map +1 -0
  76. package/dist/esm/modules/liveness/index.js +4 -0
  77. package/dist/esm/modules/liveness/index.js.map +1 -0
  78. package/dist/esm/modules/liveness/liveness.d.ts +85 -0
  79. package/dist/esm/modules/liveness/liveness.d.ts.map +1 -0
  80. package/dist/esm/modules/liveness/liveness.js +421 -0
  81. package/dist/esm/modules/liveness/liveness.js.map +1 -0
  82. package/dist/esm/modules/liveness/uploader.d.ts +34 -0
  83. package/dist/esm/modules/liveness/uploader.d.ts.map +1 -0
  84. package/dist/esm/modules/liveness/uploader.js +102 -0
  85. package/dist/esm/modules/liveness/uploader.js.map +1 -0
  86. package/dist/esm/modules/onboarding/index.d.ts +2 -0
  87. package/dist/esm/modules/onboarding/index.d.ts.map +1 -0
  88. package/dist/esm/modules/onboarding/index.js +2 -0
  89. package/dist/esm/modules/onboarding/index.js.map +1 -0
  90. package/dist/esm/modules/onboarding/onboarding.d.ts +25 -0
  91. package/dist/esm/modules/onboarding/onboarding.d.ts.map +1 -0
  92. package/dist/esm/modules/onboarding/onboarding.js +29 -0
  93. package/dist/esm/modules/onboarding/onboarding.js.map +1 -0
  94. package/dist/esm/types/common.d.ts +27 -0
  95. package/dist/esm/types/common.d.ts.map +1 -0
  96. package/dist/esm/types/common.js +2 -0
  97. package/dist/esm/types/common.js.map +1 -0
  98. package/dist/esm/types/liveness.d.ts +142 -0
  99. package/dist/esm/types/liveness.d.ts.map +1 -0
  100. package/dist/esm/types/liveness.js +2 -0
  101. package/dist/esm/types/liveness.js.map +1 -0
  102. package/dist/esm/types/onboarding.d.ts +53 -0
  103. package/dist/esm/types/onboarding.d.ts.map +1 -0
  104. package/dist/esm/types/onboarding.js +2 -0
  105. package/dist/esm/types/onboarding.js.map +1 -0
  106. package/dist/esm/types/quality.d.ts +23 -0
  107. package/dist/esm/types/quality.d.ts.map +1 -0
  108. package/dist/esm/types/quality.js +5 -0
  109. package/dist/esm/types/quality.js.map +1 -0
  110. package/dist/esm/utils/ImageQuality.d.ts +48 -0
  111. package/dist/esm/utils/ImageQuality.d.ts.map +1 -0
  112. package/dist/esm/utils/ImageQuality.js +177 -0
  113. package/dist/esm/utils/ImageQuality.js.map +1 -0
  114. package/dist/esm/utils/constants.d.ts +59 -0
  115. package/dist/esm/utils/constants.d.ts.map +1 -0
  116. package/dist/esm/utils/constants.js +67 -0
  117. package/dist/esm/utils/constants.js.map +1 -0
  118. package/dist/esm/utils/device.d.ts +14 -0
  119. package/dist/esm/utils/device.d.ts.map +1 -0
  120. package/dist/esm/utils/device.js +52 -0
  121. package/dist/esm/utils/device.js.map +1 -0
  122. package/dist/esm/utils/logger.d.ts +28 -0
  123. package/dist/esm/utils/logger.d.ts.map +1 -0
  124. package/dist/esm/utils/logger.js +64 -0
  125. package/dist/esm/utils/logger.js.map +1 -0
  126. package/dist/esm/utils/validator.d.ts +35 -0
  127. package/dist/esm/utils/validator.d.ts.map +1 -0
  128. package/dist/esm/utils/validator.js +102 -0
  129. package/dist/esm/utils/validator.js.map +1 -0
  130. package/package.json +13 -5
@@ -0,0 +1,605 @@
1
+ /**
2
+ * Icons for the 5 backend-supported challenge actions (UPPERCASE).
3
+ */
4
+ const ICONS = {
5
+ BLINK: "\uD83D\uDE09",
6
+ TURN_LEFT: "\u2B05",
7
+ TURN_RIGHT: "\u27A1",
8
+ TURN_HEAD: "\uD83D\uDE42",
9
+ OPEN_MOUTH: "\uD83D\uDE2E",
10
+ };
11
+ /**
12
+ * Large animated SVG/HTML cues shown in the centre of the camera frame
13
+ * so the user knows exactly what to do — like a real liveness test.
14
+ */
15
+ const ACTION_CUES = {
16
+ BLINK: `
17
+ <div style="display:flex;flex-direction:column;align-items:center;gap:10px;">
18
+ <div style="font-size:64px;line-height:1;animation:sc-blink 1.2s ease-in-out infinite;">👁️</div>
19
+ <div style="font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;">BLINK YOUR EYES</div>
20
+ </div>`,
21
+ TURN_LEFT: `
22
+ <div style="display:flex;flex-direction:column;align-items:center;gap:10px;">
23
+ <div style="font-size:56px;line-height:1;animation:sc-slide-left 1s ease-in-out infinite;">⬅️</div>
24
+ <div style="font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;">TURN HEAD LEFT</div>
25
+ </div>`,
26
+ TURN_RIGHT: `
27
+ <div style="display:flex;flex-direction:column;align-items:center;gap:10px;">
28
+ <div style="font-size:56px;line-height:1;animation:sc-slide-right 1s ease-in-out infinite;">➡️</div>
29
+ <div style="font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;">TURN HEAD RIGHT</div>
30
+ </div>`,
31
+ TURN_HEAD: `
32
+ <div style="display:flex;flex-direction:column;align-items:center;gap:10px;">
33
+ <div style="font-size:56px;line-height:1;animation:sc-turn-head 1.4s ease-in-out infinite;">↔️</div>
34
+ <div style="font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;">TURN HEAD SIDE TO SIDE</div>
35
+ </div>`,
36
+ OPEN_MOUTH: `
37
+ <div style="display:flex;flex-direction:column;align-items:center;gap:10px;">
38
+ <div style="font-size:64px;line-height:1;animation:sc-mouth 1.2s ease-in-out infinite;">😮</div>
39
+ <div style="font-size:13px;font-weight:600;color:#fff;opacity:0.9;letter-spacing:0.5px;">OPEN YOUR MOUTH</div>
40
+ </div>`,
41
+ };
42
+ /** Keyframe CSS injected once */
43
+ function injectLivenessKeyframes() {
44
+ if (document.getElementById("sc-liveness-kf"))
45
+ return;
46
+ const s = document.createElement("style");
47
+ s.id = "sc-liveness-kf";
48
+ s.textContent = `
49
+ @keyframes sc-blink {
50
+ 0%,100% { transform:scaleY(1); }
51
+ 40% { transform:scaleY(0.1); }
52
+ 50% { transform:scaleY(1); }
53
+ }
54
+ @keyframes sc-slide-left {
55
+ 0%,100% { transform:translateX(0); opacity:1; }
56
+ 50% { transform:translateX(-14px); opacity:0.6; }
57
+ }
58
+ @keyframes sc-slide-right {
59
+ 0%,100% { transform:translateX(0); opacity:1; }
60
+ 50% { transform:translateX(14px); opacity:0.6; }
61
+ }
62
+ @keyframes sc-turn-head {
63
+ 0%,100% { transform:translateX(0); }
64
+ 25% { transform:translateX(-12px); }
65
+ 75% { transform:translateX(12px); }
66
+ }
67
+ @keyframes sc-mouth {
68
+ 0%,100% { transform:scaleY(1); }
69
+ 40% { transform:scaleY(1.25); }
70
+ 60% { transform:scaleY(1); }
71
+ }
72
+ @keyframes sc-pop-in {
73
+ 0% { transform:scale(0.7); opacity:0; }
74
+ 60% { transform:scale(1.05); }
75
+ 100% { transform:scale(1); opacity:1; }
76
+ }
77
+ @keyframes sc-cue-fade {
78
+ 0% { opacity:0; transform:translateY(8px); }
79
+ 20% { opacity:1; transform:translateY(0); }
80
+ 80% { opacity:1; transform:translateY(0); }
81
+ 100% { opacity:0; transform:translateY(-8px); }
82
+ }
83
+ `;
84
+ document.head.appendChild(s);
85
+ }
86
+ export class LivenessUI {
87
+ constructor() {
88
+ this.root = null;
89
+ this.videoEl = null;
90
+ this.instructionEl = null;
91
+ this.stepsEl = null;
92
+ this.progressBarEl = null;
93
+ this.confidenceRingEl = null;
94
+ this.timerEl = null;
95
+ this.overlayEl = null;
96
+ this.actionCueEl = null;
97
+ this.timerInterval = null;
98
+ this.totalActions = 0;
99
+ this.currentCueAction = null;
100
+ this.docCaptureRoot = null;
101
+ }
102
+ mount(container, challenge) {
103
+ injectLivenessKeyframes();
104
+ this.totalActions = challenge.actions.length;
105
+ this.root = document.createElement("div");
106
+ this.root.style.cssText = `
107
+ position:relative;width:100%;max-width:420px;margin:0 auto;
108
+ background:#0a0a0a;border-radius:16px;overflow:hidden;
109
+ font-family:system-ui,-apple-system,sans-serif;
110
+ box-shadow:0 8px 32px rgba(0,0,0,0.4);
111
+ `;
112
+ // Video
113
+ this.videoEl = document.createElement("video");
114
+ this.videoEl.autoplay = true;
115
+ this.videoEl.playsInline = true;
116
+ this.videoEl.muted = true;
117
+ this.videoEl.style.cssText =
118
+ "width:100%;display:block;transform:scaleX(-1);aspect-ratio:3/4;object-fit:cover;";
119
+ // Face guide — oval with confidence ring
120
+ const guideWrap = document.createElement("div");
121
+ guideWrap.style.cssText = `
122
+ position:absolute;top:8%;left:50%;transform:translateX(-50%);
123
+ width:180px;height:240px;pointer-events:none;
124
+ `;
125
+ const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
126
+ svg.setAttribute("viewBox", "0 0 180 240");
127
+ svg.style.cssText = "width:100%;height:100%;";
128
+ // Background oval (guide)
129
+ const bgOval = document.createElementNS("http://www.w3.org/2000/svg", "ellipse");
130
+ bgOval.setAttribute("cx", "90");
131
+ bgOval.setAttribute("cy", "120");
132
+ bgOval.setAttribute("rx", "85");
133
+ bgOval.setAttribute("ry", "115");
134
+ bgOval.setAttribute("fill", "none");
135
+ bgOval.setAttribute("stroke", "rgba(255,255,255,0.25)");
136
+ bgOval.setAttribute("stroke-width", "2.5");
137
+ bgOval.setAttribute("stroke-dasharray", "8 4");
138
+ // Confidence progress ring
139
+ const confOval = document.createElementNS("http://www.w3.org/2000/svg", "ellipse");
140
+ confOval.setAttribute("cx", "90");
141
+ confOval.setAttribute("cy", "120");
142
+ confOval.setAttribute("rx", "85");
143
+ confOval.setAttribute("ry", "115");
144
+ confOval.setAttribute("fill", "none");
145
+ confOval.setAttribute("stroke", "#22c55e");
146
+ confOval.setAttribute("stroke-width", "3.5");
147
+ const circumference = 2 * Math.PI * Math.sqrt((85 * 85 + 115 * 115) / 2);
148
+ confOval.setAttribute("stroke-dasharray", `${circumference}`);
149
+ confOval.setAttribute("stroke-dashoffset", `${circumference}`);
150
+ confOval.style.cssText =
151
+ "transition:stroke-dashoffset 0.15s ease;transform:rotate(-90deg);transform-origin:90px 120px;";
152
+ this.confidenceRingEl = confOval;
153
+ svg.appendChild(bgOval);
154
+ svg.appendChild(confOval);
155
+ guideWrap.appendChild(svg);
156
+ // Top bar — instruction
157
+ const topBar = document.createElement("div");
158
+ topBar.style.cssText = `
159
+ position:absolute;top:0;left:0;right:0;
160
+ background:linear-gradient(180deg,rgba(0,0,0,0.7) 0%,transparent 100%);
161
+ padding:16px 16px 32px;
162
+ `;
163
+ this.instructionEl = document.createElement("div");
164
+ this.instructionEl.style.cssText = `
165
+ color:#fff;font-size:15px;font-weight:600;text-align:center;
166
+ line-height:1.4;
167
+ `;
168
+ this.instructionEl.textContent = challenge.instruction;
169
+ topBar.appendChild(this.instructionEl);
170
+ // Bottom panel
171
+ const bottomPanel = document.createElement("div");
172
+ bottomPanel.style.cssText = `
173
+ position:absolute;bottom:0;left:0;right:0;
174
+ background:linear-gradient(0deg,rgba(0,0,0,0.85) 0%,rgba(0,0,0,0.6) 60%,transparent 100%);
175
+ padding:24px 16px 16px;
176
+ `;
177
+ // Progress bar
178
+ const progressWrap = document.createElement("div");
179
+ progressWrap.style.cssText = `
180
+ height:3px;background:rgba(255,255,255,0.15);border-radius:2px;
181
+ margin-bottom:14px;overflow:hidden;
182
+ `;
183
+ this.progressBarEl = document.createElement("div");
184
+ this.progressBarEl.style.cssText = `
185
+ height:100%;width:0%;background:linear-gradient(90deg,#22c55e,#4ade80);
186
+ border-radius:2px;transition:width 0.4s ease;
187
+ `;
188
+ progressWrap.appendChild(this.progressBarEl);
189
+ bottomPanel.appendChild(progressWrap);
190
+ // Steps list
191
+ this.stepsEl = document.createElement("div");
192
+ this.stepsEl.style.cssText = `
193
+ display:flex;flex-direction:column;gap:8px;margin-bottom:12px;
194
+ `;
195
+ for (let i = 0; i < challenge.actions.length; i++) {
196
+ const action = challenge.actions[i];
197
+ const step = document.createElement("div");
198
+ step.dataset.action = action;
199
+ step.style.cssText = `
200
+ display:flex;align-items:center;gap:10px;
201
+ padding:8px 12px;border-radius:10px;
202
+ background:rgba(255,255,255,0.06);
203
+ transition:all 0.3s ease;
204
+ opacity:${i === 0 ? "1" : "0.4"};
205
+ `;
206
+ const num = document.createElement("div");
207
+ num.className = "sc-step-num";
208
+ num.style.cssText = `
209
+ width:28px;height:28px;border-radius:50%;
210
+ display:flex;align-items:center;justify-content:center;
211
+ font-size:13px;font-weight:700;color:#fff;
212
+ background:rgba(255,255,255,0.12);
213
+ border:2px solid rgba(255,255,255,0.2);
214
+ transition:all 0.3s ease;flex-shrink:0;
215
+ `;
216
+ num.textContent = String(i + 1);
217
+ const label = document.createElement("div");
218
+ label.style.cssText = "color:#fff;font-size:13px;flex:1;";
219
+ label.textContent = this.describeAction(action);
220
+ const icon = document.createElement("div");
221
+ icon.className = "sc-step-icon";
222
+ icon.style.cssText = "font-size:18px;flex-shrink:0;";
223
+ icon.textContent = ICONS[action] || "";
224
+ step.appendChild(num);
225
+ step.appendChild(label);
226
+ step.appendChild(icon);
227
+ this.stepsEl.appendChild(step);
228
+ }
229
+ bottomPanel.appendChild(this.stepsEl);
230
+ // Timer
231
+ this.timerEl = document.createElement("div");
232
+ this.timerEl.style.cssText = `
233
+ text-align:center;color:rgba(255,255,255,0.5);
234
+ font-size:11px;font-variant-numeric:tabular-nums;
235
+ `;
236
+ bottomPanel.appendChild(this.timerEl);
237
+ // Result overlay (used for success / failure / timeout)
238
+ this.overlayEl = document.createElement("div");
239
+ this.overlayEl.style.cssText = `
240
+ position:absolute;inset:0;display:none;align-items:center;
241
+ justify-content:center;z-index:10;
242
+ background:rgba(0,0,0,0.85);backdrop-filter:blur(8px);
243
+ transition:opacity 0.3s ease;
244
+ `;
245
+ // Action cue — large centred animation shown when an action is active
246
+ this.actionCueEl = document.createElement("div");
247
+ this.actionCueEl.style.cssText = `
248
+ position:absolute;
249
+ top:50%;left:50%;transform:translate(-50%,-50%);
250
+ z-index:5;pointer-events:none;
251
+ display:none;
252
+ text-align:center;
253
+ background:rgba(0,0,0,0.55);
254
+ backdrop-filter:blur(4px);
255
+ border-radius:20px;
256
+ padding:18px 28px;
257
+ min-width:160px;
258
+ border:1.5px solid rgba(255,255,255,0.15);
259
+ `;
260
+ // Assemble
261
+ this.root.appendChild(this.videoEl);
262
+ this.root.appendChild(guideWrap);
263
+ this.root.appendChild(topBar);
264
+ this.root.appendChild(bottomPanel);
265
+ this.root.appendChild(this.actionCueEl);
266
+ this.root.appendChild(this.overlayEl);
267
+ container.appendChild(this.root);
268
+ this.startTimer(challenge.time_limit_seconds);
269
+ return this.videoEl;
270
+ }
271
+ updateActions(states) {
272
+ if (!this.stepsEl || !this.progressBarEl)
273
+ return;
274
+ let completed = 0;
275
+ const activeState = states.find((s) => s.active && !s.detected) ?? null;
276
+ const activeAction = activeState?.action ?? null;
277
+ for (const state of states) {
278
+ const step = this.stepsEl.querySelector(`[data-action="${state.action}"]`);
279
+ if (!step)
280
+ continue;
281
+ const num = step.querySelector(".sc-step-num");
282
+ if (state.detected) {
283
+ completed++;
284
+ step.style.opacity = "1";
285
+ step.style.background = "rgba(34,197,94,0.15)";
286
+ if (num) {
287
+ num.style.background = "#22c55e";
288
+ num.style.borderColor = "#22c55e";
289
+ num.textContent = "\u2713";
290
+ }
291
+ }
292
+ else if (state.active) {
293
+ step.style.opacity = "1";
294
+ step.style.background = "rgba(59,130,246,0.15)";
295
+ if (num) {
296
+ num.style.borderColor = "#3b82f6";
297
+ num.style.background = "rgba(59,130,246,0.3)";
298
+ }
299
+ }
300
+ }
301
+ // Update progress bar
302
+ const pct = this.totalActions > 0 ? (completed / this.totalActions) * 100 : 0;
303
+ this.progressBarEl.style.width = `${pct}%`;
304
+ // Update confidence ring for the active action
305
+ if (this.confidenceRingEl) {
306
+ const circumference = 2 * Math.PI * Math.sqrt((85 * 85 + 115 * 115) / 2);
307
+ const conf = activeState ? activeState.confidence : 0;
308
+ const offset = circumference * (1 - conf);
309
+ this.confidenceRingEl.setAttribute("stroke-dashoffset", `${offset}`);
310
+ this.confidenceRingEl.setAttribute("stroke", conf > 0.6 ? "#22c55e" : "#3b82f6");
311
+ }
312
+ // Show / switch large animated action cue
313
+ this.updateActionCue(activeAction);
314
+ }
315
+ updateActionCue(action) {
316
+ if (!this.actionCueEl)
317
+ return;
318
+ // No active action → hide cue
319
+ if (!action) {
320
+ this.actionCueEl.style.display = "none";
321
+ this.currentCueAction = null;
322
+ return;
323
+ }
324
+ // Same action already showing — no DOM thrash
325
+ if (action === this.currentCueAction)
326
+ return;
327
+ this.currentCueAction = action;
328
+ const cueHtml = ACTION_CUES[action];
329
+ if (!cueHtml) {
330
+ this.actionCueEl.style.display = "none";
331
+ return;
332
+ }
333
+ // Inject content and animate in
334
+ this.actionCueEl.innerHTML = cueHtml;
335
+ this.actionCueEl.style.display = "block";
336
+ this.actionCueEl.style.animation = "none";
337
+ // Force reflow then trigger animation
338
+ void this.actionCueEl.offsetWidth;
339
+ this.actionCueEl.style.animation = "sc-pop-in 0.3s ease forwards";
340
+ }
341
+ updateInstruction(text) {
342
+ if (this.instructionEl) {
343
+ this.instructionEl.textContent = text;
344
+ }
345
+ }
346
+ stopTimer() {
347
+ if (this.timerInterval) {
348
+ clearInterval(this.timerInterval);
349
+ this.timerInterval = null;
350
+ }
351
+ if (this.timerEl) {
352
+ this.timerEl.textContent = "";
353
+ }
354
+ }
355
+ showResult(status, verificationId) {
356
+ return new Promise((resolve) => {
357
+ if (!this.overlayEl) {
358
+ resolve();
359
+ return;
360
+ }
361
+ if (this.actionCueEl)
362
+ this.actionCueEl.style.display = "none";
363
+ this.stopTimer();
364
+ const isProcessing = status === "processing";
365
+ this.overlayEl.style.display = "flex";
366
+ this.overlayEl.innerHTML = `
367
+ <div style="text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;">
368
+ <div style="
369
+ width:80px;height:80px;border-radius:50%;margin:0 auto 20px;
370
+ display:flex;align-items:center;justify-content:center;
371
+ font-size:36px;
372
+ background:${isProcessing ? "rgba(34,197,94,0.2)" : "rgba(239,68,68,0.2)"};
373
+ border:3px solid ${isProcessing ? "#22c55e" : "#ef4444"};
374
+ ">${isProcessing ? "\u2713" : "\u2717"}</div>
375
+ <div style="font-size:19px;font-weight:700;margin-bottom:8px;">
376
+ ${isProcessing ? "Identity Check Submitted" : "Submission Failed"}
377
+ </div>
378
+ <div style="font-size:13px;opacity:0.65;line-height:1.6;margin-bottom:${verificationId ? "16px" : "0"};">
379
+ ${isProcessing
380
+ ? "Your identity is being verified.<br>You\'ll be notified of the outcome shortly."
381
+ : "Something went wrong. Please try again."}
382
+ </div>
383
+ ${verificationId ? `
384
+ <div style="
385
+ margin-top:4px;padding:8px 14px;border-radius:8px;
386
+ background:rgba(255,255,255,0.08);display:inline-block;
387
+ font-size:11px;color:rgba(255,255,255,0.5);letter-spacing:0.3px;
388
+ ">Ref: #${verificationId}</div>` : ""}
389
+ </div>
390
+ `;
391
+ setTimeout(resolve, 2800);
392
+ });
393
+ }
394
+ /**
395
+ * Show timeout screen with an optional retry callback.
396
+ * Resolves immediately so the orchestrator can move to next step.
397
+ */
398
+ showTimeout(onRetry) {
399
+ return new Promise((resolve) => {
400
+ if (!this.overlayEl) {
401
+ resolve();
402
+ return;
403
+ }
404
+ if (this.actionCueEl)
405
+ this.actionCueEl.style.display = "none";
406
+ this.stopTimer();
407
+ this.overlayEl.style.display = "flex";
408
+ this.overlayEl.innerHTML = `
409
+ <div style="text-align:center;color:#fff;animation:sc-pop-in 0.35s ease;padding:24px;">
410
+ <div style="
411
+ width:80px;height:80px;border-radius:50%;margin:0 auto 16px;
412
+ display:flex;align-items:center;justify-content:center;
413
+ font-size:36px;
414
+ background:rgba(251,191,36,0.15);
415
+ border:3px solid #fbbf24;
416
+ ">⏱</div>
417
+ <div style="font-size:18px;font-weight:700;margin-bottom:8px;">Time's Up</div>
418
+ <div style="font-size:13px;opacity:0.65;margin-bottom:20px;">
419
+ You ran out of time. Please try again.
420
+ </div>
421
+ <button id="sc-retry-btn" style="
422
+ padding:12px 28px;border-radius:10px;
423
+ background:#3b82f6;color:#fff;
424
+ border:none;cursor:pointer;
425
+ font-size:14px;font-weight:600;
426
+ width:100%;max-width:200px;
427
+ ">Try Again</button>
428
+ </div>
429
+ `;
430
+ // Wire retry button
431
+ const retryBtn = this.overlayEl.querySelector("#sc-retry-btn");
432
+ if (retryBtn) {
433
+ retryBtn.addEventListener("click", () => {
434
+ onRetry();
435
+ resolve();
436
+ });
437
+ }
438
+ else {
439
+ // fallback — auto-resolve after 5s
440
+ setTimeout(resolve, 5000);
441
+ }
442
+ });
443
+ }
444
+ getVideoElement() {
445
+ return this.videoEl;
446
+ }
447
+ /**
448
+ * Mount a document scanning step before the liveness challenge.
449
+ * Reuses the already-open camera stream — no second permission prompt.
450
+ * Resolves with the captured document Blob.
451
+ */
452
+ mountDocumentCapture(container, stream) {
453
+ return new Promise((resolve, reject) => {
454
+ injectLivenessKeyframes();
455
+ const docRoot = document.createElement("div");
456
+ docRoot.style.cssText = `
457
+ position:relative;width:100%;max-width:420px;margin:0 auto;
458
+ background:#0a0a0a;border-radius:16px;overflow:hidden;
459
+ font-family:system-ui,-apple-system,sans-serif;
460
+ box-shadow:0 8px 32px rgba(0,0,0,0.4);
461
+ `;
462
+ this.docCaptureRoot = docRoot;
463
+ const docVideo = document.createElement("video");
464
+ docVideo.autoplay = true;
465
+ docVideo.playsInline = true;
466
+ docVideo.muted = true;
467
+ docVideo.style.cssText = "width:100%;display:block;aspect-ratio:4/3;object-fit:cover;";
468
+ docVideo.srcObject = stream;
469
+ // Rectangle guide with blue corner accents
470
+ const guideOverlay = document.createElement("div");
471
+ guideOverlay.style.cssText = "position:absolute;inset:0;pointer-events:none;display:flex;align-items:center;justify-content:center;";
472
+ guideOverlay.innerHTML = `
473
+ <div style="width:83%;height:53%;border:2px dashed rgba(255,255,255,0.55);border-radius:10px;box-shadow:0 0 0 2000px rgba(0,0,0,0.45);position:relative;">
474
+ <div style="position:absolute;top:-2px;left:-2px;width:18px;height:18px;border-top:3px solid #3b82f6;border-left:3px solid #3b82f6;border-radius:4px 0 0 0;"></div>
475
+ <div style="position:absolute;top:-2px;right:-2px;width:18px;height:18px;border-top:3px solid #3b82f6;border-right:3px solid #3b82f6;border-radius:0 4px 0 0;"></div>
476
+ <div style="position:absolute;bottom:-2px;left:-2px;width:18px;height:18px;border-bottom:3px solid #3b82f6;border-left:3px solid #3b82f6;border-radius:0 0 0 4px;"></div>
477
+ <div style="position:absolute;bottom:-2px;right:-2px;width:18px;height:18px;border-bottom:3px solid #3b82f6;border-right:3px solid #3b82f6;border-radius:0 0 4px 0;"></div>
478
+ </div>
479
+ `;
480
+ const header = document.createElement("div");
481
+ header.style.cssText = "position:absolute;top:0;left:0;right:0;background:linear-gradient(180deg,rgba(0,0,0,0.88) 0%,transparent 100%);padding:18px 16px 40px;text-align:center;";
482
+ header.innerHTML = `
483
+ <div style="color:#fff;font-size:16px;font-weight:700;margin-bottom:6px;">Scan Your ID Document</div>
484
+ <div style="color:rgba(255,255,255,0.6);font-size:12px;line-height:1.6;">
485
+ Fit your document inside the frame.<br>Make sure all text and corners are visible.
486
+ </div>
487
+ `;
488
+ const bottomPanel = document.createElement("div");
489
+ bottomPanel.style.cssText = "position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,rgba(0,0,0,0.92) 0%,rgba(0,0,0,0.6) 70%,transparent 100%);padding:16px 16px;";
490
+ bottomPanel.innerHTML = `
491
+ <div style="font-size:11px;color:rgba(255,255,255,0.4);text-align:center;margin-bottom:12px;">
492
+ 💡 Good lighting &nbsp;·&nbsp; No glare &nbsp;·&nbsp; All 4 corners visible
493
+ </div>
494
+ <button id="sc-capture-doc-btn" style="width:100%;padding:12px;border-radius:12px;background:#3b82f6;color:#fff;border:none;cursor:pointer;font-size:15px;font-weight:700;margin-bottom:8px;">
495
+ Capture Document
496
+ </button>
497
+ <label style="width:100%;display:flex;align-items:center;justify-content:center;gap:6px;padding:9px;border-radius:12px;border:1.5px solid rgba(255,255,255,0.18);cursor:pointer;color:rgba(255,255,255,0.6);font-size:13px;font-weight:500;">
498
+ <span>📁</span><span>Upload from gallery instead</span>
499
+ <input id="sc-upload-doc-input" type="file" accept="image/*" style="display:none;" />
500
+ </label>
501
+ `;
502
+ docRoot.appendChild(docVideo);
503
+ docRoot.appendChild(guideOverlay);
504
+ docRoot.appendChild(header);
505
+ docRoot.appendChild(bottomPanel);
506
+ container.appendChild(docRoot);
507
+ docVideo.play().catch(() => { });
508
+ const cleanup = () => {
509
+ if (docRoot.parentElement)
510
+ docRoot.parentElement.removeChild(docRoot);
511
+ this.docCaptureRoot = null;
512
+ };
513
+ const captureBtn = bottomPanel.querySelector("#sc-capture-doc-btn");
514
+ if (captureBtn) {
515
+ captureBtn.addEventListener("click", () => {
516
+ try {
517
+ const canvas = document.createElement("canvas");
518
+ canvas.width = docVideo.videoWidth || 1280;
519
+ canvas.height = docVideo.videoHeight || 720;
520
+ const ctx = canvas.getContext("2d");
521
+ if (!ctx) {
522
+ reject(new Error("Canvas context unavailable"));
523
+ return;
524
+ }
525
+ ctx.drawImage(docVideo, 0, 0);
526
+ canvas.toBlob((blob) => {
527
+ if (blob) {
528
+ cleanup();
529
+ resolve(blob);
530
+ }
531
+ else {
532
+ reject(new Error("Failed to capture document image"));
533
+ }
534
+ }, "image/jpeg", 0.92);
535
+ }
536
+ catch (err) {
537
+ reject(err);
538
+ }
539
+ });
540
+ }
541
+ const uploadInput = bottomPanel.querySelector("#sc-upload-doc-input");
542
+ if (uploadInput) {
543
+ uploadInput.addEventListener("change", () => {
544
+ const file = uploadInput.files?.[0];
545
+ if (file) {
546
+ cleanup();
547
+ resolve(file);
548
+ }
549
+ });
550
+ }
551
+ });
552
+ }
553
+ unmount() {
554
+ this.stopTimer();
555
+ if (this.docCaptureRoot && this.docCaptureRoot.parentElement) {
556
+ this.docCaptureRoot.parentElement.removeChild(this.docCaptureRoot);
557
+ this.docCaptureRoot = null;
558
+ }
559
+ if (this.root && this.root.parentElement) {
560
+ this.root.parentElement.removeChild(this.root);
561
+ }
562
+ this.root = null;
563
+ this.videoEl = null;
564
+ this.instructionEl = null;
565
+ this.stepsEl = null;
566
+ this.progressBarEl = null;
567
+ this.confidenceRingEl = null;
568
+ this.timerEl = null;
569
+ this.overlayEl = null;
570
+ this.actionCueEl = null;
571
+ }
572
+ startTimer(seconds) {
573
+ let remaining = seconds;
574
+ const update = () => {
575
+ if (!this.timerEl)
576
+ return;
577
+ const m = Math.floor(remaining / 60);
578
+ const s = remaining % 60;
579
+ const display = m > 0 ? `${m}:${String(s).padStart(2, "0")}` : `${s}s`;
580
+ this.timerEl.textContent = `${display} remaining`;
581
+ if (remaining <= 5) {
582
+ this.timerEl.style.color = "#ef4444";
583
+ }
584
+ };
585
+ update();
586
+ this.timerInterval = setInterval(() => {
587
+ remaining--;
588
+ update();
589
+ if (remaining <= 0 && this.timerInterval) {
590
+ clearInterval(this.timerInterval);
591
+ }
592
+ }, 1000);
593
+ }
594
+ describeAction(action) {
595
+ const labels = {
596
+ BLINK: "Blink your eyes",
597
+ TURN_LEFT: "Turn your head left",
598
+ TURN_RIGHT: "Turn your head right",
599
+ TURN_HEAD: "Turn your head side to side",
600
+ OPEN_MOUTH: "Open your mouth wide",
601
+ };
602
+ return labels[action] || action.replace(/_/g, " ").toLowerCase();
603
+ }
604
+ }
605
+ //# sourceMappingURL=LivenessUI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LivenessUI.js","sourceRoot":"","sources":["../../../../src/modules/liveness/LivenessUI.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { LivenessModule } from "./liveness";
2
+ export { LivenessUI } from "./LivenessUI";
3
+ export { LivenessUploader } from "./uploader";
4
+ export type { UploadOptions } from "./uploader";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/modules/liveness/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { LivenessModule } from "./liveness";
2
+ export { LivenessUI } from "./LivenessUI";
3
+ export { LivenessUploader } from "./uploader";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/liveness/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC"}