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.
Files changed (57) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +259 -107
  3. package/api/AbstractService.d.ts +21 -0
  4. package/api/AbstractService.js +32 -0
  5. package/api/FaceMatchService.d.ts +9 -0
  6. package/api/FaceMatchService.js +15 -0
  7. package/api/TypificationService.d.ts +46 -0
  8. package/api/TypificationService.js +15 -0
  9. package/browser/liveness/index.js +1 -1
  10. package/liveness/index.d.ts +1 -3
  11. package/liveness/index.js +2 -19
  12. package/liveness/methods/livenessDetection/Service.d.ts +28 -0
  13. package/liveness/methods/livenessDetection/Service.js +130 -0
  14. package/liveness/methods/livenessDetection/index.d.ts +15 -0
  15. package/liveness/methods/livenessDetection/index.js +46 -0
  16. package/liveness/methods/uploadIdentificationDocument/Service.d.ts +62 -0
  17. package/liveness/methods/uploadIdentificationDocument/Service.js +134 -0
  18. package/liveness/methods/uploadIdentificationDocument/index.d.ts +24 -0
  19. package/liveness/methods/uploadIdentificationDocument/index.js +26 -0
  20. package/liveness/utils/getNextFrame.d.ts +6 -5
  21. package/liveness/utils/getNextFrame.js +24 -19
  22. package/liveness/utils/index.d.ts +2 -2
  23. package/node/liveness/index.d.ts +1 -3
  24. package/node/liveness/index.js +2 -19
  25. package/node/liveness/methods/livenessDetection/Service.d.ts +6 -0
  26. package/node/liveness/methods/livenessDetection/Service.js +20 -0
  27. package/node/liveness/methods/livenessDetection/index.d.ts +13 -0
  28. package/node/liveness/methods/livenessDetection/index.js +46 -0
  29. package/node/liveness/methods/uploadIdentificationDocument/Service.d.ts +4 -0
  30. package/node/liveness/methods/uploadIdentificationDocument/Service.js +19 -0
  31. package/node/liveness/methods/uploadIdentificationDocument/index.d.ts +25 -0
  32. package/node/liveness/methods/uploadIdentificationDocument/index.js +28 -0
  33. package/node/liveness/utils/index.d.ts +2 -2
  34. package/package.json +3 -3
  35. package/utils/error.d.ts +24 -0
  36. package/utils/error.js +27 -0
  37. package/utils/index.d.ts +7 -0
  38. package/utils/index.js +44 -0
  39. package/utils/types.d.ts +25 -14
  40. package/utils/websocket.d.ts +18 -0
  41. package/utils/websocket.js +57 -0
  42. package/liveness/methods/livenessDetection.d.ts +0 -6
  43. package/liveness/methods/livenessDetection.js +0 -129
  44. package/liveness/methods/uploadIdentificationDocument.d.ts +0 -91
  45. package/liveness/methods/uploadIdentificationDocument.js +0 -234
  46. package/liveness/utils/types.d.ts +0 -5
  47. package/liveness/utils/types.js +0 -17
  48. package/liveness/utils/websocket.d.ts +0 -3
  49. package/liveness/utils/websocket.js +0 -34
  50. package/node/liveness/methods/livenessDetection.d.ts +0 -6
  51. package/node/liveness/methods/livenessDetection.js +0 -114
  52. package/node/liveness/methods/uploadIdentificationDocument.d.ts +0 -91
  53. package/node/liveness/methods/uploadIdentificationDocument.js +0 -235
  54. package/node/liveness/utils/types.d.ts +0 -6
  55. package/node/liveness/utils/types.js +0 -17
  56. package/node/liveness/utils/websocket.d.ts +0 -5
  57. 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 (em formato de objeto ou transformadas em base64) como parâmetro da função de inicialização.
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 parâmetros:
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
- async function startLivenessDetection () {
66
- await livenessDetection({
67
- token: 'string', // Token obtido por meio da autenticação
68
- track: 'string', // Processo
69
- customId: 'string', // (Opcional) ID customizado para auditoria
65
+ const livenessDetectionResponse = livenessDetection({
66
+ token: 'string',
67
+ track: 'string',
68
+ customId: 'string',
70
69
 
71
- // (Opcional no JavaScript, obrigatório no Node.js)
72
- // É necessário fornecer uma função que retorne os frames a serem verificados no formato Blob do JavaScript
73
- // A função será executada várias vezes, e o SDK espera que ela retorne um Blob a cada execução
74
- getNextFrame: () => {
75
- // ...
76
- },
70
+ getNextFrame: () => {
71
+ // ...
72
+ },
77
73
 
78
- // (Opcional) Função executada cada vez que uma nova posição é solicitada na verificação facial
79
- nextStepCallback: (step) => {},
74
+ // ...
75
+ })
80
76
 
81
- // (Opcional) Funções individuais para cada posição solicitada
82
- frontCallback: () => {},
83
- rightCallback: () => {},
84
- leftCallback: () => {},
85
- upCallback: () => {},
86
- bottomCallback: () => {},
77
+ const { getVideoStream, stopLivenessDetection, resumeGettingFrames, pauseGettingFrames } = livenessDetectionResponse
78
+ ```
87
79
 
88
- // (Opcional) Função executada em caso de erro
89
- errorCallback: ({ errorCode }) => {},
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
- // (Opcional) Função executada em caso de sucesso
92
- // O ID da solicitação e os frames com sucesso podem ser recebidos pelos parâmetros, como no exemplo abaixo
93
- successCallback: ({ livenessId, successFrames }) => {},
115
+ ```ts
116
+ import { livenessDetection } from 'santoid-sdk/liveness'
94
117
 
95
- // (Opcional) Função executada quando a validação é finalizada
96
- endCallback: () => {},
97
- })
98
- }
99
- ```
118
+ const livenessDetectionResponse = livenessDetection({
119
+ token: 'string',
120
+ track: 'string',
100
121
 
101
- 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. O próprio SDK iniciará a câmera e realizará todo o processo.
122
+ onStart ({ videoStream }) {
123
+ const video = document.querySelector('video')
124
+ video.srcObject = videoStream
125
+ },
102
126
 
103
- Caso opte por utilizar essa verificação padrão do SDK (sem fornecer a função getNextFrame), é possível receber a propriedade **videoStream** como retorno da função para mostrar os frames que estão sendo obtidos em um player de vídeo.
127
+ onNextStep () {
128
+ pauseGettingFrames()
104
129
 
105
- A função também retorna um método chamado **stopLivenessDetection** que pode ser utilizado para interromper a verificação de forma imediata.
130
+ // Simulando intervalo de sucesso
131
+ setTimeout(() => {
132
+ resumeGettingFrames()
133
+ }, 1000)
134
+ },
106
135
 
107
- ```ts
108
- import { livenessDetection } from 'santoid-sdk/liveness'
136
+ // ...
137
+ })
109
138
 
110
- async function startLivenessDetection () {
111
- const { videoStream, stopLivenessDetection } = await livenessDetection({
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), é obrigatório informar ao SDK a função de obtenção de frames, a qual deve retornar um Buffer ou semelhante (bytes da imagem do frame).
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
- async function startLivenessDetection () {
132
- await livenessDetection({
133
- getNextFrame,
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
- async function startLiveness () {
155
- await SantoiDSDK.livenessDetection({
156
- track: 'test-track',
157
- token: '...', // Token recebido via autenticação no back-end
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 mesmo tempo.
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 os outros dois métodos forem chamados, sendo mais útil apenas para reiniciar a comparação em caso de erro.
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 { startAll, startDocumentUpload, startLivenessDetection } = uploadIdentificationDocument({
181
- token: '...',
182
- track: '...',
183
- domain: '...',
235
+ const uploadIdentificationDocumentResponse = uploadIdentificationDocument({
236
+ token: 'string',
237
+ track: 'string',
184
238
 
185
- resultChangeCallback (results) => {
239
+ onUpdate (results) => {
186
240
  // ...
187
241
  },
188
242
 
189
- errorCallback (error) {
243
+ onError (error) {
190
244
  // ...
191
245
  },
192
246
 
193
- successCallback (results) {
247
+ onSuccess (results) {
194
248
  // ...
195
249
  },
196
250
 
197
- endCallback () {
251
+ onEnd () {
198
252
  // ...
199
253
  },
200
- })
201
254
 
202
- // Iniciar análises ao mesmo tempo
203
- startAll(file, {
204
- // Opções para o liveness detection
205
- // São os mesmos da função livenessDetection, porém não é necessário fornecer o token, a track e o domain novamente aqui
255
+ livenessDetectionOptions: {
256
+ getNextFrame () {
257
+ // ...
258
+ },
206
259
 
207
- nextStepCallback (step) {
208
- // ...
209
- },
260
+ onSuccess () {
261
+ // ...
262
+ },
210
263
 
211
- errorCallback (error) {
212
264
  // ...
213
265
  },
214
266
 
215
- successCallback (results) {
216
- // ...
217
- },
267
+ // ...
268
+ })
218
269
 
219
- endCallback () {
220
- // ...
221
- },
270
+ const {
271
+ startAll,
272
+ startDocumentUpload,
273
+ startLivenessDetection,
274
+ startFaceComparison,
275
+ getResults
276
+ } = uploadIdentificationDocumentResponse
277
+ ```
222
278
 
223
- // Opcional no ambiente client - Método para fornecer os frames para análise
224
- getNextFrame () {
225
- return file
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
- // Iniciar análises separadamente
230
- startDocumentUpload(file)
231
- startLivenessDetection({
232
- // Opções para o liveness detection
315
+ Em que:
233
316
 
234
- nextStepCallback (step) {
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 e a função getNextFrame passa a ser obrigatória e deve ser fornecida às opções para o livenessDetection.
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 { startAll, startDocumentUpload, startLivenessDetection } = uploadIdentificationDocument({
249
- // ...
250
- })
398
+ const uploadIdentificationDocumentResponse = uploadIdentificationDocument({
399
+ token: 'string',
400
+ track: 'string',
251
401
 
252
- startAll(file, {
253
- // ...
402
+ livenessDetectionOptions: {
403
+ getNextFrame () {
404
+ // ...
405
+ },
254
406
 
255
- getNextFrame () {
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 completo também é disponibilizada globalmente por meio da classe SantoiDSDK.
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;