smartcomply-web-sdk 1.0.3

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