santoid-sdk 2.0.2 → 3.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 +259 -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,11 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## Versão 3.0.0
|
|
4
|
+
|
|
5
|
+
### Mudanças
|
|
6
|
+
|
|
7
|
+
- Os nomes de métodos de callback disponíveis nas opções do SDK foram alterados do padrão **nome** + **Callback** para **on** + **Nome**
|
|
8
|
+
- O mecanismo de envio de frames foi melhorado para evitar o envio de frames fora de ordem
|
|
9
|
+
- 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
|
|
10
|
+
- Nova função **onStart**, executada quando a verificação de prova de vida é iniciada
|
|
11
|
+
- 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,105 @@ 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>Se retornar um valor do tipo MediaStream, ele será salvo e fornecido <br>por meio da função **getVideoStream**. | Não |
|
|
90
|
+
| getNextFrame | Função que deve retornar os frames no formato **File ou Blob**. <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>Disponibiliza pelos parâmetros um objeto contendo a stream da <br>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>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>Disponibiliza pelos parâmetros a instância do erro, a qual <br>contém um identificador (propriedade **code**). | Não |
|
|
100
|
+
| onSuccess | Função executada quando a verificação é finalizada com sucesso. <br>Disponibiliza pelos parâmetros um objeto com os resultados, compostos <br>pelo ID da solicitação (**livenessId**) <br>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
|
+
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.
|
|
104
|
+
|
|
105
|
+
#### Retorno da função livenessDetection (JavaScript)
|
|
106
|
+
A função livenessDetection retorna alguns métodos que possibilitam um melhor controle da verificação.
|
|
107
|
+
|
|
108
|
+
| Nome da propriedade | Função |
|
|
109
|
+
| ------------------- | ------ |
|
|
110
|
+
| getVideoStream | Retorna a stream dos frames (MediaStream), caso ela esteja disponível. |
|
|
111
|
+
| stopLivenessDetection | Para a verificação de prova de vida imediatamente e a finaliza completamente. |
|
|
112
|
+
| pauseGettingFrames | Para a verificação temporariamente, a qual pode ser retomada posteriormente. |
|
|
113
|
+
| resumeGettingFrames | Retoma a verificação, caso ela tenha sido pausada com a função pauseGettingFrames. |
|
|
90
114
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
successCallback: ({ livenessId, successFrames }) => {},
|
|
115
|
+
```ts
|
|
116
|
+
import { livenessDetection } from 'santoid-sdk/liveness'
|
|
94
117
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
}
|
|
99
|
-
```
|
|
118
|
+
const livenessDetectionResponse = livenessDetection({
|
|
119
|
+
token: 'string',
|
|
120
|
+
track: 'string',
|
|
100
121
|
|
|
101
|
-
|
|
122
|
+
onStart ({ videoStream }) {
|
|
123
|
+
const video = document.querySelector('video')
|
|
124
|
+
video.srcObject = videoStream
|
|
125
|
+
},
|
|
102
126
|
|
|
103
|
-
|
|
127
|
+
onNextStep () {
|
|
128
|
+
pauseGettingFrames()
|
|
104
129
|
|
|
105
|
-
|
|
130
|
+
// Simulando intervalo de sucesso
|
|
131
|
+
setTimeout(() => {
|
|
132
|
+
resumeGettingFrames()
|
|
133
|
+
}, 1000)
|
|
134
|
+
},
|
|
106
135
|
|
|
107
|
-
|
|
108
|
-
|
|
136
|
+
// ...
|
|
137
|
+
})
|
|
109
138
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
// ...
|
|
113
|
-
})
|
|
139
|
+
// Funções retornadas
|
|
140
|
+
const { getVideoStream, stopLivenessDetection, pauseGettingFrames, resumeGettingFrames } = livenessDetectionResponse
|
|
114
141
|
|
|
115
|
-
const video = document.querySelector('video')
|
|
116
|
-
video.srcObject = videoStream
|
|
117
|
-
}
|
|
118
142
|
```
|
|
119
143
|
#### Utilização em Node.js
|
|
120
|
-
Caso deseje executar a função da prova de vida no servidor (Node.js),
|
|
144
|
+
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 Buffer ou semelhante (string, ArrayBuffer, Buffer ou Buffer[]) contendo os dados da imagem do frame.
|
|
121
145
|
|
|
122
146
|
Fique atento ao caminho de importação da função, que muda para o caso de execução no servidor (Node.js):
|
|
123
147
|
|
|
148
|
+
#### Opções para a função livenessDetection (Node.js)
|
|
149
|
+
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.
|
|
150
|
+
|
|
151
|
+
| Nome da propriedade | Função | É obrigatório? |
|
|
152
|
+
| ------------------- | ------ | -------------- |
|
|
153
|
+
| startGettingFrames | Função executada quando a obtenção de frames for iniciada. <br>Não precisa retornar nenhum valor. | Não |
|
|
154
|
+
| getNextFrame | Função que deve retornar os frames no formato **Buffer ou semelhante (string, ArrayBuffer, Buffer ou Buffer[])**. <br>Será executada várias vezes e deve sempre devolver o próximo frame. | Sim |
|
|
155
|
+
|
|
156
|
+
#### Retorno da função livenessDetection (Node.js)
|
|
157
|
+
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.
|
|
158
|
+
|
|
124
159
|
```ts
|
|
125
160
|
import { livenessDetection } from 'santoid-sdk/node/liveness'
|
|
126
161
|
|
|
@@ -128,13 +163,17 @@ function getNextFrame (): string | ArrayBuffer | Buffer | Buffer[] {
|
|
|
128
163
|
// ...
|
|
129
164
|
}
|
|
130
165
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
166
|
+
const livenessDetectionResponse = livenessDetection({
|
|
167
|
+
token: 'string',
|
|
168
|
+
track: 'string',
|
|
169
|
+
|
|
170
|
+
getNextFrame,
|
|
134
171
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
172
|
+
// ...
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
// Funções retornadas
|
|
176
|
+
const { stopLivenessDetection, pauseGettingFrames, resumeGettingFrames } = livenessDetectionResponse
|
|
138
177
|
```
|
|
139
178
|
|
|
140
179
|
#### Utilização via CDN
|
|
@@ -144,6 +183,8 @@ Ao importar a biblioteca via tag script, a função **livenessDetection** ficar
|
|
|
144
183
|
|
|
145
184
|
Substitua o **VERSION** pela versão desejada.
|
|
146
185
|
|
|
186
|
+
Nesse modo de utilização, as opções disponíveis para configuração são as mesmas da versão JavaScript.
|
|
187
|
+
|
|
147
188
|
```html
|
|
148
189
|
<body>
|
|
149
190
|
<button onclick="startLiveness()">Iniciar</button>
|
|
@@ -151,10 +192,10 @@ Substitua o **VERSION** pela versão desejada.
|
|
|
151
192
|
<script src="https://cdn.jsdelivr.net/npm/santoid-sdk@VERSION/browser/liveness/index.js"></script>
|
|
152
193
|
|
|
153
194
|
<script>
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
track: '
|
|
157
|
-
token: '
|
|
195
|
+
function startLiveness () {
|
|
196
|
+
SantoiDSDK.livenessDetection({
|
|
197
|
+
track: 'string',
|
|
198
|
+
token: 'string',
|
|
158
199
|
|
|
159
200
|
// ...
|
|
160
201
|
})
|
|
@@ -163,103 +204,217 @@ Substitua o **VERSION** pela versão desejada.
|
|
|
163
204
|
</body>
|
|
164
205
|
```
|
|
165
206
|
|
|
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
|
|
207
|
+
### Teste do Fluxo Completo
|
|
208
|
+
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
209
|
|
|
169
210
|
Ao chamar a função **uploadIdentificationDocument**, ela retorna um determinado conjunto de métodos, os quais possibilitam as análises.
|
|
170
211
|
|
|
171
212
|
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
213
|
|
|
173
|
-
Entretanto, o método **startFaceComparison** para a comparação entre as faces detectadas será chamado automaticamente quando
|
|
214
|
+
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
215
|
|
|
175
216
|
#### Utilização em JavaScript
|
|
176
217
|
|
|
218
|
+
As propriedades disponíveis para utilização no objeto de opções estão listadas na tabela abaixo.
|
|
219
|
+
|
|
220
|
+
#### Opções para a função uploadIdentificationDocument (JavaScript)
|
|
221
|
+
|
|
222
|
+
| Nome da propriedade | Função | É obrigatório? |
|
|
223
|
+
| ------------------- | ------ | -------------- |
|
|
224
|
+
| token | Token de acesso obtido por meio da autenticação. | Sim |
|
|
225
|
+
| track | Identificador do processo que será utilizado. | Sim |
|
|
226
|
+
| livenessDetectionOptions | Opções para a verificação de prova de vida. | Não |
|
|
227
|
+
| onUpdate | Função executada toda vez que ocorre uma atualização no status geral <br>(quando alguma operação é iniciada ou concluída, quando ocorre erro, etc.). <br>Disponibiliza pelos parâmetros um objeto contendo as informações sobre a <br>situação de cada tipo de processamento realizado (envio de documento, prova de vida, etc.). | Não |
|
|
228
|
+
| onError | Função executada quando ocorre erro em alguma das operações. | Não |
|
|
229
|
+
| onSuccess | Função executada quando as verificações são finalizadas com sucesso. | Não |
|
|
230
|
+
| onEnd | Função executada quando a verificação é finalizada, seja com erro ou com sucesso. | Não |
|
|
231
|
+
|
|
177
232
|
```ts
|
|
178
233
|
import { uploadIdentificationDocument } from 'santoid-sdk/liveness'
|
|
179
234
|
|
|
180
|
-
const
|
|
181
|
-
token: '
|
|
182
|
-
track: '
|
|
183
|
-
domain: '...',
|
|
235
|
+
const uploadIdentificationDocumentResponse = uploadIdentificationDocument({
|
|
236
|
+
token: 'string',
|
|
237
|
+
track: 'string',
|
|
184
238
|
|
|
185
|
-
|
|
239
|
+
onUpdate (results) => {
|
|
186
240
|
// ...
|
|
187
241
|
},
|
|
188
242
|
|
|
189
|
-
|
|
243
|
+
onError (error) {
|
|
190
244
|
// ...
|
|
191
245
|
},
|
|
192
246
|
|
|
193
|
-
|
|
247
|
+
onSuccess (results) {
|
|
194
248
|
// ...
|
|
195
249
|
},
|
|
196
250
|
|
|
197
|
-
|
|
251
|
+
onEnd () {
|
|
198
252
|
// ...
|
|
199
253
|
},
|
|
200
|
-
})
|
|
201
254
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
255
|
+
livenessDetectionOptions: {
|
|
256
|
+
getNextFrame () {
|
|
257
|
+
// ...
|
|
258
|
+
},
|
|
206
259
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
260
|
+
onSuccess () {
|
|
261
|
+
// ...
|
|
262
|
+
},
|
|
210
263
|
|
|
211
|
-
errorCallback (error) {
|
|
212
264
|
// ...
|
|
213
265
|
},
|
|
214
266
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
},
|
|
267
|
+
// ...
|
|
268
|
+
})
|
|
218
269
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
270
|
+
const {
|
|
271
|
+
startAll,
|
|
272
|
+
startDocumentUpload,
|
|
273
|
+
startLivenessDetection,
|
|
274
|
+
startFaceComparison,
|
|
275
|
+
getResults
|
|
276
|
+
} = uploadIdentificationDocumentResponse
|
|
277
|
+
```
|
|
222
278
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
279
|
+
#### Retorno da função uploadIdentificationDocument (JavaScript)
|
|
280
|
+
A função uploadIdentificationDocument retorna alguns métodos que podem ser utilizados para dar controlar as análises.
|
|
281
|
+
|
|
282
|
+
| Nome da propriedade | Função |
|
|
283
|
+
| ------------------- | ------ |
|
|
284
|
+
| startAll | Inicia todas as análises simultaneamente e espera dois parâmetros: o arquivo do documento (no formato **Blob** ou **File**) e, <br>opcionalmente, as configurações para a prova de vida (caso deseje sobrescrevê-las). |
|
|
285
|
+
| 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**). |
|
|
286
|
+
| startLivenessDetection | Inicia a verificação de prova de vida e aceita as mesmas opções que a função livenessDetection, caso deseje sobrescrevê-las. |
|
|
287
|
+
| startFaceComparison | Inicia a comparação da face do documento com a face detectada na prova de vida. <br>Ela será iniciada automaticamente quando as outras análises forem concluídas, <br>porém você pode usar essa função para fazer uma nova tentativa em caso de falha. |
|
|
288
|
+
| getResults | Retorna os status atuais de cada análise, no formato apresentado abaixo. |
|
|
289
|
+
|
|
290
|
+
#### Formato dos resultados da função uploadIdentificationDocument
|
|
291
|
+
```typescript
|
|
292
|
+
interface IUploadIdentificationDocumentResults {
|
|
293
|
+
uploadedDocument: Blob | File | null
|
|
294
|
+
typification: {
|
|
295
|
+
status: TResultStatuses
|
|
296
|
+
results: ITypificationResult | null
|
|
297
|
+
loading: boolean
|
|
298
|
+
error: any
|
|
299
|
+
}
|
|
300
|
+
liveness: {
|
|
301
|
+
status: TResultStatuses
|
|
302
|
+
results: ILivenessResults<Blob | File | null | undefined> | null
|
|
303
|
+
loading: boolean
|
|
304
|
+
error: any
|
|
305
|
+
}
|
|
306
|
+
faceMatch: {
|
|
307
|
+
status: TResultStatuses
|
|
308
|
+
results: IFaceMatchResult | null
|
|
309
|
+
loading: boolean
|
|
310
|
+
error: any
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
```
|
|
228
314
|
|
|
229
|
-
|
|
230
|
-
startDocumentUpload(file)
|
|
231
|
-
startLivenessDetection({
|
|
232
|
-
// Opções para o liveness detection
|
|
315
|
+
Em que:
|
|
233
316
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
},
|
|
317
|
+
```typescript
|
|
318
|
+
type TResultStatuses = 'success' | 'error' | null
|
|
237
319
|
|
|
238
|
-
|
|
239
|
-
|
|
320
|
+
interface ITypificationResult {
|
|
321
|
+
n_documents: number
|
|
322
|
+
|
|
323
|
+
predictOCR: Array<{
|
|
324
|
+
typification: {
|
|
325
|
+
document_type: string
|
|
326
|
+
ocr_success: boolean
|
|
327
|
+
typification_score: number
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
ocr_error?: boolean | null
|
|
331
|
+
|
|
332
|
+
ocr_message?: {
|
|
333
|
+
template: string
|
|
334
|
+
labels: any
|
|
335
|
+
} | null
|
|
336
|
+
|
|
337
|
+
ocr_extraction: {
|
|
338
|
+
template: string
|
|
339
|
+
|
|
340
|
+
labels: Array<{
|
|
341
|
+
x: number
|
|
342
|
+
y: number
|
|
343
|
+
w: number
|
|
344
|
+
h: number
|
|
345
|
+
bottomRight: number[]
|
|
346
|
+
topLeft: number[]
|
|
347
|
+
|
|
348
|
+
dataField?: string
|
|
349
|
+
dataFieldValue?: boolean
|
|
350
|
+
|
|
351
|
+
ocr?: string | null
|
|
352
|
+
ocr_score?: number
|
|
353
|
+
cropBase64?: string | null
|
|
354
|
+
|
|
355
|
+
serpro_query?: {
|
|
356
|
+
serpro_data: any
|
|
357
|
+
search_logs: {
|
|
358
|
+
document: string
|
|
359
|
+
type: string
|
|
360
|
+
search_time: string
|
|
361
|
+
status_code: number
|
|
362
|
+
message: string
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
validation?: Record<string, number | boolean>
|
|
367
|
+
}> | null
|
|
368
|
+
} | boolean
|
|
369
|
+
}>
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
export type TPositions = 'front' | 'right' | 'left' | 'up' | 'bottom'
|
|
373
|
+
|
|
374
|
+
interface ILivenessResults {
|
|
375
|
+
livenessId: string
|
|
376
|
+
successFrames: Record<TPositions, Blob>
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
interface IFaceMatchResult {
|
|
380
|
+
comparison_score: number
|
|
381
|
+
similarity_score: number
|
|
382
|
+
match: boolean
|
|
383
|
+
}
|
|
240
384
|
```
|
|
241
385
|
|
|
242
386
|
#### Utilização em Node.js
|
|
243
|
-
De forma semelhante à funcionalidade da Prova de Vida, para o Node.js o caminho da importação muda
|
|
387
|
+
De forma semelhante à funcionalidade da Prova de Vida, para o Node.js o caminho da importação muda
|
|
388
|
+
e a função **getNextFrame** passa a ser obrigatória e deve ser fornecida às opções para o livenessDetection.
|
|
389
|
+
|
|
390
|
+
Outro detalhe é que no Node.js todos os tipos envolvendo **File** ou **Blob** passam a utilizar **Buffers**
|
|
391
|
+
ou outros tipos equivalentes (string, ArrayBuffer, Buffer ou Buffer[]).
|
|
392
|
+
|
|
393
|
+
Todos as outras opções e retornos se mantém os mesmos da versão para JavaScript.
|
|
244
394
|
|
|
245
395
|
```ts
|
|
246
396
|
import { uploadIdentificationDocument } from 'santoid-sdk/node/liveness'
|
|
247
397
|
|
|
248
|
-
const
|
|
249
|
-
|
|
250
|
-
|
|
398
|
+
const uploadIdentificationDocumentResponse = uploadIdentificationDocument({
|
|
399
|
+
token: 'string',
|
|
400
|
+
track: 'string',
|
|
251
401
|
|
|
252
|
-
|
|
253
|
-
|
|
402
|
+
livenessDetectionOptions: {
|
|
403
|
+
getNextFrame () {
|
|
404
|
+
// ...
|
|
405
|
+
},
|
|
254
406
|
|
|
255
|
-
|
|
256
|
-
return someBuffer
|
|
407
|
+
// ...
|
|
257
408
|
},
|
|
409
|
+
|
|
410
|
+
// ...
|
|
258
411
|
})
|
|
259
412
|
```
|
|
260
413
|
|
|
414
|
+
|
|
261
415
|
#### Utilização via CDN
|
|
262
|
-
De forma semelhante à funcionalidade da Prova de Vida, a funcionalidade do teste do fluxo
|
|
416
|
+
De forma semelhante à funcionalidade da Prova de Vida, a funcionalidade do teste do fluxo
|
|
417
|
+
completo também é disponibilizada globalmente por meio da classe SantoiDSDK.
|
|
263
418
|
|
|
264
419
|
Substitua o **VERSION** pela versão desejada.
|
|
265
420
|
|
|
@@ -278,6 +433,3 @@ Substitua o **VERSION** pela versão desejada.
|
|
|
278
433
|
</script>
|
|
279
434
|
</body>
|
|
280
435
|
```
|
|
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;
|