@voltom.io/sdk 1.0.4 → 1.0.6
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/assets/locales/ar.json +32 -29
- package/dist/assets/locales/ch.json +32 -29
- package/dist/assets/locales/de.json +32 -29
- package/dist/assets/locales/en.json +6 -3
- package/dist/assets/locales/es.json +31 -28
- package/dist/assets/locales/fr.json +31 -28
- package/dist/assets/locales/it.json +31 -28
- package/dist/assets/locales/ja.json +32 -29
- package/dist/assets/locales/pt.json +32 -29
- package/dist/assets/locales/ru.json +20 -17
- package/dist/assets/locales/zh.json +32 -29
- package/dist/sdk/{PoseSilhouette-CTZ5kqI_.js → PoseSilhouette-V9BxuMwo.js} +1 -1
- package/dist/sdk/{PoseSuccess-CxL2ugaZ.js → PoseSuccess-DDx23oJD.js} +1 -1
- package/dist/sdk/eyeLevelCamera-aDRPs63K.js +65 -0
- package/dist/sdk/facegate/global.d.ts +1 -1
- package/dist/sdk/facegate.d.ts +25 -4
- package/dist/sdk/facegate.dist.js +5 -5
- package/dist/sdk/facegate.js +1 -1
- package/dist/sdk/facekey.browser-bs8vp3ON.js +2 -0
- package/dist/sdk/facekey.d.ts +41 -30
- package/dist/sdk/facekey.dist.js +6 -6
- package/dist/sdk/facekey.js +1 -1
- package/dist/sdk/media-Cejmtltt.js +2 -0
- package/dist/sdk/presentation-B4P1537m.js +2 -0
- package/dist/sdk/presentation-Cg1Ec60l.js +8 -0
- package/dist/sdk/verify.d.ts +51 -33
- package/dist/sdk/verify.dist.js +18 -18
- package/dist/sdk/verify.js +1 -1
- package/dist/sdk/view-DTvcOVnH.js +3 -0
- package/dist/sdk/view-ObOGpVdZ.js +3 -0
- package/dist/sdk/view-iMF-mWfw.js +2 -0
- package/package.json +7 -6
- package/dist/sdk/facekey.browser-D_vfob8H.js +0 -2
- package/dist/sdk/media-KU3CWepq.js +0 -2
- package/dist/sdk/poseGuidance-DLg3Dm3T.js +0 -65
- package/dist/sdk/presentation-BCIQkuw0.js +0 -2
- package/dist/sdk/presentation-D9v4ITH0.js +0 -8
- package/dist/sdk/view-CsOmx3ht.js +0 -3
- package/dist/sdk/view-Dgrm0mpZ.js +0 -3
- package/dist/sdk/view-WiNYUW9A.js +0 -2
package/dist/sdk/verify.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! Copyright (c) 2026 VOLTOM. All rights reserved. Proprietary software. See LICENSE at https://voltom.io/license. */
|
|
2
|
-
import{$ as e,E as t,M as n,Q as r,U as i,h as a,n as o,q as s,r as c}from"./poseGuidance-DLg3Dm3T.js";import{D as l,E as u,a as d,b as f,c as p,d as m,f as h,h as g,i as _,l as v,m as y,n as b,o as x,p as S,r as C,s as w,t as T,u as E}from"./media-KU3CWepq.js";import{_ as D,a as O,b as k,d as A,f as ee,g as te,h as j,i as ne,l as M,m as N,n as re,o as ie,p as P,t as F,u as ae,v as I,x as L,y as oe}from"./presentation-D9v4ITH0.js";var{analyzeDocumentFrame:R,hasValidDocumentSideData:z,validateDocumentBack:B}=j,se=({view:e,display:t,isActive:n,notifyCapturesChanged:r,getVerifyHardOptions:i})=>{let a=e.ref,o=async()=>{t.success.value=!0,await S({milliseconds:400}),t.success.value=!1},s=async({frame:s,session:c,state:l,options:u})=>{let d=performance.now(),f=!!l.captures.documentFront,p=u.requiredDocumentStableFrames,m=null,h=null;try{m=await R({frame:s,prepareForMatch:f||l.documentStableFrames+1>=u.requiredDocumentStableFrames,options:{...i({configuration:u}),alignment:l.matchOptions.alignment,requiresFace:!f}});let{orientation:e,detection:d,face:g}=m;if(!n({flow:`document`,session:c,state:l}))return!1;let v=f?B({current:m,front:l.documentFrontSignature}):null;h=f?k({front:l.documentFrontSignature,current:m.signature}):null;let y=l.document?{...l.document,ocr:l.document.document_front}:void 0,x=z({analysis:m,isBack:f,front:y}),S=(f?v?.valid===!0:m.valid)&&x,C=e?e.rotation:null;C!==l.documentOrientation&&(l.documentStableFrames=0),l.documentOrientation=C,l.documentStableFrames=S?l.documentStableFrames+1:0,u.showDocumentOverlay?await M({documentFaceBoxColor:u.documentFaceBoxColor,documentFaceMeshColor:u.documentFaceMeshColor,documentBoxColor:u.documentBoxColor,element:a.mesh,detection:d,face:g,height:s.height,ocrLines:u.showTextOverlay?m.text.lines:[],ocrToSource:u.showTextOverlay?m.documentToSource:null,overlayColor:u.documentOverlayColor,textColor:u.textColor,width:s.width}):b({element:a.mesh});let w=U({analysis:m,dataValid:x,isBack:f,minFaceAreaRatio:u.minDocumentFaceAreaRatio,rejectionReasons:v?v.reasons:m.failureReasons,valid:S,stable:l.documentStableFrames>=p});if(t.feedback.value={flow:`document`,...w},l.documentStableFrames<p)return!1;let T=await _({frame:s});return n({flow:`document`,session:c,state:l})?f?(V({analysis:m,isBack:!0,state:l}),l.captures.documentBack=T,r({state:l}),await o(),!0):!m.embeddings||!m.images?!1:(V({analysis:m,isBack:!1,state:l}),l.documentFaceEmbeddings=m.embeddings,l.documentFrontSignature=m.signature,l.preparedCaptures.documentFront=m.images,l.captures.documentFront=T,r({state:l}),await o(),!0):!1}finally{m&&n({flow:`document`,session:c,state:l})&&e.collectDocumentDebug({analysis:m,sideComparison:h,isBack:f,processingTimeMilliseconds:performance.now()-d,state:l})}};return{runDocumentLoop:async({session:e,state:r,options:i})=>{for(;n({flow:`document`,session:e,state:r});){if(await v({video:a.video}),!n({flow:`document`,session:e,state:r}))return;let o=await createImageBitmap(a.video);try{let n=await p({frame:o});try{if(await s({frame:n,session:e,state:r,options:i})){r.flow=null,t.debug.value=[];return}}finally{n.close()}}finally{o.close()}}}}},V=({analysis:e,isBack:t,state:r})=>{if(!e.ocr)throw Error(y.CAPTURES_INCOMPLETE);let i={ocr:e.ocr,codes:e.codes};if(t){if(!r.document)throw Error(y.CAPTURES_INCOMPLETE);let t=n({classification:r.document,front:{ocr:r.document.document_front,codes:r.document.codes},back:i});r.document={...r.document,...t,document_back:e.ocr}}else{if(!e.documentKind)throw Error(y.DOCUMENT_NOT_RECOGNIZED);let t={document:e.documentKind,europeanDrivingLicense:e.europeanDrivingLicense,identity:e.identity},a=n({classification:t,front:i});r.identity=e.identity,r.document={...t,...a,document_front:e.ocr,document_back:null}}r.documentCodes=r.document.codes},H=({rejection:e})=>e===`coverage_low`?`DOCUMENT_BOX_TOO_SMALL`:e===`coverage_high`?`DOCUMENT_BOX_TOO_LARGE`:e===`edge_proximity`?`DOCUMENT_BOX_NEAR_EDGE`:e===`opposite_edges`?`DOCUMENT_BOX_TOUCHES_EDGES`:e===`aspect_ratio`?`DOCUMENT_NOT_SUPPORTED`:`DOCUMENT_SHAPE_INVALID`,U=({analysis:e,dataValid:t,isBack:n,minFaceAreaRatio:r,rejectionReasons:i,valid:a,stable:o})=>{let s=`front`;n?s=`back`:e.documentKind===`passport`&&(s=`passport`);let c=Object.keys(e.documentAnalysis.diagnostics.rejected)[0];return c?{target:s,code:H({rejection:c})}:e.detection?e.documentAnalysis.isBlurry?{target:s,code:`DOCUMENT_BLURRY`}:n&&i.includes(y.DOCUMENT_BACK_CONTAINS_FACE)?{target:s,code:`DOCUMENT_BACK_HAS_FACE`}:n&&i.includes(y.DOCUMENT_BACK_NOT_DISTINCT)?{target:s,code:`DOCUMENT_BACK_SAME_AS_FRONT`}:!n&&!e.face?{target:s,code:`DOCUMENT_FRONT_FACE_NOT_DETECTED`}:!n&&!e.faceContained?{target:s,code:`DOCUMENT_FRONT_FACE_NOT_CONTAINED`}:!n&&!e.alignment.faceAreaValid&&e.alignment.faceAreaRatio<r?{target:s,code:`DOCUMENT_FRONT_FACE_TOO_SMALL`}:!n&&(!e.alignment.faceAreaValid||!e.alignment.faceDimensionsValid)?{target:s,code:`DOCUMENT_FRONT_FACE_SIZE_INVALID`}:!n&&(!e.alignment.textParallel||e.alignment.textSide===`unknown`||e.alignment.faceAdjacentTextLineCount<2)?{target:s,code:`DOCUMENT_FRONT_LAYOUT_INVALID`}:!e.text.text||e.text.lines.length<2?{target:s,code:`DOCUMENT_TEXT_NOT_READABLE`}:!n&&!e.documentKind?{target:s,code:`DOCUMENT_NOT_RECOGNIZED`}:t?a?o?{target:s,code:null}:{target:s,code:`DOCUMENT_STABILITY_REQUIRED`}:{target:s,code:`DOCUMENT_VALIDATION_FAILED`}:{target:s,code:`DOCUMENT_CODE_NOT_READABLE`}:{target:s,code:`DOCUMENT_NOT_DETECTED`}},W=`https://api.voltom.io`,G=({apiUrl:e})=>{let t=e??W;return t.endsWith(`/`)?t.slice(0,-1):t},K=async({apiUrl:e,path:t,method:n=`POST`,body:r,clientKey:i,fallback:a=y.INVALID_SERVICE_RESPONSE,signal:o})=>{let s={};i&&(s.authorization=`Bearer ${i}`),r&&(s[`content-type`]=`application/json`);let c;try{c=await fetch(`${G({apiUrl:e})}${t}`,{method:n,headers:s,body:r,signal:o})}catch(e){throw o?.aborted?Error(y.VERIFICATION_CANCELLED,{cause:e}):Error(y.NETWORK_ERROR,{cause:e})}if(c.status===413)throw Error(y.REQUEST_TOO_LARGE);let l;try{l=await c.json()}catch(e){throw Error(c.status>=500?y.SERVICE_UNAVAILABLE:a,{cause:e})}if(!c.ok){let e=typeof l==`object`&&l&&`code`in l&&typeof l.code==`string`?l.code:c.status>=500?y.SERVICE_UNAVAILABLE:a;throw Error(e)}return l},q=async({clientKey:e,apiUrl:t,signal:n})=>{await K({apiUrl:t,path:`/auth/me`,method:`GET`,clientKey:e,fallback:y.INVALID_CLIENT_KEY,signal:n})},J=({apiUrl:e})=>{if(typeof navigator<`u`&&typeof navigator.sendBeacon==`function`)try{navigator.sendBeacon(`${G({apiUrl:e})}/script-loads`)}catch{return}},ce=async({clientKey:e,apiUrl:t,endpoint:n,documentBack:r,documentFront:i,faces:a=[],options:o,picture:s,poses:c=[],sourceIds:l=[],threshold:u,signal:f})=>{if(!e)throw Error(y.CLIENT_KEY_REQUIRED);let p=JSON.stringify({documentFront:i?await d({image:i}):void 0,documentBack:r?await d({image:r}):void 0,picture:s?await d({image:s}):void 0,faces:await Promise.all(a.map(e=>d({image:e}))),options:o,poses:c.map(e=>A[e]),source_ids:l,threshold:u});return f?.throwIfAborted(),await K({apiUrl:t,path:n,body:p,clientKey:e,signal:f})},{loadDocumentBoxDetector:le,detectDocumentOrientation:ue}=P,{detectPictureFaces:Y,loadFaceDetector:de}=N,{loadFaceMatch:fe,warmupFaceMatch:pe}=D,{loadTextDetector:X}=I,Z=({options:e,view:n,display:a})=>{let l=n.ref,u=[...ee],d=({language:e})=>e??m(),f=()=>({identity:null,flow:null,session:0,faceSequence:[...u],faceCaptureConfiguration:null,documentCaptureConfiguration:null,poseIndex:0,poseStableFrames:0,documentStableFrames:0,documentOrientation:null,documentFaceEmbeddings:null,documentFrontSignature:null,documentCodes:[],matchOptions:{alignment:e.alignment,threshold:e.threshold},captures:{},preparedCaptures:{},faceEmbeddings:{},previousPoseBackgroundSignature:null,neutralPose:null,guidanceCodeState:c(),correctiveState:o(),faceMatchOptions:null,hardHumanVerificationId:null,hardDocumentVerificationId:null,cameraActive:!1,cameraSize:a.cameraSize,cameraFacingMode:a.cameraFacingMode}),p=({active:e,state:t})=>{t.cameraActive!==e&&(t.cameraActive=e,l.root.dispatchEvent(new CustomEvent(`voltom:camera-change`,{detail:{active:e}})))},h=({state:e})=>{w({video:l.video}),p({active:!1,state:e}),e.cameraSize.value=null,e.cameraFacingMode.value=null,a.feedback.value=null,a.guidance.value=null,a.corrective.value=null,a.success.value=!1},_=({state:e})=>({identity:e.identity,document:e.document,captures:{...e.captures},documentCodes:[...e.documentCodes],preparedCaptures:{...e.preparedCaptures}}),v=({state:e})=>{let t=_({state:e});l.root.dispatchEvent(new CustomEvent(`voltom:captures-change`,{detail:t}))},S=({state:t,options:n=e})=>{t.faceSequence=N({options:n}),t.poseIndex=0,t.poseStableFrames=0;let r=t.preparedCaptures.documentFront;t.preparedCaptures=r?{documentFront:r}:{},t.faceEmbeddings={},t.previousPoseBackgroundSignature=null,t.neutralPose=null,t.guidanceCodeState=c(),t.correctiveState=o(),a.corrective.value=null,t.faceMatchOptions=null,t.hardHumanVerificationId=null,t.faceCaptureConfiguration=null;let{documentFront:i,documentBack:s}=t.captures;t.captures={...i?{documentFront:i}:{},...s?{documentBack:s}:{}}},C=({state:e})=>{e.documentStableFrames=0,e.documentOrientation=null,e.documentFaceEmbeddings=null,e.documentFrontSignature=null,e.identity=null,e.documentCodes=[],delete e.document,e.hardDocumentVerificationId=null,e.documentCaptureConfiguration=null,delete e.preparedCaptures.documentFront;let t={...e.captures};delete t.documentFront,delete t.documentBack,e.captures=t},T=({state:e})=>{e.session+=1,e.flow=null,h({state:e}),b({element:l.mesh}),a.debug.value=[]},E=({state:e})=>{T({state:e}),v({state:e}),a.error.value=null},k=({state:e})=>{let t=l.video.videoWidth,n=l.video.videoHeight;t&&n&&(e.cameraSize.value={width:t,height:n})},A=async({facingMode:e,state:t})=>{h({state:t});let n=t.session,r=await x({facingMode:e,video:l.video});if(t.session!==n)throw w({video:l.video}),Z();t.cameraFacingMode.value=r,k({state:t}),p({active:!0,state:t})},j=({flow:e,session:t,state:n})=>n.flow===e&&n.session===t,M=({state:e})=>e.faceSequence[e.poseIndex]??`faceStraight`,N=({options:e})=>ie({poses:e.poses,randomize:e.randomizeFaceSequence??!1}),F=({options:e})=>JSON.stringify({poses:e.poses,randomizeFaceSequence:e.randomizeFaceSequence,faceDetector:e.faceDetector,alignment:e.alignment,threshold:e.threshold,language:e.language,maxPitch:e.maxPitch,minPitch:e.minPitch,maxYaw:e.maxYaw,minYaw:e.minYaw,maxRoll:e.maxRoll,requiredFaceStableFrames:e.requiredFaceStableFrames}),I=({options:e})=>JSON.stringify({ocrEngine:e.ocrEngine,language:e.language,minDocumentFaceAreaRatio:e.minDocumentFaceAreaRatio,maxDocumentFaceAreaRatio:e.maxDocumentFaceAreaRatio,minDocumentFaceWidthRatio:e.minDocumentFaceWidthRatio,maxDocumentFaceWidthRatio:e.maxDocumentFaceWidthRatio,minDocumentFaceHeightRatio:e.minDocumentFaceHeightRatio,maxDocumentFaceHeightRatio:e.maxDocumentFaceHeightRatio,minDocumentBoxRatio:e.minDocumentBoxRatio,maxDocumentTextAngleDifference:e.maxDocumentTextAngleDifference,requiredDocumentStableFrames:e.requiredDocumentStableFrames}),R=({state:e,options:t})=>e.faceCaptureConfiguration===F({options:t})&&O({captures:e.captures,state:e}),z=({state:e,options:t})=>{let n=e.document,r=n!==void 0&&n.document!==`passport`,i=!(!e.captures.documentFront||r&&!e.captures.documentBack),a=e.documentCaptureConfiguration===I({options:t});return!!(n?.valid&&i&&a)},B=({configuration:e})=>{let n=Object.fromEntries(Object.keys(t).map(t=>[t,e[t]]));return n.language=d({language:e.language}),n},V=async({configuration:e,endpoint:t,state:n,picture:r,sourceIds:i=[],signal:a})=>{let o=O({captures:n.captures,state:n})?ne({captures:n.captures,state:n}):null;return await ce({clientKey:e.clientKey,apiUrl:e.apiUrl,endpoint:t,documentBack:r?void 0:n.captures.documentBack,documentFront:r?void 0:n.captures.documentFront,faces:o?.faces,options:B({configuration:e}),picture:r,poses:o?.poses,sourceIds:i,threshold:e.threshold,signal:a})},H={options:e,view:n,display:a,isActive:j,notifyCapturesChanged:v,getVerifyHardOptions:B},{runFaceLoop:U}=re(H),{runDocumentLoop:W}=se(H),G=async({state:e,options:t})=>{T({state:e}),S({state:e,options:t}),a.progress.value={completed:0,total:e.faceSequence.length},e.faceCaptureConfiguration=F({options:t}),e.matchOptions={alignment:t.alignment,threshold:t.threshold},e.faceMatchOptions={...e.matchOptions},v({state:e});let n=e.session;e.flow=`face`;try{if(a.feedback.value={flow:`face`,pose:M({state:e}),code:null},await A({facingMode:`user`,state:e}),a.feedback.value={flow:`face`,pose:M({state:e}),code:null},await U({session:n,state:e,options:t}),e.session!==n)throw Z();if(!O({captures:e.captures,state:e}))throw Error(y.CAPTURES_INCOMPLETE);let r={...e.captures};return h({state:e}),b({element:l.mesh}),r}finally{e.session===n&&(a.feedback.value=null)}},K=async({state:t,options:n=e})=>{T({state:t}),C({state:t}),t.documentCaptureConfiguration=I({options:n}),t.matchOptions={alignment:n.alignment,threshold:n.threshold},v({state:t});let r=t.session;t.flow=`document`;try{if(!j({flow:`document`,session:r,state:t})||(await A({facingMode:`environment`,state:t}),a.feedback.value={flow:`document`,code:null,target:`front`},await W({session:r,state:t,options:n}),t.session!==r))throw Z();if(!t.captures.documentFront||!t.document)throw Error(y.CAPTURES_INCOMPLETE);if(t.document.document!==`passport`&&(t.documentStableFrames=0,t.documentOrientation=null,t.flow=`document`,a.feedback.value={flow:`document`,code:null,target:`back`},await W({session:r,state:t,options:n}),t.session!==r))throw Z();if(!t.document.valid)throw Error(y.DOCUMENT_VALIDATION_FAILED);let e={...t.captures};return h({state:t}),b({element:l.mesh}),e}finally{t.session===r&&(a.feedback.value=null,b({element:l.mesh}))}},q=async()=>{let t=e.capabilities.some(e=>e===`verifyDocument`||e===`matchID`),n=[le(),de({faceDetector:e.faceDetector}),fe(),...t?[te(),X({engine:`tiny`,language:`latin`}),X({engine:e.ocrEngine,language:d({language:e.language})}),oe()]:[],...e.showFaceOverlay||e.showDocumentOverlay?[ae()]:[]];await Promise.all(n);let r=document.createElement(`canvas`);r.width=640,r.height=480;let i=await createImageBitmap(r);try{let e=[Y(i),P.detectDocumentBox(i),pe()];t&&e.push(ue({frame:i,boundingRect:{x:0,y:0,width:i.width,height:i.height}})),await Promise.all(e)}finally{i.close()}},J=async()=>{let t=e.capabilities.some(e=>e===`verifyDocument`||e===`matchID`),n=[`dd.ort`,i[e.faceDetector],`fl.ort`,`fe.ort`,`fmu.ort`,`ort-wasm-simd-threaded.mjs`,`ort-wasm-simd-threaded.wasm`,...t?[`do.ort`,`zxing-wasm/reader/index.js`,`zxing-wasm/share.js`,`zxing-wasm/reader/zxing_reader.wasm`]:[],...e.showFaceOverlay||e.showDocumentOverlay?[`faceMeshLines.json`]:[]],r=[s({filenames:n})];t&&(r.push(s({filenames:L({language:`latin`,engine:`tiny`})})),r.push(s({filenames:L({language:d({language:e.language}),engine:e.ocrEngine})}))),await Promise.all(r)},Z=()=>new DOMException(y.VERIFICATION_CANCELLED,`AbortError`);return{createState:f,stop:E,syncCameraSize:k,captureResult:_,resetFaceFlow:S,resetDocumentFlow:C,hasCompatibleFaceCaptures:R,hasCompatibleDocumentCapture:z,notifyCapturesChanged:v,startFaceFlow:G,startDocumentFlow:K,startPictureFlow:async({picture:e,state:t,options:n,signal:r})=>{a.error.value=null,r?.throwIfAborted();let i=await D.imageBitmap({blob:e});try{let e=await Y(i,{forMatch:!0});if(r?.throwIfAborted(),!e.length)throw Error(y.NO_USABLE_CANDIDATES)}finally{i.close()}let o=t.faceCaptureConfiguration===F({options:n});R({state:t,options:n})&&o||await G({state:t,options:n}),r?.throwIfAborted();let s=await D.imageBitmap({blob:e});try{let[e]=await Y(s,{forMatch:!0});r?.throwIfAborted();let i=e?D.prepareFace({alignment:n.alignment,face:e,frame:s}):null,a=i?await D.preparedFaceArtifacts({face:i}):null;r?.throwIfAborted(),a&&(t.preparedCaptures.picture=a.images)}finally{s.close()}v({state:t})},submitHardVerification:V,initializeModels:q,preloadModels:J,showError:({error:e,state:t})=>{g({error:e})!==y.VERIFICATION_CANCELLED&&T({state:t}),r(()=>{a.activity.value=null,g({error:e})===y.VERIFICATION_CANCELLED?a.retry.value=null:a.error.value=e})}}},Q,me=async()=>{try{Q??=import(l({filename:`pdf/pdf.mjs`}));let e=await Q;return e.GlobalWorkerOptions.workerSrc=l({filename:`pdf/pdf.worker.mjs`}),e}catch{throw Q=void 0,Error(y.PDF_LOAD_FAILED)}},he=async({blob:e,signal:t})=>{if(new TextDecoder().decode(await e.slice(0,5).arrayBuffer())!==`%PDF-`)return null;if(e.size>1e7)throw Error(y.REQUEST_TOO_LARGE);t.throwIfAborted();let n=await me();t.throwIfAborted();let r=new Uint8Array(await e.arrayBuffer()),i=n.getDocument({data:r,cMapUrl:l({filename:`pdf/cmaps/`}),cMapPacked:!0,standardFontDataUrl:l({filename:`pdf/standard_fonts/`}),wasmUrl:l({filename:`pdf/wasm/`})}),a=()=>{i.destroy()};t.addEventListener(`abort`,a,{once:!0});let o;try{let e=await i.promise;t.throwIfAborted();let n=await e.getPage(1),r=n.getViewport({scale:1}),a=n.getViewport({scale:Math.min(1,1200/Math.max(r.width,r.height))}),s=window.document.createElement(`canvas`);s.width=Math.ceil(a.width),s.height=Math.ceil(a.height),await n.render({canvas:s,viewport:a,background:`white`}).promise,t.throwIfAborted(),o=await createImageBitmap(s),s.width=0,s.height=0;let c=await N.detectPictureFaces(o,{forMatch:!0});t.throwIfAborted();let l=c[0];if(!l)throw Error(y.NO_USABLE_CANDIDATES);let u=l.boundingRect,d=Math.max(0,Math.floor(u.x-u.width*.25)),f=Math.max(0,Math.floor(u.y-u.height*.25)),p=Math.min(o.width-d,Math.ceil(u.width*1.5)),m=Math.min(o.height-f,Math.ceil(u.height*1.5)),h=new OffscreenCanvas(p,m),g=h.getContext(`2d`);if(!g)throw Error(y.IMAGE_PROCESSING_FAILED);g.drawImage(o,d,f,p,m,0,0,p,m);let _=await h.convertToBlob({type:`image/jpeg`,quality:.95});return t.throwIfAborted(),_}catch(e){throw t.throwIfAborted(),e instanceof Error&&Object.values(y).includes(e.message)?e:e instanceof Error&&e.name===`PasswordException`?Error(y.PDF_PASSWORD_REQUIRED):Error(y.INVALID_PDF)}finally{t.removeEventListener(`abort`,a),o?.close(),await i.destroy()}},$={...t,faceDetector:`standard`,apiUrl:`https://api.voltom.io`,language:void 0,clientKey:``,threshold:a,randomizeFaceSequence:!1,requiredFaceStableFrames:2,requiredDocumentStableFrames:2,showFaceOverlay:!1,showDocumentOverlay:!1,showTextOverlay:!1,faceOverlayColor:`transparent`,faceMeshColor:`#38efb0`,documentOverlayColor:`transparent`,documentBoxColor:`#22d3ee`,documentFaceBoxColor:`#22d3ee`,documentFaceMeshColor:`#38efb0`,textColor:`#22d3ee`,debug:!1,capabilities:[`verifyHuman`,`verifyDocument`,`matchID`,`matchPicture`]},ge=class{options;view;root;useUi;videoElement;resizeListener;display=F();translator;flows;state;lastPicture;preparation=null;preloading=null;preparationController=null;prepared=!1;disposed=!1;operationController=null;subscriptions=new Set;uiAttached=!1;notifyStatus({status:e}){this.root.dispatchEvent(new CustomEvent(`voltom:${e}`))}showSpinner({message:e=this.translator.translate(`checkingFaceMatch`)}={}){this.display.activity.value={message:e}}hideSpinner(){this.display.activity.value=null}async runWithSpinner({task:e,message:t}){this.showSpinner({message:t});try{return await e()}finally{this.hideSpinner()}}constructor(e){let{root:t,video:n,ui:r,...i}=e,a=r??!!t;if(a&&!t||!a&&!n)throw Error(y.INVALID_OPTIONS);if(!i.clientKey)throw Error(y.CLIENT_KEY_REQUIRED);this.options=Object.freeze({...$,...i,capabilities:Object.freeze([...i.capabilities??$.capabilities]),poses:Array.isArray(i.poses)?Object.freeze([...i.poses]):i.poses}),this.root=t??document.createElement(`div`),this.useUi=a,this.videoElement=n??document.createElement(`video`),this.translator=E({language:this.options.language}),this.view={ref:{root:this.root,camera:document.createElement(`div`),video:this.videoElement,mesh:document.createElement(`canvas`)},collectFaceDebug:()=>{},collectDocumentDebug:()=>{}},this.flows=Z({options:this.options,view:this.view,display:this.display}),this.lastPicture=null,this.state=this.flows.createState(),this.resizeListener=()=>this.flows.syncCameraSize({state:this.state}),this.videoElement.addEventListener(`resize`,this.resizeListener)}async preload(){if(this.disposed)throw Error(y.SDK_NOT_READY);if(this.preloading)return this.preloading;let e=(async()=>{await h({language:this.options.language}),await this.flows.preloadModels()})();this.preloading=e;try{if(await e,this.disposed)throw Error(y.SDK_NOT_READY)}catch(t){throw this.preloading===e&&(this.preloading=null),t}}async prepare(){if(this.disposed)throw Error(y.SDK_NOT_READY);if(this.preparation)return this.preparation;let e=new AbortController;this.preparationController=e;let t=(async()=>{await this.preload(),await this.attachUi(),await this.runWithSpinner({task:async()=>{if(await q({clientKey:this.options.clientKey,apiUrl:this.options.apiUrl,signal:e.signal}),await J({apiUrl:this.options.apiUrl}),await this.flows.initializeModels(),e.signal.throwIfAborted(),this.disposed)throw Error(y.SDK_NOT_READY)},message:this.translator.translate(`preparingModels`)})})();this.preparation=t;try{await t,this.prepared=!0,this.preparationController===e&&(this.preparationController=null)}catch(n){throw this.preparation===t&&(this.preparation=null),this.preparationController===e&&(this.preparationController=null),n}}async attachUi(){if(!this.useUi||this.uiAttached)return;let{createVerificationView:e}=await import(`./view-CsOmx3ht.js`);if(this.disposed)throw Error(y.SDK_NOT_READY);let t=e({root:this.root,options:this.options,display:this.display});this.videoElement.removeEventListener(`resize`,this.resizeListener),Object.assign(this.view.ref,t.ref),this.view.collectFaceDebug=t.collectFaceDebug,this.view.collectDocumentDebug=t.collectDocumentDebug,this.videoElement=this.view.ref.video,this.videoElement.addEventListener(`resize`,this.resizeListener),this.uiAttached=!0}async submitHardVerification(e){let t=e.endpoint===`/verification/document`?this.translator.translate(`checkingDocument`):void 0;return await this.runWithSpinner({task:()=>this.flows.submitHardVerification({...e,signal:e.signal??this.operationController?.signal}),message:t})}async caniuse(){return await T()}async runOperation({retry:e,task:t,onError:n,capability:i,settings:a}){if(this.disposed||!this.prepared)throw Error(y.SDK_NOT_READY);if(!this.options.capabilities.includes(i))throw Error(y.SDK_CAPABILITY_NOT_CONFIGURED);if(this.operationController)throw Error(y.INVALID_OPTIONS);let{signal:o,...s}=a,c=Object.freeze({...this.options,...s,poses:Array.isArray(s.poses)?Object.freeze([...s.poses]):s.poses??this.options.poses}),l=new AbortController;this.operationController=l;let u=()=>l.abort();o?.addEventListener(`abort`,u,{once:!0}),o?.aborted&&u(),l.signal.addEventListener(`abort`,()=>this.flows.stop({state:this.state}),{once:!0}),this.notifyStatus({status:`in-progress`}),r(()=>{this.display.retry.value=e,this.display.error.value=null,this.display.debugEnabled.value=c.debug,c.debug||(this.display.debug.value=[])});try{return l.signal.throwIfAborted(),await t({options:c,signal:l.signal})}catch(e){let t=l.signal.aborted?Error(y.VERIFICATION_CANCELLED,{cause:e}):e;throw n&&await n({error:t,options:c,signal:l.signal}),this.disposed||this.flows.showError({error:t,state:this.state}),t}finally{this.notifyStatus({status:`ready`}),o?.removeEventListener(`abort`,u),this.display.debugEnabled.value=this.options.debug,this.operationController===l&&(this.operationController=null)}}async verifyHuman(e={}){return await this.verifyCapture({flow:`human`,...e})}async verifyDocument(e={}){return await this.verifyCapture({flow:`document`,...e})}async verifyCapture({flow:e,...t}){let n=({options:t})=>{e===`human`?this.flows.resetFaceFlow({state:this.state,options:t}):this.flows.resetDocumentFlow({state:this.state}),this.flows.notifyCapturesChanged({state:this.state})};return await this.runOperation({capability:e===`human`?`verifyHuman`:`verifyDocument`,settings:t,retry:()=>this.verifyCapture({flow:e,...t,signal:void 0}),onError:async({error:t,options:r})=>{(e===`human`?this.state.faceCaptureConfiguration!==null:this.state.documentCaptureConfiguration!==null)&&g({error:t})!==y.VERIFICATION_CANCELLED&&n({options:r})},task:async({options:t,signal:r})=>{r.throwIfAborted(),await(e===`human`?this.flows.startFaceFlow:this.flows.startDocumentFlow)({state:this.state,options:t}),r.throwIfAborted();let i=await this.submitHardVerification({configuration:t,endpoint:`/verification/${e}`,state:this.state}),a=e===`human`?`hardHumanVerificationId`:`hardDocumentVerificationId`;return this.state[a]=i.verificationId,i.outcome!==`pass`||i.matched!==!0?(this.state[a]=null,n({options:t}),i):(this.display.retry.value=null,i)}})}async ensureHumanVerification({options:e,signal:t}){if(t?.throwIfAborted(),this.flows.hasCompatibleFaceCaptures({state:this.state,options:e})||await this.flows.startFaceFlow({state:this.state,options:e}),t?.throwIfAborted(),this.state.hardHumanVerificationId)return null;let n=await this.submitHardVerification({configuration:e,endpoint:`/verification/human`,state:this.state}),r=n.outcome===`pass`&&n.matched===!0;return this.state.hardHumanVerificationId=r?n.verificationId:null,r?null:n}async matchID(e={}){return await this.runOperation({capability:`matchID`,settings:e,retry:()=>this.matchID({...e,signal:void 0}),task:async({options:e,signal:t})=>{t.throwIfAborted();let n=await this.ensureHumanVerification({options:e,signal:t});if(n)return n;if(t.throwIfAborted(),this.flows.hasCompatibleDocumentCapture({state:this.state,options:e})||await this.flows.startDocumentFlow({state:this.state,options:e}),!this.state.hardDocumentVerificationId){t.throwIfAborted();let n=await this.submitHardVerification({configuration:e,endpoint:`/verification/document`,state:this.state});if(this.state.hardDocumentVerificationId=n.verificationId,n.outcome!==`pass`||n.matched!==!0)return this.state.hardDocumentVerificationId=null,n}let r=await this.submitHardVerification({configuration:e,endpoint:`/verification/id`,state:this.state,sourceIds:[this.state.hardHumanVerificationId,this.state.hardDocumentVerificationId]});return r.outcome!==`pass`||r.matched!==!0||(this.display.retry.value=null),r}})}async matchPicture(e,t={}){return this.lastPicture=e,await this.runOperation({capability:`matchPicture`,settings:t,retry:async()=>{this.lastPicture&&await this.matchPicture(this.lastPicture,{...t,signal:void 0})},task:async({options:t,signal:n})=>{n.throwIfAborted();let r=await he({blob:e,signal:n})??await C({blob:e});if(n.throwIfAborted(),!this.state.hardHumanVerificationId){let e=await this.ensureHumanVerification({options:t,signal:n});if(e)return e}await this.flows.startPictureFlow({picture:r,state:this.state,options:t,signal:n}),n.throwIfAborted();let i=await this.submitHardVerification({configuration:t,endpoint:`/verification/picture`,state:this.state,picture:r,sourceIds:[this.state.hardHumanVerificationId]});return i.outcome!==`pass`||i.matched!==!0||(this.display.retry.value=null),i}})}stop(){this.operationController?.abort(new DOMException(y.VERIFICATION_CANCELLED,`AbortError`)),this.flows.stop({state:this.state}),this.display.retry.value=null,this.notifyStatus({status:`ready`})}dispose(){if(!this.disposed){this.disposed=!0,this.preparationController?.abort(),this.stop();for(let e of this.subscriptions)e();this.subscriptions.clear(),this.videoElement.removeEventListener(`resize`,this.resizeListener),f(null,this.root),this.state.captures={},this.state.preparedCaptures={},this.state.faceEmbeddings={},this.state.documentCodes=[],this.state.identity=null,this.state.hardHumanVerificationId=null,this.state.hardDocumentVerificationId=null,this.state.faceCaptureConfiguration=null,this.state.documentCaptureConfiguration=null,delete this.state.document,this.lastPicture=null}}forgetHuman(){if(this.disposed)throw Error(y.SDK_NOT_READY);this.flows.resetFaceFlow({state:this.state}),this.display.error.value=null,this.flows.notifyCapturesChanged({state:this.state})}forgetDocument(){if(this.disposed)throw Error(y.SDK_NOT_READY);this.flows.resetDocumentFlow({state:this.state}),this.display.error.value=null,this.flows.notifyCapturesChanged({state:this.state})}getState(){return{activity:this.display.activity.value,error:this.display.error.value,retryAvailable:this.display.retry.value!==null,feedback:this.display.feedback.value,debug:this.display.debug.value}}subscribe(t){if(this.disposed)throw Error(y.SDK_NOT_READY);let n=e(()=>t(this.getState()));return this.subscriptions.add(n),()=>{n(),this.subscriptions.delete(n)}}};u({moduleUrl:import.meta.url});var _e=ge;export{_e as default};
|
|
2
|
+
import{$ as e,E as t,M as n,Q as r,U as i,_ as a,a as o,i as s,q as c}from"./eyeLevelCamera-aDRPs63K.js";import{O as l,S as u,_ as d,a as f,c as p,f as m,g as h,h as g,i as _,k as v,l as y,m as b,n as x,p as S,r as C,s as w,t as T,u as E}from"./media-Cejmtltt.js";import{_ as D,a as O,b as k,d as A,f as ee,g as te,h as j,i as ne,l as M,m as N,n as re,o as ie,p as P,t as F,u as ae,v as I,x as L,y as oe}from"./presentation-Cg1Ec60l.js";var{analyzeDocumentFrame:R,hasValidDocumentSideData:z,validateDocumentBack:B}=j,se=({view:e,display:t,isActive:n,notifyCapturesChanged:r,getVerifyHardOptions:i})=>{let a=e.ref,o=async()=>{t.success.value=!0,await g({milliseconds:400}),t.success.value=!1},s=async({frame:s,session:c,state:l,options:u})=>{let d=performance.now(),f=!!l.captures.documentFront,p=u.requiredDocumentStableFrames,m=null,h=null;try{m=await R({frame:s,prepareForMatch:f||l.documentStableFrames+1>=u.requiredDocumentStableFrames,options:{...i({configuration:u}),alignment:l.matchOptions.alignment,requiresFace:!f}});let{orientation:e,detection:d,face:g}=m;if(!n({flow:`document`,session:c,state:l}))return!1;let v=f?B({current:m,front:l.documentFrontSignature}):null;h=f?k({front:l.documentFrontSignature,current:m.signature}):null;let y=l.document?{...l.document,ocr:l.document.document_front}:void 0,b=z({analysis:m,isBack:f,front:y}),S=(f?v?.valid===!0:m.valid)&&b,C=e?e.rotation:null;C!==l.documentOrientation&&(l.documentStableFrames=0),l.documentOrientation=C,l.documentStableFrames=S?l.documentStableFrames+1:0,u.showDocumentOverlay?await M({documentFaceBoxColor:u.documentFaceBoxColor,documentFaceMeshColor:u.documentFaceMeshColor,documentBoxColor:u.documentBoxColor,element:a.mesh,detection:d,face:g,height:s.height,ocrLines:u.showTextOverlay?m.text.lines:[],ocrToSource:u.showTextOverlay?m.documentToSource:null,overlayColor:u.documentOverlayColor,textColor:u.textColor,width:s.width}):x({element:a.mesh});let w=U({analysis:m,dataValid:b,isBack:f,minFaceAreaRatio:u.minDocumentFaceAreaRatio,rejectionReasons:v?v.reasons:m.failureReasons,valid:S,stable:l.documentStableFrames>=p});if(t.feedback.value={flow:`document`,...w},l.documentStableFrames<p)return!1;let T=await _({frame:s});return n({flow:`document`,session:c,state:l})?f?(V({analysis:m,isBack:!0,state:l}),l.captures.documentBack=T,r({state:l}),await o(),!0):!m.embeddings||!m.images?!1:(V({analysis:m,isBack:!1,state:l}),l.documentFaceEmbeddings=m.embeddings,l.documentFrontSignature=m.signature,l.preparedCaptures.documentFront=m.images,l.captures.documentFront=T,r({state:l}),await o(),!0):!1}finally{m&&n({flow:`document`,session:c,state:l})&&e.collectDocumentDebug({analysis:m,sideComparison:h,isBack:f,processingTimeMilliseconds:performance.now()-d,state:l})}};return{runDocumentLoop:async({session:e,state:r,options:i})=>{for(;n({flow:`document`,session:e,state:r});){if(await E({video:a.video}),!n({flow:`document`,session:e,state:r}))return;let o=await createImageBitmap(a.video);try{let n=await y({frame:o});try{if(await s({frame:n,session:e,state:r,options:i})){r.flow=null,t.debug.value=[];return}}finally{n.close()}}finally{o.close()}}}}},V=({analysis:e,isBack:t,state:r})=>{if(!e.ocr)throw Error(h.CAPTURES_INCOMPLETE);let i={ocr:e.ocr,codes:e.codes};if(t){if(!r.document)throw Error(h.CAPTURES_INCOMPLETE);let t=n({classification:r.document,front:{ocr:r.document.document_front,codes:r.document.codes},back:i});r.document={...r.document,...t,document_back:e.ocr}}else{if(!e.documentKind)throw Error(h.DOCUMENT_NOT_RECOGNIZED);let t={document:e.documentKind,europeanDrivingLicense:e.europeanDrivingLicense,identity:e.identity},a=n({classification:t,front:i});r.identity=e.identity,r.document={...t,...a,document_front:e.ocr,document_back:null}}r.documentCodes=r.document.codes},H=({rejection:e})=>e===`coverage_low`?`DOCUMENT_BOX_TOO_SMALL`:e===`coverage_high`?`DOCUMENT_BOX_TOO_LARGE`:e===`edge_proximity`?`DOCUMENT_BOX_NEAR_EDGE`:e===`opposite_edges`?`DOCUMENT_BOX_TOUCHES_EDGES`:e===`aspect_ratio`?`DOCUMENT_NOT_SUPPORTED`:`DOCUMENT_SHAPE_INVALID`,U=({analysis:e,dataValid:t,isBack:n,minFaceAreaRatio:r,rejectionReasons:i,valid:a,stable:o})=>{let s=`front`;n?s=`back`:e.documentKind===`passport`&&(s=`passport`);let c=Object.keys(e.documentAnalysis.diagnostics.rejected)[0];return c?{target:s,code:H({rejection:c})}:e.detection?e.documentAnalysis.isBlurry?{target:s,code:`DOCUMENT_BLURRY`}:n&&i.includes(h.DOCUMENT_BACK_CONTAINS_FACE)?{target:s,code:`DOCUMENT_BACK_HAS_FACE`}:n&&i.includes(h.DOCUMENT_BACK_NOT_DISTINCT)?{target:s,code:`DOCUMENT_BACK_SAME_AS_FRONT`}:!n&&!e.face?{target:s,code:`DOCUMENT_FRONT_FACE_NOT_DETECTED`}:!n&&!e.faceContained?{target:s,code:`DOCUMENT_FRONT_FACE_NOT_CONTAINED`}:!n&&!e.alignment.faceAreaValid&&e.alignment.faceAreaRatio<r?{target:s,code:`DOCUMENT_FRONT_FACE_TOO_SMALL`}:!n&&(!e.alignment.faceAreaValid||!e.alignment.faceDimensionsValid)?{target:s,code:`DOCUMENT_FRONT_FACE_SIZE_INVALID`}:!n&&(!e.alignment.textParallel||e.alignment.textSide===`unknown`||e.alignment.faceAdjacentTextLineCount<2)?{target:s,code:`DOCUMENT_FRONT_LAYOUT_INVALID`}:!e.text.text||e.text.lines.length<2?{target:s,code:`DOCUMENT_TEXT_NOT_READABLE`}:!n&&!e.documentKind?{target:s,code:`DOCUMENT_NOT_RECOGNIZED`}:t?a?o?{target:s,code:null}:{target:s,code:`DOCUMENT_STABILITY_REQUIRED`}:{target:s,code:`DOCUMENT_VALIDATION_FAILED`}:{target:s,code:`DOCUMENT_CODE_NOT_READABLE`}:{target:s,code:`DOCUMENT_NOT_DETECTED`}},W=`https://api.voltom.io`,G=({apiUrl:e})=>{let t=e??W;return t.endsWith(`/`)?t.slice(0,-1):t},K=async({apiUrl:e,path:t,method:n=`POST`,body:r,clientKey:i,fallback:a=h.INVALID_SERVICE_RESPONSE,signal:o})=>{let s={};i&&(s.authorization=`Bearer ${i}`),r&&(s[`content-type`]=`application/json`);let c;try{c=await fetch(`${G({apiUrl:e})}${t}`,{method:n,headers:s,body:r,signal:o})}catch(e){throw o?.aborted?Error(h.VERIFICATION_CANCELLED,{cause:e}):Error(h.NETWORK_ERROR,{cause:e})}if(c.status===413)throw Error(h.REQUEST_TOO_LARGE);let l;try{l=await c.json()}catch(e){throw Error(c.status>=500?h.SERVICE_UNAVAILABLE:a,{cause:e})}if(!c.ok){let e=typeof l==`object`&&l&&`code`in l&&typeof l.code==`string`?l.code:c.status>=500?h.SERVICE_UNAVAILABLE:a;throw Error(e)}return l},q=async({clientKey:e,apiUrl:t,signal:n})=>{await K({apiUrl:t,path:`/auth/me`,method:`GET`,clientKey:e,fallback:h.INVALID_CLIENT_KEY,signal:n})},J=({apiUrl:e})=>{if(typeof navigator<`u`&&typeof navigator.sendBeacon==`function`)try{navigator.sendBeacon(`${G({apiUrl:e})}/script-loads`)}catch{return}},ce=async({clientKey:e,apiUrl:t,endpoint:n,documentBack:r,documentFront:i,faces:a=[],options:o,picture:s,poses:c=[],sourceIds:l=[],threshold:u,token:d,signal:p})=>{if(!e)throw Error(h.CLIENT_KEY_REQUIRED);let m=JSON.stringify({token:d,documentFront:i?await f({image:i}):void 0,documentBack:r?await f({image:r}):void 0,picture:s?await f({image:s}):void 0,faces:await Promise.all(a.map(e=>f({image:e}))),options:o,poses:c.map(e=>A[e]),source_ids:l,threshold:u});return p?.throwIfAborted(),await K({apiUrl:t,path:n,body:m,clientKey:e,signal:p})},{loadDocumentBoxDetector:le,detectDocumentOrientation:ue}=P,{detectPictureFaces:Y,loadFaceDetector:de}=N,{loadFaceMatch:fe,warmupFaceMatch:pe}=D,{loadTextDetector:X}=I,me={"/verify/human":`human`,"/verify/document":`document`,"/verify/id":`match_id`,"/verify/picture":`match_picture`},Z=({options:e,view:n,display:a})=>{let l=n.ref,u=[...ee],f=({language:e})=>e??S(),m=()=>({identity:null,flow:null,session:0,faceSequence:[...u],faceCaptureConfiguration:null,documentCaptureConfiguration:null,poseIndex:0,poseStableFrames:0,documentStableFrames:0,documentOrientation:null,documentFaceEmbeddings:null,documentFrontSignature:null,documentCodes:[],matchOptions:{alignment:e.alignment,threshold:e.threshold},captures:{},preparedCaptures:{},faceEmbeddings:{},previousPoseBackgroundSignature:null,neutralPose:null,guidanceCodeState:o(),correctiveState:s(),faceMatchOptions:null,hardHumanVerificationId:null,hardDocumentVerificationId:null,cameraActive:!1,cameraSize:a.cameraSize,cameraFacingMode:a.cameraFacingMode}),g=({active:e,state:t})=>{t.cameraActive!==e&&(t.cameraActive=e,l.root.dispatchEvent(new CustomEvent(`voltom:camera-change`,{detail:{active:e}})))},_=({state:e})=>{p({video:l.video}),g({active:!1,state:e}),e.cameraSize.value=null,e.cameraFacingMode.value=null,a.feedback.value=null,a.guidance.value=null,a.corrective.value=null,a.success.value=!1},v=({state:e})=>({identity:e.identity,document:e.document,captures:{...e.captures},documentCodes:[...e.documentCodes],preparedCaptures:{...e.preparedCaptures}}),y=({state:e})=>{let t=v({state:e});l.root.dispatchEvent(new CustomEvent(`voltom:captures-change`,{detail:t}))},b=({state:t,options:n=e})=>{t.faceSequence=N({options:n}),t.poseIndex=0,t.poseStableFrames=0;let r=t.preparedCaptures.documentFront;t.preparedCaptures=r?{documentFront:r}:{},t.faceEmbeddings={},t.previousPoseBackgroundSignature=null,t.neutralPose=null,t.guidanceCodeState=o(),t.correctiveState=s(),a.corrective.value=null,t.faceMatchOptions=null,t.hardHumanVerificationId=null,t.faceCaptureConfiguration=null;let{documentFront:i,documentBack:c}=t.captures;t.captures={...i?{documentFront:i}:{},...c?{documentBack:c}:{}}},C=({state:e})=>{e.documentStableFrames=0,e.documentOrientation=null,e.documentFaceEmbeddings=null,e.documentFrontSignature=null,e.identity=null,e.documentCodes=[],delete e.document,e.hardDocumentVerificationId=null,e.documentCaptureConfiguration=null,delete e.preparedCaptures.documentFront;let t={...e.captures};delete t.documentFront,delete t.documentBack,e.captures=t},T=({state:e})=>{e.session+=1,e.flow=null,_({state:e}),x({element:l.mesh}),a.debug.value=[]},E=({state:e})=>{T({state:e}),y({state:e}),a.error.value=null},k=({state:e})=>{let t=l.video.videoWidth,n=l.video.videoHeight;t&&n&&(e.cameraSize.value={width:t,height:n})},A=async({facingMode:e,state:t})=>{_({state:t});let n=t.session,r=await w({facingMode:e,video:l.video});if(t.session!==n)throw p({video:l.video}),Z();t.cameraFacingMode.value=r,k({state:t}),g({active:!0,state:t})},j=({flow:e,session:t,state:n})=>n.flow===e&&n.session===t,M=({state:e})=>e.faceSequence[e.poseIndex]??`faceStraight`,N=({options:e})=>ie({poses:e.poses,randomize:e.randomizeFaceSequence??!1}),F=({options:e})=>JSON.stringify({requireEyeLevelCamera:e.requireEyeLevelCamera,poses:e.poses,randomizeFaceSequence:e.randomizeFaceSequence,faceDetector:e.faceDetector,alignment:e.alignment,threshold:e.threshold,language:e.language,maxPitch:e.maxPitch,minPitch:e.minPitch,maxYaw:e.maxYaw,minYaw:e.minYaw,maxRoll:e.maxRoll,requiredFaceStableFrames:e.requiredFaceStableFrames}),I=({options:e})=>JSON.stringify({ocrEngine:e.ocrEngine,language:e.language,minDocumentFaceAreaRatio:e.minDocumentFaceAreaRatio,maxDocumentFaceAreaRatio:e.maxDocumentFaceAreaRatio,minDocumentFaceWidthRatio:e.minDocumentFaceWidthRatio,maxDocumentFaceWidthRatio:e.maxDocumentFaceWidthRatio,minDocumentFaceHeightRatio:e.minDocumentFaceHeightRatio,maxDocumentFaceHeightRatio:e.maxDocumentFaceHeightRatio,minDocumentBoxRatio:e.minDocumentBoxRatio,maxDocumentTextAngleDifference:e.maxDocumentTextAngleDifference,requiredDocumentStableFrames:e.requiredDocumentStableFrames}),R=({state:e,options:t})=>e.faceCaptureConfiguration===F({options:t})&&O({captures:e.captures,state:e}),z=({state:e,options:t})=>{let n=e.document,r=n!==void 0&&n.document!==`passport`,i=!(!e.captures.documentFront||r&&!e.captures.documentBack),a=e.documentCaptureConfiguration===I({options:t});return!!(n?.valid&&i&&a)},B=({configuration:e})=>{let n=Object.fromEntries(Object.keys(t).map(t=>[t,e[t]]));return n.language=f({language:e.language}),n},V=async({configuration:e,endpoint:t,state:n,picture:r,sourceIds:i=[],signal:a})=>{let o=O({captures:n.captures,state:n})?ne({captures:n.captures,state:n}):null,s=me[t]??t,c=e.authorize?await e.authorize({action:s}):void 0;return await ce({clientKey:e.clientKey,apiUrl:e.apiUrl,endpoint:t,token:c?.token,documentBack:r?void 0:n.captures.documentBack,documentFront:r?void 0:n.captures.documentFront,faces:o?.faces,options:B({configuration:e}),picture:r,poses:o?.poses,sourceIds:i,threshold:e.threshold,signal:a})},H={options:e,view:n,display:a,isActive:j,notifyCapturesChanged:y,getVerifyHardOptions:B},{runFaceLoop:U}=re(H),{runDocumentLoop:W}=se(H),G=async({state:e,options:t})=>{T({state:e}),b({state:e,options:t}),a.progress.value={completed:0,total:e.faceSequence.length},e.faceCaptureConfiguration=F({options:t}),e.matchOptions={alignment:t.alignment,threshold:t.threshold},e.faceMatchOptions={...e.matchOptions},y({state:e});let n=e.session;e.flow=`face`;try{if(a.feedback.value={flow:`face`,pose:M({state:e}),code:null},await A({facingMode:`user`,state:e}),a.feedback.value={flow:`face`,pose:M({state:e}),code:null},await U({session:n,state:e,options:t}),e.session!==n)throw Z();if(!O({captures:e.captures,state:e}))throw Error(h.CAPTURES_INCOMPLETE);let r={...e.captures};return _({state:e}),x({element:l.mesh}),r}finally{e.session===n&&(a.feedback.value=null)}},K=async({state:t,options:n=e})=>{T({state:t}),C({state:t}),t.documentCaptureConfiguration=I({options:n}),t.matchOptions={alignment:n.alignment,threshold:n.threshold},y({state:t});let r=t.session;t.flow=`document`;try{if(!j({flow:`document`,session:r,state:t})||(await A({facingMode:`environment`,state:t}),a.feedback.value={flow:`document`,code:null,target:`front`},await W({session:r,state:t,options:n}),t.session!==r))throw Z();if(!t.captures.documentFront||!t.document)throw Error(h.CAPTURES_INCOMPLETE);if(t.document.document!==`passport`&&(t.documentStableFrames=0,t.documentOrientation=null,t.flow=`document`,a.feedback.value={flow:`document`,code:null,target:`back`},await W({session:r,state:t,options:n}),t.session!==r))throw Z();if(!t.document.valid)throw Error(h.DOCUMENT_VALIDATION_FAILED);let e={...t.captures};return _({state:t}),x({element:l.mesh}),e}finally{t.session===r&&(a.feedback.value=null,x({element:l.mesh}))}},q=async()=>{let t=e.capabilities.some(e=>e===`verifyDocument`||e===`matchID`),n=[le(),de({faceDetector:e.faceDetector}),fe(),...t?[te(),X({engine:`tiny`,language:`latin`}),X({engine:e.ocrEngine,language:f({language:e.language})}),oe()]:[],...e.showFaceOverlay||e.showDocumentOverlay?[ae()]:[]];await Promise.all(n);let r=document.createElement(`canvas`);r.width=640,r.height=480;let i=await createImageBitmap(r);try{let e=[Y(i),P.detectDocumentBox(i),pe()];t&&e.push(ue({frame:i,boundingRect:{x:0,y:0,width:i.width,height:i.height}})),await Promise.all(e)}finally{i.close()}},J=async()=>{let t=e.capabilities.some(e=>e===`verifyDocument`||e===`matchID`),n=[`dd.ort`,i[e.faceDetector],`fl.ort`,`fe.ort`,`fmu.ort`,`ort-wasm-simd-threaded.mjs`,`ort-wasm-simd-threaded.wasm`,...t?[`do.ort`,`zxing-wasm/reader/index.js`,`zxing-wasm/share.js`,`zxing-wasm/reader/zxing_reader.wasm`]:[],...e.showFaceOverlay||e.showDocumentOverlay?[`faceMeshLines.json`]:[]],r=[c({filenames:n})];t&&(r.push(c({filenames:L({language:`latin`,engine:`tiny`})})),r.push(c({filenames:L({language:f({language:e.language}),engine:e.ocrEngine})}))),await Promise.all(r)},Z=()=>new DOMException(h.VERIFICATION_CANCELLED,`AbortError`);return{createState:m,stop:E,syncCameraSize:k,captureResult:v,resetFaceFlow:b,resetDocumentFlow:C,hasCompatibleFaceCaptures:R,hasCompatibleDocumentCapture:z,notifyCapturesChanged:y,startFaceFlow:G,startDocumentFlow:K,startPictureFlow:async({picture:e,state:t,options:n,signal:r})=>{a.error.value=null,r?.throwIfAborted();let i=await D.imageBitmap({blob:e});try{let e=await Y(i,{forMatch:!0});if(r?.throwIfAborted(),!e.length)throw Error(h.NO_USABLE_CANDIDATES)}finally{i.close()}let o=t.faceCaptureConfiguration===F({options:n});R({state:t,options:n})&&o||await G({state:t,options:n}),r?.throwIfAborted();let s=await D.imageBitmap({blob:e});try{let[e]=await Y(s,{forMatch:!0});r?.throwIfAborted();let i=e?D.prepareFace({alignment:n.alignment,face:e,frame:s}):null,a=i?await D.preparedFaceArtifacts({face:i}):null;r?.throwIfAborted(),a&&(t.preparedCaptures.picture=a.images)}finally{s.close()}y({state:t})},submitHardVerification:V,initializeModels:q,preloadModels:J,showError:({error:e,state:t})=>{d({error:e})!==h.VERIFICATION_CANCELLED&&T({state:t}),r(()=>{a.activity.value=null,d({error:e})===h.VERIFICATION_CANCELLED?a.retry.value=null:a.error.value=e})}}},Q,he=async()=>{try{Q??=import(v({filename:`pdf/pdf.mjs`}));let e=await Q;return e.GlobalWorkerOptions.workerSrc=v({filename:`pdf/pdf.worker.mjs`}),e}catch{throw Q=void 0,Error(h.PDF_LOAD_FAILED)}},ge=async({blob:e,signal:t})=>{if(new TextDecoder().decode(await e.slice(0,5).arrayBuffer())!==`%PDF-`)return null;if(e.size>1e7)throw Error(h.REQUEST_TOO_LARGE);t.throwIfAborted();let n=await he();t.throwIfAborted();let r=new Uint8Array(await e.arrayBuffer()),i=n.getDocument({data:r,cMapUrl:v({filename:`pdf/cmaps/`}),cMapPacked:!0,standardFontDataUrl:v({filename:`pdf/standard_fonts/`}),wasmUrl:v({filename:`pdf/wasm/`})}),a=()=>{i.destroy()};t.addEventListener(`abort`,a,{once:!0});let o;try{let e=await i.promise;t.throwIfAborted();let n=await e.getPage(1),r=n.getViewport({scale:1}),a=n.getViewport({scale:Math.min(1,1200/Math.max(r.width,r.height))}),s=window.document.createElement(`canvas`);s.width=Math.ceil(a.width),s.height=Math.ceil(a.height),await n.render({canvas:s,viewport:a,background:`white`}).promise,t.throwIfAborted(),o=await createImageBitmap(s),s.width=0,s.height=0;let c=await N.detectPictureFaces(o,{forMatch:!0});t.throwIfAborted();let l=c[0];if(!l)throw Error(h.NO_USABLE_CANDIDATES);let u=l.boundingRect,d=Math.max(0,Math.floor(u.x-u.width*.25)),f=Math.max(0,Math.floor(u.y-u.height*.25)),p=Math.min(o.width-d,Math.ceil(u.width*1.5)),m=Math.min(o.height-f,Math.ceil(u.height*1.5)),g=new OffscreenCanvas(p,m),_=g.getContext(`2d`);if(!_)throw Error(h.IMAGE_PROCESSING_FAILED);_.drawImage(o,d,f,p,m,0,0,p,m);let v=await g.convertToBlob({type:`image/jpeg`,quality:.95});return t.throwIfAborted(),v}catch(e){throw t.throwIfAborted(),e instanceof Error&&Object.values(h).includes(e.message)?e:e instanceof Error&&e.name===`PasswordException`?Error(h.PDF_PASSWORD_REQUIRED):Error(h.INVALID_PDF)}finally{t.removeEventListener(`abort`,a),o?.close(),await i.destroy()}},$={...t,faceDetector:`standard`,apiUrl:`https://api.voltom.io`,language:void 0,clientKey:``,threshold:a,randomizeFaceSequence:!1,requireEyeLevelCamera:!0,requiredFaceStableFrames:2,requiredDocumentStableFrames:2,showFaceOverlay:!1,showDocumentOverlay:!1,showTextOverlay:!1,faceOverlayColor:`transparent`,faceMeshColor:`#38efb0`,documentOverlayColor:`transparent`,documentBoxColor:`#22d3ee`,documentFaceBoxColor:`#22d3ee`,documentFaceMeshColor:`#38efb0`,textColor:`#22d3ee`,debug:!1,capabilities:[`verifyHuman`,`verifyDocument`,`matchID`,`matchPicture`]},_e=class{options;view;root;useUi;videoElement;resizeListener;display=F();translator;flows;state;lastPicture;preparation=null;preloading=null;preparationController=null;prepared=!1;disposed=!1;operationController=null;subscriptions=new Set;uiAttached=!1;notifyStatus({status:e}){this.root.dispatchEvent(new CustomEvent(`voltom:${e}`))}showSpinner({message:e=this.translator.translate(`checkingFaceMatch`)}={}){this.display.activity.value={message:e}}hideSpinner(){this.display.activity.value=null}async runWithSpinner({task:e,message:t}){this.showSpinner({message:t});try{return await e()}finally{this.hideSpinner()}}constructor(e){let{root:t,video:n,ui:r,prepare:i=!0,...a}=e,o=r??!!t;if(o&&!t||!o&&!n)throw Error(h.INVALID_OPTIONS);if(!a.clientKey)throw Error(h.CLIENT_KEY_REQUIRED);this.options=Object.freeze({...$,...a,requireEyeLevelCamera:a.requireEyeLevelCamera??!0,capabilities:Object.freeze([...a.capabilities??$.capabilities]),poses:Array.isArray(a.poses)?Object.freeze([...a.poses]):a.poses}),this.root=t??document.createElement(`div`),this.useUi=o,this.videoElement=n??document.createElement(`video`),this.translator=m({language:this.options.language}),this.view={ref:{root:this.root,camera:document.createElement(`div`),video:this.videoElement,mesh:document.createElement(`canvas`)},collectFaceDebug:()=>{},collectDocumentDebug:()=>{}},this.flows=Z({options:this.options,view:this.view,display:this.display}),this.lastPicture=null,this.state=this.flows.createState(),this.resizeListener=()=>this.flows.syncCameraSize({state:this.state}),this.videoElement.addEventListener(`resize`,this.resizeListener),i&&this.prepare().catch(e=>console.error(e))}async preload(){if(this.disposed)throw Error(h.SDK_NOT_READY);if(this.preloading)return this.preloading;let e=(async()=>{await b({language:this.options.language}),await this.flows.preloadModels()})();this.preloading=e;try{if(await e,this.disposed)throw Error(h.SDK_NOT_READY)}catch(t){throw this.preloading===e&&(this.preloading=null),t}}async prepare(){if(this.disposed)throw Error(h.SDK_NOT_READY);if(this.preparation)return this.preparation;let e=new AbortController;this.preparationController=e;let t=(async()=>{await this.preload(),await this.attachUi(),await this.runWithSpinner({task:async()=>{if(await q({clientKey:this.options.clientKey,apiUrl:this.options.apiUrl,signal:e.signal}),await J({apiUrl:this.options.apiUrl}),await this.flows.initializeModels(),e.signal.throwIfAborted(),this.disposed)throw Error(h.SDK_NOT_READY)},message:this.translator.translate(`preparingModels`)})})();this.preparation=t;try{await t,this.prepared=!0,this.preparationController===e&&(this.preparationController=null)}catch(n){throw this.preparation===t&&(this.preparation=null),this.preparationController===e&&(this.preparationController=null),n}}async attachUi(){if(!this.useUi||this.uiAttached)return;let{createVerificationView:e}=await import(`./view-ObOGpVdZ.js`);if(this.disposed)throw Error(h.SDK_NOT_READY);let t=e({root:this.root,options:this.options,display:this.display});this.videoElement.removeEventListener(`resize`,this.resizeListener),Object.assign(this.view.ref,t.ref),this.view.collectFaceDebug=t.collectFaceDebug,this.view.collectDocumentDebug=t.collectDocumentDebug,this.videoElement=this.view.ref.video,this.videoElement.addEventListener(`resize`,this.resizeListener),this.uiAttached=!0}async submitHardVerification(e){let t=e.endpoint===`/verify/document`?this.translator.translate(`checkingDocument`):void 0;return await this.runWithSpinner({task:()=>this.flows.submitHardVerification({...e,signal:e.signal??this.operationController?.signal}),message:t})}async caniuse(){return await T()}async runOperation({retry:e,task:t,onError:n,capability:i,settings:a}){if(this.disposed)throw Error(h.SDK_NOT_READY);if(await this.prepare(),!this.options.capabilities.includes(i))throw Error(h.SDK_CAPABILITY_NOT_CONFIGURED);if(this.operationController)throw Error(h.INVALID_OPTIONS);let{signal:o,...s}=a,c=Object.freeze({...this.options,...s,poses:Array.isArray(s.poses)?Object.freeze([...s.poses]):s.poses??this.options.poses}),l=new AbortController;this.operationController=l;let u=()=>l.abort();o?.addEventListener(`abort`,u,{once:!0}),o?.aborted&&u(),l.signal.addEventListener(`abort`,()=>this.flows.stop({state:this.state}),{once:!0}),this.notifyStatus({status:`in-progress`}),r(()=>{this.display.retry.value=e,this.display.error.value=null,this.display.debugEnabled.value=c.debug,c.debug||(this.display.debug.value=[])});try{return l.signal.throwIfAborted(),await t({options:c,signal:l.signal})}catch(e){let t=l.signal.aborted?Error(h.VERIFICATION_CANCELLED,{cause:e}):e;throw n&&await n({error:t,options:c,signal:l.signal}),this.disposed||this.flows.showError({error:t,state:this.state}),t}finally{this.notifyStatus({status:`ready`}),o?.removeEventListener(`abort`,u),this.display.debugEnabled.value=this.options.debug,this.operationController===l&&(this.operationController=null)}}async verifyHuman(e={}){return await this.verifyCapture({flow:`human`,...e})}async verifyDocument(e={}){return await this.verifyCapture({flow:`document`,...e})}async verifyCapture({flow:e,...t}){let n=({options:t})=>{e===`human`?this.flows.resetFaceFlow({state:this.state,options:t}):this.flows.resetDocumentFlow({state:this.state}),this.flows.notifyCapturesChanged({state:this.state})};return await this.runOperation({capability:e===`human`?`verifyHuman`:`verifyDocument`,settings:t,retry:()=>this.verifyCapture({flow:e,...t,signal:void 0}),onError:async({error:t,options:r})=>{(e===`human`?this.state.faceCaptureConfiguration!==null:this.state.documentCaptureConfiguration!==null)&&d({error:t})!==h.VERIFICATION_CANCELLED&&n({options:r})},task:async({options:t,signal:r})=>{r.throwIfAborted(),await(e===`human`?this.flows.startFaceFlow:this.flows.startDocumentFlow)({state:this.state,options:t}),r.throwIfAborted();let i=await this.submitHardVerification({configuration:t,endpoint:`/verify/${e}`,state:this.state}),a=e===`human`?`hardHumanVerificationId`:`hardDocumentVerificationId`;return this.state[a]=i.resultId,i.outcome!==`pass`||i.matched!==!0?(this.state[a]=null,n({options:t}),i):(this.display.retry.value=null,i)}})}async ensureHumanVerification({options:e,signal:t}){if(t?.throwIfAborted(),this.flows.hasCompatibleFaceCaptures({state:this.state,options:e})||await this.flows.startFaceFlow({state:this.state,options:e}),t?.throwIfAborted(),this.state.hardHumanVerificationId)return null;let n=await this.submitHardVerification({configuration:e,endpoint:`/verify/human`,state:this.state}),r=n.outcome===`pass`&&n.matched===!0;return this.state.hardHumanVerificationId=r?n.resultId:null,r?null:n}async matchID(e={}){return await this.runOperation({capability:`matchID`,settings:e,retry:()=>this.matchID({...e,signal:void 0}),task:async({options:e,signal:t})=>{t.throwIfAborted();let n=await this.ensureHumanVerification({options:e,signal:t});if(n)return n;if(t.throwIfAborted(),this.flows.hasCompatibleDocumentCapture({state:this.state,options:e})||await this.flows.startDocumentFlow({state:this.state,options:e}),!this.state.hardDocumentVerificationId){t.throwIfAborted();let n=await this.submitHardVerification({configuration:e,endpoint:`/verify/document`,state:this.state});if(this.state.hardDocumentVerificationId=n.resultId,n.outcome!==`pass`||n.matched!==!0)return this.state.hardDocumentVerificationId=null,n}let r=await this.submitHardVerification({configuration:e,endpoint:`/verify/id`,state:this.state,sourceIds:[this.state.hardHumanVerificationId,this.state.hardDocumentVerificationId]});return r.outcome!==`pass`||r.matched!==!0||(this.display.retry.value=null),r}})}async matchPicture(e,t={}){return this.lastPicture=e,await this.runOperation({capability:`matchPicture`,settings:t,retry:async()=>{this.lastPicture&&await this.matchPicture(this.lastPicture,{...t,signal:void 0})},task:async({options:t,signal:n})=>{n.throwIfAborted();let r=await ge({blob:e,signal:n})??await C({blob:e});if(n.throwIfAborted(),!this.state.hardHumanVerificationId){let e=await this.ensureHumanVerification({options:t,signal:n});if(e)return e}await this.flows.startPictureFlow({picture:r,state:this.state,options:t,signal:n}),n.throwIfAborted();let i=await this.submitHardVerification({configuration:t,endpoint:`/verify/picture`,state:this.state,picture:r,sourceIds:[this.state.hardHumanVerificationId]});return i.outcome!==`pass`||i.matched!==!0||(this.display.retry.value=null),i}})}stop(){this.operationController?.abort(new DOMException(h.VERIFICATION_CANCELLED,`AbortError`)),this.flows.stop({state:this.state}),this.display.retry.value=null,this.notifyStatus({status:`ready`})}dispose(){if(!this.disposed){this.disposed=!0,this.preparationController?.abort(),this.stop();for(let e of this.subscriptions)e();this.subscriptions.clear(),this.videoElement.removeEventListener(`resize`,this.resizeListener),u(null,this.root),this.state.captures={},this.state.preparedCaptures={},this.state.faceEmbeddings={},this.state.documentCodes=[],this.state.identity=null,this.state.hardHumanVerificationId=null,this.state.hardDocumentVerificationId=null,this.state.faceCaptureConfiguration=null,this.state.documentCaptureConfiguration=null,delete this.state.document,this.lastPicture=null}}forgetHuman(){if(this.disposed)throw Error(h.SDK_NOT_READY);this.flows.resetFaceFlow({state:this.state}),this.display.error.value=null,this.flows.notifyCapturesChanged({state:this.state})}forgetDocument(){if(this.disposed)throw Error(h.SDK_NOT_READY);this.flows.resetDocumentFlow({state:this.state}),this.display.error.value=null,this.flows.notifyCapturesChanged({state:this.state})}getState(){return{activity:this.display.activity.value,error:this.display.error.value,retryAvailable:this.display.retry.value!==null,feedback:this.display.feedback.value,debug:this.display.debug.value}}subscribe(t){if(this.disposed)throw Error(h.SDK_NOT_READY);let n=e(()=>t(this.getState()));return this.subscriptions.add(n),()=>{n(),this.subscriptions.delete(n)}}};l({moduleUrl:import.meta.url});var ve=_e;export{ve as default};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/*! Copyright (c) 2026 VOLTOM. All rights reserved. Proprietary software. See LICENSE at https://voltom.io/license. */
|
|
2
|
+
import{S as e,l as t,t as n,w as r}from"./eyeLevelCamera-aDRPs63K.js";import{C as i,S as a,c as o,d as s,f as c,g as l,v as u,x as d}from"./media-Cejmtltt.js";import"./presentation-B4P1537m.js";import{n as f,r as p,t as m}from"./PoseSuccess-DDx23oJD.js";import{n as h,t as g}from"./PoseSilhouette-V9BxuMwo.js";var _=`/*! tailwindcss v4.3.4 | MIT License | https://tailwindcss.com */
|
|
3
|
+
[data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--theme-canvas:var(--lightningcss-light,#fafafa)var(--lightningcss-dark,#0b0b0b);--theme-surface:var(--lightningcss-light,#fff)var(--lightningcss-dark,#202020);--theme-surface-subtle:var(--lightningcss-light,#f5f5f5)var(--lightningcss-dark,#2c2c2c);--theme-text:var(--lightningcss-light,#121212)var(--lightningcss-dark,#f7f7f7);--theme-text-muted:var(--lightningcss-light,#626262)var(--lightningcss-dark,#a3a3a3);--theme-text-inverse:var(--lightningcss-light,#fafafa)var(--lightningcss-dark,#0b0b0b);--theme-border:var(--lightningcss-light,#bfbfbf)var(--lightningcss-dark,#606060);--theme-primary:var(--lightningcss-light,#121212)var(--lightningcss-dark,#f7f7f7);--theme-primary-hover:var(--lightningcss-light,#262626)var(--lightningcss-dark,#e5e5e5);--theme-primary-active:var(--lightningcss-light,#404040)var(--lightningcss-dark,#d4d4d4);--theme-focus:var(--lightningcss-light,#525252)var(--lightningcss-dark,#d4d4d4);--theme-cocoa:var(--lightningcss-light,#6b4423)var(--lightningcss-dark,#d29a63);--theme-mint:var(--lightningcss-light,#116b4c)var(--lightningcss-dark,#38efb0);--theme-cyan:var(--lightningcss-light,#0e7490)var(--lightningcss-dark,#22d3ee);--theme-violet:var(--lightningcss-light,#5b21b6)var(--lightningcss-dark,#b69cff);--theme-berry:var(--lightningcss-light,#a21caf)var(--lightningcss-dark,#e879f9);--theme-danger:var(--lightningcss-light,#b42318)var(--lightningcss-dark,#ff6b6b);--theme-danger-surface:var(--lightningcss-light,#fee2e2)var(--lightningcss-dark,#451a19);--theme-success:var(--lightningcss-light,#087443)var(--lightningcss-dark,#4ade80);--theme-success-surface:var(--lightningcss-light,#e7f6ee)var(--lightningcss-dark,#123c2b);--theme-warning:var(--lightningcss-light,#a16207)var(--lightningcss-dark,#ffc93c);--theme-warning-surface:var(--lightningcss-light,#fef3c7)var(--lightningcss-dark,#422006)}@media (prefers-color-scheme:dark){[data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root]{--lightningcss-light: ;--lightningcss-dark:initial}}:is(.dark,[data-theme=dark]) :is([data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:is(.light,[data-theme=light]) :is([data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root]){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:is([data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root])[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:is([data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root])[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-pose-silhouette],[data-pose-arrow]{display:block;overflow:visible}[data-pose-silhouette] [data-pose-head]{fill:none;stroke:var(--theme-border);stroke-width:1.5px;stroke-dasharray:5 5}[data-pose-silhouette] [data-pose-eye]{fill:var(--theme-text-muted);stroke:none}[data-pose-silhouette] [data-pose-mouth],[data-pose-silhouette] [data-pose-eye-closed],[data-pose-motion]{fill:none;stroke:var(--theme-cyan);stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round}[data-pose-motion]{stroke-dasharray:6 6;animation:.9s linear infinite pose-motion}[data-pose-arrowhead]{fill:var(--theme-cyan);stroke:none}[data-pose-arrow] [data-pose-motion]{stroke:var(--theme-mint);stroke-width:4px;stroke-dasharray:none;animation:none}[data-pose-arrow] [data-pose-arrowhead]{fill:var(--theme-mint)}[data-pose-arrow] [data-pose-smile]{fill:none;stroke:var(--theme-mint);stroke-width:4px;stroke-linecap:round}[data-pose-progress][data-variant=bar]{gap:4px;width:100%;display:flex}[data-pose-progress][data-variant=bar] [data-pose-progress-step]{background:var(--theme-border);border-radius:9999px;flex:1;height:4px;transition:background .2s}[data-pose-progress][data-variant=bar] [data-pose-progress-step][data-complete]{background:var(--theme-mint)}[data-pose-progress][data-variant=ring]{display:block;overflow:visible}[data-pose-progress][data-variant=ring] [data-pose-progress-step]{fill:none;stroke:var(--theme-border);stroke-width:2px;stroke-linecap:round;transition:stroke .3s}[data-pose-progress][data-variant=ring] [data-pose-progress-step][data-complete]{stroke:var(--theme-mint)}[data-pose-success]{opacity:0;pointer-events:none}[data-pose-success] circle{fill:var(--theme-success-surface);stroke:var(--theme-mint);stroke-width:2px}[data-pose-success] path{fill:none;stroke:var(--theme-mint);stroke-width:5px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1px}[data-pose-success][data-visible]{animation:.42s ease-out both pose-success-appear}[data-pose-success][data-visible] path{animation:.24s ease-out 60ms both pose-success-draw}@keyframes pose-motion{to{stroke-dashoffset:-12px}}@keyframes pose-success-appear{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}@keyframes pose-success-draw{to{stroke-dashoffset:0}}@media (prefers-reduced-motion:reduce){[data-pose-motion]{animation:none}[data-pose-success][data-visible]{opacity:1}[data-pose-success][data-visible] path{stroke-dashoffset:0}}[data-facekey-dialog]{box-sizing:border-box;width:100%;max-width:none;height:100dvh;max-height:none;padding:max(24px, env(safe-area-inset-top)) 24px max(24px, env(safe-area-inset-bottom));background:var(--theme-surface);color:var(--theme-text);border:0;margin:0;font-family:ui-sans-serif,system-ui,sans-serif;position:fixed;inset:0;overflow-y:auto}[data-facekey-dialog]::backdrop{background:var(--theme-text)}@supports (color:color-mix(in lab, red, red)){[data-facekey-dialog]::backdrop{background:color-mix(in srgb, var(--theme-text) 40%, transparent)}}[data-facekey-dialog][open]{flex-direction:column;justify-content:center;align-items:center;gap:24px;display:flex}[data-facekey-dialog] [data-facekey-title]{letter-spacing:-.7px;margin:0;font-size:28px;font-weight:600}[data-facekey-dialog] [data-facekey-camera]{aspect-ratio:1;flex-shrink:0;width:min(60vw,240px,38dvh);position:relative}[data-facekey-dialog] [data-facekey-camera] video{object-fit:cover;background:var(--theme-surface-subtle);border-radius:2147483647px;width:100%;height:100%}[data-facekey-dialog] [data-facekey-camera][data-mirrored] video{transform:scaleX(-1)}[data-facekey-dialog] [data-facekey-camera]>[data-pose-progress]{width:calc(100% + 28px);height:calc(100% + 28px);position:absolute;inset:-14px;overflow:visible}[data-facekey-dialog] [data-facekey-debug]{top:max(8px, env(safe-area-inset-top));z-index:1;border:1px solid var(--theme-border);background:var(--theme-surface);border-radius:.375rem;width:min(220px,100% - 16px);padding:8px 10px;position:fixed;left:8px}@supports (color:color-mix(in lab, red, red)){[data-facekey-dialog] [data-facekey-debug]{background:color-mix(in srgb, var(--theme-surface) 75%, transparent)}}[data-facekey-dialog] [data-facekey-debug]{color:var(--theme-text-muted);pointer-events:none;box-shadow:0 4px 14px var(--theme-border);font:10px/1.4 ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}@supports (color:color-mix(in lab, red, red)){[data-facekey-dialog] [data-facekey-debug]{box-shadow:0 4px 14px color-mix(in srgb, var(--theme-border) 35%, transparent)}}[data-facekey-dialog] [data-facekey-debug]{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}[data-facekey-dialog] [data-facekey-debug].hidden{display:none}[data-facekey-dialog] [data-facekey-debug] [data-valid=true]{color:var(--theme-mint)}[data-facekey-dialog] [data-facekey-debug] [data-valid=false]{color:var(--theme-danger)}@media (width>=640px){[data-facekey-dialog] [data-facekey-debug]{font-size:12px}}[data-facekey-dialog] [data-facekey-camera]>[data-pose-success]{z-index:2;transform-origin:50%;width:112px;height:112px;margin:auto;position:absolute;inset:0}[data-facekey-dialog] [data-facekey-camera] [data-pose-arrow]{width:64px;height:64px;color:var(--theme-mint);position:absolute;bottom:4%;left:50%;transform:translate(-50%)}[data-facekey-dialog][data-state=processing] [data-pose-progress]{animation:1s ease-in-out infinite alternate facekey-pulse}[data-facekey-dialog][data-state=failure] [data-pose-progress] [data-pose-progress-step],[data-facekey-dialog] [data-facekey-camera][data-feedback=mismatch] [data-pose-progress] [data-pose-progress-step]{stroke:var(--theme-danger)}[data-facekey-dialog] [data-facekey-camera][data-shake]{animation:.42s ease-in-out facekey-shake}[data-facekey-dialog] [data-facekey-camera][data-feedback=match] video{opacity:.35}[data-facekey-dialog] [data-facekey-status]{text-align:center;flex-direction:column;align-items:center;max-width:320px;min-height:48px;margin:0;font-size:21px;line-height:1.4;display:flex}[data-facekey-dialog] [data-facekey-status-reason]{color:var(--theme-warning);font-size:16px;font-weight:600}[data-facekey-dialog] [data-facekey-cancel]{border:1px solid var(--theme-mint);color:var(--theme-mint);font:inherit;background:0 0;border-radius:.375rem;padding:12px 20px;font-size:16px}[data-facekey-dialog] [data-facekey-cancel]:focus-visible{outline:2px solid var(--theme-focus);outline-offset:2px}@keyframes facekey-shake{0%,to{transform:translate(0)}15%,45%{transform:translate(-12px)}30%,60%{transform:translate(12px)}75%{transform:translate(-6px)}90%{transform:translate(4px)}}@keyframes facekey-pulse{to{opacity:.35}}@media (width<=600px){[data-facekey-dialog] [data-facekey-camera]{width:min(82vw,325px)}}@media (prefers-reduced-motion:reduce){[data-facekey-dialog] *,[data-facekey-dialog] :before,[data-facekey-dialog] :after{transition:none;animation:none}}`,v=({value:e})=>e===null?`—`:e.toFixed(2),y=({className:e,display:a,dialogRef:s,videoRef:d,options:v,onStop:y})=>{let{translate:b,translateError:x}=c({language:v.language});u(()=>{let e=s.current,t=d.current;if(!e||!t)throw Error(l.UI_ELEMENT_NOT_FOUND);let n=document.activeElement instanceof HTMLElement?document.activeElement:null,r=document.body.style.overflow;return document.body.style.overflow=`hidden`,e.showModal(),()=>{o({video:t}),e.open&&e.close(),document.body.style.overflow=r,n&&n.focus()}},[]);let S=a.phase.value,C=a.operation.value,{completed:w,total:T}=a.progress.value,E=a.feedback.value,D;E&&(D=E.matched?`match`:`mismatch`);let O=a.instruction.value,k=a.guidance.value,A=b(`preparingCamera`),j=``;if(S===`processing`&&(A=b(`checkingFace`)),S===`success`&&(A=b(`done`)),S===`failure`){let e=a.error.value;A=e===null?b(`faceNotRecognized`):x({error:e})}if(S===`capturing`){let e={FACE_NOT_DETECTED:b(`faceNotFound`),FACE_IN_POLYGON:b(`faceInPolygon`),FACE_TOO_SMALL:b(`faceTooSmall`),FACE_NOT_CENTERED:b(`faceNotCentered`),FACE_CAMERA_ALIGNMENT_REQUIRED:b(n())},r=a.corrective.value;O?.framing?A=e[O.framing]??A:O?.retry?A=O.retry:k&&(A=b(t({pose:k.pose,code:k.code}).primary),j=r?b(r):``)}let M=[...a.debug.value],N=a.match.value;if(M.length&&N){let e=N.reason??`unavailable`;N.score!==null&&(e=`${N.score.toFixed(4)} / ${r}`),N.reference&&(e=`Reference`),M.push({label:`Similarity`,valid:N.accepted,value:e})}return p(i,{children:[p(`style`,{"data-facekey-styles":``,children:_}),p(`dialog`,{className:e,ref:s,"data-facekey-dialog":``,"data-state":S,"aria-labelledby":`facekey-title`,"aria-describedby":`facekey-status`,onCancel:e=>{e.preventDefault(),y()},children:[p(`h2`,{id:`facekey-title`,"data-facekey-title":``,children:b(C===`enroll`?`setUpFaceKey`:`unlockWithFaceKey`)}),p(`div`,{"data-facekey-camera":``,"data-mirrored":a.facingMode.value===`user`?``:void 0,"data-feedback":D,"data-shake":E&&!E.matched&&E.animating&&a.failures.value%3==0?``:void 0,children:[p(`video`,{ref:d,playsInline:!0,muted:!0,autoPlay:!0,"aria-label":b(`cameraPreview`)}),p(f,{completed:w,label:b(`faceCaptureProgress`),total:T,variant:`ring`}),p(m,{visible:!!E?.matched}),!(S!==`capturing`||!k||O?.framing)&&p(g,{pose:k.pose}),p(h,{kind:`facekey`,entries:M})]}),p(`p`,{id:`facekey-status`,"data-facekey-status":``,role:`status`,"aria-live":`polite`,children:[p(`span`,{children:A}),!!j&&p(`span`,{"data-facekey-status-reason":``,children:j})]}),p(`button`,{type:`button`,"data-facekey-cancel":``,autoFocus:!0,onClick:y,children:b(`cancel`)})]})]})},b=({options:t,display:n,events:r,onStop:i})=>{let o=d(),c=d(),u=null,f=0;return{get dialog(){return o.current},requiredVideo:()=>{if(!c.current)throw Error(l.INVALID_OPTIONS);return c.current},open:()=>{if(u)throw Error(l.INVALID_OPTIONS);u=document.createElement(`div`),u.dataset.facekeyRoot=``,s({element:u,theme:t.theme}),document.body.append(u),f=0,a(p(y,{display:n,dialogRef:o,videoRef:c,options:t,onStop:i}),u),r.dispatchEvent(new CustomEvent(`facekey:open`,{detail:o.current}))},close:()=>{u&&(a(null,u),u.remove(),u=null,r.dispatchEvent(new Event(`facekey:close`)))},collectCaptureDebug:({centered:t,face:r,faceInPolygon:i,faces:a,force:s=!1,frame:c,framing:l,operation:u,pose:d,poseRejection:p,reason:m,stable:h})=>{let g=r?r.boundingRect.height/Math.min(c.width,c.height):null,_=r?.blendshapes.mouthSmileLeft??null,y=r?.blendshapes.mouthSmileRight??null,b=!(!r||p),x=[{label:`Flow`,value:u.toUpperCase()},{label:`Pose`,value:d},{label:`Faces`,valid:a.length===1,value:String(a.length)},{label:`Human`,valid:!!r&&!i,value:r?i?`In polygon`:`Yes`:`No face`},{label:`Height`,valid:!l,value:g===null?`—`:`${(g*100).toFixed(0)}% / ${e*100}%`},{label:`Centered`,valid:t,value:t?`Yes`:`No`},{label:`Pitch`,value:v({value:r?.pitch??null})},{label:`Yaw`,value:v({value:r?.yaw??null})},{label:`Roll`,value:v({value:r?.roll??null})},{label:`Pose valid`,valid:b,value:p??`Yes`}];d===`faceSmile`&&x.push({label:`Smile`,valid:_!==null&&y!==null&&_>=.5&&y>=.5,value:`${v({value:_})}|${v({value:y})}`}),x.push({label:`Stable`,valid:h>0,value:`${h}/3`}),m&&x.push({label:`Reason`,valid:!1,value:m});let S=performance.now();!n.debugEnabled.value||!o.current?.open||!s&&S-f<100||(f=S,n.debug.value=x)}}};export{b as createFaceKeyView};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/*! Copyright (c) 2026 VOLTOM. All rights reserved. Proprietary software. See LICENSE at https://voltom.io/license. */
|
|
2
|
+
import{V as e,c as t,x as n}from"./eyeLevelCamera-aDRPs63K.js";import{C as r,S as i,d as a,f as o,g as s,p as c,x as l,y as u}from"./media-Cejmtltt.js";import{c as d,r as f,s as p}from"./presentation-Cg1Ec60l.js";import{n as m,r as h,t as g}from"./PoseSuccess-DDx23oJD.js";import{n as _,t as v}from"./PoseSilhouette-V9BxuMwo.js";var y=`/*! tailwindcss v4.3.4 | MIT License | https://tailwindcss.com */
|
|
3
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:block))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-border-style:solid;--tw-leading:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-font-weight:initial}}}[data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--theme-canvas:var(--lightningcss-light,#fafafa)var(--lightningcss-dark,#0b0b0b);--theme-surface:var(--lightningcss-light,#fff)var(--lightningcss-dark,#202020);--theme-surface-subtle:var(--lightningcss-light,#f5f5f5)var(--lightningcss-dark,#2c2c2c);--theme-text:var(--lightningcss-light,#121212)var(--lightningcss-dark,#f7f7f7);--theme-text-muted:var(--lightningcss-light,#626262)var(--lightningcss-dark,#a3a3a3);--theme-text-inverse:var(--lightningcss-light,#fafafa)var(--lightningcss-dark,#0b0b0b);--theme-border:var(--lightningcss-light,#bfbfbf)var(--lightningcss-dark,#606060);--theme-primary:var(--lightningcss-light,#121212)var(--lightningcss-dark,#f7f7f7);--theme-primary-hover:var(--lightningcss-light,#262626)var(--lightningcss-dark,#e5e5e5);--theme-primary-active:var(--lightningcss-light,#404040)var(--lightningcss-dark,#d4d4d4);--theme-focus:var(--lightningcss-light,#525252)var(--lightningcss-dark,#d4d4d4);--theme-cocoa:var(--lightningcss-light,#6b4423)var(--lightningcss-dark,#d29a63);--theme-mint:var(--lightningcss-light,#116b4c)var(--lightningcss-dark,#38efb0);--theme-cyan:var(--lightningcss-light,#0e7490)var(--lightningcss-dark,#22d3ee);--theme-violet:var(--lightningcss-light,#5b21b6)var(--lightningcss-dark,#b69cff);--theme-berry:var(--lightningcss-light,#a21caf)var(--lightningcss-dark,#e879f9);--theme-danger:var(--lightningcss-light,#b42318)var(--lightningcss-dark,#ff6b6b);--theme-danger-surface:var(--lightningcss-light,#fee2e2)var(--lightningcss-dark,#451a19);--theme-success:var(--lightningcss-light,#087443)var(--lightningcss-dark,#4ade80);--theme-success-surface:var(--lightningcss-light,#e7f6ee)var(--lightningcss-dark,#123c2b);--theme-warning:var(--lightningcss-light,#a16207)var(--lightningcss-dark,#ffc93c);--theme-warning-surface:var(--lightningcss-light,#fef3c7)var(--lightningcss-dark,#422006)}@media (prefers-color-scheme:dark){[data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root]{--lightningcss-light: ;--lightningcss-dark:initial}}:is(.dark,[data-theme=dark]) :is([data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:is(.light,[data-theme=light]) :is([data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root]){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:is([data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root])[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:is([data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root])[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-pose-silhouette],[data-pose-arrow]{display:block;overflow:visible}[data-pose-silhouette] [data-pose-head]{fill:none;stroke:var(--theme-border);stroke-width:1.5px;stroke-dasharray:5 5}[data-pose-silhouette] [data-pose-eye]{fill:var(--theme-text-muted);stroke:none}[data-pose-silhouette] [data-pose-mouth],[data-pose-silhouette] [data-pose-eye-closed],[data-pose-motion]{fill:none;stroke:var(--theme-cyan);stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round}[data-pose-motion]{stroke-dasharray:6 6;animation:.9s linear infinite pose-motion}[data-pose-arrowhead]{fill:var(--theme-cyan);stroke:none}[data-pose-arrow] [data-pose-motion]{stroke:var(--theme-mint);stroke-width:4px;stroke-dasharray:none;animation:none}[data-pose-arrow] [data-pose-arrowhead]{fill:var(--theme-mint)}[data-pose-arrow] [data-pose-smile]{fill:none;stroke:var(--theme-mint);stroke-width:4px;stroke-linecap:round}[data-pose-progress][data-variant=bar]{gap:4px;width:100%;display:flex}[data-pose-progress][data-variant=bar] [data-pose-progress-step]{background:var(--theme-border);border-radius:9999px;flex:1;height:4px;transition:background .2s}[data-pose-progress][data-variant=bar] [data-pose-progress-step][data-complete]{background:var(--theme-mint)}[data-pose-progress][data-variant=ring]{display:block;overflow:visible}[data-pose-progress][data-variant=ring] [data-pose-progress-step]{fill:none;stroke:var(--theme-border);stroke-width:2px;stroke-linecap:round;transition:stroke .3s}[data-pose-progress][data-variant=ring] [data-pose-progress-step][data-complete]{stroke:var(--theme-mint)}[data-pose-success]{opacity:0;pointer-events:none}[data-pose-success] circle{fill:var(--theme-success-surface);stroke:var(--theme-mint);stroke-width:2px}[data-pose-success] path{fill:none;stroke:var(--theme-mint);stroke-width:5px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1px}[data-pose-success][data-visible]{animation:.42s ease-out both pose-success-appear}[data-pose-success][data-visible] path{animation:.24s ease-out 60ms both pose-success-draw}@keyframes pose-motion{to{stroke-dashoffset:-12px}}@keyframes pose-success-appear{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}@keyframes pose-success-draw{to{stroke-dashoffset:0}}@media (prefers-reduced-motion:reduce){[data-pose-motion]{animation:none}[data-pose-success][data-visible]{opacity:1}[data-pose-success][data-visible] path{stroke-dashoffset:0}}@layer components{[data-voltom-root]{width:100%;min-height:0;max-width:var(--container-5xl,64rem);padding-block:env(safe-area-inset-top);color:var(--theme-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;flex-direction:column;gap:.75rem;margin-inline:auto;display:flex;position:relative;overflow:visible}[data-voltom-camera]{background-color:var(--theme-surface);width:100%;aspect-ratio:var(--voltom-camera-ratio,4 / 3);flex-shrink:0;margin-inline:auto;position:relative;overflow:hidden;container-type:size}[data-voltom-camera]>video,[data-voltom-mesh],[data-voltom-overlay]{object-fit:contain;width:100%;height:100%;position:absolute;inset:0}[data-voltom-mesh],[data-voltom-overlay]{object-fit:fill}[data-voltom-mesh]{color:var(--theme-canvas)}[data-voltom-mesh],[data-voltom-overlay],[data-voltom-guide],[data-voltom-ring],[data-voltom-direction],[data-voltom-challenge],[data-voltom-result],[data-voltom-spinner],[data-voltom-feedback]{pointer-events:none}[data-voltom-feedback]{z-index:10;text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:.75rem;padding-inline:1rem;display:flex;position:absolute;inset:0}[data-voltom-camera][data-mirrored]>video,[data-voltom-camera][data-mirrored] [data-voltom-mesh]{--tw-scale-x:calc(100% * -1);scale:var(--tw-scale-x) var(--tw-scale-y)}[data-voltom-guide-mode=document]{border-style:var(--tw-border-style);--tw-border-style:dashed;border-style:dashed;border-width:2px;border-color:var(--theme-border);height:90cqh;margin:auto;display:block;position:absolute;inset:0}[data-voltom-guide-mode=document][data-voltom-guide-orientation=landscape]{aspect-ratio:4/3}[data-voltom-guide-mode=document][data-voltom-guide-orientation=portrait]{aspect-ratio:3/4}[data-voltom-ring-wrap]{pointer-events:none;z-index:5;width:66cqh;height:66cqh;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}[data-voltom-ring-wrap]:not([data-voltom-ring-mode=face]){display:none}[data-voltom-ring-wrap] [data-pose-progress]{width:100%;height:100%}[data-voltom-direction]{width:36px;height:36px;color:var(--theme-mint);pointer-events:none;z-index:10;position:absolute;bottom:14cqh;left:50%;transform:translate(-50%)}[data-voltom-direction]:not([data-voltom-direction-pose]){display:none}[data-voltom-debug]{pointer-events:none;z-index:10;border-style:var(--tw-border-style);border-width:1px;border-color:var(--theme-border);background-color:var(--theme-surface);border-radius:.375rem;width:200px;display:none;position:absolute;top:.75rem;left:.75rem}@supports (color:color-mix(in lab, red, red)){[data-voltom-debug]{background-color:color-mix(in oklab, var(--theme-surface) 70%, transparent)}}[data-voltom-debug]{font-family:var(--font-mono,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);--tw-leading:calc(.25rem * 4);color:var(--theme-text-muted);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-shadow-color:var(--theme-border);padding-block:.25rem;padding-inline:.5rem;font-size:10px;line-height:1rem}@supports (color:color-mix(in lab, red, red)){[data-voltom-debug]{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--theme-border) 30%, transparent) var(--tw-shadow-alpha), transparent)}}[data-voltom-debug]{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );backdrop-filter:var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, )}[data-voltom-debug]:not(.hidden){display:block}[data-voltom-camera]>[data-pose-success]{z-index:30;transform-origin:50%;width:96px;height:96px;margin:auto;position:absolute;inset:0}[data-voltom-debug] [data-valid=true]{color:var(--theme-mint)}[data-voltom-debug] [data-valid=false]{color:var(--theme-danger)}[data-voltom-overlay][data-idle]{background-color:var(--theme-canvas);place-items:center;display:grid}@supports (color:color-mix(in lab, red, red)){[data-voltom-overlay][data-idle]{background-color:color-mix(in oklab, var(--theme-canvas) 70%, transparent)}}[data-voltom-overlay][data-idle]:before{background-color:var(--theme-surface);border-radius:.375rem}@supports (color:color-mix(in lab, red, red)){[data-voltom-overlay][data-idle]:before{background-color:color-mix(in oklab, var(--theme-surface) 80%, transparent)}}[data-voltom-overlay][data-idle]:before{text-align:center;font-size:1.25rem;line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));color:var(--theme-cyan);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );backdrop-filter:var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );content:attr(data-voltom-overlay-label);padding-block:.75rem;padding-inline:1rem}[data-voltom-overlay][data-error]:before{content:none}[data-voltom-challenge]{z-index:10;background-color:var(--theme-surface);max-width:calc(100vw - 1.5rem);color:var(--theme-text);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-shadow-color:var(--theme-border);inset-inline:.75rem;border-radius:.625rem;justify-content:center;align-items:center;gap:.5rem;padding-block:.5rem;padding-inline:.75rem;display:flex;position:absolute;top:.75rem}@supports (color:color-mix(in lab, red, red)){[data-voltom-challenge]{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--theme-border) 30%, transparent) var(--tw-shadow-alpha), transparent)}}[data-voltom-challengeText]{text-align:center;font-size:1rem;line-height:var(--tw-leading,var(--text-base--line-height,calc(1.5 / 1)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);flex-direction:column;display:flex}[data-voltom-challengeReason]{font-size:.875rem;line-height:var(--tw-leading,var(--text-sm--line-height,calc(1.25 / .875)));--tw-font-weight:var(--font-weight-medium,500);font-weight:var(--font-weight-medium,500);color:var(--theme-warning)}[data-voltom-spinner]{z-index:20;background-color:var(--theme-canvas);flex-direction:column;justify-content:center;align-items:center;gap:.75rem;display:flex;position:absolute;inset:0}@supports (color:color-mix(in lab, red, red)){[data-voltom-spinner]{background-color:color-mix(in oklab, var(--theme-canvas) 90%, transparent)}}[data-voltom-spinner]{text-align:center;font-size:1.25rem;line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);color:var(--theme-text);--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );backdrop-filter:var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, )}[data-voltom-spinner]:before{width:2rem;height:2rem;animation:var(--animate-spin,spin 1s linear infinite);border-style:var(--tw-border-style);border-width:4px;border-color:var(--theme-border);border-radius:2147483647px;display:block}@supports (color:color-mix(in lab, red, red)){[data-voltom-spinner]:before{border-color:color-mix(in oklab, var(--theme-border) 30%, transparent)}}[data-voltom-spinner]:before{border-top-color:var(--theme-cyan)}@media (prefers-reduced-motion:reduce){[data-voltom-spinner]:before{animation:none}}[data-voltom-spinner]:before{content:""}[data-voltom-result]{pointer-events:auto;width:fit-content;max-width:100%;font-size:1.25rem;line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));--tw-font-weight:var(--font-weight-semibold,600);font-weight:var(--font-weight-semibold,600);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );backdrop-filter:var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );border-radius:.375rem;padding-block:.5rem;padding-inline:1rem}[data-voltom-retry]{pointer-events:auto;border-style:var(--tw-border-style);border-width:1px;border-color:var(--theme-border);background-color:var(--theme-surface);border-radius:.375rem}@supports (color:color-mix(in lab, red, red)){[data-voltom-retry]{background-color:color-mix(in oklab, var(--theme-surface) 90%, transparent)}}[data-voltom-retry]{font-size:1.25rem;line-height:var(--tw-leading,var(--text-xl--line-height,calc(1.75 / 1.25)));--tw-font-weight:var(--font-weight-bold,700);font-weight:var(--font-weight-bold,700);color:var(--theme-text);--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);--tw-shadow-color:var(--theme-border);padding-block:.75rem;padding-inline:1rem}@supports (color:color-mix(in lab, red, red)){[data-voltom-retry]{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--theme-border) 30%, transparent) var(--tw-shadow-alpha), transparent)}}[data-voltom-retry]{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );backdrop-filter:var(--tw-backdrop-blur, ) var(--tw-backdrop-brightness, ) var(--tw-backdrop-contrast, ) var(--tw-backdrop-grayscale, ) var(--tw-backdrop-hue-rotate, ) var(--tw-backdrop-invert, ) var(--tw-backdrop-opacity, ) var(--tw-backdrop-saturate, ) var(--tw-backdrop-sepia, );transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function,cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration,var(--default-transition-duration,.15s))}@media (hover:hover){[data-voltom-retry]:hover{background-color:var(--theme-surface-subtle)}}[data-voltom-result].is-success{border-style:var(--tw-border-style);border-width:1px;border-color:var(--theme-success)}@supports (color:color-mix(in lab, red, red)){[data-voltom-result].is-success{border-color:color-mix(in oklab, var(--theme-success) 50%, transparent)}}[data-voltom-result].is-success{background-color:var(--theme-success-surface);color:var(--theme-success)}[data-voltom-result].is-failure{border-style:var(--tw-border-style);border-width:1px;border-color:var(--theme-danger)}@supports (color:color-mix(in lab, red, red)){[data-voltom-result].is-failure{border-color:color-mix(in oklab, var(--theme-danger) 50%, transparent)}}[data-voltom-result].is-failure{background-color:var(--theme-danger-surface);color:var(--theme-danger)}[data-voltom-root] .hidden{display:none}}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}`,b=new Set([`FACE_NOT_DETECTED`,`FACE_IN_POLYGON`,`FACE_TOO_SMALL`,`FACE_CENTER_MOVE_LEFT`,`FACE_CENTER_MOVE_RIGHT`,`FACE_CENTER_MOVE_UP`,`FACE_CENTER_MOVE_DOWN`,`FACE_CAMERA_ALIGNMENT_REQUIRED`]),x=({className:e,display:n,elements:i,options:a})=>{let[s,c]=u(!0),{translate:l,translateError:f}=o({language:a.language}),x=n.feedback.value,S=n.activity.value,C=S&&S!==`matching`?S.message:``,w=S===`matching`?l(`checkingFaceMatch`):C,T=n.error.value,E=n.cameraSize.value,D=x&&x.flow===`face`?x.pose:void 0,O=x&&x.flow===`face`?x.code:null,k=O&&b.has(O)?O:null;n.guidance.value;let A=n.progress.value,j=n.corrective.value,M=D?t({pose:D,corrective:j}):null,N=l(`lookStraight`),P=``;if(M&&(N=l(M.primary),P=M.corrective?l(M.corrective):``),k&&(N=l(d({code:k})),P=``),x&&x.flow===`document`){let e=l(p({target:x.target}));N=(x.code&&x.code!==`DOCUMENT_NOT_DETECTED`?l(d({code:x.code})):``)||e}let F=E&&E.width<E.height?`portrait`:`landscape`;return h(r,{children:[h(`style`,{"data-voltom-styles":``,children:y}),h(`div`,{className:e,ref:i.camera,"data-voltom":``,"data-voltom-camera":``,"data-mirrored":n.cameraFacingMode.value===`user`?``:void 0,style:{"--voltom-camera-ratio":E?`${E.width} / ${E.height}`:void 0},children:[h(`video`,{ref:i.video,"data-voltom-video":``,playsInline:!0,muted:!0,autoPlay:!0,onPlaying:()=>c(!1),onEmptied:()=>c(!0)}),h(`canvas`,{ref:i.mesh,"data-voltom-mesh":``}),h(`div`,{"data-voltom-overlay":``,"data-voltom-overlay-label":l(`readyToStart`),"data-idle":s?``:void 0,"data-error":T?``:void 0}),h(`div`,{"data-voltom-guide":``,"aria-hidden":`true`,"data-voltom-guide-mode":x?.flow,"data-voltom-guide-orientation":x?.flow===`document`?F:void 0}),h(`div`,{"data-voltom-ring-wrap":``,"aria-hidden":`true`,"data-voltom-ring-mode":x?.flow??``,children:h(m,{completed:A.completed,total:A.total,variant:`ring`})}),!(!D||k)&&h(v,{"data-voltom-direction":``,"data-voltom-direction-pose":D,pose:D}),h(g,{visible:n.success.value}),h(_,{kind:`voltom`,entries:n.debug.value}),h(`div`,{"data-voltom-spinner":``,className:S?void 0:`hidden`,role:`status`,"aria-label":w,children:C}),h(`div`,{"data-voltom-challenge":D??(x?`document`:void 0),className:x?void 0:`hidden`,children:h(`span`,{"data-voltom-challengeText":``,role:`status`,"aria-live":`polite`,children:[h(`span`,{children:N}),!!P&&h(`span`,{"data-voltom-challengeReason":``,children:P})]})}),h(`div`,{"data-voltom-feedback":``,children:[h(`div`,{"data-voltom-result":``,className:T?`is-failure`:`hidden`,role:`status`,children:T?f({error:T}):``}),h(`button`,{"data-voltom-retry":``,className:T&&n.retry.value?void 0:`hidden`,type:`button`,"aria-label":l(`retry`),onClick:async()=>{let e=n.retry.value;if(n.error.value=null,e)try{await e()}catch{return}},children:l(`retry`)})]})]})]})},S=({root:t,options:r,display:o})=>{let u=({language:e})=>e??c(),d=({state:e})=>e.faceSequence[e.poseIndex]??`faceStraight`,p=0,m=({entries:e,state:t})=>{if(!o.debugEnabled.value||!t.flow)return;let n=performance.now();n-p<100||(p=n,o.debug.value=e)},g=()=>o.cameraSize.value?`${o.cameraSize.value.width}x${o.cameraSize.value.height}`:`—`,_=()=>{let t=e(),n=t.threading.startsWith(`multi`)?`multi`:`single`;return[{label:`Inference`,value:t.inference},{label:`Threading`,value:n}]},v=({face:e,faceInPolygon:t,processingTimeMilliseconds:i,state:a})=>{let s=e?e.pitch:null,c=e?e.yaw:null,l=e?e.roll:null,p=e?f({face:e,name:`mouthSmileLeft`}):0,h=e?f({face:e,name:`mouthSmileRight`}):0,v=e?f({face:e,name:`eyeBlinkLeft`}):0,y=e?f({face:e,name:`eyeBlinkRight`}):0,b=s!==null&&s>=r.minPitch&&s<=r.maxPitch,x=c!==null&&c>=r.minYaw&&c<=r.maxYaw,S=d({state:a}),C=l!==null&&(S===`faceTiltLeft`?l>r.maxRoll:S===`faceTiltRight`?l<-r.maxRoll:Math.abs(l)<=r.maxRoll),w=e=>e===null?`—`:e.toFixed(2),T=(e,t)=>`${e.toFixed(2)}|${t.toFixed(2)}`;m({state:a,entries:[{label:`Flow`,value:`FACE`},..._(),{label:`Face`,valid:!!e&&!t,value:e?t?`In polygon`:`Yes`:`No`},{label:`Pitch`,valid:b,value:w(s)},{label:`Yaw`,valid:x,value:w(c)},{label:`Roll`,valid:C,value:w(l)},{label:`Smile`,valid:p>=.5&&h>=.5,value:T(p,h)},{label:`Wink left`,valid:Math.round((v-y)*100)/100>=n,value:T(v,y)},{label:`Stable frames`,valid:a.poseStableFrames>0,value:`${a.poseStableFrames}/${r.requiredFaceStableFrames}`},{label:`Language`,value:u({language:r.language})},{label:`Camera`,value:g()},{label:`Facing mode`,value:o.cameraFacingMode.value??`—`},{label:`Frame time`,value:`${i.toFixed(0)} ms`}]})},y=({analysis:e,sideComparison:t,isBack:n,processingTimeMilliseconds:i,state:a})=>{let{orientation:s,alignment:c,documentKind:l,face:d,faceContained:f,detection:p}=e,{diagnostics:h,isBlurry:v,sharpness:y}=e.documentAnalysis,b=e.text.text,x={label:`Stable frames`,valid:a.documentStableFrames>0,value:`${a.documentStableFrames}/${r.requiredDocumentStableFrames}`},S=h?Object.keys(h.rejected)[0]:void 0,C=[{label:`Sharpness`,valid:v===null?void 0:!v,value:y===null?`—`:String(Math.round(y))},{label:`Rectangle`,valid:p?!0:!S&&void 0,value:p?`yes`:S??`no`},{label:`Orientation`,value:s?`${s.rotation}°`:`—`}],w=[{label:`Text`,valid:!!b,value:b?`yes`:`no`},{label:`Document type`,value:l??``},{label:`Distinct from front`,valid:t?.distinct,value:t?t.distinct?`yes`:`no`:`—`}],T=[{label:`Face`,valid:!!d,value:d?`yes`:`no`},{label:`Face contained`,valid:f,value:f?`yes`:`no`},{label:`Face area`,valid:c.faceAreaValid,value:`${(c.faceAreaRatio*100).toFixed(2)}%`},{label:`Face size`,valid:c.faceDimensionsValid,value:c.faceDimensionsValid?`yes`:`no`},{label:`Text`,valid:!!b,value:b?`yes`:`no`},{label:`Text parallel`,valid:c.textParallel,value:c.textParallel?`yes`:`no`},{label:`Text beside face`,valid:c.faceAdjacentTextLineCount>=2,value:String(c.faceAdjacentTextLineCount)},{label:`Document type`,value:l??``}];m({state:a,entries:[{label:`Flow`,value:n?`DOCUMENT BACK`:`DOCUMENT FRONT`},..._(),...C,...n?w:T,x,{label:`Language`,value:u({language:r.language})},{label:`Camera`,value:g()},{label:`Facing mode`,value:o.cameraFacingMode.value??`—`},{label:`Frame time`,value:`${i.toFixed(0)} ms`}]})},b={camera:l(),video:l(),mesh:l()};if(t.replaceChildren(),t.dataset.voltomRoot=``,a({element:t,theme:r.theme}),i(h(x,{display:o,elements:b,options:r}),t),!b.camera.current||!b.video.current||!b.mesh.current)throw Error(s.UI_ELEMENT_NOT_FOUND);return{ref:{root:t,camera:b.camera.current,video:b.video.current,mesh:b.mesh.current},collectFaceDebug:v,collectDocumentDebug:y}};export{S as createVerificationView};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! Copyright (c) 2026 VOLTOM. All rights reserved. Proprietary software. See LICENSE at https://voltom.io/license. */
|
|
2
|
+
import{S as e,c as t,d as n,f as r,g as i,v as a,x as o}from"./media-Cejmtltt.js";import{n as s,r as c,t as l}from"./PoseSuccess-DDx23oJD.js";var u=`[data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;--theme-canvas:var(--lightningcss-light,#fafafa)var(--lightningcss-dark,#0b0b0b);--theme-surface:var(--lightningcss-light,#fff)var(--lightningcss-dark,#202020);--theme-surface-subtle:var(--lightningcss-light,#f5f5f5)var(--lightningcss-dark,#2c2c2c);--theme-text:var(--lightningcss-light,#121212)var(--lightningcss-dark,#f7f7f7);--theme-text-muted:var(--lightningcss-light,#626262)var(--lightningcss-dark,#a3a3a3);--theme-text-inverse:var(--lightningcss-light,#fafafa)var(--lightningcss-dark,#0b0b0b);--theme-border:var(--lightningcss-light,#bfbfbf)var(--lightningcss-dark,#606060);--theme-primary:var(--lightningcss-light,#121212)var(--lightningcss-dark,#f7f7f7);--theme-primary-hover:var(--lightningcss-light,#262626)var(--lightningcss-dark,#e5e5e5);--theme-primary-active:var(--lightningcss-light,#404040)var(--lightningcss-dark,#d4d4d4);--theme-focus:var(--lightningcss-light,#525252)var(--lightningcss-dark,#d4d4d4);--theme-cocoa:var(--lightningcss-light,#6b4423)var(--lightningcss-dark,#d29a63);--theme-mint:var(--lightningcss-light,#116b4c)var(--lightningcss-dark,#38efb0);--theme-cyan:var(--lightningcss-light,#0e7490)var(--lightningcss-dark,#22d3ee);--theme-violet:var(--lightningcss-light,#5b21b6)var(--lightningcss-dark,#b69cff);--theme-berry:var(--lightningcss-light,#a21caf)var(--lightningcss-dark,#e879f9);--theme-danger:var(--lightningcss-light,#b42318)var(--lightningcss-dark,#ff6b6b);--theme-danger-surface:var(--lightningcss-light,#fee2e2)var(--lightningcss-dark,#451a19);--theme-success:var(--lightningcss-light,#087443)var(--lightningcss-dark,#4ade80);--theme-success-surface:var(--lightningcss-light,#e7f6ee)var(--lightningcss-dark,#123c2b);--theme-warning:var(--lightningcss-light,#a16207)var(--lightningcss-dark,#ffc93c);--theme-warning-surface:var(--lightningcss-light,#fef3c7)var(--lightningcss-dark,#422006)}@media (prefers-color-scheme:dark){[data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root]{--lightningcss-light: ;--lightningcss-dark:initial}}:is(.dark,[data-theme=dark]) :is([data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root]){--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:is(.light,[data-theme=light]) :is([data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root]){--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:is([data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root])[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}:is([data-voltom-demo],[data-voltom-root],[data-facekey-root],[data-facegate-root])[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-pose-silhouette],[data-pose-arrow]{display:block;overflow:visible}[data-pose-silhouette] [data-pose-head]{fill:none;stroke:var(--theme-border);stroke-width:1.5px;stroke-dasharray:5 5}[data-pose-silhouette] [data-pose-eye]{fill:var(--theme-text-muted);stroke:none}[data-pose-silhouette] [data-pose-mouth],[data-pose-silhouette] [data-pose-eye-closed],[data-pose-motion]{fill:none;stroke:var(--theme-cyan);stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round}[data-pose-motion]{stroke-dasharray:6 6;animation:.9s linear infinite pose-motion}[data-pose-arrowhead]{fill:var(--theme-cyan);stroke:none}[data-pose-arrow] [data-pose-motion]{stroke:var(--theme-mint);stroke-width:4px;stroke-dasharray:none;animation:none}[data-pose-arrow] [data-pose-arrowhead]{fill:var(--theme-mint)}[data-pose-arrow] [data-pose-smile]{fill:none;stroke:var(--theme-mint);stroke-width:4px;stroke-linecap:round}[data-pose-progress][data-variant=bar]{gap:4px;width:100%;display:flex}[data-pose-progress][data-variant=bar] [data-pose-progress-step]{background:var(--theme-border);border-radius:9999px;flex:1;height:4px;transition:background .2s}[data-pose-progress][data-variant=bar] [data-pose-progress-step][data-complete]{background:var(--theme-mint)}[data-pose-progress][data-variant=ring]{display:block;overflow:visible}[data-pose-progress][data-variant=ring] [data-pose-progress-step]{fill:none;stroke:var(--theme-border);stroke-width:2px;stroke-linecap:round;transition:stroke .3s}[data-pose-progress][data-variant=ring] [data-pose-progress-step][data-complete]{stroke:var(--theme-mint)}[data-pose-success]{opacity:0;pointer-events:none}[data-pose-success] circle{fill:var(--theme-success-surface);stroke:var(--theme-mint);stroke-width:2px}[data-pose-success] path{fill:none;stroke:var(--theme-mint);stroke-width:5px;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1px}[data-pose-success][data-visible]{animation:.42s ease-out both pose-success-appear}[data-pose-success][data-visible] path{animation:.24s ease-out 60ms both pose-success-draw}@keyframes pose-motion{to{stroke-dashoffset:-12px}}@keyframes pose-success-appear{0%{opacity:0;transform:scale(.85)}to{opacity:1;transform:scale(1)}}@keyframes pose-success-draw{to{stroke-dashoffset:0}}@media (prefers-reduced-motion:reduce){[data-pose-motion]{animation:none}[data-pose-success][data-visible]{opacity:1}[data-pose-success][data-visible] path{stroke-dashoffset:0}}[data-facegate-gate]{z-index:60;background:color-mix(in srgb, var(--theme-canvas) 84%, transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);place-items:center;padding:24px;font-family:ui-sans-serif,system-ui,sans-serif;display:grid;position:fixed;inset:0}[data-facegate-gate] .facegate-stage{place-items:center;display:grid;position:relative}[data-facegate-gate] .facegate-camera{aspect-ratio:1;flex-shrink:0;width:min(60vw,240px,38dvh);position:relative}[data-facegate-gate] .facegate-camera video{object-fit:cover;background:var(--theme-surface-subtle);border-radius:999px;width:100%;height:100%}[data-facegate-gate] .facegate-camera[data-mirrored] video{transform:scaleX(-1)}[data-facegate-gate] .facegate-camera>[data-pose-progress]{width:calc(100% + 28px);height:calc(100% + 28px);position:absolute;inset:-14px;overflow:visible}[data-facegate-gate] .facegate-camera>[data-pose-success]{z-index:2;transform-origin:50%;width:112px;height:112px;margin:auto;position:absolute;inset:0}[data-facegate-gate] .facegate-camera[data-shake]{animation:.48s both facegate-shake}[data-facegate-gate] .facegate-spinner-host{z-index:3;background:color-mix(in srgb, var(--theme-canvas) 70%, transparent);border-radius:999px;place-items:center;display:grid;position:absolute;inset:0}[data-facegate-gate] .facegate-spinner{width:40px;height:40px;color:var(--theme-text);animation:.9s linear infinite facegate-spin}[data-facegate-gate] .facegate-prompt{width:min(80vw,300px);color:var(--theme-text);text-align:center;margin:0;font-size:17px;font-weight:600;position:absolute;top:calc(100% + 30px);left:50%;transform:translate(-50%)}[data-facegate-gate][data-result=pass] [data-pose-progress-step]{stroke:var(--theme-mint)}[data-facegate-gate][data-result=reject] [data-pose-progress-step]{stroke:var(--theme-danger)}@keyframes facegate-shake{0%,to{transform:translate(0)rotate(0)}20%{transform:translate(-6px)rotate(-6deg)}40%{transform:translate(6px)rotate(6deg)}60%{transform:translate(-5px)rotate(-4deg)}80%{transform:translate(5px)rotate(4deg)}}@keyframes facegate-spin{to{transform:rotate(360deg)}}@media (width<=600px){[data-facegate-gate] .facegate-camera{width:min(82vw,300px)}}@media (prefers-reduced-motion:reduce){[data-facegate-gate] .facegate-camera[data-shake],[data-facegate-gate] .facegate-spinner{animation:none}}`,d=()=>c(`svg`,{className:`facegate-spinner`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,children:c(`path`,{d:`M12 3a9 9 0 1 0 9 9`})}),f=({display:e,videoRef:t,options:n,onCancel:o})=>{let{translate:f}=r({language:n.language});a(()=>{if(!t.current)throw Error(i.UI_ELEMENT_NOT_FOUND);let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[]);let p=e.outcome.value,m=e.phase.value===`checking`,h=e.completed.value,g=e.total.value;return c(`div`,{className:`facegate-gate`,"data-facegate-gate":``,"data-result":p===`pass`?`pass`:p?`reject`:``,onClick:e=>{e.target===e.currentTarget&&o()},children:[c(`style`,{"data-facegate-styles":``,children:u}),c(`div`,{className:`facegate-stage`,role:`dialog`,"aria-modal":`true`,"aria-label":`Liveness check`,children:[c(`div`,{className:`facegate-camera`,"data-mirrored":``,"data-shake":p===`fail`||p===`error`?``:void 0,children:[c(`video`,{ref:t,autoPlay:!0,muted:!0,playsInline:!0,"aria-label":f(`cameraPreview`)}),c(s,{completed:h,label:f(`faceCaptureProgress`),total:g,variant:`ring`}),c(l,{visible:p===`pass`}),m?c(`div`,{className:`facegate-spinner-host`,children:c(d,{})}):null]}),p?null:c(`p`,{className:`facegate-prompt`,role:`status`,"aria-live":`polite`,children:e.prompt.value})]})]})},p=({options:r,display:a,onCancel:s})=>{let l=o(),u=null;return{get video(){return l.current},requiredVideo:()=>{if(!l.current)throw Error(i.INVALID_OPTIONS);return l.current},open:()=>{u||(u=document.createElement(`div`),u.dataset.facegateRoot=``,n({element:u,theme:r.theme}),document.body.append(u),e(c(f,{display:a,videoRef:l,options:r,onCancel:s}),u))},close:()=>{if(!u)return;let n=l.current;n&&t({video:n}),e(null,u),u.remove(),u=null}}};export{p as createFaceGateView};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voltom.io/sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"license": "SEE LICENSE IN LICENSE",
|
|
5
5
|
"files": [
|
|
6
6
|
"LICENSE",
|
|
@@ -50,17 +50,17 @@
|
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@fastify/static": "^10.1.
|
|
53
|
+
"@fastify/static": "^10.1.9",
|
|
54
54
|
"@preact/signals": "^2.11.4",
|
|
55
55
|
"fastify": "^5.12.8",
|
|
56
56
|
"pdfjs-dist": "^6.5.438",
|
|
57
57
|
"preact": "^11.1.1"
|
|
58
58
|
},
|
|
59
59
|
"devDependencies": {
|
|
60
|
-
"@tailwindcss/vite": "^4.3.
|
|
60
|
+
"@tailwindcss/vite": "^4.3.4",
|
|
61
61
|
"@typescript/typescript6": "^6.0.2",
|
|
62
|
-
"rollup-plugin-visualizer": "^7.1.
|
|
63
|
-
"tailwindcss": "^4.3.
|
|
62
|
+
"rollup-plugin-visualizer": "^7.1.2",
|
|
63
|
+
"tailwindcss": "^4.3.4",
|
|
64
64
|
"vite": "^8.3.5",
|
|
65
65
|
"vite-plugin-compression2": "^2.5.3",
|
|
66
66
|
"vite-plugin-dts": "^5.1.2"
|
|
@@ -69,7 +69,8 @@
|
|
|
69
69
|
"test": "vitest run",
|
|
70
70
|
"test:ui": "HEADED=1 vitest run --ui",
|
|
71
71
|
"dev": "vite dev --logLevel silent",
|
|
72
|
-
"build": "vite build",
|
|
72
|
+
"build": "vite build && node --experimental-strip-types release.ts",
|
|
73
|
+
"release": "node --experimental-strip-types release.ts",
|
|
73
74
|
"start": "NODE_ENV=production node src/server.ts"
|
|
74
75
|
}
|
|
75
76
|
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! Copyright (c) 2026 VOLTOM. All rights reserved. Proprietary software. See LICENSE at https://voltom.io/license. */
|
|
2
|
-
import{L as e,d as t,f as n,m as r,p as i,z as a}from"./poseGuidance-DLg3Dm3T.js";var o=a({runtime:e}),s=n({runtime:e}),c=r({runtime:e}),l=i({runtime:e,imageFromImageBitmap:o}),u=t({runtime:e,...s,...c,...l,faceDetection:l});export{l as n,u as r,c as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! Copyright (c) 2026 VOLTOM. All rights reserved. Proprietary software. See LICENSE at https://voltom.io/license. */
|
|
2
|
-
var e=({moduleUrl:e})=>{let t=globalThis;t.__VOLTOM_ASSET_BASE_URL__||=new URL(`../`,e).href},t=({filename:e})=>{let t=globalThis.__VOLTOM_ASSET_BASE_URL__||globalThis.location?.href;if(!t)throw Error(`SDK_ASSET_BASE_URL_UNAVAILABLE`);return new URL(`assets/${e}`,t).href},n,r,i,a,o,s,c,l,u,d,f,p=Symbol.for(`pv`),m={},h=[],g=/^m(i|n|o|s|text|space)$/,_=Array.isArray,v=h.slice,y=Object.assign;function b(e){e&&e.parentNode&&e.remove()}function x(e,t,n){var r,i,a,o={},s=arguments.length;for(a in t)a==`key`?r=t[a]:a==`ref`&&typeof e!=`function`?i=t[a]:o[a]=t[a];return s>2&&(o.children=s>3?v.call(arguments,2):n),S(e,o,r,i,null)}function S(e,t,i,a,o){var s={type:e,props:t,key:i,ref:a,__k:null,__:null,__b:0,__e:null,__c:null,constructor:p,__v:o||++r,__i:-1,__u:0};return!o&&n.vnode&&n.vnode(s),s}function C(){return{current:null}}function w(e){return e.children}function T(e,t){this.props=e,this.context=t,this.__g=0}function E(e,t){if(t==null)return e.__&&E(e.__,e.__i+1);for(var n;t<e.__k.length;t++)if((n=e.__k[t])&&n.__e)return n.__e;return typeof e.type!=`function`||e.props.__P?null:E(e)}function D(e){if((e=e.__)&&e.__c&&!e.props.__P)return e.__e=null,e.__k.some(function(t){return t&&(e.__e=t.__e)}),D(e)}function O(e){(8&e.__g||(e.__g|=8,a.push(e),s++))&&o==n.debounceRendering||((o=n.debounceRendering)||queueMicrotask)(k)}function k(){var e,t,r,i,l,u,d,f,m;try{for(t=1;a.length;)a.length>t&&a.sort(c),e=a.shift(),t=a.length,8&e.__g&&(i=void 0,l=void 0,u=(l=(r=e).__v).__e,d=[],f=[],(m=r.__P)&&((i=y({constructor:p},l)).__v=l.__v+1,n.vnode&&n.vnode(i),I(m,i,l,r.__n,m.namespaceURI,32&l.__u?[u]:null,d,u||E(l),32&l.__u,f),i.__v=l.__v,i.__.__k[i.__i]=i,R(d,i,f),l.__=l.__e=null,i.__e!=u&&D(i)))}finally{(s=a.length)&&(o||queueMicrotask)(k)}}function ee(e,t,n,r,i,a,o,s,c,l,u){var d,f,p,g,_,v,y=r.__k||h,b=t.length;for(c=A(n,t,y,c,b),d=0;d<b;d++)(p=n.__k[d])!=null&&(f=~p.__i&&y[p.__i]||m,p.__i=d,v=I(e,p,f,i,a,o,s,c,l,u),g=p.__e,(f.ref!=p.ref||8&f.__u)&&(f.ref&&z(f.ref,null,p,f),p.ref&&u.push(p.ref,p.__c||g,p)),_||=g,4&p.__u?(c=j(p,c,e,!f.__v),f.__e&&(f.__e=null)):typeof p.type==`function`&&v!==void 0?c=v:g&&(c=g.nextSibling),p.__u&=-21);return n.__e=_,c}function A(e,t,n,r,i){var a,o,s,c,l,u,d,f,m,h=n.length,g=h,v=0,y=0,b=e.__k=Array(i);for(a=0;a<i;a++)(o=t[a])!=null&&typeof o!=`boolean`&&typeof o!=`function`?(typeof o!=`object`||o.constructor===String?o=b[a]=S(null,o):_(o)?o=b[a]=S(w,{children:o}):o.constructor===p&&o.__b?o=b[a]=S(o.type,o.props,o.key,o.ref,o.__v):b[a]=o,c=a+v,o.__=e,o.__b=e.__b+1,s=null,~(l=o.__i=M(o,n,c,g))&&(g--,(s=n[l])&&(s.__u|=2)),s&&s.__v?(o.__u|=16,l==c-1?v--:l==c+1?v++:l!=c&&(l>c?v--:v++,y=1)):(~l||(i>h?v--:i<h&&v++),typeof o.type!=`function`&&(o.__u|=4))):b[a]=null;if(y){for(u=[],d=[],a=0;a<i;a++)if((o=b[a])&&16&o.__u){for(v=0,f=u.length;v<f;)u[m=v+f>>1]<o.__i?v=m+1:f=m;u[v]=o.__i,d[a]=v+1}for(v=u.length;a--;)d[a]&&(d[a]==v?v--:b[a].__u|=4)}if(g)for(a=0;a<h;a++)!(s=n[a])||2&s.__u||(s.__e==r&&(r=E(s)),B(s,s));return r}function j(e,t,n,r){var i,a,o,s;if(typeof e.type==`function`){if(e.props.__P)return t;if(i=e.__k)for(a=0;a<i.length;a++)i[a]&&(i[a].__=e,t=j(i[a],t,n,!1));return t}for(t&&!t.parentNode&&(t=E(e))&&!t.parentNode&&(t=null),o=e.__e,s=t;s&&s.nodeType==8;)s=s.nextSibling;for(o!=s&&(!r&&n.moveBefore&&o.parentNode?n.moveBefore(o,t):n.insertBefore(o,t||null)),t=o;(t&&=t.nextSibling)&&t.nodeType==8&&!t.data.startsWith(`$s`););return t}function M(e,t,n,r){var i,a=e.key,o=e.type,s=t[n],c=s&&!(2&s.__u);if(s===null&&a==null||c&&a==s.key&&o==s.type)return n;if(r>+!!c){for(i=n-1;i>=0;i--)if((s=t[i])&&!(2&s.__u)&&a==s.key&&o==s.type)return i;for(i=n+1;i<t.length;i++)if((s=t[i])&&!(2&s.__u)&&a==s.key&&o==s.type)return i}return-1}function N(e,t,n){n??=``,t[0]==`-`?e.setProperty(t,n):e[t]=n}function P(e,t,n,r,i){var a,o;if(t==`style`){if(typeof n==`string`)e.style.cssText=n;else{if(typeof r==`string`&&(e.style.cssText=r=``),r)for(t in r)n&&t in n||N(e.style,t);if(n)for(t in n)r&&n[t]==r[t]||N(e.style,t,n[t])}}else if(t[0]==`o`&&t[1]==`n`)(e.__e||={})[t]=n,n&&r||(o=f[t]||(f[t]=F(t)),(e.__a||={})[t]=d,a=t!=(t=t.replace(u,`$1`)),(t=t.slice(2))[0]<`a`&&(t=t.toLowerCase()),n?e.addEventListener(t,o,a):e.removeEventListener(t,o,a));else{if(i==`http://www.w3.org/2000/svg`)t=t.replace(/xlink(H|:h)/,`h`).replace(/sName$/,`s`);else if(t!=`width`&&t!=`height`&&t!=`href`&&t!=`list`&&t!=`form`&&t!=`tabIndex`&&t!=`download`&&t!=`rowSpan`&&t!=`colSpan`&&t!=`role`&&t!=`popover`&&t in e)try{e[t]=n??``;return}catch{}if(typeof n==`function`)return;n==null||!1===n&&t[4]!=`-`?e.removeAttribute(t):e.setAttribute(t,t==`popover`&&n==1?``:n)}}function F(e){return function(t){var r=this.__e;if(r){if(r=r[e],t[l]==null)t[l]=d++;else if(t[l]<this.__a[e])return;return r(n.event?n.event(t):t)}}}function I(e,t,r,i,a,o,s,c,l,u){var d,f,m,g,v,x,S,C,D,O,k,A,j,M,N,P,F,I,R=t.type;if(t.constructor!==p)return null;128&r.__u&&(l=32&r.__u,d=r.__c.__z)&&(t.__u|=l,f=o=[],d.nodeType==8?c=L(d,o):o.push(d),c=o[0]||c),(d=n.__b)&&d(t);n:if(typeof R==`function`){m=s.length;try{if(C=t.props,D=(d=R.prototype)&&d.render,O=(d=R.contextType)&&i[d.__c],k=d?O?O.props.value:d.__:i,(g=r.__c)?(t.__c=g,2&g.__g&&(g.__g|=1)):(D?t.__c=g=new R(C,k):(t.__c=g=new T(C,k),g.constructor=R,g.render=re),O&&O.sub(g),g.state||(g.state={}),g.__n=i,g.__g|=8,g.__h=[],g.__k=[]),D&&(g.__s||(g.__s=g.state),R.getDerivedStateFromProps&&(g.__s==g.state&&(g.__s=y({},g.__s)),y(g.__s,R.getDerivedStateFromProps(C,g.__s)))),v=g.props,x=g.state,g.__v=t,r.__c){if(C!==v&&D&&!R.getDerivedStateFromProps&&g.componentWillReceiveProps&&g.componentWillReceiveProps(C,k),t.__v==r.__v&&!(8&g.__g)||!(4&g.__g)&&g.shouldComponentUpdate&&!1===g.shouldComponentUpdate(C,g.__s,k)){t.__v!=r.__v&&(g.props=C,g.state=g.__s,g.__g&=-9),t.__e=r.__e,t.__k=r.__k,t.__k.some(function(e){e&&(e.__=t)}),h.push.apply(g.__h,g.__k),g.__k=[],g.__h.length&&s.push(g),c=E(r);break n}g.componentWillUpdate&&g.componentWillUpdate(C,g.__s,k),D&&g.componentDidUpdate&&g.__h.push(function(){g.componentDidUpdate(v,x,S)})}else D&&!R.getDerivedStateFromProps&&g.componentWillMount&&g.componentWillMount(),D&&g.componentDidMount&&g.__h.push(g.componentDidMount);if(g.context=k,g.props=C,g.__P=e,g.__g&=-5,A=n.__r,j=0,D)g.state=g.__s,g.__g&=-9,A&&A(t),d=g.render(g.props,g.state,g.context),h.push.apply(g.__h,g.__k),g.__k=[];else do g.__g&=-9,A&&A(t),d=g.render(g.props,g.state,g.context),g.state=g.__s;while(8&g.__g&&++j<25);g.state=g.__s,g.getChildContext&&(i=y({},i,g.getChildContext())),D&&r.__c&&g.getSnapshotBeforeUpdate&&(S=g.getSnapshotBeforeUpdate(v,x)),M=d&&d.type===w&&d.key==null?d.props.children:d,C.__P&&(d=c,a=(e=C.__P).namespaceURI,l=o=null,r.props&&r.props.__P!=e&&(r.__k.some(function(e){e&&B(e,e)}),r.__k=null),c=r.__k?E(r,0):null),c=ee(e,_(M)?M:[M],t,r,i,a,o,s,c,l,u),C.__P&&(t.__e=null,c=d),t.__u&=-161,f&&f.some(b),g.__h.length&&s.push(g),1&g.__g&&(g.__g&=-4)}catch(e){if(s.length=m,t.__v=null,l||o){if(e.then){if(N=0,t.__u|=128|l,o){for(~(F=o.indexOf(c||void 0))||(F=o.length);(I=o[F-1])&&I.nodeType==8;)F--;for(;F<o.length;F++)if(I=o[F]){if(o[F]=null,I.nodeType==8){if(I.data.startsWith(`$s`))N++||(P=I);else if(N&&I.data.startsWith(`/$s`)&&!--N)break}else if(!N)break}}if(!P){for(;c&&c.nodeType==8&&c.nextSibling;)c=c.nextSibling;P=c}(d=L(P=t.__c.__z||(t.__c.__z=P)))?(t.__e=P,c=d):t.__e=c,c&&=c.nextSibling}else o&&o.some(b)}else t.__e=r.__e;t.__k||=r.__k||[],e.then||te(t),n.__e(e,t,r)}}else c=t.__e=ne(r.__e,t,r,i,a,o,s,l,u,e);return(d=n.diffed)&&d(t),c}function L(e,t){if(e&&e.nodeType==8&&e.data.startsWith(`$s`))for(var n=1;e=e.nextSibling;){if(e.nodeType==8){if(e.data.startsWith(`$s`))n++;else if(e.data.startsWith(`/$s`)&&!--n)return e}t&&t.push(e)}}function te(e){e&&(e.__c&&(e.__c.__g|=4),e.__k&&e.__k.some(te))}function R(e,t,r){for(var i=0;i<r.length;)z(r[i++],r[i++],r[i++]);n.__c&&n.__c(t,e),e.some(function(t){try{e=t.__h,t.__h=[],e.some(function(e){e.call(t)})}catch(e){n.__e(e,t.__v)}})}function ne(e,t,r,i,a,o,s,c,l,u){var d,f,p,h,y,x,S,C,w,T=r.props||m,D=t.props,O=t.type;if(O==`svg`?a=`http://www.w3.org/2000/svg`:O==`math`?a=`http://www.w3.org/1998/Math/MathML`:a||=`http://www.w3.org/1999/xhtml`,o){for(d=0;d<o.length;d++)if((y=o[d])&&(O?y.localName==O:y.nodeType==3)){e=y,o[d]=null;break}}if(!e){if(C=u.ownerDocument||document,!O)return C.createTextNode(D);e=C.createElementNS(a,O,D.is&&D),c&&=(n.__m&&n.__m(t,o),!1),o=null}if(O){if(u=O==`template`&&e.content||e,o=O==`textarea`&&D.defaultValue!=null?null:o&&v.call(u.childNodes),!c&&o)for(T={},d=0;d<e.attributes.length;d++)T[(y=e.attributes[d]).name]=y.value;for(d in T)y=T[d],d==`dangerouslySetInnerHTML`?p=y:d==`children`||d in D||d==`value`&&`defaultValue`in D||d==`checked`&&`defaultChecked`in D||P(e,d,null,y,a);for(d in w=1&r.__u,D)y=D[d],d==`children`?h=y:d==`dangerouslySetInnerHTML`?f=y:d==`value`?x=y:d==`checked`?S=y:c&&typeof y!=`function`||!(T[d]!==y||w&&y!=null)||P(e,d,y,T[d],a);f?(c||p&&(f.__html==p.__html||f.__html==e.innerHTML)||(e.innerHTML=f.__html),t.__k=[]):(p&&(e.textContent=``),(O==`foreignObject`||a==`http://www.w3.org/1998/Math/MathML`&&g.test(O))&&(a=`http://www.w3.org/1999/xhtml`),ee(u,_(h)?h:[h],t,r,i,a,o,s,o?o[0]:r.__k&&E(r,0),c,l),o&&o.some(b)),c&&O!=`textarea`||(d=`value`,O==`progress`&&x==null?e.removeAttribute(d):x==null||x===e[d]&&(O!=`progress`||x)||P(e,d,x,T[d],a),d=`checked`,S!=null&&S!=e[d]&&P(e,d,S,T[d],a))}else T===D||c&&e.data==D||(e.data=D);return e}function z(e,t,r,i){try{typeof e==`function`?t?t.__x=e(t)||1:(i&&=i.__c||i.__e)&&(t=i.__x)&&(i.__x=null,typeof t==`function`?t():e(null)):e.current=t}catch(e){n.__e(e,r)}}function B(e,t,r){var i,a,o,s;if(n.unmount&&n.unmount(e),!(i=e.ref)||i.current&&i.current!=e.__e||z(i,null,t,e),i=e.__c){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(e){n.__e(e,t)}i.__P=i.__n=null}if(i=e.__k)for(s=0;s<i.length;s++)i[s]&&B(i[s],t,typeof e.type!=`function`||r&&!e.props.__P);!r&&(i=e.__c)&&(i=i.__z)&&(a=L(i,o=[]))&&(i==e.__e&&o.some(b),b(a),b(i)),(i=e.__e)&&(r||b(i),i.__e&&(i.__e=null)),e.__e=e.__c=e.__=null}function re(e,t,n){return this.constructor(e,n)}function ie(e,t){var r,i,a,o;n.__&&n.__(e,t),t.nodeType==9&&(t=t.documentElement),i=(r=e&&32&e.__u)?null:t.__k,t.__k=S(w,{children:[e]}),a=[],o=[],I(t,t.__k,i||m,m,t.namespaceURI,i?null:t.firstChild?v.call(t.childNodes):null,a,i?i.__e:t.firstChild,r,o),R(a,t.__k,o),t.__k.props.children=null}n={__e:function(e,t,n,r){for(var i,a,o;t=t.__;)if((i=t.__c)&&!(1&i.__g)){i.__g|=4;try{if((o=(a=i.constructor)&&a.getDerivedStateFromError)&&i.setState(a.getDerivedStateFromError(e)),i.componentDidCatch&&(i.componentDidCatch(e,r||{}),o=1),o&&8&i.__g)return void(i.__g|=2)}catch(t){e=t}}throw s=0,e}},r=0,i=function(e){return e!=null&&e.constructor===p},T.prototype.setState=function(e,t){var n=this.__s;n&&n!=this.state||(n=this.__s=y({},this.state)),typeof e==`function`&&(e=e(y({},n),this.props)),e&&(y(n,e),this.__v&&(t&&this.__k.push(t),O(this)))},T.prototype.forceUpdate=function(e){this.__v&&(this.__g|=4,e&&this.__h.push(e),O(this))},T.prototype.render=w,a=[],s=0,c=function(e,t){return e.__v.__b-t.__v.__b},l=Symbol(),u=/(PointerCapture)$|Capture$/i,d=0,f={};var V,H,U,ae,W=Object.is,G=0,oe=[],K=[],q=n,se=q.__b,ce=q.__r,le=q.diffed,ue=q.__c,de=q.unmount,fe=q.__;function J(e,t){q.__h&&q.__h(H,e,G||t),G=0;var n=H.__H||(H.__H={__:[],__h:[]});return e>=n.__.length&&n.__.push({}),n.__[e]}function pe(e){return G=1,me(Se,e)}function me(e,t,n){var r=J(V++,2);if(r.t=e,!r.__c&&(r.__=[n?n(t):Se(void 0,t),function(e){var t=r.__N?r.__N[0]:r.__[0],n=r.t(t,e);W(t,n)||(r.__N=[n,r.__[1]],r.__c.setState({}))}],r.__c=H,!H.__f)){H.__f=!0;var i=H.shouldComponentUpdate;H.shouldComponentUpdate=function(e,t,n){var r=this.__H;if(!r)return!0;var a=!1,o=this.props!=e;if(r.__.some(function(e){e.__N&&(a=!0,W(e.__[0],e.__N[0])||(o=!0))}),i){var s=i.call(this,e,t,n);return a?s||o:s}return!a||o}}return r.__}function he(e,t){var n=J(V++,4);!q.__s&&xe(n.__H,t)&&(n.__P=!1,n.__=e,n.u=t,H.__h.push(n))}function ge(e,t){var n=J(V++,7);return xe(n.__H,t)&&(n.__=e(),n.__H=t),n.__}function _e(){var e;do{for(;e=K.shift();)try{Y(e)}catch(t){q.__e(t,{__:(e=e.__P)&&e.__v})}for(;e=oe.shift();){var t=e.__H;if(e.__P&&t)try{t.__h.some(Y),t.__h.some(X),t.__h=[]}catch(n){t.__h=[],q.__e(n,e.__v)}}}while(K.length)}q.__b=function(e){H=null,se&&se(e)},q.__=function(e,t){e&&t.__k&&t.__k.__m&&(e.__m=t.__k.__m),fe&&fe(e,t)},q.__r=function(e){ce&&ce(e),V=0;var t=(H=e.__c).__H;t&&(U==H?H.__h=[]:(t.__h.some(Y),t.__h.some(X),V=0),t.__h=[],t.__.some(function(e){e.__N&&(e.__=e.__N),e.u=e.__N=void 0})),U=H},q.diffed=function(e){le&&le(e);var t=e.__c;t&&t.__H&&(t.__H.__h.length&&be(oe.push(t)),t.__H.__.some(function(e){e.u&&(e.__H=e.u)})),U=H=null},q.__c=function(e,t){t.some(function(e){try{e.__h.some(Y),e.__h=e.__h.filter(function(e){return!e.__||X(e)})}catch(t){e.__h=[function(){throw t}]}}),ue&&ue(e,t)},q.unmount=function(e){de&&de(e);var t,n,r=e.__c;r&&r.__H&&(r.__H.__.some(function(r){try{if(r.__P&&r.__c){if(n===void 0){for(n=e.__;n&&(!n.__c||!n.__c.__P);)n=n.__;n&&=n.__c}r.__P=n,be(K.push(r))}else Y(r)}catch(e){t=e}}),r.__H=void 0,t&&q.__e(t,r.__v))};var ve=typeof requestAnimationFrame==`function`;function ye(e){var t,n=function(){clearTimeout(r),ve&&cancelAnimationFrame(t),setTimeout(e)},r=setTimeout(n,35);ve&&(t=requestAnimationFrame(n))}function be(e){e!=1&&ae==q.requestAnimationFrame||((ae=q.requestAnimationFrame)||ye)(_e)}function Y(e){var t=H,n=e.__c;typeof n==`function`&&(e.__c=void 0,n()),H=t}function X(e){var t=H;e.__c=e.__(),H=t}function xe(e,t){return!e||e.length!=t.length||t.some(function(t,n){return!W(t,e[n])})}function Se(e,t){return typeof t==`function`?t(e):t}var Z={INVALID_PDF:`INVALID_PDF`,PDF_PASSWORD_REQUIRED:`PDF_PASSWORD_REQUIRED`,PDF_LOAD_FAILED:`PDF_LOAD_FAILED`,CLIENT_KEY_REQUIRED:`CLIENT_KEY_REQUIRED`,CAMERA_INTERRUPTED:`CAMERA_INTERRUPTED`,CAMERA_NOT_FOUND:`CAMERA_NOT_FOUND`,CAMERA_PERMISSION_DENIED:`CAMERA_PERMISSION_DENIED`,CAMERA_UNAVAILABLE:`CAMERA_UNAVAILABLE`,CAMERA_UNSUPPORTED:`CAMERA_UNSUPPORTED`,CAPTURES_INCOMPLETE:`CAPTURES_INCOMPLETE`,DOCUMENT_BACK_CONTAINS_FACE:`DOCUMENT_BACK_CONTAINS_FACE`,DOCUMENT_BACK_NOT_DISTINCT:`DOCUMENT_BACK_NOT_DISTINCT`,DOCUMENT_BACK_REQUIRED:`DOCUMENT_BACK_REQUIRED`,DOCUMENT_BLURRY:`DOCUMENT_BLURRY`,DOCUMENT_FACE_GEOMETRY_INVALID:`DOCUMENT_FACE_GEOMETRY_INVALID`,DOCUMENT_FACE_NOT_CONTAINED:`DOCUMENT_FACE_NOT_CONTAINED`,DOCUMENT_FACE_NOT_FOUND:`DOCUMENT_FACE_NOT_FOUND`,DOCUMENT_NOT_FOUND:`DOCUMENT_NOT_FOUND`,DOCUMENT_NOT_RECOGNIZED:`DOCUMENT_NOT_RECOGNIZED`,DOCUMENT_TEXT_ALIGNMENT_INVALID:`DOCUMENT_TEXT_ALIGNMENT_INVALID`,DOCUMENT_TEXT_NOT_READABLE:`DOCUMENT_TEXT_NOT_READABLE`,DOCUMENT_VALIDATION_FAILED:`DOCUMENT_VALIDATION_FAILED`,FACEKEY_TOKEN_INVALID:`FACEKEY_TOKEN_INVALID`,FACEGATE_TOKEN_INVALID:`FACEGATE_TOKEN_INVALID`,FACEGATE_ABORTED:`FACEGATE_ABORTED`,FACEGATE_TIMEOUT:`FACEGATE_TIMEOUT`,FACE_NOT_FOUND:`FACE_NOT_FOUND`,FACE_MISMATCH:`FACE_MISMATCH`,FACE_NOT_USABLE:`FACE_NOT_USABLE`,IMAGE_ENCODE_FAILED:`IMAGE_ENCODE_FAILED`,IMAGE_PROCESSING_FAILED:`IMAGE_PROCESSING_FAILED`,INVALID_IMAGE:`INVALID_IMAGE`,INVALID_MODEL_OUTPUT:`INVALID_MODEL_OUTPUT`,INVALID_OPTIONS:`INVALID_OPTIONS`,INVALID_POSES:`INVALID_POSES`,INVALID_CLIENT_KEY:`INVALID_CLIENT_KEY`,INVALID_SERVICE_RESPONSE:`INVALID_SERVICE_RESPONSE`,MODEL_LOAD_FAILED:`MODEL_LOAD_FAILED`,NETWORK_ERROR:`NETWORK_ERROR`,REQUEST_TOO_LARGE:`REQUEST_TOO_LARGE`,NO_USABLE_CANDIDATES:`NO_USABLE_CANDIDATES`,NO_USABLE_REFERENCES:`NO_USABLE_REFERENCES`,POSE_BACKGROUND_MISMATCH:`POSE_BACKGROUND_MISMATCH`,POSE_IDENTITY_MISMATCH:`POSE_IDENTITY_MISMATCH`,SERVICE_UNAVAILABLE:`SERVICE_UNAVAILABLE`,SDK_NOT_READY:`SDK_NOT_READY`,SDK_CAPABILITY_NOT_CONFIGURED:`SDK_CAPABILITY_NOT_CONFIGURED`,UI_ELEMENT_NOT_FOUND:`UI_ELEMENT_NOT_FOUND`,VERIFICATION_CANCELLED:`VERIFICATION_CANCELLED`,VERIFICATION_SAVE_FAILED:`VERIFICATION_SAVE_FAILED`},Ce=new Set(Object.values(Z)),we=e=>typeof e==`string`&&Ce.has(e),Te=({error:e,fallback:t=Z.INVALID_SERVICE_RESPONSE})=>typeof e==`object`&&e&&`code`in e&&we(e.code)?e.code:e instanceof Error&&we(e.message)?e.message:we(e)?e:t,Ee=[`ar`,`ch`,`de`,`en`,`es`,`fr`,`it`,`ja`,`pt`,`ru`,`zh`],Q=new Map,De=new Map,Oe=async({language:e})=>{if(Q.has(e))return;let n=De.get(e);n||(n=fetch(t({filename:`locales/${e}.json`})).then(async e=>{if(!e.ok)throw Error(Z.INVALID_SERVICE_RESPONSE);return await e.json()}),De.set(e,n));try{Q.set(e,await n)}finally{De.delete(e)}},ke=async({language:e})=>{let t=e??Ae();await Promise.all([Oe({language:t}),...t===`en`?[]:[Oe({language:`en`})]])},Ae=()=>{let e=[navigator.language,...navigator.languages];for(let t of e){let e=t.toLowerCase();if(/^zh-(hk|mo|tw)\b/u.test(e))return`ch`;let n=e.split(`-`)[0];if(Ee.includes(n))return n}return`en`},je={[Z.CAMERA_PERMISSION_DENIED]:`cameraPermissionDenied`,[Z.CAMERA_NOT_FOUND]:`cameraNotFound`,[Z.CAMERA_UNAVAILABLE]:`cameraUnavailable`,[Z.CAMERA_UNSUPPORTED]:`cameraUnavailable`,[Z.CAMERA_INTERRUPTED]:`cameraUnavailable`,[Z.NETWORK_ERROR]:`networkError`,[Z.SERVICE_UNAVAILABLE]:`serviceUnavailable`,[Z.MODEL_LOAD_FAILED]:`modelLoadFailed`,[Z.FACE_NOT_FOUND]:`faceNotFound`,[Z.NO_USABLE_CANDIDATES]:`faceNotFound`,[Z.FACE_NOT_USABLE]:`faceNotUsable`,[Z.NO_USABLE_REFERENCES]:`faceNotUsable`,[Z.DOCUMENT_NOT_FOUND]:`frameDocument`,[Z.DOCUMENT_NOT_RECOGNIZED]:`invalidDocument`,[Z.DOCUMENT_TEXT_NOT_READABLE]:`documentNotReadable`,[Z.DOCUMENT_BLURRY]:`documentBlurry`,[Z.DOCUMENT_FACE_NOT_FOUND]:`faceNotVisibleInDocument`,[Z.DOCUMENT_FACE_NOT_CONTAINED]:`documentAlignmentInvalid`,[Z.DOCUMENT_FACE_GEOMETRY_INVALID]:`documentAlignmentInvalid`,[Z.DOCUMENT_TEXT_ALIGNMENT_INVALID]:`documentAlignmentInvalid`,[Z.DOCUMENT_BACK_REQUIRED]:`frameDocumentBack`,[Z.CAPTURES_INCOMPLETE]:`capturesIncomplete`,[Z.DOCUMENT_VALIDATION_FAILED]:`documentValidationFailed`,[Z.INVALID_OPTIONS]:`invalidOptions`,[Z.INVALID_POSES]:`invalidPoses`,[Z.INVALID_SERVICE_RESPONSE]:`invalidServiceResponse`,[Z.POSE_BACKGROUND_MISMATCH]:`poseBackgroundMismatch`,[Z.POSE_IDENTITY_MISMATCH]:`poseIdentityMismatch`,[Z.IMAGE_ENCODE_FAILED]:`imageEncodeFailed`,[Z.IMAGE_PROCESSING_FAILED]:`imageProcessingFailed`,[Z.INVALID_IMAGE]:`invalidImage`,[Z.INVALID_PDF]:`invalidPdf`,[Z.PDF_PASSWORD_REQUIRED]:`pdfPasswordRequired`,[Z.PDF_LOAD_FAILED]:`pdfLoadFailed`,[Z.CLIENT_KEY_REQUIRED]:`clientKeyRequired`,[Z.VERIFICATION_SAVE_FAILED]:`verificationSaveFailed`},Me=({language:e})=>{let t=e??Ae(),n=e=>{let n=Q.get(t),r=Q.get(`en`);return n?.[e]??r?.[e]??e};return{translate:n,translateError:({error:e})=>{let t=je[Te({error:e})]??`verificationFailed`;return n(t)}}},Ne=async({milliseconds:e})=>{let t=Promise.withResolvers();setTimeout(()=>t.resolve(),e),await t.promise},$=new WeakMap,Pe=async({video:e,signal:t})=>{t?.throwIfAborted();let n=Promise.withResolvers(),r=e,i=$.get(e)??new Set,a=null,o=null,s=!1,c=c=>{s||(s=!0,a!==null&&r.cancelVideoFrameCallback?.(a),o!==null&&cancelAnimationFrame(o),t?.removeEventListener(`abort`,u),i.delete(l),i.size||$.delete(e),c?n.reject(c):n.resolve())},l=()=>c(new DOMException(Z.VERIFICATION_CANCELLED,`AbortError`)),u=()=>c(new DOMException(Z.VERIFICATION_CANCELLED,`AbortError`));i.add(l),$.set(e,i),t?.addEventListener(`abort`,u,{once:!0}),r.requestVideoFrameCallback?a=r.requestVideoFrameCallback(()=>c()):o=requestAnimationFrame(()=>c()),await n.promise},Fe=()=>{let e=/Android|iPhone|iPad|iPod|Mobile/i.test(navigator.userAgent),t=navigator.platform===`MacIntel`&&navigator.maxTouchPoints>1;return e||t},Ie=async()=>{let e=[],t=(t,n)=>{n||e.push(t)};if(t(`navigator.mediaDevices.getUserMedia`,typeof navigator.mediaDevices==`object`&&typeof navigator.mediaDevices.getUserMedia==`function`),t(`navigator.mediaDevices.enumerateDevices`,typeof navigator.mediaDevices==`object`&&typeof navigator.mediaDevices.enumerateDevices==`function`),t(`MediaStream`,typeof MediaStream<`u`),t(`MediaStreamTrack`,typeof MediaStreamTrack<`u`),t(`HTMLVideoElement`,typeof HTMLVideoElement<`u`),t(`createImageBitmap`,typeof createImageBitmap==`function`),t(`OffscreenCanvas`,typeof OffscreenCanvas<`u`),t(`OffscreenCanvas.getContext`,typeof OffscreenCanvas<`u`&&typeof OffscreenCanvas.prototype.getContext==`function`),t(`OffscreenCanvas.convertToBlob`,typeof OffscreenCanvas<`u`&&typeof OffscreenCanvas.prototype.convertToBlob==`function`),t(`WebAssembly`,typeof WebAssembly<`u`),t(`fetch`,typeof fetch==`function`),t(`Blob`,typeof Blob<`u`),t(`File`,typeof File<`u`),t(`URL.createObjectURL`,typeof URL.createObjectURL==`function`),t(`URL.revokeObjectURL`,typeof URL.revokeObjectURL==`function`),!e.includes(`OffscreenCanvas`)&&!e.includes(`OffscreenCanvas.getContext`)&&!e.includes(`OffscreenCanvas.convertToBlob`))try{let e=new OffscreenCanvas(1,1),n=e.getContext(`2d`);if(t(`OffscreenCanvas 2D context`,n!==null),n&&typeof createImageBitmap==`function`){let n=await e.convertToBlob({type:`image/jpeg`});t(`JPEG encoding`,n.type===`image/jpeg`),n.type===`image/jpeg`&&((await createImageBitmap(n)).close(),t(`JPEG decoding`,!0))}else t(`JPEG encoding`,!1),t(`JPEG decoding`,!1)}catch{e.includes(`JPEG encoding`)||t(`JPEG encoding`,!1),t(`JPEG decoding`,!1)}else t(`JPEG encoding`,!1),t(`JPEG decoding`,!1);return{supported:e.length===0,unsupportedFeatures:e}},Le=({video:e})=>{for(let t of $.get(e)??[])t();let t=e.srcObject;if(t instanceof MediaStream)for(let e of t.getTracks())e.stop();e.srcObject=null},Re=async({facingMode:e,video:t,signal:n})=>{if(!navigator.mediaDevices||typeof navigator.mediaDevices.getUserMedia!=`function`)throw Error(Z.CAMERA_UNSUPPORTED);let r={facingMode:{ideal:e}};Fe()||(r.width={ideal:1280},r.height={ideal:720});let i=()=>Le({video:t});n?.addEventListener(`abort`,i,{once:!0});try{let i=await navigator.mediaDevices.getUserMedia({video:r,audio:!1});if(n?.aborted){for(let e of i.getTracks())e.stop();n.throwIfAborted()}t.srcObject=i;let a=(await navigator.mediaDevices.enumerateDevices()).filter(({kind:e})=>e===`videoinput`).length>1?e:`user`;return await t.play(),n?.throwIfAborted(),a}catch(e){if(Le({video:t}),n?.aborted)throw new DOMException(Z.VERIFICATION_CANCELLED,`AbortError`);let r=e instanceof Error?e.name:``,i=Z.CAMERA_UNAVAILABLE;throw(r===`NotAllowedError`||r===`SecurityError`)&&(i=Z.CAMERA_PERMISSION_DENIED),r===`NotFoundError`&&(i=Z.CAMERA_NOT_FOUND),r===`AbortError`&&(i=Z.CAMERA_INTERRUPTED),Error(i,{cause:e})}finally{n?.removeEventListener(`abort`,i)}},ze=({element:e})=>{let t=e.getContext(`2d`);if(!t)throw Error(Z.IMAGE_PROCESSING_FAILED);t.clearRect(0,0,e.width,e.height)},Be=async({canvas:e,quality:t})=>{try{let n=await e.convertToBlob({type:`image/jpeg`,quality:t});if(n.type!==`image/jpeg`)throw Error(Z.IMAGE_ENCODE_FAILED);return n}catch(e){throw Error(Z.IMAGE_ENCODE_FAILED,{cause:e})}},Ve=async({frame:e})=>{let t=new OffscreenCanvas(e.width,e.height),n=t.getContext(`2d`);if(!n)throw Error(Z.IMAGE_PROCESSING_FAILED);return n.drawImage(e,0,0),await Be({canvas:t})},He=async({blob:e})=>{let t;try{t=await createImageBitmap(e)}catch(e){throw Error(Z.INVALID_IMAGE,{cause:e})}try{let e=Math.min(1,900/Math.max(t.width,t.height)),n=new OffscreenCanvas(Math.max(1,Math.round(t.width*e)),Math.max(1,Math.round(t.height*e))),r=n.getContext(`2d`);if(!r)throw Error(Z.IMAGE_PROCESSING_FAILED);return r.drawImage(t,0,0,n.width,n.height),await Be({canvas:n,quality:.85})}finally{t.close()}},Ue=async({frame:e})=>{let t=Math.min(1,960/Math.max(e.width,e.height)),n=Math.max(1,Math.round(e.width*t)),r=Math.max(1,Math.round(e.height*t));return await createImageBitmap(e,{resizeWidth:n,resizeHeight:r})},We=async({image:e})=>{let t=new Uint8Array(await e.arrayBuffer()),n=``;for(let e=0;e<t.length;e+=32768)n+=String.fromCharCode(...t.subarray(e,e+32768));return`data:image/jpeg;base64,${btoa(n)}`};export{n as C,t as D,e as E,x as S,T,pe as _,We as a,ie as b,Ue as c,Ae as d,ke as f,he as g,Te as h,Ve as i,Pe as l,Z as m,ze as n,Re as o,Ne as p,He as r,Le as s,Ie as t,Me as u,ge as v,i as w,w as x,C as y};
|