santoid-sdk 5.3.0 → 7.0.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.
Files changed (45) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +251 -102
  3. package/api/AbstractService.d.ts +5 -4
  4. package/api/AbstractService.js +2 -5
  5. package/api/ApiFaceMatchService.d.ts +3 -4
  6. package/api/ApiLivenessSessionService.d.ts +27 -0
  7. package/api/ApiLivenessSessionService.js +30 -0
  8. package/api/ApiOcrService.d.ts +1 -0
  9. package/api/ApiTypificationService.d.ts +1 -1
  10. package/browser/index.js +1 -1
  11. package/client/core/commons/BaseCoreService.d.ts +3 -2
  12. package/client/core/commons/BaseCoreService.js +12 -6
  13. package/client/core/methods/faceMatch/Service.d.ts +0 -1
  14. package/client/core/methods/faceMatch/Service.js +0 -4
  15. package/client/core/methods/faceMatch/index.d.ts +1 -1
  16. package/client/core/methods/faceMatch/index.js +2 -2
  17. package/client/core/methods/ocr/Service.d.ts +3 -5
  18. package/client/core/methods/ocr/Service.js +0 -4
  19. package/client/core/methods/ocr/index.d.ts +1 -1
  20. package/client/core/methods/ocr/index.js +2 -2
  21. package/client/core/methods/typification/Service.d.ts +0 -1
  22. package/client/core/methods/typification/Service.js +0 -4
  23. package/client/core/methods/typification/index.d.ts +1 -1
  24. package/client/core/methods/typification/index.js +2 -3
  25. package/client/core/utils/types.d.ts +5 -1
  26. package/client/index.d.ts +2 -0
  27. package/client/index.js +2 -0
  28. package/client/liveness/index.d.ts +2 -1
  29. package/client/liveness/index.js +3 -1
  30. package/client/liveness/methods/livenessDetection/index.d.ts +8 -0
  31. package/client/liveness/methods/livenessDetection/index.js +8 -0
  32. package/client/liveness/methods/livenessSession/Service.d.ts +19 -0
  33. package/client/liveness/methods/livenessSession/Service.js +63 -0
  34. package/client/liveness/methods/livenessSession/index.d.ts +20 -0
  35. package/client/liveness/methods/livenessSession/index.js +44 -0
  36. package/client/liveness/methods/uploadIdentificationDocument/index.d.ts +2 -2
  37. package/client/liveness/utils/getNextFrame.d.ts +4 -1
  38. package/client/liveness/utils/getNextFrame.js +3 -2
  39. package/package.json +1 -1
  40. package/server/core/methods/faceMatch/Service.d.ts +1 -1
  41. package/server/core/methods/ocr/Service.d.ts +1 -1
  42. package/server/core/methods/typification/Service.d.ts +1 -1
  43. package/server/liveness/methods/uploadIdentificationDocument/index.d.ts +2 -2
  44. package/utils/constants.d.ts +5 -1
  45. package/utils/constants.js +6 -2
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## Versão 5.5.0
4
+
5
+ ### Mudanças
6
+ - Adicionada a função **livenessSession**, a prova de vida v2, sobre o **AWS Rekognition Face Liveness**. Ela cobre o ciclo de sessão (`createSession` e `getResults`), incluindo a espera pelo resultado enquanto o Rekognition ainda avalia. A captura em si — câmera, oval e desafio — é feita pelo `<FaceLivenessDetector>` da AWS, um componente React, e por isso não faz parte deste pacote.
7
+ - A função **livenessDetection** foi marcada como **deprecada**. Ela é a prova de vida v1, baseada no detector in-house (WebSocket com o desafio de cinco posições). Continua funcionando e será mantida até a migração dos clientes, mas não recebe mais evolução — código novo deve usar **livenessSession**.
8
+ - A URL padrão do WebSocket da v1 deixou de apontar para o endereço gerado do Cloud Run e passou a usar o domínio próprio `liveness.santoid.com.br`.
9
+
10
+ ## Versão 5.4.0
11
+ - Foram adicionadas as funções de callback **onCameraStart** e **onCameraStop** para as funcionalidades de **Tipificação**, **OCR** e **Face Match**.
12
+ - Agora as funções de iniciar câmera para **Tipificação**, **OCR** e **Face Match** possuem a opção **facingMode**, que permitem que o usuário especifique a direção desejada da câmera
13
+
3
14
  ## Versão 5.3.0
4
15
  - Foram adicionadas as versões para consumo da **Tipificação**, do **OCR** e do **Face Match**.
5
16
 
package/README.md CHANGED
@@ -54,11 +54,11 @@ startSDK()
54
54
  ## Envio de arquivos
55
55
  Um ponto importante são os tipos dos arquivos que são suportados pelo SDK.
56
56
 
57
- Para a execução em ambientes que utilizam JavaScript padrão, como os navegadores ou WebView, os tipos de arquivos suportados são **File** ou **Blob**.
57
+ Para execução em navegadores e ambientes semelhantes, os tipos de arquivos suportados são **File** ou **Blob**.
58
58
 
59
59
  Para ambientes Node.js, os tipos dos arquivos devem ser **string, ArrayBuffer, Buffer ou Buffer[]**.
60
60
 
61
- ## Utilização da biblioteca via CDN / Tags \<script\>
61
+ ## Utilização da biblioteca via CDN
62
62
  Caso deseje utilizar a biblioteca via CDN, importando-a diretamente em uma tag **script**, basta utilizar o caminho especificado no exemplo abaixo, substituindo o **VERSION** pela versão desejada.
63
63
 
64
64
  Ao importar a biblioteca via tag script, todas as funções do SDK ficarão disponíveis por meio da classe **SantoiDSDK**.
@@ -145,6 +145,7 @@ const typificationResponse = await typification({
145
145
  })
146
146
 
147
147
  typificationResponse.startCamera()
148
+ typificationResponse.captureImage()
148
149
 
149
150
  // Ou
150
151
 
@@ -160,15 +161,29 @@ typificationResponse.sendFile(fileVariable)
160
161
  | customId | Identificador customizado para auditoria. | Não |
161
162
  | startTheCameraImmediately | Booleano que determina se a câmera será acionada assim que a função for executada ou se será acionada manualmente depois. Por padrão, a câmera será acionada automaticamente. | Não |
162
163
  | onStart | Função executada quando a verificação for iniciada. <br><br>Disponibiliza pelos parâmetros um objeto contendo a stream da transmissão (**videoStream**), caso disponível. | Não |
164
+ | onCameraStart | Função executada quando a câmera for iniciada. <br><br>Disponibiliza pelos parâmetros um objeto contendo a stream da transmissão (**videoStream**), caso disponível. | Não |
165
+ | onCameraStop | Função executada quando a câmera for interrompida. | Não |
163
166
  | onUpdate | Função executada toda vez que ocorre uma atualização no status geral (quando alguma operação é iniciada ou concluída, quando ocorre erro, etc.). <br><br>Disponibiliza pelos parâmetros um objeto contendo as informações sobre a situação do processamento (qual o status atual, se está carregando, se existe erro, etc.) | Não |
164
167
  | onValidationRequested | Função executada quando o status do processamento é "validation". Retorna informações da requisição para que o usuário consiga fazer a validação manual da requisição | Não |
165
168
  | onError | Função executada quando ocorre um erro. <br><br>Disponibiliza pelos parâmetros a instância do erro, a qual contém um identificador (propriedade **code**). | Não |
166
- | onSuccess | Função executada quando a verificação é finalizada com sucesso. <br><br>Disponibiliza pelos parâmetros um objeto com os resultados, compostos pelo ID da solicitação (**livenessId**) e pelos frames de sucesso (**successFrames**). | Não |
169
+ | onSuccess | Função executada quando a verificação é finalizada com sucesso. <br><br>Disponibiliza pelos parâmetros um objeto com os resultados. | Não |
167
170
  | onEnd | Função executada quando a verificação é finalizada, seja com erro ou com sucesso. | Não |
168
171
 
172
+ #### Retorno da função typification (JavaScript)
173
+ | Nome da propriedade | Função |
174
+ | ------------------- | ------ |
175
+ | startCamera | Função para iniciar a câmera manualmente. <br><br>É possível informar nos parâmetros a direção de câmera desejada (**facingMode**), seguindo um modelo semelhante ao das funções de controle de câmera do próprio JavaScript (No mobile, por exemplo, facingMode == 'user' para usar a câmera da frente e facingMode == 'environment' para usar a câmera de trás). <br><br>Por padrão o facingMode é 'user'. |
176
+ | stopCamera | Função para desligar a câmera manualmente. |
177
+ | captureImage | Função para capturar a imagem que será utilizada para consumo com a câmera. |
178
+ | getVideoStream | Função para obter a stream de vídeo da câmera, se ela estiver disponível. |
179
+ | sendFile | Função para enviar arquivos manualmente, iniciando também o processamento. |
180
+
169
181
  #### Utilização em Node.js
170
182
  A utilização da função de Tipificação em Node.js é idêntica à utilização em JavaScript normal para browsers e ambientes semelhantes, com a exceção das funções e propriedades relacionadas à câmera, que não estão disponíveis nesta versão.
171
183
 
184
+ #### Formato dos resultados
185
+ Os resultados podem ser obtidos por meio da função de callback **onSuccess** por meio dos parâmetros. Sua estrutura é baseada na interface **ITypificationResult**, a qual pode ser consultada mais abaixo na seção de **Tipos comuns**.
186
+
172
187
  ### OCR
173
188
  Por meio do SDK também é possível utilizar a funcionalidade de **OCR** diretamente, que permite extrair as informações dos campos de um documento.
174
189
 
@@ -214,6 +229,7 @@ const ocrResponse = await ocr({
214
229
  })
215
230
 
216
231
  ocrResponse.startCamera()
232
+ ocrResponse.captureImage()
217
233
 
218
234
  // Ou
219
235
 
@@ -229,15 +245,29 @@ ocrResponse.sendFile(fileVariable)
229
245
  | customId | Identificador customizado para auditoria. | Não |
230
246
  | startTheCameraImmediately | Booleano que determina se a câmera será acionada assim que a função for executada ou se será acionada manualmente depois. Por padrão, a câmera será acionada automaticamente. | Não |
231
247
  | onStart | Função executada quando a verificação for iniciada. <br><br>Disponibiliza pelos parâmetros um objeto contendo a stream da transmissão (**videoStream**), caso disponível. | Não |
248
+ | onCameraStart | Função executada quando a câmera for iniciada. <br><br>Disponibiliza pelos parâmetros um objeto contendo a stream da transmissão (**videoStream**), caso disponível. | Não |
249
+ | onCameraStop | Função executada quando a câmera for interrompida. | Não |
232
250
  | onUpdate | Função executada toda vez que ocorre uma atualização no status geral (quando alguma operação é iniciada ou concluída, quando ocorre erro, etc.). <br><br>Disponibiliza pelos parâmetros um objeto contendo as informações sobre a situação do processamento (qual o status atual, se está carregando, se existe erro, etc.) | Não |
233
251
  | onValidationRequested | Função executada quando o status do processamento é "validation". Retorna informações da requisição para que o usuário consiga fazer a validação manual da requisição | Não |
234
252
  | onError | Função executada quando ocorre um erro. <br><br>Disponibiliza pelos parâmetros a instância do erro, a qual contém um identificador (propriedade **code**). | Não |
235
- | onSuccess | Função executada quando a verificação é finalizada com sucesso. <br><br>Disponibiliza pelos parâmetros um objeto com os resultados, compostos pelo ID da solicitação (**livenessId**) e pelos frames de sucesso (**successFrames**). | Não |
253
+ | onSuccess | Função executada quando a verificação é finalizada com sucesso. <br><br>Disponibiliza pelos parâmetros um objeto com os resultados. | Não |
236
254
  | onEnd | Função executada quando a verificação é finalizada, seja com erro ou com sucesso. | Não |
237
255
 
256
+ #### Retorno da função ocr (JavaScript)
257
+ | Nome da propriedade | Função |
258
+ | ------------------- | ------ |
259
+ | startCamera | Função para iniciar a câmera manualmente. <br><br>É possível informar nos parâmetros a direção de câmera desejada (**facingMode**), seguindo um modelo semelhante ao das funções de controle de câmera do próprio JavaScript (No mobile, por exemplo, facingMode == 'user' para usar a câmera da frente e facingMode == 'environment' para usar a câmera de trás). <br><br>Por padrão o facingMode é 'user'. |
260
+ | stopCamera | Função para desligar a câmera manualmente. |
261
+ | captureImage | Função para capturar a imagem que será utilizada para consumo com a câmera. |
262
+ | getVideoStream | Função para obter a stream de vídeo da câmera, se ela estiver disponível. |
263
+ | sendFile | Função para enviar arquivos manualmente, iniciando também o processamento. |
264
+
238
265
  #### Utilização em Node.js
239
266
  A utilização da função de OCR em Node.js é idêntica à utilização em JavaScript normal para browsers e ambientes semelhantes, com a exceção das funções e propriedades relacionadas à câmera, que não estão disponíveis nesta versão.
240
267
 
268
+ #### Formato dos resultados
269
+ Os resultados podem ser obtidos por meio da função de callback **onSuccess** por meio dos parâmetros. Sua estrutura é baseada na interface **IOcrResult**, a qual pode ser consultada mais abaixo na seção de **Tipos comuns**.
270
+
241
271
  ### Face Match
242
272
  Por meio do SDK também é possível utilizar a funcionalidade de **Face Match**, que permite comparar duas faces e verificar se são iguais. É possível enviar uma imagem que contenha dois rostos para comparação, ou enviar duas imagens, com um rosto em cada uma.
243
273
 
@@ -291,12 +321,12 @@ const faceMatchResponse = await faceMatch({
291
321
  // ...
292
322
  })
293
323
 
294
- ocrResponse.startCamera()
324
+ faceMatchResponse.startCamera()
295
325
  faceMatchResponse.captureFirstImage()
296
326
 
297
327
  // Ou
298
328
 
299
- ocrResponse.sendFiles(fileVariable1, fileVariable2)
329
+ faceMatchResponse.sendFiles(fileVariable1, fileVariable2)
300
330
  ```
301
331
 
302
332
  #### Opções para a função faceMatch (JavaScript)
@@ -308,18 +338,83 @@ ocrResponse.sendFiles(fileVariable1, fileVariable2)
308
338
  | customId | Identificador customizado para auditoria. | Não |
309
339
  | startTheCameraImmediately | Booleano que determina se a câmera será acionada assim que a função for executada ou se será acionada manualmente depois. Por padrão, a câmera será acionada automaticamente. | Não |
310
340
  | onStart | Função executada quando a verificação for iniciada. <br><br>Disponibiliza pelos parâmetros um objeto contendo a stream da transmissão (**videoStream**), caso disponível. | Não |
341
+ | onCameraStart | Função executada quando a câmera for iniciada. <br><br>Disponibiliza pelos parâmetros um objeto contendo a stream da transmissão (**videoStream**), caso disponível. | Não |
342
+ | onCameraStop | Função executada quando a câmera for interrompida. | Não |
311
343
  | onUpdate | Função executada toda vez que ocorre uma atualização no status geral (quando alguma operação é iniciada ou concluída, quando ocorre erro, etc.). <br><br>Disponibiliza pelos parâmetros um objeto contendo as informações sobre a situação do processamento (qual o status atual, se está carregando, se existe erro, etc.) | Não |
312
344
  | onValidationRequested | Função executada quando o status do processamento é "validation". Retorna informações da requisição para que o usuário consiga fazer a validação manual da requisição | Não |
313
345
  | onError | Função executada quando ocorre um erro. <br><br>Disponibiliza pelos parâmetros a instância do erro, a qual contém um identificador (propriedade **code**). | Não |
314
- | onSuccess | Função executada quando a verificação é finalizada com sucesso. <br><br>Disponibiliza pelos parâmetros um objeto com os resultados, compostos pelo ID da solicitação (**livenessId**) e pelos frames de sucesso (**successFrames**). | Não |
346
+ | onSuccess | Função executada quando a verificação é finalizada com sucesso. <br><br>Disponibiliza pelos parâmetros um objeto com os resultados. | Não |
315
347
  | onEnd | Função executada quando a verificação é finalizada, seja com erro ou com sucesso. | Não |
316
348
 
349
+ #### Retorno da função faceMatch (JavaScript)
350
+ | Nome da propriedade | Função |
351
+ | ------------------- | ------ |
352
+ | startCamera | Função para iniciar a câmera manualmente. <br><br>É possível informar nos parâmetros a direção de câmera desejada (**facingMode**), seguindo um modelo semelhante ao das funções de controle de câmera do próprio JavaScript (No mobile, por exemplo, facingMode == 'user' para usar a câmera da frente e facingMode == 'environment' para usar a câmera de trás). <br><br>Por padrão o facingMode é 'user'. |
353
+ | stopCamera | Função para desligar a câmera manualmente. |
354
+ | captureFirstImage | Função para capturar a primeira imagem que será utilizada para o Face Match. <br><br> Por padrão, iniciará o processamento após a captura, porém caso deseje utilizar duas imagens você pode evitar isso utilizando a opção **startProcessing**. |
355
+ | captureSecondImage | Função para capturar a segunda imagem que será utilizada para o Face Match. <br><br> Por padrão, iniciará o processamento após a captura, porém caso deseje impedir isso você pode utilizar a opção **startProcessing**. |
356
+ | getVideoStream | Função para obter a stream de vídeo da câmera, se ela estiver disponível. |
357
+ | sendFiles | Função para enviar arquivos manualmente, iniciando também o processamento. Como o Face Match suporta até 2 arquivos, você pode escolher entre enviar apenas 1 arquivo com dois rostos para análise ou 2 arquivos com 1 rosto em cada. |
358
+
317
359
  #### Utilização em Node.js
318
360
  A utilização da função de Face Match em Node.js é idêntica à utilização em JavaScript normal para browsers e ambientes semelhantes, com a exceção das funções e propriedades relacionadas à câmera, que não estão disponíveis nesta versão.
319
361
 
362
+ #### Formato dos resultados
363
+ Os resultados podem ser obtidos por meio da função de callback **onSuccess** por meio dos parâmetros. Sua estrutura é baseada na interface **IFaceMatchResult**, a qual pode ser consultada mais abaixo na seção de **Tipos comuns**.
364
+
320
365
  ### Prova de Vida
321
366
  O SDK conta com a funcionalidade de **Prova de Vida**, que possibilita a verificação do usuário atual, avaliando se uma pessoa real está realizando as atividades online por meio de uma rápida análise facial.
322
367
 
368
+ Existem duas versões:
369
+
370
+ | Versão | Função | Situação |
371
+ | --- | --- | --- |
372
+ | v2 | `livenessSession` | **Recomendada.** Usa o AWS Rekognition Face Liveness. |
373
+ | v1 | `livenessDetection` | **Deprecada.** Detector in-house, via WebSocket, com o desafio de cinco posições. Mantida até a migração dos clientes, sem receber evolução. |
374
+
375
+ #### Prova de Vida v2 (recomendada)
376
+ A v2 é feita em duas partes. O SDK cuida do ciclo de sessão contra a API do SantoiD; a captura — câmera, oval e desafio — é feita pelo componente React `<FaceLivenessDetector>` da AWS, que transmite os frames direto para o Rekognition e por isso não faz parte deste pacote.
377
+
378
+ O fluxo é:
379
+
380
+ 1. `createSession()` — cria a sessão e devolve o `sessionId`
381
+ 2. o `<FaceLivenessDetector>` recebe esse `sessionId` e conduz a captura
382
+ 3. `getResults()` — quando o detector avisar que terminou
383
+
384
+ ```ts
385
+ import { livenessSession } from 'santoid-sdk/client/liveness'
386
+
387
+ const session = livenessSession({
388
+ token: 'string',
389
+
390
+ // Opcional: sem track, a verificação não fica atrelada a um processo
391
+ track: 'string',
392
+ customerRequestId: 'string',
393
+
394
+ onSessionCreated: (sessionId) => {
395
+ // Entregue este sessionId ao <FaceLivenessDetector>
396
+ },
397
+
398
+ onResults: (results) => {
399
+ // results.Status, results.Confidence, results.ReferenceImage, results.AuditImages
400
+ },
401
+
402
+ onError: (error) => {
403
+ // ...
404
+ },
405
+ })
406
+
407
+ const sessionId = await session.createSession()
408
+
409
+ // Depois que o detector sinalizar o fim da captura:
410
+ const results = await session.getResults()
411
+ ```
412
+
413
+ O `getResults` já espera internamente enquanto o Rekognition ainda avalia — o status fica `CREATED` ou `IN_PROGRESS` por alguns instantes após a captura terminar, e a função só devolve quando sair desse estado (ou após esgotar as tentativas).
414
+
415
+ #### Prova de Vida v1 (deprecada)
416
+ > **Deprecada.** Use `livenessSession`. Esta seção descreve a versão anterior, mantida para os clientes que ainda não migraram.
417
+
323
418
  #### Utilização em JavaScript
324
419
  Para utilizar a funcionalidade de Prova de Vida, é necessário importar a função para iniciar a verificação e passar alguns valores dentro do objeto de opções, como no exemplo abaixo:
325
420
 
@@ -366,7 +461,7 @@ As propriedades disponíveis para utilização no objeto de opções estão list
366
461
  | onEnd | Função executada quando a verificação é finalizada, seja com erro ou com sucesso. | Não |
367
462
 
368
463
  <br>
369
- Caso a função seja executada em um navegador (ou ambiente semelhante que utilize JavaScript, como o WebView, por exemplo), não é obrigatório fornecer uma função que retorne os frames para verificação (getNextFrame), pois o próprio SDK iniciará a câmera e realizará todo o processo caso a função não seja fornecida.
464
+ Caso a função seja executada em um navegador (ou ambiente semelhante), não é obrigatório fornecer uma função que retorne os frames para verificação (getNextFrame), pois o próprio SDK iniciará a câmera e realizará todo o processo caso a função não seja fornecida.
370
465
 
371
466
  #### Retorno da função livenessDetection (JavaScript)
372
467
  A função livenessDetection retorna alguns métodos que possibilitam um melhor controle da verificação.
@@ -574,7 +669,53 @@ Em que:
574
669
  ```typescript
575
670
  type TResultStatuses = 'success' | 'error' | null
576
671
 
577
- interface ITypificationResult {
672
+ type TPositions = 'front' | 'right' | 'left' | 'up' | 'bottom'
673
+
674
+ interface ILivenessResults {
675
+ livenessId: string
676
+ successFrames: Record<TPositions, Blob>
677
+ }
678
+ ```
679
+
680
+ Os tipos **ITypificationResult** e **IFaceMatchResult** podem ser conferidos na seção de **Tipos comuns**, disponível mais a frente na documentação.
681
+
682
+ #### Utilização em Node.js
683
+ De forma semelhante à funcionalidade da Prova de Vida, para o Node.js o caminho da importação muda
684
+ e a função **getNextFrame** passa a ser obrigatória e deve ser fornecida às opções para o livenessDetection.
685
+
686
+ Outro detalhe é que no Node.js todos os tipos envolvendo **File** ou **Blob** passam a utilizar valores do tipo **string, ArrayBuffer, Buffer ou Buffer[]**.
687
+
688
+ Todos as outras opções e retornos se mantém os mesmos da versão para JavaScript.
689
+
690
+ ```ts
691
+ import { uploadIdentificationDocument } from 'santoid-sdk/server/liveness'
692
+
693
+ const uploadIdentificationDocumentResponse = uploadIdentificationDocument({
694
+ token: 'string',
695
+ track: 'string',
696
+
697
+ livenessDetectionOptions: {
698
+ getNextFrame () {
699
+ // ...
700
+ },
701
+
702
+ // ...
703
+ },
704
+
705
+ // ...
706
+ })
707
+ ```
708
+
709
+ ## Tipos comuns
710
+ Esta seção destina-se a disponibilizar os tipos dos resultados de algumas funções. Algumas funcionalidades possuem resultados com estruturas parecidas internamente.
711
+
712
+ A tipificação, por exemplo, pode ser configurada para iniciar também o OCR dos campos e, consequentemente, conter resultados de OCR em seu interior.
713
+
714
+ Por essa razão, para simplificar o entendimento, serão disponibilizados a seguir as interfaces dos resultados dessas funcionalidades de forma simplificada.
715
+
716
+ ### Estrutura base
717
+ ```ts
718
+ interface IBaseAsyncResult {
578
719
  count: number
579
720
  customerRequestId: string
580
721
  domain: string
@@ -585,80 +726,115 @@ interface ITypificationResult {
585
726
  service: string
586
727
  status: string
587
728
  track: string
729
+ }
730
+ ```
588
731
 
589
- documents: Array<{
590
- typification: {
591
- id: string
592
- score: number
593
- }
732
+ ### Resultados da Tipificação
733
+ ```ts
734
+ // Resultados completos da tipificação
735
+ interface ITypificationResult extends IBaseAsyncResult {
736
+ documents: ITypificationDocumentResult[]
737
+ }
594
738
 
595
- error?: {
739
+ // Resultados para um documento individual
740
+ interface ITypificationDocumentResult {
741
+ typification: {
742
+ id: string
743
+ score: number
744
+ }
745
+
746
+ error?: {
747
+ message: string
748
+ }
749
+
750
+ ocr?: {
751
+ template: string
752
+
753
+ labels: ICropResult[] | null
754
+ } | boolean
755
+ }
756
+ ```
757
+
758
+ ### Resultados do OCR
759
+ ```ts
760
+ // Resultados completos do OCR
761
+ interface IOcrResult extends IBaseAsyncResult {
762
+ template: string
763
+
764
+ documents: IOcrDocumentResult[]
765
+ }
766
+
767
+ // Resultados para um documento individual
768
+ interface IOcrDocumentResult {
769
+ error?: {
770
+ message: string
771
+ }
772
+
773
+ ocr: {
774
+ template: string
775
+
776
+ labels: ICropResult[] | null
777
+ } | boolean
778
+ }
779
+
780
+ // Resultados para um único campo
781
+ interface ICropResult {
782
+ x: number
783
+ y: number
784
+ w: number
785
+ h: number
786
+ bottomRight: number[]
787
+ topLeft: number[]
788
+
789
+ label: string | null
790
+
791
+ text: string | null
792
+ ocr_score: number | null
793
+ crop: string | null
794
+ ocrInterpretive?: boolean | string | null
795
+
796
+ ocrList: IOcrListResult[] | null
797
+
798
+ serpro_query?: {
799
+ serpro_data: any
800
+ search_logs: {
801
+ document: string
802
+ type: string
803
+ search_time: string
804
+ status_code: number
596
805
  message: string
597
806
  }
807
+ } | null
598
808
 
599
- ocr: {
600
- template: string
601
-
602
- labels: Array<{
603
- x: number
604
- y: number
605
- w: number
606
- h: number
607
- bottomRight: number[]
608
- topLeft: number[]
609
-
610
- label: string | null
611
-
612
- text: string | null
613
- ocr_score: number | null
614
- crop: string | null
615
- ocrInterpretive?: boolean | string | null
616
- ocrList?: Array<{
617
- x: number
618
- y: number
619
- w: number
620
- h: number
621
- bottomRight: number[]
622
- topLeft: number[]
623
-
624
- dataField?: string
625
- dataFieldValue?: boolean
626
-
627
- label: string | null
628
- ocr?: string | null
629
- ocr_score?: number
630
- cropBase64?: string | null
631
- }> | null
632
-
633
- serpro_query?: {
634
- serpro_data: any
635
- search_logs: {
636
- document: string
637
- type: string
638
- search_time: string
639
- status_code: number
640
- message: string
641
- }
642
- } | null
643
-
644
- validation: {
645
- type: string | null
646
- value: number | string | boolean
647
- } | null
648
-
649
- validationSerpro?: Record<string, number | boolean>
650
- }> | null
651
- } | null
652
- }>
653
- }
809
+ validation: {
810
+ type: string | null
811
+ value: number | string | boolean
812
+ } | null
654
813
 
655
- export type TPositions = 'front' | 'right' | 'left' | 'up' | 'bottom'
814
+ validationSerpro?: Record<string, number | boolean>
815
+ }
656
816
 
657
- interface ILivenessResults {
658
- livenessId: string
659
- successFrames: Record<TPositions, Blob>
817
+ // Resultados para os campos internos de um campo com OCR em lista configurado
818
+ interface IOcrListResult {
819
+ x: number
820
+ y: number
821
+ w: number
822
+ h: number
823
+ bottomRight: number[]
824
+ topLeft: number[]
825
+
826
+ dataField?: string
827
+ dataFieldValue?: boolean
828
+
829
+ label: string | null
830
+ ocr?: string | null
831
+ ocr_score?: number
832
+ cropBase64?: string | null
660
833
  }
834
+ ```
661
835
 
836
+ ### Resultados do Face Match
837
+ ```ts
662
838
  interface IFaceMatchResult {
663
839
  domain: string
664
840
  track: string
@@ -677,31 +853,4 @@ interface IFaceMatchResult {
677
853
  fileImage1?: string
678
854
  fileImage2?: string
679
855
  }
680
- ```
681
-
682
- #### Utilização em Node.js
683
- De forma semelhante à funcionalidade da Prova de Vida, para o Node.js o caminho da importação muda
684
- e a função **getNextFrame** passa a ser obrigatória e deve ser fornecida às opções para o livenessDetection.
685
-
686
- Outro detalhe é que no Node.js todos os tipos envolvendo **File** ou **Blob** passam a utilizar valores do tipo **string, ArrayBuffer, Buffer ou Buffer[]**.
687
-
688
- Todos as outras opções e retornos se mantém os mesmos da versão para JavaScript.
689
-
690
- ```ts
691
- import { uploadIdentificationDocument } from 'santoid-sdk/server/liveness'
692
-
693
- const uploadIdentificationDocumentResponse = uploadIdentificationDocument({
694
- token: 'string',
695
- track: 'string',
696
-
697
- livenessDetectionOptions: {
698
- getNextFrame () {
699
- // ...
700
- },
701
-
702
- // ...
703
- },
704
-
705
- // ...
706
- })
707
- ```
856
+ ```
@@ -12,10 +12,11 @@ export declare class AbstractService {
12
12
  serviceOptions: IAbstractServiceOptions;
13
13
  baseUrl: string;
14
14
  constructor(options: Partial<IBaseSDKOptions>, serviceOptions: IAbstractServiceOptions);
15
- request({ contentType, authToken, baseUrl, }?: {
16
- contentType?: string | undefined;
17
- authToken?: string | undefined;
18
- baseUrl?: string | undefined;
15
+ request({ contentType, authToken, baseUrl, extraHeaders, }?: {
16
+ contentType?: string;
17
+ authToken?: string;
18
+ baseUrl?: string;
19
+ extraHeaders?: Record<string, string>;
19
20
  }): import("axios").AxiosInstance;
20
21
  }
21
22
  export {};
@@ -13,13 +13,10 @@ class AbstractService {
13
13
  }
14
14
  request(_a) {
15
15
  var _b, _c;
16
- var { contentType = 'application/json', authToken = this.options.token, baseUrl = (_b = this.options.customApiUrl) !== null && _b !== void 0 ? _b : constants_1.API_GATEWAY_URL, } = _a === void 0 ? {} : _a;
16
+ var { contentType = 'application/json', authToken = this.options.token, baseUrl = (_b = this.options.customApiUrl) !== null && _b !== void 0 ? _b : constants_1.API_GATEWAY_URL, extraHeaders, } = _a === void 0 ? {} : _a;
17
17
  const axiosConfig = {
18
18
  baseURL: baseUrl,
19
- headers: {
20
- 'Content-Type': contentType,
21
- Authorization: `Bearer ${authToken}`,
22
- },
19
+ headers: Object.assign({ 'Content-Type': contentType, Authorization: `Bearer ${authToken}` }, extraHeaders),
23
20
  };
24
21
  let domain = this.options.domain;
25
22
  if (!this.options.domain && this.options.token) {
@@ -9,9 +9,6 @@ interface IFaceMatchStatusGetResponse extends Awaited<ReturnType<InstanceType<ty
9
9
  fileImage1?: string;
10
10
  fileImage2?: string;
11
11
  }
12
- export interface IError {
13
- error: string;
14
- }
15
12
  export interface IFaceMatchResult {
16
13
  domain: string;
17
14
  track: string;
@@ -20,7 +17,9 @@ export interface IFaceMatchResult {
20
17
  requestType: string;
21
18
  customerRequestId: string;
22
19
  executionDatetime: string;
23
- error?: IError;
20
+ error?: {
21
+ error: string;
22
+ };
24
23
  status: string;
25
24
  comparison_score: number;
26
25
  similarity_score: number;
@@ -0,0 +1,27 @@
1
+ import { AbstractService } from './AbstractService';
2
+ export interface ILivenessSession {
3
+ SessionId: string;
4
+ }
5
+ export interface ILivenessBoundingBox {
6
+ Width?: number;
7
+ Height?: number;
8
+ Left?: number;
9
+ Top?: number;
10
+ }
11
+ export interface ILivenessImage {
12
+ Bytes?: string;
13
+ BoundingBox?: ILivenessBoundingBox;
14
+ }
15
+ export interface ILivenessSessionResult {
16
+ SessionId: string;
17
+ Status: string;
18
+ Confidence?: number;
19
+ ReferenceImage?: ILivenessImage;
20
+ AuditImages?: ILivenessImage[];
21
+ }
22
+ export declare class ApiLivenessSessionService extends AbstractService {
23
+ get baseLivenessUrl(): string;
24
+ private livenessRequest;
25
+ createSession(customerRequestId?: string): Promise<ILivenessSession>;
26
+ getSessionResults(sessionId: string): Promise<ILivenessSessionResult>;
27
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiLivenessSessionService = void 0;
4
+ const AbstractService_1 = require("./AbstractService");
5
+ const constants_1 = require("../utils/constants");
6
+ class ApiLivenessSessionService extends AbstractService_1.AbstractService {
7
+ get baseLivenessUrl() {
8
+ var _a;
9
+ return (_a = this.options.customApiUrl) !== null && _a !== void 0 ? _a : constants_1.LIVENESS_API_URL;
10
+ }
11
+ // O liveness v2 nao fica atras do API Gateway, entao o
12
+ // x-endpoint-api-userinfo precisa ir explicito: e' ele que o backend le
13
+ // para autorizar (ver api/deps.py, viewer_user_validation).
14
+ livenessRequest() {
15
+ var _a;
16
+ return this.request({
17
+ baseUrl: this.baseLivenessUrl,
18
+ extraHeaders: { 'x-endpoint-api-userinfo': (_a = this.options.token) !== null && _a !== void 0 ? _a : '' },
19
+ });
20
+ }
21
+ async createSession(customerRequestId) {
22
+ const response = await this.livenessRequest().post('/api/v2/liveness/session', { track: this.options.track, customerRequestId });
23
+ return response.data;
24
+ }
25
+ async getSessionResults(sessionId) {
26
+ const response = await this.livenessRequest().get(`/api/v2/liveness/session/${sessionId}`, { params: this.options.track ? { track: this.options.track } : undefined });
27
+ return response.data;
28
+ }
29
+ }
30
+ exports.ApiLivenessSessionService = ApiLivenessSessionService;
@@ -57,5 +57,6 @@ export interface IOcrDocumentResult {
57
57
  } | boolean;
58
58
  }
59
59
  export interface IOcrResult extends IBaseAsyncResult {
60
+ template: string;
60
61
  documents: IOcrDocumentResult[];
61
62
  }
@@ -13,7 +13,7 @@ export interface ITypificationDocumentResult {
13
13
  error?: {
14
14
  message: string;
15
15
  };
16
- ocr: {
16
+ ocr?: {
17
17
  template: string;
18
18
  labels: ICropResult[] | null;
19
19
  } | boolean;