idmission-web-sdk 2.3.120 → 2.3.122

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.
@@ -62,6 +62,8 @@ export type VideoSignatureState = {
62
62
  firstNullChunkReceivedAt?: number;
63
63
  lastNullChunkReceivedAt?: number;
64
64
  timesSignatureCleared: number;
65
+ finalChunkReceived: boolean;
66
+ requestDataInterval?: NodeJS.Timeout;
65
67
  onSignatureVideoCaptured: OnSignatureVideoCaptured;
66
68
  };
67
69
  export declare const useVideoSignatureStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<VideoSignatureState>, "setState"> & {
@@ -1 +1 @@
1
- {"version":3,"file":"VideoSignatureContext.d.ts","sourceRoot":"","sources":["../../../src/components/video_signature_capture/VideoSignatureContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VideoSignatureContext.d.ts","sourceRoot":"","sources":["../../../src/components/video_signature_capture/VideoSignatureContext.tsx"],"names":[],"mappings":"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"}
@@ -236,7 +236,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
236
236
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
237
237
  };
238
238
 
239
- var webSdkVersion = '2.3.120';
239
+ var webSdkVersion = '2.3.122';
240
240
 
241
241
  function getPlatform() {
242
242
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -14428,6 +14428,8 @@ var videoSignatureInitialState = {
14428
14428
  supportsRoundRect: undefined,
14429
14429
  nullChunksReceived: 0,
14430
14430
  timesSignatureCleared: 0,
14431
+ finalChunkReceived: false,
14432
+ requestDataInterval: undefined,
14431
14433
  onSignatureVideoCaptured: function onSignatureVideoCaptured() {
14432
14434
  return null;
14433
14435
  }
@@ -14485,8 +14487,12 @@ var useVideoSignatureStore = zustand.create()(middleware.devtools(function (set,
14485
14487
  });
14486
14488
  }
14487
14489
  };
14488
- signatureRecorder.start(250);
14490
+ signatureRecorder.start();
14491
+ var interval = setInterval(function () {
14492
+ return signatureRecorder === null || signatureRecorder === void 0 ? void 0 : signatureRecorder.requestData();
14493
+ }, 250);
14489
14494
  set({
14495
+ requestDataInterval: interval,
14490
14496
  recordingStartRequestedAt: performance.now()
14491
14497
  });
14492
14498
  },
@@ -14516,8 +14522,8 @@ var useVideoSignatureStore = zustand.create()(middleware.devtools(function (set,
14516
14522
  },
14517
14523
  diagnostics: {
14518
14524
  nullChunksReceived: nullChunksReceived,
14519
- firstNullChunkReceivedAt: firstNullChunkReceivedAt,
14520
- lastNullChunkReceivedAt: lastNullChunkReceivedAt,
14525
+ firstNullChunkReceivedAt: firstNullChunkReceivedAt ? Math.ceil(firstNullChunkReceivedAt) : 0,
14526
+ lastNullChunkReceivedAt: lastNullChunkReceivedAt ? Math.ceil(lastNullChunkReceivedAt) : 0,
14521
14527
  finalChunkReceived: finalChunkReceived,
14522
14528
  finalChunkTimedOut: timedOut,
14523
14529
  finalChunkWaitedMs: Math.ceil(waitedMs),
@@ -14554,9 +14560,16 @@ var useVideoSignatureStore = zustand.create()(middleware.devtools(function (set,
14554
14560
  recordingStopRequestedAt: performance.now(),
14555
14561
  recordingStoppedAt: undefined
14556
14562
  });
14557
- return [4 /*yield*/, waitForOneMoreChunk()];
14563
+ clearInterval(get().requestDataInterval);
14564
+ return [4 /*yield*/, waitForOneMoreChunk()
14565
+ // this represents the time that it is safe to release the camera access
14566
+ ];
14558
14567
  case 1:
14559
14568
  _b = _c.sent(), finalChunkReceived = _b.finalChunkReceived, timedOut = _b.timedOut, waitedMs = _b.waitedMs;
14569
+ // this represents the time that it is safe to release the camera access
14570
+ set({
14571
+ finalChunkReceived: true
14572
+ });
14560
14573
  if (!signatureRecorder) return [3 /*break*/, 2];
14561
14574
  signatureRecorder.onstop = processVideo;
14562
14575
  signatureRecorder.stop();
@@ -14592,12 +14605,13 @@ var useVideoSignatureStore = zustand.create()(middleware.devtools(function (set,
14592
14605
  signatureStartedAt: undefined,
14593
14606
  signatureEndedAt: undefined,
14594
14607
  acceptClickedAt: undefined,
14595
- clearClickedAt: undefined,
14608
+ // Note: clearClickedAt is intentionally preserved for telemetry metadata
14596
14609
  supportsRequestVideoFrameCallback: undefined,
14597
14610
  supportsRoundRect: undefined,
14598
14611
  nullChunksReceived: 0,
14599
14612
  firstNullChunkReceivedAt: undefined,
14600
- lastNullChunkReceivedAt: undefined
14613
+ lastNullChunkReceivedAt: undefined,
14614
+ finalChunkReceived: false
14601
14615
  });
14602
14616
  }
14603
14617
  });
@@ -14611,7 +14625,7 @@ var useVideoSignatureStore = zustand.create()(middleware.devtools(function (set,
14611
14625
  */
14612
14626
  function waitForOneMoreChunk(delayMs, checkEveryMs, timeoutMs) {
14613
14627
  if (delayMs === void 0) {
14614
- delayMs = 1000;
14628
+ delayMs = 250;
14615
14629
  }
14616
14630
  if (checkEveryMs === void 0) {
14617
14631
  checkEveryMs = 100;
@@ -14620,8 +14634,10 @@ function waitForOneMoreChunk(delayMs, checkEveryMs, timeoutMs) {
14620
14634
  timeoutMs = 3000;
14621
14635
  }
14622
14636
  return new Promise(function (resolve) {
14637
+ var _a;
14623
14638
  var start = performance.now();
14624
- var initialLastChunkReceivedAt = useVideoSignatureStore.getState().lastChunkReceivedAt;
14639
+ var initialLastChunkReceivedAt = (_a = useVideoSignatureStore.getState().lastChunkReceivedAt) !== null && _a !== void 0 ? _a : start;
14640
+ signatureRecorder === null || signatureRecorder === void 0 ? void 0 : signatureRecorder.requestData();
14625
14641
  function checkForChunk() {
14626
14642
  var lastChunkReceivedAt = useVideoSignatureStore.getState().lastChunkReceivedAt;
14627
14643
  var waitedMs = performance.now() - start;
@@ -14649,9 +14665,12 @@ function waitForOneMoreChunk(delayMs, checkEveryMs, timeoutMs) {
14649
14665
  });
14650
14666
  }
14651
14667
  function VideoSignatureContextProvider(_a) {
14652
- var _b, _c;
14653
14668
  var children = _a.children;
14654
- var videoRef = useCameraStore().videoRef;
14669
+ var _b = useCameraStore(),
14670
+ videoRef = _b.videoRef,
14671
+ videoWidth = _b.videoWidth,
14672
+ videoHeight = _b.videoHeight,
14673
+ releaseCameraAccess = _b.releaseCameraAccess;
14655
14674
  var outputCanvas = React.useRef(null);
14656
14675
  React.useEffect(function () {
14657
14676
  return useVideoSignatureStore.setState({
@@ -14659,18 +14678,13 @@ function VideoSignatureContextProvider(_a) {
14659
14678
  });
14660
14679
  }, []);
14661
14680
  var drawOutputFrame = React.useCallback(function () {
14662
- if (!outputCanvas.current || !videoRef.current) return;
14681
+ if (!outputCanvas.current) return;
14663
14682
  var ctx = outputCanvas.current.getContext('2d');
14664
14683
  if (!ctx) return;
14665
- var _a = [videoRef.current.videoWidth, videoRef.current.videoHeight],
14684
+ var _a = [outputCanvas.current.width, outputCanvas.current.height],
14666
14685
  w = _a[0],
14667
14686
  h = _a[1];
14668
14687
  var isPortrait = w < h;
14669
- // Only update canvas dimensions if they changed (setting dimensions clears the canvas!)
14670
- if (outputCanvas.current.width !== w || outputCanvas.current.height !== h) {
14671
- outputCanvas.current.width = w;
14672
- outputCanvas.current.height = h;
14673
- }
14674
14688
  var rect = [w * (isPortrait ? 0.02 : 0.15),
14675
14689
  // x
14676
14690
  h * (isPortrait ? 0.15 : 0.25),
@@ -14679,7 +14693,9 @@ function VideoSignatureContextProvider(_a) {
14679
14693
  // width
14680
14694
  h * (isPortrait ? 0.7 : 0.5) // height
14681
14695
  ];
14682
- ctx.drawImage(videoRef.current, 0, 0, w, h);
14696
+ if (videoRef.current) {
14697
+ ctx.drawImage(videoRef.current, 0, 0, w, h);
14698
+ }
14683
14699
  ctx.beginPath();
14684
14700
  ctx.fillStyle = 'rgba(255,255,255,0.5)';
14685
14701
  var supportsRoundRect = typeof ctx.roundRect === 'function';
@@ -14701,11 +14717,15 @@ function VideoSignatureContextProvider(_a) {
14701
14717
  ctx.drawImage.apply(ctx, __spreadArray([signatureCanvas], rect, false));
14702
14718
  }
14703
14719
  }, [videoRef]);
14704
- useVideoFrameLoop(videoRef, drawOutputFrame);
14720
+ var finalChunkReceived = useVideoSignatureStore().finalChunkReceived;
14721
+ React.useEffect(function () {
14722
+ if (finalChunkReceived) releaseCameraAccess();
14723
+ }, [finalChunkReceived, releaseCameraAccess]);
14724
+ useVideoFrameLoop(videoRef, drawOutputFrame, !finalChunkReceived);
14705
14725
  return /*#__PURE__*/React__namespace.default.createElement(React__namespace.default.Fragment, null, children, /*#__PURE__*/React__namespace.default.createElement(InvisibleCanvas, {
14706
14726
  ref: outputCanvas,
14707
- width: (_b = videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth,
14708
- height: (_c = videoRef.current) === null || _c === void 0 ? void 0 : _c.videoHeight
14727
+ width: videoWidth,
14728
+ height: videoHeight
14709
14729
  }));
14710
14730
  }
14711
14731
  function requestVideoFrameCallback(video, onFrame) {
@@ -14725,8 +14745,11 @@ function requestVideoFrameCallback(video, onFrame) {
14725
14745
  };
14726
14746
  }
14727
14747
  }
14728
- function videoFrameLoop(video, onFrame) {
14729
- if (!video) return;
14748
+ function videoFrameLoop(video, onFrame, running) {
14749
+ if (running === void 0) {
14750
+ running = true;
14751
+ }
14752
+ if (!video || !running) return;
14730
14753
  var cancelFn;
14731
14754
  var canceled = false;
14732
14755
  function onFrameRecursive() {
@@ -14747,10 +14770,13 @@ function videoFrameLoop(video, onFrame) {
14747
14770
  if (cancelFn !== undefined) cancelFn();
14748
14771
  };
14749
14772
  }
14750
- function useVideoFrameLoop(ref, onFrame) {
14773
+ function useVideoFrameLoop(ref, onFrame, running) {
14774
+ if (running === void 0) {
14775
+ running = true;
14776
+ }
14751
14777
  React.useEffect(function () {
14752
- return videoFrameLoop(ref.current, onFrame);
14753
- }, [onFrame, ref]);
14778
+ return videoFrameLoop(ref.current, onFrame, running);
14779
+ }, [onFrame, ref, running]);
14754
14780
  }
14755
14781
  function calculateAndStoreOndataavailableRate() {
14756
14782
  if (ondataavailableInvocations.length < 2 || !ondataavailableStartTime) {