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.
- package/CHANGELOG.md +11 -0
- package/README.md +251 -102
- package/api/AbstractService.d.ts +5 -4
- package/api/AbstractService.js +2 -5
- package/api/ApiFaceMatchService.d.ts +3 -4
- package/api/ApiLivenessSessionService.d.ts +27 -0
- package/api/ApiLivenessSessionService.js +30 -0
- package/api/ApiOcrService.d.ts +1 -0
- package/api/ApiTypificationService.d.ts +1 -1
- package/browser/index.js +1 -1
- package/client/core/commons/BaseCoreService.d.ts +3 -2
- package/client/core/commons/BaseCoreService.js +12 -6
- package/client/core/methods/faceMatch/Service.d.ts +0 -1
- package/client/core/methods/faceMatch/Service.js +0 -4
- package/client/core/methods/faceMatch/index.d.ts +1 -1
- package/client/core/methods/faceMatch/index.js +2 -2
- package/client/core/methods/ocr/Service.d.ts +3 -5
- package/client/core/methods/ocr/Service.js +0 -4
- package/client/core/methods/ocr/index.d.ts +1 -1
- package/client/core/methods/ocr/index.js +2 -2
- package/client/core/methods/typification/Service.d.ts +0 -1
- package/client/core/methods/typification/Service.js +0 -4
- package/client/core/methods/typification/index.d.ts +1 -1
- package/client/core/methods/typification/index.js +2 -3
- package/client/core/utils/types.d.ts +5 -1
- package/client/index.d.ts +2 -0
- package/client/index.js +2 -0
- package/client/liveness/index.d.ts +2 -1
- package/client/liveness/index.js +3 -1
- package/client/liveness/methods/livenessDetection/index.d.ts +8 -0
- package/client/liveness/methods/livenessDetection/index.js +8 -0
- package/client/liveness/methods/livenessSession/Service.d.ts +19 -0
- package/client/liveness/methods/livenessSession/Service.js +63 -0
- package/client/liveness/methods/livenessSession/index.d.ts +20 -0
- package/client/liveness/methods/livenessSession/index.js +44 -0
- package/client/liveness/methods/uploadIdentificationDocument/index.d.ts +2 -2
- package/client/liveness/utils/getNextFrame.d.ts +4 -1
- package/client/liveness/utils/getNextFrame.js +3 -2
- package/package.json +1 -1
- package/server/core/methods/faceMatch/Service.d.ts +1 -1
- package/server/core/methods/ocr/Service.d.ts +1 -1
- package/server/core/methods/typification/Service.d.ts +1 -1
- package/server/liveness/methods/uploadIdentificationDocument/index.d.ts +2 -2
- package/utils/constants.d.ts +5 -1
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
324
|
+
faceMatchResponse.startCamera()
|
|
295
325
|
faceMatchResponse.captureFirstImage()
|
|
296
326
|
|
|
297
327
|
// Ou
|
|
298
328
|
|
|
299
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
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
|
-
|
|
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
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
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
|
-
|
|
814
|
+
validationSerpro?: Record<string, number | boolean>
|
|
815
|
+
}
|
|
656
816
|
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
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
|
+
```
|
package/api/AbstractService.d.ts
CHANGED
|
@@ -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
|
|
17
|
-
authToken?: string
|
|
18
|
-
baseUrl?: string
|
|
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 {};
|
package/api/AbstractService.js
CHANGED
|
@@ -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?:
|
|
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;
|
package/api/ApiOcrService.d.ts
CHANGED