santoid-sdk 2.0.2 → 3.0.1
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 +17 -0
- package/README.md +267 -107
- package/api/AbstractService.d.ts +21 -0
- package/api/AbstractService.js +32 -0
- package/api/FaceMatchService.d.ts +9 -0
- package/api/FaceMatchService.js +15 -0
- package/api/TypificationService.d.ts +46 -0
- package/api/TypificationService.js +15 -0
- package/browser/liveness/index.js +1 -1
- package/liveness/index.d.ts +1 -3
- package/liveness/index.js +2 -19
- package/liveness/methods/livenessDetection/Service.d.ts +28 -0
- package/liveness/methods/livenessDetection/Service.js +130 -0
- package/liveness/methods/livenessDetection/index.d.ts +15 -0
- package/liveness/methods/livenessDetection/index.js +46 -0
- package/liveness/methods/uploadIdentificationDocument/Service.d.ts +62 -0
- package/liveness/methods/uploadIdentificationDocument/Service.js +134 -0
- package/liveness/methods/uploadIdentificationDocument/index.d.ts +24 -0
- package/liveness/methods/uploadIdentificationDocument/index.js +26 -0
- package/liveness/utils/getNextFrame.d.ts +6 -5
- package/liveness/utils/getNextFrame.js +24 -19
- package/liveness/utils/index.d.ts +2 -2
- package/node/liveness/index.d.ts +1 -3
- package/node/liveness/index.js +2 -19
- package/node/liveness/methods/livenessDetection/Service.d.ts +6 -0
- package/node/liveness/methods/livenessDetection/Service.js +20 -0
- package/node/liveness/methods/livenessDetection/index.d.ts +13 -0
- package/node/liveness/methods/livenessDetection/index.js +46 -0
- package/node/liveness/methods/uploadIdentificationDocument/Service.d.ts +4 -0
- package/node/liveness/methods/uploadIdentificationDocument/Service.js +19 -0
- package/node/liveness/methods/uploadIdentificationDocument/index.d.ts +25 -0
- package/node/liveness/methods/uploadIdentificationDocument/index.js +28 -0
- package/node/liveness/utils/index.d.ts +2 -2
- package/package.json +3 -3
- package/utils/error.d.ts +24 -0
- package/utils/error.js +27 -0
- package/utils/index.d.ts +7 -0
- package/utils/index.js +44 -0
- package/utils/types.d.ts +25 -14
- package/utils/websocket.d.ts +18 -0
- package/utils/websocket.js +57 -0
- package/liveness/methods/livenessDetection.d.ts +0 -6
- package/liveness/methods/livenessDetection.js +0 -129
- package/liveness/methods/uploadIdentificationDocument.d.ts +0 -91
- package/liveness/methods/uploadIdentificationDocument.js +0 -234
- package/liveness/utils/types.d.ts +0 -5
- package/liveness/utils/types.js +0 -17
- package/liveness/utils/websocket.d.ts +0 -3
- package/liveness/utils/websocket.js +0 -34
- package/node/liveness/methods/livenessDetection.d.ts +0 -6
- package/node/liveness/methods/livenessDetection.js +0 -114
- package/node/liveness/methods/uploadIdentificationDocument.d.ts +0 -91
- package/node/liveness/methods/uploadIdentificationDocument.js +0 -235
- package/node/liveness/utils/types.d.ts +0 -6
- package/node/liveness/utils/types.js +0 -17
- package/node/liveness/utils/websocket.d.ts +0 -5
- package/node/liveness/utils/websocket.js +0 -39
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Versão 3.0.1
|
|
4
|
+
|
|
5
|
+
### Correções
|
|
6
|
+
|
|
7
|
+
- Atualizações de estrutura na documentação para facilitar a leitura.
|
|
8
|
+
|
|
9
|
+
## Versão 3.0.0
|
|
10
|
+
|
|
11
|
+
### Mudanças
|
|
12
|
+
|
|
13
|
+
- Os nomes de métodos de callback disponíveis nas opções do SDK foram alterados do padrão **nome** + **Callback** para **on** + **Nome**
|
|
14
|
+
- O mecanismo de envio de frames foi melhorado para evitar o envio de frames fora de ordem
|
|
15
|
+
- Agora as funções **livenessDetection** e **uploadIdentificationDocument** são síncronas e todo o monitoramento de status dos processamentos deve ser feito por meio dos métodos de callback
|
|
16
|
+
- Nova função **onStart**, executada quando a verificação de prova de vida é iniciada
|
|
17
|
+
- Novas funções **resumeGettingFrames** e **pauseGettingFrames** para controlar o envio de frames
|
package/README.md
CHANGED
|
@@ -35,7 +35,7 @@ async function startSDK () {
|
|
|
35
35
|
startSDK()
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
-
Você também pode passar as credenciais
|
|
38
|
+
Você também pode passar as credenciais em formato de objeto ou transformadas em base64 por meio da propriedade **credentials** do objeto de opções de inicialização.
|
|
39
39
|
|
|
40
40
|
```ts
|
|
41
41
|
import { initialize } from 'santoid-sdk/node/auth'
|
|
@@ -47,7 +47,7 @@ async function startSDK () {
|
|
|
47
47
|
// ...
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
// Certifique-se de que o usuário está autenticado
|
|
50
|
+
// Certifique-se de que o usuário está autenticado antes
|
|
51
51
|
startSDK()
|
|
52
52
|
```
|
|
53
53
|
|
|
@@ -57,70 +57,110 @@ startSDK()
|
|
|
57
57
|
Atualmente, 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.
|
|
58
58
|
|
|
59
59
|
#### Utilização em JavaScript
|
|
60
|
-
Para utilizar a funcionalidade de Prova de Vida, é necessário importar a função para iniciar a verificação e passar alguns
|
|
60
|
+
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:
|
|
61
61
|
|
|
62
62
|
```ts
|
|
63
63
|
import { livenessDetection } from 'santoid-sdk/liveness'
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
customId: 'string', // (Opcional) ID customizado para auditoria
|
|
65
|
+
const livenessDetectionResponse = livenessDetection({
|
|
66
|
+
token: 'string',
|
|
67
|
+
track: 'string',
|
|
68
|
+
customId: 'string',
|
|
70
69
|
|
|
71
|
-
|
|
72
|
-
//
|
|
73
|
-
|
|
74
|
-
getNextFrame: () => {
|
|
75
|
-
// ...
|
|
76
|
-
},
|
|
70
|
+
getNextFrame: () => {
|
|
71
|
+
// ...
|
|
72
|
+
},
|
|
77
73
|
|
|
78
|
-
|
|
79
|
-
|
|
74
|
+
// ...
|
|
75
|
+
})
|
|
80
76
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
rightCallback: () => {},
|
|
84
|
-
leftCallback: () => {},
|
|
85
|
-
upCallback: () => {},
|
|
86
|
-
bottomCallback: () => {},
|
|
77
|
+
const { getVideoStream, stopLivenessDetection, resumeGettingFrames, pauseGettingFrames } = livenessDetectionResponse
|
|
78
|
+
```
|
|
87
79
|
|
|
88
|
-
|
|
89
|
-
|
|
80
|
+
As propriedades disponíveis para utilização no objeto de opções estão listadas na tabela abaixo.
|
|
81
|
+
|
|
82
|
+
#### Opções para a função livenessDetection (JavaScript)
|
|
83
|
+
|
|
84
|
+
| Nome da propriedade | Função | É obrigatório? |
|
|
85
|
+
| ------------------- | ------ | -------------- |
|
|
86
|
+
| token | Token de acesso obtido por meio da autenticação. | Sim |
|
|
87
|
+
| track | Identificador do processo que será utilizado. | Sim |
|
|
88
|
+
| customId | Identificador customizado para auditoria. | Não |
|
|
89
|
+
| startGettingFrames | Função executada quando a obtenção de frames for iniciada. <br><br>Se retornar um valor do tipo MediaStream, ele será salvo e fornecido por meio da função **getVideoStream**. | Não |
|
|
90
|
+
| getNextFrame | Função que deve retornar os frames no formato **File ou Blob**. <br><br>Será executada várias vezes e deve sempre devolver o próximo frame. | Não |
|
|
91
|
+
| stopGettingFrames | Função executada quando a obtenção de frames for finalizada. | Não |
|
|
92
|
+
| 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 |
|
|
93
|
+
| onNextStep | Função executada sempre que a validação muda para a próxima etapa. <br><br>Disponibiliza pelos parâmetros a etapa atual ('front', 'left', 'right', 'up' ou 'bottom'). | Não |
|
|
94
|
+
| onFrontStep | Função executada quando a etapa 'front' é iniciada. | Não |
|
|
95
|
+
| onLeftStep | Função executada quando a etapa 'left' é iniciada. | Não |
|
|
96
|
+
| onRightStep | Função executada quando a etapa 'right' é iniciada. | Não |
|
|
97
|
+
| onUpStep | Função executada quando a etapa 'up' é iniciada. | Não |
|
|
98
|
+
| onBottomStep | Função executada quando a etapa 'bottom' é iniciada. | Não |
|
|
99
|
+
| 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 |
|
|
100
|
+
| 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 |
|
|
101
|
+
| onEnd | Função executada quando a verificação é finalizada, seja com erro ou com sucesso. | Não |
|
|
102
|
+
|
|
103
|
+
<br>
|
|
104
|
+
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.
|
|
105
|
+
|
|
106
|
+
#### Retorno da função livenessDetection (JavaScript)
|
|
107
|
+
A função livenessDetection retorna alguns métodos que possibilitam um melhor controle da verificação.
|
|
108
|
+
|
|
109
|
+
| Nome da propriedade | Função |
|
|
110
|
+
| ------------------- | ------ |
|
|
111
|
+
| getVideoStream | Retorna a stream dos frames (MediaStream), caso ela esteja disponível. |
|
|
112
|
+
| stopLivenessDetection | Para a verificação de prova de vida imediatamente e a finaliza completamente. |
|
|
113
|
+
| pauseGettingFrames | Para a verificação temporariamente, a qual pode ser retomada posteriormente. |
|
|
114
|
+
| resumeGettingFrames | Retoma a verificação, caso ela tenha sido pausada com a função pauseGettingFrames. |
|
|
115
|
+
|
|
116
|
+
<br>
|
|
90
117
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
successCallback: ({ livenessId, successFrames }) => {},
|
|
118
|
+
```ts
|
|
119
|
+
import { livenessDetection } from 'santoid-sdk/liveness'
|
|
94
120
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
```
|
|
121
|
+
const livenessDetectionResponse = livenessDetection({
|
|
122
|
+
token: 'string',
|
|
123
|
+
track: 'string',
|
|
100
124
|
|
|
101
|
-
|
|
125
|
+
onStart ({ videoStream }) {
|
|
126
|
+
const video = document.querySelector('video')
|
|
127
|
+
video.srcObject = videoStream
|
|
128
|
+
},
|
|
102
129
|
|
|
103
|
-
|
|
130
|
+
onNextStep () {
|
|
131
|
+
pauseGettingFrames()
|
|
104
132
|
|
|
105
|
-
|
|
133
|
+
// Simulando intervalo de sucesso
|
|
134
|
+
setTimeout(() => {
|
|
135
|
+
resumeGettingFrames()
|
|
136
|
+
}, 1000)
|
|
137
|
+
},
|
|
106
138
|
|
|
107
|
-
|
|
108
|
-
|
|
139
|
+
// ...
|
|
140
|
+
})
|
|
109
141
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
// ...
|
|
113
|
-
})
|
|
142
|
+
// Funções retornadas
|
|
143
|
+
const { getVideoStream, stopLivenessDetection, pauseGettingFrames, resumeGettingFrames } = livenessDetectionResponse
|
|
114
144
|
|
|
115
|
-
const video = document.querySelector('video')
|
|
116
|
-
video.srcObject = videoStream
|
|
117
|
-
}
|
|
118
145
|
```
|
|
119
146
|
#### Utilização em Node.js
|
|
120
|
-
Caso deseje executar a função da prova de vida no servidor (Node.js),
|
|
147
|
+
Caso deseje executar a função da prova de vida no servidor (Node.js), **é obrigatório informar ao SDK a função de obtenção de frames** (getNextFrame), a qual deve retornar um valor no formato **string, ArrayBuffer, Buffer ou Buffer[]** contendo os dados da imagem do frame.
|
|
121
148
|
|
|
122
149
|
Fique atento ao caminho de importação da função, que muda para o caso de execução no servidor (Node.js):
|
|
123
150
|
|
|
151
|
+
#### Opções para a função livenessDetection (Node.js)
|
|
152
|
+
Para Node.js, as opções são quase as mesmas que as utilizadas em JavaScript, mudando apenas a obrigatoriedade de alguns valores. Abaixo estão listadas as propriedades que mudaram. As outras permanecem iguais às apresentadas anteriormente.
|
|
153
|
+
|
|
154
|
+
| Nome da propriedade | Função | É obrigatório? |
|
|
155
|
+
| ------------------- | ------ | -------------- |
|
|
156
|
+
| startGettingFrames | Função executada quando a obtenção de frames for iniciada. <br>Não precisa retornar nenhum valor. | Não |
|
|
157
|
+
| getNextFrame | Função que deve retornar os frames no formato **string, ArrayBuffer, Buffer ou Buffer[]**. <br><br>Será executada várias vezes e deve sempre devolver o próximo frame. | Sim |
|
|
158
|
+
|
|
159
|
+
<br>
|
|
160
|
+
|
|
161
|
+
#### Retorno da função livenessDetection (Node.js)
|
|
162
|
+
Os itens retornados pela função livenessDetection para Node.js são semelhantes àos retornados pela função para JavaScript, com exceção da função **getVideoStream**, que não é retornada.
|
|
163
|
+
|
|
124
164
|
```ts
|
|
125
165
|
import { livenessDetection } from 'santoid-sdk/node/liveness'
|
|
126
166
|
|
|
@@ -128,13 +168,17 @@ function getNextFrame (): string | ArrayBuffer | Buffer | Buffer[] {
|
|
|
128
168
|
// ...
|
|
129
169
|
}
|
|
130
170
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
171
|
+
const livenessDetectionResponse = livenessDetection({
|
|
172
|
+
token: 'string',
|
|
173
|
+
track: 'string',
|
|
174
|
+
|
|
175
|
+
getNextFrame,
|
|
134
176
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
177
|
+
// ...
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
// Funções retornadas
|
|
181
|
+
const { stopLivenessDetection, pauseGettingFrames, resumeGettingFrames } = livenessDetectionResponse
|
|
138
182
|
```
|
|
139
183
|
|
|
140
184
|
#### Utilização via CDN
|
|
@@ -144,6 +188,8 @@ Ao importar a biblioteca via tag script, a função **livenessDetection** ficar
|
|
|
144
188
|
|
|
145
189
|
Substitua o **VERSION** pela versão desejada.
|
|
146
190
|
|
|
191
|
+
Nesse modo de utilização, as opções disponíveis para configuração são as mesmas da versão JavaScript.
|
|
192
|
+
|
|
147
193
|
```html
|
|
148
194
|
<body>
|
|
149
195
|
<button onclick="startLiveness()">Iniciar</button>
|
|
@@ -151,10 +197,10 @@ Substitua o **VERSION** pela versão desejada.
|
|
|
151
197
|
<script src="https://cdn.jsdelivr.net/npm/santoid-sdk@VERSION/browser/liveness/index.js"></script>
|
|
152
198
|
|
|
153
199
|
<script>
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
track: '
|
|
157
|
-
token: '
|
|
200
|
+
function startLiveness () {
|
|
201
|
+
SantoiDSDK.livenessDetection({
|
|
202
|
+
track: 'string',
|
|
203
|
+
token: 'string',
|
|
158
204
|
|
|
159
205
|
// ...
|
|
160
206
|
})
|
|
@@ -163,103 +209,220 @@ Substitua o **VERSION** pela versão desejada.
|
|
|
163
209
|
</body>
|
|
164
210
|
```
|
|
165
211
|
|
|
166
|
-
### Fluxo Completo
|
|
167
|
-
Com a funcionalidade do teste do fluxo completo do Santo iD, é possível iniciar a análise de prova de vida juntamente com a análise de um documento enviado ao
|
|
212
|
+
### Teste do Fluxo Completo
|
|
213
|
+
Com a funcionalidade do teste do fluxo completo do Santo iD, é possível iniciar a análise de prova de vida juntamente com a análise de um documento de identificação enviado, realizando também a comparação da face encontrada na prova de vida com a do documento ao final do processo.
|
|
168
214
|
|
|
169
215
|
Ao chamar a função **uploadIdentificationDocument**, ela retorna um determinado conjunto de métodos, os quais possibilitam as análises.
|
|
170
216
|
|
|
171
217
|
Com o método retornado **startAll** é possível iniciar todas as análises simultaneamente, porém também é possível iniciar uma de cada vez com os métodos **startDocumentUpload**, **startLivenessDetection** e **startFaceComparison**.
|
|
172
218
|
|
|
173
|
-
Entretanto, o método **startFaceComparison** para a comparação entre as faces detectadas será chamado automaticamente quando
|
|
219
|
+
Entretanto, o método **startFaceComparison** para a comparação entre as faces detectadas será chamado automaticamente quando as outras análises forem concluídas, sendo mais útil apenas para reiniciar a comparação em caso de erro. Caso o método seja acionado quando as faces ainda não estiverem disponíveis para análise, a função **onError** será chamada com uma instância de erro como parâmetro, caso tenha sido fornecida.
|
|
174
220
|
|
|
175
221
|
#### Utilização em JavaScript
|
|
176
222
|
|
|
223
|
+
As propriedades disponíveis para utilização no objeto de opções estão listadas na tabela abaixo.
|
|
224
|
+
|
|
225
|
+
#### Opções para a função uploadIdentificationDocument (JavaScript)
|
|
226
|
+
|
|
227
|
+
| Nome da propriedade | Função | É obrigatório? |
|
|
228
|
+
| ------------------- | ------ | -------------- |
|
|
229
|
+
| token | Token de acesso obtido por meio da autenticação. | Sim |
|
|
230
|
+
| track | Identificador do processo que será utilizado. | Sim |
|
|
231
|
+
| livenessDetectionOptions | Opções para a verificação de prova de vida. | Não |
|
|
232
|
+
| 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 de cada tipo de processamento realizado (envio de documento, prova de vida, etc.). | Não |
|
|
233
|
+
| onError | Função executada quando ocorre erro em alguma das operações. | Não |
|
|
234
|
+
| onSuccess | Função executada quando as verificações são finalizadas com sucesso. <br><br>Disponibiliza pelos parâmetros o mesmo objeto fornecido pela função onUpdate, porém com todos os resultados preenchidos. | Não |
|
|
235
|
+
| onEnd | Função executada quando a verificação é finalizada, seja com erro ou com sucesso. | Não |
|
|
236
|
+
|
|
237
|
+
<br>
|
|
238
|
+
|
|
177
239
|
```ts
|
|
178
240
|
import { uploadIdentificationDocument } from 'santoid-sdk/liveness'
|
|
179
241
|
|
|
180
|
-
const
|
|
181
|
-
token: '
|
|
182
|
-
track: '
|
|
183
|
-
domain: '...',
|
|
242
|
+
const uploadIdentificationDocumentResponse = uploadIdentificationDocument({
|
|
243
|
+
token: 'string',
|
|
244
|
+
track: 'string',
|
|
184
245
|
|
|
185
|
-
|
|
246
|
+
onUpdate (results) => {
|
|
186
247
|
// ...
|
|
187
248
|
},
|
|
188
249
|
|
|
189
|
-
|
|
250
|
+
onError (error) {
|
|
190
251
|
// ...
|
|
191
252
|
},
|
|
192
253
|
|
|
193
|
-
|
|
254
|
+
onSuccess (results) {
|
|
194
255
|
// ...
|
|
195
256
|
},
|
|
196
257
|
|
|
197
|
-
|
|
258
|
+
onEnd () {
|
|
198
259
|
// ...
|
|
199
260
|
},
|
|
200
|
-
})
|
|
201
261
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
262
|
+
livenessDetectionOptions: {
|
|
263
|
+
getNextFrame () {
|
|
264
|
+
// ...
|
|
265
|
+
},
|
|
266
|
+
|
|
267
|
+
onSuccess () {
|
|
268
|
+
// ...
|
|
269
|
+
},
|
|
206
270
|
|
|
207
|
-
nextStepCallback (step) {
|
|
208
271
|
// ...
|
|
209
272
|
},
|
|
210
273
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
},
|
|
274
|
+
// ...
|
|
275
|
+
})
|
|
214
276
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
277
|
+
const {
|
|
278
|
+
startAll,
|
|
279
|
+
startDocumentUpload,
|
|
280
|
+
startLivenessDetection,
|
|
281
|
+
startFaceComparison,
|
|
282
|
+
getResults
|
|
283
|
+
} = uploadIdentificationDocumentResponse
|
|
284
|
+
```
|
|
218
285
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
286
|
+
#### Retorno da função uploadIdentificationDocument (JavaScript)
|
|
287
|
+
A função uploadIdentificationDocument retorna alguns métodos que podem ser utilizados para dar controlar as análises.
|
|
288
|
+
|
|
289
|
+
| Nome da propriedade | Função |
|
|
290
|
+
| ------------------- | ------ |
|
|
291
|
+
| startAll | Inicia todas as análises simultaneamente e espera dois parâmetros: o arquivo do documento (no formato **Blob** ou **File**) e, opcionalmente, as configurações para a prova de vida (caso deseje sobrescrevê-las). |
|
|
292
|
+
| startDocumentUpload | Inicia a etapa de upload/análise do documento que será enviado e espera receber um parâmetro com o arquivo. (no formato **Blob** ou **File**). |
|
|
293
|
+
| startLivenessDetection | Inicia a verificação de prova de vida e aceita as mesmas opções que a função livenessDetection, caso deseje sobrescrevê-las. |
|
|
294
|
+
| startFaceComparison | Inicia a comparação da face do documento com a face detectada na prova de vida. <br><br>Ela será iniciada automaticamente quando as outras análises forem concluídas, porém você pode usar essa função para fazer uma nova tentativa em caso de falha. |
|
|
295
|
+
| getResults | Retorna os status atuais de cada análise, no formato apresentado abaixo. |
|
|
296
|
+
|
|
297
|
+
<br>
|
|
298
|
+
|
|
299
|
+
#### Formato dos resultados da função uploadIdentificationDocument
|
|
300
|
+
```typescript
|
|
301
|
+
interface IUploadIdentificationDocumentResults {
|
|
302
|
+
uploadedDocument: Blob | File | null
|
|
303
|
+
typification: {
|
|
304
|
+
status: TResultStatuses
|
|
305
|
+
results: ITypificationResult | null
|
|
306
|
+
loading: boolean
|
|
307
|
+
error: any
|
|
308
|
+
}
|
|
309
|
+
liveness: {
|
|
310
|
+
status: TResultStatuses
|
|
311
|
+
results: ILivenessResults<Blob | File | null | undefined> | null
|
|
312
|
+
loading: boolean
|
|
313
|
+
error: any
|
|
314
|
+
}
|
|
315
|
+
faceMatch: {
|
|
316
|
+
status: TResultStatuses
|
|
317
|
+
results: IFaceMatchResult | null
|
|
318
|
+
loading: boolean
|
|
319
|
+
error: any
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
```
|
|
222
323
|
|
|
223
|
-
|
|
224
|
-
getNextFrame () {
|
|
225
|
-
return file
|
|
226
|
-
},
|
|
227
|
-
})
|
|
324
|
+
Em que:
|
|
228
325
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
startLivenessDetection({
|
|
232
|
-
// Opções para o liveness detection
|
|
326
|
+
```typescript
|
|
327
|
+
type TResultStatuses = 'success' | 'error' | null
|
|
233
328
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
},
|
|
329
|
+
interface ITypificationResult {
|
|
330
|
+
n_documents: number
|
|
237
331
|
|
|
238
|
-
|
|
239
|
-
|
|
332
|
+
predictOCR: Array<{
|
|
333
|
+
typification: {
|
|
334
|
+
document_type: string
|
|
335
|
+
ocr_success: boolean
|
|
336
|
+
typification_score: number
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
ocr_error?: boolean | null
|
|
340
|
+
|
|
341
|
+
ocr_message?: {
|
|
342
|
+
template: string
|
|
343
|
+
labels: any
|
|
344
|
+
} | null
|
|
345
|
+
|
|
346
|
+
ocr_extraction: {
|
|
347
|
+
template: string
|
|
348
|
+
|
|
349
|
+
labels: Array<{
|
|
350
|
+
x: number
|
|
351
|
+
y: number
|
|
352
|
+
w: number
|
|
353
|
+
h: number
|
|
354
|
+
bottomRight: number[]
|
|
355
|
+
topLeft: number[]
|
|
356
|
+
|
|
357
|
+
dataField?: string
|
|
358
|
+
dataFieldValue?: boolean
|
|
359
|
+
|
|
360
|
+
ocr?: string | null
|
|
361
|
+
ocr_score?: number
|
|
362
|
+
cropBase64?: string | null
|
|
363
|
+
|
|
364
|
+
serpro_query?: {
|
|
365
|
+
serpro_data: any
|
|
366
|
+
search_logs: {
|
|
367
|
+
document: string
|
|
368
|
+
type: string
|
|
369
|
+
search_time: string
|
|
370
|
+
status_code: number
|
|
371
|
+
message: string
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
validation?: Record<string, number | boolean>
|
|
376
|
+
}> | null
|
|
377
|
+
} | boolean
|
|
378
|
+
}>
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
export type TPositions = 'front' | 'right' | 'left' | 'up' | 'bottom'
|
|
382
|
+
|
|
383
|
+
interface ILivenessResults {
|
|
384
|
+
livenessId: string
|
|
385
|
+
successFrames: Record<TPositions, Blob>
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
interface IFaceMatchResult {
|
|
389
|
+
comparison_score: number
|
|
390
|
+
similarity_score: number
|
|
391
|
+
match: boolean
|
|
392
|
+
}
|
|
240
393
|
```
|
|
241
394
|
|
|
242
395
|
#### Utilização em Node.js
|
|
243
|
-
De forma semelhante à funcionalidade da Prova de Vida, para o Node.js o caminho da importação muda
|
|
396
|
+
De forma semelhante à funcionalidade da Prova de Vida, para o Node.js o caminho da importação muda
|
|
397
|
+
e a função **getNextFrame** passa a ser obrigatória e deve ser fornecida às opções para o livenessDetection.
|
|
398
|
+
|
|
399
|
+
Outro detalhe é que no Node.js todos os tipos envolvendo **File** ou **Blob** passam a utilizar valores do tipo **string, ArrayBuffer, Buffer ou Buffer[]**.
|
|
400
|
+
|
|
401
|
+
Todos as outras opções e retornos se mantém os mesmos da versão para JavaScript.
|
|
244
402
|
|
|
245
403
|
```ts
|
|
246
404
|
import { uploadIdentificationDocument } from 'santoid-sdk/node/liveness'
|
|
247
405
|
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
|
|
406
|
+
const uploadIdentificationDocumentResponse = uploadIdentificationDocument({
|
|
407
|
+
token: 'string',
|
|
408
|
+
track: 'string',
|
|
251
409
|
|
|
252
|
-
|
|
253
|
-
|
|
410
|
+
livenessDetectionOptions: {
|
|
411
|
+
getNextFrame () {
|
|
412
|
+
// ...
|
|
413
|
+
},
|
|
254
414
|
|
|
255
|
-
|
|
256
|
-
return someBuffer
|
|
415
|
+
// ...
|
|
257
416
|
},
|
|
417
|
+
|
|
418
|
+
// ...
|
|
258
419
|
})
|
|
259
420
|
```
|
|
260
421
|
|
|
422
|
+
|
|
261
423
|
#### Utilização via CDN
|
|
262
|
-
De forma semelhante à funcionalidade da Prova de Vida, a funcionalidade do teste do fluxo
|
|
424
|
+
De forma semelhante à funcionalidade da Prova de Vida, a funcionalidade do teste do fluxo
|
|
425
|
+
completo também é disponibilizada globalmente por meio da classe SantoiDSDK.
|
|
263
426
|
|
|
264
427
|
Substitua o **VERSION** pela versão desejada.
|
|
265
428
|
|
|
@@ -278,6 +441,3 @@ Substitua o **VERSION** pela versão desejada.
|
|
|
278
441
|
</script>
|
|
279
442
|
</body>
|
|
280
443
|
```
|
|
281
|
-
|
|
282
|
-
## Para desenvolvedores
|
|
283
|
-
Caso seja um desenvolvedor da SantoDigital que deseje realizar alterações no SDK, confira o arquivo CONTRIBUTING.md presente na versão do projeto que está no repositório.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type IBaseSDKOptions } from '../utils/types';
|
|
2
|
+
interface IBaseFormData {
|
|
3
|
+
append: (key: string, value: any, options?: string | undefined) => void;
|
|
4
|
+
}
|
|
5
|
+
type TFormDataClass = new () => IBaseFormData;
|
|
6
|
+
export interface IAbstractServiceOptions {
|
|
7
|
+
FormDataClass: TFormDataClass;
|
|
8
|
+
tryDecodeJwt: <TDecodeReturnType = any>(token: string) => TDecodeReturnType | null;
|
|
9
|
+
}
|
|
10
|
+
export declare class AbstractService {
|
|
11
|
+
options: IBaseSDKOptions;
|
|
12
|
+
serviceOptions: IAbstractServiceOptions;
|
|
13
|
+
baseUrl: string;
|
|
14
|
+
constructor(options: IBaseSDKOptions, serviceOptions: IAbstractServiceOptions);
|
|
15
|
+
request({ contentType, authToken, baseUrl, }?: {
|
|
16
|
+
contentType?: string | undefined;
|
|
17
|
+
authToken?: string | undefined;
|
|
18
|
+
baseUrl?: string | undefined;
|
|
19
|
+
}): import("axios").AxiosInstance;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AbstractService = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const constants_1 = require("../utils/constants");
|
|
9
|
+
class AbstractService {
|
|
10
|
+
constructor(options, serviceOptions) {
|
|
11
|
+
this.options = options;
|
|
12
|
+
this.serviceOptions = serviceOptions;
|
|
13
|
+
}
|
|
14
|
+
request(_a) {
|
|
15
|
+
var _b, _c, _d;
|
|
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;
|
|
17
|
+
const axiosConfig = {
|
|
18
|
+
baseURL: baseUrl,
|
|
19
|
+
headers: {
|
|
20
|
+
'Content-Type': contentType,
|
|
21
|
+
Authorization: `Bearer ${authToken}`,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
const decodedToken = this.serviceOptions.tryDecodeJwt(this.options.token);
|
|
25
|
+
const domain = (_c = this.options.domain) !== null && _c !== void 0 ? _c : (_d = decodedToken === null || decodedToken === void 0 ? void 0 : decodedToken.claims) === null || _d === void 0 ? void 0 : _d.domain;
|
|
26
|
+
if (axiosConfig.headers && domain) {
|
|
27
|
+
axiosConfig.headers.Domain = domain;
|
|
28
|
+
}
|
|
29
|
+
return axios_1.default.create(axiosConfig);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.AbstractService = AbstractService;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { AbstractService } from './AbstractService';
|
|
2
|
+
export declare class FaceMatchService<TFileType> extends AbstractService {
|
|
3
|
+
faceMatch(firstImage: TFileType, secondImage: TFileType): Promise<IFaceMatchResult>;
|
|
4
|
+
}
|
|
5
|
+
export interface IFaceMatchResult {
|
|
6
|
+
comparison_score: number;
|
|
7
|
+
similarity_score: number;
|
|
8
|
+
match: boolean;
|
|
9
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FaceMatchService = void 0;
|
|
4
|
+
const AbstractService_1 = require("./AbstractService");
|
|
5
|
+
class FaceMatchService extends AbstractService_1.AbstractService {
|
|
6
|
+
async faceMatch(firstImage, secondImage) {
|
|
7
|
+
const formData = new this.serviceOptions.FormDataClass();
|
|
8
|
+
formData.append('track', this.options.track);
|
|
9
|
+
formData.append('firstImage', firstImage, 'firstImage.jpg');
|
|
10
|
+
formData.append('secondImage', secondImage, 'secondImage.jpg');
|
|
11
|
+
const response = await this.request({ contentType: 'multipart/form-data' }).post('/api/v1/facematch/pair', formData, { params: { sensitive_data_compliance: true } });
|
|
12
|
+
return response.data;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.FaceMatchService = FaceMatchService;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { AbstractService } from './AbstractService';
|
|
2
|
+
export declare class TypificationService<TFileType> extends AbstractService {
|
|
3
|
+
predict(imageFile: TFileType): Promise<ITypificationResult>;
|
|
4
|
+
}
|
|
5
|
+
export interface ITypificationResult {
|
|
6
|
+
n_documents: number;
|
|
7
|
+
predictOCR: Array<{
|
|
8
|
+
typification: {
|
|
9
|
+
document_type: string;
|
|
10
|
+
ocr_success: boolean;
|
|
11
|
+
typification_score: number;
|
|
12
|
+
};
|
|
13
|
+
ocr_error?: boolean | null;
|
|
14
|
+
ocr_message?: {
|
|
15
|
+
template: string;
|
|
16
|
+
labels: any;
|
|
17
|
+
} | null;
|
|
18
|
+
ocr_extraction: {
|
|
19
|
+
template: string;
|
|
20
|
+
labels: Array<{
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
w: number;
|
|
24
|
+
h: number;
|
|
25
|
+
bottomRight: number[];
|
|
26
|
+
topLeft: number[];
|
|
27
|
+
dataField?: string;
|
|
28
|
+
dataFieldValue?: boolean;
|
|
29
|
+
ocr?: string | null;
|
|
30
|
+
ocr_score?: number;
|
|
31
|
+
cropBase64?: string | null;
|
|
32
|
+
serpro_query?: {
|
|
33
|
+
serpro_data: any;
|
|
34
|
+
search_logs: {
|
|
35
|
+
document: string;
|
|
36
|
+
type: string;
|
|
37
|
+
search_time: string;
|
|
38
|
+
status_code: number;
|
|
39
|
+
message: string;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
validation?: Record<string, number | boolean>;
|
|
43
|
+
}> | null;
|
|
44
|
+
} | boolean;
|
|
45
|
+
}>;
|
|
46
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TypificationService = void 0;
|
|
4
|
+
const AbstractService_1 = require("./AbstractService");
|
|
5
|
+
class TypificationService extends AbstractService_1.AbstractService {
|
|
6
|
+
async predict(imageFile) {
|
|
7
|
+
const formData = new this.serviceOptions.FormDataClass();
|
|
8
|
+
formData.append('track', this.options.track);
|
|
9
|
+
formData.append('imageFile', imageFile, 'imageFile.jpg');
|
|
10
|
+
const response = await this.request({ contentType: 'multipart/form-data' })
|
|
11
|
+
.post('/api/v3/typification/predict', formData);
|
|
12
|
+
return response.data;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.TypificationService = TypificationService;
|