@smileid/usesmileid 12.3.1-SNAPSHOT.49 → 12.3.1-SNAPSHOT.50

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.
@@ -7,8 +7,10 @@ interface ClosableAnalyzer {
7
7
  configure(config: never): Promise<void>;
8
8
  close(): Promise<void>;
9
9
  }
10
- /** Claims and configures the native analyzer; returns the generation token for {@link releaseAnalyzer}. */
11
- export declare function claimAnalyzer(configure: () => Promise<void>): number;
10
+ /** Claims and configures the native analyzer; `onError` hears a failed configure while this claim still owns it. */
11
+ export declare function claimAnalyzer(configure: () => Promise<void>, onError?: (error: unknown) => void): number;
12
+ /** Whether a native configure failed because the build carries no analyzer under the requested key. */
13
+ export declare function isMissingAnalyzerError(error: unknown): boolean;
12
14
  /** Closes the native analyzer only while `token` still owns it; a newer claim owns the session now. */
13
15
  export declare function releaseAnalyzer(token: number, analyzer: Pick<ClosableAnalyzer, "close">): void;
14
16
  /** Test seam: waits for every queued lifecycle call to settle. */
@@ -1 +1 @@
1
- "use strict";let n=Promise.resolve(),t=0;function c(e){n=n.then(e,e).catch(()=>{})}export function claimAnalyzer(e){const r=++t;return c(e),r}export function releaseAnalyzer(e,r){e===t&&(t++,c(()=>r.close()))}export async function flushAnalyzerLifecycleForTest(){await n}export async function resetAnalyzerLifecycleForTest(){t=0,await n,n=Promise.resolve()}
1
+ "use strict";let n=Promise.resolve(),r=0;function o(e){n=n.then(e,e).catch(()=>{})}export function claimAnalyzer(e,t){const i=++r;return o(()=>e().catch(a=>{i===r&&t?.(a)})),i}export function isMissingAnalyzerError(e){return e instanceof Error&&/No (\w+ )?analyzer\b[^.]*\bkey\b/i.test(e.message)}export function releaseAnalyzer(e,t){e===r&&(r++,o(()=>t.close()))}export async function flushAnalyzerLifecycleForTest(){await n}export async function resetAnalyzerLifecycleForTest(){r=0,await n,n=Promise.resolve()}
@@ -1 +1 @@
1
- "use strict";import{jsx as D}from"react/jsx-runtime";import{useEffect as j,useState as g}from"react";import{StyleSheet as J,View as Q}from"react-native";import{CaptureReadyEventKind as I,DeviceIntegrityProvider as W,DocumentSide as l,ImageType as A}from"@smileid/usesmileid_bridge";import{CameraLens as $}from"../../../camera/camera_lens";import{KameraConfigFactory as q}from"../../../camera/kamera_config_factory";import{CaptureType as s}from"../../../core/models/ml_config";import{defaultFrameAspectRatio as X,documentFrameOrientation as Y}from"../../../core/models/document_type";import{SmileExifTagger as B}from"@smileid/usesmileid_bridge/exif/smile_exif_tagger";import{resolveDeviceModel as Z}from"../../../metadata/use_smile_id_metadata_factory";import{claimAnalyzer as P,releaseAnalyzer as N}from"./helpers/analyzer_lifecycle";import{resolveFaceSessionConfig as M}from"./helpers/face_session_config";import{useCaptureOrientationLock as ee}from"../../screen/helpers/use_capture_orientation_lock";import{localizedDocumentName as te}from"../../screen/helpers/instructions_screen_helpers";import{resolveJpegQuality as oe}from"../../../data/model/sdk_config_capture";import{AttributionResolver as re,flowShowAttribution as T}from"../config/attribution_resolver";import{UseSmileIDCaptureScreen as ne}from"../../screen/use_smile_id_capture_screen";import{cameraExceptionFromKameraError as ie}from"../../../camera/kamera_error_mapping";import{defaultLightTheme as se}from"../../theme/theme";import{UseSmileIDDocumentBackInstructions as ce}from"../../screen/use_smile_id_document_back_instructions";import{UseSmileIDInstructionsScreen as ue}from"../../screen/use_smile_id_instructions_screen";import{DOCUMENT_HERO_VISA_ANIMATION as le,documentGuidelines as me}from"../model/instructions_defaults";import{useUseSmileIDLocalizations as de}from"../../../l10n/use_smile_id_localizations_provider";import{useFlowNavigation as ae}from"../flow_navigation_context";import{UseSmileIDOrchestratedScreenHost as fe}from"./use_smile_id_orchestrated_screen_host";export function OrchestratedCaptureScreen({configuration:n}){const i=ae(),C=de(),t=n.captureType,d=n.documentConfig,a=d?.documentType,k=i.supportingDocumentSide(),S=k!==void 0,v=d?.allowSkipBack??!1,E=i.documentPreviewFollowsCapture(),O=i.captured.frontDocumentPath!==void 0,[r,b]=g(S&&O&&k!==void 0?k:l.Front),[z,h]=g(S&&O),L=i.configuration.config?.exitOrientations,x=t===s.document&&!z?Y(a,d?.resolvedAspectRatio):"Portrait",V=ee(x,{...L!==void 0?{exitLock:L}:{}}),c=t===s.selfie?i.configuration.ml?.analyzers.selfie:i.configuration.ml?.analyzers.document;return j(()=>{if(!c)return;let e=0;if(t===s.selfie&&c.kind==="face"){const f=i.configuration.ml?.analyzers.selfieConfig??{analyzerFactoryKey:c.key};e=P(()=>c.configure(M(f,n.selfieConfig?.enableEnhancedLiveness??!1,i.resolvedSdkConfig)))}else if(t===s.document&&c.kind==="document"){const f=oe(i.resolvedSdkConfig?.document),u=q.create(s.document,$.back).analysis,w=n.documentConfig?.documentType?.kind,o=n.documentConfig?.resolvedAspectRatio,p=o!==void 0&&Number.isFinite(o)&&o>0?o:void 0;e=P(()=>c.configure({documentSide:r,...f!==void 0?{documentJpegQuality:f}:{},...w!==void 0?{documentKind:w}:{},...p!==void 0?{knownAspectRatio:p}:{},sessionFrameWidth:u.targetWidth,sessionFrameHeight:u.targetHeight}))}return()=>{N(e,c)}},[c,t,i,n,r]),D(fe,{content:({navigationManager:e,onBack:f,onNavigateNext:u})=>{if(!c)throw new Error(`OrchestratedCaptureScreen: no ${t} analyzer registered in the ML DSL`);if(t===s.document&&S&&z){const o=()=>{if(E){f();return}h(!1),b(l.Front)};return r===l.Visa?D(ue,{titlePrefix:C.siInstructionsTitlePrefix,titleEmphasis:C.siInstructionsEmphasisVisa,heroSource:le,guidelinesSectionTitle:C.siInstructionsCaptureGuidelines,guidelines:me(a),showAttribution:T(e.configuration),showHeroOval:!1,showHeroOvalProgress:!1,showCardBackground:!0,onContinue:()=>h(!1),onBack:o}):D(ce,{documentTypeDisplayName:a?te(a,C):"",allowSkip:v,showAttribution:T(e.configuration),onCaptureBack:()=>h(!1),onSkip:()=>{e.skipDocumentBack(),u()},onBack:o})}const w=e.configuration.theme?.light??se;return V?D(ne,{captureType:t,analyzer:c,onAnalyticsEvent:o=>e.logAnalyticsEvent(o),theme:w,enableEnhancedLiveness:n.selfieConfig?.enableEnhancedLiveness??!1,allowAgentMode:n.selfieConfig?.allowAgentMode??!1,showAttribution:re.resolveForCapture({captureType:t,showAttribution:T(e.configuration)}),...t===s.document&&d?{knownIdAspectRatio:d.resolvedAspectRatio??X(a?.orientation??"Landscape"),captureMode:d.captureMode,allowGalleryUpload:d.allowGalleryUpload,documentSide:r,...a?.kind?{documentTypeKind:a.kind}:{},onDocumentOrigin:o=>e.recordDocumentImageOrigin(r,o),onClose:()=>e.exit()}:{},...n.startButton!==void 0?{startButton:n.startButton}:{},onBack:()=>{if(t===s.document&&S&&r!==l.Front){h(!0);return}f()},onCameraError:(o,p)=>{e.exit({kind:"failed",error:ie(o,p)})},onCaptureComplete:(o,p,K,_)=>{const F=K??0,y=pe(o,t);if(!y)return;const H=e.partnerId,G=t===s.selfie?A.Selfie:r===l.Visa?A.DocumentVisa:r===l.Back?A.DocumentBack:A.DocumentFront,R=o.filter(m=>m.kind===I.Liveness).map(m=>m.url),U=Z();W.signals().then(({fingerprint:m})=>B.setContext({partnerId:H,...U?{deviceModel:U}:{},...m?{fingerprint:m}:{}})).then(async()=>{await B.finalize(y,G),await Promise.all(R.map(m=>B.finalize(m,A.Liveness)))}).catch(()=>{}).finally(async()=>{if(t===s.selfie){e.setCapturedSelfie(y,R),e.recordSelfieCaptureGeometry(_),e.recordSelfieCaptureTelemetry(p),u();return}if(e.recordDocumentCaptureTelemetry(r,p),S&&k!==void 0&&r===l.Front){e.setCapturedFrontDocument(y,F),E?u():(b(k),h(!0));return}if(r===l.Visa){e.setCapturedVisaDocument(y,F),u();return}if(S&&r===l.Back){e.setCapturedBackDocument(y,F),u();return}e.setCapturedFrontDocument(y,F),u()})}},t===s.document?`document-capture-${r}`:"capture"):D(Q,{style:[J.absoluteFill,{backgroundColor:w.colors.offBlack}],testID:"si_capture_orientation_pending"})}})}function pe(n,i){const C=i===s.selfie?I.Selfie:I.Document;return n.find(t=>t.kind===C)?.url}
1
+ "use strict";import{jsx as D}from"react/jsx-runtime";import{useEffect as j,useState as U}from"react";import{StyleSheet as J,View as Q}from"react-native";import{AnalyzerNotFoundException as W,CaptureReadyEventKind as T,DeviceIntegrityProvider as $,DocumentSide as m,ImageType as A}from"@smileid/usesmileid_bridge";import{CameraLens as q}from"../../../camera/camera_lens";import{KameraConfigFactory as X}from"../../../camera/kamera_config_factory";import{CaptureType as s}from"../../../core/models/ml_config";import{defaultFrameAspectRatio as Y,documentFrameOrientation as Z}from"../../../core/models/document_type";import{SmileExifTagger as B}from"@smileid/usesmileid_bridge/exif/smile_exif_tagger";import{resolveDeviceModel as N}from"../../../metadata/use_smile_id_metadata_factory";import{claimAnalyzer as P,isMissingAnalyzerError as M,releaseAnalyzer as ee}from"./helpers/analyzer_lifecycle";import{resolveFaceSessionConfig as te}from"./helpers/face_session_config";import{useCaptureOrientationLock as oe}from"../../screen/helpers/use_capture_orientation_lock";import{localizedDocumentName as re}from"../../screen/helpers/instructions_screen_helpers";import{resolveJpegQuality as ne}from"../../../data/model/sdk_config_capture";import{AttributionResolver as ie,flowShowAttribution as E}from"../config/attribution_resolver";import{UseSmileIDCaptureScreen as se}from"../../screen/use_smile_id_capture_screen";import{cameraExceptionFromKameraError as ce}from"../../../camera/kamera_error_mapping";import{defaultLightTheme as ue}from"../../theme/theme";import{UseSmileIDDocumentBackInstructions as le}from"../../screen/use_smile_id_document_back_instructions";import{UseSmileIDInstructionsScreen as me}from"../../screen/use_smile_id_instructions_screen";import{DOCUMENT_HERO_VISA_ANIMATION as ae,documentGuidelines as de}from"../model/instructions_defaults";import{useUseSmileIDLocalizations as fe}from"../../../l10n/use_smile_id_localizations_provider";import{useFlowNavigation as pe}from"../flow_navigation_context";import{UseSmileIDOrchestratedScreenHost as ye}from"./use_smile_id_orchestrated_screen_host";export function OrchestratedCaptureScreen({configuration:c}){const n=pe(),y=fe(),t=c.captureType,d=c.documentConfig,f=d?.documentType,S=n.supportingDocumentSide(),C=S!==void 0,v=d?.allowSkipBack??!1,z=n.documentPreviewFollowsCapture(),O=n.captured.frontDocumentPath!==void 0,[i,b]=U(C&&O&&S!==void 0?S:m.Front),[L,h]=U(C&&O),g=n.configuration.config?.exitOrientations,V=t===s.document&&!L?Z(f,d?.resolvedAspectRatio):"Portrait",K=oe(V,{...g!==void 0?{exitLock:g}:{}}),u=t===s.selfie?n.configuration.ml?.analyzers.selfie:n.configuration.ml?.analyzers.document;return j(()=>{if(!u)return;const e=o=>{M(o)&&n.exit({kind:"failed",error:new W({captureType:t===s.selfie?"face":"document",cause:o})})};let k=0;if(t===s.selfie&&u.kind==="face"){const o=n.configuration.ml?.analyzers.selfieConfig??{analyzerFactoryKey:u.key};k=P(()=>u.configure(te(o,c.selfieConfig?.enableEnhancedLiveness??!1,n.resolvedSdkConfig)),e)}else if(t===s.document&&u.kind==="document"){const o=ne(n.resolvedSdkConfig?.document),w=X.create(s.document,q.back).analysis,r=c.documentConfig?.documentType?.kind,l=c.documentConfig?.resolvedAspectRatio,F=l!==void 0&&Number.isFinite(l)&&l>0?l:void 0;k=P(()=>u.configure({documentSide:i,...o!==void 0?{documentJpegQuality:o}:{},...r!==void 0?{documentKind:r}:{},...F!==void 0?{knownAspectRatio:F}:{},sessionFrameWidth:w.targetWidth,sessionFrameHeight:w.targetHeight}),e)}return()=>{ee(k,u)}},[u,t,n,c,i]),D(ye,{content:({navigationManager:e,onBack:k,onNavigateNext:o})=>{if(!u)throw new Error(`OrchestratedCaptureScreen: no ${t} analyzer registered in the ML DSL`);if(t===s.document&&C&&L){const r=()=>{if(z){k();return}h(!1),b(m.Front)};return i===m.Visa?D(me,{titlePrefix:y.siInstructionsTitlePrefix,titleEmphasis:y.siInstructionsEmphasisVisa,heroSource:ae,guidelinesSectionTitle:y.siInstructionsCaptureGuidelines,guidelines:de(f),showAttribution:E(e.configuration),showHeroOval:!1,showHeroOvalProgress:!1,showCardBackground:!0,onContinue:()=>h(!1),onBack:r}):D(le,{documentTypeDisplayName:f?re(f,y):"",allowSkip:v,showAttribution:E(e.configuration),onCaptureBack:()=>h(!1),onSkip:()=>{e.skipDocumentBack(),o()},onBack:r})}const w=e.configuration.theme?.light??ue;return K?D(se,{captureType:t,analyzer:u,onAnalyticsEvent:r=>e.logAnalyticsEvent(r),theme:w,enableEnhancedLiveness:c.selfieConfig?.enableEnhancedLiveness??!1,allowAgentMode:c.selfieConfig?.allowAgentMode??!1,showAttribution:ie.resolveForCapture({captureType:t,showAttribution:E(e.configuration)}),...t===s.document&&d?{knownIdAspectRatio:d.resolvedAspectRatio??Y(f?.orientation??"Landscape"),captureMode:d.captureMode,allowGalleryUpload:d.allowGalleryUpload,documentSide:i,...f?.kind?{documentTypeKind:f.kind}:{},onDocumentOrigin:r=>e.recordDocumentImageOrigin(i,r),onClose:()=>e.exit()}:{},...c.startButton!==void 0?{startButton:c.startButton}:{},onBack:()=>{if(t===s.document&&C&&i!==m.Front){h(!0);return}k()},onCameraError:(r,l)=>{e.exit({kind:"failed",error:ce(r,l)})},onCaptureComplete:(r,l,F,_)=>{const I=F??0,p=Ce(r,t);if(!p)return;const H=e.partnerId,G=t===s.selfie?A.Selfie:i===m.Visa?A.DocumentVisa:i===m.Back?A.DocumentBack:A.DocumentFront,x=r.filter(a=>a.kind===T.Liveness).map(a=>a.url),R=N();$.signals().then(({fingerprint:a})=>B.setContext({partnerId:H,...R?{deviceModel:R}:{},...a?{fingerprint:a}:{}})).then(async()=>{await B.finalize(p,G),await Promise.all(x.map(a=>B.finalize(a,A.Liveness)))}).catch(()=>{}).finally(async()=>{if(t===s.selfie){e.setCapturedSelfie(p,x),e.recordSelfieCaptureGeometry(_),e.recordSelfieCaptureTelemetry(l),o();return}if(e.recordDocumentCaptureTelemetry(i,l),C&&S!==void 0&&i===m.Front){e.setCapturedFrontDocument(p,I),z?o():(b(S),h(!0));return}if(i===m.Visa){e.setCapturedVisaDocument(p,I),o();return}if(C&&i===m.Back){e.setCapturedBackDocument(p,I),o();return}e.setCapturedFrontDocument(p,I),o()})}},t===s.document?`document-capture-${i}`:"capture"):D(Q,{style:[J.absoluteFill,{backgroundColor:w.colors.offBlack}],testID:"si_capture_orientation_pending"})}})}function Ce(c,n){const y=n===s.selfie?T.Selfie:T.Document;return c.find(t=>t.kind===y)?.url}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smileid/usesmileid",
3
- "version": "12.3.1-SNAPSHOT.49",
3
+ "version": "12.3.1-SNAPSHOT.50",
4
4
  "description": "Official Smile ID React Native (Expo) SDK for identity verification: selfie capture, liveness checks, and document verification powered by on-device ML.",
5
5
  "homepage": "https://usesmileid.com",
6
6
  "repository": {
@@ -52,8 +52,8 @@
52
52
  "@smileid/njia": "0.0.1-SNAPSHOT.3",
53
53
  "axios": "^1.20.0",
54
54
  "zod": "^4.6.5",
55
- "@smileid/usesmileid_bridge": "12.3.1-SNAPSHOT.49",
56
- "@smileid/usesmileid_platform_interface": "12.3.1-SNAPSHOT.49"
55
+ "@smileid/usesmileid_bridge": "12.3.1-SNAPSHOT.50",
56
+ "@smileid/usesmileid_platform_interface": "12.3.1-SNAPSHOT.50"
57
57
  },
58
58
  "peerDependencies": {
59
59
  "@react-native-async-storage/async-storage": ">=1.21.0",