@privateid/ultra-web-sdk-alpha
Version:
CryptoNets WebAssembly SDK
244 lines • 9.2 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { detect } from 'detect-browser';
import { simd } from 'wasm-feature-detect';
import { DEFAULT_ENROLL_CONFIG, MOBILE_ENROLL_CONFIG_OVERRIDES, DEFAULT_PREDICT_CONFIG, DEFAULT_AGE_ESTIMATION_CONFIG, DEFAULT_DOCUMENT_SCAN_CONFIG, DEFAULT_DOCUMENT_OCR_CONFIG, BROWSER_COMPATIBILITY_MESSAGES, SAFARI_MIN_VERSION_FOR_SIMD, SAFARI_MIN_SUBVERSION_FOR_SIMD, } from './wasm.constants';
import { iOS, isMobileDevice, printLogs, getDebugType, imageDataToBase64 } from '../../global/shared.utils';
import { clearDB } from '../../../../dbUtils';
/**
* Check if the current browser supports WASM
*/
export function checkBrowserCompatibility() {
const { name: browserName, version, os } = detect();
// Mobile checks
if (os === 'iOS' || iOS()) {
if (browserName === 'opera' && parseInt(version.split('.')[0], 10) <= 72) {
return { support: false, message: BROWSER_COMPATIBILITY_MESSAGES.OPERA_MOBILE_NOT_SUPPORTED };
}
}
if (os === 'Android OS') {
if (browserName === 'opera' && parseInt(version.split('.')[0], 10) <= 72) {
return { support: false, message: BROWSER_COMPATIBILITY_MESSAGES.OPERA_MOBILE_NOT_SUPPORTED };
}
if (browserName === 'android' && parseInt(version.split('.')[0], 10) <= 96) {
return { support: false, message: BROWSER_COMPATIBILITY_MESSAGES.ANDROID_BROWSER_NOT_SUPPORTED };
}
}
// Desktop browser checks
if (browserName === 'chrome' && parseInt(version.split('.')[0], 10) <= 57) {
return { support: false, message: BROWSER_COMPATIBILITY_MESSAGES.CHROME_NOT_SUPPORTED };
}
if (browserName === 'firefox' && parseInt(version.split('.')[0], 10) <= 52) {
return { support: false, message: BROWSER_COMPATIBILITY_MESSAGES.FIREFOX_NOT_SUPPORTED };
}
if (browserName === 'opera' && parseInt(version.split('.')[0], 10) <= 43) {
return { support: false, message: BROWSER_COMPATIBILITY_MESSAGES.OPERA_NOT_SUPPORTED };
}
return { support: true };
}
/**
* Determine if SIMD should be enabled based on browser and OS
*/
export function shouldEnableSimd() {
const { name: browserName, os } = detect();
if (iOS() || os === 'iOS' || (os === 'Mac OS' && browserName !== 'chrome')) {
return false;
}
return true;
}
/**
* Get default enrollment configuration
*/
export function getDefaultEnrollConfig() {
return Object.assign({}, DEFAULT_ENROLL_CONFIG);
}
/**
* Get enrollment configuration optimized for mobile
*/
export function getMobileEnrollConfig() {
return Object.assign(Object.assign({}, DEFAULT_ENROLL_CONFIG), MOBILE_ENROLL_CONFIG_OVERRIDES);
}
/**
* Get enrollment configuration with user overrides
*/
export function getEnrollConfig(userConfig, isMobile = false) {
const baseConfig = isMobile ? getMobileEnrollConfig() : getDefaultEnrollConfig();
return Object.assign(Object.assign({}, baseConfig), userConfig);
}
/**
* Get default prediction configuration
*/
export function getDefaultPredictConfig() {
return Object.assign({}, DEFAULT_PREDICT_CONFIG);
}
/**
* Get prediction configuration with user overrides
*/
export function getPredictConfig(userConfig) {
return Object.assign(Object.assign({}, DEFAULT_PREDICT_CONFIG), userConfig);
}
/**
* Get default age estimation configuration
*/
export function getDefaultAgeEstimationConfig() {
return Object.assign({}, DEFAULT_AGE_ESTIMATION_CONFIG);
}
/**
* Get age estimation configuration with user overrides
*/
export function getAgeEstimationConfig(userConfig) {
return Object.assign(Object.assign({}, DEFAULT_AGE_ESTIMATION_CONFIG), userConfig);
}
/**
* Get default document scan configuration
*/
export function getDefaultDocumentScanConfig() {
return Object.assign({}, DEFAULT_DOCUMENT_SCAN_CONFIG);
}
/**
* Get document scan configuration with user overrides
*/
export function getDocumentScanConfig(userConfig) {
return Object.assign(Object.assign({}, DEFAULT_DOCUMENT_SCAN_CONFIG), userConfig);
}
/**
* Get default document OCR configuration
*/
export function getDefaultDocumentOcrConfig() {
return Object.assign({}, DEFAULT_DOCUMENT_OCR_CONFIG);
}
/**
* Get document OCR configuration with user overrides
*/
export function getDocumentOcrConfig(userConfig) {
return Object.assign(Object.assign({}, DEFAULT_DOCUMENT_OCR_CONFIG), userConfig);
}
/**
* Convert configuration object to JSON string
*/
export function configToJson(config) {
return JSON.stringify(config);
}
/**
* Check if debug type enables image creation
*/
export function shouldCreateDebugImages(debugType) {
return ['900', '901', '902', '903'].includes(debugType);
}
/**
* Generate worker URL for WASM
*/
export function getWasmWorkerUrl() {
var _a;
const windowOrigin = (_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.origin;
return `${windowOrigin}/workers/wasm.worker.js`;
}
/**
* Check if current platform is mobile for mobile-specific configurations
*/
export function isMobilePlatform() {
return isMobileDevice();
}
/**
* Print WASM-specific logs (wrapper around shared printLogs)
*/
export function printWasmLogs(message, data = '', type = 'LOG') {
printLogs(`WASM: ${message}`, data, type);
}
/**
* Create debug images for WASM operations
*/
export function createWasmDebugImages(images, title, operation) {
return __awaiter(this, void 0, void 0, function* () {
const debugType = getDebugType();
if (!shouldCreateDebugImages(debugType)) {
return;
}
const promises = images.map((imageData) => imageDataToBase64(imageData));
const base64Images = yield Promise.all(promises);
base64Images.forEach((base64, index) => {
const a = document.createElement('a');
a.href = base64;
a.download = `${title}_${operation}_${index}.png`;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
});
});
}
/**
* Get URL parameter
*/
export function getUrlParameter(sParam, defaultValue) {
const sPageURL = window.location.search.substring(1);
const sURLVariables = sPageURL.split('&');
let sParameterName;
let i;
for (i = 0; i < sURLVariables.length; i++) {
sParameterName = sURLVariables[i].split('=');
if (sParameterName[0] === sParam) {
return typeof sParameterName[1] === undefined ? defaultValue : decodeURIComponent(sParameterName[1]);
}
}
return defaultValue;
}
export function handleCacheContent() {
return __awaiter(this, void 0, void 0, function* () {
const clearCacheParam = getUrlParameter('clear_cache', 'false');
const cacheAge = localStorage.getItem('cacheAge');
const cacheContent = localStorage.getItem('cache_content') || '';
if (!cacheAge) {
localStorage.setItem('cacheAge', Date.now().toString());
}
if ((cacheAge && Date.now() - Number(cacheAge) > 24 * 60 * 60 * 1000) || clearCacheParam === 'true') {
printLogs('ClearingCache', '');
yield clearDB();
localStorage.clear();
localStorage.setItem('cacheAge', Date.now().toString());
}
return cacheContent;
});
}
export function checkLoadSimdBuild() {
return __awaiter(this, void 0, void 0, function* () {
const hasSIMDSupport = yield checkSimdSupport();
printLogs(`Is SIMD:' ${hasSIMDSupport}`, '');
const { name: browserName, version } = detect();
if (browserName === 'safari') {
return checkSimdSupportForSafariVersion(version);
}
return hasSIMDSupport;
});
}
/**
* Get SIMD support status
*/
export function checkSimdSupport() {
return __awaiter(this, void 0, void 0, function* () {
try {
const simdSupport = yield simd();
printLogs('SIMD support', simdSupport);
return simdSupport;
}
catch (error) {
return false;
}
});
}
export function checkSimdSupportForSafariVersion(version) {
const versionAsArray = version.split('.');
const parsedVersion = parseInt(versionAsArray[0], 10);
const parsedSubVersion = parseInt(versionAsArray[1], 10);
if (parsedVersion < SAFARI_MIN_VERSION_FOR_SIMD && parsedSubVersion < SAFARI_MIN_SUBVERSION_FOR_SIMD) {
return false;
}
return true;
}
//# sourceMappingURL=wasm.utils.js.map