santoid-sdk 3.0.4 → 4.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 (50) hide show
  1. package/.eslintrc.js +1 -0
  2. package/CHANGELOG.md +11 -0
  3. package/README.md +11 -9
  4. package/api/AbstractService.d.ts +2 -2
  5. package/api/AbstractService.js +13 -5
  6. package/browser/index.js +1 -0
  7. package/client/embedded/index.d.ts +2 -0
  8. package/client/embedded/index.js +5 -0
  9. package/client/embedded/methods/insertUploadIdentificationDocument/index.d.ts +11 -0
  10. package/client/embedded/methods/insertUploadIdentificationDocument/index.js +24 -0
  11. package/client/index.d.ts +8 -0
  12. package/client/index.js +11 -0
  13. package/{node → client}/liveness/index.d.ts +0 -4
  14. package/{node → client}/liveness/index.js +0 -5
  15. package/{liveness → client/liveness}/methods/livenessDetection/Service.d.ts +2 -2
  16. package/{liveness → client/liveness}/methods/livenessDetection/Service.js +3 -3
  17. package/{liveness → client/liveness}/methods/livenessDetection/index.d.ts +1 -1
  18. package/{liveness → client/liveness}/methods/livenessDetection/index.js +8 -8
  19. package/{liveness → client/liveness}/methods/uploadIdentificationDocument/Service.d.ts +4 -4
  20. package/{liveness → client/liveness}/methods/uploadIdentificationDocument/Service.js +17 -17
  21. package/{liveness → client/liveness}/methods/uploadIdentificationDocument/index.d.ts +2 -2
  22. package/package.json +4 -4
  23. package/{node → server}/auth/index.js +4 -6
  24. package/server/index.d.ts +6 -0
  25. package/server/index.js +9 -0
  26. package/{liveness → server/liveness}/index.d.ts +0 -4
  27. package/{liveness → server/liveness}/index.js +0 -5
  28. package/{node → server}/liveness/methods/livenessDetection/Service.d.ts +1 -1
  29. package/{node → server}/liveness/methods/livenessDetection/Service.js +1 -1
  30. package/{node → server}/liveness/methods/livenessDetection/index.js +6 -6
  31. package/{node → server}/liveness/methods/uploadIdentificationDocument/Service.d.ts +1 -1
  32. package/{node → server}/liveness/methods/uploadIdentificationDocument/Service.js +1 -1
  33. package/{node → server}/liveness/methods/uploadIdentificationDocument/index.d.ts +3 -3
  34. package/utils/constants.d.ts +1 -0
  35. package/utils/constants.js +2 -1
  36. package/utils/index.js +2 -2
  37. package/utils/types.d.ts +1 -0
  38. package/utils/websocket.js +6 -1
  39. package/webpack.config.cjs +3 -3
  40. package/browser/liveness/index.js +0 -1
  41. /package/{liveness → client/liveness}/methods/uploadIdentificationDocument/index.js +0 -0
  42. /package/{liveness → client/liveness}/utils/getNextFrame.d.ts +0 -0
  43. /package/{liveness → client/liveness}/utils/getNextFrame.js +0 -0
  44. /package/{liveness → client/liveness}/utils/index.d.ts +0 -0
  45. /package/{liveness → client/liveness}/utils/index.js +0 -0
  46. /package/{node → server}/auth/index.d.ts +0 -0
  47. /package/{node → server}/liveness/methods/livenessDetection/index.d.ts +0 -0
  48. /package/{node → server}/liveness/methods/uploadIdentificationDocument/index.js +0 -0
  49. /package/{node → server}/liveness/utils/index.d.ts +0 -0
  50. /package/{node → server}/liveness/utils/index.js +0 -0
package/.eslintrc.js CHANGED
@@ -35,5 +35,6 @@ module.exports = {
35
35
  '@typescript-eslint/strict-boolean-expressions': 'off',
36
36
  '@typescript-eslint/no-misused-promises': 'off',
37
37
  '@typescript-eslint/no-extraneous-class': 'off',
38
+ '@typescript-eslint/no-floating-promises': 'off',
38
39
  },
39
40
  }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## Versão 4.0.0
4
+
5
+ ### Mudanças
6
+ - Os caminhos de importação dos itens da biblioteca mudaram: agora para importar as ferramentas para utilização em ambientes JavaScript deve ser usado o caminho /client e as ferramentas para utilização em Node.js utilizam o caminho /server. Para uso via CDN, o caminho continua sendo /browser, porém sem a terminação /liveness.
7
+ - Foram incluídas funções para facilitar a incorporação do Santo iD em sites externos.
8
+
9
+ ## Versão 3.1.0
10
+
11
+ ### Mudanças
12
+ - Adicionando nova propriedade "useBillingAccounts" às opções do SDK, que ativa a utilização das contas de faturamento customizadas definidas no domínio utilizado.
13
+
3
14
  ## Versão 3.0.4
4
15
 
5
16
  ### Correções
package/README.md CHANGED
@@ -24,7 +24,7 @@ No seu projeto, você pode colocar o arquivo de credenciais em um determinado lo
24
24
  Dessa forma, após certificar-se de que o usuário tem autorização de acordo com as regras de negócio de sua aplicação, inicialize o SDK da forma abaixo:
25
25
 
26
26
  ```ts
27
- import { initialize } from 'santoid-sdk/node/auth'
27
+ import { initialize } from 'santoid-sdk/server/auth'
28
28
 
29
29
  async function startSDK () {
30
30
  const token = await initialize()
@@ -38,7 +38,7 @@ startSDK()
38
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
- import { initialize } from 'santoid-sdk/node/auth'
41
+ import { initialize } from 'santoid-sdk/server/auth'
42
42
 
43
43
  async function startSDK () {
44
44
  const token = await initialize({
@@ -60,7 +60,7 @@ Atualmente, o SDK conta com a funcionalidade de **Prova de Vida**, que possibili
60
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
- import { livenessDetection } from 'santoid-sdk/liveness'
63
+ import { livenessDetection } from 'santoid-sdk/client/liveness'
64
64
 
65
65
  const livenessDetectionResponse = livenessDetection({
66
66
  token: 'string',
@@ -86,6 +86,7 @@ As propriedades disponíveis para utilização no objeto de opções estão list
86
86
  | token | Token de acesso obtido por meio da autenticação. | Sim |
87
87
  | track | Identificador do processo que será utilizado. | Sim |
88
88
  | customId | Identificador customizado para auditoria. | Não |
89
+ | useBillingAccounts | Booleano que controla a utilização das contas de faturamento customizadas | Não |
89
90
  | 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
91
  | 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
92
  | stopGettingFrames | Função executada quando a obtenção de frames for finalizada. | Não |
@@ -116,7 +117,7 @@ A função livenessDetection retorna alguns métodos que possibilitam um melhor
116
117
  <br>
117
118
 
118
119
  ```ts
119
- import { livenessDetection } from 'santoid-sdk/liveness'
120
+ import { livenessDetection } from 'santoid-sdk/client/liveness'
120
121
 
121
122
  const livenessDetectionResponse = livenessDetection({
122
123
  token: 'string',
@@ -162,7 +163,7 @@ Para Node.js, as opções são quase as mesmas que as utilizadas em JavaScript,
162
163
  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
164
 
164
165
  ```ts
165
- import { livenessDetection } from 'santoid-sdk/node/liveness'
166
+ import { livenessDetection } from 'santoid-sdk/server/liveness'
166
167
 
167
168
  function getNextFrame (): string | ArrayBuffer | Buffer | Buffer[] {
168
169
  // ...
@@ -194,7 +195,7 @@ Nesse modo de utilização, as opções disponíveis para configuração são as
194
195
  <body>
195
196
  <button onclick="startLiveness()">Iniciar</button>
196
197
 
197
- <script src="https://cdn.jsdelivr.net/npm/santoid-sdk@VERSION/browser/liveness/index.js"></script>
198
+ <script src="https://cdn.jsdelivr.net/npm/santoid-sdk@VERSION/browser/index.js"></script>
198
199
 
199
200
  <script>
200
201
  function startLiveness () {
@@ -228,6 +229,7 @@ As propriedades disponíveis para utilização no objeto de opções estão list
228
229
  | ------------------- | ------ | -------------- |
229
230
  | token | Token de acesso obtido por meio da autenticação. | Sim |
230
231
  | track | Identificador do processo que será utilizado. | Sim |
232
+ | useBillingAccounts | Booleano que controla a utilização das contas de faturamento customizadas | Não |
231
233
  | livenessDetectionOptions | Opções para a verificação de prova de vida. | Não |
232
234
  | 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
235
  | onError | Função executada quando ocorre erro em alguma das operações. | Não |
@@ -237,7 +239,7 @@ As propriedades disponíveis para utilização no objeto de opções estão list
237
239
  <br>
238
240
 
239
241
  ```ts
240
- import { uploadIdentificationDocument } from 'santoid-sdk/liveness'
242
+ import { uploadIdentificationDocument } from 'santoid-sdk/client/liveness'
241
243
 
242
244
  const uploadIdentificationDocumentResponse = uploadIdentificationDocument({
243
245
  token: 'string',
@@ -401,7 +403,7 @@ Outro detalhe é que no Node.js todos os tipos envolvendo **File** ou **Blob** p
401
403
  Todos as outras opções e retornos se mantém os mesmos da versão para JavaScript.
402
404
 
403
405
  ```ts
404
- import { uploadIdentificationDocument } from 'santoid-sdk/node/liveness'
406
+ import { uploadIdentificationDocument } from 'santoid-sdk/server/liveness'
405
407
 
406
408
  const uploadIdentificationDocumentResponse = uploadIdentificationDocument({
407
409
  token: 'string',
@@ -430,7 +432,7 @@ Substitua o **VERSION** pela versão desejada.
430
432
  <body>
431
433
  <button onclick="startUploadIdentificationDocument()">Iniciar</button>
432
434
 
433
- <script src="https://cdn.jsdelivr.net/npm/santoid-sdk@VERSION/browser/liveness/index.js"></script>
435
+ <script src="https://cdn.jsdelivr.net/npm/santoid-sdk@VERSION/browser/index.js"></script>
434
436
 
435
437
  <script>
436
438
  async function startUploadIdentificationDocument () {
@@ -8,10 +8,10 @@ export interface IAbstractServiceOptions {
8
8
  tryDecodeJwt: <TDecodeReturnType = any>(token: string) => TDecodeReturnType | null;
9
9
  }
10
10
  export declare class AbstractService {
11
- options: IBaseSDKOptions;
11
+ options: Partial<IBaseSDKOptions>;
12
12
  serviceOptions: IAbstractServiceOptions;
13
13
  baseUrl: string;
14
- constructor(options: IBaseSDKOptions, serviceOptions: IAbstractServiceOptions);
14
+ constructor(options: Partial<IBaseSDKOptions>, serviceOptions: IAbstractServiceOptions);
15
15
  request({ contentType, authToken, baseUrl, }?: {
16
16
  contentType?: string | undefined;
17
17
  authToken?: string | undefined;
@@ -12,7 +12,7 @@ class AbstractService {
12
12
  this.serviceOptions = serviceOptions;
13
13
  }
14
14
  request(_a) {
15
- var _b, _c, _d;
15
+ var _b, _c;
16
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
17
  const axiosConfig = {
18
18
  baseURL: baseUrl,
@@ -21,10 +21,18 @@ class AbstractService {
21
21
  Authorization: `Bearer ${authToken}`,
22
22
  },
23
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;
24
+ let domain = this.options.domain;
25
+ if (!this.options.domain && this.options.token) {
26
+ const decodedToken = this.serviceOptions.tryDecodeJwt(this.options.token);
27
+ domain = (_c = decodedToken === null || decodedToken === void 0 ? void 0 : decodedToken.claims) === null || _c === void 0 ? void 0 : _c.domain;
28
+ }
29
+ if (axiosConfig.headers) {
30
+ if (domain) {
31
+ axiosConfig.headers.Domain = domain;
32
+ }
33
+ if (this.options.useBillingAccounts) {
34
+ axiosConfig.headers.clientCredentials = true;
35
+ }
28
36
  }
29
37
  return axios_1.default.create(axiosConfig);
30
38
  }
@@ -0,0 +1 @@
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("SantoiDSDK",[],t):"object"==typeof exports?exports.SantoiDSDK=t():e.SantoiDSDK=t()}(this,(()=>(()=>{"use strict";var e={373:function(e,t,n){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractService=void 0;const r=o(n(218)),s=n(661);t.AbstractService=class{constructor(e,t){this.options=e,this.serviceOptions=t}request(e){var t,n,{contentType:o="application/json",authToken:i=this.options.token,baseUrl:a=(null!==(t=this.options.customApiUrl)&&void 0!==t?t:s.API_GATEWAY_URL)}=void 0===e?{}:e;const c={baseURL:a,headers:{"Content-Type":o,Authorization:`Bearer ${i}`}};let l=this.options.domain;if(!this.options.domain&&this.options.token){const e=this.serviceOptions.tryDecodeJwt(this.options.token);l=null===(n=null==e?void 0:e.claims)||void 0===n?void 0:n.domain}return c.headers&&(l&&(c.headers.Domain=l),this.options.useBillingAccounts&&(c.headers.clientCredentials=!0)),r.default.create(c)}}},605:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FaceMatchService=void 0;const o=n(373),r=n(951);class s extends o.AbstractService{async faceMatch(e,t){return await(0,r.retryAsyncFunctionXTimes)((async()=>{const n=new this.serviceOptions.FormDataClass;return n.append("track",this.options.track),n.append("firstImage",e,"firstImage.jpg"),n.append("secondImage",t,"secondImage.jpg"),(await this.request({contentType:"multipart/form-data"}).post("/api/v1/facematch/pair",n,{params:{sensitive_data_compliance:!0}})).data}))}}t.FaceMatchService=s},144:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TypificationService=void 0;const o=n(373),r=n(951);class s extends o.AbstractService{async predict(e){return await(0,r.retryAsyncFunctionXTimes)((async()=>{const t=new this.serviceOptions.FormDataClass;return t.append("track",this.options.track),t.append("imageFile",e,"imageFile.jpg"),(await this.request({contentType:"multipart/form-data"}).post("/api/v3/typification/predict",t)).data}))}}t.TypificationService=s},122:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.insertUploadIdentificationDocument=void 0;const o=n(661);t.insertUploadIdentificationDocument=function(e,t){var n,r,s;const i=t?document.querySelector(t):document.body;if(!i)throw new Error("Cannot find target element");const a=document.createElement("iframe");a.style.overflow="hidden",a.style.border="0",a.setAttribute("width",null!==(n=e.width)&&void 0!==n?n:"100%"),a.setAttribute("height",null!==(r=e.height)&&void 0!==r?r:"550px"),a.setAttribute("scrolling","no");let c=`${null!==(s=e.customAppUrl)&&void 0!==s?s:o.APPLICATION_URL}/share/domains/${e.domain}/tracks/${e.track}/flow/${e.flow}/embedded`;e.token&&(c+=`?accessToken=${e.token}`),a.setAttribute("src",c),i.appendChild(a)}},42:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LivenessDetectionService=void 0;const o=n(551),r=n(620),s=n(951),i=n(661);t.LivenessDetectionService=class{constructor(e,t){this.frameGetControls={},this.currentStep="front",this.pauseSendingFramesToWebSocket=!1,this.websocketClosedBySDK=!1,this.validationSuccess=!1,this.canSendNextBytes=!0,this.endCalled=!1,this.cancelSendingFramesToWebsocket=void 0,this.successFrames={front:void 0,right:void 0,left:void 0,up:void 0,bottom:void 0},this.options=e,this.abstractWebSocket=t}async onWebSocketMessage(e){var t,n,r,i,a,c,l,u;const d=e.data,p=JSON.parse(d);return(null==p?void 0:p.validation)&&this.currentStep&&(this.successFrames[this.currentStep]=this.lastSentBytes),(null==p?void 0:p.next_step)&&!p.error&&(this.currentStep=p.next_step,await(null===(n=(t=this.options).onNextStep)||void 0===n?void 0:n.call(t,p.next_step)),await(null===(i=(r=this.options)[`on${(0,s.capitalizeFirstLetter)(p.next_step)}Step`])||void 0===i?void 0:i.call(r))),p&&(this.canSendNextBytes=!!(null==p?void 0:p.can_send_next_bytes)),(null==p?void 0:p.success)&&(this.successFrames.bottom=this.lastSentBytes,this.validationSuccess=!0,await(null===(c=(a=this.options).onSuccess)||void 0===c?void 0:c.call(a,{livenessId:p.livenessId,successFrames:this.successFrames})),await this.stopLivenessDetection()),(null==p?void 0:p.error)&&await(null===(u=(l=this.options).onError)||void 0===u?void 0:u.call(l,new o.SDKError({message:"Wrong position",code:o.ELivenessDetectionErrorCodes.WRONG_POSITION}))),p}async stopLivenessDetection(){var e,t,n,o,r;await(0,s.waitFor)((()=>!!this.cancelSendingFramesToWebsocket)),null===(e=this.cancelSendingFramesToWebsocket)||void 0===e||e.call(this),await(null===(n=(t=this.frameGetControls).stopGettingFrames)||void 0===n?void 0:n.call(t)),this.abstractWebSocket.disconnectFromWebSocket(),this.endCalled||(await(null===(r=(o=this.options).onEnd)||void 0===r?void 0:r.call(o)),this.endCalled=!0),this.websocketClosedBySDK=!0}async sendFramesToWebSocket(){var e,t;try{if(this.canSendNextBytes&&!this.pauseSendingFramesToWebSocket){const n=await(null===(t=(e=this.frameGetControls).getNextFrame)||void 0===t?void 0:t.call(e));n&&(this.abstractWebSocket.send(n),this.lastSentBytes=n,this.canSendNextBytes=!1)}}catch(e){await this.stopLivenessDetection()}}async onConnect(){var e,t,n,o,a,c,l,u,d,p;try{if(this.options.getNextFrame)this.frameGetControls.startGettingFrames=this.options.startGettingFrames,this.frameGetControls.getNextFrame=this.options.getNextFrame,this.frameGetControls.stopGettingFrames=this.options.stopGettingFrames,this.frameGetControls.videoStream=await(null===(t=(e=this.options).startGettingFrames)||void 0===t?void 0:t.call(e));else{const e=await(0,r.getDefaultFrameControls)();this.frameGetControls.startGettingFrames=e.startGettingFrames,this.frameGetControls.getNextFrame=e.getNextFrame,this.frameGetControls.stopGettingFrames=e.stopGettingFrames,this.frameGetControls.videoStream=await(null===(o=(n=this.frameGetControls).startGettingFrames)||void 0===o?void 0:o.call(n))}await(null===(c=(a=this.options).onStart)||void 0===c?void 0:c.call(a,{videoStream:this.getVideoStream()})),await(null===(u=(l=this.options).onNextStep)||void 0===u?void 0:u.call(l,"front")),await(null===(p=(d=this.options).onFrontStep)||void 0===p?void 0:p.call(d)),this.cancelSendingFramesToWebsocket=(0,s.callAsyncFunctionEveryXSeconds)((async()=>{await this.sendFramesToWebSocket()}),i.SEND_FRAMES_INTERVAL_MS)}catch(e){await this.onError()}}async onError(){var e,t;this.validationSuccess||(await(null===(t=(e=this.options).onError)||void 0===t?void 0:t.call(e,new o.SDKError({message:"Internal Error",code:o.EDefaultErrorCodes.INTERNAL_ERROR}))),await this.stopLivenessDetection())}resumeGettingFrames(){this.pauseSendingFramesToWebSocket=!1}pauseGettingFrames(){this.pauseSendingFramesToWebSocket=!0}getVideoStream(){var e;return null===(e=this.frameGetControls)||void 0===e?void 0:e.videoStream}}},234:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.livenessDetection=void 0;const o=n(42),r=n(551),s=n(706),i=n(616);t.livenessDetection=function(e){var t;try{const n=new s.AbstractWebSocket({WebSocketClass:null!==(t=e.CustomWebSocketClass)&&void 0!==t?t:WebSocket,decodeJwt:i.decodeJwt},e);n.startConnection();const r=new o.LivenessDetectionService(e,n);return n.waitForWebSocketConnection().then((()=>{r.onConnect()})).catch((()=>{r.onError()})),n.addListener("message",(e=>{r.onWebSocketMessage(e)})),n.addListener("error",(()=>{r.onError()})),n.addListener("close",(()=>{r.onError()})),{getVideoStream:()=>r.getVideoStream(),stopLivenessDetection:async()=>{await r.stopLivenessDetection()},resumeGettingFrames:()=>{r.resumeGettingFrames()},pauseGettingFrames:()=>{r.pauseGettingFrames()}}}catch(e){throw new r.SDKError({message:"Error while starting SDK",code:r.EDefaultErrorCodes.INITIALIZATION_ERROR})}}},171:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UploadIdentificationDocumentService=void 0;const o=n(144),r=n(605),s=n(551),i=n(616);t.UploadIdentificationDocumentService=class{constructor(e,t){this.results={uploadedDocument:null,typification:{status:null,results:null,loading:!1,error:null},liveness:{status:null,results:null,loading:!1,error:null},faceMatch:{status:null,results:null,loading:!1,error:null}},this.options=e,this.internalOptions=t,this.typificationService=new o.TypificationService(e,{FormDataClass:FormData,tryDecodeJwt:i.tryDecodeJwt}),this.faceMatchService=new r.FaceMatchService(e,{FormDataClass:FormData,tryDecodeJwt:i.tryDecodeJwt})}getResults(){return this.results}async updateResults(e){var t,n,o,r,s,i;this.results=Object.assign(Object.assign({},this.results),e),await(null===(n=(t=this.options).onUpdate)||void 0===n?void 0:n.call(t,this.results)),e.faceMatch||this.tryStartFaceMatch(),Object.entries(this.results).every((([e,t])=>"uploadedDocument"===e||!!t.results))&&(await(null===(r=(o=this.options).onSuccess)||void 0===r?void 0:r.call(o,this.results)),await(null===(i=(s=this.options).onEnd)||void 0===i?void 0:i.call(s)))}updateUploadedDocument(e){this.results.uploadedDocument=e}async startDocumentUpload(e){var t,n;try{this.updateResults({typification:{status:null,results:null,loading:!0,error:null}}),this.updateUploadedDocument(e);const t=await this.typificationService.predict(e);this.updateResults({typification:{status:"success",results:t,loading:!1,error:null}})}catch(e){const o=new s.SDKError({message:"Error during document upload/analysis",code:s.EUploadIdentificationDocumentErrorCodes.DOCUMENT_ANALYSIS_ERROR,details:e});await(null===(n=(t=this.options).onError)||void 0===n?void 0:n.call(t,o)),this.updateResults({typification:{status:"error",results:null,loading:!1,error:o}})}}startLivenessDetection(e){var t,n;const o=Object.assign(Object.assign({},this.options.livenessDetectionOptions),e);this.updateResults({liveness:{results:null,status:null,loading:!0,error:null}});try{return this.internalOptions.livenessDetection(Object.assign(Object.assign({domain:this.options.domain,customId:this.options.customId,customWebSocketUrl:this.options.customWebSocketUrl,token:this.options.token,track:this.options.track},o),{onSuccess:async e=>{var t;await(null===(t=null==o?void 0:o.onSuccess)||void 0===t?void 0:t.call(o,e)),this.updateResults({liveness:{status:"success",results:e,loading:!1,error:null}})},onError:async e=>{var t,n,r;await(null===(t=null==o?void 0:o.onError)||void 0===t?void 0:t.call(o,e)),await(null===(r=(n=this.options).onError)||void 0===r?void 0:r.call(n,e)),this.updateResults({liveness:{status:"error",results:null,loading:"wrong-position"===(null==e?void 0:e.code),error:null!=e?e:null}})}}))}catch(e){const o=new s.SDKError({message:"Error during liveness detection",code:s.EUploadIdentificationDocumentErrorCodes.LIVENESS_DETECTION_ERROR,details:e});null===(n=(t=this.options).onError)||void 0===n||n.call(t,o),this.updateResults({liveness:{status:"error",results:null,loading:!1,error:o}})}}async startFaceMatch(e,t){var n,o;try{this.updateResults({faceMatch:{status:null,results:null,loading:!0,error:null}});const n=await this.faceMatchService.faceMatch(e,t);this.updateResults({faceMatch:{results:n,status:"success",loading:!1,error:null}})}catch(e){const t=new s.SDKError({message:"Error when comparing the face with the document",code:s.EUploadIdentificationDocumentErrorCodes.FACE_MATCH_ERROR,details:e});await(null===(o=(n=this.options).onError)||void 0===o?void 0:o.call(n,t)),this.updateResults({faceMatch:{results:null,status:"error",loading:!1,error:t}})}}async tryStartFaceMatch(){var e,t,n;!this.results.uploadedDocument||!(null===(e=this.results.liveness.results)||void 0===e?void 0:e.successFrames.front)||this.results.faceMatch.loading||this.results.liveness.loading||this.results.typification.loading?await(null===(n=(t=this.options).onError)||void 0===n?void 0:n.call(t,new s.SDKError({message:"Unavailable faces",code:s.EUploadIdentificationDocumentErrorCodes.FACE_MATCH_UNAVAILABLE_FACES_ERROR}))):await this.startFaceMatch(this.results.uploadedDocument,this.results.liveness.results.successFrames.front)}startAll(e,t){this.startDocumentUpload(e),this.startLivenessDetection(t)}}},604:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.uploadIdentificationDocument=void 0;const o=n(171),r=n(234);t.uploadIdentificationDocument=function(e){const t=new o.UploadIdentificationDocumentService(e,{livenessDetection:r.livenessDetection});return{startDocumentUpload:async(...e)=>{await t.startDocumentUpload(...e)},startLivenessDetection:(...e)=>t.startLivenessDetection(...e),startFaceComparison:async(...e)=>{await t.tryStartFaceMatch(...e)},startAll:(...e)=>{t.startAll(...e)},getResults:(...e)=>t.getResults(...e)}}},620:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getDefaultFrameControls=void 0,t.getDefaultFrameControls=async function(){let e,t,n,o;return{startGettingFrames:async function(){return e&&t&&n||(e=await navigator.mediaDevices.getUserMedia({video:!0}),t=document.createElement("video"),t.setAttribute("autoplay","true"),t.style.transform="scale(-1, 1)",t.style.position="absolute",t.style.left="99999px",document.body.appendChild(t),t.srcObject=e,n=document.createElement("canvas"),o=n.getContext("2d")),e},getNextFrame:async function(){if(n&&t)return n.width=t.videoWidth,n.height=t.videoHeight,null==o||o.drawImage(t,0,0,n.width,n.height),await new Promise(((e,t)=>{n?n.toBlob((t=>{e(t)})):e(null)}));throw new Error("Cannot found video element")},stopGettingFrames:function(){t&&(document.body.removeChild(t),t=void 0),n&&(n=void 0),o&&(o=void 0),e&&(null==e||e.getTracks().forEach((e=>{e.stop()})),e=void 0)}}}},616:(e,t)=>{function n(e){const t=e.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),n=decodeURIComponent(window.atob(t).split("").map((e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2))).join(""));return JSON.parse(n)}Object.defineProperty(t,"__esModule",{value:!0}),t.tryDecodeJwt=t.decodeJwt=void 0,t.decodeJwt=n,t.tryDecodeJwt=function(e){try{return n(e)}catch(e){return null}}},661:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_RETRY_TIME_STEP=t.DEFAULT_NUMBER_OF_RETRIES=t.SEND_FRAMES_INTERVAL_MS=t.APPLICATION_URL=t.API_GATEWAY_URL=t.WEBSOCKET_BASE_URL=void 0,t.WEBSOCKET_BASE_URL="wss://santoid-liveness-w4ynos5dlq-ue.a.run.app/api/v1/liveness/ws",t.API_GATEWAY_URL="https://api.santoid.com.br",t.APPLICATION_URL="https://app.santoid.com.br",t.SEND_FRAMES_INTERVAL_MS=100,t.DEFAULT_NUMBER_OF_RETRIES=5,t.DEFAULT_RETRY_TIME_STEP=1e3},551:(e,t)=>{var n,o,r;Object.defineProperty(t,"__esModule",{value:!0}),t.SDKError=t.EUploadIdentificationDocumentErrorCodes=t.ELivenessDetectionErrorCodes=t.EDefaultErrorCodes=void 0,function(e){e.INITIALIZATION_ERROR="initialization-error",e.INTERNAL_ERROR="internal-error"}(n||(t.EDefaultErrorCodes=n={})),function(e){e.WRONG_POSITION="liveness-detection/wrong-position"}(o||(t.ELivenessDetectionErrorCodes=o={})),function(e){e.FACE_MATCH_ERROR="upload-identification-document/face-match-error",e.FACE_MATCH_UNAVAILABLE_FACES_ERROR="upload-identification-document/face-match-unavailable-faces-error",e.DOCUMENT_ANALYSIS_ERROR="upload-identification-document/document-analysis-error",e.LIVENESS_DETECTION_ERROR="upload-identification-document/liveness-detection-error"}(r||(t.EUploadIdentificationDocumentErrorCodes=r={}));class s extends Error{constructor({message:e,code:t,details:n}){super(e),this.code=t,this.details=n}}t.SDKError=s},951:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.retryAsyncFunctionXTimes=t.callAsyncFunctionEveryXSeconds=t.waitFor=t.wait=t.capitalizeFirstLetter=void 0;const o=n(218),r=n(661);async function s(e){await new Promise((t=>{e()?t():setTimeout((()=>{s(e).then(t)}),500)}))}function i(e){var t;return e instanceof o.AxiosError&&(503===(null===(t=e.response)||void 0===t?void 0:t.status)||"Network Error"===e.message)}t.capitalizeFirstLetter=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},t.wait=async e=>{await new Promise((t=>{setTimeout(t,e)}))},t.waitFor=s,t.callAsyncFunctionEveryXSeconds=function e(t,n,o={stop:!1}){const r={timerEnd:!1};return setTimeout((()=>{r.timerEnd=!0}),n),t().then((async()=>{await s((()=>r.timerEnd)),o.stop||e(t,n,o)})),function(){o.stop=!0}},t.retryAsyncFunctionXTimes=async function e(n,o=i,s=r.DEFAULT_NUMBER_OF_RETRIES,a=1e3,c=r.DEFAULT_RETRY_TIME_STEP){try{return await n()}catch(r){if(o(r)&&s>0)return await(0,t.wait)(a),await e(n,o,s-1,a+c,c);throw r}}},706:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractWebSocket=void 0;const o=n(661);t.AbstractWebSocket=class{constructor(e,t){this.classOptions=e,this.sdkOptions=t}startConnection(){var e,t;const n=this.classOptions.decodeJwt(this.sdkOptions.token),r={x_endpoint_api_userinfo:this.sdkOptions.token,domain:null!==(e=this.sdkOptions.domain)&&void 0!==e?e:n.claims.domain,track:this.sdkOptions.track};this.sdkOptions.customId&&(r.customerRequestId=this.sdkOptions.customId),this.sdkOptions.useBillingAccounts&&(r.clientCredentials=!0);const s=Object.entries(r).map((e=>e.join("="))).join("&");this.websocket=new this.classOptions.WebSocketClass(`${null!==(t=this.sdkOptions.customWebSocketUrl)&&void 0!==t?t:o.WEBSOCKET_BASE_URL}?${s}`)}async waitForWebSocketConnection(){if(await new Promise((e=>{const t=setInterval((()=>{[3,1].includes(this.websocket.readyState)&&(clearInterval(t),e())}),5)})),3===this.websocket.readyState)throw new Error("Cannot connect to server")}disconnectFromWebSocket(){var e,t;[2,3].includes(this.websocket.readyState)||null===(t=(e=this.websocket).close)||void 0===t||t.call(e)}get readyState(){return this.websocket.readyState}addListener(e,t){var n,o;this.websocket.on?this.websocket.on(e,t):null===(o=(n=this.websocket).addEventListener)||void 0===o||o.call(n,e,t)}send(e){this.websocket.send(e)}}},218:(e,t,n)=>{function o(e,t){return function(){return e.apply(t,arguments)}}const{toString:r}=Object.prototype,{getPrototypeOf:s}=Object,i=(a=Object.create(null),e=>{const t=r.call(e);return a[t]||(a[t]=t.slice(8,-1).toLowerCase())});var a;const c=e=>(e=e.toLowerCase(),t=>i(t)===e),l=e=>t=>typeof t===e,{isArray:u}=Array,d=l("undefined"),p=c("ArrayBuffer"),f=l("string"),h=l("function"),m=l("number"),v=e=>null!==e&&"object"==typeof e,y=e=>{if("object"!==i(e))return!1;const t=s(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},g=c("Date"),E=c("File"),b=c("Blob"),w=c("FileList"),S=c("URLSearchParams");function O(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let o,r;if("object"!=typeof e&&(e=[e]),u(e))for(o=0,r=e.length;o<r;o++)t.call(null,e[o],o,e);else{const r=n?Object.getOwnPropertyNames(e):Object.keys(e),s=r.length;let i;for(o=0;o<s;o++)i=r[o],t.call(null,e[i],i,e)}}function R(e,t){t=t.toLowerCase();const n=Object.keys(e);let o,r=n.length;for(;r-- >0;)if(o=n[r],t===o.toLowerCase())return o;return null}const A="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:n.g,T=e=>!d(e)&&e!==A,_=(C="undefined"!=typeof Uint8Array&&s(Uint8Array),e=>C&&e instanceof C);var C;const D=c("HTMLFormElement"),F=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),N=c("RegExp"),j=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),o={};O(n,((n,r)=>{let s;!1!==(s=t(n,r,e))&&(o[r]=s||n)})),Object.defineProperties(e,o)},k="abcdefghijklmnopqrstuvwxyz",L="0123456789",U={DIGIT:L,ALPHA:k,ALPHA_DIGIT:k+k.toUpperCase()+L},x=c("AsyncFunction");var P={isArray:u,isArrayBuffer:p,isBuffer:function(e){return null!==e&&!d(e)&&null!==e.constructor&&!d(e.constructor)&&h(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||h(e.append)&&("formdata"===(t=i(e))||"object"===t&&h(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&p(e.buffer),t},isString:f,isNumber:m,isBoolean:e=>!0===e||!1===e,isObject:v,isPlainObject:y,isUndefined:d,isDate:g,isFile:E,isBlob:b,isRegExp:N,isFunction:h,isStream:e=>v(e)&&h(e.pipe),isURLSearchParams:S,isTypedArray:_,isFileList:w,forEach:O,merge:function e(){const{caseless:t}=T(this)&&this||{},n={},o=(o,r)=>{const s=t&&R(n,r)||r;y(n[s])&&y(o)?n[s]=e(n[s],o):y(o)?n[s]=e({},o):u(o)?n[s]=o.slice():n[s]=o};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&O(arguments[e],o);return n},extend:(e,t,n,{allOwnKeys:r}={})=>(O(t,((t,r)=>{n&&h(t)?e[r]=o(t,n):e[r]=t}),{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,o)=>{e.prototype=Object.create(t.prototype,o),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,o)=>{let r,i,a;const c={};if(t=t||{},null==e)return t;do{for(r=Object.getOwnPropertyNames(e),i=r.length;i-- >0;)a=r[i],o&&!o(a,e,t)||c[a]||(t[a]=e[a],c[a]=!0);e=!1!==n&&s(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:i,kindOfTest:c,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const o=e.indexOf(t,n);return-1!==o&&o===n},toArray:e=>{if(!e)return null;if(u(e))return e;let t=e.length;if(!m(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let o;for(;(o=n.next())&&!o.done;){const n=o.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const o=[];for(;null!==(n=e.exec(t));)o.push(n);return o},isHTMLForm:D,hasOwnProperty:F,hasOwnProp:F,reduceDescriptors:j,freezeMethods:e=>{j(e,((t,n)=>{if(h(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const o=e[n];h(o)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},o=e=>{e.forEach((e=>{n[e]=!0}))};return u(e)?o(e):o(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:R,global:A,isContextDefined:T,ALPHABET:U,generateString:(e=16,t=U.ALPHA_DIGIT)=>{let n="";const{length:o}=t;for(;e--;)n+=t[Math.random()*o|0];return n},isSpecCompliantForm:function(e){return!!(e&&h(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,o)=>{if(v(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[o]=e;const r=u(e)?[]:{};return O(e,((e,t)=>{const s=n(e,o+1);!d(s)&&(r[t]=s)})),t[o]=void 0,r}}return e};return n(e,0)},isAsyncFn:x,isThenable:e=>e&&(v(e)||h(e))&&h(e.then)&&h(e.catch)};function I(e,t,n,o,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),o&&(this.request=o),r&&(this.response=r)}P.inherits(I,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:P.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const B=I.prototype,M={};function W(e){return P.isPlainObject(e)||P.isArray(e)}function G(e){return P.endsWith(e,"[]")?e.slice(0,-2):e}function q(e,t,n){return e?e.concat(t).map((function(e,t){return e=G(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{M[e]={value:e}})),Object.defineProperties(I,M),Object.defineProperty(B,"isAxiosError",{value:!0}),I.from=(e,t,n,o,r,s)=>{const i=Object.create(B);return P.toFlatObject(e,i,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),I.call(i,e.message,t,n,o,r),i.cause=e,i.name=e.name,s&&Object.assign(i,s),i};const J=P.toFlatObject(P,{},null,(function(e){return/^is[A-Z]/.test(e)}));function K(e,t,n){if(!P.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const o=(n=P.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!P.isUndefined(t[e])}))).metaTokens,r=n.visitor||l,s=n.dots,i=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&P.isSpecCompliantForm(t);if(!P.isFunction(r))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(P.isDate(e))return e.toISOString();if(!a&&P.isBlob(e))throw new I("Blob is not supported. Use a Buffer instead.");return P.isArrayBuffer(e)||P.isTypedArray(e)?a&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function l(e,n,r){let a=e;if(e&&!r&&"object"==typeof e)if(P.endsWith(n,"{}"))n=o?n:n.slice(0,-2),e=JSON.stringify(e);else if(P.isArray(e)&&function(e){return P.isArray(e)&&!e.some(W)}(e)||(P.isFileList(e)||P.endsWith(n,"[]"))&&(a=P.toArray(e)))return n=G(n),a.forEach((function(e,o){!P.isUndefined(e)&&null!==e&&t.append(!0===i?q([n],o,s):null===i?n:n+"[]",c(e))})),!1;return!!W(e)||(t.append(q(r,n,s),c(e)),!1)}const u=[],d=Object.assign(J,{defaultVisitor:l,convertValue:c,isVisitable:W});if(!P.isObject(e))throw new TypeError("data must be an object");return function e(n,o){if(!P.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+o.join("."));u.push(n),P.forEach(n,(function(n,s){!0===(!(P.isUndefined(n)||null===n)&&r.call(t,n,P.isString(s)?s.trim():s,o,d))&&e(n,o?o.concat(s):[s])})),u.pop()}}(e),t}function z(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function H(e,t){this._pairs=[],e&&K(e,this,t)}const V=H.prototype;function $(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function X(e,t,n){if(!t)return e;const o=n&&n.encode||$,r=n&&n.serialize;let s;if(s=r?r(t,n):P.isURLSearchParams(t)?t.toString():new H(t,n).toString(o),s){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}V.append=function(e,t){this._pairs.push([e,t])},V.toString=function(e){const t=e?function(t){return e.call(this,t,z)}:z;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var Y=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){P.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Z={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Q={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:H,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},isStandardBrowserEnv:(()=>{let e;return("undefined"==typeof navigator||"ReactNative"!==(e=navigator.product)&&"NativeScript"!==e&&"NS"!==e)&&"undefined"!=typeof window&&"undefined"!=typeof document})(),isStandardBrowserWebWorkerEnv:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,protocols:["http","https","file","blob","url","data"]};function ee(e){function t(e,n,o,r){let s=e[r++];const i=Number.isFinite(+s),a=r>=e.length;return s=!s&&P.isArray(o)?o.length:s,a?(P.hasOwnProp(o,s)?o[s]=[o[s],n]:o[s]=n,!i):(o[s]&&P.isObject(o[s])||(o[s]=[]),t(e,n,o[s],r)&&P.isArray(o[s])&&(o[s]=function(e){const t={},n=Object.keys(e);let o;const r=n.length;let s;for(o=0;o<r;o++)s=n[o],t[s]=e[s];return t}(o[s])),!i)}if(P.isFormData(e)&&P.isFunction(e.entries)){const n={};return P.forEachEntry(e,((e,o)=>{t(function(e){return P.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),o,n,0)})),n}return null}const te={transitional:Z,adapter:["xhr","http"],transformRequest:[function(e,t){const n=t.getContentType()||"",o=n.indexOf("application/json")>-1,r=P.isObject(e);if(r&&P.isHTMLForm(e)&&(e=new FormData(e)),P.isFormData(e))return o&&o?JSON.stringify(ee(e)):e;if(P.isArrayBuffer(e)||P.isBuffer(e)||P.isStream(e)||P.isFile(e)||P.isBlob(e))return e;if(P.isArrayBufferView(e))return e.buffer;if(P.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(r){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return K(e,new Q.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,o){return Q.isNode&&P.isBuffer(e)?(this.append(t,e.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((s=P.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return K(s?{"files[]":e}:e,t&&new t,this.formSerializer)}}return r||o?(t.setContentType("application/json",!1),function(e,t,n){if(P.isString(e))try{return(0,JSON.parse)(e),P.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||te.transitional,n=t&&t.forcedJSONParsing,o="json"===this.responseType;if(e&&P.isString(e)&&(n&&!this.responseType||o)){const n=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw I.from(e,I.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Q.classes.FormData,Blob:Q.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};P.forEach(["delete","get","head","post","put","patch"],(e=>{te.headers[e]={}}));var ne=te;const oe=P.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),re=Symbol("internals");function se(e){return e&&String(e).trim().toLowerCase()}function ie(e){return!1===e||null==e?e:P.isArray(e)?e.map(ie):String(e)}function ae(e,t,n,o,r){return P.isFunction(o)?o.call(this,t,n):(r&&(t=n),P.isString(t)?P.isString(o)?-1!==t.indexOf(o):P.isRegExp(o)?o.test(t):void 0:void 0)}class ce{constructor(e){e&&this.set(e)}set(e,t,n){const o=this;function r(e,t,n){const r=se(t);if(!r)throw new Error("header name must be a non-empty string");const s=P.findKey(o,r);(!s||void 0===o[s]||!0===n||void 0===n&&!1!==o[s])&&(o[s||t]=ie(e))}const s=(e,t)=>P.forEach(e,((e,n)=>r(e,n,t)));return P.isPlainObject(e)||e instanceof this.constructor?s(e,t):P.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?s((e=>{const t={};let n,o,r;return e&&e.split("\n").forEach((function(e){r=e.indexOf(":"),n=e.substring(0,r).trim().toLowerCase(),o=e.substring(r+1).trim(),!n||t[n]&&oe[n]||("set-cookie"===n?t[n]?t[n].push(o):t[n]=[o]:t[n]=t[n]?t[n]+", "+o:o)})),t})(e),t):null!=e&&r(t,e,n),this}get(e,t){if(e=se(e)){const n=P.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=n.exec(e);)t[o[1]]=o[2];return t}(e);if(P.isFunction(t))return t.call(this,e,n);if(P.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=se(e)){const n=P.findKey(this,e);return!(!n||void 0===this[n]||t&&!ae(0,this[n],n,t))}return!1}delete(e,t){const n=this;let o=!1;function r(e){if(e=se(e)){const r=P.findKey(n,e);!r||t&&!ae(0,n[r],r,t)||(delete n[r],o=!0)}}return P.isArray(e)?e.forEach(r):r(e),o}clear(e){const t=Object.keys(this);let n=t.length,o=!1;for(;n--;){const r=t[n];e&&!ae(0,this[r],r,e,!0)||(delete this[r],o=!0)}return o}normalize(e){const t=this,n={};return P.forEach(this,((o,r)=>{const s=P.findKey(n,r);if(s)return t[s]=ie(o),void delete t[r];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(r):String(r).trim();i!==r&&delete t[r],t[i]=ie(o),n[i]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return P.forEach(this,((n,o)=>{null!=n&&!1!==n&&(t[o]=e&&P.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[re]=this[re]={accessors:{}}).accessors,n=this.prototype;function o(e){const o=se(e);t[o]||(function(e,t){const n=P.toCamelCase(" "+t);["get","set","has"].forEach((o=>{Object.defineProperty(e,o+n,{value:function(e,n,r){return this[o].call(this,t,e,n,r)},configurable:!0})}))}(n,e),t[o]=!0)}return P.isArray(e)?e.forEach(o):o(e),this}}ce.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),P.reduceDescriptors(ce.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),P.freezeMethods(ce);var le=ce;function ue(e,t){const n=this||ne,o=t||n,r=le.from(o.headers);let s=o.data;return P.forEach(e,(function(e){s=e.call(n,s,r.normalize(),t?t.status:void 0)})),r.normalize(),s}function de(e){return!(!e||!e.__CANCEL__)}function pe(e,t,n){I.call(this,null==e?"canceled":e,I.ERR_CANCELED,t,n),this.name="CanceledError"}P.inherits(pe,I,{__CANCEL__:!0});var fe=Q.isStandardBrowserEnv?{write:function(e,t,n,o,r,s){const i=[];i.push(e+"="+encodeURIComponent(t)),P.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),P.isString(o)&&i.push("path="+o),P.isString(r)&&i.push("domain="+r),!0===s&&i.push("secure"),document.cookie=i.join("; ")},read:function(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}};function he(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}var me=Q.isStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function o(n){let o=n;return e&&(t.setAttribute("href",o),o=t.href),t.setAttribute("href",o),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=o(window.location.href),function(e){const t=P.isString(e)?o(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0};function ve(e,t){let n=0;const o=function(e,t){e=e||10;const n=new Array(e),o=new Array(e);let r,s=0,i=0;return t=void 0!==t?t:1e3,function(a){const c=Date.now(),l=o[i];r||(r=c),n[s]=a,o[s]=c;let u=i,d=0;for(;u!==s;)d+=n[u++],u%=e;if(s=(s+1)%e,s===i&&(i=(i+1)%e),c-r<t)return;const p=l&&c-l;return p?Math.round(1e3*d/p):void 0}}(50,250);return r=>{const s=r.loaded,i=r.lengthComputable?r.total:void 0,a=s-n,c=o(a);n=s;const l={loaded:s,total:i,progress:i?s/i:void 0,bytes:a,rate:c||void 0,estimated:c&&i&&s<=i?(i-s)/c:void 0,event:r};l[t?"download":"upload"]=!0,e(l)}}const ye={http:null,xhr:"undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){let o=e.data;const r=le.from(e.headers).normalize(),s=e.responseType;let i,a;function c(){e.cancelToken&&e.cancelToken.unsubscribe(i),e.signal&&e.signal.removeEventListener("abort",i)}P.isFormData(o)&&(Q.isStandardBrowserEnv||Q.isStandardBrowserWebWorkerEnv?r.setContentType(!1):r.getContentType(/^\s*multipart\/form-data/)?P.isString(a=r.getContentType())&&r.setContentType(a.replace(/^\s*(multipart\/form-data);+/,"$1")):r.setContentType("multipart/form-data"));let l=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",n=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";r.set("Authorization","Basic "+btoa(t+":"+n))}const u=he(e.baseURL,e.url);function d(){if(!l)return;const o=le.from("getAllResponseHeaders"in l&&l.getAllResponseHeaders());!function(e,t,n){const o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(new I("Request failed with status code "+n.status,[I.ERR_BAD_REQUEST,I.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}((function(e){t(e),c()}),(function(e){n(e),c()}),{data:s&&"text"!==s&&"json"!==s?l.response:l.responseText,status:l.status,statusText:l.statusText,headers:o,config:e,request:l}),l=null}if(l.open(e.method.toUpperCase(),X(u,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,"onloadend"in l?l.onloadend=d:l.onreadystatechange=function(){l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))&&setTimeout(d)},l.onabort=function(){l&&(n(new I("Request aborted",I.ECONNABORTED,e,l)),l=null)},l.onerror=function(){n(new I("Network Error",I.ERR_NETWORK,e,l)),l=null},l.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const o=e.transitional||Z;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new I(t,o.clarifyTimeoutError?I.ETIMEDOUT:I.ECONNABORTED,e,l)),l=null},Q.isStandardBrowserEnv){const t=(e.withCredentials||me(u))&&e.xsrfCookieName&&fe.read(e.xsrfCookieName);t&&r.set(e.xsrfHeaderName,t)}void 0===o&&r.setContentType(null),"setRequestHeader"in l&&P.forEach(r.toJSON(),(function(e,t){l.setRequestHeader(t,e)})),P.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),s&&"json"!==s&&(l.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",ve(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",ve(e.onUploadProgress)),(e.cancelToken||e.signal)&&(i=t=>{l&&(n(!t||t.type?new pe(null,e,l):t),l.abort(),l=null)},e.cancelToken&&e.cancelToken.subscribe(i),e.signal&&(e.signal.aborted?i():e.signal.addEventListener("abort",i)));const p=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(u);p&&-1===Q.protocols.indexOf(p)?n(new I("Unsupported protocol "+p+":",I.ERR_BAD_REQUEST,e)):l.send(o||null)}))}};P.forEach(ye,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const ge=e=>`- ${e}`,Ee=e=>P.isFunction(e)||null===e||!1===e;var be=e=>{e=P.isArray(e)?e:[e];const{length:t}=e;let n,o;const r={};for(let s=0;s<t;s++){let t;if(n=e[s],o=n,!Ee(n)&&(o=ye[(t=String(n)).toLowerCase()],void 0===o))throw new I(`Unknown adapter '${t}'`);if(o)break;r[t||"#"+s]=o}if(!o){const e=Object.entries(r).map((([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new I("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(ge).join("\n"):" "+ge(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return o};function we(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new pe(null,e)}function Se(e){return we(e),e.headers=le.from(e.headers),e.data=ue.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),be(e.adapter||ne.adapter)(e).then((function(t){return we(e),t.data=ue.call(e,e.transformResponse,t),t.headers=le.from(t.headers),t}),(function(t){return de(t)||(we(e),t&&t.response&&(t.response.data=ue.call(e,e.transformResponse,t.response),t.response.headers=le.from(t.response.headers))),Promise.reject(t)}))}const Oe=e=>e instanceof le?e.toJSON():e;function Re(e,t){t=t||{};const n={};function o(e,t,n){return P.isPlainObject(e)&&P.isPlainObject(t)?P.merge.call({caseless:n},e,t):P.isPlainObject(t)?P.merge({},t):P.isArray(t)?t.slice():t}function r(e,t,n){return P.isUndefined(t)?P.isUndefined(e)?void 0:o(void 0,e,n):o(e,t,n)}function s(e,t){if(!P.isUndefined(t))return o(void 0,t)}function i(e,t){return P.isUndefined(t)?P.isUndefined(e)?void 0:o(void 0,e):o(void 0,t)}function a(n,r,s){return s in t?o(n,r):s in e?o(void 0,n):void 0}const c={url:s,method:s,data:s,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:a,headers:(e,t)=>r(Oe(e),Oe(t),!0)};return P.forEach(Object.keys(Object.assign({},e,t)),(function(o){const s=c[o]||r,i=s(e[o],t[o],o);P.isUndefined(i)&&s!==a||(n[o]=i)})),n}const Ae={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Ae[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Te={};Ae.transitional=function(e,t,n){function o(e,t){return"[Axios v1.5.1] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,r,s)=>{if(!1===e)throw new I(o(r," has been removed"+(t?" in "+t:"")),I.ERR_DEPRECATED);return t&&!Te[r]&&(Te[r]=!0,console.warn(o(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,s)}};var _e={assertOptions:function(e,t,n){if("object"!=typeof e)throw new I("options must be an object",I.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let r=o.length;for(;r-- >0;){const s=o[r],i=t[s];if(i){const t=e[s],n=void 0===t||i(t,s,e);if(!0!==n)throw new I("option "+s+" must be "+n,I.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new I("Unknown option "+s,I.ERR_BAD_OPTION)}},validators:Ae};const Ce=_e.validators;class De{constructor(e){this.defaults=e,this.interceptors={request:new Y,response:new Y}}request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Re(this.defaults,t);const{transitional:n,paramsSerializer:o,headers:r}=t;void 0!==n&&_e.assertOptions(n,{silentJSONParsing:Ce.transitional(Ce.boolean),forcedJSONParsing:Ce.transitional(Ce.boolean),clarifyTimeoutError:Ce.transitional(Ce.boolean)},!1),null!=o&&(P.isFunction(o)?t.paramsSerializer={serialize:o}:_e.assertOptions(o,{encode:Ce.function,serialize:Ce.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=r&&P.merge(r.common,r[t.method]);r&&P.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete r[e]})),t.headers=le.concat(s,r);const i=[];let a=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(a=a&&e.synchronous,i.unshift(e.fulfilled,e.rejected))}));const c=[];let l;this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)}));let u,d=0;if(!a){const e=[Se.bind(this),void 0];for(e.unshift.apply(e,i),e.push.apply(e,c),u=e.length,l=Promise.resolve(t);d<u;)l=l.then(e[d++],e[d++]);return l}u=i.length;let p=t;for(d=0;d<u;){const e=i[d++],t=i[d++];try{p=e(p)}catch(e){t.call(this,e);break}}try{l=Se.call(this,p)}catch(e){return Promise.reject(e)}for(d=0,u=c.length;d<u;)l=l.then(c[d++],c[d++]);return l}getUri(e){return X(he((e=Re(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}P.forEach(["delete","get","head","options"],(function(e){De.prototype[e]=function(t,n){return this.request(Re(n||{},{method:e,url:t,data:(n||{}).data}))}})),P.forEach(["post","put","patch"],(function(e){function t(t){return function(n,o,r){return this.request(Re(r||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:o}))}}De.prototype[e]=t(),De.prototype[e+"Form"]=t(!0)}));var Fe=De;class Ne{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const n=this;this.promise.then((e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const o=new Promise((e=>{n.subscribe(e),t=e})).then(e);return o.cancel=function(){n.unsubscribe(t)},o},e((function(e,o,r){n.reason||(n.reason=new pe(e,o,r),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new Ne((function(t){e=t})),cancel:e}}}var je=Ne;const ke={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(ke).forEach((([e,t])=>{ke[t]=e}));var Le=ke;const Ue=function e(t){const n=new Fe(t),r=o(Fe.prototype.request,n);return P.extend(r,Fe.prototype,n,{allOwnKeys:!0}),P.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(Re(t,n))},r}(ne);Ue.Axios=Fe,Ue.CanceledError=pe,Ue.CancelToken=je,Ue.isCancel=de,Ue.VERSION="1.5.1",Ue.toFormData=K,Ue.AxiosError=I,Ue.Cancel=Ue.CanceledError,Ue.all=function(e){return Promise.all(e)},Ue.spread=function(e){return function(t){return e.apply(null,t)}},Ue.isAxiosError=function(e){return P.isObject(e)&&!0===e.isAxiosError},Ue.mergeConfig=Re,Ue.AxiosHeaders=le,Ue.formToJSON=e=>ee(P.isHTMLForm(e)?new FormData(e):e),Ue.getAdapter=be,Ue.HttpStatusCode=Le,Ue.default=Ue,e.exports=Ue}},t={};function n(o){var r=t[o];if(void 0!==r)return r.exports;var s=t[o]={exports:{}};return e[o].call(s.exports,s,s.exports,n),s.exports}n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var o={};return(()=>{var e=o;const t=n(234),r=n(604),s=n(122);class i{}i.livenessDetection=t.livenessDetection,i.uploadIdentificationDocument=r.uploadIdentificationDocument,i.insertUploadIdentificationDocument=s.insertUploadIdentificationDocument,e.default=i})(),o.default})()));
@@ -0,0 +1,2 @@
1
+ import { insertUploadIdentificationDocument } from './methods/insertUploadIdentificationDocument';
2
+ export { insertUploadIdentificationDocument, };
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.insertUploadIdentificationDocument = void 0;
4
+ const insertUploadIdentificationDocument_1 = require("./methods/insertUploadIdentificationDocument");
5
+ Object.defineProperty(exports, "insertUploadIdentificationDocument", { enumerable: true, get: function () { return insertUploadIdentificationDocument_1.insertUploadIdentificationDocument; } });
@@ -0,0 +1,11 @@
1
+ interface IMethodOptions {
2
+ track: string;
3
+ domain: string;
4
+ flow: string;
5
+ token?: string;
6
+ customAppUrl?: string;
7
+ width?: string;
8
+ height?: string;
9
+ }
10
+ export declare function insertUploadIdentificationDocument(options: IMethodOptions, cssSelector?: string): void;
11
+ export {};
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.insertUploadIdentificationDocument = void 0;
4
+ const constants_1 = require("../../../../utils/constants");
5
+ function insertUploadIdentificationDocument(options, cssSelector) {
6
+ var _a, _b, _c;
7
+ const targetElement = cssSelector ? document.querySelector(cssSelector) : document.body;
8
+ if (!targetElement) {
9
+ throw new Error('Cannot find target element');
10
+ }
11
+ const iframeElement = document.createElement('iframe');
12
+ iframeElement.style.overflow = 'hidden';
13
+ iframeElement.style.border = '0';
14
+ iframeElement.setAttribute('width', (_a = options.width) !== null && _a !== void 0 ? _a : '100%');
15
+ iframeElement.setAttribute('height', (_b = options.height) !== null && _b !== void 0 ? _b : '550px');
16
+ iframeElement.setAttribute('scrolling', 'no');
17
+ let iframeUrl = `${(_c = options.customAppUrl) !== null && _c !== void 0 ? _c : constants_1.APPLICATION_URL}/share/domains/${options.domain}/tracks/${options.track}/flow/${options.flow}/embedded`;
18
+ if (options.token) {
19
+ iframeUrl += `?accessToken=${options.token}`;
20
+ }
21
+ iframeElement.setAttribute('src', iframeUrl);
22
+ targetElement.appendChild(iframeElement);
23
+ }
24
+ exports.insertUploadIdentificationDocument = insertUploadIdentificationDocument;
@@ -0,0 +1,8 @@
1
+ import { livenessDetection } from './liveness/methods/livenessDetection';
2
+ import { uploadIdentificationDocument } from './liveness/methods/uploadIdentificationDocument';
3
+ import { insertUploadIdentificationDocument } from './embedded/methods/insertUploadIdentificationDocument';
4
+ export default class SantoiDSDK {
5
+ static readonly livenessDetection: typeof livenessDetection;
6
+ static readonly uploadIdentificationDocument: typeof uploadIdentificationDocument;
7
+ static readonly insertUploadIdentificationDocument: typeof insertUploadIdentificationDocument;
8
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const livenessDetection_1 = require("./liveness/methods/livenessDetection");
4
+ const uploadIdentificationDocument_1 = require("./liveness/methods/uploadIdentificationDocument");
5
+ const insertUploadIdentificationDocument_1 = require("./embedded/methods/insertUploadIdentificationDocument");
6
+ class SantoiDSDK {
7
+ }
8
+ SantoiDSDK.livenessDetection = livenessDetection_1.livenessDetection;
9
+ SantoiDSDK.uploadIdentificationDocument = uploadIdentificationDocument_1.uploadIdentificationDocument;
10
+ SantoiDSDK.insertUploadIdentificationDocument = insertUploadIdentificationDocument_1.insertUploadIdentificationDocument;
11
+ exports.default = SantoiDSDK;
@@ -1,7 +1,3 @@
1
1
  import { livenessDetection } from './methods/livenessDetection';
2
2
  import { uploadIdentificationDocument } from './methods/uploadIdentificationDocument';
3
3
  export { livenessDetection, uploadIdentificationDocument, };
4
- export default class SantoiDSDK {
5
- static livenessDetection: typeof livenessDetection;
6
- static uploadIdentificationDocument: typeof uploadIdentificationDocument;
7
- }
@@ -5,8 +5,3 @@ const livenessDetection_1 = require("./methods/livenessDetection");
5
5
  Object.defineProperty(exports, "livenessDetection", { enumerable: true, get: function () { return livenessDetection_1.livenessDetection; } });
6
6
  const uploadIdentificationDocument_1 = require("./methods/uploadIdentificationDocument");
7
7
  Object.defineProperty(exports, "uploadIdentificationDocument", { enumerable: true, get: function () { return uploadIdentificationDocument_1.uploadIdentificationDocument; } });
8
- class SantoiDSDK {
9
- }
10
- SantoiDSDK.livenessDetection = livenessDetection_1.livenessDetection;
11
- SantoiDSDK.uploadIdentificationDocument = uploadIdentificationDocument_1.uploadIdentificationDocument;
12
- exports.default = SantoiDSDK;
@@ -1,6 +1,6 @@
1
- import { type ISDKOptions, type TPositions, type IWebSocketMessage } from '../../../utils/types';
1
+ import { type ISDKOptions, type TPositions, type IWebSocketMessage } from '../../../../utils/types';
2
2
  import { type IFrameControls } from '../../utils/getNextFrame';
3
- import { type AbstractWebSocket } from '../../../utils/websocket';
3
+ import { type AbstractWebSocket } from '../../../../utils/websocket';
4
4
  export declare class LivenessDetectionService<TFrameType, TMediaType> {
5
5
  options: ISDKOptions<TFrameType, TMediaType>;
6
6
  abstractWebSocket: AbstractWebSocket<TFrameType, TMediaType>;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LivenessDetectionService = void 0;
4
- const error_1 = require("../../../utils/error");
4
+ const error_1 = require("../../../../utils/error");
5
5
  const getNextFrame_1 = require("../../utils/getNextFrame");
6
- const utils_1 = require("../../../utils");
7
- const constants_1 = require("../../../utils/constants");
6
+ const utils_1 = require("../../../../utils");
7
+ const constants_1 = require("../../../../utils/constants");
8
8
  class LivenessDetectionService {
9
9
  constructor(options, abstractWebSocket) {
10
10
  this.frameGetControls = {};
@@ -1,4 +1,4 @@
1
- import { type ISDKOptions } from '../../../utils/types';
1
+ import { type ISDKOptions } from '../../../../utils/types';
2
2
  export type TFrameType = File | Blob;
3
3
  export type TMediaType = MediaStream | undefined;
4
4
  type ILivenessDetectionParams = Omit<ISDKOptions<TFrameType, TMediaType>, 'onStart'> & {
@@ -2,8 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.livenessDetection = void 0;
4
4
  const Service_1 = require("./Service");
5
- const error_1 = require("../../../utils/error");
6
- const websocket_1 = require("../../../utils/websocket");
5
+ const error_1 = require("../../../../utils/error");
6
+ const websocket_1 = require("../../../../utils/websocket");
7
7
  const index_1 = require("../../utils/index");
8
8
  function livenessDetection(options) {
9
9
  var _a;
@@ -11,17 +11,17 @@ function livenessDetection(options) {
11
11
  const abstractWebSocket = new websocket_1.AbstractWebSocket({ WebSocketClass: (_a = options.CustomWebSocketClass) !== null && _a !== void 0 ? _a : WebSocket, decodeJwt: index_1.decodeJwt }, options);
12
12
  abstractWebSocket.startConnection();
13
13
  const livenessDetectionService = new Service_1.LivenessDetectionService(options, abstractWebSocket);
14
- void abstractWebSocket.waitForWebSocketConnection()
15
- .then(() => { void livenessDetectionService.onConnect(); })
16
- .catch(() => { void livenessDetectionService.onError(); });
14
+ abstractWebSocket.waitForWebSocketConnection()
15
+ .then(() => { livenessDetectionService.onConnect(); })
16
+ .catch(() => { livenessDetectionService.onError(); });
17
17
  abstractWebSocket.addListener('message', (event) => {
18
- void livenessDetectionService.onWebSocketMessage(event);
18
+ livenessDetectionService.onWebSocketMessage(event);
19
19
  });
20
20
  abstractWebSocket.addListener('error', () => {
21
- void livenessDetectionService.onError();
21
+ livenessDetectionService.onError();
22
22
  });
23
23
  abstractWebSocket.addListener('close', () => {
24
- void livenessDetectionService.onError();
24
+ livenessDetectionService.onError();
25
25
  });
26
26
  return {
27
27
  // The use of arrow functions is mandatory, as without them the "this" value changes over time
@@ -1,7 +1,7 @@
1
- import { TypificationService, type ITypificationResult } from '../../../api/TypificationService';
2
- import { FaceMatchService, type IFaceMatchResult } from '../../../api/FaceMatchService';
3
- import { type ILivenessResults, type IBaseSDKOptions, type TCallbackFunction, type ISDKOptions } from '../../../utils/types';
4
- import { SDKError } from '../../../utils/error';
1
+ import { TypificationService, type ITypificationResult } from '../../../../api/TypificationService';
2
+ import { FaceMatchService, type IFaceMatchResult } from '../../../../api/FaceMatchService';
3
+ import { type ILivenessResults, type IBaseSDKOptions, type TCallbackFunction, type ISDKOptions } from '../../../../utils/types';
4
+ import { SDKError } from '../../../../utils/error';
5
5
  import { type livenessDetection } from '../livenessDetection';
6
6
  export declare class UploadIdentificationDocumentService<TFrameType, TMediaType, TFileType> {
7
7
  options: IServiceOptions<TFrameType, TMediaType, TFileType>;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UploadIdentificationDocumentService = void 0;
4
- const TypificationService_1 = require("../../../api/TypificationService");
5
- const FaceMatchService_1 = require("../../../api/FaceMatchService");
6
- const error_1 = require("../../../utils/error");
4
+ const TypificationService_1 = require("../../../../api/TypificationService");
5
+ const FaceMatchService_1 = require("../../../../api/FaceMatchService");
6
+ const error_1 = require("../../../../utils/error");
7
7
  const index_1 = require("../../utils/index");
8
8
  class UploadIdentificationDocumentService {
9
9
  constructor(options, internalOptions) {
@@ -27,7 +27,7 @@ class UploadIdentificationDocumentService {
27
27
  await ((_b = (_a = this.options).onUpdate) === null || _b === void 0 ? void 0 : _b.call(_a, this.results));
28
28
  // Prevent Face Match loop
29
29
  if (!updatedResults.faceMatch) {
30
- void this.tryStartFaceMatch();
30
+ this.tryStartFaceMatch();
31
31
  }
32
32
  if (Object.entries(this.results).every(([key, value]) => key === 'uploadedDocument' || !!value.results)) {
33
33
  await ((_d = (_c = this.options).onSuccess) === null || _d === void 0 ? void 0 : _d.call(_c, this.results));
@@ -40,10 +40,10 @@ class UploadIdentificationDocumentService {
40
40
  async startDocumentUpload(file) {
41
41
  var _a, _b;
42
42
  try {
43
- void this.updateResults({ typification: { status: null, results: null, loading: true, error: null } });
43
+ this.updateResults({ typification: { status: null, results: null, loading: true, error: null } });
44
44
  this.updateUploadedDocument(file);
45
45
  const typificationResults = await this.typificationService.predict(file);
46
- void this.updateResults({ typification: { status: 'success', results: typificationResults, loading: false, error: null } });
46
+ this.updateResults({ typification: { status: 'success', results: typificationResults, loading: false, error: null } });
47
47
  }
48
48
  catch (err) {
49
49
  const adaptedError = new error_1.SDKError({
@@ -52,18 +52,18 @@ class UploadIdentificationDocumentService {
52
52
  details: err,
53
53
  });
54
54
  await ((_b = (_a = this.options).onError) === null || _b === void 0 ? void 0 : _b.call(_a, adaptedError));
55
- void this.updateResults({ typification: { status: 'error', results: null, loading: false, error: adaptedError } });
55
+ this.updateResults({ typification: { status: 'error', results: null, loading: false, error: adaptedError } });
56
56
  }
57
57
  }
58
58
  startLivenessDetection(startLivenessDetectionOptions) {
59
59
  var _a, _b;
60
60
  const adaptedLivenessDetection = Object.assign(Object.assign({}, this.options.livenessDetectionOptions), startLivenessDetectionOptions);
61
- void this.updateResults({ liveness: { results: null, status: null, loading: true, error: null } });
61
+ this.updateResults({ liveness: { results: null, status: null, loading: true, error: null } });
62
62
  try {
63
63
  return this.internalOptions.livenessDetection(Object.assign(Object.assign({ domain: this.options.domain, customId: this.options.customId, customWebSocketUrl: this.options.customWebSocketUrl, token: this.options.token, track: this.options.track }, adaptedLivenessDetection), { onSuccess: async (livenessResults) => {
64
64
  var _a;
65
65
  await ((_a = adaptedLivenessDetection === null || adaptedLivenessDetection === void 0 ? void 0 : adaptedLivenessDetection.onSuccess) === null || _a === void 0 ? void 0 : _a.call(adaptedLivenessDetection, livenessResults));
66
- void this.updateResults({
66
+ this.updateResults({
67
67
  liveness: {
68
68
  status: 'success',
69
69
  results: (livenessResults),
@@ -75,7 +75,7 @@ class UploadIdentificationDocumentService {
75
75
  var _a, _b, _c;
76
76
  await ((_a = adaptedLivenessDetection === null || adaptedLivenessDetection === void 0 ? void 0 : adaptedLivenessDetection.onError) === null || _a === void 0 ? void 0 : _a.call(adaptedLivenessDetection, livenessErrorDetails));
77
77
  await ((_c = (_b = this.options).onError) === null || _c === void 0 ? void 0 : _c.call(_b, livenessErrorDetails));
78
- void this.updateResults({
78
+ this.updateResults({
79
79
  liveness: {
80
80
  status: 'error',
81
81
  results: null,
@@ -91,16 +91,16 @@ class UploadIdentificationDocumentService {
91
91
  code: error_1.EUploadIdentificationDocumentErrorCodes.LIVENESS_DETECTION_ERROR,
92
92
  details: err,
93
93
  });
94
- void ((_b = (_a = this.options).onError) === null || _b === void 0 ? void 0 : _b.call(_a, adaptedError));
95
- void this.updateResults({ liveness: { status: 'error', results: null, loading: false, error: adaptedError } });
94
+ (_b = (_a = this.options).onError) === null || _b === void 0 ? void 0 : _b.call(_a, adaptedError);
95
+ this.updateResults({ liveness: { status: 'error', results: null, loading: false, error: adaptedError } });
96
96
  }
97
97
  }
98
98
  async startFaceMatch(firstImage, secondImage) {
99
99
  var _a, _b;
100
100
  try {
101
- void this.updateResults({ faceMatch: { status: null, results: null, loading: true, error: null } });
101
+ this.updateResults({ faceMatch: { status: null, results: null, loading: true, error: null } });
102
102
  const faceMatchResults = await this.faceMatchService.faceMatch(firstImage, secondImage);
103
- void this.updateResults({ faceMatch: { results: faceMatchResults, status: 'success', loading: false, error: null } });
103
+ this.updateResults({ faceMatch: { results: faceMatchResults, status: 'success', loading: false, error: null } });
104
104
  }
105
105
  catch (err) {
106
106
  const adaptedError = new error_1.SDKError({
@@ -109,7 +109,7 @@ class UploadIdentificationDocumentService {
109
109
  details: err,
110
110
  });
111
111
  await ((_b = (_a = this.options).onError) === null || _b === void 0 ? void 0 : _b.call(_a, adaptedError));
112
- void this.updateResults({ faceMatch: { results: null, status: 'error', loading: false, error: adaptedError } });
112
+ this.updateResults({ faceMatch: { results: null, status: 'error', loading: false, error: adaptedError } });
113
113
  }
114
114
  }
115
115
  async tryStartFaceMatch() {
@@ -129,8 +129,8 @@ class UploadIdentificationDocumentService {
129
129
  }
130
130
  }
131
131
  startAll(file, startLivenessDetectionOptions) {
132
- void this.startDocumentUpload(file);
133
- void this.startLivenessDetection(startLivenessDetectionOptions);
132
+ this.startDocumentUpload(file);
133
+ this.startLivenessDetection(startLivenessDetectionOptions);
134
134
  }
135
135
  }
136
136
  exports.UploadIdentificationDocumentService = UploadIdentificationDocumentService;
@@ -3,7 +3,7 @@ import { type TFrameType, type TMediaType } from '../livenessDetection';
3
3
  type TFileType = Blob | File;
4
4
  export declare function uploadIdentificationDocument(options: IServiceOptions<TFrameType, TMediaType, TFileType>): {
5
5
  startDocumentUpload: (file: TFileType) => Promise<void>;
6
- startLivenessDetection: (startLivenessDetectionOptions?: (Omit<import("../../../utils/types").ISDKOptions<TFrameType, TMediaType>, "token" | "track"> & {
6
+ startLivenessDetection: (startLivenessDetectionOptions?: (Omit<import("../../../../utils/types").ISDKOptions<TFrameType, TMediaType>, "token" | "track"> & {
7
7
  track?: string | undefined;
8
8
  token?: string | undefined;
9
9
  }) | undefined) => (Omit<{
@@ -15,7 +15,7 @@ export declare function uploadIdentificationDocument(options: IServiceOptions<TF
15
15
  getVideoStream?: (() => TMediaType) | undefined;
16
16
  }) | undefined;
17
17
  startFaceComparison: () => Promise<void>;
18
- startAll: (file: TFileType, startLivenessDetectionOptions?: (Omit<import("../../../utils/types").ISDKOptions<TFrameType, TMediaType>, "token" | "track"> & {
18
+ startAll: (file: TFileType, startLivenessDetectionOptions?: (Omit<import("../../../../utils/types").ISDKOptions<TFrameType, TMediaType>, "token" | "track"> & {
19
19
  track?: string | undefined;
20
20
  token?: string | undefined;
21
21
  }) | undefined) => void;
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "santoid-sdk",
3
- "version": "3.0.4",
3
+ "version": "4.0.0",
4
4
  "description": "",
5
- "main": "liveness/index.js",
6
- "types": "liveness/index.d.ts",
5
+ "main": "client/index.js",
6
+ "types": "client/index.d.ts",
7
7
  "scripts": {
8
8
  "expose:cmd": "mv -v dist/* ./ && rm -rf ./dist",
9
- "build:clear": "rm -rf ./browser ./api ./liveness ./node ./utils ./index.js ./index.d.ts ./dist",
9
+ "build:clear": "rm -rf ./browser ./api ./client ./server ./utils ./index.js ./index.d.ts ./dist",
10
10
  "build:webpack": "webpack --mode=production",
11
11
  "build:typescript": "npm run build:clear && tsc -p tsconfig.prod.json",
12
12
  "build": "npm run build:typescript && npm run build:webpack && npm run expose:cmd",
@@ -21,13 +21,11 @@ async function initialize(options) {
21
21
  throw new Error('Invalid credentials');
22
22
  }
23
23
  }
24
+ else if (process.env.SANTOID_SDK_CREDENTIALS) {
25
+ credentialsBase64 = fs_1.default.readFileSync(process.env.SANTOID_SDK_CREDENTIALS, { encoding: 'base64' });
26
+ }
24
27
  else {
25
- if (process.env.SANTOID_SDK_CREDENTIALS) {
26
- credentialsBase64 = fs_1.default.readFileSync(process.env.SANTOID_SDK_CREDENTIALS, { encoding: 'base64' });
27
- }
28
- else {
29
- throw new Error('Credentials not found');
30
- }
28
+ throw new Error('Credentials not found');
31
29
  }
32
30
  if (credentialsBase64) {
33
31
  const response = await axios_1.default.post(`${(_a = options === null || options === void 0 ? void 0 : options.customApiUrl) !== null && _a !== void 0 ? _a : constants_1.API_GATEWAY_URL}/api/v1/service-account/refresh-token`, { service_account_base64: credentialsBase64 }, { headers: { 'Content-Type': 'application/json' } });
@@ -0,0 +1,6 @@
1
+ import { livenessDetection } from './liveness/methods/livenessDetection';
2
+ import { uploadIdentificationDocument } from './liveness/methods/uploadIdentificationDocument';
3
+ export default class SantoiDSDK {
4
+ static readonly livenessDetection: typeof livenessDetection;
5
+ static readonly uploadIdentificationDocument: typeof uploadIdentificationDocument;
6
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const livenessDetection_1 = require("./liveness/methods/livenessDetection");
4
+ const uploadIdentificationDocument_1 = require("./liveness/methods/uploadIdentificationDocument");
5
+ class SantoiDSDK {
6
+ }
7
+ SantoiDSDK.livenessDetection = livenessDetection_1.livenessDetection;
8
+ SantoiDSDK.uploadIdentificationDocument = uploadIdentificationDocument_1.uploadIdentificationDocument;
9
+ exports.default = SantoiDSDK;
@@ -1,7 +1,3 @@
1
1
  import { livenessDetection } from './methods/livenessDetection';
2
2
  import { uploadIdentificationDocument } from './methods/uploadIdentificationDocument';
3
3
  export { livenessDetection, uploadIdentificationDocument, };
4
- export default class SantoiDSDK {
5
- static livenessDetection: typeof livenessDetection;
6
- static uploadIdentificationDocument: typeof uploadIdentificationDocument;
7
- }
@@ -5,8 +5,3 @@ const livenessDetection_1 = require("./methods/livenessDetection");
5
5
  Object.defineProperty(exports, "livenessDetection", { enumerable: true, get: function () { return livenessDetection_1.livenessDetection; } });
6
6
  const uploadIdentificationDocument_1 = require("./methods/uploadIdentificationDocument");
7
7
  Object.defineProperty(exports, "uploadIdentificationDocument", { enumerable: true, get: function () { return uploadIdentificationDocument_1.uploadIdentificationDocument; } });
8
- class SantoiDSDK {
9
- }
10
- SantoiDSDK.livenessDetection = livenessDetection_1.livenessDetection;
11
- SantoiDSDK.uploadIdentificationDocument = uploadIdentificationDocument_1.uploadIdentificationDocument;
12
- exports.default = SantoiDSDK;
@@ -1,4 +1,4 @@
1
- import { LivenessDetectionService } from '../../../../liveness/methods/livenessDetection/Service';
1
+ import { LivenessDetectionService } from '../../../../client/liveness/methods/livenessDetection/Service';
2
2
  import { type ISDKOptions } from '../../../../utils/types';
3
3
  export declare class NodeLivenessDetectionService<TFrameType, TMediaType> extends LivenessDetectionService<TFrameType, TMediaType> {
4
4
  options: ISDKOptions<TFrameType, TMediaType>;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.NodeLivenessDetectionService = void 0;
4
- const Service_1 = require("../../../../liveness/methods/livenessDetection/Service");
4
+ const Service_1 = require("../../../../client/liveness/methods/livenessDetection/Service");
5
5
  const constants_1 = require("../../../../utils/constants");
6
6
  const utils_1 = require("../../../../utils");
7
7
  class NodeLivenessDetectionService extends Service_1.LivenessDetectionService {
@@ -15,17 +15,17 @@ function livenessDetection(options) {
15
15
  const abstractWebSocket = new websocket_1.AbstractWebSocket({ WebSocketClass: (_a = options.CustomWebSocketClass) !== null && _a !== void 0 ? _a : ws_1.default, decodeJwt: index_1.decodeJwt }, options);
16
16
  abstractWebSocket.startConnection();
17
17
  const livenessDetectionHandler = new Service_1.NodeLivenessDetectionService(options, abstractWebSocket);
18
- void abstractWebSocket.waitForWebSocketConnection()
19
- .then(() => { void livenessDetectionHandler.onConnect(); })
20
- .catch(() => { void livenessDetectionHandler.onError(); });
18
+ abstractWebSocket.waitForWebSocketConnection()
19
+ .then(() => { livenessDetectionHandler.onConnect(); })
20
+ .catch(() => { livenessDetectionHandler.onError(); });
21
21
  abstractWebSocket.addListener('message', (data) => {
22
- void livenessDetectionHandler.onWebSocketMessage({ data: Buffer.from(data).toString() });
22
+ livenessDetectionHandler.onWebSocketMessage({ data: Buffer.from(data).toString() });
23
23
  });
24
24
  abstractWebSocket.addListener('error', () => {
25
- void livenessDetectionHandler.onError();
25
+ livenessDetectionHandler.onError();
26
26
  });
27
27
  abstractWebSocket.addListener('close', () => {
28
- void livenessDetectionHandler.onError();
28
+ livenessDetectionHandler.onError();
29
29
  });
30
30
  return {
31
31
  stopLivenessDetection: async () => {
@@ -1,4 +1,4 @@
1
- import { UploadIdentificationDocumentService, type IServiceOptions, type IInternalServiceOptions } from '../../../../liveness/methods/uploadIdentificationDocument/Service';
1
+ import { UploadIdentificationDocumentService, type IServiceOptions, type IInternalServiceOptions } from '../../../../client/liveness/methods/uploadIdentificationDocument/Service';
2
2
  export declare class NodeUploadIdentificationDocumentService<TFrameType, TMediaType, TFileType> extends UploadIdentificationDocumentService<TFrameType, TMediaType, TFileType> {
3
3
  constructor(options: IServiceOptions<TFrameType, TMediaType, TFileType>, internalOptions: IInternalServiceOptions<TFrameType, TMediaType>);
4
4
  }
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.NodeUploadIdentificationDocumentService = void 0;
7
7
  const form_data_1 = __importDefault(require("form-data"));
8
- const Service_1 = require("../../../../liveness/methods/uploadIdentificationDocument/Service");
8
+ const Service_1 = require("../../../../client/liveness/methods/uploadIdentificationDocument/Service");
9
9
  const TypificationService_1 = require("../../../../api/TypificationService");
10
10
  const FaceMatchService_1 = require("../../../../api/FaceMatchService");
11
11
  const index_1 = require("../../utils/index");
@@ -1,5 +1,5 @@
1
1
  import { type Data } from 'ws';
2
- import { type IServiceOptions } from '../../../../liveness/methods/uploadIdentificationDocument/Service';
2
+ import { type IServiceOptions } from '../../../../client/liveness/methods/uploadIdentificationDocument/Service';
3
3
  import { type TFrameType, type TMediaType } from '../livenessDetection';
4
4
  type TFileType = Data;
5
5
  export declare function uploadIdentificationDocument(options: IServiceOptions<TFrameType, TMediaType, TFileType>): {
@@ -8,7 +8,7 @@ export declare function uploadIdentificationDocument(options: IServiceOptions<TF
8
8
  track?: string | undefined;
9
9
  token?: string | undefined;
10
10
  }) | undefined) => (Omit<{
11
- getVideoStream: () => import("../../../../liveness/methods/livenessDetection").TMediaType;
11
+ getVideoStream: () => import("../../../../client/liveness/methods/livenessDetection").TMediaType;
12
12
  stopLivenessDetection: () => Promise<void>;
13
13
  resumeGettingFrames: () => void;
14
14
  pauseGettingFrames: () => void;
@@ -20,6 +20,6 @@ export declare function uploadIdentificationDocument(options: IServiceOptions<TF
20
20
  track?: string | undefined;
21
21
  token?: string | undefined;
22
22
  }) | undefined) => void;
23
- getResults: () => import("../../../../liveness/methods/uploadIdentificationDocument/Service").IUploadIdentificationDocumentResults<Data>;
23
+ getResults: () => import("../../../../client/liveness/methods/uploadIdentificationDocument/Service").IUploadIdentificationDocumentResults<Data>;
24
24
  };
25
25
  export {};
@@ -1,5 +1,6 @@
1
1
  export declare const WEBSOCKET_BASE_URL = "wss://santoid-liveness-w4ynos5dlq-ue.a.run.app/api/v1/liveness/ws";
2
2
  export declare const API_GATEWAY_URL = "https://api.santoid.com.br";
3
+ export declare const APPLICATION_URL = "https://app.santoid.com.br";
3
4
  export declare const SEND_FRAMES_INTERVAL_MS = 100;
4
5
  export declare const DEFAULT_NUMBER_OF_RETRIES = 5;
5
6
  export declare const DEFAULT_RETRY_TIME_STEP = 1000;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_RETRY_TIME_STEP = exports.DEFAULT_NUMBER_OF_RETRIES = exports.SEND_FRAMES_INTERVAL_MS = exports.API_GATEWAY_URL = exports.WEBSOCKET_BASE_URL = void 0;
3
+ exports.DEFAULT_RETRY_TIME_STEP = exports.DEFAULT_NUMBER_OF_RETRIES = exports.SEND_FRAMES_INTERVAL_MS = exports.APPLICATION_URL = exports.API_GATEWAY_URL = exports.WEBSOCKET_BASE_URL = void 0;
4
4
  exports.WEBSOCKET_BASE_URL = 'wss://santoid-liveness-w4ynos5dlq-ue.a.run.app/api/v1/liveness/ws';
5
5
  exports.API_GATEWAY_URL = 'https://api.santoid.com.br';
6
+ exports.APPLICATION_URL = 'https://app.santoid.com.br';
6
7
  exports.SEND_FRAMES_INTERVAL_MS = 100;
7
8
  exports.DEFAULT_NUMBER_OF_RETRIES = 5;
8
9
  exports.DEFAULT_RETRY_TIME_STEP = 1000;
package/utils/index.js CHANGED
@@ -20,7 +20,7 @@ async function waitFor(conditionFn) {
20
20
  }
21
21
  else {
22
22
  setTimeout(() => {
23
- void waitFor(conditionFn).then(resolve);
23
+ waitFor(conditionFn).then(resolve);
24
24
  }, 500);
25
25
  }
26
26
  });
@@ -31,7 +31,7 @@ function callAsyncFunctionEveryXSeconds(fn, xSeconds, baseConfig = { stop: false
31
31
  setTimeout(() => {
32
32
  temporaryConfig.timerEnd = true;
33
33
  }, xSeconds);
34
- void fn()
34
+ fn()
35
35
  .then(async () => {
36
36
  await waitFor(() => temporaryConfig.timerEnd);
37
37
  if (!baseConfig.stop) {
package/utils/types.d.ts CHANGED
@@ -25,6 +25,7 @@ export interface IBaseSDKOptions {
25
25
  domain?: string;
26
26
  customWebSocketUrl?: string;
27
27
  customApiUrl?: string;
28
+ useBillingAccounts?: boolean;
28
29
  }
29
30
  export interface ISDKOptions<TFrameType, TMediaType> extends IBaseSDKOptions {
30
31
  onNextStep?: (step: TPositions) => void | Promise<void>;
@@ -14,8 +14,13 @@ class AbstractWebSocket {
14
14
  x_endpoint_api_userinfo: this.sdkOptions.token,
15
15
  domain: (_a = this.sdkOptions.domain) !== null && _a !== void 0 ? _a : decodedToken.claims.domain,
16
16
  track: this.sdkOptions.track,
17
- customerRequestId: this.sdkOptions.customId,
18
17
  };
18
+ if (this.sdkOptions.customId) {
19
+ query.customerRequestId = this.sdkOptions.customId;
20
+ }
21
+ if (this.sdkOptions.useBillingAccounts) {
22
+ query.clientCredentials = true;
23
+ }
19
24
  const queryStr = Object.entries(query).map(itemsArr => itemsArr.join('=')).join('&');
20
25
  this.websocket = new this.classOptions.WebSocketClass(`${(_b = this.sdkOptions.customWebSocketUrl) !== null && _b !== void 0 ? _b : constants_1.WEBSOCKET_BASE_URL}?${queryStr}`);
21
26
  }
@@ -12,7 +12,7 @@ const generalConfig = {
12
12
  new CleanWebpackPlugin({
13
13
  cleanStaleWebpackAssets: false,
14
14
  cleanOnceBeforeBuildPatterns: [
15
- path.resolve(__dirname, './dist/browser/liveness'),
15
+ path.resolve(__dirname, './dist/browser'),
16
16
  ],
17
17
  }),
18
18
  ],
@@ -40,10 +40,10 @@ const generalConfig = {
40
40
  }
41
41
 
42
42
  const browserConfig = {
43
- entry: './src/liveness/index.ts',
43
+ entry: './src/client/index.ts',
44
44
  target: 'web',
45
45
  output: {
46
- path: path.resolve(__dirname, './dist/browser/liveness'),
46
+ path: path.resolve(__dirname, './dist/browser'),
47
47
  filename: 'index.js',
48
48
  libraryTarget: 'umd',
49
49
  globalObject: 'this',
@@ -1 +0,0 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("SantoiDSDK",[],t):"object"==typeof exports?exports.SantoiDSDK=t():e.SantoiDSDK=t()}(this,(()=>(()=>{"use strict";var e={373:function(e,t,n){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractService=void 0;const r=o(n(218)),s=n(661);t.AbstractService=class{constructor(e,t){this.options=e,this.serviceOptions=t}request(e){var t,n,o,{contentType:i="application/json",authToken:a=this.options.token,baseUrl:c=(null!==(t=this.options.customApiUrl)&&void 0!==t?t:s.API_GATEWAY_URL)}=void 0===e?{}:e;const l={baseURL:c,headers:{"Content-Type":i,Authorization:`Bearer ${a}`}},u=this.serviceOptions.tryDecodeJwt(this.options.token),d=null!==(n=this.options.domain)&&void 0!==n?n:null===(o=null==u?void 0:u.claims)||void 0===o?void 0:o.domain;return l.headers&&d&&(l.headers.Domain=d),r.default.create(l)}}},605:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FaceMatchService=void 0;const o=n(373),r=n(951);class s extends o.AbstractService{async faceMatch(e,t){return await(0,r.retryAsyncFunctionXTimes)((async()=>{const n=new this.serviceOptions.FormDataClass;return n.append("track",this.options.track),n.append("firstImage",e,"firstImage.jpg"),n.append("secondImage",t,"secondImage.jpg"),(await this.request({contentType:"multipart/form-data"}).post("/api/v1/facematch/pair",n,{params:{sensitive_data_compliance:!0}})).data}))}}t.FaceMatchService=s},144:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TypificationService=void 0;const o=n(373),r=n(951);class s extends o.AbstractService{async predict(e){return await(0,r.retryAsyncFunctionXTimes)((async()=>{const t=new this.serviceOptions.FormDataClass;return t.append("track",this.options.track),t.append("imageFile",e,"imageFile.jpg"),(await this.request({contentType:"multipart/form-data"}).post("/api/v3/typification/predict",t)).data}))}}t.TypificationService=s},822:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LivenessDetectionService=void 0;const o=n(551),r=n(882),s=n(951),i=n(661);t.LivenessDetectionService=class{constructor(e,t){this.frameGetControls={},this.currentStep="front",this.pauseSendingFramesToWebSocket=!1,this.websocketClosedBySDK=!1,this.validationSuccess=!1,this.canSendNextBytes=!0,this.endCalled=!1,this.cancelSendingFramesToWebsocket=void 0,this.successFrames={front:void 0,right:void 0,left:void 0,up:void 0,bottom:void 0},this.options=e,this.abstractWebSocket=t}async onWebSocketMessage(e){var t,n,r,i,a,c,l,u;const d=e.data,f=JSON.parse(d);return(null==f?void 0:f.validation)&&this.currentStep&&(this.successFrames[this.currentStep]=this.lastSentBytes),(null==f?void 0:f.next_step)&&!f.error&&(this.currentStep=f.next_step,await(null===(n=(t=this.options).onNextStep)||void 0===n?void 0:n.call(t,f.next_step)),await(null===(i=(r=this.options)[`on${(0,s.capitalizeFirstLetter)(f.next_step)}Step`])||void 0===i?void 0:i.call(r))),f&&(this.canSendNextBytes=!!(null==f?void 0:f.can_send_next_bytes)),(null==f?void 0:f.success)&&(this.successFrames.bottom=this.lastSentBytes,this.validationSuccess=!0,await(null===(c=(a=this.options).onSuccess)||void 0===c?void 0:c.call(a,{livenessId:f.livenessId,successFrames:this.successFrames})),await this.stopLivenessDetection()),(null==f?void 0:f.error)&&await(null===(u=(l=this.options).onError)||void 0===u?void 0:u.call(l,new o.SDKError({message:"Wrong position",code:o.ELivenessDetectionErrorCodes.WRONG_POSITION}))),f}async stopLivenessDetection(){var e,t,n,o,r;await(0,s.waitFor)((()=>!!this.cancelSendingFramesToWebsocket)),null===(e=this.cancelSendingFramesToWebsocket)||void 0===e||e.call(this),await(null===(n=(t=this.frameGetControls).stopGettingFrames)||void 0===n?void 0:n.call(t)),this.abstractWebSocket.disconnectFromWebSocket(),this.endCalled||(await(null===(r=(o=this.options).onEnd)||void 0===r?void 0:r.call(o)),this.endCalled=!0),this.websocketClosedBySDK=!0}async sendFramesToWebSocket(){var e,t;try{if(this.canSendNextBytes&&!this.pauseSendingFramesToWebSocket){const n=await(null===(t=(e=this.frameGetControls).getNextFrame)||void 0===t?void 0:t.call(e));n&&(this.abstractWebSocket.send(n),this.lastSentBytes=n,this.canSendNextBytes=!1)}}catch(e){await this.stopLivenessDetection()}}async onConnect(){var e,t,n,o,a,c,l,u,d,f;try{if(this.options.getNextFrame)this.frameGetControls.startGettingFrames=this.options.startGettingFrames,this.frameGetControls.getNextFrame=this.options.getNextFrame,this.frameGetControls.stopGettingFrames=this.options.stopGettingFrames,this.frameGetControls.videoStream=await(null===(t=(e=this.options).startGettingFrames)||void 0===t?void 0:t.call(e));else{const e=await(0,r.getDefaultFrameControls)();this.frameGetControls.startGettingFrames=e.startGettingFrames,this.frameGetControls.getNextFrame=e.getNextFrame,this.frameGetControls.stopGettingFrames=e.stopGettingFrames,this.frameGetControls.videoStream=await(null===(o=(n=this.frameGetControls).startGettingFrames)||void 0===o?void 0:o.call(n))}await(null===(c=(a=this.options).onStart)||void 0===c?void 0:c.call(a,{videoStream:this.getVideoStream()})),await(null===(u=(l=this.options).onNextStep)||void 0===u?void 0:u.call(l,"front")),await(null===(f=(d=this.options).onFrontStep)||void 0===f?void 0:f.call(d)),this.cancelSendingFramesToWebsocket=(0,s.callAsyncFunctionEveryXSeconds)((async()=>{await this.sendFramesToWebSocket()}),i.SEND_FRAMES_INTERVAL_MS)}catch(e){await this.onError()}}async onError(){var e,t;this.validationSuccess||(await(null===(t=(e=this.options).onError)||void 0===t?void 0:t.call(e,new o.SDKError({message:"Internal Error",code:o.EDefaultErrorCodes.INTERNAL_ERROR}))),await this.stopLivenessDetection())}resumeGettingFrames(){this.pauseSendingFramesToWebSocket=!1}pauseGettingFrames(){this.pauseSendingFramesToWebSocket=!0}getVideoStream(){var e;return null===(e=this.frameGetControls)||void 0===e?void 0:e.videoStream}}},440:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.livenessDetection=void 0;const o=n(822),r=n(551),s=n(706),i=n(228);t.livenessDetection=function(e){var t;try{const n=new s.AbstractWebSocket({WebSocketClass:null!==(t=e.CustomWebSocketClass)&&void 0!==t?t:WebSocket,decodeJwt:i.decodeJwt},e);n.startConnection();const r=new o.LivenessDetectionService(e,n);return n.waitForWebSocketConnection().then((()=>{r.onConnect()})).catch((()=>{r.onError()})),n.addListener("message",(e=>{r.onWebSocketMessage(e)})),n.addListener("error",(()=>{r.onError()})),n.addListener("close",(()=>{r.onError()})),{getVideoStream:()=>r.getVideoStream(),stopLivenessDetection:async()=>{await r.stopLivenessDetection()},resumeGettingFrames:()=>{r.resumeGettingFrames()},pauseGettingFrames:()=>{r.pauseGettingFrames()}}}catch(e){throw new r.SDKError({message:"Error while starting SDK",code:r.EDefaultErrorCodes.INITIALIZATION_ERROR})}}},330:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UploadIdentificationDocumentService=void 0;const o=n(144),r=n(605),s=n(551),i=n(228);t.UploadIdentificationDocumentService=class{constructor(e,t){this.results={uploadedDocument:null,typification:{status:null,results:null,loading:!1,error:null},liveness:{status:null,results:null,loading:!1,error:null},faceMatch:{status:null,results:null,loading:!1,error:null}},this.options=e,this.internalOptions=t,this.typificationService=new o.TypificationService(e,{FormDataClass:FormData,tryDecodeJwt:i.tryDecodeJwt}),this.faceMatchService=new r.FaceMatchService(e,{FormDataClass:FormData,tryDecodeJwt:i.tryDecodeJwt})}getResults(){return this.results}async updateResults(e){var t,n,o,r,s,i;this.results=Object.assign(Object.assign({},this.results),e),await(null===(n=(t=this.options).onUpdate)||void 0===n?void 0:n.call(t,this.results)),e.faceMatch||this.tryStartFaceMatch(),Object.entries(this.results).every((([e,t])=>"uploadedDocument"===e||!!t.results))&&(await(null===(r=(o=this.options).onSuccess)||void 0===r?void 0:r.call(o,this.results)),await(null===(i=(s=this.options).onEnd)||void 0===i?void 0:i.call(s)))}updateUploadedDocument(e){this.results.uploadedDocument=e}async startDocumentUpload(e){var t,n;try{this.updateResults({typification:{status:null,results:null,loading:!0,error:null}}),this.updateUploadedDocument(e);const t=await this.typificationService.predict(e);this.updateResults({typification:{status:"success",results:t,loading:!1,error:null}})}catch(e){const o=new s.SDKError({message:"Error during document upload/analysis",code:s.EUploadIdentificationDocumentErrorCodes.DOCUMENT_ANALYSIS_ERROR,details:e});await(null===(n=(t=this.options).onError)||void 0===n?void 0:n.call(t,o)),this.updateResults({typification:{status:"error",results:null,loading:!1,error:o}})}}startLivenessDetection(e){var t,n;const o=Object.assign(Object.assign({},this.options.livenessDetectionOptions),e);this.updateResults({liveness:{results:null,status:null,loading:!0,error:null}});try{return this.internalOptions.livenessDetection(Object.assign(Object.assign({domain:this.options.domain,customId:this.options.customId,customWebSocketUrl:this.options.customWebSocketUrl,token:this.options.token,track:this.options.track},o),{onSuccess:async e=>{var t;await(null===(t=null==o?void 0:o.onSuccess)||void 0===t?void 0:t.call(o,e)),this.updateResults({liveness:{status:"success",results:e,loading:!1,error:null}})},onError:async e=>{var t,n,r;await(null===(t=null==o?void 0:o.onError)||void 0===t?void 0:t.call(o,e)),await(null===(r=(n=this.options).onError)||void 0===r?void 0:r.call(n,e)),this.updateResults({liveness:{status:"error",results:null,loading:"wrong-position"===(null==e?void 0:e.code),error:null!=e?e:null}})}}))}catch(e){const o=new s.SDKError({message:"Error during liveness detection",code:s.EUploadIdentificationDocumentErrorCodes.LIVENESS_DETECTION_ERROR,details:e});null===(n=(t=this.options).onError)||void 0===n||n.call(t,o),this.updateResults({liveness:{status:"error",results:null,loading:!1,error:o}})}}async startFaceMatch(e,t){var n,o;try{this.updateResults({faceMatch:{status:null,results:null,loading:!0,error:null}});const n=await this.faceMatchService.faceMatch(e,t);this.updateResults({faceMatch:{results:n,status:"success",loading:!1,error:null}})}catch(e){const t=new s.SDKError({message:"Error when comparing the face with the document",code:s.EUploadIdentificationDocumentErrorCodes.FACE_MATCH_ERROR,details:e});await(null===(o=(n=this.options).onError)||void 0===o?void 0:o.call(n,t)),this.updateResults({faceMatch:{results:null,status:"error",loading:!1,error:t}})}}async tryStartFaceMatch(){var e,t,n;!this.results.uploadedDocument||!(null===(e=this.results.liveness.results)||void 0===e?void 0:e.successFrames.front)||this.results.faceMatch.loading||this.results.liveness.loading||this.results.typification.loading?await(null===(n=(t=this.options).onError)||void 0===n?void 0:n.call(t,new s.SDKError({message:"Unavailable faces",code:s.EUploadIdentificationDocumentErrorCodes.FACE_MATCH_UNAVAILABLE_FACES_ERROR}))):await this.startFaceMatch(this.results.uploadedDocument,this.results.liveness.results.successFrames.front)}startAll(e,t){this.startDocumentUpload(e),this.startLivenessDetection(t)}}},376:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.uploadIdentificationDocument=void 0;const o=n(330),r=n(440);t.uploadIdentificationDocument=function(e){const t=new o.UploadIdentificationDocumentService(e,{livenessDetection:r.livenessDetection});return{startDocumentUpload:async(...e)=>{await t.startDocumentUpload(...e)},startLivenessDetection:(...e)=>t.startLivenessDetection(...e),startFaceComparison:async(...e)=>{await t.tryStartFaceMatch(...e)},startAll:(...e)=>{t.startAll(...e)},getResults:(...e)=>t.getResults(...e)}}},882:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getDefaultFrameControls=void 0,t.getDefaultFrameControls=async function(){let e,t,n,o;return{startGettingFrames:async function(){return e&&t&&n||(e=await navigator.mediaDevices.getUserMedia({video:!0}),t=document.createElement("video"),t.setAttribute("autoplay","true"),t.style.transform="scale(-1, 1)",t.style.position="absolute",t.style.left="99999px",document.body.appendChild(t),t.srcObject=e,n=document.createElement("canvas"),o=n.getContext("2d")),e},getNextFrame:async function(){if(n&&t)return n.width=t.videoWidth,n.height=t.videoHeight,null==o||o.drawImage(t,0,0,n.width,n.height),await new Promise(((e,t)=>{n?n.toBlob((t=>{e(t)})):e(null)}));throw new Error("Cannot found video element")},stopGettingFrames:function(){t&&(document.body.removeChild(t),t=void 0),n&&(n=void 0),o&&(o=void 0),e&&(null==e||e.getTracks().forEach((e=>{e.stop()})),e=void 0)}}}},228:(e,t)=>{function n(e){const t=e.split(".")[1].replace(/-/g,"+").replace(/_/g,"/"),n=decodeURIComponent(window.atob(t).split("").map((e=>"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2))).join(""));return JSON.parse(n)}Object.defineProperty(t,"__esModule",{value:!0}),t.tryDecodeJwt=t.decodeJwt=void 0,t.decodeJwt=n,t.tryDecodeJwt=function(e){try{return n(e)}catch(e){return null}}},661:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DEFAULT_RETRY_TIME_STEP=t.DEFAULT_NUMBER_OF_RETRIES=t.SEND_FRAMES_INTERVAL_MS=t.API_GATEWAY_URL=t.WEBSOCKET_BASE_URL=void 0,t.WEBSOCKET_BASE_URL="wss://santoid-liveness-w4ynos5dlq-ue.a.run.app/api/v1/liveness/ws",t.API_GATEWAY_URL="https://api.santoid.com.br",t.SEND_FRAMES_INTERVAL_MS=100,t.DEFAULT_NUMBER_OF_RETRIES=5,t.DEFAULT_RETRY_TIME_STEP=1e3},551:(e,t)=>{var n,o,r;Object.defineProperty(t,"__esModule",{value:!0}),t.SDKError=t.EUploadIdentificationDocumentErrorCodes=t.ELivenessDetectionErrorCodes=t.EDefaultErrorCodes=void 0,function(e){e.INITIALIZATION_ERROR="initialization-error",e.INTERNAL_ERROR="internal-error"}(n||(t.EDefaultErrorCodes=n={})),function(e){e.WRONG_POSITION="liveness-detection/wrong-position"}(o||(t.ELivenessDetectionErrorCodes=o={})),function(e){e.FACE_MATCH_ERROR="upload-identification-document/face-match-error",e.FACE_MATCH_UNAVAILABLE_FACES_ERROR="upload-identification-document/face-match-unavailable-faces-error",e.DOCUMENT_ANALYSIS_ERROR="upload-identification-document/document-analysis-error",e.LIVENESS_DETECTION_ERROR="upload-identification-document/liveness-detection-error"}(r||(t.EUploadIdentificationDocumentErrorCodes=r={}));class s extends Error{constructor({message:e,code:t,details:n}){super(e),this.code=t,this.details=n}}t.SDKError=s},951:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.retryAsyncFunctionXTimes=t.callAsyncFunctionEveryXSeconds=t.waitFor=t.wait=t.capitalizeFirstLetter=void 0;const o=n(218),r=n(661);async function s(e){await new Promise((t=>{e()?t():setTimeout((()=>{s(e).then(t)}),500)}))}function i(e){var t;return e instanceof o.AxiosError&&(503===(null===(t=e.response)||void 0===t?void 0:t.status)||"Network Error"===e.message)}t.capitalizeFirstLetter=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},t.wait=async e=>{await new Promise((t=>{setTimeout(t,e)}))},t.waitFor=s,t.callAsyncFunctionEveryXSeconds=function e(t,n,o={stop:!1}){const r={timerEnd:!1};return setTimeout((()=>{r.timerEnd=!0}),n),t().then((async()=>{await s((()=>r.timerEnd)),o.stop||e(t,n,o)})),function(){o.stop=!0}},t.retryAsyncFunctionXTimes=async function e(n,o=i,s=r.DEFAULT_NUMBER_OF_RETRIES,a=1e3,c=r.DEFAULT_RETRY_TIME_STEP){try{return await n()}catch(r){if(o(r)&&s>0)return await(0,t.wait)(a),await e(n,o,s-1,a+c,c);throw r}}},706:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AbstractWebSocket=void 0;const o=n(661);t.AbstractWebSocket=class{constructor(e,t){this.classOptions=e,this.sdkOptions=t}startConnection(){var e,t;const n=this.classOptions.decodeJwt(this.sdkOptions.token),r={x_endpoint_api_userinfo:this.sdkOptions.token,domain:null!==(e=this.sdkOptions.domain)&&void 0!==e?e:n.claims.domain,track:this.sdkOptions.track,customerRequestId:this.sdkOptions.customId},s=Object.entries(r).map((e=>e.join("="))).join("&");this.websocket=new this.classOptions.WebSocketClass(`${null!==(t=this.sdkOptions.customWebSocketUrl)&&void 0!==t?t:o.WEBSOCKET_BASE_URL}?${s}`)}async waitForWebSocketConnection(){if(await new Promise((e=>{const t=setInterval((()=>{[3,1].includes(this.websocket.readyState)&&(clearInterval(t),e())}),5)})),3===this.websocket.readyState)throw new Error("Cannot connect to server")}disconnectFromWebSocket(){var e,t;[2,3].includes(this.websocket.readyState)||null===(t=(e=this.websocket).close)||void 0===t||t.call(e)}get readyState(){return this.websocket.readyState}addListener(e,t){var n,o;this.websocket.on?this.websocket.on(e,t):null===(o=(n=this.websocket).addEventListener)||void 0===o||o.call(n,e,t)}send(e){this.websocket.send(e)}}},218:(e,t,n)=>{function o(e,t){return function(){return e.apply(t,arguments)}}const{toString:r}=Object.prototype,{getPrototypeOf:s}=Object,i=(a=Object.create(null),e=>{const t=r.call(e);return a[t]||(a[t]=t.slice(8,-1).toLowerCase())});var a;const c=e=>(e=e.toLowerCase(),t=>i(t)===e),l=e=>t=>typeof t===e,{isArray:u}=Array,d=l("undefined"),f=c("ArrayBuffer"),p=l("string"),h=l("function"),m=l("number"),v=e=>null!==e&&"object"==typeof e,y=e=>{if("object"!==i(e))return!1;const t=s(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},E=c("Date"),g=c("File"),w=c("Blob"),b=c("FileList"),S=c("URLSearchParams");function O(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let o,r;if("object"!=typeof e&&(e=[e]),u(e))for(o=0,r=e.length;o<r;o++)t.call(null,e[o],o,e);else{const r=n?Object.getOwnPropertyNames(e):Object.keys(e),s=r.length;let i;for(o=0;o<s;o++)i=r[o],t.call(null,e[i],i,e)}}function R(e,t){t=t.toLowerCase();const n=Object.keys(e);let o,r=n.length;for(;r-- >0;)if(o=n[r],t===o.toLowerCase())return o;return null}const A="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:n.g,T=e=>!d(e)&&e!==A,_=(F="undefined"!=typeof Uint8Array&&s(Uint8Array),e=>F&&e instanceof F);var F;const D=c("HTMLFormElement"),C=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),N=c("RegExp"),j=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),o={};O(n,((n,r)=>{let s;!1!==(s=t(n,r,e))&&(o[r]=s||n)})),Object.defineProperties(e,o)},x="abcdefghijklmnopqrstuvwxyz",L="0123456789",k={DIGIT:L,ALPHA:x,ALPHA_DIGIT:x+x.toUpperCase()+L},U=c("AsyncFunction");var P={isArray:u,isArrayBuffer:f,isBuffer:function(e){return null!==e&&!d(e)&&null!==e.constructor&&!d(e.constructor)&&h(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||h(e.append)&&("formdata"===(t=i(e))||"object"===t&&h(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&f(e.buffer),t},isString:p,isNumber:m,isBoolean:e=>!0===e||!1===e,isObject:v,isPlainObject:y,isUndefined:d,isDate:E,isFile:g,isBlob:w,isRegExp:N,isFunction:h,isStream:e=>v(e)&&h(e.pipe),isURLSearchParams:S,isTypedArray:_,isFileList:b,forEach:O,merge:function e(){const{caseless:t}=T(this)&&this||{},n={},o=(o,r)=>{const s=t&&R(n,r)||r;y(n[s])&&y(o)?n[s]=e(n[s],o):y(o)?n[s]=e({},o):u(o)?n[s]=o.slice():n[s]=o};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&O(arguments[e],o);return n},extend:(e,t,n,{allOwnKeys:r}={})=>(O(t,((t,r)=>{n&&h(t)?e[r]=o(t,n):e[r]=t}),{allOwnKeys:r}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,o)=>{e.prototype=Object.create(t.prototype,o),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,o)=>{let r,i,a;const c={};if(t=t||{},null==e)return t;do{for(r=Object.getOwnPropertyNames(e),i=r.length;i-- >0;)a=r[i],o&&!o(a,e,t)||c[a]||(t[a]=e[a],c[a]=!0);e=!1!==n&&s(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:i,kindOfTest:c,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const o=e.indexOf(t,n);return-1!==o&&o===n},toArray:e=>{if(!e)return null;if(u(e))return e;let t=e.length;if(!m(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[Symbol.iterator]).call(e);let o;for(;(o=n.next())&&!o.done;){const n=o.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const o=[];for(;null!==(n=e.exec(t));)o.push(n);return o},isHTMLForm:D,hasOwnProperty:C,hasOwnProp:C,reduceDescriptors:j,freezeMethods:e=>{j(e,((t,n)=>{if(h(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const o=e[n];h(o)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},o=e=>{e.forEach((e=>{n[e]=!0}))};return u(e)?o(e):o(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>(e=+e,Number.isFinite(e)?e:t),findKey:R,global:A,isContextDefined:T,ALPHABET:k,generateString:(e=16,t=k.ALPHA_DIGIT)=>{let n="";const{length:o}=t;for(;e--;)n+=t[Math.random()*o|0];return n},isSpecCompliantForm:function(e){return!!(e&&h(e.append)&&"FormData"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:e=>{const t=new Array(10),n=(e,o)=>{if(v(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[o]=e;const r=u(e)?[]:{};return O(e,((e,t)=>{const s=n(e,o+1);!d(s)&&(r[t]=s)})),t[o]=void 0,r}}return e};return n(e,0)},isAsyncFn:U,isThenable:e=>e&&(v(e)||h(e))&&h(e.then)&&h(e.catch)};function I(e,t,n,o,r){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),o&&(this.request=o),r&&(this.response=r)}P.inherits(I,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:P.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const B=I.prototype,M={};function W(e){return P.isPlainObject(e)||P.isArray(e)}function G(e){return P.endsWith(e,"[]")?e.slice(0,-2):e}function q(e,t,n){return e?e.concat(t).map((function(e,t){return e=G(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{M[e]={value:e}})),Object.defineProperties(I,M),Object.defineProperty(B,"isAxiosError",{value:!0}),I.from=(e,t,n,o,r,s)=>{const i=Object.create(B);return P.toFlatObject(e,i,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),I.call(i,e.message,t,n,o,r),i.cause=e,i.name=e.name,s&&Object.assign(i,s),i};const J=P.toFlatObject(P,{},null,(function(e){return/^is[A-Z]/.test(e)}));function K(e,t,n){if(!P.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const o=(n=P.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!P.isUndefined(t[e])}))).metaTokens,r=n.visitor||l,s=n.dots,i=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&P.isSpecCompliantForm(t);if(!P.isFunction(r))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(P.isDate(e))return e.toISOString();if(!a&&P.isBlob(e))throw new I("Blob is not supported. Use a Buffer instead.");return P.isArrayBuffer(e)||P.isTypedArray(e)?a&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function l(e,n,r){let a=e;if(e&&!r&&"object"==typeof e)if(P.endsWith(n,"{}"))n=o?n:n.slice(0,-2),e=JSON.stringify(e);else if(P.isArray(e)&&function(e){return P.isArray(e)&&!e.some(W)}(e)||(P.isFileList(e)||P.endsWith(n,"[]"))&&(a=P.toArray(e)))return n=G(n),a.forEach((function(e,o){!P.isUndefined(e)&&null!==e&&t.append(!0===i?q([n],o,s):null===i?n:n+"[]",c(e))})),!1;return!!W(e)||(t.append(q(r,n,s),c(e)),!1)}const u=[],d=Object.assign(J,{defaultVisitor:l,convertValue:c,isVisitable:W});if(!P.isObject(e))throw new TypeError("data must be an object");return function e(n,o){if(!P.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+o.join("."));u.push(n),P.forEach(n,(function(n,s){!0===(!(P.isUndefined(n)||null===n)&&r.call(t,n,P.isString(s)?s.trim():s,o,d))&&e(n,o?o.concat(s):[s])})),u.pop()}}(e),t}function z(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function H(e,t){this._pairs=[],e&&K(e,this,t)}const V=H.prototype;function $(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function X(e,t,n){if(!t)return e;const o=n&&n.encode||$,r=n&&n.serialize;let s;if(s=r?r(t,n):P.isURLSearchParams(t)?t.toString():new H(t,n).toString(o),s){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}V.append=function(e,t){this._pairs.push([e,t])},V.toString=function(e){const t=e?function(t){return e.call(this,t,z)}:z;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var Y=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){P.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},Z={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Q={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:H,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},isStandardBrowserEnv:(()=>{let e;return("undefined"==typeof navigator||"ReactNative"!==(e=navigator.product)&&"NativeScript"!==e&&"NS"!==e)&&"undefined"!=typeof window&&"undefined"!=typeof document})(),isStandardBrowserWebWorkerEnv:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,protocols:["http","https","file","blob","url","data"]};function ee(e){function t(e,n,o,r){let s=e[r++];const i=Number.isFinite(+s),a=r>=e.length;return s=!s&&P.isArray(o)?o.length:s,a?(P.hasOwnProp(o,s)?o[s]=[o[s],n]:o[s]=n,!i):(o[s]&&P.isObject(o[s])||(o[s]=[]),t(e,n,o[s],r)&&P.isArray(o[s])&&(o[s]=function(e){const t={},n=Object.keys(e);let o;const r=n.length;let s;for(o=0;o<r;o++)s=n[o],t[s]=e[s];return t}(o[s])),!i)}if(P.isFormData(e)&&P.isFunction(e.entries)){const n={};return P.forEachEntry(e,((e,o)=>{t(function(e){return P.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),o,n,0)})),n}return null}const te={transitional:Z,adapter:["xhr","http"],transformRequest:[function(e,t){const n=t.getContentType()||"",o=n.indexOf("application/json")>-1,r=P.isObject(e);if(r&&P.isHTMLForm(e)&&(e=new FormData(e)),P.isFormData(e))return o&&o?JSON.stringify(ee(e)):e;if(P.isArrayBuffer(e)||P.isBuffer(e)||P.isStream(e)||P.isFile(e)||P.isBlob(e))return e;if(P.isArrayBufferView(e))return e.buffer;if(P.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(r){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return K(e,new Q.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,o){return Q.isNode&&P.isBuffer(e)?(this.append(t,e.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((s=P.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return K(s?{"files[]":e}:e,t&&new t,this.formSerializer)}}return r||o?(t.setContentType("application/json",!1),function(e,t,n){if(P.isString(e))try{return(0,JSON.parse)(e),P.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(0,JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||te.transitional,n=t&&t.forcedJSONParsing,o="json"===this.responseType;if(e&&P.isString(e)&&(n&&!this.responseType||o)){const n=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw I.from(e,I.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Q.classes.FormData,Blob:Q.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};P.forEach(["delete","get","head","post","put","patch"],(e=>{te.headers[e]={}}));var ne=te;const oe=P.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),re=Symbol("internals");function se(e){return e&&String(e).trim().toLowerCase()}function ie(e){return!1===e||null==e?e:P.isArray(e)?e.map(ie):String(e)}function ae(e,t,n,o,r){return P.isFunction(o)?o.call(this,t,n):(r&&(t=n),P.isString(t)?P.isString(o)?-1!==t.indexOf(o):P.isRegExp(o)?o.test(t):void 0:void 0)}class ce{constructor(e){e&&this.set(e)}set(e,t,n){const o=this;function r(e,t,n){const r=se(t);if(!r)throw new Error("header name must be a non-empty string");const s=P.findKey(o,r);(!s||void 0===o[s]||!0===n||void 0===n&&!1!==o[s])&&(o[s||t]=ie(e))}const s=(e,t)=>P.forEach(e,((e,n)=>r(e,n,t)));return P.isPlainObject(e)||e instanceof this.constructor?s(e,t):P.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?s((e=>{const t={};let n,o,r;return e&&e.split("\n").forEach((function(e){r=e.indexOf(":"),n=e.substring(0,r).trim().toLowerCase(),o=e.substring(r+1).trim(),!n||t[n]&&oe[n]||("set-cookie"===n?t[n]?t[n].push(o):t[n]=[o]:t[n]=t[n]?t[n]+", "+o:o)})),t})(e),t):null!=e&&r(t,e,n),this}get(e,t){if(e=se(e)){const n=P.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=n.exec(e);)t[o[1]]=o[2];return t}(e);if(P.isFunction(t))return t.call(this,e,n);if(P.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=se(e)){const n=P.findKey(this,e);return!(!n||void 0===this[n]||t&&!ae(0,this[n],n,t))}return!1}delete(e,t){const n=this;let o=!1;function r(e){if(e=se(e)){const r=P.findKey(n,e);!r||t&&!ae(0,n[r],r,t)||(delete n[r],o=!0)}}return P.isArray(e)?e.forEach(r):r(e),o}clear(e){const t=Object.keys(this);let n=t.length,o=!1;for(;n--;){const r=t[n];e&&!ae(0,this[r],r,e,!0)||(delete this[r],o=!0)}return o}normalize(e){const t=this,n={};return P.forEach(this,((o,r)=>{const s=P.findKey(n,r);if(s)return t[s]=ie(o),void delete t[r];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(r):String(r).trim();i!==r&&delete t[r],t[i]=ie(o),n[i]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return P.forEach(this,((n,o)=>{null!=n&&!1!==n&&(t[o]=e&&P.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[re]=this[re]={accessors:{}}).accessors,n=this.prototype;function o(e){const o=se(e);t[o]||(function(e,t){const n=P.toCamelCase(" "+t);["get","set","has"].forEach((o=>{Object.defineProperty(e,o+n,{value:function(e,n,r){return this[o].call(this,t,e,n,r)},configurable:!0})}))}(n,e),t[o]=!0)}return P.isArray(e)?e.forEach(o):o(e),this}}ce.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),P.reduceDescriptors(ce.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),P.freezeMethods(ce);var le=ce;function ue(e,t){const n=this||ne,o=t||n,r=le.from(o.headers);let s=o.data;return P.forEach(e,(function(e){s=e.call(n,s,r.normalize(),t?t.status:void 0)})),r.normalize(),s}function de(e){return!(!e||!e.__CANCEL__)}function fe(e,t,n){I.call(this,null==e?"canceled":e,I.ERR_CANCELED,t,n),this.name="CanceledError"}P.inherits(fe,I,{__CANCEL__:!0});var pe=Q.isStandardBrowserEnv?{write:function(e,t,n,o,r,s){const i=[];i.push(e+"="+encodeURIComponent(t)),P.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),P.isString(o)&&i.push("path="+o),P.isString(r)&&i.push("domain="+r),!0===s&&i.push("secure"),document.cookie=i.join("; ")},read:function(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}};function he(e,t){return e&&!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t)?function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}var me=Q.isStandardBrowserEnv?function(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let n;function o(n){let o=n;return e&&(t.setAttribute("href",o),o=t.href),t.setAttribute("href",o),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:"/"===t.pathname.charAt(0)?t.pathname:"/"+t.pathname}}return n=o(window.location.href),function(e){const t=P.isString(e)?o(e):e;return t.protocol===n.protocol&&t.host===n.host}}():function(){return!0};function ve(e,t){let n=0;const o=function(e,t){e=e||10;const n=new Array(e),o=new Array(e);let r,s=0,i=0;return t=void 0!==t?t:1e3,function(a){const c=Date.now(),l=o[i];r||(r=c),n[s]=a,o[s]=c;let u=i,d=0;for(;u!==s;)d+=n[u++],u%=e;if(s=(s+1)%e,s===i&&(i=(i+1)%e),c-r<t)return;const f=l&&c-l;return f?Math.round(1e3*d/f):void 0}}(50,250);return r=>{const s=r.loaded,i=r.lengthComputable?r.total:void 0,a=s-n,c=o(a);n=s;const l={loaded:s,total:i,progress:i?s/i:void 0,bytes:a,rate:c||void 0,estimated:c&&i&&s<=i?(i-s)/c:void 0,event:r};l[t?"download":"upload"]=!0,e(l)}}const ye={http:null,xhr:"undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){let o=e.data;const r=le.from(e.headers).normalize(),s=e.responseType;let i,a;function c(){e.cancelToken&&e.cancelToken.unsubscribe(i),e.signal&&e.signal.removeEventListener("abort",i)}P.isFormData(o)&&(Q.isStandardBrowserEnv||Q.isStandardBrowserWebWorkerEnv?r.setContentType(!1):r.getContentType(/^\s*multipart\/form-data/)?P.isString(a=r.getContentType())&&r.setContentType(a.replace(/^\s*(multipart\/form-data);+/,"$1")):r.setContentType("multipart/form-data"));let l=new XMLHttpRequest;if(e.auth){const t=e.auth.username||"",n=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";r.set("Authorization","Basic "+btoa(t+":"+n))}const u=he(e.baseURL,e.url);function d(){if(!l)return;const o=le.from("getAllResponseHeaders"in l&&l.getAllResponseHeaders());!function(e,t,n){const o=n.config.validateStatus;n.status&&o&&!o(n.status)?t(new I("Request failed with status code "+n.status,[I.ERR_BAD_REQUEST,I.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}((function(e){t(e),c()}),(function(e){n(e),c()}),{data:s&&"text"!==s&&"json"!==s?l.response:l.responseText,status:l.status,statusText:l.statusText,headers:o,config:e,request:l}),l=null}if(l.open(e.method.toUpperCase(),X(u,e.params,e.paramsSerializer),!0),l.timeout=e.timeout,"onloadend"in l?l.onloadend=d:l.onreadystatechange=function(){l&&4===l.readyState&&(0!==l.status||l.responseURL&&0===l.responseURL.indexOf("file:"))&&setTimeout(d)},l.onabort=function(){l&&(n(new I("Request aborted",I.ECONNABORTED,e,l)),l=null)},l.onerror=function(){n(new I("Network Error",I.ERR_NETWORK,e,l)),l=null},l.ontimeout=function(){let t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded";const o=e.transitional||Z;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new I(t,o.clarifyTimeoutError?I.ETIMEDOUT:I.ECONNABORTED,e,l)),l=null},Q.isStandardBrowserEnv){const t=(e.withCredentials||me(u))&&e.xsrfCookieName&&pe.read(e.xsrfCookieName);t&&r.set(e.xsrfHeaderName,t)}void 0===o&&r.setContentType(null),"setRequestHeader"in l&&P.forEach(r.toJSON(),(function(e,t){l.setRequestHeader(t,e)})),P.isUndefined(e.withCredentials)||(l.withCredentials=!!e.withCredentials),s&&"json"!==s&&(l.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&l.addEventListener("progress",ve(e.onDownloadProgress,!0)),"function"==typeof e.onUploadProgress&&l.upload&&l.upload.addEventListener("progress",ve(e.onUploadProgress)),(e.cancelToken||e.signal)&&(i=t=>{l&&(n(!t||t.type?new fe(null,e,l):t),l.abort(),l=null)},e.cancelToken&&e.cancelToken.subscribe(i),e.signal&&(e.signal.aborted?i():e.signal.addEventListener("abort",i)));const f=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(u);f&&-1===Q.protocols.indexOf(f)?n(new I("Unsupported protocol "+f+":",I.ERR_BAD_REQUEST,e)):l.send(o||null)}))}};P.forEach(ye,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Ee=e=>`- ${e}`,ge=e=>P.isFunction(e)||null===e||!1===e;var we=e=>{e=P.isArray(e)?e:[e];const{length:t}=e;let n,o;const r={};for(let s=0;s<t;s++){let t;if(n=e[s],o=n,!ge(n)&&(o=ye[(t=String(n)).toLowerCase()],void 0===o))throw new I(`Unknown adapter '${t}'`);if(o)break;r[t||"#"+s]=o}if(!o){const e=Object.entries(r).map((([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new I("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(Ee).join("\n"):" "+Ee(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return o};function be(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new fe(null,e)}function Se(e){return be(e),e.headers=le.from(e.headers),e.data=ue.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),we(e.adapter||ne.adapter)(e).then((function(t){return be(e),t.data=ue.call(e,e.transformResponse,t),t.headers=le.from(t.headers),t}),(function(t){return de(t)||(be(e),t&&t.response&&(t.response.data=ue.call(e,e.transformResponse,t.response),t.response.headers=le.from(t.response.headers))),Promise.reject(t)}))}const Oe=e=>e instanceof le?e.toJSON():e;function Re(e,t){t=t||{};const n={};function o(e,t,n){return P.isPlainObject(e)&&P.isPlainObject(t)?P.merge.call({caseless:n},e,t):P.isPlainObject(t)?P.merge({},t):P.isArray(t)?t.slice():t}function r(e,t,n){return P.isUndefined(t)?P.isUndefined(e)?void 0:o(void 0,e,n):o(e,t,n)}function s(e,t){if(!P.isUndefined(t))return o(void 0,t)}function i(e,t){return P.isUndefined(t)?P.isUndefined(e)?void 0:o(void 0,e):o(void 0,t)}function a(n,r,s){return s in t?o(n,r):s in e?o(void 0,n):void 0}const c={url:s,method:s,data:s,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:a,headers:(e,t)=>r(Oe(e),Oe(t),!0)};return P.forEach(Object.keys(Object.assign({},e,t)),(function(o){const s=c[o]||r,i=s(e[o],t[o],o);P.isUndefined(i)&&s!==a||(n[o]=i)})),n}const Ae={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{Ae[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const Te={};Ae.transitional=function(e,t,n){function o(e,t){return"[Axios v1.5.1] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,r,s)=>{if(!1===e)throw new I(o(r," has been removed"+(t?" in "+t:"")),I.ERR_DEPRECATED);return t&&!Te[r]&&(Te[r]=!0,console.warn(o(r," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,r,s)}};var _e={assertOptions:function(e,t,n){if("object"!=typeof e)throw new I("options must be an object",I.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let r=o.length;for(;r-- >0;){const s=o[r],i=t[s];if(i){const t=e[s],n=void 0===t||i(t,s,e);if(!0!==n)throw new I("option "+s+" must be "+n,I.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new I("Unknown option "+s,I.ERR_BAD_OPTION)}},validators:Ae};const Fe=_e.validators;class De{constructor(e){this.defaults=e,this.interceptors={request:new Y,response:new Y}}request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=Re(this.defaults,t);const{transitional:n,paramsSerializer:o,headers:r}=t;void 0!==n&&_e.assertOptions(n,{silentJSONParsing:Fe.transitional(Fe.boolean),forcedJSONParsing:Fe.transitional(Fe.boolean),clarifyTimeoutError:Fe.transitional(Fe.boolean)},!1),null!=o&&(P.isFunction(o)?t.paramsSerializer={serialize:o}:_e.assertOptions(o,{encode:Fe.function,serialize:Fe.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=r&&P.merge(r.common,r[t.method]);r&&P.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete r[e]})),t.headers=le.concat(s,r);const i=[];let a=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(a=a&&e.synchronous,i.unshift(e.fulfilled,e.rejected))}));const c=[];let l;this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)}));let u,d=0;if(!a){const e=[Se.bind(this),void 0];for(e.unshift.apply(e,i),e.push.apply(e,c),u=e.length,l=Promise.resolve(t);d<u;)l=l.then(e[d++],e[d++]);return l}u=i.length;let f=t;for(d=0;d<u;){const e=i[d++],t=i[d++];try{f=e(f)}catch(e){t.call(this,e);break}}try{l=Se.call(this,f)}catch(e){return Promise.reject(e)}for(d=0,u=c.length;d<u;)l=l.then(c[d++],c[d++]);return l}getUri(e){return X(he((e=Re(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}P.forEach(["delete","get","head","options"],(function(e){De.prototype[e]=function(t,n){return this.request(Re(n||{},{method:e,url:t,data:(n||{}).data}))}})),P.forEach(["post","put","patch"],(function(e){function t(t){return function(n,o,r){return this.request(Re(r||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:o}))}}De.prototype[e]=t(),De.prototype[e+"Form"]=t(!0)}));var Ce=De;class Ne{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const n=this;this.promise.then((e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const o=new Promise((e=>{n.subscribe(e),t=e})).then(e);return o.cancel=function(){n.unsubscribe(t)},o},e((function(e,o,r){n.reason||(n.reason=new fe(e,o,r),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}static source(){let e;return{token:new Ne((function(t){e=t})),cancel:e}}}var je=Ne;const xe={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(xe).forEach((([e,t])=>{xe[t]=e}));var Le=xe;const ke=function e(t){const n=new Ce(t),r=o(Ce.prototype.request,n);return P.extend(r,Ce.prototype,n,{allOwnKeys:!0}),P.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(Re(t,n))},r}(ne);ke.Axios=Ce,ke.CanceledError=fe,ke.CancelToken=je,ke.isCancel=de,ke.VERSION="1.5.1",ke.toFormData=K,ke.AxiosError=I,ke.Cancel=ke.CanceledError,ke.all=function(e){return Promise.all(e)},ke.spread=function(e){return function(t){return e.apply(null,t)}},ke.isAxiosError=function(e){return P.isObject(e)&&!0===e.isAxiosError},ke.mergeConfig=Re,ke.AxiosHeaders=le,ke.formToJSON=e=>ee(P.isHTMLForm(e)?new FormData(e):e),ke.getAdapter=we,ke.HttpStatusCode=Le,ke.default=ke,e.exports=ke}},t={};function n(o){var r=t[o];if(void 0!==r)return r.exports;var s=t[o]={exports:{}};return e[o].call(s.exports,s,s.exports,n),s.exports}n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();var o={};return(()=>{var e=o;const t=n(440),r=n(376);class s{}s.livenessDetection=t.livenessDetection,s.uploadIdentificationDocument=r.uploadIdentificationDocument,e.default=s})(),o.default})()));
File without changes
File without changes
File without changes
File without changes
File without changes