smartcomply-web-sdk 1.0.77 → 1.0.78

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.
@@ -1 +1 @@
1
- {"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../src/camera/FaceDetector.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAClC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAA+B;IAE3C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,mBAAmB;IA+BvE,OAAO,IAAI,IAAI;CAMhB"}
1
+ {"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../src/camera/FaceDetector.ts"],"names":[],"mappings":"AA4CA,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAClC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAA+B;IAE3C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC3B,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,mBAAmB;IA+BvE,OAAO,IAAI,IAAI;CAMhB"}
@@ -2,39 +2,64 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.FaceDetectorEngine = void 0;
4
4
  const tasks_vision_1 = require("@mediapipe/tasks-vision");
5
- const WASM_CDN = "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm";
6
- const MODEL_URL = "https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/latest/face_landmarker.task";
5
+ // Pinned to the exact version in package.json ("@mediapipe/tasks-vision":
6
+ // "^0.10.32"). This MUST stay in sync with that dependency — using
7
+ // "@latest" here let jsDelivr silently swap in a newer WASM build than the
8
+ // JS API this SDK was built/tested against, breaking face detection for
9
+ // every user at once with no code change on our side. Bump both together.
10
+ const MEDIAPIPE_VERSION = "0.10.32";
11
+ const WASM_CDN = `https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@${MEDIAPIPE_VERSION}/wasm`;
12
+ // Also pinned (was "/latest/") so a model update can't shift blendshape
13
+ // output out from under ActionDetector's calibrated thresholds unannounced.
14
+ const MODEL_URL = "https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task";
7
15
  // Module-level cache — survives component remounts and retries within the same page session.
8
16
  // First init fetches ~8MB total (WASM + model); subsequent inits reuse the cache instantly.
9
- let _cachedVision = null;
10
- let _cachedModelBuffer = null;
17
+ // Cached as in-flight PROMISES (not resolved values) so concurrent init() calls
18
+ // (e.g. parallel calls from two liveness attempts, or a fast retry) share one
19
+ // fetch instead of racing duplicate downloads — and so a failed attempt
20
+ // (rejected promise) doesn't get treated as "cached" and reused forever.
21
+ let _visionPromise = null;
22
+ let _modelBufferPromise = null;
23
+ /** Max time to wait for the WASM runtime / model download before giving up. */
24
+ const INIT_TIMEOUT_MS = 20000;
25
+ function withTimeout(promise, ms, label) {
26
+ return new Promise((resolve, reject) => {
27
+ const timer = setTimeout(() => reject(new Error(`${label} timed out. Please check your connection and try again.`)), ms);
28
+ promise.then((value) => { clearTimeout(timer); resolve(value); }, (err) => { clearTimeout(timer); reject(err); });
29
+ });
30
+ }
11
31
  class FaceDetectorEngine {
12
32
  constructor() {
13
33
  this.landmarker = null;
14
34
  }
15
35
  async init() {
16
- // Reuse WASM fileset — avoids re-fetching ~3MB on retry / remount
17
- if (!_cachedVision) {
18
- _cachedVision = await tasks_vision_1.FilesetResolver.forVisionTasks(WASM_CDN);
36
+ // Reuse (or join) the in-flight WASM fileset load — avoids re-fetching
37
+ // ~3MB on retry/remount, and avoids kicking off a second parallel fetch
38
+ // if init() is called again before the first finishes.
39
+ if (!_visionPromise) {
40
+ _visionPromise = tasks_vision_1.FilesetResolver.forVisionTasks(WASM_CDN);
41
+ _visionPromise.catch(() => { _visionPromise = null; }); // don't cache a failure
19
42
  }
20
- // Reuse model buffer avoids re-fetching ~5MB on retry / remount
21
- if (!_cachedModelBuffer) {
22
- const res = await fetch(MODEL_URL);
23
- if (!res.ok) {
24
- throw new Error(`Failed to download face model (${res.status})`);
25
- }
26
- _cachedModelBuffer = await res.arrayBuffer();
43
+ // Reuse (or join) the in-flight model download same reasoning.
44
+ if (!_modelBufferPromise) {
45
+ _modelBufferPromise = fetch(MODEL_URL).then((res) => {
46
+ if (!res.ok)
47
+ throw new Error(`Failed to download face model (${res.status})`);
48
+ return res.arrayBuffer();
49
+ });
50
+ _modelBufferPromise.catch(() => { _modelBufferPromise = null; }); // don't cache a failure
27
51
  }
28
- this.landmarker = await tasks_vision_1.FaceLandmarker.createFromOptions(_cachedVision, {
52
+ const [vision, modelBuffer] = await withTimeout(Promise.all([_visionPromise, _modelBufferPromise]), INIT_TIMEOUT_MS, "Face detection setup");
53
+ this.landmarker = await withTimeout(tasks_vision_1.FaceLandmarker.createFromOptions(vision, {
29
54
  baseOptions: {
30
55
  // Pass a copy — MediaPipe takes ownership of the buffer
31
- modelAssetBuffer: new Uint8Array(_cachedModelBuffer.slice(0)),
56
+ modelAssetBuffer: new Uint8Array(modelBuffer.slice(0)),
32
57
  },
33
58
  runningMode: "VIDEO",
34
59
  outputFaceBlendshapes: true,
35
60
  outputFacialTransformationMatrixes: true,
36
61
  numFaces: 1,
37
- });
62
+ }), INIT_TIMEOUT_MS, "Face detection setup");
38
63
  }
39
64
  detect(video, timestamp) {
40
65
  if (!this.landmarker) {
@@ -1 +1 @@
1
- {"version":3,"file":"FaceDetector.js","sourceRoot":"","sources":["../../src/camera/FaceDetector.ts"],"names":[],"mappings":";;;AAAA,0DAIiC;AAEjC,MAAM,QAAQ,GACZ,kEAAkE,CAAC;AACrE,MAAM,SAAS,GACb,qHAAqH,CAAC;AAExH,6FAA6F;AAC7F,4FAA4F;AAC5F,IAAI,aAAa,GAAsE,IAAI,CAAC;AAC5F,IAAI,kBAAkB,GAAuB,IAAI,CAAC;AAQlD,MAAa,kBAAkB;IAA/B;QACU,eAAU,GAA0B,IAAI,CAAC;IAkEnD,CAAC;IAhEC,KAAK,CAAC,IAAI;QACR,kEAAkE;QAClE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,aAAa,GAAG,MAAM,8BAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjE,CAAC;QAED,kEAAkE;QAClE,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YACnE,CAAC;YACD,kBAAkB,GAAG,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC;QAC/C,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,MAAM,6BAAc,CAAC,iBAAiB,CAAC,aAAa,EAAE;YACtE,WAAW,EAAE;gBACX,wDAAwD;gBACxD,gBAAgB,EAAE,IAAI,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAC9D;YACD,WAAW,EAAE,OAAO;YACpB,qBAAqB,EAAE,IAAI;YAC3B,kCAAkC,EAAE,IAAI;YACxC,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAuB,EAAE,SAAiB;QAC/C,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QAChF,CAAC;QAED,IAAI,MAA4B,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;YACzD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QAChF,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,GAAG,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;QAChF,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC9C,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YACtD,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,eAAe,GACnB,MAAM,CAAC,4BAA4B;YACnC,MAAM,CAAC,4BAA4B,CAAC,MAAM,GAAG,CAAC;YAC5C,CAAC,CAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC,IAAI,CAAc;YACvE,CAAC,CAAC,IAAI,CAAC;QAEX,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;IAC9D,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAnED,gDAmEC"}
1
+ {"version":3,"file":"FaceDetector.js","sourceRoot":"","sources":["../../src/camera/FaceDetector.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../../src/camera/FaceDetector.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAClC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAA+B;IAE3C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B3B,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,mBAAmB;IA+BvE,OAAO,IAAI,IAAI;CAMhB"}
1
+ {"version":3,"file":"FaceDetector.d.ts","sourceRoot":"","sources":["../../../src/camera/FaceDetector.ts"],"names":[],"mappings":"AA4CA,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CAClC;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAA+B;IAE3C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC3B,MAAM,CAAC,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,GAAG,mBAAmB;IA+BvE,OAAO,IAAI,IAAI;CAMhB"}
@@ -1,37 +1,62 @@
1
1
  import { FilesetResolver, FaceLandmarker, } from "@mediapipe/tasks-vision";
2
- const WASM_CDN = "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm";
3
- const MODEL_URL = "https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/latest/face_landmarker.task";
2
+ // Pinned to the exact version in package.json ("@mediapipe/tasks-vision":
3
+ // "^0.10.32"). This MUST stay in sync with that dependency — using
4
+ // "@latest" here let jsDelivr silently swap in a newer WASM build than the
5
+ // JS API this SDK was built/tested against, breaking face detection for
6
+ // every user at once with no code change on our side. Bump both together.
7
+ const MEDIAPIPE_VERSION = "0.10.32";
8
+ const WASM_CDN = `https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@${MEDIAPIPE_VERSION}/wasm`;
9
+ // Also pinned (was "/latest/") so a model update can't shift blendshape
10
+ // output out from under ActionDetector's calibrated thresholds unannounced.
11
+ const MODEL_URL = "https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task";
4
12
  // Module-level cache — survives component remounts and retries within the same page session.
5
13
  // First init fetches ~8MB total (WASM + model); subsequent inits reuse the cache instantly.
6
- let _cachedVision = null;
7
- let _cachedModelBuffer = null;
14
+ // Cached as in-flight PROMISES (not resolved values) so concurrent init() calls
15
+ // (e.g. parallel calls from two liveness attempts, or a fast retry) share one
16
+ // fetch instead of racing duplicate downloads — and so a failed attempt
17
+ // (rejected promise) doesn't get treated as "cached" and reused forever.
18
+ let _visionPromise = null;
19
+ let _modelBufferPromise = null;
20
+ /** Max time to wait for the WASM runtime / model download before giving up. */
21
+ const INIT_TIMEOUT_MS = 20000;
22
+ function withTimeout(promise, ms, label) {
23
+ return new Promise((resolve, reject) => {
24
+ const timer = setTimeout(() => reject(new Error(`${label} timed out. Please check your connection and try again.`)), ms);
25
+ promise.then((value) => { clearTimeout(timer); resolve(value); }, (err) => { clearTimeout(timer); reject(err); });
26
+ });
27
+ }
8
28
  export class FaceDetectorEngine {
9
29
  constructor() {
10
30
  this.landmarker = null;
11
31
  }
12
32
  async init() {
13
- // Reuse WASM fileset — avoids re-fetching ~3MB on retry / remount
14
- if (!_cachedVision) {
15
- _cachedVision = await FilesetResolver.forVisionTasks(WASM_CDN);
33
+ // Reuse (or join) the in-flight WASM fileset load — avoids re-fetching
34
+ // ~3MB on retry/remount, and avoids kicking off a second parallel fetch
35
+ // if init() is called again before the first finishes.
36
+ if (!_visionPromise) {
37
+ _visionPromise = FilesetResolver.forVisionTasks(WASM_CDN);
38
+ _visionPromise.catch(() => { _visionPromise = null; }); // don't cache a failure
16
39
  }
17
- // Reuse model buffer avoids re-fetching ~5MB on retry / remount
18
- if (!_cachedModelBuffer) {
19
- const res = await fetch(MODEL_URL);
20
- if (!res.ok) {
21
- throw new Error(`Failed to download face model (${res.status})`);
22
- }
23
- _cachedModelBuffer = await res.arrayBuffer();
40
+ // Reuse (or join) the in-flight model download same reasoning.
41
+ if (!_modelBufferPromise) {
42
+ _modelBufferPromise = fetch(MODEL_URL).then((res) => {
43
+ if (!res.ok)
44
+ throw new Error(`Failed to download face model (${res.status})`);
45
+ return res.arrayBuffer();
46
+ });
47
+ _modelBufferPromise.catch(() => { _modelBufferPromise = null; }); // don't cache a failure
24
48
  }
25
- this.landmarker = await FaceLandmarker.createFromOptions(_cachedVision, {
49
+ const [vision, modelBuffer] = await withTimeout(Promise.all([_visionPromise, _modelBufferPromise]), INIT_TIMEOUT_MS, "Face detection setup");
50
+ this.landmarker = await withTimeout(FaceLandmarker.createFromOptions(vision, {
26
51
  baseOptions: {
27
52
  // Pass a copy — MediaPipe takes ownership of the buffer
28
- modelAssetBuffer: new Uint8Array(_cachedModelBuffer.slice(0)),
53
+ modelAssetBuffer: new Uint8Array(modelBuffer.slice(0)),
29
54
  },
30
55
  runningMode: "VIDEO",
31
56
  outputFaceBlendshapes: true,
32
57
  outputFacialTransformationMatrixes: true,
33
58
  numFaces: 1,
34
- });
59
+ }), INIT_TIMEOUT_MS, "Face detection setup");
35
60
  }
36
61
  detect(video, timestamp) {
37
62
  if (!this.landmarker) {
@@ -1 +1 @@
1
- {"version":3,"file":"FaceDetector.js","sourceRoot":"","sources":["../../../src/camera/FaceDetector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FaceDetector.js","sourceRoot":"","sources":["../../../src/camera/FaceDetector.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SmartComplyFlow.d.ts","sourceRoot":"","sources":["../../../src/flow/SmartComplyFlow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SmartComplyFlow.d.ts","sourceRoot":"","sources":["../../../src/flow/SmartComplyFlow.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,11 @@ const _INFRASTRUCTURE_ERROR_PATTERNS = [
18
18
  "camera access is not supported",
19
19
  "camera access failed",
20
20
  "recording failed unexpectedly",
21
+ // FaceDetectorEngine.init() failures (FaceDetector.ts) — a slow/blocked
22
+ // CDN or model download is a connectivity issue, not a failed face scan,
23
+ // and must not burn one of the user's limited liveness retry attempts.
24
+ "face detection setup timed out",
25
+ "failed to download face model",
21
26
  ];
22
27
  function _isInfrastructureError(err) {
23
28
  const msg = String(err?.message || "").toLowerCase();