@neofaceid/web-sdk 1.26.1 → 1.28.0

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/index.d.ts CHANGED
@@ -33,6 +33,8 @@ export declare interface AuthorizationOptions {
33
33
  onProgress?: (step: number, totalSteps: number, instruction: string) => void;
34
34
  onPhotoTaken?: (photoNumber: number, blob: Blob) => void;
35
35
  captureDelay?: number;
36
+ /** Nome do integrador exibido no topo do modal de consentimento (US14.2). */
37
+ appName?: string;
36
38
  }
37
39
 
38
40
  export declare interface AuthorizationResult {
@@ -141,6 +143,11 @@ export declare function biometricLogin(applicationToken: string, mode?: 'face' |
141
143
 
142
144
  export declare interface BiometricLoginOptions {
143
145
  applicationToken: string;
146
+ /**
147
+ * Nome do integrador exibido no topo do modal de consentimento (US14.2).
148
+ * Ausência gera console.warn e cai para o fallback "sua aplicação".
149
+ */
150
+ appName?: string;
144
151
  onSuccess: (result: BiometricLoginResult) => void;
145
152
  onError: (error: NeoFaceError) => void;
146
153
  onCancel?: () => void;
@@ -258,6 +265,19 @@ export declare interface CaptureFaceFramesOptions {
258
265
  livenessCheck: boolean;
259
266
  }
260
267
 
268
+ export declare type CapturePurpose = 'login' | 'onboarding' | 'authorization' | 'identification' | 'liveness';
269
+
270
+ export declare interface CaptureSession {
271
+ session_id: string;
272
+ expires_at: string;
273
+ }
274
+
275
+ export declare interface ChallengeGesture {
276
+ index: number;
277
+ gesture_key: GestureKey | string;
278
+ instruction_i18n?: Record<string, string>;
279
+ }
280
+
261
281
  /**
262
282
  * Check if a user exists by email or CPF
263
283
  * @param params Object with email or cpf to check (only one at a time)
@@ -337,16 +357,15 @@ export declare function confirmPasswordReset(token: string, new_password: string
337
357
  message: string;
338
358
  }>;
339
359
 
360
+ declare type ConsentFlow = 'verification' | 'registration';
361
+
340
362
  export declare interface ConsentInfo {
341
- purpose: string;
342
- legalBasis: string;
343
- privacyPolicyUrl: string;
344
- retentionDays: number;
363
+ appName?: string;
364
+ flow?: ConsentFlow;
365
+ privacyPolicyUrl?: string;
366
+ retentionDays?: number;
345
367
  }
346
368
 
347
- /**
348
- * Gerencia o ciclo de vida (montagem/desmontagem) do modal de consentimento.
349
- */
350
369
  export declare class ConsentModal {
351
370
  private container;
352
371
  private root;
@@ -354,21 +373,18 @@ export declare class ConsentModal {
354
373
  close(): void;
355
374
  }
356
375
 
357
- /**
358
- * Props do modal de consentimento LGPD exibido antes de qualquer captura de câmera.
359
- */
360
376
  export declare interface ConsentModalProps {
361
- purpose: string;
362
- legalBasis: string;
363
- privacyPolicyUrl: string;
364
- retentionDays: number;
377
+ appName: string;
378
+ flow: ConsentFlow;
379
+ privacyPolicyUrl?: string;
380
+ retentionDays?: number;
365
381
  onAccept: () => void;
366
382
  onDecline: () => void;
367
383
  }
368
384
 
369
385
  /**
370
- * Defaults conservadores usados enquanto `SDKInitOptions` não expõe `consent` (US7.2).
371
- * Quando essa opção existir, este helper passa a ler `getConfig().consent`.
386
+ * Compatibilidade com callers antigos que passavam `{ purpose, legalBasis }`.
387
+ * Deprecated — remover quando US14.4 unificar tokens.
372
388
  */
373
389
  export declare const DEFAULT_CONSENT_INFO: ConsentInfo;
374
390
 
@@ -431,6 +447,9 @@ export declare interface DocumentCaptureOptions {
431
447
  useBackCamera?: boolean;
432
448
  onCancel?: () => void;
433
449
  preSelectedDocument?: DocumentType_2;
450
+ /** Nome do integrador exibido no topo do modal de consentimento (US14.2). */
451
+ appName?: string;
452
+ /* Excluded from this release type: skipConsent */
434
453
  }
435
454
 
436
455
  export declare interface DocumentCaptureResult {
@@ -557,6 +576,14 @@ export declare class ForgotPasswordModal {
557
576
  private addStyles;
558
577
  }
559
578
 
579
+ export declare type GestureKey = 'turn_left' | 'turn_right' | 'turn_up' | 'turn_down' | 'blink' | 'smile' | 'open_mouth';
580
+
581
+ export declare interface GestureResponse {
582
+ gesture_key: string;
583
+ /** Frames capturados como data URL ou base64. SDK só empacota — servidor valida. */
584
+ images: string[];
585
+ }
586
+
560
587
  /**
561
588
  * Retorna o token de aplicação configurado, se houver.
562
589
  */
@@ -568,6 +595,8 @@ export declare function getApplicationToken(): string | null;
568
595
  */
569
596
  export declare function getBaseUrl(): string;
570
597
 
598
+ export declare function getCachedCaptureSession(): CaptureSession | null;
599
+
571
600
  /**
572
601
  * Retorna toda a configuração atual (para debug).
573
602
  */
@@ -656,6 +685,19 @@ export declare function isAdvancedDetectionAvailable(): boolean;
656
685
  */
657
686
  export declare function isInitialized(): boolean;
658
687
 
688
+ export declare interface LivenessChallenge {
689
+ challenge_id: string;
690
+ gestures: ChallengeGesture[];
691
+ expires_at?: string;
692
+ }
693
+
694
+ export declare interface LivenessChallengeResult {
695
+ success: boolean;
696
+ liveness_passed?: boolean;
697
+ score?: number;
698
+ raw: unknown;
699
+ }
700
+
659
701
  /**
660
702
  * Options for login recognition
661
703
  */
@@ -942,6 +984,19 @@ export declare interface OnboardingPersonData {
942
984
  email?: string;
943
985
  }
944
986
 
987
+ /**
988
+ * Abre uma sessão de captura no servidor. Server-decides: o `session_id`
989
+ * vem do backend, nunca é inventado no cliente.
990
+ *
991
+ * @throws NeoFaceError em 4xx/5xx ou payload inválido.
992
+ */
993
+ export declare function openCaptureSession({ applicationToken, purpose, }: OpenCaptureSessionParams): Promise<CaptureSession>;
994
+
995
+ export declare interface OpenCaptureSessionParams {
996
+ applicationToken: string;
997
+ purpose: CapturePurpose;
998
+ }
999
+
945
1000
  export declare type OverlayStatus = 'preparing' | 'detecting' | 'waiting-for-face' | 'capturing' | 'verifying' | 'success' | 'error';
946
1001
 
947
1002
  /**
@@ -1174,11 +1229,39 @@ export declare const registerPersonWithoutFace: (personData: {
1174
1229
  */
1175
1230
  export declare const RELEASE_DATE = "2026-09-01";
1176
1231
 
1232
+ declare interface RequestChallengeWithSessionParams {
1233
+ applicationToken: string;
1234
+ purpose: CapturePurpose;
1235
+ sessionId?: string;
1236
+ }
1237
+
1177
1238
  /**
1178
1239
  * Exibe o modal de consentimento e resolve `true` se o titular aceitou,
1179
1240
  * `false` se recusou. Deve ser chamado antes de qualquer `getUserMedia()`.
1241
+ *
1242
+ * `appName` é obrigatório na prática — omitir gera console.warn e fallback.
1243
+ * `flow` decide a copy da terceira linha: 'verification' (padrão) descarta a
1244
+ * imagem; 'registration' informa que o vetor biométrico é armazenado.
1180
1245
  */
1181
- export declare function requestConsent(info?: Partial<ConsentInfo>): Promise<boolean>;
1246
+ export declare function requestConsent(info?: ConsentInfo): Promise<boolean>;
1247
+
1248
+ /**
1249
+ * Pede ao servidor a sequência de gestos do desafio de liveness.
1250
+ * O SDK apenas exibe e coleta — validação de gesto/yaw/pitch é responsabilidade
1251
+ * exclusiva do servidor (regra "client collects, server decides").
1252
+ */
1253
+ export declare function requestLivenessChallenge({ sessionId, applicationToken, }: RequestLivenessChallengeParams): Promise<LivenessChallenge>;
1254
+
1255
+ export declare interface RequestLivenessChallengeParams {
1256
+ sessionId: string;
1257
+ applicationToken: string;
1258
+ }
1259
+
1260
+ /**
1261
+ * Garante uma sessão válida e retorna o desafio.
1262
+ * Em 410 (sessão expirada), reabre 1x e reenvia. Segunda falha propaga.
1263
+ */
1264
+ export declare function requestLivenessChallengeWithSession({ applicationToken, purpose, sessionId, }: RequestChallengeWithSessionParams): Promise<LivenessChallenge>;
1182
1265
 
1183
1266
  /**
1184
1267
  * Request a password reset for a user account
@@ -1189,6 +1272,33 @@ export declare function requestPasswordReset(email: string, applicationToken: st
1189
1272
  message: string;
1190
1273
  }>;
1191
1274
 
1275
+ export declare function resetCaptureSession(): void;
1276
+
1277
+ /**
1278
+ * Orquestra o fluxo completo:
1279
+ * 1. Abre `capture/session`
1280
+ * 2. Pede `liveness/challenge` (sequência sorteada pelo servidor)
1281
+ * 3. Delega a coleta de frames ao consumidor gesto a gesto
1282
+ * 4. Submete a resposta para o servidor validar
1283
+ *
1284
+ * Retry: em 410 no submit, reabre a sessão + refaz o desafio + reenvia UMA vez.
1285
+ * Segunda falha propaga.
1286
+ */
1287
+ export declare function runLivenessChallenge({ applicationToken, purpose, collectFramesForGesture, retryOnSessionExpired, }: RunLivenessChallengeParams): Promise<LivenessChallengeResult>;
1288
+
1289
+ export declare interface RunLivenessChallengeParams {
1290
+ applicationToken: string;
1291
+ purpose: CapturePurpose;
1292
+ /**
1293
+ * Callback fornecido pelo consumidor: para cada gesto na sequência sorteada
1294
+ * pelo servidor, retorna os frames coletados. SDK NÃO decide se o gesto foi
1295
+ * cumprido — só coleta e envia; validação é 100% servidor.
1296
+ */
1297
+ collectFramesForGesture: (gesture: ChallengeGesture, index: number, total: number) => Promise<string[]>;
1298
+ /** Se true, quando o servidor devolver 410 no submit, reabre sessão + refaz o desafio 1x. */
1299
+ retryOnSessionExpired?: boolean;
1300
+ }
1301
+
1192
1302
  /**
1193
1303
  * Configuração interna do SDK
1194
1304
  */
@@ -1249,7 +1359,9 @@ export declare const simpleIdentification: (documentType: string, documentNumber
1249
1359
  };
1250
1360
  }>;
1251
1361
 
1252
- export declare function start(applicationToken: string, callbacks: Callbacks): void;
1362
+ export declare function start(applicationToken: string, callbacks: Callbacks, options?: {
1363
+ appName?: string;
1364
+ }): void;
1253
1365
 
1254
1366
  /**
1255
1367
  * Inicia o processo de login com detecção automática do tipo biométrico
@@ -1271,6 +1383,7 @@ export declare function startBiometricRegistration(personData: {
1271
1383
  password: string;
1272
1384
  }, applicationToken: string, callbacks: BiometricRegistrationCallbacks, options?: {
1273
1385
  useRealApi?: boolean;
1386
+ appName?: string;
1274
1387
  }): void;
1275
1388
 
1276
1389
  /**
@@ -1300,6 +1413,8 @@ export declare function startLivenessCapture(applicationToken: string, callbacks
1300
1413
  onSuccess(photos: Blob[]): void;
1301
1414
  onError(code: string, message: string): void;
1302
1415
  onCancel?(): void;
1416
+ }, options?: {
1417
+ appName?: string;
1303
1418
  }): void;
1304
1419
 
1305
1420
  /**
@@ -1314,6 +1429,8 @@ export declare interface StartOnboardingOptions {
1314
1429
  countdown?: number;
1315
1430
  title?: string;
1316
1431
  subtitle?: string;
1432
+ /** Nome do integrador exibido no topo do modal de consentimento (US14.2). */
1433
+ appName?: string;
1317
1434
  onSuccess: (result: {
1318
1435
  success: boolean;
1319
1436
  message: string;
@@ -1327,6 +1444,20 @@ export declare interface StartOnboardingOptions {
1327
1444
  onCancel?: () => void;
1328
1445
  }
1329
1446
 
1447
+ /**
1448
+ * Envia os frames coletados para o servidor validar o desafio de liveness.
1449
+ * Endpoint: `POST /api/v1/auth/liveness/challenge/{challenge_id}/submit/`
1450
+ * O SDK apenas empacota e envia — nenhuma decisão de aprovar/reprovar aqui.
1451
+ */
1452
+ export declare function submitLivenessChallenge({ challengeId, sessionId, applicationToken, gestures, }: SubmitLivenessChallengeParams): Promise<LivenessChallengeResult>;
1453
+
1454
+ export declare interface SubmitLivenessChallengeParams {
1455
+ challengeId: string;
1456
+ sessionId: string;
1457
+ applicationToken: string;
1458
+ gestures: GestureResponse[];
1459
+ }
1460
+
1330
1461
  /**
1331
1462
  * Result of user existence check
1332
1463
  */
@@ -1363,6 +1494,21 @@ export declare const validateToken: (applicationToken: string) => Promise<boolea
1363
1494
  * MINOR: Incrementado quando adicionamos funcionalidades mantendo compatibilidade
1364
1495
  * PATCH: Incrementado quando corrigimos bugs mantendo compatibilidade
1365
1496
  */
1366
- export declare const VERSION = "1.26.1";
1497
+ export declare const VERSION = "1.28.0";
1498
+
1499
+ /**
1500
+ * Executa `fn(sessionId)`. Se o servidor devolver 410 (sessão consumida/expirada),
1501
+ * reabre a sessão automaticamente 1x e reexecuta. Segunda falha propaga.
1502
+ */
1503
+ export declare function withCaptureSession<T>(params: OpenCaptureSessionParams, fn: (sessionId: string) => Promise<T>): Promise<T>;
1504
+
1505
+ /**
1506
+ * Injeta `session_id` cacheado no payload. Se não houver sessão aberta,
1507
+ * retorna o payload original inalterado — a decisão de exigir sessão
1508
+ * fica no servidor.
1509
+ */
1510
+ export declare function withSessionId<T extends Record<string, unknown>>(payload: T): T & {
1511
+ session_id?: string;
1512
+ };
1367
1513
 
1368
1514
  export { }