idmission-web-sdk 2.3.13 → 2.3.15

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.
@@ -235,7 +235,7 @@ typeof SuppressedError === "function" ? SuppressedError : function (error, suppr
235
235
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
236
236
  };
237
237
 
238
- var webSdkVersion = '2.3.13';
238
+ var webSdkVersion = '2.3.15';
239
239
 
240
240
  function getPlatform() {
241
241
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
@@ -853,11 +853,11 @@ function setDefaultAuthUrl(url) {
853
853
  if (!allowedAuthUrls.includes(url)) throw new Error('invalid auth url');
854
854
  exports.defaultAuthUrl = url;
855
855
  }
856
- var initialState$6 = {
856
+ var initialState$7 = {
857
857
  authUrl: exports.defaultAuthUrl,
858
858
  sessionCheckState: 'READY'
859
859
  };
860
- var AuthStateContext = /*#__PURE__*/React.createContext(initialState$6);
860
+ var AuthStateContext = /*#__PURE__*/React.createContext(initialState$7);
861
861
  var AuthDispatchContext = /*#__PURE__*/React.createContext(function () {});
862
862
  var reducer$4 = function reducer(state, action) {
863
863
  switch (action.type) {
@@ -976,7 +976,7 @@ function useAuthReducer(authUrl, sessionId) {
976
976
  if (authUrl === void 0) {
977
977
  authUrl = exports.defaultAuthUrl;
978
978
  }
979
- var _a = React.useReducer(reducer$4, _assign(_assign({}, initialState$6), {
979
+ var _a = React.useReducer(reducer$4, _assign(_assign({}, initialState$7), {
980
980
  authUrl: authUrl
981
981
  })),
982
982
  state = _a[0],
@@ -4773,7 +4773,7 @@ function useTranslations(verbiage, fallbacks) {
4773
4773
  }, [fallbacks, i18n.language, t, verbiage]);
4774
4774
  }
4775
4775
 
4776
- var initialState$5 = {
4776
+ var initialState$6 = {
4777
4777
  videoRef: {
4778
4778
  current: null
4779
4779
  },
@@ -4796,9 +4796,9 @@ var initialState$5 = {
4796
4796
  };
4797
4797
  var createCameraStore = function createCameraStore(config) {
4798
4798
  var store = zustand.createStore(function (set, get) {
4799
- return _assign(_assign(_assign({}, initialState$5), config), {
4799
+ return _assign(_assign(_assign({}, initialState$6), config), {
4800
4800
  reset: function reset() {
4801
- return set(_assign(_assign({}, initialState$5), config));
4801
+ return set(_assign(_assign({}, initialState$6), config));
4802
4802
  },
4803
4803
  setConfig: function setConfig(config) {
4804
4804
  return set(config);
@@ -5815,7 +5815,7 @@ function remainingIdCaptureRequirements(captureRequirement, capturedDocuments, r
5815
5815
  });
5816
5816
  }
5817
5817
 
5818
- var initialState$4 = {
5818
+ var initialState$5 = {
5819
5819
  initialDrawComplete: false,
5820
5820
  redrawing: false,
5821
5821
  guideRectX: 0,
@@ -6175,7 +6175,7 @@ var _reducer = function reducer(state, action) {
6175
6175
  });
6176
6176
  }
6177
6177
  case 'resetWizard':
6178
- return _assign(_assign({}, initialState$4), {
6178
+ return _assign(_assign({}, initialState$5), {
6179
6179
  dispatch: state.dispatch,
6180
6180
  allowUploadingDocumentsFromStorage: state.allowUploadingDocumentsFromStorage,
6181
6181
  captureState: state.allowUploadingDocumentsFromStorage ? 'initializing' : 'capturing',
@@ -6187,7 +6187,7 @@ var _reducer = function reducer(state, action) {
6187
6187
  }
6188
6188
  };
6189
6189
  var useIdCaptureStore = zustand.create()(middleware.devtools(function (set) {
6190
- return _assign(_assign({}, initialState$4), {
6190
+ return _assign(_assign({}, initialState$5), {
6191
6191
  dispatch: function dispatch(action) {
6192
6192
  return set(function (state) {
6193
6193
  return _reducer(state, action);
@@ -11731,7 +11731,7 @@ var ImageContainer$6 = styled__default.default(OverlayImageContainer)(templateOb
11731
11731
  var StyledButtonsRow$6 = styled__default.default(ButtonsRow$2)(templateObject_5$5 || (templateObject_5$5 = __makeTemplateObject(["\n margin-top: 32px;\n"], ["\n margin-top: 32px;\n"])));
11732
11732
  var templateObject_1$m, templateObject_2$i, templateObject_3$d, templateObject_4$8, templateObject_5$5;
11733
11733
 
11734
- var initialState$3 = {
11734
+ var initialState$4 = {
11735
11735
  busy: false,
11736
11736
  frame: null,
11737
11737
  prediction: null
@@ -11786,7 +11786,7 @@ var SelfieCapture = function SelfieCapture(_a) {
11786
11786
  width = _k === void 0 ? 1 : _k,
11787
11787
  _l = _j.height,
11788
11788
  height = _l === void 0 ? 1 : _l;
11789
- var _m = React.useReducer(reducer$3, initialState$3),
11789
+ var _m = React.useReducer(reducer$3, initialState$4),
11790
11790
  _o = _m[0],
11791
11791
  busy = _o.busy,
11792
11792
  prediction = _o.prediction,
@@ -11896,7 +11896,7 @@ var SelfieCapture = function SelfieCapture(_a) {
11896
11896
  var Container$6 = styled__default.default.div(templateObject_1$l || (templateObject_1$l = __makeTemplateObject(["\n width: 100%;\n height: 100%;\n"], ["\n width: 100%;\n height: 100%;\n"])));
11897
11897
  var templateObject_1$l;
11898
11898
 
11899
- var initialState$2 = {
11899
+ var initialState$3 = {
11900
11900
  frame: null,
11901
11901
  face: null,
11902
11902
  requestState: 'CAPTURING',
@@ -11913,7 +11913,7 @@ var reducer$2 = function reducer(state, action) {
11913
11913
  var _a, _b;
11914
11914
  switch (action.type) {
11915
11915
  case 'resetLivenessCheck':
11916
- return _assign(_assign({}, initialState$2), {
11916
+ return _assign(_assign({}, initialState$3), {
11917
11917
  timesLivenessCheckFailed: state.timesLivenessCheckFailed
11918
11918
  });
11919
11919
  case 'guidanceUnsatisfied':
@@ -12021,7 +12021,7 @@ var FaceLivenessCapture = function FaceLivenessCapture(_a) {
12021
12021
  checkLiveness = _m.checkLiveness,
12022
12022
  submissionError = _m.submissionError;
12023
12023
  var modelError = useSelfieGuidanceModelsContext().error;
12024
- var _o = React.useReducer(reducer$2, initialState$2),
12024
+ var _o = React.useReducer(reducer$2, initialState$3),
12025
12025
  state = _o[0],
12026
12026
  dispatch = _o[1];
12027
12027
  var _p = React.useState(null),
@@ -13376,120 +13376,141 @@ function clearVideoChunks() {
13376
13376
  function clearAudioChunks() {
13377
13377
  audioChunks = [];
13378
13378
  }
13379
- var useVideoRecorder = function useVideoRecorder(camera, audioStream, mergeAVStreams) {
13379
+ var initialState$2 = {
13380
+ videoUrl: null,
13381
+ audioUrl: null,
13382
+ isRecordingVideo: false,
13383
+ isRecordingAudio: false,
13384
+ videoRecordingStopped: false,
13385
+ audioRecordingStopped: false,
13386
+ videoRecordingIntentionallyStopped: false,
13387
+ audioRecordingIntentionallyStopped: false,
13388
+ mergeAVStreams: false
13389
+ };
13390
+ var useVideoRecorderStore = zustand.create()(middleware.devtools(function (set, get) {
13391
+ return _assign(_assign({}, initialState$2), {
13392
+ startRecordingVideo: function startRecordingVideo(camera, audioStream) {
13393
+ var _a, _b, _c;
13394
+ var videoStream = get().mergeAVStreams ? new MediaStream(__spreadArray(__spreadArray([], (_b = (_a = camera === null || camera === void 0 ? void 0 : camera.stream) === null || _a === void 0 ? void 0 : _a.getTracks()) !== null && _b !== void 0 ? _b : [], true), (_c = audioStream === null || audioStream === void 0 ? void 0 : audioStream.getTracks()) !== null && _c !== void 0 ? _c : [], true)) : camera.stream;
13395
+ if (!videoStream) return;
13396
+ clearVideoChunks();
13397
+ setVideoRecorder(null);
13398
+ set({
13399
+ isRecordingVideo: true,
13400
+ videoRecordingStopped: false,
13401
+ videoRecordingIntentionallyStopped: false
13402
+ });
13403
+ var videoRecorder = new MediaRecorder(videoStream, {
13404
+ videoBitsPerSecond: 270000,
13405
+ audioBitsPerSecond: 32000
13406
+ });
13407
+ setVideoRecorder(videoRecorder);
13408
+ videoRecorder.ondataavailable = function (e) {
13409
+ videoChunks.push(e.data);
13410
+ };
13411
+ videoRecorder.onstop = function () {
13412
+ set({
13413
+ videoRecordingStopped: true
13414
+ });
13415
+ };
13416
+ videoRecorder.start(1000);
13417
+ setTimeout(function () {
13418
+ var videoRecorder = getVideoRecorder();
13419
+ if (!videoRecorder || videoRecorder.state === 'inactive') {
13420
+ log('media recorder is inactive!');
13421
+ // TODO: figure out what to do here
13422
+ }
13423
+ }, 100);
13424
+ },
13425
+ stopRecordingVideo: function stopRecordingVideo() {
13426
+ set({
13427
+ videoRecordingIntentionallyStopped: true
13428
+ });
13429
+ if ((videoRecorder === null || videoRecorder === void 0 ? void 0 : videoRecorder.state) !== 'inactive') {
13430
+ videoRecorder === null || videoRecorder === void 0 ? void 0 : videoRecorder.stop(); // if you call this while state === 'inactive', an exception is thrown.
13431
+ }
13432
+ },
13433
+ startRecordingAudio: function startRecordingAudio(audioStream) {
13434
+ if (get().mergeAVStreams) return;
13435
+ if (!audioStream) return;
13436
+ clearAudioChunks();
13437
+ set({
13438
+ isRecordingAudio: true,
13439
+ audioRecordingStopped: false,
13440
+ audioRecordingIntentionallyStopped: false
13441
+ });
13442
+ var audioRecorder = new MediaRecorder(audioStream, {
13443
+ audioBitsPerSecond: 32000
13444
+ });
13445
+ setAudioRecorder(audioRecorder);
13446
+ audioRecorder.ondataavailable = function (e) {
13447
+ audioChunks.push(e.data);
13448
+ };
13449
+ audioRecorder.onstop = function () {
13450
+ set({
13451
+ audioRecordingStopped: true
13452
+ });
13453
+ };
13454
+ audioRecorder.start(1000);
13455
+ },
13456
+ stopRecordingAudio: function stopRecordingAudio() {
13457
+ set({
13458
+ audioRecordingIntentionallyStopped: true
13459
+ });
13460
+ if ((audioRecorder === null || audioRecorder === void 0 ? void 0 : audioRecorder.state) !== 'inactive') {
13461
+ audioRecorder === null || audioRecorder === void 0 ? void 0 : audioRecorder.stop(); // if you call this while state === 'inactive', an exception is thrown.
13462
+ }
13463
+ },
13464
+ stopRecording: function stopRecording() {
13465
+ get().stopRecordingVideo();
13466
+ get().stopRecordingAudio();
13467
+ },
13468
+ clearRecordedData: function clearRecordedData() {
13469
+ clearVideoChunks();
13470
+ clearAudioChunks();
13471
+ }
13472
+ });
13473
+ }));
13474
+ var useVideoRecorder = function useVideoRecorder(mergeAVStreams) {
13380
13475
  if (mergeAVStreams === void 0) {
13381
13476
  mergeAVStreams = false;
13382
13477
  }
13383
- var _a = React.useState(null),
13384
- videoUrl = _a[0],
13385
- setVideoUrl = _a[1];
13386
- var _b = React.useState(null),
13387
- audioUrl = _b[0],
13388
- setAudioUrl = _b[1];
13389
- var _c = React.useState(false),
13390
- isRecordingVideo = _c[0],
13391
- setIsRecordingVideo = _c[1];
13392
- var _d = React.useState(false),
13393
- isRecordingAudio = _d[0],
13394
- setIsRecordingAudio = _d[1];
13395
- var _e = React.useState(false),
13396
- videoRecordingStopped = _e[0],
13397
- setVideoRecordingStopped = _e[1];
13398
- var _f = React.useState(false),
13399
- audioRecordingStopped = _f[0],
13400
- setAudioRecordingStopped = _f[1];
13401
- var _g = React.useState(false),
13402
- videoRecordingIntentionallyStopped = _g[0],
13403
- setVideoRecordingIntentionallyStopped = _g[1];
13404
- var _h = React.useState(false),
13405
- audioRecordingIntentionallyStopped = _h[0],
13406
- setAudioRecordingIntentionallyStopped = _h[1];
13407
- var getVideoStream = React.useCallback(function () {
13408
- var _a, _b, _c;
13409
- if (!mergeAVStreams) return camera === null || camera === void 0 ? void 0 : camera.stream;
13410
- var videoTracks = (_b = (_a = camera === null || camera === void 0 ? void 0 : camera.stream) === null || _a === void 0 ? void 0 : _a.getTracks()) !== null && _b !== void 0 ? _b : [];
13411
- var audioTracks = (_c = audioStream === null || audioStream === void 0 ? void 0 : audioStream.getTracks()) !== null && _c !== void 0 ? _c : [];
13412
- return new MediaStream(__spreadArray(__spreadArray([], videoTracks, true), audioTracks, true));
13413
- }, [audioStream, camera === null || camera === void 0 ? void 0 : camera.stream, mergeAVStreams]);
13478
+ React.useEffect(function () {
13479
+ return useVideoRecorderStore.setState({
13480
+ mergeAVStreams: mergeAVStreams
13481
+ });
13482
+ }, [mergeAVStreams]);
13414
13483
  var processVideo = React.useCallback(function () {
13415
13484
  var videoBlob = new Blob(videoChunks, {
13416
13485
  type: 'video/mp4'
13417
13486
  });
13418
- setVideoUrl(URL.createObjectURL(videoBlob));
13487
+ useVideoRecorderStore.setState({
13488
+ videoUrl: URL.createObjectURL(videoBlob),
13489
+ isRecordingVideo: false
13490
+ });
13419
13491
  clearVideoChunks();
13420
- setIsRecordingVideo(false);
13421
13492
  setVideoRecorder(null);
13422
- camera === null || camera === void 0 ? void 0 : camera.release();
13423
- }, [camera]);
13493
+ }, []);
13424
13494
  var processAudio = React.useCallback(function () {
13425
- var _a;
13426
13495
  var audioBlob = new Blob(audioChunks, {
13427
13496
  type: 'audio/mp4'
13428
13497
  });
13429
- setAudioUrl(URL.createObjectURL(audioBlob));
13430
- clearAudioChunks();
13431
- setIsRecordingAudio(false);
13432
- setAudioRecorder(null);
13433
- (_a = audioStream === null || audioStream === void 0 ? void 0 : audioStream.stop) === null || _a === void 0 ? void 0 : _a.call(audioStream);
13434
- }, [audioStream]);
13435
- var startRecordingVideo = React.useCallback(function () {
13436
- var videoStream = getVideoStream();
13437
- if (!videoStream) return;
13438
- clearVideoChunks();
13439
- setIsRecordingVideo(true);
13440
- setVideoRecordingStopped(false);
13441
- setVideoRecordingIntentionallyStopped(false);
13442
- var videoRecorder = new MediaRecorder(videoStream, {
13443
- videoBitsPerSecond: 270000,
13444
- audioBitsPerSecond: 32000
13498
+ useVideoRecorderStore.setState({
13499
+ audioUrl: URL.createObjectURL(audioBlob),
13500
+ isRecordingAudio: false
13445
13501
  });
13446
- setVideoRecorder(videoRecorder);
13447
- videoRecorder.ondataavailable = function (e) {
13448
- videoChunks.push(e.data);
13449
- };
13450
- videoRecorder.onstop = function () {
13451
- setVideoRecordingStopped(true);
13452
- };
13453
- videoRecorder.start(1000);
13454
- setTimeout(function () {
13455
- var _a;
13456
- if (((_a = getVideoRecorder()) === null || _a === void 0 ? void 0 : _a.state) === 'inactive') {
13457
- log('media recorder is inactive!');
13458
- // TODO: figure out what to do here
13459
- }
13460
- }, 100);
13461
- }, [getVideoStream]);
13462
- var startRecordingAudio = React.useCallback(function () {
13463
- if (mergeAVStreams) return;
13464
- if (!audioStream) return;
13465
13502
  clearAudioChunks();
13466
- setIsRecordingAudio(true);
13467
- setAudioRecordingStopped(false);
13468
- setAudioRecordingIntentionallyStopped(false);
13469
- var audioRecorder = new MediaRecorder(audioStream, {
13470
- audioBitsPerSecond: 32000
13471
- });
13472
- setAudioRecorder(audioRecorder);
13473
- audioRecorder.ondataavailable = function (e) {
13474
- audioChunks.push(e.data);
13475
- };
13476
- audioRecorder.onstop = function () {
13477
- setAudioRecordingStopped(true);
13478
- };
13479
- audioRecorder.start(1000);
13480
- }, [audioStream, mergeAVStreams]);
13481
- var stopRecordingVideo = React.useCallback(function () {
13482
- setVideoRecordingIntentionallyStopped(true);
13483
- if ((videoRecorder === null || videoRecorder === void 0 ? void 0 : videoRecorder.state) !== 'inactive') {
13484
- videoRecorder === null || videoRecorder === void 0 ? void 0 : videoRecorder.stop(); // if you call this while state === 'inactive', an exception is thrown.
13485
- }
13486
- }, []);
13487
- var stopRecordingAudio = React.useCallback(function () {
13488
- setAudioRecordingIntentionallyStopped(true);
13489
- if ((audioRecorder === null || audioRecorder === void 0 ? void 0 : audioRecorder.state) !== 'inactive') {
13490
- audioRecorder === null || audioRecorder === void 0 ? void 0 : audioRecorder.stop(); // if you call this while state === 'inactive', an exception is thrown.
13491
- }
13503
+ setAudioRecorder(null);
13492
13504
  }, []);
13505
+ var _a = useVideoRecorderStore(),
13506
+ videoUrl = _a.videoUrl,
13507
+ audioUrl = _a.audioUrl,
13508
+ isRecordingVideo = _a.isRecordingVideo,
13509
+ isRecordingAudio = _a.isRecordingAudio,
13510
+ videoRecordingStopped = _a.videoRecordingStopped,
13511
+ videoRecordingIntentionallyStopped = _a.videoRecordingIntentionallyStopped,
13512
+ audioRecordingStopped = _a.audioRecordingStopped,
13513
+ audioRecordingIntentionallyStopped = _a.audioRecordingIntentionallyStopped;
13493
13514
  React.useEffect(function () {
13494
13515
  if (videoRecordingStopped && videoRecordingIntentionallyStopped) {
13495
13516
  processVideo();
@@ -13500,25 +13521,16 @@ var useVideoRecorder = function useVideoRecorder(camera, audioStream, mergeAVStr
13500
13521
  processAudio();
13501
13522
  }
13502
13523
  }, [audioRecordingIntentionallyStopped, audioRecordingStopped, processAudio]);
13503
- var clearRecordedData = React.useCallback(function () {
13504
- clearVideoChunks();
13505
- clearAudioChunks();
13506
- }, []);
13507
13524
  return React.useMemo(function () {
13508
13525
  return {
13509
13526
  isRecordingVideo: isRecordingVideo,
13510
13527
  isRecordingAudio: isRecordingAudio,
13511
- startRecordingVideo: startRecordingVideo,
13512
- startRecordingAudio: startRecordingAudio,
13513
- stopRecordingVideo: stopRecordingVideo,
13514
- stopRecordingAudio: stopRecordingAudio,
13515
- clearRecordedData: clearRecordedData,
13516
13528
  videoRecordingUnintentionallyStopped: videoRecordingStopped && !videoRecordingIntentionallyStopped,
13517
13529
  audioRecordingUnintentionallyStopped: audioRecordingStopped && !audioRecordingIntentionallyStopped,
13518
13530
  videoUrl: videoUrl,
13519
13531
  audioUrl: audioUrl
13520
13532
  };
13521
- }, [audioRecordingIntentionallyStopped, audioRecordingStopped, audioUrl, clearRecordedData, isRecordingAudio, isRecordingVideo, startRecordingAudio, startRecordingVideo, stopRecordingAudio, stopRecordingVideo, videoRecordingIntentionallyStopped, videoRecordingStopped, videoUrl]);
13533
+ }, [audioRecordingIntentionallyStopped, audioRecordingStopped, audioUrl, isRecordingAudio, isRecordingVideo, videoRecordingIntentionallyStopped, videoRecordingStopped, videoUrl]);
13522
13534
  };
13523
13535
 
13524
13536
  var signatureRecorder = null;
@@ -13532,25 +13544,6 @@ var signatureChunks = [];
13532
13544
  var clearSignatureChunks = function clearSignatureChunks() {
13533
13545
  return signatureChunks = [];
13534
13546
  };
13535
- var recordingLock = false;
13536
- var setRecordingLock = function setRecordingLock(lock) {
13537
- return recordingLock = lock;
13538
- };
13539
- var recordingLockEngaged = function recordingLockEngaged() {
13540
- return recordingLock;
13541
- };
13542
- function waitForCanvasAvailable(canvasRef) {
13543
- if (canvasRef.current) return Promise.resolve(null);
13544
- return new Promise(function (resolve) {
13545
- var interval = setInterval(function () {
13546
- debug('VideoSignatureContext: waiting for output canvas');
13547
- if (canvasRef.current) {
13548
- clearInterval(interval);
13549
- resolve(null);
13550
- }
13551
- }, 100);
13552
- });
13553
- }
13554
13547
  var videoSignatureInitialState = {
13555
13548
  startRecording: function startRecording() {
13556
13549
  return null;
@@ -13562,10 +13555,16 @@ var videoSignatureInitialState = {
13562
13555
  return null;
13563
13556
  },
13564
13557
  isRecording: false,
13558
+ signaturePad: {
13559
+ current: null
13560
+ },
13565
13561
  signatureData: null,
13566
13562
  signatureDataUrl: null,
13567
13563
  signatureVideoData: null,
13568
13564
  signatureVideoUrl: null,
13565
+ outputCanvas: {
13566
+ current: null
13567
+ },
13569
13568
  onAcceptClicked: function onAcceptClicked() {
13570
13569
  return __awaiter(void 0, void 0, void 0, function () {
13571
13570
  return __generator(this, function (_a) {
@@ -13574,72 +13573,24 @@ var videoSignatureInitialState = {
13574
13573
  });
13575
13574
  }
13576
13575
  };
13577
- var VideoSignatureContext = /*#__PURE__*/React.createContext(videoSignatureInitialState);
13578
- function VideoSignatureContextProvider(_a) {
13579
- var _this = this;
13580
- var _b, _c;
13581
- var children = _a.children,
13582
- _d = _a.captureAudio,
13583
- captureAudio = _d === void 0 ? false : _d;
13584
- var signaturePad = React.useRef(null);
13585
- var _e = React.useState(null),
13586
- signatureData = _e[0],
13587
- setSignatureData = _e[1];
13588
- var _f = React.useState(null),
13589
- signatureDataUrl = _f[0],
13590
- setSignatureDataUrl = _f[1];
13591
- var _g = React.useState(null),
13592
- signatureVideoData = _g[0],
13593
- setSignatureVideoData = _g[1];
13594
- var _h = React.useState(null),
13595
- signatureVideoUrl = _h[0],
13596
- setSignatureVideoUrl = _h[1];
13597
- var _j = useCameraStore(),
13598
- camera = _j.camera,
13599
- videoRef = _j.videoRef,
13600
- audioStream = _j.audioStream;
13601
- var _k = useVideoRecorder(camera, audioStream, captureAudio),
13602
- isRecordingVideo = _k.isRecordingVideo,
13603
- startRecordingVideo = _k.startRecordingVideo,
13604
- stopRecordingVideo = _k.stopRecordingVideo,
13605
- startRecordingAudio = _k.startRecordingAudio,
13606
- stopRecordingAudio = _k.stopRecordingAudio,
13607
- clearRecordedVideoData = _k.clearRecordedData;
13608
- var outputCanvas = React.useRef(null);
13609
- var onRecordingStopped = React.useRef(function () {});
13610
- var _l = React.useState(false),
13611
- isRecording = _l[0],
13612
- setIsRecording = _l[1];
13613
- var startRecording = React.useCallback(function () {
13614
- return setIsRecording(true);
13615
- }, []);
13616
- var stopRecording = React.useCallback(function () {
13617
- return setIsRecording(false);
13618
- }, []);
13619
- var clearRecordedData = React.useCallback(function () {
13620
- var _a;
13621
- onRecordingStopped.current = function () {
13622
- setSignatureVideoUrl(null);
13623
- setSignatureVideoData(null);
13624
- setIsRecording(true);
13625
- onRecordingStopped.current = function () {};
13626
- };
13627
- setRecordingLock(false);
13628
- setIsRecording(false);
13629
- (_a = getSignatureRecorder()) === null || _a === void 0 ? void 0 : _a.stop();
13630
- setSignatureRecorder(null);
13631
- }, []);
13632
- React.useEffect(function () {
13633
- if (!isRecording) return;
13634
- if (recordingLockEngaged()) return;
13635
- setRecordingLock(true);
13636
- waitForCanvasAvailable(outputCanvas).then(function () {
13576
+ var useVideoSignatureStore = zustand.create()(middleware.devtools(function (set, get) {
13577
+ return _assign(_assign({}, videoSignatureInitialState), {
13578
+ startRecording: function startRecording(camera, audioStream, captureAudio) {
13637
13579
  var _a;
13580
+ if (captureAudio === void 0) {
13581
+ captureAudio = false;
13582
+ }
13583
+ set({
13584
+ isRecording: true
13585
+ });
13638
13586
  clearSignatureChunks();
13639
- clearRecordedVideoData();
13640
- startRecordingVideo();
13641
- if (captureAudio) startRecordingAudio();
13642
- var stream = outputCanvas.current.captureStream(24 /* fps */);
13587
+ useVideoRecorderStore.getState().clearRecordedData();
13588
+ var _b = useVideoRecorderStore.getState(),
13589
+ startRecordingVideo = _b.startRecordingVideo,
13590
+ startRecordingAudio = _b.startRecordingAudio;
13591
+ startRecordingVideo(camera, audioStream);
13592
+ if (captureAudio) startRecordingAudio(audioStream);
13593
+ var stream = get().outputCanvas.current.captureStream(24 /* fps */);
13643
13594
  var tracks = [stream.getVideoTracks()[0]];
13644
13595
  var audioTrack = (_a = audioStream === null || audioStream === void 0 ? void 0 : audioStream.getAudioTracks()) === null || _a === void 0 ? void 0 : _a[0];
13645
13596
  if (audioTrack) tracks.push(audioTrack);
@@ -13651,110 +13602,122 @@ function VideoSignatureContextProvider(_a) {
13651
13602
  signatureRecorder.ondataavailable = function (event) {
13652
13603
  signatureChunks.push(event.data);
13653
13604
  };
13605
+ signatureRecorder.start(1000);
13606
+ },
13607
+ stopRecording: function stopRecording() {
13608
+ set({
13609
+ isRecording: false
13610
+ });
13611
+ if (!signatureRecorder) return;
13612
+ signatureRecorder.stop();
13654
13613
  signatureRecorder.onstop = function () {
13614
+ log('VideoSignatureContext: onstop');
13655
13615
  var blob = new Blob(signatureChunks, {
13656
13616
  type: 'video/mp4'
13657
13617
  });
13658
- setSignatureVideoData(blob);
13659
- setSignatureVideoUrl(URL.createObjectURL(blob));
13618
+ useVideoSignatureStore.setState({
13619
+ signatureVideoData: blob,
13620
+ signatureVideoUrl: URL.createObjectURL(blob)
13621
+ });
13660
13622
  clearSignatureChunks();
13661
13623
  setSignatureRecorder(null);
13662
- onRecordingStopped.current();
13663
13624
  };
13664
- signatureRecorder.start(1000);
13625
+ useVideoRecorderStore.getState().stopRecording();
13626
+ },
13627
+ clearRecordedData: function clearRecordedData() {
13628
+ var _a;
13629
+ clearSignatureChunks();
13630
+ useVideoRecorderStore.getState().stopRecordingVideo();
13631
+ useVideoRecorderStore.getState().clearRecordedData();
13632
+ (_a = getSignatureRecorder()) === null || _a === void 0 ? void 0 : _a.stop();
13633
+ setSignatureRecorder(null);
13634
+ set({
13635
+ isRecording: false,
13636
+ signatureVideoData: null,
13637
+ signatureVideoUrl: null
13638
+ });
13639
+ }
13640
+ });
13641
+ }));
13642
+ function VideoSignatureContextProvider(_a) {
13643
+ var _b, _c;
13644
+ var children = _a.children,
13645
+ _d = _a.captureAudio,
13646
+ captureAudio = _d === void 0 ? false : _d;
13647
+ var _e = useCameraStore(),
13648
+ camera = _e.camera,
13649
+ videoRef = _e.videoRef;
13650
+ var isRecordingVideo = useVideoRecorder(captureAudio).isRecordingVideo;
13651
+ var outputCanvas = React.useRef(null);
13652
+ React.useEffect(function () {
13653
+ return useVideoSignatureStore.setState({
13654
+ outputCanvas: outputCanvas
13665
13655
  });
13666
- }, [audioStream, captureAudio, clearRecordedVideoData, isRecording, startRecordingAudio, startRecordingVideo]);
13656
+ }, []);
13657
+ var isRecording = useVideoSignatureStore().isRecording;
13658
+ // useEffect(() => {
13659
+ // if (!isRecording || !camera) return
13660
+ // waitForCanvasAvailable(outputCanvas).then(() => {
13661
+ // log('VideoSignatureContext: starting recording...')
13662
+ // clearSignatureChunks()
13663
+ // const { startRecordingVideo, startRecordingAudio } =
13664
+ // useVideoRecorderStore.getState()
13665
+ // startRecordingVideo(camera, audioStream)
13666
+ // if (captureAudio) startRecordingAudio(audioStream)
13667
+ // const stream = outputCanvas.current!.captureStream(24 /* fps */)
13668
+ // const tracks = [stream.getVideoTracks()[0]]
13669
+ // const audioTrack = audioStream?.getAudioTracks()?.[0]
13670
+ // if (audioTrack) tracks.push(audioTrack)
13671
+ // const signatureRecorder = new MediaRecorder(new MediaStream(tracks), {
13672
+ // videoBitsPerSecond: 270000,
13673
+ // audioBitsPerSecond: 32000,
13674
+ // })
13675
+ // setSignatureRecorder(signatureRecorder)
13676
+ // signatureRecorder.ondataavailable = (event) => {
13677
+ // signatureChunks.push(event.data)
13678
+ // }
13679
+ // signatureRecorder.start(1000)
13680
+ // })
13681
+ // }, [audioStream, captureAudio, isRecording, camera])
13667
13682
  var animationFrame = React.useRef(0);
13668
13683
  React.useEffect(function () {
13669
- if (!signaturePad.current || !videoRef.current || !outputCanvas.current || !camera || !isRecording || !isRecordingVideo) return;
13684
+ if (!videoRef.current || !outputCanvas.current || !camera || !isRecording || !isRecordingVideo) return;
13670
13685
  var ctx = outputCanvas.current.getContext('2d');
13671
13686
  if (!ctx) return;
13687
+ var signaturePad = useVideoSignatureStore.getState().signaturePad;
13672
13688
  animationFrame.current = requestAnimationFrame(function runFrame() {
13673
- return __awaiter(this, void 0, void 0, function () {
13674
- var _a, w, h, isPortrait, rect;
13675
- return __generator(this, function (_b) {
13676
- if (!signaturePad.current || !videoRef.current || !outputCanvas.current) {
13677
- cancelAnimationFrame(animationFrame.current);
13678
- return [2 /*return*/];
13679
- }
13680
- _a = [videoRef.current.videoWidth, videoRef.current.videoHeight], w = _a[0], h = _a[1];
13681
- isPortrait = w < h;
13682
- outputCanvas.current.width = w;
13683
- outputCanvas.current.height = h;
13684
- rect = [w * (isPortrait ? 0.02 : 0.15), h * (isPortrait ? 0.15 : 0.25), w * (isPortrait ? 0.96 : 0.7), h * (isPortrait ? 0.7 : 0.5)];
13685
- ctx.drawImage(videoRef.current, 0, 0, w, h);
13686
- ctx.beginPath();
13687
- ctx.fillStyle = 'rgba(255,255,255,0.5)';
13688
- ctx.roundRect.apply(ctx, __spreadArray(__spreadArray([], rect, false), [16], false));
13689
- ctx.fill();
13690
- ctx.drawImage.apply(ctx, __spreadArray([signaturePad.current.getCanvas()], rect, false));
13691
- animationFrame.current = requestAnimationFrame(runFrame);
13692
- return [2 /*return*/];
13693
- });
13694
- });
13689
+ if (!signaturePad.current || !videoRef.current || !outputCanvas.current) {
13690
+ cancelAnimationFrame(animationFrame.current);
13691
+ return;
13692
+ }
13693
+ var _a = [videoRef.current.videoWidth, videoRef.current.videoHeight],
13694
+ w = _a[0],
13695
+ h = _a[1];
13696
+ var isPortrait = w < h;
13697
+ outputCanvas.current.width = w;
13698
+ outputCanvas.current.height = h;
13699
+ var rect = [w * (isPortrait ? 0.02 : 0.15), h * (isPortrait ? 0.15 : 0.25), w * (isPortrait ? 0.96 : 0.7), h * (isPortrait ? 0.7 : 0.5)];
13700
+ ctx.drawImage(videoRef.current, 0, 0, w, h);
13701
+ ctx.beginPath();
13702
+ ctx.fillStyle = 'rgba(255,255,255,0.5)';
13703
+ ctx.roundRect.apply(ctx, __spreadArray(__spreadArray([], rect, false), [16], false));
13704
+ ctx.fill();
13705
+ ctx.drawImage.apply(ctx, __spreadArray([signaturePad.current.getCanvas()], rect, false));
13706
+ animationFrame.current = requestAnimationFrame(runFrame);
13695
13707
  });
13696
13708
  return function () {
13697
- cancelAnimationFrame(animationFrame.current);
13709
+ return cancelAnimationFrame(animationFrame.current);
13698
13710
  };
13699
13711
  }, [camera, isRecording, isRecordingVideo, videoRef]);
13700
- var onAcceptClicked = React.useCallback(function () {
13701
- return __awaiter(_this, void 0, void 0, function () {
13702
- var signatureData, imageUrl;
13703
- var _a;
13704
- return __generator(this, function (_b) {
13705
- switch (_b.label) {
13706
- case 0:
13707
- debug('VideoSignatureContext: onAcceptClicked');
13708
- if (!signaturePad.current) return [2 /*return*/];
13709
- debug('VideoSignatureContext: building signature data...');
13710
- signatureData = buildSignatureData(signaturePad.current);
13711
- debug('VideoSignatureContext: exporting signature image...');
13712
- return [4 /*yield*/, exportSignatureImage(signaturePad.current)];
13713
- case 1:
13714
- imageUrl = _b.sent();
13715
- if (imageUrl) signatureData.fileContent = dataUrlToBase64Sync(imageUrl);
13716
- debug('VideoSignatureContext: setting signature data url...');
13717
- setSignatureDataUrl(imageUrl);
13718
- setSignatureData(signatureData);
13719
- debug('VideoSignatureContext: stopping recording...');
13720
- stopRecordingVideo();
13721
- stopRecordingAudio();
13722
- debug('VideoSignatureContext: stopping signature recorder...');
13723
- (_a = getSignatureRecorder()) === null || _a === void 0 ? void 0 : _a.stop();
13724
- return [2 /*return*/];
13725
- }
13726
- });
13727
- });
13728
- }, [stopRecordingAudio, stopRecordingVideo]);
13729
- var value = React.useMemo(function () {
13730
- return {
13731
- isRecording: isRecording,
13732
- startRecording: startRecording,
13733
- stopRecording: stopRecording,
13734
- clearRecordedData: clearRecordedData,
13735
- signaturePad: signaturePad,
13736
- signatureData: signatureData,
13737
- signatureDataUrl: signatureDataUrl,
13738
- signatureVideoData: signatureVideoData,
13739
- signatureVideoUrl: signatureVideoUrl,
13740
- onAcceptClicked: onAcceptClicked
13741
- };
13742
- }, [clearRecordedData, isRecording, onAcceptClicked, signatureData, signatureDataUrl, signatureVideoData, signatureVideoUrl, startRecording, stopRecording]);
13743
- return /*#__PURE__*/React__namespace.default.createElement(VideoSignatureContext.Provider, {
13744
- value: value
13745
- }, children, /*#__PURE__*/React__namespace.default.createElement(InvisibleCanvas, {
13712
+ return /*#__PURE__*/React__namespace.default.createElement(React__namespace.default.Fragment, null, children, /*#__PURE__*/React__namespace.default.createElement(InvisibleCanvas, {
13746
13713
  ref: outputCanvas,
13747
13714
  width: (_b = videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth,
13748
13715
  height: (_c = videoRef.current) === null || _c === void 0 ? void 0 : _c.videoHeight
13749
13716
  }));
13750
13717
  }
13751
- function useVideoSignatureContext() {
13752
- var ctx = React.useContext(VideoSignatureContext);
13753
- if (!ctx) throw new Error('useVideoSignatureContext cannot be used without ContextProvider');
13754
- return ctx;
13755
- }
13756
13718
 
13757
13719
  function VideoSignatureGuides(_a) {
13720
+ var _this = this;
13758
13721
  var _b = _a.requestedAction,
13759
13722
  requestedAction = _b === void 0 ? 'VERIFY_LIVENESS' : _b,
13760
13723
  _c = _a.faceGuideStatus,
@@ -13774,15 +13737,18 @@ function VideoSignatureGuides(_a) {
13774
13737
  ref = _h.ref,
13775
13738
  width = _h.width,
13776
13739
  height = _h.height;
13777
- var _j = useVideoSignatureContext(),
13778
- signaturePad = _j.signaturePad,
13779
- onAcceptClicked = _j.onAcceptClicked;
13780
- var _k = React.useState(true),
13781
- signaturePadEmpty = _k[0],
13782
- setSignaturePadEmpty = _k[1];
13783
- var _l = React.useState(false),
13784
- signatureValid = _l[0],
13785
- setSignatureValid = _l[1];
13740
+ var signaturePad = React.useRef(null);
13741
+ var _j = React.useState(true),
13742
+ signaturePadEmpty = _j[0],
13743
+ setSignaturePadEmpty = _j[1];
13744
+ var _k = React.useState(false),
13745
+ signatureValid = _k[0],
13746
+ setSignatureValid = _k[1];
13747
+ React.useEffect(function () {
13748
+ return useVideoSignatureStore.setState({
13749
+ signaturePad: signaturePad
13750
+ });
13751
+ }, []);
13786
13752
  var verbiage = useTranslations(rawVerbiage, {
13787
13753
  signaturePadEmptyText: '',
13788
13754
  headTrackingUnsatisfiedText: '',
@@ -13799,13 +13765,41 @@ function VideoSignatureGuides(_a) {
13799
13765
  var isSigning = requestedAction === 'CAPTURE_SIGNATURE';
13800
13766
  var canClear = isSigning && !signaturePadEmpty;
13801
13767
  var canSubmit = isSigning && signatureValid && headTrackingSatisfied;
13802
- var _m = React.useState(false),
13803
- emptyContentDismissed = _m[0],
13804
- setEmptyContentDismissed = _m[1];
13768
+ var _l = React.useState(false),
13769
+ emptyContentDismissed = _l[0],
13770
+ setEmptyContentDismissed = _l[1];
13805
13771
  var displayEmptyState = requestedAction === 'CAPTURE_SIGNATURE' && signaturePadEmpty && !emptyContentDismissed;
13806
13772
  React.useEffect(function () {
13807
13773
  if (signaturePadEmpty) setEmptyContentDismissed(false);
13808
13774
  }, [signaturePadEmpty]);
13775
+ var onAcceptClicked = React.useCallback(function () {
13776
+ return __awaiter(_this, void 0, void 0, function () {
13777
+ var signatureData, imageUrl;
13778
+ return __generator(this, function (_a) {
13779
+ switch (_a.label) {
13780
+ case 0:
13781
+ log('VideoSignatureContext: onAcceptClicked');
13782
+ if (!signaturePad.current) return [2 /*return*/];
13783
+ log('VideoSignatureContext: building signature data...');
13784
+ signatureData = buildSignatureData(signaturePad.current);
13785
+ log('VideoSignatureContext: exporting signature image...', signatureData);
13786
+ return [4 /*yield*/, exportSignatureImage(signaturePad.current)];
13787
+ case 1:
13788
+ imageUrl = _a.sent();
13789
+ if (imageUrl) signatureData.fileContent = dataUrlToBase64Sync(imageUrl);
13790
+ log('VideoSignatureContext: setting signature data url...', imageUrl);
13791
+ useVideoSignatureStore.setState({
13792
+ signatureData: signatureData,
13793
+ signatureDataUrl: imageUrl
13794
+ });
13795
+ log('VideoSignatureContext: stopping signature recorder...');
13796
+ // getSignatureRecorder()?.stop()
13797
+ useVideoSignatureStore.getState().stopRecording();
13798
+ return [2 /*return*/];
13799
+ }
13800
+ });
13801
+ });
13802
+ }, []);
13809
13803
  return /*#__PURE__*/React__namespace.default.createElement(Container$3, {
13810
13804
  className: classNames.container
13811
13805
  }, /*#__PURE__*/React__namespace.default.createElement(Inner$1, {
@@ -13908,40 +13902,45 @@ var VideoSignatureCapture = function VideoSignatureCapture(_a) {
13908
13902
  minSignaturePadPoints = _c === void 0 ? DEFAULT_MIN_SIGNATURE_PAD_POINTS : _c,
13909
13903
  _d = _a.headTrackingBoundaryPercentage,
13910
13904
  headTrackingBoundaryPercentage = _d === void 0 ? DEFAULT_HEAD_TRACKING_BOUNDARY_PERCENTAGE : _d,
13911
- _e = _a.classNames,
13912
- classNames = _e === void 0 ? {} : _e,
13913
- _f = _a.colors,
13914
- colors = _f === void 0 ? {} : _f,
13915
- _g = _a.verbiage,
13916
- rawVerbiage = _g === void 0 ? {} : _g,
13917
- _h = _a.debugMode,
13918
- debugMode = _h === void 0 ? false : _h;
13919
- var _j = useCameraStore(shallow.useShallow(function (state) {
13905
+ _e = _a.captureAudio,
13906
+ captureAudio = _e === void 0 ? false : _e,
13907
+ _f = _a.classNames,
13908
+ classNames = _f === void 0 ? {} : _f,
13909
+ _g = _a.colors,
13910
+ colors = _g === void 0 ? {} : _g,
13911
+ _h = _a.verbiage,
13912
+ rawVerbiage = _h === void 0 ? {} : _h,
13913
+ _j = _a.debugMode,
13914
+ debugMode = _j === void 0 ? false : _j;
13915
+ var _k = useCameraStore(shallow.useShallow(function (state) {
13920
13916
  return {
13921
13917
  camera: state.camera,
13918
+ audioStream: state.audioStream,
13922
13919
  videoWidth: state.videoWidth,
13923
13920
  videoHeight: state.videoHeight
13924
13921
  };
13925
13922
  })),
13926
- camera = _j.camera,
13927
- videoWidth = _j.videoWidth,
13928
- videoHeight = _j.videoHeight;
13929
- var _k = useSelfieGuidanceModelsContext(),
13930
- onPredictionMade = _k.onPredictionMade,
13931
- startHeadTracking = _k.start,
13932
- stopHeadTracking = _k.stop;
13933
- var _l = useVideoSignatureContext(),
13934
- signatureData = _l.signatureData,
13935
- signatureDataUrl = _l.signatureDataUrl,
13936
- signatureVideoData = _l.signatureVideoData,
13937
- startRecording = _l.startRecording,
13938
- stopRecording = _l.stopRecording,
13939
- clearRecordedData = _l.clearRecordedData,
13940
- isRecording = _l.isRecording;
13923
+ camera = _k.camera,
13924
+ audioStream = _k.audioStream,
13925
+ videoWidth = _k.videoWidth,
13926
+ videoHeight = _k.videoHeight;
13927
+ var _l = useSelfieGuidanceModelsContext(),
13928
+ onPredictionMade = _l.onPredictionMade,
13929
+ startHeadTracking = _l.start,
13930
+ stopHeadTracking = _l.stop;
13931
+ var _m = useVideoSignatureStore(),
13932
+ signatureData = _m.signatureData,
13933
+ signatureDataUrl = _m.signatureDataUrl,
13934
+ signatureVideoData = _m.signatureVideoData,
13935
+ startRecording = _m.startRecording,
13936
+ stopRecording = _m.stopRecording,
13937
+ clearRecordedData = _m.clearRecordedData,
13938
+ isRecording = _m.isRecording;
13941
13939
  React.useEffect(function () {
13942
- startRecording();
13940
+ if (!camera) return;
13941
+ startRecording(camera, audioStream, captureAudio);
13943
13942
  return stopRecording;
13944
- }, [startRecording, stopRecording]);
13943
+ }, [audioStream, camera, captureAudio, startRecording, stopRecording]);
13945
13944
  React.useEffect(function () {
13946
13945
  setTimeout(startHeadTracking, 1);
13947
13946
  return stopHeadTracking;
@@ -13956,15 +13955,15 @@ var VideoSignatureCapture = function VideoSignatureCapture(_a) {
13956
13955
  onVideoCaptured === null || onVideoCaptured === void 0 ? void 0 : onVideoCaptured(signatureVideoData, signatureData, signatureDataUrl);
13957
13956
  }
13958
13957
  }, [onVideoCaptured, signatureData, signatureDataUrl, signatureVideoData]);
13959
- var _m = React.useState(true),
13960
- headTrackingSatisfied = _m[0],
13961
- setHeadTrackingSatisfied = _m[1];
13962
- var _o = React.useState(null),
13963
- lastFace = _o[0],
13964
- setLastFace = _o[1];
13965
- var _p = React.useState(0),
13966
- numFramesWithoutFaces = _p[0],
13967
- setNumFramesWithoutFaces = _p[1];
13958
+ var _o = React.useState(true),
13959
+ headTrackingSatisfied = _o[0],
13960
+ setHeadTrackingSatisfied = _o[1];
13961
+ var _p = React.useState(null),
13962
+ lastFace = _p[0],
13963
+ setLastFace = _p[1];
13964
+ var _q = React.useState(0),
13965
+ numFramesWithoutFaces = _q[0],
13966
+ setNumFramesWithoutFaces = _q[1];
13968
13967
  onPredictionMade(useDebounce.useThrottledCallback(React.useCallback(function (_a) {
13969
13968
  var face = _a.face;
13970
13969
  if (!camera) return;
@@ -13975,12 +13974,12 @@ var VideoSignatureCapture = function VideoSignatureCapture(_a) {
13975
13974
  return n + 1;
13976
13975
  });
13977
13976
  }, [camera, headTrackingBoundaryPercentage, videoHeight, videoWidth]), 16));
13978
- var _q = useResizeObserver(),
13979
- ref = _q.ref,
13980
- _r = _q.width,
13981
- width = _r === void 0 ? 1 : _r,
13982
- _s = _q.height,
13983
- height = _s === void 0 ? 1 : _s;
13977
+ var _r = useResizeObserver(),
13978
+ ref = _r.ref,
13979
+ _s = _r.width,
13980
+ width = _s === void 0 ? 1 : _s,
13981
+ _t = _r.height,
13982
+ height = _t === void 0 ? 1 : _t;
13984
13983
  var debugScalingDetails = useDebugScalingDetails({
13985
13984
  enabled: debugMode,
13986
13985
  pageWidth: width,
@@ -14197,6 +14196,7 @@ var VideoSignatureWizard = function VideoSignatureWizard(_a) {
14197
14196
  return n + 1;
14198
14197
  });
14199
14198
  setCaptureState('CHECKING_LIVENESS');
14199
+ useVideoSignatureStore.getState().clearRecordedData();
14200
14200
  }, [onRetryClicked]);
14201
14201
  var onExitSignatureCapture = React.useCallback(function () {
14202
14202
  setAttempt(function (n) {
@@ -14218,9 +14218,10 @@ var VideoSignatureWizard = function VideoSignatureWizard(_a) {
14218
14218
  return /*#__PURE__*/React__namespace.default.createElement(VideoSignatureWizardGuides, _assign({}, props, {
14219
14219
  classNames: classNames === null || classNames === void 0 ? void 0 : classNames.guides,
14220
14220
  verbiage: verbiage === null || verbiage === void 0 ? void 0 : verbiage.guides,
14221
- restartVideoOnSignaturePadCleared: restartVideoOnSignaturePadCleared
14221
+ restartVideoOnSignaturePadCleared: restartVideoOnSignaturePadCleared,
14222
+ captureAudio: captureAudio
14222
14223
  }));
14223
- }, [classNames === null || classNames === void 0 ? void 0 : classNames.guides, restartVideoOnSignaturePadCleared, verbiage === null || verbiage === void 0 ? void 0 : verbiage.guides]);
14224
+ }, [captureAudio, classNames === null || classNames === void 0 ? void 0 : classNames.guides, restartVideoOnSignaturePadCleared, verbiage === null || verbiage === void 0 ? void 0 : verbiage.guides]);
14224
14225
  var onExitAfterFailureProp = faceLivenessProps === null || faceLivenessProps === void 0 ? void 0 : faceLivenessProps.onExitAfterFailure;
14225
14226
  var onExitAfterFailure = React.useCallback(function (resp, req) {
14226
14227
  onExitAfterFailureProp === null || onExitAfterFailureProp === void 0 ? void 0 : onExitAfterFailureProp(resp, req);
@@ -14272,6 +14273,7 @@ var VideoSignatureWizard = function VideoSignatureWizard(_a) {
14272
14273
  headTrackingBoundaryPercentage: headTrackingBoundaryPercentage,
14273
14274
  restartVideoOnSignaturePadCleared: restartVideoOnSignaturePadCleared,
14274
14275
  guidesComponent: guidesComponent,
14276
+ captureAudio: captureAudio,
14275
14277
  classNames: classNames,
14276
14278
  colors: colors,
14277
14279
  verbiage: verbiage,
@@ -14296,14 +14298,25 @@ function VideoSignatureWizardGuides(_a) {
14296
14298
  var status = _a.status,
14297
14299
  _b = _a.restartVideoOnSignaturePadCleared,
14298
14300
  restartVideoOnSignaturePadCleared = _b === void 0 ? true : _b,
14299
- props = __rest(_a, ["status", "restartVideoOnSignaturePadCleared"]);
14300
- var clearRecordedData = useVideoSignatureContext().clearRecordedData;
14301
+ _c = _a.captureAudio,
14302
+ captureAudio = _c === void 0 ? false : _c,
14303
+ props = __rest(_a, ["status", "restartVideoOnSignaturePadCleared", "captureAudio"]);
14304
+ var _d = useCameraStore(),
14305
+ camera = _d.camera,
14306
+ audioStream = _d.audioStream;
14307
+ function onClear() {
14308
+ if (!restartVideoOnSignaturePadCleared) return;
14309
+ setTimeout(function () {
14310
+ useVideoSignatureStore.getState().clearRecordedData();
14311
+ setTimeout(function () {
14312
+ useVideoSignatureStore.getState().startRecording(camera, audioStream, captureAudio);
14313
+ }, 100);
14314
+ }, 100);
14315
+ }
14301
14316
  return /*#__PURE__*/React__namespace.default.createElement(VideoSignatureGuides, _assign({}, props, {
14302
14317
  faceGuideStatus: status,
14303
- requestedAction: status === 'success' ? 'CAPTURE_SIGNATURE' : 'VERIFY_LIVENESS',
14304
- onClearSignaturePadClicked: restartVideoOnSignaturePadCleared ? function () {
14305
- return setTimeout(clearRecordedData, 100);
14306
- } : undefined
14318
+ onClearSignaturePadClicked: onClear,
14319
+ requestedAction: status === 'success' ? 'CAPTURE_SIGNATURE' : 'VERIFY_LIVENESS'
14307
14320
  }));
14308
14321
  }
14309
14322
  var VideoSignatureWizardWithProviders = function VideoSignatureWizardWithProviders(props) {
@@ -14686,12 +14699,8 @@ var IdVideoCapture = function IdVideoCapture(_a) {
14686
14699
  stopSelfieGuidance = _16.stop,
14687
14700
  onSelfiePredictionMade = _16.onPredictionMade,
14688
14701
  selfieModelError = _16.error;
14689
- var _17 = useVideoRecorder(camera, audioStream, mergeAVStreams),
14702
+ var _17 = useVideoRecorder(mergeAVStreams),
14690
14703
  isRecordingVideo = _17.isRecordingVideo,
14691
- startRecordingVideo = _17.startRecordingVideo,
14692
- startRecordingAudio = _17.startRecordingAudio,
14693
- stopRecordingVideo = _17.stopRecordingVideo,
14694
- stopRecordingAudio = _17.stopRecordingAudio,
14695
14704
  videoRecordingUnintentionallyStopped = _17.videoRecordingUnintentionallyStopped,
14696
14705
  audioRecordingUnintentionallyStopped = _17.audioRecordingUnintentionallyStopped,
14697
14706
  videoUrl = _17.videoUrl,
@@ -14701,8 +14710,8 @@ var IdVideoCapture = function IdVideoCapture(_a) {
14701
14710
  countdownRemaining = _18[0],
14702
14711
  setCountdownRemaining = _18[1];
14703
14712
  React.useEffect(function () {
14704
- if (!isRecordingVideo && !videoUrl) {
14705
- startRecordingVideo();
14713
+ if (camera && !isRecordingVideo && !videoUrl) {
14714
+ useVideoRecorderStore.getState().startRecordingVideo(camera, audioStream);
14706
14715
  setVideoStartsAt(new Date());
14707
14716
  }
14708
14717
  // if the mergeAVStreams flag is present, the audio stream is on the video
@@ -14713,7 +14722,7 @@ var IdVideoCapture = function IdVideoCapture(_a) {
14713
14722
  releaseCameraAccess();
14714
14723
  onComplete === null || onComplete === void 0 ? void 0 : onComplete(videoUrl, audioUrl);
14715
14724
  }
14716
- }, [audioUrl, isRecordingVideo, mergeAVStreams, onComplete, readTextPrompt, releaseCameraAccess, startRecordingVideo, videoUrl]);
14725
+ }, [audioStream, audioUrl, camera, isRecordingVideo, mergeAVStreams, onComplete, readTextPrompt, releaseCameraAccess, videoUrl]);
14717
14726
  React.useEffect(function () {
14718
14727
  if (videoRecordingUnintentionallyStopped || audioRecordingUnintentionallyStopped || !!readTextPrompt && !microphoneReady) {
14719
14728
  onRecordingFailed === null || onRecordingFailed === void 0 ? void 0 : onRecordingFailed();
@@ -14808,13 +14817,13 @@ var IdVideoCapture = function IdVideoCapture(_a) {
14808
14817
  var _a;
14809
14818
  if (translatedText) {
14810
14819
  setRequestedAction('READ_TEXT');
14811
- startRecordingAudio();
14820
+ useVideoRecorderStore.getState().startRecordingAudio(audioStream);
14812
14821
  setIdCaptureVideoAudioStartsAt(new Date().getTime() - ((_a = videoStartsAt === null || videoStartsAt === void 0 ? void 0 : videoStartsAt.getTime()) !== null && _a !== void 0 ? _a : 0));
14813
14822
  setExpectedAudioText(translatedText);
14814
14823
  } else {
14815
- stopRecordingVideo();
14824
+ useVideoRecorderStore.getState().stopRecordingVideo();
14816
14825
  }
14817
- }, [setExpectedAudioText, setIdCaptureVideoAudioStartsAt, startRecordingAudio, stopRecordingVideo, translatedText, videoStartsAt]);
14826
+ }, [audioStream, setExpectedAudioText, setIdCaptureVideoAudioStartsAt, translatedText, videoStartsAt]);
14818
14827
  var frameWidth = (_c = (_b = videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth) !== null && _c !== void 0 ? _c : 0;
14819
14828
  var frameHeight = (_e = (_d = videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) !== null && _e !== void 0 ? _e : 0;
14820
14829
  var faceBox = face === null || face === void 0 ? void 0 : face.box;
@@ -14884,9 +14893,9 @@ var IdVideoCapture = function IdVideoCapture(_a) {
14884
14893
  };
14885
14894
  }, [isFlipping]);
14886
14895
  var stopRecording = React.useCallback(function () {
14887
- stopRecordingVideo();
14888
- stopRecordingAudio();
14889
- }, [stopRecordingAudio, stopRecordingVideo]);
14896
+ useVideoRecorderStore.getState().stopRecordingVideo();
14897
+ useVideoRecorderStore.getState().stopRecordingAudio();
14898
+ }, []);
14890
14899
  var satisfied = !isFlipping && goodFramesThresholdMet && faceCentered && delaySatisfied;
14891
14900
  React.useEffect(function () {
14892
14901
  if (satisfied && !countdownStartedAt) {