UNPKG

@microblink/blinkid-in-browser-sdk

Version:

A simple ID scanning library for WebAssembly-enabled browsers.

2 lines (1 loc) 29.6 kB
!function(){"use strict";let e=0;class t{constructor(t){this.action=t,this.messageID=function(){const t=e;return e+=1,t}()}}class s extends t{constructor(e,t){super(s.action),this.wasmModuleName=e.wasmModuleName,this.licenseKey=e.licenseKey,this.userId=t,this.registerLoadCallback=null!==e.loadProgressCallback,this.allowHelloMessage=e.allowHelloMessage,this.engineLocation=e.engineLocation,this.wasmType=e.wasmType,this.initialMemory=e.initialMemory,this.blinkIDVariant=e.blinkIdVariant,this.numberOfWorkers=e.numberOfWorkers}}var n,r;s.action="init",function(e){e[e.Any=0]="Any",e[e.Recognizer=1]="Recognizer",e[e.RecognizerSettings=2]="RecognizerSettings",e[e.Callback=3]="Callback"}(n||(n={}));class i extends t{constructor(e,t){super(i.action),this.funcName=e,this.params=t}}i.action="invokeFunction";class a extends t{constructor(e,t){super(a.action),this.className=e,this.params=t}}a.action="createNewNativeObject";class o extends t{constructor(e,t,s){super(o.action),this.recognizerHandles=e,this.allowMultipleResults=t,this.registeredMetadataCallbacks=s}}o.action="createRecognizerRunner";class c extends t{constructor(e,t){super(c.action),this.recognizerHandles=e,this.allowMultipleResults=t}}c.action="reconfigureRecognizerRunner";class E extends t{constructor(){super(E.action)}}E.action="deleteRecognizerRunner";class R extends t{constructor(e,t,s){super(R.action),this.objectHandle=e,this.methodName=t,this.params=s}}R.action="invokeObject";class l extends t{constructor(e){super(l.action),this.frame=e}getTransferrables(){return[this.frame.imageData.data.buffer]}}l.action="processImage";class _ extends t{constructor(e){super(_.action),this.hardReset=e}}_.action="resetRecognizers";class I extends t{constructor(e){super(I.action),this.registeredMetadataCallbacks=e}}I.action="registerMetadataCallbacks";class u extends t{constructor(e){super(u.action),this.detectionOnlyMode=e}}u.action="setDetectionOnly";class N extends t{constructor(e){super(N.action),this.cameraPreviewMirrored=e}}N.action="setCameraPreviewMirrored";class d extends t{constructor(e){super(d.action),this.userId=e}}d.action="getProductIntegrationInfo";class O extends t{constructor(e){super(O.action),this.pingProxyUrl=e}}O.action="setPingProxyUrl";class h extends t{constructor(e){super(h.action),this.data=e}}h.action="setPingData";class g{constructor(e,t,s){this.success=!0,this.error=null,this.messageID=e,this.success=t,this.error=s}}class S{constructor(e,t,s,n){this.success=!0,this.showOverlay=!0,this.messageID=e,this.success=t,this.showOverlay=s,this.wasmType=n}}class A extends g{constructor(e,t){super(e,!0,null),this.result=t}}class D extends g{constructor(e,t){super(e,!0,null),this.objectHandle=t}}class m extends g{constructor(e,t){super(e,!0,null),this.recognitionState=t}}class C extends g{constructor(e,t){super(e,!0,null),this.result=t}}class f{constructor(e){this.isLoadProgressMessage=!0,this.progress=e}}!function(e){e[e.onDebugText=0]="onDebugText",e[e.onDetectionFailed=1]="onDetectionFailed",e[e.onQuadDetection=2]="onQuadDetection",e[e.onPointsDetection=3]="onPointsDetection",e[e.onFirstSideResult=4]="onFirstSideResult",e[e.recognizerCallback=5]="recognizerCallback"}(r||(r={}));class p{constructor(e,t){this.isCallbackMessage=!0,this.callbackType=e,this.callbackParameters=t}}function T(e,t){return t=t||"",""===(e=e||"")?t:e.endsWith("/")?t.startsWith("/")?e+t.substring(1):e+t:t.startsWith("/")?e+t:e+"/"+t}var L,M,w;async function y(){if(!await(async e=>{try{return"undefined"!=typeof MessageChannel&&(new MessageChannel).port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(e)}catch(e){return!1}})(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11])))return!1;if(!("importScripts"in self))throw Error("Not implemented");return!function(){const e=navigator.userAgent.toLowerCase();return e.includes("safari")&&!e.includes("chrome")}()&&"Worker"in self}async function U(){const e=await(async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11])))(),t=await y();return e?t?L.AdvancedWithThreads:L.Advanced:L.Basic}!function(e){e.Basic="BASIC",e.Advanced="ADVANCED",e.AdvancedWithThreads="ADVANCED_WITH_THREADS"}(L||(L={}));class P extends Error{constructor(e,t){if(super(),!e.code||!e.message)throw Error("Instance of SDKError is required to have code and message.");if(this.message=e.message,this.code=e.code,e instanceof b&&e.details&&"message"in e.details){const t=Error(e.details.message);"stack"in e.details&&(t.stack=e.details.stack),this.details=t}else this.details=t}}class b{constructor(e,t){if(!e.code||!e.message)throw Error("Instance of SDKError is required to have code and message.");this.message=e.message,this.code=e.code,this.details=t instanceof Error?new F(t):t}}class F{constructor(e){this.message=e.message,this.name=e.name,this.stack=e.stack}}!function(e){e.WORKER_WASM_LOAD_FAILURE="WORKER_WASM_LOAD_FAILURE",e.WORKER_WASM_INIT_MISSING="WORKER_WASM_INIT_MISSING",e.WORKER_FUNCTION_INVOKE_FAILURE="WORKER_FUNCTION_INVOKE_FAILURE",e.WORKER_RECOGNIZER_CREATION_FAILURE="WORKER_RECOGNIZER_CREATION_FAILURE",e.WORKER_RUNNER_EXISTS="WORKER_RUNNER_EXISTS",e.WORKER_RUNNER_CREATION_FAILURE="WORKER_RUNNER_CREATION_FAILURE",e.WORKER_RUNNER_MISSING="WORKER_RUNNER_MISSING",e.WORKER_RUNNER_RECONFIGURE_FAILURE="WORKER_RUNNER_RECONFIGURE_FAILURE",e.WORKER_RUNNER_DELETED="WORKER_RUNNER_DELETED",e.WORKER_RUNNER_DELETE_FAILURE="WORKER_RUNNER_DELETE_FAILURE",e.WORKER_OBJECT_INVOKE_FAILURE="WORKER_OBJECT_INVOKE_FAILURE",e.WORKER_IMAGE_PROCESS_FAILURE="WORKER_IMAGE_PROCESS_FAILURE",e.WORKER_HANDLE_UNDEFINED="WORKER_HANDLE_UNDEFINED",e.WORKER_MESSAGE_ACTION_UNKNOWN="WORKER_MESSAGE_ACTION_UNKNOWN",e.WORKER_LICENSE_UNLOCK_ERROR="WORKER_LICENSE_UNLOCK_ERROR",e.WORKER_INTEGRATION_INFO_FAILURE="WORKER_INTEGRATION_INFO_FAILURE",e.LOCAL_SDK_RUNNER_MISSING="LOCAL_SDK_RUNNER_MISSING",e.LOCAL_SDK_RUNNER_EMPTY="LOCAL_SDK_RUNNER_EMPTY",e.LICENSE_UNLOCK_ERROR="LICENSE_UNLOCK_ERROR",e.FRAME_CAPTURE_SVG_UNSUPPORTED="FRAME_CAPTURE_SVG_UNSUPPORTED",e.FRAME_CAPTURE_CANVAS_MISSING="FRAME_CAPTURE_CANVAS_MISSING",e.SDK_WASM_SETTINGS_MISSING="SDK_WASM_SETTINGS_MISSING",e.SDK_LICENSE_KEY_MISSING="SDK_LICENSE_KEY_MISSING",e.SDK_WASM_MODULE_NAME_MISSING="SDK_WASM_MODULE_NAME_MISSING",e.SDK_ENGINE_LOCATION_INVALID="SDK_ENGINE_LOCATION_INVALID",e.SDK_WORKER_LOCATION_INVALID="SDK_WORKER_LOCATION_INVALID",e.SDK_MISSING="SDK_MISSING",e.SDK_RECOGNIZERS_MISSING="SDK_RECOGNIZERS_MISSING",e.VIDEO_RECOGNIZER_ELEMENT_MISSING="VIDEO_RECOGNIZER_ELEMENT_MISSING",e.VIDEO_RECOGNIZER_CAMERA_MISSING="VIDEO_RECOGNIZER_CAMERA_MISSING",e.VIDEO_RECOGNIZER_CAMERA_NOT_ALLOWED="VIDEO_RECOGNIZER_CAMERA_NOT_ALLOWED",e.VIDEO_RECOGNIZER_CAMERA_UNAVAILABLE="VIDEO_RECOGNIZER_CAMERA_UNAVAILABLE",e.VIDEO_RECOGNIZER_CAMERA_IN_USE="VIDEO_RECOGNIZER_CAMERA_IN_USE",e.VIDEO_RECOGNIZER_MEDIA_DEVICES_UNSUPPORTED="VIDEO_RECOGNIZER_MEDIA_DEVICES_UNSUPPORTED",e.VIDEO_RECOGNIZER_FEED_RELEASED="VIDEO_RECOGNIZER_FEED_RELEASED",e.VIDEO_RECOGNIZER_FEED_NOT_PAUSED="VIDEO_RECOGNIZER_FEED_NOT_PAUSED",e.VIDEO_RECOGNIZER_PLAY_REQUEST_INTERRUPTED="VIDEO_RECOGNIZER_PLAY_REQUEST_INTERRUPTED",e.VIDEO_RECOGNIZER_FEED_PAUSED="VIDEO_RECOGNIZER_FEED_PAUSED",e.VIDEO_RECOGNIZER_RECOGNIZERS_RESET_FAILURE="VIDEO_RECOGNIZER_RECOGNIZERS_RESET_FAILURE",e.VIDEO_RECOGNIZER_FEED_MISSING="VIDEO_RECOGNIZER_FEED_MISSING",e.INVALID_PING_PROXY_URL="INVALID_PROXY_URL",e.PING_PROXY_PERMISSION_NOT_GRANTED="PING_PROXY_PERMISSION_NOT_GRANTED",e.PING_DATA_KEYS_AMOUNT_EXCEEDED="PING_DATA_KEYS_AMOUNT_EXCEEDED",e.PING_DATA_KEY_LENGTH_EXCEEDED="PING_DATA_KEY_LENGTH_EXCEEDED",e.PING_DATA_VALUE_LENGTH_EXCEEDED="PING_DATA_VALUE_LENGTH_EXCEEDED"}(M||(M={})),function(e){e.WORKER_HANDLE_UNDEFINED="Cannot find object with handle: undefined",e.WORKER_WASM_LOAD_FAILURE="Failed to load WASM in web worker!",e.WORKER_WASM_INIT_MISSING="WASM module is not initialized!",e.WORKER_FUNCTION_INVOKE_FAILURE="Failed to invoke function!",e.WORKER_RECOGNIZER_CREATION_FAILURE="Failed to create new recognizer!",e.WORKER_RUNNER_EXISTS="Recognizer runner is already created! Multiple instances are not allowed!",e.WORKER_RUNNER_CREATION_FAILURE="Failed to create new recognizer runner!",e.WORKER_RUNNER_MISSING="Recognizer runner is not created! There is nothing to reconfigure!",e.WORKER_RUNNER_RECONFIGURE_FAILURE="Failed to reconfigure recognizer runner!",e.WORKER_RUNNER_DELETED="Recognizer runner is already deleted!",e.WORKER_RUNNER_DELETE_FAILURE="Failed to delete recognizer runner!",e.WORKER_OBJECT_INVOKE_FAILURE="Failed to invoke object!",e.WORKER_IMAGE_PROCESS_FAILURE="Recognizer runner is not initialized! Cannot process image!",e.WORKER_INTEGRATION_INFO_FAILURE="Failed to get product integration info!",e.LOCAL_SDK_RUNNER_MISSING="Property nativeRecognizerRunner is not available!",e.LOCAL_SDK_RUNNER_EMPTY="Native RecognizerRunner cannot be empty!",e.LICENSE_TOKEN_STATE_INCORRECT="Internal error (Incorrect token state)",e.LICENSE_PAYLOAD_VERIFICATION_FAILED="Failed to verify server permission's digital signature!",e.LICENSE_PAYLOAD_CORRUPTED="Server permission payload is corrupted!",e.LICENSE_PERMISSION_EXPIRED="Internal error (server permission expired)",e.LICENSE_REMOTE_LOCKED="Provided license key has been remotely locked. Please contact support for more information!",e.FRAME_CAPTURE_SVG_UNSUPPORTED="Recognition of SVG elements not supported!",e.FRAME_CAPTURE_CANVAS_MISSING="Could not get canvas 2d context!",e.SDK_WASM_SETTINGS_MISSING="Missing WASM load settings!",e.SDK_LICENSE_KEY_MISSING="Missing license key!",e.SDK_WASM_MODULE_NAME_MISSING="Missing WASM module name!",e.SDK_ENGINE_LOCATION_INVALID="Setting property 'engineLocation' must be a string!",e.SDK_WORKER_LOCATION_INVALID="Setting property 'workerLocation' must be a string!",e.SDK_MISSING="SDK is not provided!",e.SDK_RECOGNIZERS_MISSING="To create RecognizerRunner at least 1 recognizer is required.",e.VIDEO_RECOGNIZER_ELEMENT_MISSING="Video element, i.e. camera feed is not provided!",e.VIDEO_RECOGNIZER_CAMERA_MISSING="Camera not found!",e.VIDEO_RECOGNIZER_CAMERA_NOT_ALLOWED="Camera not allowed!",e.VIDEO_RECOGNIZER_CAMERA_UNAVAILABLE="Camera not available!",e.VIDEO_RECOGNIZER_CAMERA_IN_USE="Camera in use!",e.VIDEO_RECOGNIZER_MEDIA_DEVICES_UNSUPPORTED="Media devices not supported by browser.",e.VIDEO_RECOGNIZER_FEED_RELEASED="The associated video feed has been released!",e.VIDEO_RECOGNIZER_FEED_NOT_PAUSED="The associated video feed is not paused. Use resumeRecognition instead!",e.VIDEO_RECOGNIZER_PLAY_REQUEST_INTERRUPTED="The play() request was interrupted or prevented by browser security rules!",e.VIDEO_RECOGNIZER_FEED_PAUSED="Cannot resume recognition while video feed is paused! Use recognize or startRecognition",e.VIDEO_RECOGNIZER_RECOGNIZERS_RESET_FAILURE="Could not reset recognizers!",e.VIDEO_RECOGNIZER_FEED_MISSING="Missing video feed!",e.INVALID_PING_PROXY_URL="Provided ping proxy URL is not a valid secure URL in format 'https://{host}:{port?}'.",e.PING_PROXY_PERMISSION_NOT_GRANTED="Allow ping proxy permission not found in license.",e.PING_DATA_KEYS_AMOUNT_EXCEEDED="Maximum number of ping data keys exceeded.",e.PING_DATA_KEY_LENGTH_EXCEEDED="Ping data key is too long.",e.PING_DATA_VALUE_LENGTH_EXCEEDED="Ping data value is too long."}(w||(w={}));const K={licenseTokenStateIncorrect:{code:M.LICENSE_UNLOCK_ERROR,message:w.LICENSE_TOKEN_STATE_INCORRECT},licensePayloadVerificationFailed:{code:M.LICENSE_UNLOCK_ERROR,message:w.LICENSE_PAYLOAD_VERIFICATION_FAILED},licensePayloadCorrupted:{code:M.LICENSE_UNLOCK_ERROR,message:w.LICENSE_PAYLOAD_CORRUPTED},licensePermissionExpired:{code:M.LICENSE_UNLOCK_ERROR,message:w.LICENSE_PERMISSION_EXPIRED},licenseRemoteLocked:{code:M.LICENSE_UNLOCK_ERROR,message:w.LICENSE_REMOTE_LOCKED},licenseNetworkError:{code:M.LICENSE_UNLOCK_ERROR},licenseInvalid:{code:M.LICENSE_UNLOCK_ERROR}},G={imageProcessFailure:{message:w.WORKER_IMAGE_PROCESS_FAILURE,code:M.WORKER_IMAGE_PROCESS_FAILURE},objectInvokeFailure:{message:w.WORKER_OBJECT_INVOKE_FAILURE,code:M.WORKER_OBJECT_INVOKE_FAILURE},runnerDeleteFailure:{message:w.WORKER_RUNNER_DELETE_FAILURE,code:M.WORKER_RUNNER_DELETE_FAILURE},runnerDeleted:{message:w.WORKER_RUNNER_DELETED,code:M.WORKER_RUNNER_DELETED},runnerReconfigureFailure:{message:w.WORKER_RUNNER_RECONFIGURE_FAILURE,code:M.WORKER_RUNNER_RECONFIGURE_FAILURE},runnerMissing:{message:w.WORKER_RUNNER_MISSING,code:M.WORKER_RUNNER_MISSING},runnerCreationFailure:{message:w.WORKER_RUNNER_CREATION_FAILURE,code:M.WORKER_RUNNER_CREATION_FAILURE},runnerExists:{message:w.WORKER_RUNNER_EXISTS,code:M.WORKER_RUNNER_EXISTS},recognizerCreationFailure:{message:w.WORKER_RECOGNIZER_CREATION_FAILURE,code:M.WORKER_RECOGNIZER_CREATION_FAILURE},functionInvokeFailure:{message:w.WORKER_FUNCTION_INVOKE_FAILURE,code:M.WORKER_FUNCTION_INVOKE_FAILURE},wasmInitMissing:{message:w.WORKER_WASM_INIT_MISSING,code:M.WORKER_WASM_INIT_MISSING},wasmLoadFailure:{message:w.WORKER_WASM_LOAD_FAILURE,code:M.WORKER_WASM_LOAD_FAILURE},handleUndefined:{message:w.WORKER_HANDLE_UNDEFINED,code:M.WORKER_HANDLE_UNDEFINED},integrationInfoFailure:{message:w.WORKER_INTEGRATION_INFO_FAILURE,code:M.WORKER_INTEGRATION_INFO_FAILURE}},k={invalidProxyUrl:{message:w.INVALID_PING_PROXY_URL,code:M.INVALID_PING_PROXY_URL},permissionNotGranted:{message:w.PING_PROXY_PERMISSION_NOT_GRANTED,code:M.PING_PROXY_PERMISSION_NOT_GRANTED},dataKeysAmountExceeded:{message:w.PING_DATA_KEYS_AMOUNT_EXCEEDED,code:M.PING_DATA_KEYS_AMOUNT_EXCEEDED},dataKeyLengthExceeded:{message:w.PING_DATA_KEY_LENGTH_EXCEEDED,code:M.PING_DATA_KEY_LENGTH_EXCEEDED},dataValueLengthExceeded:{message:w.PING_DATA_VALUE_LENGTH_EXCEEDED,code:M.PING_DATA_VALUE_LENGTH_EXCEEDED}};var v,W;!function(e){e[e.Invalid=0]="Invalid",e[e.RequiresServerPermission=1]="RequiresServerPermission",e[e.Valid=2]="Valid"}(v||(v={})),function(e){e.LicenseTokenStateInvalid="LICENSE_TOKEN_STATE_INVALID",e.NetworkError="NETWORK_ERROR",e.RemoteLock="REMOTE_LOCK",e.PermissionExpired="PERMISSION_EXPIRED",e.PayloadCorrupted="PAYLOAD_CORRUPTED",e.PayloadSignatureVerificationFailed="PAYLOAD_SIGNATURE_VERIFICATION_FAILED",e.IncorrectTokenState="INCORRECT_TOKEN_STATE"}(W||(W={}));function V(e){return{licenseId:e.licenseId,licensee:e.licensee,applicationIds:e.applicationIds,packageName:e.packageName,platform:"Browser",sdkName:e.sdkName,sdkVersion:e.sdkVersion}}var x;async function z(e,t){try{const s=await fetch("https://baltazar.microblink.com/api/v2/status/check",{method:"POST",headers:{"Content-Type":"application/json"},cache:"no-cache",body:JSON.stringify(V(e))});if(s.ok){const e=""+await s.text();return t.submitServerPermission(e)}return{status:x.NetworkError,lease:0,networkErrorDescription:"Server responded with status "+s.status}}catch(e){return{status:x.NetworkError,lease:0,networkErrorDescription:"Unexpected error: "+JSON.stringify(e)}}}!function(e){e[e.Ok=0]="Ok",e[e.NetworkError=1]="NetworkError",e[e.RemoteLock=2]="RemoteLock",e[e.PermissionExpired=3]="PermissionExpired",e[e.PayloadCorrupted=4]="PayloadCorrupted",e[e.PayloadSignatureVerificationFailed=5]="PayloadSignatureVerificationFailed",e[e.IncorrectTokenState=6]="IncorrectTokenState"}(x||(x={}));var H=J,Z=J,Y=J;const X=/(android|bb\d+|meego).+mobile|armv7l|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|samsungbrowser.*mobile|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,j=/CrOS/,B=/android|ipad|playbook|silk/i;function J(e){e||(e={});let t=e.ua;if(t||"undefined"==typeof navigator||(t=navigator.userAgent),t&&t.headers&&"string"==typeof t.headers["user-agent"]&&(t=t.headers["user-agent"]),"string"!=typeof t)return!1;let s=X.test(t)&&!j.test(t)||!!e.tablet&&B.test(t);return!s&&e.tablet&&e.featureDetect&&navigator&&navigator.maxTouchPoints>1&&-1!==t.indexOf("Macintosh")&&-1!==t.indexOf("Safari")&&(s=!0),s}function Q(e){return Math.ceil(1024*e*1024/64/1024)}function q(){const e=self.navigator.userAgent.toLowerCase();return e.includes("safari")&&!e.includes("chrome")}H.isMobile=Z,H.default=Y;const{port1:$,port2:ee}=new MessageChannel;ee.close(),q()&&$.close();new class{constructor(){this.context=self,this.wasmModule=null,this.nativeRecognizerRunner=null,this.objects={},this.nextObjectHandle=0,this.metadataCallbacks={},this.context.onmessage=e=>{const t=e.data;switch(t.action){case s.action:this.processInitMessage(t);break;case i.action:this.processInvokeFunction(t);break;case a.action:this.processCreateNewRecognizer(t);break;case R.action:this.processInvokeObject(t);break;case o.action:this.processCreateRecognizerRunner(t);break;case c.action:this.processReconfigureRecognizerRunner(t);break;case E.action:this.processDeleteRecognizerRunner(t);break;case l.action:this.processImage(t);break;case _.action:this.resetRecognizers(t);break;case u.action:this.setDetectionOnly(t);break;case N.action:this.setCameraPreviewMirrored(t);break;case I.action:this.registerMetadataCallbacks(t);break;case d.action:this.processGetProductIntegrationInfo(t);break;case O.action:this.setPingProxyUrl(t);break;case h.action:this.setPingData(t);break;default:throw new P({code:M.WORKER_MESSAGE_ACTION_UNKNOWN,message:"Unknown message action: "+JSON.stringify(t.action)})}}}getNextObjectHandle(){const e=this.nextObjectHandle;return this.nextObjectHandle=this.nextObjectHandle+1,e}notifyError(e,t){this.context.postMessage(new g(e.messageID,!1,t))}notifySuccess(e){this.context.postMessage(new g(e.messageID,!0,null))}notifyInitSuccess(e,t,s){this.context.postMessage(new S(e.messageID,!0,t,s))}unwrapParameters(e){const t=[];for(const s of e.params){let r=s.parameter;s.type===n.Recognizer?(r=this.objects[r],void 0===r&&this.notifyError(e,new b(G.handleUndefined))):s.type===n.RecognizerSettings&&(r=this.restoreFunctions(r)),t.push(r)}return t}restoreFunctions(e){const t=Object.keys(e);for(const s of t){const t=e[s];"object"==typeof t&&null!==t&&"parameter"in t&&"type"in t&&t.type===n.Callback&&(e[s]=(...e)=>{const s=new p(r.recognizerCallback,[t.parameter].concat(e));this.context.postMessage(s)})}return e}scanForTransferrables(e){if("object"==typeof e){const t=Object.keys(e),s=[];for(const n of t){const t=e[n];t instanceof ImageData?s.push(t.data.buffer):t instanceof Uint8Array?s.push(t.buffer):null!==t&&"object"==typeof t&&s.push(...this.scanForTransferrables(t))}return s}return[]}registerHeartBeat(e){this.unregisterHeartBeat(),this.lease=e;let t=e-Math.floor(Date.now()/1e3);t>120?t-=120:t/=2,this.inFlightHeartBeatTimeoutId=setTimeout((()=>{this.obtainNewServerPermission(!0)}),1e3*t)}unregisterHeartBeat(){this.lease&&delete this.lease,this.inFlightHeartBeatTimeoutId&&(clearTimeout(this.inFlightHeartBeatTimeoutId),delete this.inFlightHeartBeatTimeoutId)}async obtainNewServerPermission(e){if(this.wasmModule){const t=this.wasmModule.getActiveLicenseTokenInfo(),s=await z(t,this.wasmModule);switch(s.status){case x.Ok:case x.RemoteLock:this.registerHeartBeat(s.lease);break;case x.NetworkError:case x.PayloadSignatureVerificationFailed:case x.PayloadCorrupted:e?(console.warn("Problem with obtaining server permission. Will attempt in 10 seconds "+x[s.status]),this.inFlightHeartBeatTimeoutId=setTimeout((()=>{this.obtainNewServerPermission(!1)}),1e4)):console.error("Problem with obtaining server permission. "+x[s.status]);break;case x.IncorrectTokenState:case x.PermissionExpired:console.error("Internal error: "+x[s.status])}return s.status}return console.error("Internal inconsistency! Wasm module not initialized where it's expected to be!"),x.IncorrectTokenState}willSoonExpire(){if(this.lease){if(this.wasmModule.getActiveLicenseTokenInfo().unlockResult===v.Valid){const e=Math.floor(Date.now()/1e3);return 30>this.lease-e}return!0}return!1}async calculateWasmBundle(e){const t=e.blinkIDVariant??(Z()?"lightweight":"full");return{wasmType:e.wasmType??await U(),blinkIDVariant:t}}calculateEngineLocationPrefix(e,t){const s=""===e.engineLocation?self.location.origin:e.engineLocation;console.log("Engine location is:",s);const n=T(s,function(e){let t="";return t=e.wasmType===L.AdvancedWithThreads?"advanced-threads":e.wasmType===L.Advanced?"advanced":"basic",`${e.blinkIDVariant}/${t}`}(t));return e.allowHelloMessage&&console.log("Engine location prefix is:",n),n}async processInitMessage(e){const t=await this.calculateWasmBundle(e),s=this.calculateEngineLocationPrefix(e,t);let n={locateFile:e=>T(s,e),noExitRuntime:!0},r=e.initialMemory;r||(r=/iOS|iPhone|iPad|iPod/i.test(navigator.userAgent)?700:200);const i=new WebAssembly.Memory({initial:Q(r),maximum:Q(2048),shared:t.wasmType===L.AdvancedWithThreads});n.wasmMemory=i,e.registerLoadCallback&&(n=Object.assign(n,{setStatus:e=>{const t=new f(function(e){if("Running..."===e)return 100;if(0===e.length)return 0;const t=RegExp(/([^(]+)\((\d+(\.\d+)?)\/(\d+)\)/).exec(e);if(t)return 100*parseInt(t[2])/parseInt(t[4]);return NaN}(e));this.context.postMessage(t)}}));try{const r=T(s,e.wasmModuleName+".js");n.mainScriptUrlOrBlob=r,importScripts(r);(0,self[e.wasmModuleName])(n).then((async s=>{const n=await async function(e,t,s,n){const r=n.initializeWithLicenseKey(e,s,t);switch(r.unlockResult){case v.Invalid:return{error:new P({...K.licenseInvalid,message:r.licenseError},{type:W.LicenseTokenStateInvalid})};case v.Valid:return{error:null,showOverlay:(i=r.isTrial,a=r.allowRemoveDemoOverlay,o=r.allowRemoveProductionOverlay,!(i&&a||!i&&o))};case v.RequiresServerPermission:{const e=await z(r,n);switch(e.status){case x.Ok:return{error:null,lease:e.lease};case x.NetworkError:{let t="";return e.networkErrorDescription&&(t=" "+e.networkErrorDescription),{error:new P({...K.licenseNetworkError,message:"There has been a network error while obtaining the server permission!"+t},{type:W.NetworkError})}}case x.RemoteLock:return{error:new P(K.licenseRemoteLocked,{type:W.RemoteLock}),lease:e.lease};case x.PermissionExpired:return{error:new P(K.licensePermissionExpired,{type:W.PermissionExpired}),lease:e.lease};case x.PayloadCorrupted:return{error:new P(K.licensePayloadCorrupted,{type:W.PayloadCorrupted}),lease:e.lease};case x.PayloadSignatureVerificationFailed:return{error:new P(K.licensePayloadVerificationFailed,{type:W.PayloadSignatureVerificationFailed}),lease:e.lease};case x.IncorrectTokenState:return{error:new P(K.licenseTokenStateIncorrect,{type:W.IncorrectTokenState}),lease:e.lease}}}}var i,a,o}(e.licenseKey,e.allowHelloMessage,e.userId,s);null===n.error?(this.wasmModule=s,n.lease?this.registerHeartBeat(n.lease):this.unregisterHeartBeat(),this.notifyInitSuccess(e,!!n.showOverlay,t.wasmType)):this.notifyError(e,new b(n.error,n.error.details))}),(t=>{this.notifyError(e,new b(G.wasmLoadFailure,t))}))}catch(t){this.notifyError(e,new b(G.wasmLoadFailure,t))}}processInvokeFunction(e){if(null===this.wasmModule)return void this.notifyError(e,new b(G.wasmInitMissing));const t=e.funcName,s=this.unwrapParameters(e);try{const n=this.wasmModule[t](...s);this.context.postMessage(new A(e.messageID,n))}catch(t){this.notifyError(e,new b(G.functionInvokeFailure,t))}}processCreateNewRecognizer(e){if(null===this.wasmModule)return void this.notifyError(e,new b(G.wasmInitMissing));const t=e.className,s=this.unwrapParameters(e);try{const n=new this.wasmModule[t](...s),r=this.getNextObjectHandle();this.objects[r]=n,this.context.postMessage(new D(e.messageID,r))}catch(t){this.notifyError(e,new b(G.recognizerCreationFailure,t))}}getRecognizers(e){const t=[];for(const s of e){t.push(this.objects[s])}return t}async processCreateRecognizerRunner(e){if(null===this.wasmModule)this.notifyError(e,new b(G.wasmInitMissing));else if(null!==this.nativeRecognizerRunner)this.notifyError(e,new b(G.runnerExists));else{this.setupMetadataCallbacks(e.registeredMetadataCallbacks);try{if(this.willSoonExpire()){const t=await this.obtainNewServerPermission(!1);if(t!==x.Ok){const s=x[t];return void this.notifyError(e,new b({code:M.WORKER_LICENSE_UNLOCK_ERROR,message:"Cannot initialize recognizers because of invalid server permission:\n "+s},{type:W[s]}))}}const t=this.getRecognizers(e.recognizerHandles);this.nativeRecognizerRunner=new this.wasmModule.RecognizerRunner(t,e.allowMultipleResults,this.metadataCallbacks),this.notifySuccess(e)}catch(t){this.notifyError(e,new b(G.runnerCreationFailure,t))}}}processReconfigureRecognizerRunner(e){if(null===this.wasmModule)this.notifyError(e,new b(G.wasmInitMissing));else if(null===this.nativeRecognizerRunner)this.notifyError(e,new b(G.runnerMissing));else try{const t=this.getRecognizers(e.recognizerHandles);this.nativeRecognizerRunner.reconfigureRecognizers(t,e.allowMultipleResults),this.notifySuccess(e)}catch(t){this.notifyError(e,new b(G.runnerReconfigureFailure,t))}}processDeleteRecognizerRunner(e){if(null!==this.nativeRecognizerRunner)try{this.nativeRecognizerRunner.delete(),this.nativeRecognizerRunner=null,this.notifySuccess(e)}catch(t){this.notifyError(e,new b(G.runnerDeleteFailure,t))}else this.notifyError(e,new b(G.runnerDeleted))}wrapFunctions(e,t){if("object"!=typeof e)return e;const s={...e},r=Object.keys(s);for(const e of r){if("function"==typeof s[e]){s[e]={parameter:{recognizerHandle:t,callbackName:e},type:n.Callback}}}return s}processInvokeObject(e){try{const t=e.objectHandle,s=e.methodName,n=this.unwrapParameters(e),r=this.objects[t];if(void 0===r)this.notifyError(e,new b({message:"Cannot find object with handle: "+t,code:M.WORKER_HANDLE_UNDEFINED}));else{const i=this.wrapFunctions(r[s](...n),t),a=this.scanForTransferrables(i);"delete"===s&&delete this.objects[t],this.context.postMessage(new A(e.messageID,i),a)}}catch(t){this.notifyError(e,new b(G.objectInvokeFailure,t))}}processImage(e){if(null!==this.nativeRecognizerRunner)try{const t=this.nativeRecognizerRunner.processImage(e.frame);q()||$.postMessage(e.frame.imageData.data,[e.frame.imageData.data.buffer]),this.context.postMessage(new m(e.messageID,t))}catch(t){this.notifyError(e,new b(G.imageProcessFailure,t))}else this.notifyError(e,new b(G.imageProcessFailure))}resetRecognizers(e){if(null!==this.nativeRecognizerRunner)try{this.nativeRecognizerRunner.resetRecognizers(e.hardReset),this.notifySuccess(e)}catch(t){this.notifyError(e,new b(G.imageProcessFailure,t))}else this.notifyError(e,new b(G.imageProcessFailure))}setPingProxyUrl(e){if(null!==this.nativeRecognizerRunner)try{this.nativeRecognizerRunner.setPingProxyUrl(e.pingProxyUrl),this.notifySuccess(e)}catch(t){this.notifyError(e,new b("cause"in t&&"PERMISSION_NOT_GRANTED"===t.cause?k.permissionNotGranted:G.runnerMissing,t))}else this.notifyError(e,new b(G.runnerMissing))}setPingData(e){if(null!==this.nativeRecognizerRunner)try{this.nativeRecognizerRunner.setPingData(e.data),this.notifySuccess(e)}catch(t){if("cause"in t)switch(console.log("there is cause in error",t.cause),t.cause){case"PING_EXTRAS_TOO_MANY_KEYS":this.notifyError(e,new b(k.dataKeysAmountExceeded,t));break;case"PING_EXTRAS_KEY_TOO_LONG":this.notifyError(e,new b(k.dataKeyLengthExceeded,t));break;case"PING_EXTRAS_VALUE_TOO_LONG":this.notifyError(e,new b(k.dataValueLengthExceeded,t));break;default:this.notifyError(e,new b(G.runnerMissing,t))}this.notifyError(e,new b(G.runnerMissing,t))}else this.notifyError(e,new b(G.runnerMissing))}setDetectionOnly(e){if(null!==this.nativeRecognizerRunner)try{this.nativeRecognizerRunner.setDetectionOnlyMode(e.detectionOnlyMode),this.notifySuccess(e)}catch(t){this.notifyError(e,new b(G.imageProcessFailure,t))}else this.notifyError(e,new b(G.imageProcessFailure))}setCameraPreviewMirrored(e){if(null!==this.nativeRecognizerRunner)try{this.nativeRecognizerRunner.setCameraPreviewMirrored(e.cameraPreviewMirrored),this.notifySuccess(e)}catch(t){this.notifyError(e,new b(G.imageProcessFailure,t))}else this.notifyError(e,new b(G.imageProcessFailure))}setupMetadataCallbacks(e){e.onDebugText?this.metadataCallbacks.onDebugText=e=>{const t=new p(r.onDebugText,[e]);this.context.postMessage(t)}:delete this.metadataCallbacks.onDebugText,e.onDetectionFailed?this.metadataCallbacks.onDetectionFailed=()=>{const e=new p(r.onDetectionFailed,[]);this.context.postMessage(e)}:delete this.metadataCallbacks.onDetectionFailed,e.onPointsDetection?this.metadataCallbacks.onPointsDetection=e=>{const t=new p(r.onPointsDetection,[e]);this.context.postMessage(t)}:delete this.metadataCallbacks.onPointsDetection,e.onQuadDetection?this.metadataCallbacks.onQuadDetection=e=>{const t=new p(r.onQuadDetection,[e]);this.context.postMessage(t)}:delete this.metadataCallbacks.onQuadDetection,e.onFirstSideResult?this.metadataCallbacks.onFirstSideResult=()=>{const e=new p(r.onFirstSideResult,[]);this.context.postMessage(e)}:delete this.metadataCallbacks.onFirstSideResult}registerMetadataCallbacks(e){if(null!==this.nativeRecognizerRunner){this.setupMetadataCallbacks(e.registeredMetadataCallbacks);try{this.nativeRecognizerRunner.setJSDelegate(this.metadataCallbacks),this.notifySuccess(e)}catch(t){this.notifyError(e,new b(G.imageProcessFailure,t))}}else this.notifyError(e,new b(G.imageProcessFailure))}processGetProductIntegrationInfo(e){if(null!==this.wasmModule)try{const t=this.wasmModule.getActiveLicenseTokenInfo(),s={userId:e.userId,licenseId:t.licenseId,licensee:t.licensee,productName:t.sdkName,productVersion:t.sdkVersion,platform:"Browser",device:self.navigator.userAgent,packageName:t.packageName};this.context.postMessage(new C(e.messageID,s))}catch(t){this.notifyError(e,new b(G.objectInvokeFailure,t))}else this.notifyError(e,new b(G.wasmInitMissing))}}}();