@privateid/ultrapass-web-sdk 1.7.0 → 2.0.0
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.
- package/dist/application/modules/core/document/DocumentService.js +16 -31
- package/dist/application/modules/core/document/DocumentService.js.map +1 -1
- package/dist/application/modules/core/document/document.types.d.ts +151 -0
- package/dist/application/modules/core/document/document.utils.d.ts +23 -1
- package/dist/application/modules/core/document/document.utils.js +123 -20
- package/dist/application/modules/core/document/document.utils.js.map +1 -1
- package/dist/application/modules/core/face/FaceService.d.ts +1 -2
- package/dist/application/modules/core/face/FaceService.js +11 -23
- package/dist/application/modules/core/face/FaceService.js.map +1 -1
- package/dist/application/modules/core/face/face.types.d.ts +104 -2
- package/dist/application/modules/core/face/face.types.js.map +1 -1
- package/dist/application/modules/core/face/face.utils.d.ts +14 -0
- package/dist/application/modules/core/face/face.utils.js +86 -2
- package/dist/application/modules/core/face/face.utils.js.map +1 -1
- package/dist/application/modules/internal/feature-flag/LDFeatureFlagService.js +0 -1
- package/dist/application/modules/internal/feature-flag/LDFeatureFlagService.js.map +1 -1
- package/dist/application/modules/internal/shared/index.d.ts +1 -0
- package/dist/application/modules/internal/shared/index.js +1 -0
- package/dist/application/modules/internal/shared/index.js.map +1 -1
- package/dist/application/modules/internal/shared/shared.types.d.ts +21 -0
- package/dist/application/modules/internal/shared/shared.types.js +2 -0
- package/dist/application/modules/internal/shared/shared.types.js.map +1 -0
- package/dist/application/modules/internal/shared/shared.utils.d.ts +6 -0
- package/dist/application/modules/internal/shared/shared.utils.js +26 -3
- package/dist/application/modules/internal/shared/shared.utils.js.map +1 -1
- package/dist/application/modules/internal/wasm-orchestrator/WasmOrchestratorService.d.ts +0 -1
- package/dist/application/modules/internal/wasm-orchestrator/WasmOrchestratorService.js +87 -208
- package/dist/application/modules/internal/wasm-orchestrator/WasmOrchestratorService.js.map +1 -1
- package/dist/application/modules/internal/wasm-orchestrator/index.d.ts +1 -2
- package/dist/application/modules/internal/wasm-orchestrator/index.js +0 -2
- package/dist/application/modules/internal/wasm-orchestrator/index.js.map +1 -1
- package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.types.d.ts +7 -19
- package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.utils.d.ts +18 -0
- package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.utils.js +69 -10
- package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.utils.js.map +1 -1
- package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.utils.test.d.ts +1 -0
- package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.utils.test.js +218 -0
- package/dist/application/modules/internal/wasm-orchestrator/wasm-orchestrator.utils.test.js.map +1 -0
- package/dist/application/modules/support/camera/CameraServiceFactory.js +0 -1
- package/dist/application/modules/support/camera/CameraServiceFactory.js.map +1 -1
- package/dist/application/modules/support/camera/camera.types.d.ts +8 -3
- package/dist/application/modules/support/camera/camera.types.js +9 -5
- package/dist/application/modules/support/camera/camera.types.js.map +1 -1
- package/dist/application/modules/support/camera/camera.utils.js +0 -1
- package/dist/application/modules/support/camera/camera.utils.js.map +1 -1
- package/dist/application/modules/support/camera/index.d.ts +2 -1
- package/dist/application/modules/support/camera/index.js +1 -0
- package/dist/application/modules/support/camera/index.js.map +1 -1
- package/dist/application/modules/support/camera/services/BaseCameraService.js +0 -3
- package/dist/application/modules/support/camera/services/BaseCameraService.js.map +1 -1
- package/dist/application/modules/support/camera/services/DesktopCameraService.js +0 -1
- package/dist/application/modules/support/camera/services/DesktopCameraService.js.map +1 -1
- package/dist/application/modules/support/camera/services/FirefoxCameraService.js +0 -1
- package/dist/application/modules/support/camera/services/FirefoxCameraService.js.map +1 -1
- package/dist/application/modules/support/camera/services/MacSafariCameraService.js +0 -1
- package/dist/application/modules/support/camera/services/MacSafariCameraService.js.map +1 -1
- package/dist/application/modules/support/camera/services/MobileCameraService.js +1 -3
- package/dist/application/modules/support/camera/services/MobileCameraService.js.map +1 -1
- package/dist/application/modules/support/engine/EngineService.js +0 -2
- package/dist/application/modules/support/engine/EngineService.js.map +1 -1
- package/dist/application/modules/support/engine/engine.types.d.ts +2 -21
- package/dist/application/modules/support/engine/engine.utils.js +1 -3
- package/dist/application/modules/support/engine/engine.utils.js.map +1 -1
- package/dist/application/modules/support/engine/index.d.ts +1 -1
- package/dist/application/modules/support/permissions/PermissionsService.js +0 -2
- package/dist/application/modules/support/permissions/PermissionsService.js.map +1 -1
- package/dist/application/modules/support/permissions/index.js +0 -1
- package/dist/application/modules/support/permissions/index.js.map +1 -1
- package/dist/application/workers/wasm/WasmWorkerService.d.ts +14 -3
- package/dist/application/workers/wasm/WasmWorkerService.js +270 -206
- package/dist/application/workers/wasm/WasmWorkerService.js.map +1 -1
- package/dist/application/workers/wasm/wasm-worker.types.d.ts +19 -1
- package/dist/application/workers/wasm/wasm-worker.utils.d.ts +28 -1
- package/dist/application/workers/wasm/wasm-worker.utils.js +132 -22
- package/dist/application/workers/wasm/wasm-worker.utils.js.map +1 -1
- package/dist/application/workers/wasm/wasm-worker.utils.test.d.ts +1 -0
- package/dist/application/workers/wasm/wasm-worker.utils.test.js +123 -0
- package/dist/application/workers/wasm/wasm-worker.utils.test.js.map +1 -0
- package/dist/index.d.ts +46 -35
- package/dist/index.js +104 -77
- package/dist/index.js.map +1 -1
- package/package.json +19 -11
- package/wasm/ultra/manifest.json +3 -3
- package/workers/wasm-new.worker.js +1 -1
- package/workers/wasm-new.worker.js.map +3 -3
- package/dist/apiUtils.d.ts +0 -46
- package/dist/apiUtils.js +0 -923
- package/dist/apiUtils.js.map +0 -1
- package/dist/cameraUtils.d.ts +0 -77
- package/dist/cameraUtils.js +0 -362
- package/dist/cameraUtils.js.map +0 -1
- package/dist/constants.d.ts +0 -9
- package/dist/constants.js +0 -14
- package/dist/constants.js.map +0 -1
- package/dist/createCallback.d.ts +0 -57
- package/dist/createCallback.js +0 -336
- package/dist/createCallback.js.map +0 -1
- package/dist/dbUtils.d.ts +0 -14
- package/dist/dbUtils.js +0 -149
- package/dist/dbUtils.js.map +0 -1
- package/dist/envUtils.d.ts +0 -4
- package/dist/envUtils.js +0 -17
- package/dist/envUtils.js.map +0 -1
- package/dist/faceModule.d.ts +0 -233
- package/dist/faceModule.js +0 -1021
- package/dist/faceModule.js.map +0 -1
- package/dist/main.d.ts +0 -48
- package/dist/main.js +0 -111
- package/dist/main.js.map +0 -1
- package/dist/types.d.ts +0 -139
- package/dist/types.js +0 -78
- package/dist/types.js.map +0 -1
- package/dist/utils.d.ts +0 -90
- package/dist/utils.js +0 -587
- package/dist/utils.js.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,37 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
enroll?: string;
|
|
8
|
-
validate_api_key?: string;
|
|
9
|
-
};
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
interface loadModulesProps {
|
|
14
|
-
api_url: apiUrlProps;
|
|
15
|
-
sessionToken: string;
|
|
16
|
-
publicKey: string;
|
|
17
|
-
timeout?: number;
|
|
18
|
-
useCdn?: boolean;
|
|
19
|
-
usageScenario?: string;
|
|
20
|
-
shouldRegenerateSession?: boolean;
|
|
21
|
-
cacheContent: string;
|
|
22
|
-
wasmFailureCallback?: (result: any) => void;
|
|
23
|
-
}
|
|
1
|
+
import { BackScanParams, ExtractOcrParams, FrontDocumentScanParams, CompareEmbeddingsParams } from './application/modules/core/document';
|
|
2
|
+
import type { FaceEnrollParams, EstimateAgeParams, FacePredictParams } from './application/modules/core/face';
|
|
3
|
+
import type { OpenCameraParams } from './application/modules/support/camera';
|
|
4
|
+
import { CameraSwitchParams } from './application/modules/support/camera/camera.types';
|
|
5
|
+
import { PermissionDataState } from './application/modules/support/permissions/permissions.types';
|
|
6
|
+
import { CustomWasmConfig, LoadModuleParams, WasmInfo, WasmLoadStatus, WasmVersionManifest } from './application/modules/support/engine';
|
|
24
7
|
/**
|
|
25
|
-
*
|
|
26
|
-
* @
|
|
8
|
+
* Requests camera permission from the user.
|
|
9
|
+
* @returns Promise<boolean> - true if permission granted, false otherwise
|
|
27
10
|
*/
|
|
28
|
-
export declare
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
export
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
11
|
+
export declare function requestCameraPermission(): Promise<PermissionDataState>;
|
|
12
|
+
/**
|
|
13
|
+
* Checks current camera permission status.
|
|
14
|
+
* @returns Promise<boolean> - true if permission is granted, false otherwise
|
|
15
|
+
*/
|
|
16
|
+
export declare function checkCameraPermission(): Promise<PermissionDataState>;
|
|
17
|
+
/**
|
|
18
|
+
* Adds a listener for camera permission state changes.
|
|
19
|
+
* @param listener - Callback function that receives permission state updates
|
|
20
|
+
* @returns Function to unsubscribe the listener
|
|
21
|
+
*/
|
|
22
|
+
export declare function addPermissionListener(listener: (state: PermissionDataState) => void): () => void;
|
|
23
|
+
export declare function cameraOpen(params: OpenCameraParams): Promise<import("./application/modules/support/camera").CameraOpenResult>;
|
|
24
|
+
export declare function cameraSwitch(params: CameraSwitchParams): Promise<import("./application/modules/support/camera").SwitchCameraResult>;
|
|
25
|
+
export declare function cameraClose(domElementId?: string): Promise<void>;
|
|
26
|
+
export declare function engineLoadModules(params: LoadModuleParams): Promise<import("./application/modules/support/engine").LoadModuleResult>;
|
|
27
|
+
/**
|
|
28
|
+
* @deprecated Use engineLoadModules instead
|
|
29
|
+
*/
|
|
30
|
+
export declare function loadPrivateIdModules(params: LoadModuleParams): Promise<import("./application/modules/support/engine").LoadModuleResult>;
|
|
31
|
+
export declare function engineCheckModelsAreLoaded(): Promise<boolean>;
|
|
32
|
+
export declare function engineFreeMemory(): Promise<boolean>;
|
|
33
|
+
export declare function engineEncryptData(payload: unknown): Promise<string[]>;
|
|
34
|
+
export declare function engineCheckPackageSupport(): import("./application/modules/support/engine/engine.types").PackageSupportResult;
|
|
35
|
+
export declare function engineGetWasmInfo(): Promise<WasmInfo>;
|
|
36
|
+
export declare function engineGetLoadStatus(): Promise<WasmLoadStatus | null>;
|
|
37
|
+
export declare function engineGetVersionManifest(): Promise<WasmVersionManifest>;
|
|
38
|
+
export declare function engineCheckVersionMatch(version: string): Promise<boolean>;
|
|
39
|
+
export declare function faceAgeEstimation(params: EstimateAgeParams): Promise<unknown>;
|
|
40
|
+
export declare function faceEnroll(params: FaceEnrollParams): Promise<unknown>;
|
|
41
|
+
export declare function facePredict(params: FacePredictParams): Promise<unknown>;
|
|
42
|
+
export declare function documentScanPassport(params: FrontDocumentScanParams): Promise<import("./application/modules/core/document/document.types").DocumentScanResponse>;
|
|
43
|
+
export declare function documentScanGovernmentPhotoId(params: FrontDocumentScanParams): Promise<import("./application/modules/core/document/document.types").DocumentScanResponse>;
|
|
44
|
+
export declare function documentScanBackGovernmentPhotoId(params: BackScanParams): Promise<import("./application/modules/core/document/document.types").DocumentScanResponse>;
|
|
45
|
+
export declare function documentExtractOCR(params: ExtractOcrParams): Promise<import("./application/modules/core/document/document.types").DocumentScanResponse>;
|
|
46
|
+
export declare function documentCompareEmbeddings(params: CompareEmbeddingsParams): Promise<import("./application/modules/core/document/document.types").DocumentScanResponse>;
|
|
47
|
+
export declare function setEnvVariables(env: string): void;
|
|
48
|
+
export type { CustomWasmConfig, LoadModuleParams, WasmInfo, WasmLoadStatus, WasmVersionManifest };
|
package/dist/index.js
CHANGED
|
@@ -1,82 +1,109 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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 default-param-last */
|
|
11
|
-
/* eslint-disable import/no-cycle */
|
|
12
|
-
/* eslint-disable camelcase */
|
|
1
|
+
import { cameraService, documentService, engineService, faceService, permissionsService } from './application';
|
|
2
|
+
import { setEnvVariables as newSetEnvVariables } from './application/modules/internal/shared';
|
|
3
|
+
// PERMISSIONS
|
|
13
4
|
/**
|
|
14
|
-
*
|
|
5
|
+
* Requests camera permission from the user.
|
|
6
|
+
* @returns Promise<boolean> - true if permission granted, false otherwise
|
|
15
7
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import { clearDB } from './dbUtils';
|
|
20
|
-
let isSimd = null;
|
|
21
|
-
let moduleLoaded = false;
|
|
22
|
-
let privid_wasm_error = (operation, id, response_str) => { };
|
|
23
|
-
const createCallbackError = ({ callback }) => (errorCode) => {
|
|
24
|
-
printLogs(`Callback error! Error code: `, errorCode, 'ERROR');
|
|
25
|
-
callback(errorCode);
|
|
26
|
-
};
|
|
8
|
+
export function requestCameraPermission() {
|
|
9
|
+
return permissionsService.requestCameraPermissions();
|
|
10
|
+
}
|
|
27
11
|
/**
|
|
28
|
-
*
|
|
29
|
-
* @
|
|
12
|
+
* Checks current camera permission status.
|
|
13
|
+
* @returns Promise<boolean> - true if permission is granted, false otherwise
|
|
30
14
|
*/
|
|
31
|
-
export
|
|
32
|
-
return
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
export
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
export
|
|
15
|
+
export function checkCameraPermission() {
|
|
16
|
+
return permissionsService.checkCameraPermissions();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Adds a listener for camera permission state changes.
|
|
20
|
+
* @param listener - Callback function that receives permission state updates
|
|
21
|
+
* @returns Function to unsubscribe the listener
|
|
22
|
+
*/
|
|
23
|
+
export function addPermissionListener(listener) {
|
|
24
|
+
// Adapter to convert between PermissionListener and PermissionDataState formats
|
|
25
|
+
const adapter = (internalState) => {
|
|
26
|
+
listener({
|
|
27
|
+
isGranted: internalState.isGranted,
|
|
28
|
+
state: internalState.permissionState,
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
return permissionsService.addListener(adapter);
|
|
32
|
+
}
|
|
33
|
+
// CAMERA
|
|
34
|
+
export function cameraOpen(params) {
|
|
35
|
+
return cameraService.openCamera(params);
|
|
36
|
+
}
|
|
37
|
+
export function cameraSwitch(params) {
|
|
38
|
+
return cameraService.cameraSwitch(params);
|
|
39
|
+
}
|
|
40
|
+
export function cameraClose(domElementId) {
|
|
41
|
+
return cameraService.closeCamera(domElementId);
|
|
42
|
+
}
|
|
43
|
+
// ENGINE
|
|
44
|
+
export function engineLoadModules(params) {
|
|
45
|
+
return engineService.loadModule(params);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* @deprecated Use engineLoadModules instead
|
|
49
|
+
*/
|
|
50
|
+
export function loadPrivateIdModules(params) {
|
|
51
|
+
return engineService.loadModule(params);
|
|
52
|
+
}
|
|
53
|
+
export function engineCheckModelsAreLoaded() {
|
|
54
|
+
return engineService.checkModelsAreLoaded();
|
|
55
|
+
}
|
|
56
|
+
export function engineFreeMemory() {
|
|
57
|
+
return engineService.freeMemory();
|
|
58
|
+
}
|
|
59
|
+
export function engineEncryptData(payload) {
|
|
60
|
+
return engineService.encryptData(payload);
|
|
61
|
+
}
|
|
62
|
+
export function engineCheckPackageSupport() {
|
|
63
|
+
return engineService.checkPackageSupport();
|
|
64
|
+
}
|
|
65
|
+
export function engineGetWasmInfo() {
|
|
66
|
+
return engineService.getWasmInfo();
|
|
67
|
+
}
|
|
68
|
+
export function engineGetLoadStatus() {
|
|
69
|
+
return engineService.getLoadStatus();
|
|
70
|
+
}
|
|
71
|
+
export function engineGetVersionManifest() {
|
|
72
|
+
return engineService.getVersionManifest();
|
|
73
|
+
}
|
|
74
|
+
export function engineCheckVersionMatch(version) {
|
|
75
|
+
return engineService.checkVersionMatch(version);
|
|
76
|
+
}
|
|
77
|
+
// Core Modules
|
|
78
|
+
// FACE
|
|
79
|
+
export function faceAgeEstimation(params) {
|
|
80
|
+
return faceService.ageEstimation(params);
|
|
81
|
+
}
|
|
82
|
+
export function faceEnroll(params) {
|
|
83
|
+
return faceService.enroll(params);
|
|
84
|
+
}
|
|
85
|
+
export function facePredict(params) {
|
|
86
|
+
return faceService.predict(params);
|
|
87
|
+
}
|
|
88
|
+
// DOCUMENT
|
|
89
|
+
export function documentScanPassport(params) {
|
|
90
|
+
return documentService.scanPassport(params);
|
|
91
|
+
}
|
|
92
|
+
export function documentScanGovernmentPhotoId(params) {
|
|
93
|
+
return documentService.scanGovernmentPhotoId(params);
|
|
94
|
+
}
|
|
95
|
+
export function documentScanBackGovernmentPhotoId(params) {
|
|
96
|
+
return documentService.scanBackGovernmentPhotoId(params);
|
|
97
|
+
}
|
|
98
|
+
export function documentExtractOCR(params) {
|
|
99
|
+
return documentService.extractOCR(params);
|
|
100
|
+
}
|
|
101
|
+
export function documentCompareEmbeddings(params) {
|
|
102
|
+
return documentService.compareEmbeddings(params);
|
|
103
|
+
}
|
|
104
|
+
// OTHERS
|
|
105
|
+
// TODO: @pahferreira - validate if we want to keep this function or enable debugType setting elsewhere
|
|
106
|
+
export function setEnvVariables(env) {
|
|
107
|
+
newSetEnvVariables(env);
|
|
108
|
+
}
|
|
82
109
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAkB/G,OAAO,EAAE,eAAe,IAAI,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAE9F,cAAc;AACd;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,kBAAkB,CAAC,wBAAwB,EAAE,CAAC;AACvD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,kBAAkB,CAAC,sBAAsB,EAAE,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAA8C;IAClF,gFAAgF;IAChF,MAAM,OAAO,GAAG,CAAC,aAAuE,EAAE,EAAE;QAC1F,QAAQ,CAAC;YACP,SAAS,EAAE,aAAa,CAAC,SAAS;YAClC,KAAK,EAAE,aAAa,CAAC,eAAe;SACrC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,OAAO,kBAAkB,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,SAAS;AACT,MAAM,UAAU,UAAU,CAAC,MAAwB;IACjD,OAAO,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAA0B;IACrD,OAAO,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,YAAqB;IAC/C,OAAO,aAAa,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AACjD,CAAC;AAED,SAAS;AACT,MAAM,UAAU,iBAAiB,CAAC,MAAwB;IACxD,OAAO,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAwB;IAC3D,OAAO,aAAa,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO,aAAa,CAAC,oBAAoB,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO,aAAa,CAAC,UAAU,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAgB;IAChD,OAAO,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO,aAAa,CAAC,mBAAmB,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,aAAa,CAAC,WAAW,EAAE,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,aAAa,CAAC,aAAa,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,aAAa,CAAC,kBAAkB,EAAE,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,OAAO,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,eAAe;AAEf,OAAO;AACP,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,OAAO,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAwB;IACjD,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAyB;IACnD,OAAO,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC;AAED,WAAW;AACX,MAAM,UAAU,oBAAoB,CAAC,MAA+B;IAClE,OAAO,eAAe,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,MAA+B;IAC3E,OAAO,eAAe,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,iCAAiC,CAAC,MAAsB;IACtE,OAAO,eAAe,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAwB;IACzD,OAAO,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAA+B;IACvE,OAAO,eAAe,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC;AAED,SAAS;AACT,uGAAuG;AACvG,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,kBAAkB,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@privateid/ultrapass-web-sdk",
|
|
3
3
|
"homepage": "https://github.com/openinfer/ultraWebSDK?tab=readme-ov-file#ultra-web-sdk",
|
|
4
4
|
"description": "Ultrapass Web SDK provides privacy-preserving biometric authentication and identity verification using Homomorphic Tokens (FTs). It enables secure face, voice, and fingerprint recognition directly in web browsers without exposing sensitive biometric data, ensuring user privacy without obligations under regulations like GDPR and CCPA.",
|
|
5
|
-
"version": "
|
|
5
|
+
"version": "2.0.0",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"Face recognition",
|
|
8
8
|
"voice recognition",
|
|
@@ -69,32 +69,40 @@
|
|
|
69
69
|
"build:workers": "node build-workers.js",
|
|
70
70
|
"generate-wasm-manifest": "node scripts/generate-wasm-manifest.js",
|
|
71
71
|
"test": "jest",
|
|
72
|
-
"lint": "eslint \"src
|
|
73
|
-
"lint:fix": "eslint \"src
|
|
72
|
+
"lint": "eslint --cache \"src/**/*.ts\"",
|
|
73
|
+
"lint:fix": "eslint --cache --fix \"src/**/*.ts\"",
|
|
74
74
|
"format": "prettier --write \"src/**/*.ts\"",
|
|
75
|
+
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
76
|
+
"prepare": "husky",
|
|
75
77
|
"changeset": "npx changeset",
|
|
76
78
|
"changeset:status": "npx changeset status --since=origin/main"
|
|
77
79
|
},
|
|
80
|
+
"lint-staged": {
|
|
81
|
+
"src/**/*.ts": [
|
|
82
|
+
"eslint --fix",
|
|
83
|
+
"prettier --write"
|
|
84
|
+
]
|
|
85
|
+
},
|
|
78
86
|
"devDependencies": {
|
|
79
87
|
"@changesets/changelog-github": "^0.5.1",
|
|
80
88
|
"@changesets/cli": "^2.29.7",
|
|
89
|
+
"@eslint/js": "^9.39.3",
|
|
81
90
|
"@types/dom-mediacapture-record": "^1.0.22",
|
|
82
91
|
"@types/jest": "^29.2.4",
|
|
83
92
|
"@types/node": "^18.11.15",
|
|
84
93
|
"@types/ua-parser-js": "^0.7.36",
|
|
85
|
-
"@typescript-eslint/eslint-plugin": "^5.46.1",
|
|
86
|
-
"@typescript-eslint/parser": "^5.46.1",
|
|
87
94
|
"dotenv": "^17.2.3",
|
|
88
95
|
"esbuild": "^0.27.0",
|
|
89
|
-
"eslint": "^
|
|
90
|
-
"eslint-config-
|
|
91
|
-
"
|
|
92
|
-
"eslint-plugin-import": "^2.26.0",
|
|
96
|
+
"eslint": "^9.39.3",
|
|
97
|
+
"eslint-config-prettier": "^10.1.8",
|
|
98
|
+
"husky": "^9.1.7",
|
|
93
99
|
"jest": "^29.3.1",
|
|
94
|
-
"
|
|
100
|
+
"lint-staged": "^16.3.2",
|
|
101
|
+
"prettier": "^3.8.1",
|
|
95
102
|
"ts-jest": "^29.0.3",
|
|
96
103
|
"typedoc": "^0.23.22",
|
|
97
|
-
"typescript": "^4.9.4"
|
|
104
|
+
"typescript": "^4.9.4",
|
|
105
|
+
"typescript-eslint": "^8.56.1"
|
|
98
106
|
},
|
|
99
107
|
"dependencies": {
|
|
100
108
|
"comlink": "^4.3.1",
|
package/wasm/ultra/manifest.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "26.02.13-24c4552-prod",
|
|
3
|
-
"releaseDate": "2026-
|
|
3
|
+
"releaseDate": "2026-03-10T15:35:48.127Z",
|
|
4
4
|
"downloadUrl": "https://ultra-wasm.privateid.com/wasm/ultra/simd/26.02.13-24c4552-prod/privid_fhe_ultra.wasm",
|
|
5
5
|
"interceptPath": "/wasm/ultra/simd/26.02.13-24c4552-prod/",
|
|
6
6
|
"sha256": "7c2169c83b7e7fa6a17a4c66fb429dc0ebaad57b0a7f32f2c76ab684cc11a839",
|
|
7
7
|
"builds": {
|
|
8
8
|
"ultra": {
|
|
9
9
|
"version": "26.02.13-24c4552-prod",
|
|
10
|
-
"releaseDate": "2026-
|
|
10
|
+
"releaseDate": "2026-03-10T15:35:48.127Z",
|
|
11
11
|
"downloadUrl": "https://ultra-wasm.privateid.com/wasm/ultra/simd/26.02.13-24c4552-prod/privid_fhe_ultra.wasm",
|
|
12
12
|
"interceptPath": "/wasm/ultra/simd/26.02.13-24c4552-prod/",
|
|
13
13
|
"sha256": "7c2169c83b7e7fa6a17a4c66fb429dc0ebaad57b0a7f32f2c76ab684cc11a839"
|
|
14
14
|
},
|
|
15
15
|
"ultra-dev": {
|
|
16
16
|
"version": "26.02.13-24c4552-dev",
|
|
17
|
-
"releaseDate": "2026-
|
|
17
|
+
"releaseDate": "2026-03-10T15:35:48.141Z",
|
|
18
18
|
"downloadUrl": "https://ultra-wasm.devel.privateid.com/wasm/ultra-dev/simd/26.02.13-24c4552-dev/privid_fhe_ultra.wasm",
|
|
19
19
|
"interceptPath": "/wasm/ultra-dev/simd/26.02.13-24c4552-dev/",
|
|
20
20
|
"sha256": "d4d671f581cc4d28a2b2a0c6d7eb5b513ee2e4a0cc24fd0ca458dfbf27803e6b"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(()=>{var $=Symbol("Comlink.proxy"),ie=Symbol("Comlink.endpoint"),ne=Symbol("Comlink.releaseProxy"),U=Symbol("Comlink.finalizer"),R=Symbol("Comlink.thrown"),V=r=>typeof r=="object"&&r!==null||typeof r=="function",oe={canHandle:r=>V(r)&&r[$],serialize(r){let{port1:e,port2:t}=new MessageChannel;return _(r,e),[t,[t]]},deserialize(r){return r.start(),ue(r)}},ae={canHandle:r=>V(r)&&R in r,serialize({value:r}){let e;return r instanceof Error?e={isError:!0,value:{message:r.message,name:r.name,stack:r.stack}}:e={isError:!1,value:r},[e,[]]},deserialize(r){throw r.isError?Object.assign(new Error(r.value.message),r.value):r.value}},Y=new Map([["proxy",oe],["throw",ae]]);function le(r,e){for(let t of r)if(e===t||t==="*"||t instanceof RegExp&&t.test(e))return!0;return!1}function _(r,e=globalThis,t=["*"]){e.addEventListener("message",function i(s){if(!s||!s.data)return;if(!le(t,s.origin)){console.warn(`Invalid origin '${s.origin}' for comlink proxy`);return}let{id:o,type:c,path:a}=Object.assign({path:[]},s.data),l=(s.data.argumentList||[]).map(p),u;try{let d=a.slice(0,-1).reduce((g,h)=>g[h],r),m=a.reduce((g,h)=>g[h],r);switch(c){case"GET":u=m;break;case"SET":d[a.slice(-1)[0]]=p(s.data.value),u=!0;break;case"APPLY":u=m.apply(d,l);break;case"CONSTRUCT":{let g=new m(...l);u=fe(g)}break;case"ENDPOINT":{let{port1:g,port2:h}=new MessageChannel;_(r,h),u=he(g,[g])}break;case"RELEASE":u=void 0;break;default:return}}catch(d){u={value:d,[R]:0}}Promise.resolve(u).catch(d=>({value:d,[R]:0})).then(d=>{let[m,g]=k(d);e.postMessage(Object.assign(Object.assign({},m),{id:o}),g),c==="RELEASE"&&(e.removeEventListener("message",i),j(e),U in r&&typeof r[U]=="function"&&r[U]())}).catch(d=>{let[m,g]=k({value:new TypeError("Unserializable return value"),[R]:0});e.postMessage(Object.assign(Object.assign({},m),{id:o}),g)})}),e.start&&e.start()}function ce(r){return r.constructor.name==="MessagePort"}function j(r){ce(r)&&r.close()}function ue(r,e){let t=new Map;return r.addEventListener("message",function(s){let{data:o}=s;if(!o||!o.id)return;let c=t.get(o.id);if(c)try{c(o)}finally{t.delete(o.id)}}),B(r,t,[],e)}function W(r){if(r)throw new Error("Proxy has been released and is not useable")}function H(r){return S(r,new Map,{type:"RELEASE"}).then(()=>{j(r)})}var A=new WeakMap,M="FinalizationRegistry"in globalThis&&new FinalizationRegistry(r=>{let e=(A.get(r)||0)-1;A.set(r,e),e===0&&H(r)});function de(r,e){let t=(A.get(e)||0)+1;A.set(e,t),M&&M.register(r,e,r)}function me(r){M&&M.unregister(r)}function B(r,e,t=[],i=function(){}){let s=!1,o=new Proxy(i,{get(c,a){if(W(s),a===ne)return()=>{me(o),H(r),e.clear(),s=!0};if(a==="then"){if(t.length===0)return{then:()=>o};let l=S(r,e,{type:"GET",path:t.map(u=>u.toString())}).then(p);return l.then.bind(l)}return B(r,e,[...t,a])},set(c,a,l){W(s);let[u,d]=k(l);return S(r,e,{type:"SET",path:[...t,a].map(m=>m.toString()),value:u},d).then(p)},apply(c,a,l){W(s);let u=t[t.length-1];if(u===ie)return S(r,e,{type:"ENDPOINT"}).then(p);if(u==="bind")return B(r,e,t.slice(0,-1));let[d,m]=z(l);return S(r,e,{type:"APPLY",path:t.map(g=>g.toString()),argumentList:d},m).then(p)},construct(c,a){W(s);let[l,u]=z(a);return S(r,e,{type:"CONSTRUCT",path:t.map(d=>d.toString()),argumentList:l},u).then(p)}});return de(o,r),o}function ge(r){return Array.prototype.concat.apply([],r)}function z(r){let e=r.map(k);return[e.map(t=>t[0]),ge(e.map(t=>t[1]))]}var K=new WeakMap;function he(r,e){return K.set(r,e),r}function fe(r){return Object.assign(r,{[$]:!0})}function k(r){for(let[e,t]of Y)if(t.canHandle(r)){let[i,s]=t.serialize(r);return[{type:"HANDLER",name:e,value:i},s]}return[{type:"RAW",value:r},K.get(r)||[]]}function p(r){switch(r.type){case"HANDLER":return Y.get(r.name).deserialize(r.value);case"RAW":return r.value}}function S(r,e,t,i){return new Promise(s=>{let o=Ee();e.set(o,s),r.start&&r.start(),r.postMessage(Object.assign({id:o},t),i)})}function Ee(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}var D={FaceServiceWebWorker:"face-service-web-worker",DocumentServiceWebWorker:"document-service-web-worker",EngineServiceWebWorker:"engine-service-web-worker",DebugType:"debug-type",WasmBuildType:"sdk-wasm-build"};var ye=null,C=null;function X(r){C=r}function we(){if(C!==null)return C;try{let e=new URLSearchParams(window.location.search).get("debug_type");return e||(pe()!=="prod"?"3":ye?.evaluateFlag(D.DebugType)?.toString()||"0")}catch{return"0"}}function n(r,e,t="LOG"){let i=["1","2","3","901","902","903"],s=["2","3","902","903"],o=["3","903","904"],c=we();t==="ERROR"&&i.includes(c)?console.error("DEBUG_SDK",r,e):t==="WARN"&&s.includes(c)?console.warn("DEBUG_SDK",r,e):(t==="DEBUG"&&o.includes(c)||t==="LOG"&&o.includes(c))&&console.log("DEBUG_SDK",r,e)}var G;var pe=()=>G||null;var y="ultra";var x="/privid-wasm",w="/privid-wasm";function L(r){return new Promise((e,t)=>{r.onsuccess=()=>e(r.result),r.onerror=()=>t(r.error)})}async function Q(r){if(!indexedDB)throw new Error("IndexedDB not available");let e=indexedDB.open(x,21);e.onupgradeneeded=()=>{let i=e.result;i.objectStoreNames.contains(w)||i.createObjectStore(w)};let t=await L(e);try{let s=t.transaction(w,"readonly").objectStore(w);return await L(s.get(r))}catch(i){throw n("[WasmWorkerService] Error reading from IndexedDB:",i),i}finally{t.close()}}async function J(r,e,t,i){if(!indexedDB)throw new Error("IndexedDB not available");let s=indexedDB.open(x,21);s.onupgradeneeded=()=>{let c=s.result;c.objectStoreNames.contains(w)||c.createObjectStore(w)};let o=await L(s);try{let a=o.transaction(w,"readwrite").objectStore(w),l={cachedWasm:e,cachedScript:t,version:i};return await L(a.put(l,r)),"saved"}finally{o.close()}}async function T(r,e){if(e)try{n("[WasmWorkerService] fetchResource from cdnUrl",r.cdn);let i=await fetch(r.cdn);if(!i.ok)throw new Error(`CDN response not ok: ${i.status}`);return n("Response: ",i),i}catch(i){console.error(`[WasmWorkerService] CDN fetch failed, trying local. Error: ${i}`)}n("[WasmWorkerService] fetchResource from localUrl",r.local);let t=await fetch(r.local);if(!t.ok)throw new Error(`Local fetch failed: ${t.status} for ${r.local}`);return t}function Z(r,e){try{let t=r?.version,i=e?.version;n("[WasmWorkerService] checkCacheAndCurrentAreSameVersion cachedVersion vs currentVersion: ",`${t} vs ${i}`);let s=typeof t=="string"?t:t.toString(),o=typeof i=="string"?i:i.toString();return s===o}catch{return!1}}async function ee(r,e,t=y){let i=e?`${e}/wasm/${t}/${r}/version.json`:`../wasm/${t}/${r}/version.json`;return(await fetch(i)).json()}function F(r){let e=r.reduce((s,o)=>s+o.data.length,0),t=new Uint8Array(e),i=0;for(let s of r)t.set(s.data,i),i+=s.data.length;return t}function re(r){return r.split("").filter(e=>e.codePointAt(0)).join("")}async function te(r){try{n("[wasm-worker.utils] Validating custom WASM URL:",r);let t=(await fetch(r,{method:"HEAD"})).ok;return n("[wasm-worker.utils] Custom WASM URL validation result:",t),t}catch(e){return n("[wasm-worker.utils] Custom WASM URL validation failed:",e,"ERROR"),!1}}var f={result:null,error:null,progress:null,wasmCropping:null};globalThis.privid_wasm_result=(r,e,t)=>{if(f.result)try{n("[WasmWorkerService] privid_wasm_result called with operation:",r),n("[WasmWorkerService] privid_wasm_result called with id:",e),n("[WasmWorkerService] privid_wasm_result called with response_str:",t),f.result(r,e,t)}catch(i){n("[WasmWorkerService] Error in result callback:",i,"ERROR")}else n("[WasmWorkerService] No result callback registered","","WARN")};globalThis.privid_wasm_error=(r,e,t)=>{if(n("[WasmWorkerService] privid_wasm_error called:",{operation:r,id:e,error_str:t},"ERROR"),f.error)try{f.error(r,e,t)}catch(i){n("[WasmWorkerService] Error in error callback:",i,"ERROR")}else n("[WasmWorkerService] No error callback registered","","WARN")};globalThis.privid_wasm_progress=(r,e,t)=>{if(n("[WasmWorkerService] privid_wasm_progress called:",{progress_type:r,message:e,progress_value:t}),f.progress)try{f.progress(r,e,t)}catch(i){n("[WasmWorkerService] Error in progress callback:",i,"ERROR")}};globalThis.privid_wasm_cropping=r=>{if(n("[WasmWorkerService] privid_wasm_cropping called",r),f.wasmCropping)try{f.wasmCropping(r)}catch(e){n("[WasmWorkerService] Error in wasmCropping callback:",e,"ERROR")}};var O=class{constructor(){this.wasmPrividModules=null;this.apiUrl=null;this.sessionToken=null;this.publicKey=null;this.debugType=null;this.proxiedResultCallback=null;this.proxiedErrorCallback=null;this.proxiedProgressCallback=null;this.wasmSession=null;this.setCache=!0;this.checkWasmLoaded=!1;this.cdnUrl="https://ultra-wasm.devel.privateid.com";this.useCdnLink=!0;this.isSimd=null;this.moduleInitializationLock=null;this.isModuleInitializing=!1;this.customWasm=null;this.wasmBaseUrl=null;this.lastLoadStatus=null;this.currentWasmVersion=null;this.wasmFolderName=y}getWasmFolderName(){return this.wasmFolderName}async loadModules(e,t,i){try{if(this.wasmPrividModules&&this.wasmSession)return{message:"Already initialized",status:this.lastLoadStatus};if(this.moduleInitializationLock)try{return await this.moduleInitializationLock,{message:"Already loaded",status:this.lastLoadStatus}}catch{return{message:"Retrying initialization",status:null}}return this.isModuleInitializing=!0,this.moduleInitializationLock=this.loadModulesInternal(e,t,i),await this.moduleInitializationLock}catch(s){throw n("[WasmWorkerService] loadModules error",s,"ERROR"),s}finally{this.isModuleInitializing=!1,this.moduleInitializationLock=null}}async loadModulesInternal(e,t,i){this.proxiedErrorCallback=t,f.error=t,this.proxiedProgressCallback=i,f.progress=i,this.apiUrl=e.apiUrl,this.sessionToken=e.sessionToken,this.publicKey=e.publicKey,this.useCdnLink=e.useCdn,this.setCache=e.cacheConfig,this.isSimd=e.simd,this.customWasm=e.customWasm||null,this.wasmBaseUrl=e.wasmBaseUrl||null,e.debugType&&(this.debugType=e.debugType,X(e.debugType)),e.wasmFolderName&&(this.wasmFolderName=e.wasmFolderName),n("[WasmWorkerService] isLoad params: ",e);let s=e.simd?"simd":"nosimd",o="privid_fhe_ultra",c=await Q(y),a=await ee(s,this.wasmBaseUrl,this.getWasmFolderName());if(this.currentWasmVersion=a.version,n("[WasmWorkerService] currentModuleVersionJSON: ",a.version),this.customWasm)if(n("[WasmWorkerService] Custom WASM detected, validating...",this.customWasm),await te(this.customWasm.url)){let u=a.version,d=this.customWasm.version;if(d!==u)n("[WasmWorkerService] Version mismatch detected, falling back to CDN",{expected:u,provided:d},"WARN"),this.customWasm=null,this.lastLoadStatus={source:"custom-fallback",versionMatch:!1};else{if(n("[WasmWorkerService] Version match confirmed",{version:d}),n("[WasmWorkerService] Custom WASM URL is valid, loading...",this.customWasm.url),await this.loadFromPackage(a.version,s,o,e.usageScenario,e.cacheContent),!this.wasmPrividModules||!this.wasmSession){let m="WASM modules loaded but session not initialized";throw n(`[WasmWorkerService] ERROR: ${m}`,"","ERROR"),new Error(m)}return this.lastLoadStatus={source:"custom",versionMatch:!0},{message:"Loaded from custom URL",status:this.lastLoadStatus}}}else n("[WasmWorkerService] Custom WASM URL validation failed, falling back to CDN","","WARN"),this.customWasm=null,this.lastLoadStatus={source:"custom-fallback",versionMatch:!1};if(Z(c,a)){if(n("[WasmWorkerService] same version confirmed",""),n("[WasmWorkerService] PRIVMODULES LOADED?: ",this.wasmPrividModules),this.wasmPrividModules)if(this.wasmPrividModules&&e.shouldRegenerateSession){n("[WasmWorkerService] Regenerating session as requested","");let l=await this.initializeWasmSession(e.usageScenario,e.cacheContent);if(!l)throw n("[WasmWorkerService] ERROR: Failed to regenerate session","","ERROR"),new Error("Session regeneration failed");this.wasmSession=l}else return await this.loadFromPackage(a.version,s,o,e.usageScenario,e.cacheContent),{message:"Loaded",status:this.lastLoadStatus};else{let{cachedWasm:l,cachedScript:u}=c;if(l&&u){let d=new Blob([u],{type:"application/javascript"}),m=URL.createObjectURL(d);try{return importScripts(m),typeof createTFLiteModule>"u"?(n("[WasmWorkerService] createTFLiteModule not defined, falling back to package","","WARN"),await this.loadFromPackage(a.version,s,o,e.usageScenario,e.cacheContent),{message:"Loaded from package (cache invalid)",status:this.lastLoadStatus}):(this.wasmPrividModules=await createTFLiteModule({wasmBinary:l}),n("[WasmWorkerService] ULTRA MODULES ",this.wasmPrividModules),this.checkWasmLoaded||(await this.initializeWasmSession(e.usageScenario,e.cacheContent),this.checkWasmLoaded=!0),n("[WasmWorkerService] WASM MODULES: ",this.wasmPrividModules),this.lastLoadStatus||(this.lastLoadStatus={source:"cache",versionMatch:!0}),{message:"Loaded from cache (wasm and script)",status:this.lastLoadStatus})}catch(g){return n("[WasmWorkerService] Error loading from cache:",g,"ERROR"),await this.loadFromPackage(a.version,s,o,e.usageScenario,e.cacheContent),{message:"Loaded from package (cache error)",status:this.lastLoadStatus}}finally{URL.revokeObjectURL(m)}}}if(!this.wasmPrividModules||!this.wasmSession){let l="WASM modules loaded but session not initialized";throw n(`[WasmWorkerService] ERROR: ${l}`,"","ERROR"),new Error(l)}return this.lastLoadStatus||(this.lastLoadStatus={source:"cache",versionMatch:!0}),{message:"Cache Loaded",status:this.lastLoadStatus}}if(await this.loadFromPackage(a.version,s,o,e.usageScenario,e.cacheContent),!this.wasmPrividModules||!this.wasmSession){let l="WASM modules loaded but session not initialized";throw n(`[WasmWorkerService] ERROR: ${l}`,"","ERROR"),new Error(l)}return this.lastLoadStatus||(this.lastLoadStatus={source:"cdn",versionMatch:!0}),{message:"Loaded",status:this.lastLoadStatus}}async loadFromPackage(e,t,i,s,o){return n("[WasmWorkerService loadFromPackage wasmVersion: ",e),this.wasmPrividModules=await this.loadWasmModule(t,i,!0,e),this.checkWasmLoaded||(await this.initializeWasmSession(s,o),this.checkWasmLoaded=!0),!0}getLocalWasmUrl(e){return this.wasmBaseUrl?`${this.wasmBaseUrl}/wasm/${e}`:`../wasm/${e}`}async loadWasmModule(e,t,i,s){if(this.customWasm){n("[WasmWorkerService] Using custom WASM URL:",this.customWasm.url);let h={cdn:`${this.cdnUrl}/${y}/${e}/${s}/${t}.js`,local:this.getLocalWasmUrl(`${this.getWasmFolderName()}/${e}/${s}/${t}.js`)},E=await fetch(this.customWasm.url);if(!E.ok)throw new Error(`Failed to fetch custom WASM from ${this.customWasm.url}: ${E.status}`);let v=await(await T(h,this.useCdnLink)).text(),P=await E.arrayBuffer();n("[WasmWorkerService] loadWasmModule script and buffer from custom URL': ",{scriptBuffer:v,buffer:P});let se=new Blob([v],{type:"application/javascript"}),N=URL.createObjectURL(se);try{if(importScripts(N),typeof createTFLiteModule>"u")throw new Error("createTFLiteModule not defined after loading script");let b=await createTFLiteModule({wasmBinary:P});return n("[WasmWorkerService] loadWasmModule module from custom URL: ",b),b}catch(b){throw n("[WasmWorkerService] Error loading WASM module from custom URL:",b,"ERROR"),b}finally{URL.revokeObjectURL(N)}}let o={cdn:`${this.cdnUrl}/${y}/${e}/${s}/${t}.wasm`,local:this.getLocalWasmUrl(`${this.getWasmFolderName()}/${e}/${s}/${t}.wasm`)},c={cdn:`${this.cdnUrl}/${y}/${e}/${s}/${t}.js`,local:this.getLocalWasmUrl(`${this.getWasmFolderName()}/${e}/${s}/${t}.js`)},a=await T(o,this.useCdnLink),u=await(await T(c,this.useCdnLink)).text(),d=await a.arrayBuffer();n("[WasmWorkerService] loadWasmModule script and buffer': ",{scriptBuffer:u,buffer:d});let m=new Blob([u],{type:"application/javascript"}),g=URL.createObjectURL(m);try{if(importScripts(g),typeof createTFLiteModule>"u")throw new Error("createTFLiteModule not defined after loading script");let h=await createTFLiteModule({wasmBinary:d});if(n("[WasmWorkerService] loadWasmModule module: ",h),i){let E=h.UTF8ToString(h._privid_get_version());await J(y,d,u,E)}return h}catch(h){throw n("[WasmWorkerService] Error loading WASM module:",h,"ERROR"),h}finally{URL.revokeObjectURL(g)}}async initializeWasmSession(e="",t=""){if(this.wasmSession)return this.wasmSession;let i={...this.apiUrl,session_token:this.sessionToken,public_key:this.publicKey,debug_level:this.debugType,custom_settings:{usage_scenario:e,cache_content:t}};n("[WasmWorkerService] initializeWasmSession settings:",i);let s=this.createWasmResultPointers(),o=this.createStringBuffer(JSON.stringify(i)),c=this.wasmPrividModules._privid_initialize_session(...o.getArgs(),s.getOuterPointer());if(n("[WasmWorkerService] initializeWasmSession isSessionInitialized: ",c),o.free(),!c)return n("[WasmWorkerService] ERROR: privid_initialize_session failed","","ERROR"),n("[WasmWorkerService] Settings were:",i,"ERROR"),null;let a=s.getInnerPointer();return this.wasmSession=a,n("[WasmWorkerService] initializeWasmSession wasmSessionPointer: ",a),a}async ultraEnroll(e,t){if(f.result=t,!await this.ensureModulesAreReady())return!1;let i=e.imageData.data.length*e.imageData.data.BYTES_PER_ELEMENT,s=this.allocatePointer(i);this.wasmPrividModules.HEAPU8.set(new Uint8Array(e.imageData.data),s);let o=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),c=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),l=new TextEncoder().encode(`${e.config}`),u=l.length,d=this.allocatePointer(u);this.wasmPrividModules.HEAP8.set(l,d/l.BYTES_PER_ELEMENT),n("[WasmWorkerService] ultraEnroll config: ",e.config);try{return this.wasmPrividModules._privid_user_enroll(this.wasmSession,d,u,s,e.imageData.width,e.imageData.height,o,c),!0}catch(m){return n("[WasmWorkerService] ultraEnroll error: ",m,"ERROR"),!1}finally{this.releasePointers(s,o,c,d)}}async ultraPredict(e,t,i){if(f.result=t,i&&(f.progress=i),!await this.ensureModulesAreReady())return!1;let s=F(e.originalImages),c=new TextEncoder().encode(e.config),a=c.length,l=this.allocatePointer(a);this.wasmPrividModules.HEAP8.set(c,l/c.BYTES_PER_ELEMENT);let u=s.length*s.BYTES_PER_ELEMENT,d=this.allocatePointer(u);this.wasmPrividModules.HEAPU8.set(new Uint8Array(s),d);let m=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),g=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);n("[WasmWorkerService] ultraPredict config: ",e.config);try{return this.wasmPrividModules._privid_user_predict(this.wasmSession,l,a,d,e.originalImages[0].width,e.originalImages[0].height,m,g),!0}catch(h){return n("[WasmWorkerService] ultraPredict error:",h,"ERROR"),!1}finally{this.releasePointers(d,m,g,l)}}async ultraAgeEstimate(e,t,i,s){if(f.result=t,i&&(f.progress=i),s&&(f.wasmCropping=s),!await this.ensureModulesAreReady())return!1;let o=F(e.originalImages),a=new TextEncoder().encode(e.config),l=a.length,u=this.allocatePointer(l);this.wasmPrividModules.HEAP8.set(a,u/a.BYTES_PER_ELEMENT);let d=o.length*o.BYTES_PER_ELEMENT,m=this.allocatePointer(d);this.wasmPrividModules.HEAPU8.set(new Uint8Array(o),m);let g=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),h=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);n("[WasmWorkerService] ultraAgeEstimate config: ",e.config);try{return this.wasmPrividModules._privid_estimate_age(this.wasmSession,u,l,m,e.originalImages[0].width,e.originalImages[0].height,g,h),!0}catch(E){return n("[WasmWorkerService] ultraAgeEstimate error: ",E,"ERROR"),!1}finally{this.releasePointers(m,g,h,u)}}async ultraCompareEmbeddings(e,t){if(f.result=t,!await this.ensureModulesAreReady())return!1;let i=new TextEncoder,s=i.encode(e.config),o=s.length,c=this.allocatePointer(o);this.wasmPrividModules.HEAP8.set(s,c/s.BYTES_PER_ELEMENT);let a=i.encode(`${e.encryptedEmbeddingsA}`),l=a.length,u=this.allocatePointer(l);this.wasmPrividModules.HEAPU8.set(new Uint8Array(a),u);let d=i.encode(`${e.encryptedEmbeddingsB}`),m=d.length,g=this.allocatePointer(m);this.wasmPrividModules.HEAPU8.set(new Uint8Array(d),g);let h=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),E=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);n("[WasmWorkerService] ultraCompareEmbeddings config: ",e.config);try{return this.wasmPrividModules._privid_compare_embeddings(this.wasmSession,c,o,u,l,g,m,h,E),!0}catch(I){return n("[WasmWorkerService] ultraCompareEmbeddings error:",I,"ERROR"),!1}finally{this.releasePointers(u,g,h,E,c)}}pkiEncrypt(e){if(!this.wasmPrividModules||!this.wasmSession)return{error:!0};let t=new TextEncoder,i=t.encode(e.payload),s=i.length,o=this.allocatePointer(s),c=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),a=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);this.wasmPrividModules.HEAP8.set(i,o/i.BYTES_PER_ELEMENT);let l=t.encode(e.config),u=l.length,d=this.allocatePointer(u);this.wasmPrividModules.HEAP8.set(l,d/l.BYTES_PER_ELEMENT),n("[WasmWorkerService] pkiEncrypt params: ",e);try{this.wasmPrividModules._privid_encrypt_payload(this.wasmSession,d,u,o,s,c,a);let[m]=new Uint32Array(this.wasmPrividModules.HEAPU8.buffer,a,1);if(m>0){let g=new Uint32Array(this.wasmPrividModules.HEAPU8.buffer,a,1)[0],h=new Uint32Array(this.wasmPrividModules.HEAPU8.buffer,c,1)[0],E=new Uint8Array(this.wasmPrividModules.HEAPU8.buffer,h,g),v=new TextDecoder("utf-8").decode(E);v.replace(/\0/g,""),v.replace(" ","");let P=re(v);return n("[WasmWorkerService] pkiEncrypt result: ",P),P}return{error:!0}}catch(m){return n("[WasmWorkerService] pkiEncrypt error:",m,"ERROR"),{error:!0}}finally{this.releasePointers(o,c,a,d)}}async ultraScanBackDocument(e,t){if(f.result=t,!await this.ensureModulesAreReady())return!1;let s=new TextEncoder().encode(e.config),o=s.length,c=this.allocatePointer(o);this.wasmPrividModules.HEAP8.set(s,c/s.BYTES_PER_ELEMENT);let a=e.imageInput.data.length*e.imageInput.data.BYTES_PER_ELEMENT,l=this.allocatePointer(a);this.wasmPrividModules.HEAPU8.set(new Uint8Array(e.imageInput.data),l);let u=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),d=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);n("[WasmWorkerService] ultraScanBackDocument config: ",e.config);try{return this.wasmPrividModules._privid_doc_scan_back(this.wasmSession,c,o,l,e.imageInput.width,e.imageInput.height,u,d),!0}catch(m){return n("[WasmWorkerService] ultraScanBackDocument error:",m,"ERROR"),!1}finally{this.releasePointers(l,u,d,c)}}async ultraScanFrontDocument(e,t){if(f.result=t,!await this.ensureModulesAreReady())return!1;let s=new TextEncoder().encode(e.config),o=s.length,c=this.allocatePointer(o);this.wasmPrividModules.HEAP8.set(s,c/s.BYTES_PER_ELEMENT);let a=e.imageInput.data.length*e.imageInput.data.BYTES_PER_ELEMENT,l=this.allocatePointer(a);this.wasmPrividModules.HEAPU8.set(new Uint8Array(e.imageInput.data),l);let u=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),d=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);n("[WasmWorkerService] ultraScanFrontDocument config: ",e.config);try{return this.wasmPrividModules._privid_doc_scan_front(this.wasmSession,c,o,l,e.imageInput.width,e.imageInput.height,u,d),!0}catch(m){return n("[WasmWorkerService] ultraScanFrontDocument error:",m,"ERROR"),!1}finally{this.releasePointers(l,u,d,c)}}async ultraDocumentOcr(e,t){if(f.result=t,!await this.ensureModulesAreReady())return!1;let i=new TextEncoder,s=i.encode(e.config),o=i.encode(`${e.imageInput}`),c=s.length,a=this.allocatePointer(c);this.wasmPrividModules.HEAP8.set(s,a/s.BYTES_PER_ELEMENT);let l=o.length,u=this.allocatePointer(l);this.wasmPrividModules.HEAPU8.set(new Uint8Array(o),u);let d=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),m=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);n("[WasmWorkerService] ultraDocumentOcr config: ",e.config);try{return this.wasmPrividModules._privid_doc_ocr_front_enc(this.wasmSession,a,c,u,l,d,m),!0}catch(g){return n("[WasmWorkerService] ultraDocumentOcr error:",g,"ERROR"),!1}finally{this.releasePointers(u,d,m,a)}}async checkModelsAreLoaded(){try{return await this.ensureModulesAreReady()?this.wasmPrividModules._privid_check_models():!1}catch(e){return n("[WasmWorkerService] checkModelsAreLoaded error",e,"ERROR"),!1}}async freeMemory(){try{return await this.ensureModulesAreReady()?this.wasmPrividModules._privid_free_memory():!1}catch(e){return n("[WasmWorkerService] freeMemory error: ",e,"ERROR"),!1}}createWasmResultPointers(){let e=null,t=null;return{getOuterPointer:()=>(e||(e=this.wasmPrividModules._malloc(Int32Array.BYTES_PER_ELEMENT)),e),getInnerPointer:()=>e?t||([t]=new Uint32Array(this.wasmPrividModules.HEAPU8.buffer,e,1),t):null}}createStringBuffer(e){let t=null,i=0,s=null;return{getArgs:()=>{if(s!==null)return s;if(e==null||typeof e=="number"&&Number.isNaN(e))return s=[0,0],s;try{let o=String(e),a=new TextEncoder().encode(o);if(i=a.length*a.BYTES_PER_ELEMENT,t=this.wasmPrividModules._malloc(i),t===0)throw new Error("WASM memory allocation failed");return this.wasmPrividModules.HEAP8.set(a,t/a.BYTES_PER_ELEMENT),s=[t,i],s}catch(o){return n("[WasmWorkerService] createStringBuffer error:",o,"ERROR"),s=[0,0],s}},free:()=>{if(t!==null&&t!==0){try{this.wasmPrividModules._free(t)}catch(o){n("[WasmWorkerService] free buffer error:",o,"ERROR")}t=null,i=0,s=null}},isAllocated:()=>t!==null&&t!==0}}releasePointers(...e){e.forEach(t=>{if(t!==null&&t!==0)try{this.wasmPrividModules._free(t)}catch(i){n("[WasmWorkerService] releasePointers error:",i,"ERROR")}})}allocatePointer(e){try{return this.wasmPrividModules._malloc(e)}catch(t){return n("[WasmWorkerService] allocatePointer error:",t,"ERROR"),0}}async ensureModulesAreReady(){if(this.isModuleInitializing&&this.moduleInitializationLock)try{await this.moduleInitializationLock}catch{return!1}if(!this.wasmPrividModules){if(!this.apiUrl||!this.sessionToken||!this.publicKey)return n("[WasmWorkerService] ensureModulesInitialized: Missing required initialization parameters",{apiUrl:!!this.apiUrl,sessionToken:!!this.sessionToken,publicKey:!!this.publicKey},"ERROR"),!1;try{await this.loadModules({simd:this.isSimd,apiUrl:this.apiUrl,sessionToken:this.sessionToken,publicKey:this.publicKey,debugType:this.debugType||"",cacheConfig:this.setCache},this.proxiedErrorCallback)}catch{return!1}}return!this.wasmPrividModules||!this.wasmSession?(n("[WasmWorkerService] ensureModulesInitialized: WASM not fully initialized",{hasModules:!!this.wasmPrividModules,hasSession:!!this.wasmSession},"ERROR"),!1):!0}},ve=new O;_(ve);})();
|
|
1
|
+
(()=>{var O=Symbol("Comlink.proxy"),ne=Symbol("Comlink.endpoint"),oe=Symbol("Comlink.releaseProxy"),T=Symbol("Comlink.finalizer"),S=Symbol("Comlink.thrown"),$=t=>typeof t=="object"&&t!==null||typeof t=="function",ae={canHandle:t=>$(t)&&t[O],serialize(t){let{port1:e,port2:r}=new MessageChannel;return _(t,e),[r,[r]]},deserialize(t){return t.start(),de(t)}},le={canHandle:t=>$(t)&&S in t,serialize({value:t}){let e;return t instanceof Error?e={isError:!0,value:{message:t.message,name:t.name,stack:t.stack}}:e={isError:!1,value:t},[e,[]]},deserialize(t){throw t.isError?Object.assign(new Error(t.value.message),t.value):t.value}},z=new Map([["proxy",ae],["throw",le]]);function ce(t,e){for(let r of t)if(e===r||r==="*"||r instanceof RegExp&&r.test(e))return!0;return!1}function _(t,e=globalThis,r=["*"]){e.addEventListener("message",function s(i){if(!i||!i.data)return;if(!ce(r,i.origin)){console.warn(`Invalid origin '${i.origin}' for comlink proxy`);return}let{id:n,type:o,path:l}=Object.assign({path:[]},i.data),c=(i.data.argumentList||[]).map(y),u;try{let d=l.slice(0,-1).reduce((h,f)=>h[f],t),m=l.reduce((h,f)=>h[f],t);switch(o){case"GET":u=m;break;case"SET":d[l.slice(-1)[0]]=y(i.data.value),u=!0;break;case"APPLY":u=m.apply(d,c);break;case"CONSTRUCT":{let h=new m(...c);u=Ee(h)}break;case"ENDPOINT":{let{port1:h,port2:f}=new MessageChannel;_(t,f),u=fe(h,[h])}break;case"RELEASE":u=void 0;break;default:return}}catch(d){u={value:d,[S]:0}}Promise.resolve(u).catch(d=>({value:d,[S]:0})).then(d=>{let[m,h]=R(d);e.postMessage(Object.assign(Object.assign({},m),{id:n}),h),o==="RELEASE"&&(e.removeEventListener("message",s),Y(e),T in t&&typeof t[T]=="function"&&t[T]())}).catch(d=>{let[m,h]=R({value:new TypeError("Unserializable return value"),[S]:0});e.postMessage(Object.assign(Object.assign({},m),{id:n}),h)})}),e.start&&e.start()}function ue(t){return t.constructor.name==="MessagePort"}function Y(t){ue(t)&&t.close()}function de(t,e){let r=new Map;return t.addEventListener("message",function(i){let{data:n}=i;if(!n||!n.id)return;let o=r.get(n.id);if(o)try{o(n)}finally{r.delete(n.id)}}),L(t,r,[],e)}function b(t){if(t)throw new Error("Proxy has been released and is not useable")}function H(t){return w(t,new Map,{type:"RELEASE"}).then(()=>{Y(t)})}var W=new WeakMap,A="FinalizationRegistry"in globalThis&&new FinalizationRegistry(t=>{let e=(W.get(t)||0)-1;W.set(t,e),e===0&&H(t)});function me(t,e){let r=(W.get(e)||0)+1;W.set(e,r),A&&A.register(t,e,t)}function he(t){A&&A.unregister(t)}function L(t,e,r=[],s=function(){}){let i=!1,n=new Proxy(s,{get(o,l){if(b(i),l===oe)return()=>{he(n),H(t),e.clear(),i=!0};if(l==="then"){if(r.length===0)return{then:()=>n};let c=w(t,e,{type:"GET",path:r.map(u=>u.toString())}).then(y);return c.then.bind(c)}return L(t,e,[...r,l])},set(o,l,c){b(i);let[u,d]=R(c);return w(t,e,{type:"SET",path:[...r,l].map(m=>m.toString()),value:u},d).then(y)},apply(o,l,c){b(i);let u=r[r.length-1];if(u===ne)return w(t,e,{type:"ENDPOINT"}).then(y);if(u==="bind")return L(t,e,r.slice(0,-1));let[d,m]=x(c);return w(t,e,{type:"APPLY",path:r.map(h=>h.toString()),argumentList:d},m).then(y)},construct(o,l){b(i);let[c,u]=x(l);return w(t,e,{type:"CONSTRUCT",path:r.map(d=>d.toString()),argumentList:c},u).then(y)}});return me(n,t),n}function ge(t){return Array.prototype.concat.apply([],t)}function x(t){let e=t.map(R);return[e.map(r=>r[0]),ge(e.map(r=>r[1]))]}var V=new WeakMap;function fe(t,e){return V.set(t,e),t}function Ee(t){return Object.assign(t,{[O]:!0})}function R(t){for(let[e,r]of z)if(r.canHandle(t)){let[s,i]=r.serialize(t);return[{type:"HANDLER",name:e,value:s},i]}return[{type:"RAW",value:t},V.get(t)||[]]}function y(t){switch(t.type){case"HANDLER":return z.get(t.name).deserialize(t.value);case"RAW":return t.value}}function w(t,e,r,s){return new Promise(i=>{let n=ye();e.set(n,i),t.start&&t.start(),t.postMessage(Object.assign({id:n},r),s)})}function ye(){return new Array(4).fill(0).map(()=>Math.floor(Math.random()*Number.MAX_SAFE_INTEGER).toString(16)).join("-")}var I={FaceServiceWebWorker:"face-service-web-worker",DocumentServiceWebWorker:"document-service-web-worker",EngineServiceWebWorker:"engine-service-web-worker",DebugType:"debug-type",WasmBuildType:"sdk-wasm-build"};var pe=null,C=null;function K(t){C=t}function we(){if(C!==null)return C;try{let e=new URLSearchParams(window.location.search).get("debug_type");return e||(ve()!=="prod"?"3":pe?.evaluateFlag(I.DebugType)?.toString()||"0")}catch(t){return a("[shared.utils] getDebugType error",t),"0"}}function a(t,e,r="LOG"){let s=["1","2","3","901","902","903"],i=["2","3","902","903"],n=["3","903","904"],o=we();r==="ERROR"&&s.includes(o)?console.error("DEBUG_SDK",t,e):r==="WARN"&&i.includes(o)?console.warn("DEBUG_SDK",t,e):(r==="DEBUG"&&n.includes(o)||r==="LOG"&&n.includes(o))&&console.log("DEBUG_SDK",t,e)}var j;var ve=()=>j||null;var P="ultra";var k="/privid-wasm",E="/privid-wasm";function G(t){return t.replace(/-(prod|dev)$/,"")}function v(t){return new Promise((e,r)=>{t.onsuccess=()=>e(t.result),t.onerror=()=>r(t.error)})}async function Pe(t){if(!indexedDB)throw new Error("IndexedDB not available");let e=indexedDB.open(k,21);e.onupgradeneeded=()=>{let s=e.result;s.objectStoreNames.contains(E)||s.createObjectStore(E)};let r=await v(e);try{let i=r.transaction(E,"readonly").objectStore(E);return await v(i.get(t))}catch(s){throw a("[WasmWorkerService] Error reading from IndexedDB:",s),s}finally{r.close()}}async function be(t,e,r,s){if(!indexedDB)throw new Error("IndexedDB not available");let i=indexedDB.open(k,21);i.onupgradeneeded=()=>{let o=i.result;o.objectStoreNames.contains(E)||o.createObjectStore(E)};let n=await v(i);try{let l=n.transaction(E,"readwrite").objectStore(E),c={cachedWasm:e,cachedScript:r,version:s};return await v(l.put(c,t)),"saved"}finally{n.close()}}function X(t,e){try{let r=t?.version,s=e?.version;a("[WasmWorkerService] checkCacheAndCurrentAreSameVersion cachedVersion vs currentVersion: ",`${r} vs ${s}`);let i=typeof r=="string"?r:r.toString(),n=typeof s=="string"?s:s.toString();return G(i)===G(n)}catch(r){return a("[WasmWorkerService] Error comparing versions:",r,"ERROR"),!1}}async function J(t,e,r=P){let s=e?`${e}/wasm/${r}/${t}/version.json`:`../wasm/${r}/${t}/version.json`;return(await fetch(s)).json()}function N(t){let e=t.reduce((i,n)=>i+n.data.length,0),r=new Uint8Array(e),s=0;for(let i of t)r.set(i.data,s),s+=i.data.length;return r}function q(t){return t.split("").filter(e=>e.codePointAt(0)).join("")}function Q(t){if(!t||t.byteLength<8)return{valid:!1,reason:"wasm_empty_or_truncated"};let e=new Uint8Array(t,0,4);return[0,97,115,109].every((s,i)=>e[i]===s)?typeof WebAssembly.validate=="function"&&!WebAssembly.validate(t)?{valid:!1,reason:"wasm_structural_validation_failed"}:{valid:!0}:{valid:!1,reason:"wasm_invalid_magic_number"}}async function Z(t,e=5e3,r=Pe){return Promise.race([r(t),new Promise((s,i)=>setTimeout(()=>i(new Error(`IndexedDB read timed out after ${e}ms`)),e))])}async function ee(t){if(!indexedDB)throw new Error("IndexedDB not available");let e=indexedDB.open(k,21);e.onupgradeneeded=()=>{let s=e.result;s.objectStoreNames.contains(E)||s.createObjectStore(E)};let r=await v(e);try{let i=r.transaction(E,"readwrite").objectStore(E);await v(i.delete(t))}finally{r.close()}}function re(t){if(!(t instanceof Error))return!1;let e=t.message.toLowerCase();return e.includes("validation failed")||e.includes("wasm_invalid_magic_number")||e.includes("wasm_structural_validation_failed")||e.includes("wasm_empty_or_truncated")}async function te(t){try{a("[wasm-worker.utils] Validating custom WASM URL:",t);let r=(await fetch(t,{method:"HEAD"})).ok;return a("[wasm-worker.utils] Custom WASM URL validation result:",r),r}catch(e){return a("[wasm-worker.utils] Custom WASM URL validation failed:",e,"ERROR"),!1}}async function se(t,e,r=P){try{let s=e.UTF8ToString(e._privid_get_version());await be(r,t,"",s)}catch(s){a("[WasmWorkerService] Cache write failed (non-fatal)",s,"WARN")}}function ie(t){if(!(t instanceof Error))return"unknown";let e=t.message.toLowerCase();return e.includes("timed out")?"cache_read_timeout":e.includes("cache miss")?"cache_miss":e.includes("cache version mismatch")?"cache_version_mismatch":e.includes("validation failed")?"wasm_validation_failed":e.includes("indexeddb")?"cache_read_error":e.includes("fetch failed")||e.includes("networkerror")?"fetch_failed":e.includes("custom url validation failed")?"custom_url_invalid":e.includes("custom url version mismatch")?"custom_url_version_mismatch":t instanceof WebAssembly.CompileError?"wasm_compile_error":"unknown"}var g={result:null,error:null,progress:null,wasmCropping:null};globalThis.privid_wasm_result=(t,e,r)=>{if(g.result)try{a("[WasmWorkerService] privid_wasm_result called with operation:",t),a("[WasmWorkerService] privid_wasm_result called with id:",e),a("[WasmWorkerService] privid_wasm_result called with response_str:",r),g.result(t,e,r)}catch(s){a("[WasmWorkerService] Error in result callback:",s,"ERROR")}else a("[WasmWorkerService] No result callback registered","","WARN")};globalThis.privid_wasm_error=(t,e,r)=>{if(a("[WasmWorkerService] privid_wasm_error called:",{operation:t,id:e,error_str:r},"ERROR"),g.error)try{g.error(t,e,r)}catch(s){a("[WasmWorkerService] Error in error callback:",s,"ERROR")}else a("[WasmWorkerService] No error callback registered","","WARN")};globalThis.privid_wasm_progress=(t,e,r)=>{if(a("[WasmWorkerService] privid_wasm_progress called:",{progress_type:t,message:e,progress_value:r}),g.progress)try{g.progress(t,e,r)}catch(s){a("[WasmWorkerService] Error in progress callback:",s,"ERROR")}};globalThis.privid_wasm_cropping=t=>{if(a("[WasmWorkerService] privid_wasm_cropping called",t),g.wasmCropping)try{g.wasmCropping(t)}catch(e){a("[WasmWorkerService] Error in wasmCropping callback:",e,"ERROR")}};var D=class{constructor(){this.wasmPrividModules=null;this.apiUrl=null;this.sessionToken=null;this.publicKey=null;this.debugType=null;this.proxiedResultCallback=null;this.proxiedErrorCallback=null;this.proxiedProgressCallback=null;this.wasmSession=null;this.setCache=!0;this.checkWasmLoaded=!1;this.cdnUrl="https://ultra-wasm.devel.privateid.com";this.useCdnLink=!0;this.isSimd=null;this.moduleInitializationLock=null;this.isModuleInitializing=!1;this.customWasm=null;this.wasmBaseUrl=null;this.lastLoadStatus=null;this.currentWasmVersion=null;this.wasmFolderName=P}getWasmFolderName(){return this.wasmFolderName}async loadModules(e,r,s){try{if(this.wasmPrividModules&&this.wasmSession&&e.shouldRegenerateSession)return this.regenerateSession(e,r,s);if(this.wasmPrividModules&&this.wasmSession)return{message:"Already initialized",status:this.lastLoadStatus};if(this.moduleInitializationLock)try{return await this.moduleInitializationLock,{message:"Already loaded",status:this.lastLoadStatus}}catch(n){return a("[WasmWorkerService] loadModules error",n),{message:"Retrying initialization",status:null}}return this.isModuleInitializing=!0,this.moduleInitializationLock=this.loadModulesInternal(e,r,s),await this.moduleInitializationLock}catch(i){throw a("[WasmWorkerService] loadModules error",i,"ERROR"),i}finally{this.isModuleInitializing=!1,this.moduleInitializationLock=null}}async regenerateSession(e,r,s){a("[WasmWorkerService] Regenerating session as requested",""),this.proxiedErrorCallback=r,g.error=r,this.proxiedProgressCallback=s,g.progress=s,this.apiUrl=e.apiUrl,this.sessionToken=e.sessionToken,this.publicKey=e.publicKey;try{this.wasmPrividModules._privid_deinitialize_session(this.wasmSession)}catch(n){a("[WasmWorkerService] _privid_deinitialize_session failed (non-fatal, proceeding with regeneration)",n,"WARN")}this.wasmSession=null;let i=await this.initializeWasmSession(e.usageScenario,e.cacheContent);if(!i)throw a("[WasmWorkerService] ERROR: Failed to regenerate session","","ERROR"),new Error("Session regeneration failed");return this.wasmSession=i,{message:"Session regenerated",status:this.lastLoadStatus}}async loadModulesInternal(e,r,s){this.proxiedErrorCallback=r,g.error=r,this.proxiedProgressCallback=s,g.progress=s,this.apiUrl=e.apiUrl,this.sessionToken=e.sessionToken,this.publicKey=e.publicKey,this.useCdnLink=e.useCdn??!0,this.setCache=e.cacheConfig,this.isSimd=e.simd,this.customWasm=e.customWasm||null,this.wasmBaseUrl=e.wasmBaseUrl||null,e.debugType&&(this.debugType=e.debugType,K(e.debugType)),e.wasmFolderName&&(this.wasmFolderName=e.wasmFolderName),e.cdnBaseUrl&&(this.cdnUrl=e.cdnBaseUrl),a("[WasmWorkerService] isLoad params: ",e);let i=e.simd?"simd":"nosimd",n="privid_fhe_ultra",o=await J(i,this.wasmBaseUrl,this.getWasmFolderName());this.currentWasmVersion=o.version;let l={modulePath:i,moduleName:n,version:o.version,saveCache:this.setCache??!0},c=await this.resolveWasmModule(l);if(this.wasmPrividModules=c.module,this.lastLoadStatus=c.status,this.checkWasmLoaded||(await this.initializeWasmSession(e.usageScenario,e.cacheContent),this.checkWasmLoaded=!0),!this.wasmPrividModules||!this.wasmSession)throw new Error("WASM modules loaded but session not initialized");return a(`[WasmWorkerService] Load complete. Source: ${c.status.source}, Attempts: ${c.attempts.length}`,c.attempts),{message:`Loaded from ${c.status.source}`,status:this.lastLoadStatus}}getLocalWasmUrl(e){return this.wasmBaseUrl?`${this.wasmBaseUrl}/wasm/${e}`:`../wasm/${e}`}importScriptFromUrl(e){let r;try{importScripts(e.local);return}catch(s){r=s,a("[WasmWorkerService] Local importScripts failed, trying CDN",r,"WARN")}if(this.useCdnLink)try{importScripts(e.cdn)}catch(s){throw new Error(`Both local and CDN importScripts failed. Local error: ${r}; CDN error: ${s}`)}else throw new Error(`Local importScripts failed and CDN is disabled: ${r}`)}async initializeWasmSession(e="",r=""){if(this.wasmSession)return this.wasmSession;let s={...this.apiUrl,session_token:this.sessionToken,public_key:this.publicKey,debug_level:this.debugType,custom_settings:{usage_scenario:e,cache_content:r}};a("[WasmWorkerService] initializeWasmSession settings:",s);let i=this.createWasmResultPointers(),n=this.createStringBuffer(JSON.stringify(s)),o=this.wasmPrividModules._privid_initialize_session(...n.getArgs(),i.getOuterPointer());if(a("[WasmWorkerService] initializeWasmSession isSessionInitialized: ",o),n.free(),!o)return a("[WasmWorkerService] ERROR: privid_initialize_session failed","","ERROR"),a("[WasmWorkerService] Settings were:",s,"ERROR"),null;let l=i.getInnerPointer();return this.wasmSession=l,a("[WasmWorkerService] initializeWasmSession wasmSessionPointer: ",l),l}async resolveWasmModule(e){let r=[],s=[];console.log("[WasmWorkerService] resolveWasmModule ctx:",e),this.customWasm&&s.push({source:"custom",obtain:()=>this.obtainFromCustomUrl(this.customWasm,e.version),shouldCache:!1}),s.push({source:"cache",obtain:()=>this.obtainFromCache(e.version),shouldCache:!1}),s.push({source:"local",obtain:()=>this.obtainFromNetwork(e,"local"),shouldCache:e.saveCache}),this.useCdnLink&&s.push({source:"cdn",obtain:()=>this.obtainFromNetwork(e,"cdn"),shouldCache:e.saveCache});try{this.loadWasmRuntime(e)}catch(n){let o=n instanceof Error?n.message:String(n);throw new Error(`WASM JS runtime failed to load for ${e.modulePath}/${e.version}: ${o}`)}let i;for(let n of s)try{let o=await n.obtain(),l=Q(o);if(!l.valid)throw new Error(`Validation failed: ${l.reason}`);let c=await this.compileWasmBinary(o,e);n.shouldCache&&await se(o,c,this.getWasmFolderName()),r.push({source:n.source,success:!0});let u=i?.originalSource==="custom"?"custom-fallback":n.source;return{module:c,status:{source:u,versionMatch:u!=="custom-fallback",...i&&{fallback:i}},attempts:r}}catch(o){let l=o instanceof Error?o.message:String(o);r.push({source:n.source,success:!1,error:l}),a(`[WasmWorkerService] Tier '${n.source}' failed: ${l}`,o,"WARN"),!i&&n.source!=="cdn"&&n.source!=="local"&&(i={originalSource:n.source,reason:ie(o)}),n.source==="cache"&&re(o)&&await ee(this.getWasmFolderName()).catch(()=>{})}throw new Error(`All WASM loading tiers failed. Attempts: ${JSON.stringify(r)}`)}loadWasmRuntime(e){let r={cdn:`${this.cdnUrl}/${this.getWasmFolderName()}/${e.modulePath}/${e.version}/${e.moduleName}.js`,local:this.getLocalWasmUrl(`${this.getWasmFolderName()}/${e.modulePath}/${e.version}/${e.moduleName}.js`)};if(this.importScriptFromUrl(r),typeof createTFLiteModule>"u")throw new Error("createTFLiteModule not defined after loading WASM runtime")}async obtainFromCache(e){let r=await Z(this.getWasmFolderName());if(!r||!r.cachedWasm)throw new Error("Cache miss: no cached WASM found");if(!X(r,{version:e}))throw new Error(`Cache version mismatch: cached=${r.version}, expected=${e}`);return r.cachedWasm}async obtainFromCustomUrl(e,r){if(!await te(e.url))throw new Error(`Custom URL validation failed for ${e.url}`);if(e.version!==r)throw a("[WasmWorkerService] Custom WASM version mismatch",{expected:r,provided:e.version},"WARN"),new Error(`Custom URL version mismatch: provided=${e.version}, expected=${r}`);let i=await fetch(e.url);if(!i.ok)throw new Error(`Custom URL fetch failed: ${i.status} for ${e.url}`);return i.arrayBuffer()}async obtainFromNetwork(e,r){let s=r==="cdn"?`${this.cdnUrl}/${this.getWasmFolderName()}/${e.modulePath}/${e.version}/${e.moduleName}.wasm`:this.getLocalWasmUrl(`${this.getWasmFolderName()}/${e.modulePath}/${e.version}/${e.moduleName}.wasm`),i=await fetch(s);if(!i.ok)throw new Error(`Fetch failed: ${i.status} for ${s}`);return i.arrayBuffer()}async compileWasmBinary(e,r){try{return await createTFLiteModule({wasmBinary:e})}catch(s){if(s instanceof WebAssembly.CompileError&&r.modulePath==="simd")return a("[WasmWorkerService] SIMD CompileError -- retrying with noSIMD",s,"WARN"),this.obtainFromNetworkWithFallback(r);throw s}}async obtainFromNetworkWithFallback(e){let r={...e,modulePath:"nosimd"},s;try{s=await this.obtainFromNetwork(r,"local")}catch(i){if(this.useCdnLink)s=await this.obtainFromNetwork(r,"cdn");else throw new Error(`Local noSIMD fetch failed and CDN is disabled: ${i}`)}return this.loadWasmRuntime(r),createTFLiteModule({wasmBinary:s})}async ultraEnroll(e,r){if(g.result=r,!await this.ensureModulesAreReady())return!1;let s=e.imageData.data.length*e.imageData.data.BYTES_PER_ELEMENT,i=this.allocatePointer(s);this.wasmPrividModules.HEAPU8.set(new Uint8Array(e.imageData.data),i);let n=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),o=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),c=new TextEncoder().encode(`${e.config}`),u=c.length,d=this.allocatePointer(u);this.wasmPrividModules.HEAP8.set(c,d/c.BYTES_PER_ELEMENT),a("[WasmWorkerService] ultraEnroll config: ",e.config);try{return this.wasmPrividModules._privid_user_enroll(this.wasmSession,d,u,i,e.imageData.width,e.imageData.height,n,o),!0}catch(m){return a("[WasmWorkerService] ultraEnroll error: ",m,"ERROR"),!1}finally{this.releasePointers(i,n,o,d)}}async ultraPredict(e,r,s){if(g.result=r,s&&(g.progress=s),!await this.ensureModulesAreReady())return!1;let i=N(e.originalImages),o=new TextEncoder().encode(e.config),l=o.length,c=this.allocatePointer(l);this.wasmPrividModules.HEAP8.set(o,c/o.BYTES_PER_ELEMENT);let u=i.length*i.BYTES_PER_ELEMENT,d=this.allocatePointer(u);this.wasmPrividModules.HEAPU8.set(new Uint8Array(i),d);let m=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),h=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);a("[WasmWorkerService] ultraPredict config: ",e.config);try{return this.wasmPrividModules._privid_user_predict(this.wasmSession,c,l,d,e.originalImages[0].width,e.originalImages[0].height,m,h),!0}catch(f){return a("[WasmWorkerService] ultraPredict error:",f,"ERROR"),!1}finally{this.releasePointers(d,m,h,c)}}async ultraAgeEstimate(e,r,s,i){if(g.result=r,s&&(g.progress=s),i&&(g.wasmCropping=i),!await this.ensureModulesAreReady())return!1;let n=N(e.originalImages),l=new TextEncoder().encode(e.config),c=l.length,u=this.allocatePointer(c);this.wasmPrividModules.HEAP8.set(l,u/l.BYTES_PER_ELEMENT);let d=n.length*n.BYTES_PER_ELEMENT,m=this.allocatePointer(d);this.wasmPrividModules.HEAPU8.set(new Uint8Array(n),m);let h=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),f=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);a("[WasmWorkerService] ultraAgeEstimate config: ",e.config);try{return this.wasmPrividModules._privid_estimate_age(this.wasmSession,u,c,m,e.originalImages[0].width,e.originalImages[0].height,h,f),!0}catch(p){return a("[WasmWorkerService] ultraAgeEstimate error: ",p,"ERROR"),!1}finally{this.releasePointers(m,h,f,u)}}async ultraCompareEmbeddings(e,r){if(g.result=r,!await this.ensureModulesAreReady())return!1;let s=new TextEncoder,i=s.encode(e.config),n=i.length,o=this.allocatePointer(n);this.wasmPrividModules.HEAP8.set(i,o/i.BYTES_PER_ELEMENT);let l=s.encode(`${e.encryptedEmbeddingsA}`),c=l.length,u=this.allocatePointer(c);this.wasmPrividModules.HEAPU8.set(new Uint8Array(l),u);let d=s.encode(`${e.encryptedEmbeddingsB}`),m=d.length,h=this.allocatePointer(m);this.wasmPrividModules.HEAPU8.set(new Uint8Array(d),h);let f=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),p=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);a("[WasmWorkerService] ultraCompareEmbeddings config: ",e.config);try{return this.wasmPrividModules._privid_compare_embeddings(this.wasmSession,o,n,u,c,h,m,f,p),!0}catch(F){return a("[WasmWorkerService] ultraCompareEmbeddings error:",F,"ERROR"),!1}finally{this.releasePointers(u,h,f,p,o)}}pkiEncrypt(e){if(!this.wasmPrividModules||!this.wasmSession)return{error:!0};let r=new TextEncoder,s=r.encode(e.payload),i=s.length,n=this.allocatePointer(i),o=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),l=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);this.wasmPrividModules.HEAP8.set(s,n/s.BYTES_PER_ELEMENT);let c=r.encode(e.config),u=c.length,d=this.allocatePointer(u);this.wasmPrividModules.HEAP8.set(c,d/c.BYTES_PER_ELEMENT),a("[WasmWorkerService] pkiEncrypt params: ",e);try{this.wasmPrividModules._privid_encrypt_payload(this.wasmSession,d,u,n,i,o,l);let[m]=new Uint32Array(this.wasmPrividModules.HEAPU8.buffer,l,1);if(m>0){let h=new Uint32Array(this.wasmPrividModules.HEAPU8.buffer,l,1)[0],f=new Uint32Array(this.wasmPrividModules.HEAPU8.buffer,o,1)[0],p=new Uint8Array(this.wasmPrividModules.HEAPU8.buffer,f,h),M=new TextDecoder("utf-8").decode(p);M.replace(/\0/g,""),M.replace(" ","");let U=q(M);return a("[WasmWorkerService] pkiEncrypt result: ",U),U}return{error:!0}}catch(m){return a("[WasmWorkerService] pkiEncrypt error:",m,"ERROR"),{error:!0}}finally{this.releasePointers(n,o,l,d)}}async ultraScanBackDocument(e,r){if(g.result=r,!await this.ensureModulesAreReady())return!1;let i=new TextEncoder().encode(e.config),n=i.length,o=this.allocatePointer(n);this.wasmPrividModules.HEAP8.set(i,o/i.BYTES_PER_ELEMENT);let l=e.imageInput.data.length*e.imageInput.data.BYTES_PER_ELEMENT,c=this.allocatePointer(l);this.wasmPrividModules.HEAPU8.set(new Uint8Array(e.imageInput.data),c);let u=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),d=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);a("[WasmWorkerService] ultraScanBackDocument config: ",e.config);try{return this.wasmPrividModules._privid_doc_scan_back(this.wasmSession,o,n,c,e.imageInput.width,e.imageInput.height,u,d),!0}catch(m){return a("[WasmWorkerService] ultraScanBackDocument error:",m,"ERROR"),!1}finally{this.releasePointers(c,u,d,o)}}async ultraScanFrontDocument(e,r){if(g.result=r,!await this.ensureModulesAreReady())return!1;let i=new TextEncoder().encode(e.config),n=i.length,o=this.allocatePointer(n);this.wasmPrividModules.HEAP8.set(i,o/i.BYTES_PER_ELEMENT);let l=e.imageInput.data.length*e.imageInput.data.BYTES_PER_ELEMENT,c=this.allocatePointer(l);this.wasmPrividModules.HEAPU8.set(new Uint8Array(e.imageInput.data),c);let u=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),d=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);a("[WasmWorkerService] ultraScanFrontDocument config: ",e.config);try{return this.wasmPrividModules._privid_doc_scan_front(this.wasmSession,o,n,c,e.imageInput.width,e.imageInput.height,u,d),!0}catch(m){return a("[WasmWorkerService] ultraScanFrontDocument error:",m,"ERROR"),!1}finally{this.releasePointers(c,u,d,o)}}async ultraDocumentOcr(e,r){if(g.result=r,!await this.ensureModulesAreReady())return!1;let s=new TextEncoder,i=s.encode(e.config),n=s.encode(`${e.imageInput}`),o=i.length,l=this.allocatePointer(o);this.wasmPrividModules.HEAP8.set(i,l/i.BYTES_PER_ELEMENT);let c=n.length,u=this.allocatePointer(c);this.wasmPrividModules.HEAPU8.set(new Uint8Array(n),u);let d=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT),m=this.allocatePointer(Int32Array.BYTES_PER_ELEMENT);a("[WasmWorkerService] ultraDocumentOcr config: ",e.config);try{return this.wasmPrividModules._privid_doc_ocr_front_enc(this.wasmSession,l,o,u,c,d,m),!0}catch(h){return a("[WasmWorkerService] ultraDocumentOcr error:",h,"ERROR"),!1}finally{this.releasePointers(u,d,m,l)}}async checkModelsAreLoaded(){try{return await this.ensureModulesAreReady()?this.wasmPrividModules._privid_check_models():!1}catch(e){return a("[WasmWorkerService] checkModelsAreLoaded error",e,"ERROR"),!1}}async freeMemory(){try{return await this.ensureModulesAreReady()?this.wasmPrividModules._privid_free_memory():!1}catch(e){return a("[WasmWorkerService] freeMemory error: ",e,"ERROR"),!1}}createWasmResultPointers(){let e=null,r=null;return{getOuterPointer:()=>(e||(e=this.wasmPrividModules._malloc(Int32Array.BYTES_PER_ELEMENT)),e),getInnerPointer:()=>e?r||([r]=new Uint32Array(this.wasmPrividModules.HEAPU8.buffer,e,1),r):null}}createStringBuffer(e){let r=null,s=0,i=null;return{getArgs:()=>{if(i!==null)return i;if(e==null||typeof e=="number"&&Number.isNaN(e))return i=[0,0],i;try{let n=String(e),l=new TextEncoder().encode(n);if(s=l.length*l.BYTES_PER_ELEMENT,r=this.wasmPrividModules._malloc(s),r===0)throw new Error("WASM memory allocation failed");return this.wasmPrividModules.HEAP8.set(l,r/l.BYTES_PER_ELEMENT),i=[r,s],i}catch(n){return a("[WasmWorkerService] createStringBuffer error:",n,"ERROR"),i=[0,0],i}},free:()=>{if(r!==null&&r!==0){try{this.wasmPrividModules._free(r)}catch(n){a("[WasmWorkerService] free buffer error:",n,"ERROR")}r=null,s=0,i=null}},isAllocated:()=>r!==null&&r!==0}}releasePointers(...e){e.forEach(r=>{if(r!==null&&r!==0)try{this.wasmPrividModules._free(r)}catch(s){a("[WasmWorkerService] releasePointers error:",s,"ERROR")}})}allocatePointer(e){try{return this.wasmPrividModules._malloc(e)}catch(r){return a("[WasmWorkerService] allocatePointer error:",r,"ERROR"),0}}async ensureModulesAreReady(){if(this.isModuleInitializing&&this.moduleInitializationLock)try{await this.moduleInitializationLock}catch(e){return a("[WasmWorkerService] ensureModulesInitialized: Initialization failed during wait",e,"ERROR"),!1}if(!this.wasmPrividModules){if(!this.apiUrl||!this.sessionToken||!this.publicKey)return a("[WasmWorkerService] ensureModulesInitialized: Missing required initialization parameters",{apiUrl:!!this.apiUrl,sessionToken:!!this.sessionToken,publicKey:!!this.publicKey},"ERROR"),!1;try{await this.loadModules({simd:this.isSimd,apiUrl:this.apiUrl,sessionToken:this.sessionToken,publicKey:this.publicKey,debugType:this.debugType||"",cacheConfig:this.setCache},this.proxiedErrorCallback)}catch(e){return a("[WasmWorkerService] ensureModulesInitialized: Failed to load WASM modules",e,"ERROR"),!1}}return!this.wasmPrividModules||!this.wasmSession?(a("[WasmWorkerService] ensureModulesInitialized: WASM not fully initialized",{hasModules:!!this.wasmPrividModules,hasSession:!!this.wasmSession},"ERROR"),!1):!0}},Se=new D;_(Se);})();
|
|
2
2
|
/*! Bundled license information:
|
|
3
3
|
|
|
4
4
|
comlink/dist/esm/comlink.mjs:
|