@privateid/ultrapass-web-sdk 1.3.1 → 1.3.2-1300478

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/README.md +75 -75
  2. package/dist/apiUtils.d.ts +46 -46
  3. package/dist/apiUtils.js +922 -922
  4. package/dist/application/index.d.ts +7 -7
  5. package/dist/application/index.js +27 -27
  6. package/dist/application/modules/core/document/DocumentService.d.ts +22 -22
  7. package/dist/application/modules/core/document/DocumentService.js +254 -254
  8. package/dist/application/modules/core/document/document.constants.d.ts +15 -15
  9. package/dist/application/modules/core/document/document.constants.js +21 -21
  10. package/dist/application/modules/core/document/document.domain.d.ts +7 -7
  11. package/dist/application/modules/core/document/document.domain.js +1 -1
  12. package/dist/application/modules/core/document/document.types.d.ts +17 -17
  13. package/dist/application/modules/core/document/document.types.js +1 -1
  14. package/dist/application/modules/core/document/document.utils.d.ts +3 -3
  15. package/dist/application/modules/core/document/document.utils.js +58 -58
  16. package/dist/application/modules/core/document/index.d.ts +3 -3
  17. package/dist/application/modules/core/document/index.js +1 -1
  18. package/dist/application/modules/core/face/FaceService.d.ts +33 -33
  19. package/dist/application/modules/core/face/FaceService.js +228 -221
  20. package/dist/application/modules/core/face/FaceService.js.map +1 -1
  21. package/dist/application/modules/core/face/face.constants.d.ts +53 -53
  22. package/dist/application/modules/core/face/face.constants.js +53 -53
  23. package/dist/application/modules/core/face/face.domain.d.ts +10 -10
  24. package/dist/application/modules/core/face/face.domain.js +1 -1
  25. package/dist/application/modules/core/face/face.types.d.ts +41 -38
  26. package/dist/application/modules/core/face/face.types.js +1 -1
  27. package/dist/application/modules/core/face/face.utils.d.ts +15 -15
  28. package/dist/application/modules/core/face/face.utils.js +101 -101
  29. package/dist/application/modules/core/face/index.d.ts +3 -3
  30. package/dist/application/modules/core/face/index.js +1 -1
  31. package/dist/application/modules/global/shared.constants.d.ts +2 -2
  32. package/dist/application/modules/global/shared.constants.js +2 -2
  33. package/dist/application/modules/global/shared.utils.d.ts +25 -25
  34. package/dist/application/modules/global/shared.utils.js +100 -100
  35. package/dist/application/modules/global/shared.utils.js.map +1 -1
  36. package/dist/application/modules/internal/feature-flag/LDFeatureFlagService.d.ts +9 -0
  37. package/dist/application/modules/internal/feature-flag/LDFeatureFlagService.js +32 -0
  38. package/dist/application/modules/internal/feature-flag/LDFeatureFlagService.js.map +1 -0
  39. package/dist/application/modules/internal/feature-flag/feature-flag-init.d.ts +11 -0
  40. package/dist/application/modules/internal/feature-flag/feature-flag-init.js +24 -0
  41. package/dist/application/modules/internal/feature-flag/feature-flag-init.js.map +1 -0
  42. package/dist/application/modules/internal/feature-flag/feature-flag.domain.d.ts +10 -0
  43. package/dist/application/modules/internal/feature-flag/feature-flag.domain.js +7 -0
  44. package/dist/application/modules/internal/feature-flag/feature-flag.domain.js.map +1 -0
  45. package/dist/application/modules/internal/feature-flag/featureFlagInit.d.ts +11 -0
  46. package/dist/application/modules/internal/feature-flag/featureFlagInit.js +44 -0
  47. package/dist/application/modules/internal/feature-flag/featureFlagInit.js.map +1 -0
  48. package/dist/application/modules/internal/feature-flag/index.d.ts +2 -0
  49. package/dist/application/modules/internal/feature-flag/index.js +3 -0
  50. package/dist/application/modules/internal/feature-flag/index.js.map +1 -0
  51. package/dist/application/modules/internal/shared/index.d.ts +2 -0
  52. package/dist/application/modules/internal/shared/index.js +3 -0
  53. package/dist/application/modules/internal/shared/index.js.map +1 -0
  54. package/dist/application/modules/internal/shared/shared.constants.d.ts +2 -0
  55. package/dist/application/modules/internal/shared/shared.constants.js +3 -0
  56. package/dist/application/modules/internal/shared/shared.constants.js.map +1 -0
  57. package/dist/application/modules/internal/shared/shared.utils.d.ts +44 -0
  58. package/dist/application/modules/internal/shared/shared.utils.js +204 -0
  59. package/dist/application/modules/internal/shared/shared.utils.js.map +1 -0
  60. package/dist/application/modules/internal/wasm-orchestrator/WasmOrchestratorService.d.ts +28 -0
  61. package/dist/application/modules/internal/wasm-orchestrator/WasmOrchestratorService.js +380 -0
  62. package/dist/application/modules/internal/wasm-orchestrator/WasmOrchestratorService.js.map +1 -0
  63. package/dist/application/modules/internal/wasm-orchestrator/index.d.ts +6 -0
  64. package/dist/application/modules/internal/wasm-orchestrator/index.js +9 -0
  65. package/dist/application/modules/internal/wasm-orchestrator/index.js.map +1 -0
  66. package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.constants.d.ts +28 -0
  67. package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.constants.js +35 -0
  68. package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.constants.js.map +1 -0
  69. package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.domain.d.ts +51 -0
  70. package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.domain.js +2 -0
  71. package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.domain.js.map +1 -0
  72. package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.types.d.ts +142 -0
  73. package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.types.js +2 -0
  74. package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.types.js.map +1 -0
  75. package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.utils.d.ts +86 -0
  76. package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.utils.js +201 -0
  77. package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.utils.js.map +1 -0
  78. package/dist/application/modules/support/camera/CameraServiceFactory.d.ts +10 -10
  79. package/dist/application/modules/support/camera/CameraServiceFactory.js +33 -33
  80. package/dist/application/modules/support/camera/CameraServiceFactory.js.map +1 -1
  81. package/dist/application/modules/support/camera/camera.constants.d.ts +9 -9
  82. package/dist/application/modules/support/camera/camera.constants.js +48 -48
  83. package/dist/application/modules/support/camera/camera.domain.d.ts +15 -15
  84. package/dist/application/modules/support/camera/camera.domain.js +1 -1
  85. package/dist/application/modules/support/camera/camera.types.d.ts +42 -42
  86. package/dist/application/modules/support/camera/camera.types.js +10 -10
  87. package/dist/application/modules/support/camera/camera.utils.d.ts +157 -157
  88. package/dist/application/modules/support/camera/camera.utils.js +623 -623
  89. package/dist/application/modules/support/camera/index.d.ts +24 -24
  90. package/dist/application/modules/support/camera/index.js +27 -27
  91. package/dist/application/modules/support/camera/services/BaseCameraService.d.ts +41 -41
  92. package/dist/application/modules/support/camera/services/BaseCameraService.js +278 -278
  93. package/dist/application/modules/support/camera/services/DesktopCameraService.d.ts +5 -5
  94. package/dist/application/modules/support/camera/services/DesktopCameraService.js +46 -46
  95. package/dist/application/modules/support/camera/services/FirefoxCameraService.d.ts +5 -5
  96. package/dist/application/modules/support/camera/services/FirefoxCameraService.js +46 -46
  97. package/dist/application/modules/support/camera/services/MacSafariCameraService.d.ts +5 -5
  98. package/dist/application/modules/support/camera/services/MacSafariCameraService.js +47 -47
  99. package/dist/application/modules/support/camera/services/MobileCameraService.d.ts +5 -5
  100. package/dist/application/modules/support/camera/services/MobileCameraService.js +133 -133
  101. package/dist/application/modules/support/engine/EngineService.d.ts +15 -0
  102. package/dist/application/modules/support/engine/EngineService.js +106 -0
  103. package/dist/application/modules/support/engine/EngineService.js.map +1 -0
  104. package/dist/application/modules/support/engine/engine.constants.d.ts +33 -0
  105. package/dist/application/modules/support/engine/engine.constants.js +35 -0
  106. package/dist/application/modules/support/engine/engine.constants.js.map +1 -0
  107. package/dist/application/modules/support/engine/engine.domain.d.ts +23 -0
  108. package/dist/application/modules/support/engine/engine.domain.js +2 -0
  109. package/dist/application/modules/support/engine/engine.domain.js.map +1 -0
  110. package/dist/application/modules/support/engine/engine.types.d.ts +32 -0
  111. package/dist/application/modules/support/engine/engine.types.js +2 -0
  112. package/dist/application/modules/support/engine/engine.types.js.map +1 -0
  113. package/dist/application/modules/support/engine/engine.utils.d.ts +65 -0
  114. package/dist/application/modules/support/engine/engine.utils.js +135 -0
  115. package/dist/application/modules/support/engine/engine.utils.js.map +1 -0
  116. package/dist/application/modules/support/engine/index.d.ts +3 -0
  117. package/dist/application/modules/support/engine/index.js +2 -0
  118. package/dist/application/modules/support/engine/index.js.map +1 -0
  119. package/dist/application/modules/support/permissions/PermissionsService.d.ts +55 -55
  120. package/dist/application/modules/support/permissions/PermissionsService.js +183 -183
  121. package/dist/application/modules/support/permissions/index.d.ts +4 -4
  122. package/dist/application/modules/support/permissions/index.js +2 -2
  123. package/dist/application/modules/support/permissions/permission.utils.d.ts +6 -6
  124. package/dist/application/modules/support/permissions/permission.utils.js +33 -33
  125. package/dist/application/modules/support/permissions/permissions.domain.d.ts +6 -6
  126. package/dist/application/modules/support/permissions/permissions.domain.js +1 -1
  127. package/dist/application/modules/support/permissions/permissions.types.d.ts +9 -9
  128. package/dist/application/modules/support/permissions/permissions.types.js +1 -1
  129. package/dist/application/modules/support/wasm/WasmService.d.ts +25 -25
  130. package/dist/application/modules/support/wasm/WasmService.js +156 -155
  131. package/dist/application/modules/support/wasm/WasmService.js.map +1 -1
  132. package/dist/application/modules/support/wasm/index.d.ts +6 -6
  133. package/dist/application/modules/support/wasm/index.js +8 -8
  134. package/dist/application/modules/support/wasm/wasm.constants.d.ts +78 -78
  135. package/dist/application/modules/support/wasm/wasm.constants.js +86 -86
  136. package/dist/application/modules/support/wasm/wasm.domain.d.ts +52 -52
  137. package/dist/application/modules/support/wasm/wasm.domain.js +1 -1
  138. package/dist/application/modules/support/wasm/wasm.types.d.ts +119 -118
  139. package/dist/application/modules/support/wasm/wasm.types.js +1 -1
  140. package/dist/application/modules/support/wasm/wasm.utils.d.ts +88 -88
  141. package/dist/application/modules/support/wasm/wasm.utils.js +243 -243
  142. package/dist/application/modules/support/wasm-orchestrator/WasmOrchestratorService.d.ts +28 -0
  143. package/dist/application/modules/support/wasm-orchestrator/WasmOrchestratorService.js +324 -0
  144. package/dist/application/modules/support/wasm-orchestrator/WasmOrchestratorService.js.map +1 -0
  145. package/dist/application/modules/support/wasm-orchestrator/index.d.ts +6 -0
  146. package/dist/application/modules/support/wasm-orchestrator/index.js +9 -0
  147. package/dist/application/modules/support/wasm-orchestrator/index.js.map +1 -0
  148. package/dist/application/modules/support/wasm-orchestrator/wasm-orchestrator.constants.d.ts +36 -0
  149. package/dist/application/modules/support/wasm-orchestrator/wasm-orchestrator.constants.js +44 -0
  150. package/dist/application/modules/support/wasm-orchestrator/wasm-orchestrator.constants.js.map +1 -0
  151. package/dist/application/modules/support/wasm-orchestrator/wasm-orchestrator.domain.d.ts +47 -0
  152. package/dist/application/modules/support/wasm-orchestrator/wasm-orchestrator.domain.js +2 -0
  153. package/dist/application/modules/support/wasm-orchestrator/wasm-orchestrator.domain.js.map +1 -0
  154. package/dist/application/modules/support/wasm-orchestrator/wasm-orchestrator.types.d.ts +136 -0
  155. package/dist/application/modules/support/wasm-orchestrator/wasm-orchestrator.types.js +2 -0
  156. package/dist/application/modules/support/wasm-orchestrator/wasm-orchestrator.types.js.map +1 -0
  157. package/dist/application/modules/support/wasm-orchestrator/wasm-orchestrator.utils.d.ts +91 -0
  158. package/dist/application/modules/support/wasm-orchestrator/wasm-orchestrator.utils.js +250 -0
  159. package/dist/application/modules/support/wasm-orchestrator/wasm-orchestrator.utils.js.map +1 -0
  160. package/dist/application/workers/index.d.ts +42 -42
  161. package/dist/application/workers/index.js +8 -8
  162. package/dist/application/workers/wasm/WasmWorkerService.d.ts +66 -0
  163. package/dist/application/workers/wasm/WasmWorkerService.js +801 -0
  164. package/dist/application/workers/wasm/WasmWorkerService.js.map +1 -0
  165. package/dist/application/workers/wasm/index.d.ts +4 -0
  166. package/dist/application/workers/wasm/index.js +9 -0
  167. package/dist/application/workers/wasm/index.js.map +1 -0
  168. package/dist/application/workers/wasm/wasm-worker.constants.d.ts +5 -0
  169. package/dist/application/workers/wasm/wasm-worker.constants.js +6 -0
  170. package/dist/application/workers/wasm/wasm-worker.constants.js.map +1 -0
  171. package/dist/application/workers/wasm/wasm-worker.domain.d.ts +99 -0
  172. package/dist/application/workers/wasm/wasm-worker.domain.js +2 -0
  173. package/dist/application/workers/wasm/wasm-worker.domain.js.map +1 -0
  174. package/dist/application/workers/wasm/wasm-worker.types.d.ts +88 -0
  175. package/dist/application/workers/wasm/wasm-worker.types.js +2 -0
  176. package/dist/application/workers/wasm/wasm-worker.types.js.map +1 -0
  177. package/dist/application/workers/wasm/wasm-worker.utils.d.ts +10 -0
  178. package/dist/application/workers/wasm/wasm-worker.utils.js +130 -0
  179. package/dist/application/workers/wasm/wasm-worker.utils.js.map +1 -0
  180. package/dist/buildConfig.d.ts +3 -0
  181. package/dist/buildConfig.js +7 -0
  182. package/dist/buildConfig.js.map +1 -0
  183. package/dist/cameraUtils.d.ts +77 -77
  184. package/dist/cameraUtils.js +361 -361
  185. package/dist/constants.d.ts +9 -9
  186. package/dist/constants.js +13 -13
  187. package/dist/createCallback.d.ts +56 -56
  188. package/dist/createCallback.js +332 -331
  189. package/dist/createCallback.js.map +1 -1
  190. package/dist/dbUtils.d.ts +14 -14
  191. package/dist/dbUtils.js +148 -148
  192. package/dist/envUtils.d.ts +4 -4
  193. package/dist/envUtils.js +16 -16
  194. package/dist/faceModule.d.ts +196 -196
  195. package/dist/faceModule.js +978 -978
  196. package/dist/featureFlagInit.d.ts +11 -0
  197. package/dist/featureFlagInit.js +44 -0
  198. package/dist/featureFlagInit.js.map +1 -0
  199. package/dist/index.d.ts +38 -38
  200. package/dist/index.js +82 -82
  201. package/dist/main.d.ts +30 -30
  202. package/dist/main.js +84 -84
  203. package/dist/types.d.ts +139 -139
  204. package/dist/types.js +77 -77
  205. package/dist/utils.d.ts +84 -84
  206. package/dist/utils.js +580 -580
  207. package/package.json +102 -102
  208. package/wasm/ultra/nosimd/{25.11.13-1357710 → 26.01.08-1300478}/privid_fhe_uber.js +18 -18
  209. package/wasm/ultra/nosimd/{25.11.13-1357710 → 26.01.08-1300478}/privid_fhe_uber.wasm +0 -0
  210. package/wasm/ultra/nosimd/version.json +2 -2
  211. package/wasm/ultra/simd/{25.11.13-1357710 → 26.01.08-1300478}/privid_fhe_uber.js +18 -18
  212. package/wasm/ultra/simd/{25.11.13-1357710 → 26.01.08-1300478}/privid_fhe_uber.wasm +0 -0
  213. package/wasm/ultra/simd/version.json +2 -2
  214. package/workers/comlink.min.js +7 -7
  215. package/workers/comlink.min.js.map +1 -1
  216. package/workers/wasm.worker.js +936 -924
@@ -0,0 +1,801 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ /* eslint-disable no-underscore-dangle */
11
+ /* eslint-disable lines-between-class-members */
12
+ /* eslint-disable import/prefer-default-export */
13
+ import { expose } from 'comlink';
14
+ import { printLogs } from '../../modules/internal/shared/shared.utils';
15
+ import { checkCacheAndCurrentAreSameVersion, fetchResource, flatImageDataArraysIntoUint8Array, readCurrentWasmVersion, readFromIndexedDB, removeNullBytesFromDecodedString, writeToIndexedDB, } from './wasm-worker.utils';
16
+ import { WASM_ULTRA_FOLDER_NAME } from './wasm-worker.constants';
17
+ const callbackRegistry = {
18
+ result: null,
19
+ error: null,
20
+ progress: null,
21
+ wasmCropping: null,
22
+ };
23
+ // Set up the global WASM callbacks once at module level
24
+ // These MUST be on globalThis for WASM to find them (due to IIFE build format)
25
+ // In WasmWorkerService.ts, update the globalThis.privid_wasm_result function (around line 43)
26
+ globalThis.privid_wasm_result = (operation, id, response_str) => {
27
+ if (callbackRegistry.result) {
28
+ try {
29
+ printLogs('[WasmWorkerService] privid_wasm_result called with operation:', operation);
30
+ printLogs('[WasmWorkerService] privid_wasm_result called with id:', id);
31
+ printLogs('[WasmWorkerService] privid_wasm_result called with response_str:', response_str);
32
+ callbackRegistry.result(operation, id, response_str);
33
+ }
34
+ catch (error) {
35
+ printLogs('[WasmWorkerService] Error in result callback:', error, 'ERROR');
36
+ }
37
+ }
38
+ else {
39
+ printLogs('[WasmWorkerService] No result callback registered', '', 'WARN');
40
+ }
41
+ };
42
+ globalThis.privid_wasm_error = (operation, id, error_str) => {
43
+ printLogs('[WasmWorkerService] privid_wasm_error called:', { operation, id, error_str }, 'ERROR');
44
+ if (callbackRegistry.error) {
45
+ try {
46
+ callbackRegistry.error(operation, id, error_str);
47
+ }
48
+ catch (error) {
49
+ printLogs('[WasmWorkerService] Error in error callback:', error, 'ERROR');
50
+ }
51
+ }
52
+ else {
53
+ printLogs('[WasmWorkerService] No error callback registered', '', 'WARN');
54
+ }
55
+ };
56
+ globalThis.privid_wasm_progress = (progress_type, message, progress_value) => {
57
+ printLogs('[WasmWorkerService] privid_wasm_progress called:', { progress_type, message, progress_value });
58
+ if (callbackRegistry.progress) {
59
+ try {
60
+ callbackRegistry.progress(progress_type, message, progress_value);
61
+ }
62
+ catch (error) {
63
+ printLogs('[WasmWorkerService] Error in progress callback:', error, 'ERROR');
64
+ }
65
+ }
66
+ };
67
+ globalThis.privid_wasm_cropping = (base64Image) => {
68
+ printLogs('[WasmWorkerService] privid_wasm_cropping called', base64Image);
69
+ if (callbackRegistry.wasmCropping) {
70
+ try {
71
+ callbackRegistry.wasmCropping(base64Image);
72
+ }
73
+ catch (error) {
74
+ printLogs('[WasmWorkerService] Error in wasmCropping callback:', error, 'ERROR');
75
+ }
76
+ }
77
+ };
78
+ export class WasmWorkerService {
79
+ constructor() {
80
+ this.wasmPrividModules = null;
81
+ this.apiUrl = null;
82
+ this.sessionToken = null;
83
+ this.publicKey = null;
84
+ this.debugType = null;
85
+ this.inputPtr = null;
86
+ this.imageInputSize = null;
87
+ this.barCodePtr = null;
88
+ this.proxiedResultCallback = null;
89
+ this.proxiedErrorCallback = null;
90
+ this.proxiedProgressCallback = null;
91
+ this.wasmSession = null;
92
+ this.setCache = true;
93
+ this.checkWasmLoaded = false;
94
+ this.antispoofVersion = null;
95
+ this.cdnUrl = 'https://ultra-wasm.devel.privateid.com';
96
+ this.useCdnLink = true;
97
+ this.isSimd = null;
98
+ }
99
+ loadModules(params, errorCallback, progressCallback) {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ this.proxiedErrorCallback = errorCallback;
102
+ callbackRegistry.error = errorCallback;
103
+ this.proxiedProgressCallback = progressCallback;
104
+ callbackRegistry.progress = progressCallback;
105
+ this.apiUrl = params.apiUrl;
106
+ this.sessionToken = params.sessionToken;
107
+ this.publicKey = params.publicKey;
108
+ this.useCdnLink = params.useCdn;
109
+ this.setCache = params.cacheConfig;
110
+ this.isSimd = params.simd;
111
+ if (params.debugType) {
112
+ this.debugType = params.debugType;
113
+ }
114
+ printLogs('[WasmWorkerService] isLoad params: ', params);
115
+ const modulePath = params.simd ? 'simd' : 'nosimd';
116
+ const moduleName = 'privid_fhe_ultra';
117
+ const cachedModule = yield readFromIndexedDB(WASM_ULTRA_FOLDER_NAME);
118
+ const currentModuleVersionJSON = yield readCurrentWasmVersion(modulePath);
119
+ if (checkCacheAndCurrentAreSameVersion(cachedModule, currentModuleVersionJSON)) {
120
+ printLogs('[WasmWorkerService] same version confirmed', '');
121
+ printLogs('[WasmWorkerService] PRIVMODULES LOADED?: ', this.wasmPrividModules);
122
+ if (!this.wasmPrividModules) {
123
+ const { cachedWasm, cachedScript } = cachedModule;
124
+ if (cachedWasm && cachedScript) {
125
+ const blob = new Blob([cachedScript], { type: 'application/javascript' });
126
+ const blobUrl = URL.createObjectURL(blob);
127
+ try {
128
+ // Import the cached script using importScripts
129
+ importScripts(blobUrl);
130
+ // Check if createTFLiteModule is now available
131
+ if (typeof createTFLiteModule === 'undefined') {
132
+ printLogs('[WasmWorkerService] createTFLiteModule not defined, falling back to package', '', 'WARN');
133
+ yield this.loadFromPackage(currentModuleVersionJSON.version, modulePath, moduleName, params.usageScenario, params.cacheContent);
134
+ return 'Loaded from package (cache invalid)';
135
+ }
136
+ this.wasmPrividModules = yield createTFLiteModule({ wasmBinary: cachedWasm });
137
+ printLogs('[WasmWorkerService] ULTRA MODULES ', this.wasmPrividModules);
138
+ if (!this.checkWasmLoaded) {
139
+ yield this.initializeWasmSession(params.usageScenario, params.cacheContent);
140
+ this.checkWasmLoaded = true;
141
+ }
142
+ printLogs('[WasmWorkerService] WASM MODULES: ', this.wasmPrividModules);
143
+ }
144
+ catch (error) {
145
+ printLogs('[WasmWorkerService] Error loading from cache:', error, 'ERROR');
146
+ yield this.loadFromPackage(currentModuleVersionJSON.version, modulePath, moduleName, params.usageScenario, params.cacheContent);
147
+ return 'Loaded from package (cache error)';
148
+ }
149
+ finally {
150
+ // Clean up the blob URL
151
+ URL.revokeObjectURL(blobUrl);
152
+ }
153
+ }
154
+ }
155
+ else if (this.wasmPrividModules && params.shouldRegenerateSession) {
156
+ this.wasmSession = null;
157
+ const newSession = yield this.initializeWasmSession(params.usageScenario, params.cacheContent);
158
+ if (!newSession) {
159
+ printLogs('[WasmWorkerService] ERROR: Failed to regenerate session', '', 'ERROR');
160
+ throw new Error('Session regeneration failed');
161
+ }
162
+ }
163
+ else {
164
+ yield this.loadFromPackage(currentModuleVersionJSON.version, modulePath, moduleName, params.usageScenario, params.cacheContent);
165
+ return 'Loaded';
166
+ }
167
+ // Final verification that WASM is fully initialized
168
+ if (!this.wasmPrividModules || !this.wasmSession) {
169
+ const error = 'WASM modules loaded but session not initialized';
170
+ printLogs(`[WasmWorkerService] ERROR: ${error}`, '', 'ERROR');
171
+ throw new Error(error);
172
+ }
173
+ return 'Cache Loaded';
174
+ }
175
+ yield this.loadFromPackage(currentModuleVersionJSON.version, modulePath, moduleName, params.usageScenario, params.cacheContent);
176
+ // Final verification that WASM is fully initialized
177
+ if (!this.wasmPrividModules || !this.wasmSession) {
178
+ const error = 'WASM modules loaded but session not initialized';
179
+ printLogs(`[WasmWorkerService] ERROR: ${error}`, '', 'ERROR');
180
+ throw new Error(error);
181
+ }
182
+ return 'Loaded';
183
+ });
184
+ }
185
+ loadFromPackage(wasmVersion, modulePath, moduleName, usageScenario, cache_content) {
186
+ return __awaiter(this, void 0, void 0, function* () {
187
+ printLogs('[WasmWorkerService loadFromPackage wasmVersion: ', wasmVersion);
188
+ this.wasmPrividModules = yield this.loadWasmModule(modulePath, moduleName, true, wasmVersion);
189
+ if (!this.checkWasmLoaded) {
190
+ yield this.initializeWasmSession(usageScenario, cache_content);
191
+ this.checkWasmLoaded = true;
192
+ }
193
+ return true;
194
+ });
195
+ }
196
+ loadWasmModule(modulePath, moduleName, saveCache, version) {
197
+ return __awaiter(this, void 0, void 0, function* () {
198
+ const wasmUrls = {
199
+ cdn: `${this.cdnUrl}/${WASM_ULTRA_FOLDER_NAME}/${modulePath}/${version}/${moduleName}.wasm`,
200
+ local: `../wasm/${WASM_ULTRA_FOLDER_NAME}/${modulePath}/${version}/${moduleName}.wasm`,
201
+ };
202
+ const scriptUrls = {
203
+ cdn: `${this.cdnUrl}/${WASM_ULTRA_FOLDER_NAME}/${modulePath}/${version}/${moduleName}.js`,
204
+ local: `../wasm/${WASM_ULTRA_FOLDER_NAME}/${modulePath}/${version}/${moduleName}.js`,
205
+ };
206
+ const wasm = yield fetchResource(wasmUrls, this.useCdnLink);
207
+ const script = yield fetchResource(scriptUrls, this.useCdnLink);
208
+ const scriptBuffer = yield script.text();
209
+ const buffer = yield wasm.arrayBuffer();
210
+ printLogs(`[WasmWorkerService] loadWasmModule script and buffer': `, { scriptBuffer, buffer });
211
+ const blob = new Blob([scriptBuffer], { type: 'application/javascript' });
212
+ const blobUrl = URL.createObjectURL(blob);
213
+ try {
214
+ // Import the script in the worker context using importScripts
215
+ importScripts(blobUrl);
216
+ // Check if createTFLiteModule is now available
217
+ if (typeof createTFLiteModule === 'undefined') {
218
+ throw new Error('createTFLiteModule not defined after loading script');
219
+ }
220
+ // Now createTFLiteModule should be available globally
221
+ const module = yield createTFLiteModule({ wasmBinary: buffer });
222
+ printLogs('[WasmWorkerService] loadWasmModule module: ', module);
223
+ if (saveCache) {
224
+ const moduleVersion = module.UTF8ToString(module._privid_get_version());
225
+ yield writeToIndexedDB(WASM_ULTRA_FOLDER_NAME, buffer, scriptBuffer, moduleVersion);
226
+ }
227
+ return module;
228
+ }
229
+ catch (error) {
230
+ printLogs('[WasmWorkerService] Error loading WASM module:', error, 'ERROR');
231
+ throw error;
232
+ }
233
+ finally {
234
+ // Clean up the blob URL to free memory
235
+ URL.revokeObjectURL(blobUrl);
236
+ }
237
+ });
238
+ }
239
+ initializeWasmSession(usageScenario = '', cache_content = '') {
240
+ return __awaiter(this, void 0, void 0, function* () {
241
+ if (this.wasmSession) {
242
+ return this.wasmSession;
243
+ }
244
+ const settings = Object.assign(Object.assign({}, this.apiUrl), { session_token: this.sessionToken, public_key: this.publicKey, debug_level: this.debugType, custom_settings: { usage_scenario: usageScenario, cache_content } });
245
+ printLogs(`[WasmWorkerService] initializeWasmSession settings:`, settings);
246
+ const resultPointers = this.createWasmResultPointers();
247
+ const stringBuffer = this.createStringBuffer(JSON.stringify(settings));
248
+ const isSessionInitialized = this.wasmPrividModules._privid_initialize_session(...stringBuffer.getArgs(), resultPointers.getOuterPointer());
249
+ printLogs(`[WasmWorkerService] initializeWasmSession isSessionInitialized: `, isSessionInitialized);
250
+ stringBuffer.free();
251
+ const isLoadedModels = this.checkModelsAreLoaded();
252
+ printLogs(`[WasmWorkerService] initializeWasmSession isLoadedModels: `, isLoadedModels);
253
+ if (!isSessionInitialized) {
254
+ printLogs('[WasmWorkerService] ERROR: privid_initialize_session failed', '', 'ERROR');
255
+ printLogs('[WasmWorkerService] Settings were:', settings, 'ERROR');
256
+ return null;
257
+ }
258
+ const wasmSessionPointer = resultPointers.getInnerPointer();
259
+ this.wasmSession = wasmSessionPointer;
260
+ printLogs(`[WasmWorkerService] initializeWasmSession wasmSessionPointer: `, wasmSessionPointer);
261
+ return wasmSessionPointer;
262
+ });
263
+ }
264
+ ultraEnroll(params, resultCallback) {
265
+ return __awaiter(this, void 0, void 0, function* () {
266
+ callbackRegistry.result = resultCallback;
267
+ if (!this.wasmPrividModules) {
268
+ yield this.loadModules({
269
+ simd: params.simd,
270
+ apiUrl: this.apiUrl,
271
+ sessionToken: this.sessionToken,
272
+ publicKey: this.publicKey,
273
+ debugType: this.debugType || '',
274
+ cacheConfig: this.setCache,
275
+ }, this.proxiedErrorCallback);
276
+ }
277
+ if (!this.wasmPrividModules || !this.wasmSession) {
278
+ printLogs('[WasmWorkerService] ultraEnroll error: WASM not fully initialized', '', 'ERROR');
279
+ return false;
280
+ }
281
+ const imageInputSize = params.imageData.data.length * params.imageData.data.BYTES_PER_ELEMENT;
282
+ const imageInputPtr = this.allocatePointer(imageInputSize);
283
+ // TODO: @pahferreira - what does this line do?
284
+ this.wasmPrividModules.HEAPU8.set(new Uint8Array(params.imageData.data), imageInputPtr);
285
+ const resultFirstPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
286
+ const resultLenPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
287
+ const encoder = new TextEncoder();
288
+ const config_bytes = encoder.encode(`${params.config}`);
289
+ const configInputSize = config_bytes.length;
290
+ const configInputPtr = this.allocatePointer(configInputSize);
291
+ // TODO: @pahferreira - what does this line do?
292
+ this.wasmPrividModules.HEAP8.set(config_bytes, configInputPtr / config_bytes.BYTES_PER_ELEMENT);
293
+ printLogs('[WasmWorkerService] ultraEnroll config: ', params.config);
294
+ try {
295
+ this.wasmPrividModules._privid_user_enroll(this.wasmSession /* session pointer */, configInputPtr, configInputSize, imageInputPtr /* input images */, params.imageData.width /* width of one image */, params.imageData.height /* height of one image */, resultFirstPtr /* operation result output buffer */, resultLenPtr /* operation result buffer length */);
296
+ return true;
297
+ }
298
+ catch (error) {
299
+ printLogs(`[WasmWorkerService] ultraEnroll error: `, error, 'ERROR');
300
+ return false;
301
+ }
302
+ finally {
303
+ this.releasePointers(imageInputPtr, resultFirstPtr, resultLenPtr, configInputPtr);
304
+ }
305
+ });
306
+ }
307
+ ultraPredict(params, resultCallback, onAntiSpoofProgress) {
308
+ return __awaiter(this, void 0, void 0, function* () {
309
+ callbackRegistry.result = resultCallback;
310
+ if (onAntiSpoofProgress) {
311
+ callbackRegistry.progress = onAntiSpoofProgress;
312
+ }
313
+ if (!this.wasmPrividModules) {
314
+ yield this.loadModules({
315
+ simd: params.simd,
316
+ apiUrl: this.apiUrl,
317
+ sessionToken: this.sessionToken,
318
+ publicKey: this.publicKey,
319
+ debugType: this.debugType || '',
320
+ cacheConfig: this.setCache,
321
+ }, this.proxiedErrorCallback);
322
+ }
323
+ if (!this.wasmPrividModules || !this.wasmSession) {
324
+ printLogs('[WasmWorkerService] ultraPredict error: WASM not fully initialized', '', 'ERROR');
325
+ return false;
326
+ }
327
+ const imageInput = flatImageDataArraysIntoUint8Array(params.originalImages);
328
+ const encoder = new TextEncoder();
329
+ const configBytes = encoder.encode(params.config);
330
+ const configInputSize = configBytes.length;
331
+ const configInputPtr = this.allocatePointer(configInputSize);
332
+ this.wasmPrividModules.HEAP8.set(configBytes, configInputPtr / configBytes.BYTES_PER_ELEMENT);
333
+ const imageInputSize = imageInput.length * imageInput.BYTES_PER_ELEMENT;
334
+ const imageInputPtr = this.allocatePointer(imageInputSize);
335
+ this.wasmPrividModules.HEAPU8.set(new Uint8Array(imageInput), imageInputPtr);
336
+ const resultFirstPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
337
+ const resultLenPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
338
+ printLogs('[WasmWorkerService] ultraPredict config: ', params.config);
339
+ try {
340
+ this.wasmPrividModules._privid_user_predict(this.wasmSession /* session pointer */, configInputPtr, configInputSize, imageInputPtr /* input images */, params.originalImages[0].width /* width of one image */, params.originalImages[0].height /* height of one image */, resultFirstPtr /* operation result output buffer */, resultLenPtr /* operation result buffer length */);
341
+ return true;
342
+ }
343
+ catch (error) {
344
+ printLogs('[WasmWorkerService] ultraPredict error:', error, 'ERROR');
345
+ return false;
346
+ }
347
+ finally {
348
+ this.releasePointers(imageInputPtr, resultFirstPtr, resultLenPtr, configInputPtr);
349
+ }
350
+ });
351
+ }
352
+ ultraAgeEstimate(params, resultCallback, onAntiSpoofProgress, onWasmCroppingCallback) {
353
+ return __awaiter(this, void 0, void 0, function* () {
354
+ callbackRegistry.result = resultCallback;
355
+ if (onAntiSpoofProgress) {
356
+ callbackRegistry.progress = onAntiSpoofProgress;
357
+ }
358
+ if (onWasmCroppingCallback) {
359
+ callbackRegistry.wasmCropping = onWasmCroppingCallback;
360
+ }
361
+ if (!this.wasmPrividModules) {
362
+ yield this.loadModules({
363
+ simd: params.simd,
364
+ apiUrl: this.apiUrl,
365
+ sessionToken: this.sessionToken,
366
+ publicKey: this.publicKey,
367
+ debugType: this.debugType || '',
368
+ cacheConfig: this.setCache,
369
+ }, this.proxiedErrorCallback);
370
+ }
371
+ if (!this.wasmPrividModules || !this.wasmSession) {
372
+ printLogs('[WasmWorkerService] ultraAgeEstimate error: WASM not fully initialized', '', 'ERROR');
373
+ return false;
374
+ }
375
+ const imageInput = flatImageDataArraysIntoUint8Array(params.originalImages);
376
+ const encoder = new TextEncoder();
377
+ const configBytes = encoder.encode(params.config);
378
+ const configInputSize = configBytes.length;
379
+ const configInputPtr = this.allocatePointer(configInputSize);
380
+ this.wasmPrividModules.HEAP8.set(configBytes, configInputPtr / configBytes.BYTES_PER_ELEMENT);
381
+ const imageInputSize = imageInput.length * imageInput.BYTES_PER_ELEMENT;
382
+ const imageInputPtr = this.allocatePointer(imageInputSize);
383
+ this.wasmPrividModules.HEAPU8.set(new Uint8Array(imageInput), imageInputPtr);
384
+ const resultFirstPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
385
+ const resultLenPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
386
+ printLogs('[WasmWorkerService] ultraAgeEstimate config: ', params.config);
387
+ try {
388
+ this.wasmPrividModules._privid_estimate_age(this.wasmSession /* session pointer */, configInputPtr, configInputSize, imageInputPtr /* input images */, params.originalImages[0].width /* width of one image */, params.originalImages[0].height /* height of one image */, resultFirstPtr /* operation result output buffer */, resultLenPtr /* operation result buffer length */);
389
+ return true;
390
+ }
391
+ catch (error) {
392
+ printLogs(`[WasmWorkerService] ultraAgeEstimate error: `, error, 'ERROR');
393
+ return false;
394
+ }
395
+ finally {
396
+ this.releasePointers(imageInputPtr, resultFirstPtr, resultLenPtr, configInputPtr);
397
+ }
398
+ });
399
+ }
400
+ ultraCompareEmbeddings(params, resultCallback) {
401
+ return __awaiter(this, void 0, void 0, function* () {
402
+ callbackRegistry.result = resultCallback;
403
+ if (!this.wasmPrividModules) {
404
+ yield this.loadModules({
405
+ simd: true,
406
+ apiUrl: this.apiUrl,
407
+ sessionToken: this.sessionToken,
408
+ publicKey: this.publicKey,
409
+ debugType: this.debugType || '',
410
+ cacheConfig: this.setCache,
411
+ }, this.proxiedErrorCallback);
412
+ }
413
+ if (!this.wasmPrividModules || !this.wasmSession) {
414
+ printLogs('[WasmWorkerService] ultraCompareEmbeddings error: WASM not fully initialized', '', 'ERROR');
415
+ return false;
416
+ }
417
+ const encoder = new TextEncoder();
418
+ const configBytes = encoder.encode(params.config);
419
+ const configInputSize = configBytes.length;
420
+ const configInputPtr = this.allocatePointer(configInputSize);
421
+ this.wasmPrividModules.HEAP8.set(configBytes, configInputPtr / configBytes.BYTES_PER_ELEMENT);
422
+ const embeddingsABytes = encoder.encode(`${params.encryptedEmbeddingsA}`);
423
+ const embeddingsASize = embeddingsABytes.length;
424
+ const embeddingsAPtr = this.allocatePointer(embeddingsASize);
425
+ this.wasmPrividModules.HEAPU8.set(new Uint8Array(embeddingsABytes), embeddingsAPtr);
426
+ const embeddingsBBytes = encoder.encode(`${params.encryptedEmbeddingsB}`);
427
+ const embeddingsBSize = embeddingsBBytes.length;
428
+ const embeddingsBPtr = this.allocatePointer(embeddingsBSize);
429
+ this.wasmPrividModules.HEAPU8.set(new Uint8Array(embeddingsBBytes), embeddingsBPtr);
430
+ const resultFirstPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
431
+ const resultLenPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
432
+ printLogs('[WasmWorkerService] ultraCompareEmbeddings config: ', params.config);
433
+ try {
434
+ this.wasmPrividModules._privid_compare_embeddings(this.wasmSession /* session pointer */, configInputPtr, configInputSize, embeddingsAPtr, embeddingsASize, embeddingsBPtr, embeddingsBSize, resultFirstPtr /* operation result output buffer */, resultLenPtr /* operation result buffer length */);
435
+ return true;
436
+ }
437
+ catch (error) {
438
+ printLogs('[WasmWorkerService] ultraCompareEmbeddings error:', error, 'ERROR');
439
+ return false;
440
+ }
441
+ finally {
442
+ this.releasePointers(embeddingsAPtr, embeddingsBPtr, resultFirstPtr, resultLenPtr, configInputPtr);
443
+ }
444
+ });
445
+ }
446
+ pkiEncrypt(params) {
447
+ if (!this.wasmPrividModules || !this.wasmSession) {
448
+ return { error: true };
449
+ }
450
+ const encoder = new TextEncoder();
451
+ const payloadBytes = encoder.encode(params.payload);
452
+ const payloadSize = payloadBytes.length;
453
+ const payloadPtr = this.allocatePointer(payloadSize);
454
+ const resultFirstPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
455
+ const resultLenPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
456
+ this.wasmPrividModules.HEAP8.set(payloadBytes, payloadPtr / payloadBytes.BYTES_PER_ELEMENT);
457
+ const configBytes = encoder.encode(params.config);
458
+ const configInputSize = configBytes.length;
459
+ const configInputPtr = this.allocatePointer(configInputSize);
460
+ this.wasmPrividModules.HEAP8.set(configBytes, configInputPtr / configBytes.BYTES_PER_ELEMENT);
461
+ printLogs('[WasmWorkerService] pkiEncrypt params: ', params);
462
+ try {
463
+ this.wasmPrividModules._privid_encrypt_payload(this.wasmSession /* session pointer */, configInputPtr, configInputSize, payloadPtr, payloadSize, resultFirstPtr /* operation result output buffer */, resultLenPtr /* operation result buffer length */);
464
+ const [outputBufferSizes] = new Uint32Array(this.wasmPrividModules.HEAPU8.buffer, resultLenPtr, 1);
465
+ if (outputBufferSizes > 0) {
466
+ const outputBufferSize = new Uint32Array(this.wasmPrividModules.HEAPU8.buffer, resultLenPtr, 1)[0];
467
+ const outputBufferSecPtr = new Uint32Array(this.wasmPrividModules.HEAPU8.buffer, resultFirstPtr, 1)[0];
468
+ const outputBufferPtr = new Uint8Array(this.wasmPrividModules.HEAPU8.buffer, outputBufferSecPtr, outputBufferSize);
469
+ const decoder = new TextDecoder('utf-8');
470
+ const decode = decoder.decode(outputBufferPtr);
471
+ decode.replace(/\0/g, ''); // Remove null terminators if any
472
+ decode.replace(' ', '');
473
+ const result = removeNullBytesFromDecodedString(decode);
474
+ printLogs('[WasmWorkerService] pkiEncrypt result: ', result);
475
+ return result;
476
+ }
477
+ return {
478
+ error: true,
479
+ };
480
+ }
481
+ catch (error) {
482
+ printLogs('[WasmWorkerService] pkiEncrypt error:', error, 'ERROR');
483
+ return {
484
+ error: true,
485
+ };
486
+ }
487
+ finally {
488
+ this.releasePointers(payloadPtr, resultFirstPtr, resultLenPtr, configInputPtr);
489
+ }
490
+ }
491
+ ultraScanBackDocument(params, resultCallback) {
492
+ return __awaiter(this, void 0, void 0, function* () {
493
+ callbackRegistry.result = resultCallback;
494
+ if (!this.wasmPrividModules) {
495
+ yield this.loadModules({
496
+ simd: params.simd,
497
+ apiUrl: this.apiUrl,
498
+ sessionToken: this.sessionToken,
499
+ publicKey: this.publicKey,
500
+ debugType: this.debugType || '',
501
+ cacheConfig: this.setCache,
502
+ }, this.proxiedErrorCallback);
503
+ }
504
+ if (!this.wasmPrividModules || !this.wasmSession) {
505
+ printLogs('[WasmWorkerService] ultraScanBackDocument error: WASM not fully initialized', '', 'ERROR');
506
+ return false;
507
+ }
508
+ const encoder = new TextEncoder();
509
+ const configBytes = encoder.encode(params.config);
510
+ const configInputSize = configBytes.length;
511
+ const configInputPtr = this.allocatePointer(configInputSize);
512
+ this.wasmPrividModules.HEAP8.set(configBytes, configInputPtr / configBytes.BYTES_PER_ELEMENT);
513
+ const imageInputSize = params.imageInput.data.length * params.imageInput.data.BYTES_PER_ELEMENT;
514
+ const imageInputPtr = this.allocatePointer(imageInputSize);
515
+ this.wasmPrividModules.HEAPU8.set(new Uint8Array(params.imageInput.data), imageInputPtr);
516
+ const resultFirstPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
517
+ const resultLenPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
518
+ printLogs('[WasmWorkerService] ultraScanBackDocument config: ', params.config);
519
+ try {
520
+ this.wasmPrividModules._privid_doc_scan_back(this.wasmSession /* session pointer */, configInputPtr, configInputSize, imageInputPtr /* input images */, params.imageInput.width /* width of one image */, params.imageInput.height /* height of one image */, resultFirstPtr /* operation result output buffer */, resultLenPtr /* operation result buffer length */);
521
+ return true;
522
+ }
523
+ catch (error) {
524
+ printLogs('[WasmWorkerService] ultraScanBackDocument error:', error, 'ERROR');
525
+ return false;
526
+ }
527
+ finally {
528
+ this.releasePointers(imageInputPtr, resultFirstPtr, resultLenPtr, configInputPtr);
529
+ }
530
+ });
531
+ }
532
+ ultraScanFrontDocument(params, resultCallback) {
533
+ return __awaiter(this, void 0, void 0, function* () {
534
+ callbackRegistry.result = resultCallback;
535
+ if (!this.wasmPrividModules) {
536
+ yield this.loadModules({
537
+ simd: params.simd,
538
+ apiUrl: this.apiUrl,
539
+ sessionToken: this.sessionToken,
540
+ publicKey: this.publicKey,
541
+ debugType: this.debugType || '',
542
+ cacheConfig: this.setCache,
543
+ }, this.proxiedErrorCallback);
544
+ }
545
+ if (!this.wasmPrividModules || !this.wasmSession) {
546
+ printLogs('[WasmWorkerService] ultraScanFrontDocument error: WASM not fully initialized', '', 'ERROR');
547
+ return false;
548
+ }
549
+ const encoder = new TextEncoder();
550
+ const configBytes = encoder.encode(params.config);
551
+ const configInputSize = configBytes.length;
552
+ const configInputPtr = this.allocatePointer(configInputSize);
553
+ this.wasmPrividModules.HEAP8.set(configBytes, configInputPtr / configBytes.BYTES_PER_ELEMENT);
554
+ const imageInputSize = params.imageInput.data.length * params.imageInput.data.BYTES_PER_ELEMENT;
555
+ const imageInputPtr = this.allocatePointer(imageInputSize);
556
+ this.wasmPrividModules.HEAPU8.set(new Uint8Array(params.imageInput.data), imageInputPtr);
557
+ const resultFirstPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
558
+ const resultLenPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
559
+ printLogs('[WasmWorkerService] ultraScanFrontDocument config: ', params.config);
560
+ try {
561
+ this.wasmPrividModules._privid_doc_scan_front(this.wasmSession /* session pointer */, configInputPtr, configInputSize, imageInputPtr /* input images */, params.imageInput.width /* width of one image */, params.imageInput.height /* height of one image */, resultFirstPtr /* operation result output buffer */, resultLenPtr /* operation result buffer length */);
562
+ return true;
563
+ }
564
+ catch (error) {
565
+ printLogs('[WasmWorkerService] ultraScanFrontDocument error:', error, 'ERROR');
566
+ return false;
567
+ }
568
+ finally {
569
+ this.releasePointers(imageInputPtr, resultFirstPtr, resultLenPtr, configInputPtr);
570
+ }
571
+ });
572
+ }
573
+ ultraDocumentOcr(params, resultCallback) {
574
+ return __awaiter(this, void 0, void 0, function* () {
575
+ callbackRegistry.result = resultCallback;
576
+ if (!this.wasmPrividModules) {
577
+ yield this.loadModules({
578
+ simd: this.isSimd,
579
+ apiUrl: this.apiUrl,
580
+ sessionToken: this.sessionToken,
581
+ publicKey: this.publicKey,
582
+ debugType: this.debugType || '',
583
+ cacheConfig: this.setCache,
584
+ }, this.proxiedErrorCallback);
585
+ }
586
+ if (!this.wasmPrividModules || !this.wasmSession) {
587
+ printLogs('[WasmWorkerService] ultraDocumentOcr error: WASM not fully initialized', '', 'ERROR');
588
+ return false;
589
+ }
590
+ const encoder = new TextEncoder();
591
+ const configBytes = encoder.encode(params.config);
592
+ const inputImageBytes = encoder.encode(`${params.imageInput}`);
593
+ const configInputSize = configBytes.length;
594
+ const configInputPtr = this.allocatePointer(configInputSize);
595
+ this.wasmPrividModules.HEAP8.set(configBytes, configInputPtr / configBytes.BYTES_PER_ELEMENT);
596
+ const imageInputSize = inputImageBytes.length;
597
+ const imageInputPtr = this.allocatePointer(imageInputSize);
598
+ this.wasmPrividModules.HEAPU8.set(new Uint8Array(inputImageBytes), imageInputPtr);
599
+ const resultFirstPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
600
+ const resultLenPtr = this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);
601
+ printLogs('[WasmWorkerService] ultraDocumentOcr config: ', params.config);
602
+ try {
603
+ this.wasmPrividModules._privid_doc_ocr_front_enc(this.wasmSession /* session pointer */, configInputPtr, configInputSize, imageInputPtr /* input images */, imageInputSize, resultFirstPtr /* operation result output buffer */, resultLenPtr /* operation result buffer length */);
604
+ return true;
605
+ }
606
+ catch (error) {
607
+ printLogs('[WasmWorkerService] ultraDocumentOcr error:', error, 'ERROR');
608
+ return false;
609
+ }
610
+ finally {
611
+ this.releasePointers(imageInputPtr, resultFirstPtr, resultLenPtr, configInputPtr);
612
+ }
613
+ });
614
+ }
615
+ checkModelsAreLoaded() {
616
+ return __awaiter(this, void 0, void 0, function* () {
617
+ try {
618
+ if (!this.wasmPrividModules) {
619
+ yield this.loadModules({
620
+ simd: this.isSimd,
621
+ apiUrl: this.apiUrl,
622
+ sessionToken: this.sessionToken,
623
+ publicKey: this.publicKey,
624
+ debugType: this.debugType || '',
625
+ cacheConfig: this.setCache,
626
+ }, this.proxiedErrorCallback);
627
+ }
628
+ const isLoaded = this.wasmPrividModules._privid_check_models();
629
+ return isLoaded;
630
+ }
631
+ catch (error) {
632
+ printLogs(`[WasmWorkerService] checkModelsAreLoaded error`, error, 'ERROR');
633
+ return false;
634
+ }
635
+ });
636
+ }
637
+ freeMemory() {
638
+ return __awaiter(this, void 0, void 0, function* () {
639
+ try {
640
+ if (!this.wasmPrividModules) {
641
+ yield this.loadModules({
642
+ simd: this.isSimd,
643
+ apiUrl: this.apiUrl,
644
+ sessionToken: this.sessionToken,
645
+ publicKey: this.publicKey,
646
+ debugType: this.debugType || '',
647
+ cacheConfig: this.setCache,
648
+ }, this.proxiedErrorCallback);
649
+ }
650
+ const freeMemoryResult = this.wasmPrividModules._privid_free_memory();
651
+ return freeMemoryResult;
652
+ }
653
+ catch (error) {
654
+ printLogs(`[WasmWorkerService] freeMemory error: `, error, 'ERROR');
655
+ return false;
656
+ }
657
+ });
658
+ }
659
+ /**
660
+ * Creates pointers for WASM function results.
661
+ * This helper manages outer and inner pointers for functions that return results via pointer arguments.
662
+ *
663
+ * @returns Object with methods to get outer and inner pointers
664
+ */
665
+ createWasmResultPointers() {
666
+ // TODO: Should we manipulate multiple pointers in Javascript?
667
+ let out_ptr = null;
668
+ let in_ptr = null;
669
+ return {
670
+ /**
671
+ * @brief Allocates a pointer to contain the result and return it,
672
+ * if the container is already created it will be returned
673
+ */
674
+ getOuterPointer: () => {
675
+ // TODO: may be used SharedArrayBuffer() instead
676
+ // allocate memory the expected pointer (outer pointer or container)
677
+ if (!out_ptr)
678
+ out_ptr = this.wasmPrividModules._malloc(Int32Array.BYTES_PER_ELEMENT);
679
+ return out_ptr;
680
+ },
681
+ /**
682
+ * @brief Creates a javascript Uint32Array pointer to contain the result pointed by outer_ptr and return it,
683
+ * It is the responsability of the caller to free the pointer returned by this function
684
+ */
685
+ getInnerPointer: () => {
686
+ // If we did not allocate yet the output buffer return null
687
+ if (!out_ptr)
688
+ return null;
689
+ // if we already have our inner pointer for this closure return it
690
+ if (in_ptr)
691
+ return in_ptr;
692
+ // Access the outer pointer as an arry of uint32 which conatin a single cell
693
+ // whose value is the pointer allocated in the wasm module (inner pointer of the output param)
694
+ // and return it
695
+ [in_ptr] = new Uint32Array(this.wasmPrividModules.HEAPU8.buffer, out_ptr, 1);
696
+ return in_ptr;
697
+ },
698
+ };
699
+ }
700
+ /**
701
+ * Creates a managed string buffer for WASM function calls.
702
+ * This helper allocates WASM memory for string arguments and provides automatic cleanup.
703
+ * It converts JavaScript strings to UTF-8 encoded bytes that can be passed to WASM functions.
704
+ *
705
+ * @param text - The string value to encode (null/undefined will result in [0, 0] args)
706
+ * @returns Object with methods to get pointer arguments and free memory
707
+
708
+ */
709
+ createStringBuffer(text) {
710
+ let memoryPointer = null;
711
+ let bufferSize = 0;
712
+ let cachedArgs = null;
713
+ return {
714
+ /**
715
+ * Gets the [pointer, size] tuple for WASM function arguments.
716
+ * Results are cached - subsequent calls return the same values.
717
+ * @returns [pointer, size] tuple or [0, 0] for null/undefined input
718
+ */
719
+ getArgs: () => {
720
+ // Return cached result if already computed
721
+ if (cachedArgs !== null) {
722
+ return cachedArgs;
723
+ }
724
+ // Handle null, undefined, or NaN cases
725
+ if (text == null || (typeof text === 'number' && Number.isNaN(text))) {
726
+ cachedArgs = [0, 0];
727
+ return cachedArgs;
728
+ }
729
+ try {
730
+ // Convert to string and encode to UTF-8
731
+ const stringValue = String(text);
732
+ const encoder = new TextEncoder();
733
+ const bytes = encoder.encode(stringValue);
734
+ // Calculate buffer size and allocate WASM memory
735
+ bufferSize = bytes.length * bytes.BYTES_PER_ELEMENT;
736
+ memoryPointer = this.wasmPrividModules._malloc(bufferSize);
737
+ if (memoryPointer === 0) {
738
+ throw new Error('WASM memory allocation failed');
739
+ }
740
+ // Copy bytes to WASM heap
741
+ this.wasmPrividModules.HEAP8.set(bytes, memoryPointer / bytes.BYTES_PER_ELEMENT);
742
+ cachedArgs = [memoryPointer, bufferSize];
743
+ return cachedArgs;
744
+ }
745
+ catch (error) {
746
+ printLogs('[WasmWorkerService] createStringBuffer error:', error, 'ERROR');
747
+ // Return safe defaults on error
748
+ cachedArgs = [0, 0];
749
+ return cachedArgs;
750
+ }
751
+ },
752
+ /**
753
+ * Frees the allocated WASM memory.
754
+ * IMPORTANT: Always call this after using the buffer to prevent memory leaks.
755
+ * After calling free(), the buffer can be reused for the same text.
756
+ */
757
+ free: () => {
758
+ if (memoryPointer !== null && memoryPointer !== 0) {
759
+ try {
760
+ this.wasmPrividModules._free(memoryPointer);
761
+ }
762
+ catch (error) {
763
+ printLogs('[WasmWorkerService] free buffer error:', error, 'ERROR');
764
+ }
765
+ memoryPointer = null;
766
+ bufferSize = 0;
767
+ cachedArgs = null;
768
+ }
769
+ },
770
+ /**
771
+ * Check if memory has been allocated
772
+ */
773
+ isAllocated: () => memoryPointer !== null && memoryPointer !== 0,
774
+ };
775
+ }
776
+ releasePointers(...pointers) {
777
+ pointers.forEach((ptr) => {
778
+ if (ptr !== null && ptr !== 0) {
779
+ try {
780
+ this.wasmPrividModules._free(ptr);
781
+ }
782
+ catch (error) {
783
+ printLogs('[WasmWorkerService] releasePointers error:', error, 'ERROR');
784
+ }
785
+ }
786
+ });
787
+ }
788
+ allocatePointer(size) {
789
+ try {
790
+ const ptr = this.wasmPrividModules._malloc(size);
791
+ return ptr;
792
+ }
793
+ catch (error) {
794
+ printLogs('[WasmWorkerService] allocatePointer error:', error, 'ERROR');
795
+ return 0;
796
+ }
797
+ }
798
+ }
799
+ // Expose the Class using Comlink
800
+ expose(WasmWorkerService);
801
+ //# sourceMappingURL=WasmWorkerService.js.map