@simprints/simface-sdk 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,10 +4,8 @@
4
4
  * Plans capture explicitly as an ordered fallback chain:
5
5
  * auto camera -> manual camera -> media picker.
6
6
  */
7
- import { CAPTURE_GUIDE_MASK_PATH, CAPTURE_GUIDE_PATH, } from '../shared/auto-capture.js';
8
- import { buildCapturePlan, normalizeCaptureOptions, resolveCaptureCapabilities, } from '../shared/capture-flow.js';
9
- import { CameraCaptureSessionController, } from '../shared/capture-session.js';
10
- import { CameraAccessError, blobToDataURL, blobToImage, captureFromFileInput, openUserFacingCameraStream, } from '../shared/capture-runtime.js';
7
+ import { normalizeCaptureOptions, } from '../shared/capture-flow.js';
8
+ import { blobToDataURL, blobToImage, captureFromFileInput, } from '../shared/capture-runtime.js';
11
9
  const CAPTURE_DIALOG_Z_INDEX = '2147483647';
12
10
  /**
13
11
  * Opens the configured capture presentation and returns a confirmed image Blob,
@@ -18,27 +16,19 @@ export async function captureFromCamera(options) {
18
16
  if (captureOptions.presentation === 'embedded') {
19
17
  return captureFromEmbeddedComponent(captureOptions);
20
18
  }
21
- const capabilities = await resolveCaptureCapabilities({
22
- capturePreference: captureOptions.capturePreference,
23
- });
24
- const plan = buildCapturePlan(captureOptions, capabilities);
25
- for (let index = 0; index < plan.steps.length; index += 1) {
26
- const step = plan.steps[index];
27
- if (step === 'media-picker') {
19
+ // For popup, skip the expensive auto-capture probe (MediaPipe load) here.
20
+ // We only need to know if a camera API is available; the full capabilities
21
+ // resolution (including auto-capture) happens inside the component once the
22
+ // UI is shown. If there is no camera API, bypass the popup and go directly
23
+ // to the media-picker fallback.
24
+ const supportsMediaDevices = typeof navigator.mediaDevices?.getUserMedia === 'function';
25
+ if (!supportsMediaDevices) {
26
+ if (captureOptions.allowMediaPickerFallback) {
28
27
  return captureFromFileInput();
29
28
  }
30
- try {
31
- return await captureFromPopupCamera(step === 'auto-camera' ? 'auto' : 'manual');
32
- }
33
- catch (error) {
34
- const hasMediaPickerFallback = plan.steps.slice(index + 1).includes('media-picker');
35
- if (error instanceof CameraAccessError && hasMediaPickerFallback) {
36
- return captureFromFileInput();
37
- }
38
- throw error;
39
- }
29
+ throw new Error('No supported capture strategy is available in this environment.');
40
30
  }
41
- throw new Error('No supported capture strategy is available in this environment.');
31
+ return captureFromPopupCamera(captureOptions);
42
32
  }
43
33
  async function captureFromEmbeddedComponent(options) {
44
34
  await import('../components/simface-capture.js');
@@ -99,26 +89,42 @@ function resolveEmbeddedCaptureHost(container) {
99
89
  }
100
90
  return element;
101
91
  }
102
- async function captureFromPopupCamera(initialMode) {
92
+ async function captureFromPopupCamera(options) {
93
+ await import('../components/simface-capture.js');
103
94
  return new Promise((resolve, reject) => {
104
95
  let settled = false;
105
- let overlay = null;
106
- let previewUrl = '';
107
- let stream = null;
108
- let controller = null;
109
96
  let escapeHandler = null;
97
+ const overlay = document.createElement('div');
98
+ overlay.setAttribute('data-simface-camera-overlay', 'true');
99
+ overlay.setAttribute('role', 'dialog');
100
+ overlay.setAttribute('aria-modal', 'true');
101
+ applyStyles(overlay, {
102
+ position: 'fixed',
103
+ inset: '0',
104
+ zIndex: CAPTURE_DIALOG_Z_INDEX,
105
+ display: 'flex',
106
+ alignItems: 'center',
107
+ justifyContent: 'center',
108
+ padding: '24px',
109
+ background: 'rgba(15, 23, 42, 0.82)',
110
+ colorScheme: 'light',
111
+ });
112
+ const element = document.createElement('simface-capture');
113
+ element.label = options.label;
114
+ element.confirmLabel = options.confirmLabel;
115
+ element.capturePreference = options.capturePreference;
116
+ element.allowMediaPickerFallback = options.allowMediaPickerFallback;
117
+ overlay.appendChild(element);
118
+ document.body.appendChild(overlay);
110
119
  const cleanup = () => {
111
- controller?.stop();
112
120
  if (escapeHandler) {
113
121
  window.removeEventListener('keydown', escapeHandler);
114
122
  }
115
- if (previewUrl) {
116
- URL.revokeObjectURL(previewUrl);
117
- }
118
- if (stream) {
119
- stream.getTracks().forEach((track) => track.stop());
120
- }
121
- overlay?.remove();
123
+ element.removeEventListener('simface-captured', handleCaptured);
124
+ element.removeEventListener('simface-cancelled', handleCancelled);
125
+ element.removeEventListener('simface-error', handleError);
126
+ element.active = false;
127
+ overlay.remove();
122
128
  };
123
129
  const finalize = (value, error) => {
124
130
  if (settled) {
@@ -132,318 +138,28 @@ async function captureFromPopupCamera(initialMode) {
132
138
  }
133
139
  resolve(value);
134
140
  };
135
- try {
136
- overlay = document.createElement('div');
137
- overlay.setAttribute('data-simface-camera-overlay', 'true');
138
- overlay.setAttribute('role', 'dialog');
139
- overlay.setAttribute('aria-modal', 'true');
140
- applyStyles(overlay, {
141
- position: 'fixed',
142
- inset: '0',
143
- zIndex: CAPTURE_DIALOG_Z_INDEX,
144
- display: 'flex',
145
- alignItems: 'center',
146
- justifyContent: 'center',
147
- padding: '24px',
148
- background: 'rgba(15, 23, 42, 0.82)',
149
- });
150
- const panel = document.createElement('div');
151
- applyStyles(panel, {
152
- width: 'min(100%, 560px)',
153
- display: 'flex',
154
- flexDirection: 'column',
155
- gap: '16px',
156
- padding: '20px',
157
- borderRadius: '20px',
158
- background: '#020617',
159
- color: '#e2e8f0',
160
- boxShadow: '0 24px 60px rgba(15, 23, 42, 0.35)',
161
- });
162
- const title = document.createElement('h2');
163
- applyStyles(title, {
164
- margin: '0',
165
- fontSize: '1.25rem',
166
- fontWeight: '700',
167
- });
168
- const copy = document.createElement('p');
169
- applyStyles(copy, {
170
- margin: '0',
171
- color: '#cbd5e1',
172
- fontSize: '0.95rem',
173
- lineHeight: '1.5',
174
- });
175
- const mediaContainer = document.createElement('div');
176
- applyStyles(mediaContainer, {
177
- position: 'relative',
178
- overflow: 'hidden',
179
- width: '100%',
180
- aspectRatio: '3 / 4',
181
- minHeight: '320px',
182
- borderRadius: '18px',
183
- background: '#000',
184
- });
185
- const video = document.createElement('video');
186
- video.autoplay = true;
187
- video.muted = true;
188
- video.playsInline = true;
189
- applyStyles(video, {
190
- width: '100%',
191
- height: '100%',
192
- objectFit: 'cover',
193
- transform: 'scaleX(-1)',
194
- });
195
- const feedback = document.createElement('div');
196
- applyStyles(feedback, {
197
- borderRadius: '14px',
198
- padding: '12px 14px',
199
- font: '600 14px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
200
- });
201
- const actions = document.createElement('div');
202
- applyStyles(actions, {
203
- display: 'flex',
204
- flexWrap: 'wrap',
205
- gap: '12px',
206
- justifyContent: 'flex-end',
207
- });
208
- const cancelButton = createActionButton('Cancel', 'secondary');
209
- cancelButton.dataset.simfaceAction = 'cancel';
210
- const captureButton = createActionButton('Take photo', 'primary');
211
- captureButton.dataset.simfaceAction = 'capture';
212
- const confirmButton = createActionButton('Use photo', 'primary');
213
- confirmButton.dataset.simfaceAction = 'confirm';
214
- const retakeButton = createActionButton('Retake', 'secondary');
215
- retakeButton.dataset.simfaceAction = 'retake';
216
- const guideOverlay = createGuideOverlay();
217
- panel.append(title, copy, mediaContainer, feedback, actions);
218
- overlay.append(panel);
219
- document.body.appendChild(overlay);
220
- escapeHandler = (event) => {
221
- if (event.key === 'Escape') {
222
- finalize(null);
223
- }
224
- };
225
- window.addEventListener('keydown', escapeHandler);
226
- cancelButton.addEventListener('click', () => finalize(null));
227
- captureButton.addEventListener('click', () => {
228
- void controller?.takePhotoNow().catch((error) => {
229
- finalize(null, error instanceof Error ? error : new Error('Failed to capture an image.'));
230
- });
231
- });
232
- retakeButton.addEventListener('click', () => {
233
- void controller?.retake().catch((error) => {
234
- finalize(null, error instanceof Error ? error : new Error('Failed to restart the capture.'));
235
- });
236
- });
237
- confirmButton.addEventListener('click', () => {
238
- try {
239
- const blob = controller?.confirm();
240
- finalize(blob ?? null);
241
- }
242
- catch (error) {
243
- finalize(null, error instanceof Error ? error : new Error('Failed to confirm the photo.'));
244
- }
245
- });
246
- controller = new CameraCaptureSessionController({
247
- videoElement: video,
248
- initialMode,
249
- copy: {
250
- autoReadyMessage: 'Looking for a single face in frame...',
251
- manualReadyMessage: 'When you are ready, press Take photo.',
252
- autoUnavailableMessage: 'Automatic capture is unavailable in this browser. Use Take photo instead.',
253
- retakeReadyMessage: 'When you are ready, press Take photo.',
254
- },
255
- onStateChange: (state) => {
256
- renderPopupState({
257
- state,
258
- mediaContainer,
259
- video,
260
- title,
261
- copy,
262
- feedback,
263
- actions,
264
- cancelButton,
265
- captureButton,
266
- confirmButton,
267
- retakeButton,
268
- guideOverlay,
269
- setPreviewUrl(nextUrl) {
270
- if (previewUrl) {
271
- URL.revokeObjectURL(previewUrl);
272
- }
273
- previewUrl = nextUrl;
274
- },
275
- });
276
- },
277
- });
278
- void (async () => {
279
- try {
280
- stream = await openUserFacingCameraStream();
281
- if (settled) {
282
- stream.getTracks().forEach((track) => track.stop());
283
- return;
284
- }
285
- video.srcObject = stream;
286
- await controller?.start();
287
- }
288
- catch (error) {
289
- finalize(null, error instanceof Error ? error : new Error('Failed to open the camera capture UI.'));
290
- }
291
- })();
292
- }
293
- catch (error) {
294
- finalize(null, error instanceof Error ? error : new Error('Failed to open the camera capture UI.'));
295
- }
296
- });
297
- }
298
- function renderPopupState(options) {
299
- const { state, mediaContainer, video, title, copy, feedback, actions, cancelButton, captureButton, confirmButton, retakeButton, guideOverlay, setPreviewUrl, } = options;
300
- guideOverlay.setProgress(state.phase === 'live' && state.mode === 'auto' ? state.countdownProgress : 0);
301
- if (state.phase === 'preview') {
302
- const nextPreviewUrl = URL.createObjectURL(state.previewBlob);
303
- setPreviewUrl(nextPreviewUrl);
304
- const image = document.createElement('img');
305
- image.alt = 'Captured face preview';
306
- image.src = nextPreviewUrl;
307
- applyStyles(image, {
308
- position: 'absolute',
309
- inset: '0',
310
- zIndex: '1',
311
- width: '100%',
312
- height: '100%',
313
- objectFit: 'cover',
314
- transform: 'scaleX(-1)',
141
+ const handleCaptured = (event) => {
142
+ finalize(event.detail.imageBlob);
143
+ };
144
+ const handleCancelled = () => {
145
+ finalize(null);
146
+ };
147
+ const handleError = (event) => {
148
+ finalize(null, new Error(event.detail.error));
149
+ };
150
+ escapeHandler = (event) => {
151
+ if (event.key === 'Escape') {
152
+ finalize(null);
153
+ }
154
+ };
155
+ element.addEventListener('simface-captured', handleCaptured);
156
+ element.addEventListener('simface-cancelled', handleCancelled);
157
+ element.addEventListener('simface-error', handleError);
158
+ window.addEventListener('keydown', escapeHandler);
159
+ void element.startCapture().catch((error) => {
160
+ finalize(null, error instanceof Error ? error : new Error('Popup capture failed.'));
315
161
  });
316
- mediaContainer.replaceChildren(video, image);
317
- title.textContent = 'Review your photo';
318
- copy.textContent = state.qualityResult?.passesQualityChecks === false
319
- ? 'The capture did not pass the checks. Retake the photo.'
320
- : 'Confirm this photo or retake it.';
321
- feedback.textContent = state.feedbackMessage;
322
- setFeedbackState(feedback, state.feedbackTone);
323
- actions.replaceChildren(cancelButton, retakeButton);
324
- if (state.canConfirm) {
325
- actions.append(confirmButton);
326
- }
327
- return;
328
- }
329
- mediaContainer.replaceChildren(video, guideOverlay.wrapper);
330
- setPreviewUrl('');
331
- if (state.mode === 'auto') {
332
- title.textContent = state.phase === 'starting' ? 'Opening camera...' : 'Center your face';
333
- copy.textContent = 'Keep your face inside the oval. We will start a short countdown when the framing looks good and keep the best frame.';
334
- }
335
- else {
336
- title.textContent = state.phase === 'starting' ? 'Opening camera...' : 'Take a face photo';
337
- copy.textContent = 'Line up your face in the oval, then take a photo manually.';
338
- }
339
- feedback.textContent = state.phase === 'starting'
340
- ? 'Requesting camera access...'
341
- : state.feedbackMessage;
342
- setFeedbackState(feedback, state.phase === 'starting'
343
- ? 'neutral'
344
- : state.feedbackTone);
345
- captureButton.style.display = state.phase === 'live' && state.mode === 'manual'
346
- ? 'inline-flex'
347
- : 'none';
348
- captureButton.disabled = !(state.phase === 'live' && state.mode === 'manual');
349
- actions.replaceChildren(cancelButton, captureButton);
350
- }
351
- function createActionButton(label, variant) {
352
- const button = document.createElement('button');
353
- button.type = 'button';
354
- button.textContent = label;
355
- applyStyles(button, {
356
- display: 'inline-flex',
357
- alignItems: 'center',
358
- justifyContent: 'center',
359
- border: 'none',
360
- borderRadius: '999px',
361
- padding: '12px 18px',
362
- font: '600 15px -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',
363
- cursor: 'pointer',
364
- color: variant === 'primary' ? '#fff' : '#0f172a',
365
- background: variant === 'primary' ? '#2563eb' : '#e2e8f0',
366
- });
367
- return button;
368
- }
369
- function createGuideOverlay() {
370
- const wrapper = document.createElement('div');
371
- applyStyles(wrapper, {
372
- position: 'absolute',
373
- inset: '0',
374
- pointerEvents: 'none',
375
- });
376
- const svg = createSvgElement('svg');
377
- svg.setAttribute('viewBox', '0 0 100 100');
378
- svg.setAttribute('preserveAspectRatio', 'none');
379
- applyStyles(svg, {
380
- width: '100%',
381
- height: '100%',
382
- display: 'block',
383
162
  });
384
- const mask = createSvgElement('path');
385
- mask.setAttribute('d', CAPTURE_GUIDE_MASK_PATH);
386
- mask.setAttribute('fill', 'rgba(51, 65, 85, 0.75)');
387
- mask.setAttribute('fill-rule', 'evenodd');
388
- const outline = createSvgElement('path');
389
- outline.setAttribute('d', CAPTURE_GUIDE_PATH);
390
- outline.setAttribute('fill', 'none');
391
- outline.setAttribute('stroke', 'rgba(255, 255, 255, 0.92)');
392
- outline.setAttribute('stroke-width', '2.8');
393
- outline.setAttribute('stroke-linecap', 'round');
394
- outline.setAttribute('stroke-linejoin', 'round');
395
- const progress = createSvgElement('path');
396
- progress.setAttribute('d', CAPTURE_GUIDE_PATH);
397
- progress.setAttribute('fill', 'none');
398
- progress.setAttribute('stroke', '#22c55e');
399
- progress.setAttribute('stroke-width', '2.8');
400
- progress.setAttribute('stroke-linecap', 'round');
401
- progress.setAttribute('stroke-linejoin', 'round');
402
- progress.setAttribute('pathLength', '100');
403
- progress.setAttribute('stroke-dasharray', '100');
404
- progress.setAttribute('stroke-dashoffset', '100');
405
- progress.style.transition = 'stroke-dashoffset 0.14s linear, opacity 0.14s linear';
406
- progress.style.opacity = '0';
407
- svg.append(mask, outline, progress);
408
- wrapper.append(svg);
409
- return {
410
- wrapper,
411
- setProgress(value) {
412
- const progressValue = Math.min(Math.max(value, 0), 1);
413
- progress.setAttribute('stroke-dashoffset', `${100 - progressValue * 100}`);
414
- progress.style.opacity = progressValue > 0 ? '1' : '0';
415
- },
416
- };
417
- }
418
- function createSvgElement(tagName) {
419
- return document.createElementNS('http://www.w3.org/2000/svg', tagName);
420
- }
421
- function setFeedbackState(element, state) {
422
- switch (state) {
423
- case 'success':
424
- applyStyles(element, {
425
- background: '#dcfce7',
426
- color: '#166534',
427
- });
428
- return;
429
- case 'error':
430
- applyStyles(element, {
431
- background: '#fee2e2',
432
- color: '#991b1b',
433
- });
434
- return;
435
- case 'manual':
436
- applyStyles(element, {
437
- background: '#e0f2fe',
438
- color: '#0f172a',
439
- });
440
- return;
441
- default:
442
- applyStyles(element, {
443
- background: '#e2e8f0',
444
- color: '#0f172a',
445
- });
446
- }
447
163
  }
448
164
  function applyStyles(element, styles) {
449
165
  Object.assign(element.style, styles);
@@ -1 +1 @@
1
- {"version":3,"file":"camera.js","sourceRoot":"","sources":["../../src/services/camera.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"camera.js","sourceRoot":"","sources":["../../src/services/camera.ts"],"names":[],"mappings":"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"}