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.
Files changed (57) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +267 -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,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 (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,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 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><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
- // (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 }) => {},
118
+ ```ts
119
+ import { livenessDetection } from 'santoid-sdk/liveness'
94
120
 
95
- // (Opcional) Função executada quando a validação é finalizada
96
- endCallback: () => {},
97
- })
98
- }
99
- ```
121
+ const livenessDetectionResponse = livenessDetection({
122
+ token: 'string',
123
+ track: 'string',
100
124
 
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.
125
+ onStart ({ videoStream }) {
126
+ const video = document.querySelector('video')
127
+ video.srcObject = videoStream
128
+ },
102
129
 
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.
130
+ onNextStep () {
131
+ pauseGettingFrames()
104
132
 
105
- A função também retorna um método chamado **stopLivenessDetection** que pode ser utilizado para interromper a verificação de forma imediata.
133
+ // Simulando intervalo de sucesso
134
+ setTimeout(() => {
135
+ resumeGettingFrames()
136
+ }, 1000)
137
+ },
106
138
 
107
- ```ts
108
- import { livenessDetection } from 'santoid-sdk/liveness'
139
+ // ...
140
+ })
109
141
 
110
- async function startLivenessDetection () {
111
- const { videoStream, stopLivenessDetection } = await livenessDetection({
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), é 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).
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
- async function startLivenessDetection () {
132
- await livenessDetection({
133
- getNextFrame,
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
- async function startLiveness () {
155
- await SantoiDSDK.livenessDetection({
156
- track: 'test-track',
157
- token: '...', // Token recebido via autenticação no back-end
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 mesmo tempo.
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 os outros dois métodos forem chamados, sendo mais útil apenas para reiniciar a comparação em caso de erro.
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 { startAll, startDocumentUpload, startLivenessDetection } = uploadIdentificationDocument({
181
- token: '...',
182
- track: '...',
183
- domain: '...',
242
+ const uploadIdentificationDocumentResponse = uploadIdentificationDocument({
243
+ token: 'string',
244
+ track: 'string',
184
245
 
185
- resultChangeCallback (results) => {
246
+ onUpdate (results) => {
186
247
  // ...
187
248
  },
188
249
 
189
- errorCallback (error) {
250
+ onError (error) {
190
251
  // ...
191
252
  },
192
253
 
193
- successCallback (results) {
254
+ onSuccess (results) {
194
255
  // ...
195
256
  },
196
257
 
197
- endCallback () {
258
+ onEnd () {
198
259
  // ...
199
260
  },
200
- })
201
261
 
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
262
+ livenessDetectionOptions: {
263
+ getNextFrame () {
264
+ // ...
265
+ },
266
+
267
+ onSuccess () {
268
+ // ...
269
+ },
206
270
 
207
- nextStepCallback (step) {
208
271
  // ...
209
272
  },
210
273
 
211
- errorCallback (error) {
212
- // ...
213
- },
274
+ // ...
275
+ })
214
276
 
215
- successCallback (results) {
216
- // ...
217
- },
277
+ const {
278
+ startAll,
279
+ startDocumentUpload,
280
+ startLivenessDetection,
281
+ startFaceComparison,
282
+ getResults
283
+ } = uploadIdentificationDocumentResponse
284
+ ```
218
285
 
219
- endCallback () {
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
- // Opcional no ambiente client - Método para fornecer os frames para análise
224
- getNextFrame () {
225
- return file
226
- },
227
- })
324
+ Em que:
228
325
 
229
- // Iniciar análises separadamente
230
- startDocumentUpload(file)
231
- startLivenessDetection({
232
- // Opções para o liveness detection
326
+ ```typescript
327
+ type TResultStatuses = 'success' | 'error' | null
233
328
 
234
- nextStepCallback (step) {
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 e a função getNextFrame passa a ser obrigatória e deve ser fornecida às opções para o livenessDetection.
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 { startAll, startDocumentUpload, startLivenessDetection } = uploadIdentificationDocument({
249
- // ...
250
- })
406
+ const uploadIdentificationDocumentResponse = uploadIdentificationDocument({
407
+ token: 'string',
408
+ track: 'string',
251
409
 
252
- startAll(file, {
253
- // ...
410
+ livenessDetectionOptions: {
411
+ getNextFrame () {
412
+ // ...
413
+ },
254
414
 
255
- getNextFrame () {
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 completo também é disponibilizada globalmente por meio da classe SantoiDSDK.
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;