UNPKG

@privateid/ultra-web-sdk-alpha

Version:
244 lines 9.2 kB
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