@devix-tecnologia/assinatura-eletronica 0.0.0-stage → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DEVELOPERS.md +123 -0
- package/LICENSE +21 -0
- package/README.md +141 -2
- package/dist/assinatura-orquestrador/assinatura-orquestrador.d.ts +12 -0
- package/dist/assinatura-orquestrador/assinatura-orquestrador.d.ts.map +1 -0
- package/dist/assinatura-orquestrador/assinatura-orquestrador.js +57 -0
- package/dist/assinatura-orquestrador/assinatura-orquestrador.js.map +1 -0
- package/dist/assinatura-orquestrador/assinatura-orquestrador.types.d.ts +14 -0
- package/dist/assinatura-orquestrador/assinatura-orquestrador.types.d.ts.map +1 -0
- package/dist/assinatura-orquestrador/assinatura-orquestrador.types.js +14 -0
- package/dist/assinatura-orquestrador/assinatura-orquestrador.types.js.map +1 -0
- package/dist/assinatura-orquestrador/index.d.ts +2 -0
- package/dist/assinatura-orquestrador/index.d.ts.map +1 -0
- package/dist/assinatura-orquestrador/index.js +2 -0
- package/dist/assinatura-orquestrador/index.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/layerall-policy/index.d.ts +2 -0
- package/dist/layerall-policy/index.d.ts.map +1 -0
- package/dist/layerall-policy/index.js +2 -0
- package/dist/layerall-policy/index.js.map +1 -0
- package/dist/layerall-policy/layerall-policy.d.ts +4 -0
- package/dist/layerall-policy/layerall-policy.d.ts.map +1 -0
- package/dist/layerall-policy/layerall-policy.js +28 -0
- package/dist/layerall-policy/layerall-policy.js.map +1 -0
- package/dist/layerall-policy/layerall-policy.types.d.ts +8 -0
- package/dist/layerall-policy/layerall-policy.types.d.ts.map +1 -0
- package/dist/layerall-policy/layerall-policy.types.js +8 -0
- package/dist/layerall-policy/layerall-policy.types.js.map +1 -0
- package/dist/observer/index.d.ts +4 -0
- package/dist/observer/index.d.ts.map +1 -0
- package/dist/observer/index.js +2 -0
- package/dist/observer/index.js.map +1 -0
- package/dist/observer/observer.d.ts +10 -0
- package/dist/observer/observer.d.ts.map +1 -0
- package/dist/observer/observer.js +70 -0
- package/dist/observer/observer.js.map +1 -0
- package/dist/observer/observer.types.d.ts +8 -0
- package/dist/observer/observer.types.d.ts.map +1 -0
- package/dist/observer/observer.types.js +2 -0
- package/dist/observer/observer.types.js.map +1 -0
- package/dist/provedor-assinatura/index.d.ts +3 -0
- package/dist/provedor-assinatura/index.d.ts.map +1 -0
- package/dist/provedor-assinatura/index.js +2 -0
- package/dist/provedor-assinatura/index.js.map +1 -0
- package/dist/provedor-assinatura/provedor-assinatura.contract.d.ts +24 -0
- package/dist/provedor-assinatura/provedor-assinatura.contract.d.ts.map +1 -0
- package/dist/provedor-assinatura/provedor-assinatura.contract.js +48 -0
- package/dist/provedor-assinatura/provedor-assinatura.contract.js.map +1 -0
- package/dist/provedor-assinatura/provedor-assinatura.mock.d.ts +5 -0
- package/dist/provedor-assinatura/provedor-assinatura.mock.d.ts.map +1 -0
- package/dist/provedor-assinatura/provedor-assinatura.mock.js +53 -0
- package/dist/provedor-assinatura/provedor-assinatura.mock.js.map +1 -0
- package/dist/provedor-assinatura/provedor-assinatura.types.d.ts +69 -0
- package/dist/provedor-assinatura/provedor-assinatura.types.d.ts.map +1 -0
- package/dist/provedor-assinatura/provedor-assinatura.types.js +2 -0
- package/dist/provedor-assinatura/provedor-assinatura.types.js.map +1 -0
- package/dist/provider-adapter/index.d.ts +3 -0
- package/dist/provider-adapter/index.d.ts.map +1 -0
- package/dist/provider-adapter/index.js +2 -0
- package/dist/provider-adapter/index.js.map +1 -0
- package/dist/provider-adapter/provider-adapter.d.ts +6 -0
- package/dist/provider-adapter/provider-adapter.d.ts.map +1 -0
- package/dist/provider-adapter/provider-adapter.js +30 -0
- package/dist/provider-adapter/provider-adapter.js.map +1 -0
- package/dist/provider-adapter/provider-adapter.types.d.ts +26 -0
- package/dist/provider-adapter/provider-adapter.types.d.ts.map +1 -0
- package/dist/provider-adapter/provider-adapter.types.js +2 -0
- package/dist/provider-adapter/provider-adapter.types.js.map +1 -0
- package/package.json +60 -3
package/DEVELOPERS.md
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# Desenvolvendo um novo provedor de assinatura
|
|
2
|
+
|
|
3
|
+
Guia para implementar um provedor concreto (`IProvedorAssinatura`) e validá-lo
|
|
4
|
+
com os testes de contrato.
|
|
5
|
+
|
|
6
|
+
## Estrutura esperada de um provider package
|
|
7
|
+
|
|
8
|
+
```
|
|
9
|
+
packages/meu-provedor-client/
|
|
10
|
+
src/
|
|
11
|
+
meu-provedor-client/
|
|
12
|
+
meu-provedor-client.ts # class MeuProvedorClient implements IProvedorAssinatura
|
|
13
|
+
meu-provedor-client.types.ts # tipos específicos do provedor (config, responses)
|
|
14
|
+
meu-provedor-client.test.ts # testes unitários (mock) + testes de contrato
|
|
15
|
+
index.ts # barrel: só a API pública
|
|
16
|
+
index.ts # reexporta o barrel do módulo
|
|
17
|
+
package.json
|
|
18
|
+
tsconfig.json
|
|
19
|
+
tsconfig.build.json
|
|
20
|
+
vitest.config.ts
|
|
21
|
+
README.md
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Interface a implementar
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import type {
|
|
28
|
+
IProvedorAssinatura,
|
|
29
|
+
DocumentoParaAssinar,
|
|
30
|
+
} from '@devix-tecnologia/assinatura-eletronica';
|
|
31
|
+
|
|
32
|
+
class MeuProvedorClient implements IProvedorAssinatura {
|
|
33
|
+
async enviarParaAssinatura(
|
|
34
|
+
documento: DocumentoParaAssinar
|
|
35
|
+
): Promise<ResultadoEnvio>;
|
|
36
|
+
async obterDetalhes(idDoc: string): Promise<DetalhesDocumento>;
|
|
37
|
+
async cancelarDocumento(idDoc: string): Promise<void>;
|
|
38
|
+
normalizarWebhook(payload: unknown): EventoAssinatura;
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Contrato de cada método
|
|
43
|
+
|
|
44
|
+
**`enviarParaAssinatura`**
|
|
45
|
+
- Recebe um `DocumentoParaAssinar` com PDF em base64, lista de signatários, metadata
|
|
46
|
+
- Deve fazer upload/binário do PDF + criar lista de signatários + enviar para assinatura
|
|
47
|
+
- Retorna `ResultadoEnvio` com `provedorDocId` (ID único no provedor) e `linkAcompanhamento` opcional
|
|
48
|
+
|
|
49
|
+
**`obterDetalhes`**
|
|
50
|
+
- Recebe o `provedorDocId` retornado pelo envio
|
|
51
|
+
- Retorna `DetalhesDocumento` com `status` (string) e URLs de arquivo opcionais
|
|
52
|
+
|
|
53
|
+
**`cancelarDocumento`**
|
|
54
|
+
- Recebe o `provedorDocId`
|
|
55
|
+
- Deve cancelar o documento no provedor
|
|
56
|
+
- Resolve sem valor em caso de sucesso
|
|
57
|
+
|
|
58
|
+
**`normalizarWebhook`**
|
|
59
|
+
- Recebe o payload cru do webhook do provedor
|
|
60
|
+
- Retorna `EventoAssinatura` normalizado
|
|
61
|
+
- Os tipos de evento: `documento_finalizado`, `signatario_assinou`, `documento_cancelado`, `email_nao_entregue`, `outro`
|
|
62
|
+
|
|
63
|
+
## Testes de contrato
|
|
64
|
+
|
|
65
|
+
O pacote exporta `createProvedorAssinaturaContractTests` que executa uma suite
|
|
66
|
+
de testes de conformidade da interface `IProvedorAssinatura`. Importe e execute
|
|
67
|
+
no `.test.ts` do seu provedor:
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
71
|
+
import { createProvedorAssinaturaContractTests } from '@devix-tecnologia/assinatura-eletronica/provedor-assinatura.contract';
|
|
72
|
+
import { MeuProvedorClient } from './meu-provedor-client.js';
|
|
73
|
+
|
|
74
|
+
const hasRealCredentials = !!process.env.MEU_PROVEDOR_TOKEN;
|
|
75
|
+
|
|
76
|
+
(hasRealCredentials ? describe : describe.skip)(
|
|
77
|
+
'MeuProvedorClient contract (real API)',
|
|
78
|
+
() => {
|
|
79
|
+
createProvedorAssinaturaContractTests(
|
|
80
|
+
{
|
|
81
|
+
createProvider: () =>
|
|
82
|
+
new MeuProvedorClient({
|
|
83
|
+
token: process.env.MEU_PROVEDOR_TOKEN!,
|
|
84
|
+
sandbox: true,
|
|
85
|
+
}),
|
|
86
|
+
createDocument: () => ({
|
|
87
|
+
pdfBase64: 'dGVzdGU=',
|
|
88
|
+
signatarios: [{ nome: 'João Silva', email: 'joao@teste.com' }],
|
|
89
|
+
nome: 'Contrato Teste',
|
|
90
|
+
dataLimite: '2026-07-18',
|
|
91
|
+
sandbox: true,
|
|
92
|
+
idExterno: 'ext-001',
|
|
93
|
+
}),
|
|
94
|
+
},
|
|
95
|
+
{ describe, it, beforeEach, expect }
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
);
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
- Os testes de contrato são **skipados por padrão** (sem credenciais reais)
|
|
102
|
+
- Ative com `MEU_PROVEDOR_TOKEN=xxx pnpm test`
|
|
103
|
+
- Os testes garantem que a interface está corretamente implementada
|
|
104
|
+
|
|
105
|
+
## Testes unitários (mock)
|
|
106
|
+
|
|
107
|
+
Além do contrato, mantenha testes unitários com o HTTP layer mockado para
|
|
108
|
+
cobrir comportamentos específicos do provedor:
|
|
109
|
+
|
|
110
|
+
- Mapeamento correto dos campos do `DocumentoParaAssinar` para a API do provedor
|
|
111
|
+
- Normalização de webhooks para cada tipo de evento
|
|
112
|
+
- Tratamento de erros e edge cases (payloads sem campos, timeout, etc.)
|
|
113
|
+
- Overrides por-signatário (se aplicável)
|
|
114
|
+
|
|
115
|
+
## Convensões
|
|
116
|
+
|
|
117
|
+
- Segue o padrão de estrutura de módulos da Devix (`@devix-tecnologia/padroes`):
|
|
118
|
+
uma pasta kebab-case por classe, com `.ts`, `.types.ts`, `.test.ts` e `index.ts`
|
|
119
|
+
- Imports relativos com extensão `.js` (o pacote é ESM e compila com `nodenext`)
|
|
120
|
+
- O `index.ts` é **export-only** (sem lógica)
|
|
121
|
+
- O constructor deve usar um objeto de configuração tipado
|
|
122
|
+
- Dependa do núcleo por `workspace:^`; a versão de cada pacote é calculada pelo
|
|
123
|
+
`lerna version` a partir dos commits (ver `devdocs/README.md` na raiz)
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024-2026 Devix Tecnologia Ltda
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,142 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @devix-tecnologia/assinatura-eletronica
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Abstração unificada para provedores de assinatura eletrônica (ZapSign, D4Sign),
|
|
4
|
+
com orquestração multi-provedor (roteamento, retries, failover) sobre o SDK
|
|
5
|
+
[`@layerall/core`](https://github.com/sidartaveloso/layerall).
|
|
6
|
+
|
|
7
|
+
## Instalação
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add @devix-tecnologia/assinatura-eletronica
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Uso básico
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import {
|
|
17
|
+
AssinaturaOrquestrador,
|
|
18
|
+
criarObserverPadrao,
|
|
19
|
+
} from '@devix-tecnologia/assinatura-eletronica';
|
|
20
|
+
import { ZapsignClient } from '@devix-tecnologia/zapsign-client';
|
|
21
|
+
|
|
22
|
+
const provedor = new ZapsignClient({
|
|
23
|
+
apiToken: process.env.ZAPSIGN_TOKEN!,
|
|
24
|
+
sandbox: true,
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const orquestrador = new AssinaturaOrquestrador(
|
|
28
|
+
provedor,
|
|
29
|
+
undefined,
|
|
30
|
+
criarObserverPadrao(console)
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
const resultado = await orquestrador.enviarParaAssinatura({
|
|
34
|
+
pdfBase64,
|
|
35
|
+
signatarios: [{ nome: 'Fulano', email: 'fulano@exemplo.com' }],
|
|
36
|
+
nome: 'Contrato',
|
|
37
|
+
dataLimite: '2026-12-31',
|
|
38
|
+
sandbox: true,
|
|
39
|
+
idExterno: 'contrato_123',
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
console.log(resultado.provedorDocId, resultado.linkAcompanhamento);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## API pública
|
|
46
|
+
|
|
47
|
+
### Tipos de domínio
|
|
48
|
+
|
|
49
|
+
| Tipo | Descrição |
|
|
50
|
+
| ---------------------- | --------------------------------------------------------- |
|
|
51
|
+
| `IProvedorAssinatura` | Interface que todo provedor deve implementar |
|
|
52
|
+
| `DocumentoParaAssinar` | Dados do documento + lista de signatários |
|
|
53
|
+
| `ResultadoEnvio` | Retorno de `enviarParaAssinatura` |
|
|
54
|
+
| `DetalhesDocumento` | Retorno de `obterDetalhes` |
|
|
55
|
+
| `EventoAssinatura` | Evento normalizado de webhook |
|
|
56
|
+
| `Signatario` | Dados de um signatário (nome, email, telefone, overrides) |
|
|
57
|
+
|
|
58
|
+
### AssinaturaOrquestrador
|
|
59
|
+
|
|
60
|
+
Orquestrador multi-provedor. Construtor:
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
new AssinaturaOrquestrador(
|
|
64
|
+
provedor: IProvedorAssinatura | IProvedorAssinatura[],
|
|
65
|
+
policy?: PolicyDocument,
|
|
66
|
+
observer?: Observer,
|
|
67
|
+
)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
| Método | Retorno |
|
|
71
|
+
| --------------------------------- | ---------------------------- |
|
|
72
|
+
| `enviarParaAssinatura(documento)` | `Promise<ResultadoEnvio>` |
|
|
73
|
+
| `obterDetalhes(idDoc)` | `Promise<DetalhesDocumento>` |
|
|
74
|
+
| `cancelarDocumento(idDoc)` | `Promise<void>` |
|
|
75
|
+
| `normalizarWebhook(payload)` | `EventoAssinatura` |
|
|
76
|
+
|
|
77
|
+
Lança `AggregateError` quando todos os provedores falham.
|
|
78
|
+
|
|
79
|
+
### Multi-provedor com failover
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
import { ZapsignClient } from '@devix-tecnologia/zapsign-client';
|
|
83
|
+
import { D4SignClient } from '@devix-tecnologia/d4sign-client';
|
|
84
|
+
|
|
85
|
+
const orquestrador = new AssinaturaOrquestrador([
|
|
86
|
+
new ZapsignClient({ apiToken: process.env.ZAPSIGN_TOKEN!, sandbox: true }),
|
|
87
|
+
// new D4SignClient({ tokenAPI: ..., cryptKey: ..., cofreUUID: ..., sandbox: true }),
|
|
88
|
+
]);
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Observer (logs estruturados)
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
import { criarObserverPadrao } from '@devix-tecnologia/assinatura-eletronica';
|
|
95
|
+
import type { Logger } from '@devix-tecnologia/utils';
|
|
96
|
+
|
|
97
|
+
const observer = criarObserverPadrao(logger, { prefixo: '[assinatura]' });
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Os eventos `onStart`/`onAttempt`/`onFinish` do LayerAll são traduzidos em logs
|
|
101
|
+
com contexto estruturado (requestId, provedor, tentativa, latência, erro).
|
|
102
|
+
|
|
103
|
+
### Estratégias de seleção de provedor
|
|
104
|
+
|
|
105
|
+
A política padrão é `failover`. É possível customizar via `PolicyDocument`:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import type { PolicyDocument } from '@devix-tecnologia/assinatura-eletronica';
|
|
109
|
+
|
|
110
|
+
const policy: PolicyDocument = {
|
|
111
|
+
tenants: {
|
|
112
|
+
default: {
|
|
113
|
+
providers: ['ZapsignClient_0', 'D4SignClient_1'],
|
|
114
|
+
operations: {
|
|
115
|
+
create: {
|
|
116
|
+
strategy: 'failover',
|
|
117
|
+
failover: true,
|
|
118
|
+
retries: { max: 2, backoffMs: 300 },
|
|
119
|
+
timeoutMs: 10_000,
|
|
120
|
+
},
|
|
121
|
+
status: { strategy: 'round_robin' },
|
|
122
|
+
},
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Estratégias suportadas: `failover`, `round_robin`, `load_balance`, `most_fast`.
|
|
129
|
+
|
|
130
|
+
## Provedores conhecidos
|
|
131
|
+
|
|
132
|
+
- **[@devix-tecnologia/zapsign-client](../zapsign-client)** — Integração com [ZapSign](https://zapsign.com.br)
|
|
133
|
+
- **[@devix-tecnologia/d4sign-client](../d4sign-client)** — Integração com [D4Sign](https://d4sign.com.br)
|
|
134
|
+
|
|
135
|
+
## Para desenvolvedores de provedores
|
|
136
|
+
|
|
137
|
+
Veja [DEVELOPERS.md](./DEVELOPERS.md) — guia de implementação, contrato de testes
|
|
138
|
+
e estrutura do pacote.
|
|
139
|
+
|
|
140
|
+
## Licença
|
|
141
|
+
|
|
142
|
+
MIT. Ver [LICENSE](./LICENSE).
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Observer, PolicyDocument } from '@layerall/core';
|
|
2
|
+
import type { DetalhesDocumento, DocumentoParaAssinar, EventoAssinatura, IProvedorAssinatura, ResultadoEnvio } from '../provedor-assinatura/provedor-assinatura.types.js';
|
|
3
|
+
export declare class AssinaturaOrquestrador {
|
|
4
|
+
private router;
|
|
5
|
+
private provedores;
|
|
6
|
+
constructor(provedor: IProvedorAssinatura | IProvedorAssinatura[], policy?: PolicyDocument, observer?: Observer);
|
|
7
|
+
enviarParaAssinatura(documento: DocumentoParaAssinar): Promise<ResultadoEnvio>;
|
|
8
|
+
obterDetalhes(idDoc: string): Promise<DetalhesDocumento>;
|
|
9
|
+
cancelarDocumento(idDoc: string): Promise<void>;
|
|
10
|
+
normalizarWebhook(payload: unknown): EventoAssinatura;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=assinatura-orquestrador.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assinatura-orquestrador.d.ts","sourceRoot":"","sources":["../../src/assinatura-orquestrador/assinatura-orquestrador.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAY,MAAM,gBAAgB,CAAC;AAMzE,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACf,MAAM,qDAAqD,CAAC;AAU7D,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAwB;IAE1C,YACE,QAAQ,EAAE,mBAAmB,GAAG,mBAAmB,EAAE,EACrD,MAAM,CAAC,EAAE,cAAc,EACvB,QAAQ,CAAC,EAAE,QAAQ,EAsBpB;IAEK,oBAAoB,CACxB,SAAS,EAAE,oBAAoB,GAC9B,OAAO,CAAC,cAAc,CAAC,CAkBzB;IAEK,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAiB7D;IAEK,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAepD;IAED,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAEpD;CACF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Router } from '@layerall/core';
|
|
2
|
+
import { criarPolicyDefault, mapearOperacao, } from '../layerall-policy/layerall-policy.js';
|
|
3
|
+
import { criarProviderLayerAll, obterIdProvedor, } from '../provider-adapter/provider-adapter.js';
|
|
4
|
+
export class AssinaturaOrquestrador {
|
|
5
|
+
router;
|
|
6
|
+
provedores;
|
|
7
|
+
constructor(provedor, policy, observer) {
|
|
8
|
+
this.provedores = Array.isArray(provedor) ? provedor : [provedor];
|
|
9
|
+
const providersMap = {};
|
|
10
|
+
const idsProvedores = [];
|
|
11
|
+
for (let i = 0; i < this.provedores.length; i++) {
|
|
12
|
+
const p = this.provedores[i];
|
|
13
|
+
const id = obterIdProvedor(p, i);
|
|
14
|
+
idsProvedores.push(id);
|
|
15
|
+
providersMap[id] = criarProviderLayerAll(p, id);
|
|
16
|
+
}
|
|
17
|
+
this.router = new Router({
|
|
18
|
+
providers: providersMap,
|
|
19
|
+
policy: policy ?? criarPolicyDefault(idsProvedores),
|
|
20
|
+
observer,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
async enviarParaAssinatura(documento) {
|
|
24
|
+
const operacao = mapearOperacao('enviarParaAssinatura');
|
|
25
|
+
const result = await this.router.execute(operacao, {
|
|
26
|
+
externalId: documento.idExterno,
|
|
27
|
+
data: { operacao: 'enviarParaAssinatura', args: [documento] },
|
|
28
|
+
});
|
|
29
|
+
if (result.status === 'failed') {
|
|
30
|
+
throw new AggregateError([new Error(result.error?.message ?? 'Falha desconhecida')], 'Todos os provedores de assinatura falharam');
|
|
31
|
+
}
|
|
32
|
+
return result.result;
|
|
33
|
+
}
|
|
34
|
+
async obterDetalhes(idDoc) {
|
|
35
|
+
const operacao = mapearOperacao('obterDetalhes');
|
|
36
|
+
const result = await this.router.execute(operacao, {
|
|
37
|
+
data: { operacao: 'obterDetalhes', args: [idDoc] },
|
|
38
|
+
});
|
|
39
|
+
if (result.status === 'failed') {
|
|
40
|
+
throw new AggregateError([new Error(result.error?.message ?? 'Falha desconhecida')], 'Todos os provedores falharam ao obter detalhes');
|
|
41
|
+
}
|
|
42
|
+
return result.result;
|
|
43
|
+
}
|
|
44
|
+
async cancelarDocumento(idDoc) {
|
|
45
|
+
const operacao = mapearOperacao('cancelarDocumento');
|
|
46
|
+
const result = await this.router.execute(operacao, {
|
|
47
|
+
data: { operacao: 'cancelarDocumento', args: [idDoc] },
|
|
48
|
+
});
|
|
49
|
+
if (result.status === 'failed') {
|
|
50
|
+
throw new AggregateError([new Error(result.error?.message ?? 'Falha desconhecida')], 'Todos os provedores falharam ao cancelar documento');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
normalizarWebhook(payload) {
|
|
54
|
+
return this.provedores[0].normalizarWebhook(payload);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=assinatura-orquestrador.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assinatura-orquestrador.js","sourceRoot":"","sources":["../../src/assinatura-orquestrador/assinatura-orquestrador.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
/**
|
|
3
|
+
* AssinaturaOrquestrador é a porta de entrada unificada para envio de
|
|
4
|
+
* documentos a provedores de assinatura eletrônica.
|
|
5
|
+
*
|
|
6
|
+
* Delega a orquestração (failover, round-robin, load balance, most-fast)
|
|
7
|
+
* ao Router do LayerAll, aplicando a política configurada.
|
|
8
|
+
*
|
|
9
|
+
* @remarks
|
|
10
|
+
* - Construtor aceita um provedor único ou um array (para fallback).
|
|
11
|
+
* - `enviarParaAssinatura` retorna `AggregateError` quando todos falham.
|
|
12
|
+
* - `normalizarWebhook` sempre delega ao primeiro provedor da lista.
|
|
13
|
+
*/
|
|
14
|
+
//# sourceMappingURL=assinatura-orquestrador.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assinatura-orquestrador.types.d.ts","sourceRoot":"","sources":["../../src/assinatura-orquestrador/assinatura-orquestrador.types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
/**
|
|
3
|
+
* AssinaturaOrquestrador é a porta de entrada unificada para envio de
|
|
4
|
+
* documentos a provedores de assinatura eletrônica.
|
|
5
|
+
*
|
|
6
|
+
* Delega a orquestração (failover, round-robin, load balance, most-fast)
|
|
7
|
+
* ao Router do LayerAll, aplicando a política configurada.
|
|
8
|
+
*
|
|
9
|
+
* @remarks
|
|
10
|
+
* - Construtor aceita um provedor único ou um array (para fallback).
|
|
11
|
+
* - `enviarParaAssinatura` retorna `AggregateError` quando todos falham.
|
|
12
|
+
* - `normalizarWebhook` sempre delega ao primeiro provedor da lista.
|
|
13
|
+
*/
|
|
14
|
+
//# sourceMappingURL=assinatura-orquestrador.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assinatura-orquestrador.types.js","sourceRoot":"","sources":["../../src/assinatura-orquestrador/assinatura-orquestrador.types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/assinatura-orquestrador/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/assinatura-orquestrador/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type { Logger } from '@devix-tecnologia/utils';
|
|
2
|
+
export type { Observer, OperationName, PolicyDocument } from '@layerall/core';
|
|
3
|
+
export { AssinaturaOrquestrador } from './assinatura-orquestrador/assinatura-orquestrador.js';
|
|
4
|
+
export { criarPolicyDefault, mapearOperacao, } from './layerall-policy/layerall-policy.js';
|
|
5
|
+
export { criarObserverPadrao } from './observer/observer.js';
|
|
6
|
+
export type { LoggerLike, ObserverOptions } from './observer/observer.types.js';
|
|
7
|
+
export type { DetalhesDocumento, DocumentoParaAssinar, EventoAssinatura, IProvedorAssinatura, ResultadoEnvio, Signatario, } from './provedor-assinatura/provedor-assinatura.types.js';
|
|
8
|
+
export { criarProviderLayerAll, obterIdProvedor, } from './provider-adapter/provider-adapter.js';
|
|
9
|
+
export type { DadosOperacao, ResultadoOperacao, } from './provider-adapter/provider-adapter.types.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EACL,kBAAkB,EAClB,cAAc,GACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAChF,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,UAAU,GACX,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EACL,qBAAqB,EACrB,eAAe,GAChB,MAAM,wCAAwC,CAAC;AAChD,YAAY,EACV,aAAa,EACb,iBAAiB,GAClB,MAAM,8CAA8C,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { AssinaturaOrquestrador } from './assinatura-orquestrador/assinatura-orquestrador.js';
|
|
2
|
+
export { criarPolicyDefault, mapearOperacao, } from './layerall-policy/layerall-policy.js';
|
|
3
|
+
export { criarObserverPadrao } from './observer/observer.js';
|
|
4
|
+
export { criarProviderLayerAll, obterIdProvedor, } from './provider-adapter/provider-adapter.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sDAAsD,CAAC;AAC9F,OAAO,EACL,kBAAkB,EAClB,cAAc,GACf,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAU7D,OAAO,EACL,qBAAqB,EACrB,eAAe,GAChB,MAAM,wCAAwC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layerall-policy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layerall-policy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { OperationName, PolicyDocument } from '@layerall/core';
|
|
2
|
+
export declare function criarPolicyDefault(idsProvedores: string[]): PolicyDocument;
|
|
3
|
+
export declare function mapearOperacao(operacao: string): OperationName;
|
|
4
|
+
//# sourceMappingURL=layerall-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layerall-policy.d.ts","sourceRoot":"","sources":["../../src/layerall-policy/layerall-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAUpE,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,cAAc,CAgB1E;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,CAM9D"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const MAPA_OPERACAO = {
|
|
2
|
+
enviarParaAssinatura: 'create',
|
|
3
|
+
obterDetalhes: 'status',
|
|
4
|
+
cancelarDocumento: 'cancel',
|
|
5
|
+
};
|
|
6
|
+
const OPERACOES_DOMINIO = Object.keys(MAPA_OPERACAO);
|
|
7
|
+
export function criarPolicyDefault(idsProvedores) {
|
|
8
|
+
const operacoes = Object.fromEntries(OPERACOES_DOMINIO.map((op) => [
|
|
9
|
+
MAPA_OPERACAO[op],
|
|
10
|
+
{ strategy: 'failover', failover: true },
|
|
11
|
+
]));
|
|
12
|
+
return {
|
|
13
|
+
tenants: {
|
|
14
|
+
default: {
|
|
15
|
+
providers: idsProvedores,
|
|
16
|
+
operations: operacoes,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function mapearOperacao(operacao) {
|
|
22
|
+
const mapeada = MAPA_OPERACAO[operacao];
|
|
23
|
+
if (!mapeada) {
|
|
24
|
+
throw new Error(`Operação desconhecida: ${operacao}`);
|
|
25
|
+
}
|
|
26
|
+
return mapeada;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=layerall-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layerall-policy.js","sourceRoot":"","sources":["../../src/layerall-policy/layerall-policy.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAAkC;IACnD,oBAAoB,EAAE,QAAQ;IAC9B,aAAa,EAAE,QAAQ;IACvB,iBAAiB,EAAE,QAAQ;CAC5B,CAAC;AAEF,MAAM,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAErD,MAAM,UAAU,kBAAkB,CAAC,aAAuB;IACxD,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAClC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;QAC5B,aAAa,CAAC,EAAE,CAAC;QACjB,EAAE,QAAQ,EAAE,UAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE;KAClD,CAAC,CACH,CAAC;IAEF,OAAO;QACL,OAAO,EAAE;YACP,OAAO,EAAE;gBACP,SAAS,EAAE,aAAa;gBACxB,UAAU,EAAE,SAAS;aACtB;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layerall-policy.types.d.ts","sourceRoot":"","sources":["../../src/layerall-policy/layerall-policy.types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layerall-policy.types.js","sourceRoot":"","sources":["../../src/layerall-policy/layerall-policy.types.ts"],"names":[],"mappings":";AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observer/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observer/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Logger } from '@devix-tecnologia/utils';
|
|
2
|
+
import type { Observer } from '@layerall/core';
|
|
3
|
+
import type { ObserverOptions } from './observer.types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Cria um {@link Observer} do LayerAll que traduz os eventos de
|
|
6
|
+
* orquestração (`onStart`/`onAttempt`/`onFinish`) em logs estruturados,
|
|
7
|
+
* substituindo o log solto que existia antes nas factories/serviços.
|
|
8
|
+
*/
|
|
9
|
+
export declare function criarObserverPadrao(logger?: Logger, opts?: ObserverOptions): Observer;
|
|
10
|
+
//# sourceMappingURL=observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../../src/observer/observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,GAAE,MAAgB,EACxB,IAAI,GAAE,eAAoB,GACzB,QAAQ,CAwEV"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cria um {@link Observer} do LayerAll que traduz os eventos de
|
|
3
|
+
* orquestração (`onStart`/`onAttempt`/`onFinish`) em logs estruturados,
|
|
4
|
+
* substituindo o log solto que existia antes nas factories/serviços.
|
|
5
|
+
*/
|
|
6
|
+
export function criarObserverPadrao(logger = console, opts = {}) {
|
|
7
|
+
const prefixo = opts.prefixo ?? '[assinatura]';
|
|
8
|
+
const emitir = (nivel, mensagem, dados) => {
|
|
9
|
+
const fn = logger[nivel] ?? logger.info;
|
|
10
|
+
if (!fn)
|
|
11
|
+
return;
|
|
12
|
+
const linha = dados
|
|
13
|
+
? `${prefixo} ${mensagem} ${JSON.stringify(dados)}`
|
|
14
|
+
: `${prefixo} ${mensagem}`;
|
|
15
|
+
fn.call(logger, linha);
|
|
16
|
+
};
|
|
17
|
+
return {
|
|
18
|
+
onStart(ev) {
|
|
19
|
+
emitir('info', 'operação iniciada', {
|
|
20
|
+
requestId: ev.requestId,
|
|
21
|
+
operacao: ev.operation,
|
|
22
|
+
estrategia: ev.strategy,
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
onAttempt(log) {
|
|
26
|
+
if (log.ok) {
|
|
27
|
+
emitir('info', 'tentativa concluída', {
|
|
28
|
+
requestId: log.requestId,
|
|
29
|
+
operacao: log.operation,
|
|
30
|
+
provedor: log.provider,
|
|
31
|
+
tentativa: log.attempt,
|
|
32
|
+
latenciaMs: log.latencyMs,
|
|
33
|
+
});
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
emitir('warn', 'tentativa falhou', {
|
|
37
|
+
requestId: log.requestId,
|
|
38
|
+
operacao: log.operation,
|
|
39
|
+
provedor: log.provider,
|
|
40
|
+
tentativa: log.attempt,
|
|
41
|
+
latenciaMs: log.latencyMs,
|
|
42
|
+
transiente: log.transient,
|
|
43
|
+
codigoErro: log.errorCode,
|
|
44
|
+
erro: log.error,
|
|
45
|
+
});
|
|
46
|
+
},
|
|
47
|
+
onFinish(res) {
|
|
48
|
+
if (res.status === 'succeeded') {
|
|
49
|
+
emitir('info', 'operação concluída', {
|
|
50
|
+
requestId: res.requestId,
|
|
51
|
+
operacao: res.operation,
|
|
52
|
+
provedor: res.provider,
|
|
53
|
+
tentativas: res.attempts,
|
|
54
|
+
latenciaMs: res.latencyMs,
|
|
55
|
+
receipt: res.providerReceipt,
|
|
56
|
+
});
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
emitir('error', 'operação falhou em todos os provedores', {
|
|
60
|
+
requestId: res.requestId,
|
|
61
|
+
operacao: res.operation,
|
|
62
|
+
tentativas: res.attempts,
|
|
63
|
+
latenciaMs: res.latencyMs,
|
|
64
|
+
codigoErro: res.error?.code,
|
|
65
|
+
erro: res.error?.message,
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=observer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observer.js","sourceRoot":"","sources":["../../src/observer/observer.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAM,GAAW,OAAO,EACxB,IAAI,GAAoB,EAAE;IAE1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC;IAE/C,MAAM,MAAM,GAAG,CACb,KAAgC,EAChC,QAAgB,EAChB,KAA+B,EACzB,EAAE;QACR,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC;QACxC,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,KAAK,GAAG,KAAK;YACjB,CAAC,CAAC,GAAG,OAAO,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YACnD,CAAC,CAAC,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC7B,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,OAAO;QACL,OAAO,CAAC,EAAE;YACR,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE;gBAClC,SAAS,EAAE,EAAE,CAAC,SAAS;gBACvB,QAAQ,EAAE,EAAE,CAAC,SAAS;gBACtB,UAAU,EAAE,EAAE,CAAC,QAAQ;aACxB,CAAC,CAAC;QACL,CAAC;QAED,SAAS,CAAC,GAAG;YACX,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,MAAM,CAAC,MAAM,EAAE,qBAAqB,EAAE;oBACpC,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,QAAQ,EAAE,GAAG,CAAC,SAAS;oBACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,SAAS,EAAE,GAAG,CAAC,OAAO;oBACtB,UAAU,EAAE,GAAG,CAAC,SAAS;iBAC1B,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE;gBACjC,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,QAAQ,EAAE,GAAG,CAAC,SAAS;gBACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ;gBACtB,SAAS,EAAE,GAAG,CAAC,OAAO;gBACtB,UAAU,EAAE,GAAG,CAAC,SAAS;gBACzB,UAAU,EAAE,GAAG,CAAC,SAAS;gBACzB,UAAU,EAAE,GAAG,CAAC,SAAS;gBACzB,IAAI,EAAE,GAAG,CAAC,KAAK;aAChB,CAAC,CAAC;QACL,CAAC;QAED,QAAQ,CAAC,GAAG;YACV,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAC/B,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE;oBACnC,SAAS,EAAE,GAAG,CAAC,SAAS;oBACxB,QAAQ,EAAE,GAAG,CAAC,SAAS;oBACvB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,UAAU,EAAE,GAAG,CAAC,QAAQ;oBACxB,UAAU,EAAE,GAAG,CAAC,SAAS;oBACzB,OAAO,EAAE,GAAG,CAAC,eAAe;iBAC7B,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YAED,MAAM,CAAC,OAAO,EAAE,wCAAwC,EAAE;gBACxD,SAAS,EAAE,GAAG,CAAC,SAAS;gBACxB,QAAQ,EAAE,GAAG,CAAC,SAAS;gBACvB,UAAU,EAAE,GAAG,CAAC,QAAQ;gBACxB,UAAU,EAAE,GAAG,CAAC,SAAS;gBACzB,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI;gBAC3B,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO;aACzB,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Logger } from '@devix-tecnologia/utils';
|
|
2
|
+
/** Alias para a interface Logger do utils, exportado para conveniência dos consumidores. */
|
|
3
|
+
export type LoggerLike = Logger;
|
|
4
|
+
export interface ObserverOptions {
|
|
5
|
+
/** Prefixo aplicado a todas as linhas de log. Default: `[assinatura]`. */
|
|
6
|
+
prefixo?: string;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=observer.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observer.types.d.ts","sourceRoot":"","sources":["../../src/observer/observer.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtD,4FAA4F;AAC5F,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC;AAEhC,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observer.types.js","sourceRoot":"","sources":["../../src/observer/observer.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { criarProvedorQueFalha, criarProvedorStub, documentoPadrao, } from './provedor-assinatura.mock.js';
|
|
2
|
+
export type { DetalhesDocumento, DocumentoParaAssinar, EventoAssinatura, IProvedorAssinatura, ResultadoEnvio, Signatario, } from './provedor-assinatura.types.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provedor-assinatura/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,GAChB,MAAM,+BAA+B,CAAC;AACvC,YAAY,EACV,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,UAAU,GACX,MAAM,gCAAgC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provedor-assinatura/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,GAChB,MAAM,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DocumentoParaAssinar, IProvedorAssinatura } from './provedor-assinatura.types.js';
|
|
2
|
+
export interface ProvedorAssinaturaContractSuite {
|
|
3
|
+
createProvider: () => IProvedorAssinatura;
|
|
4
|
+
createDocument: () => DocumentoParaAssinar;
|
|
5
|
+
}
|
|
6
|
+
export interface AssercaoContrato {
|
|
7
|
+
toBeDefined(): void;
|
|
8
|
+
toBeTypeOf(type: string): void;
|
|
9
|
+
toBeGreaterThan(n: number): void;
|
|
10
|
+
toContain(item: unknown): void;
|
|
11
|
+
toEqual(expected: unknown): void;
|
|
12
|
+
toBe(expected: unknown): void;
|
|
13
|
+
resolves: {
|
|
14
|
+
toBeUndefined(): unknown;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface TestFramework {
|
|
18
|
+
describe(name: string, fn: () => void): void;
|
|
19
|
+
it(name: string, fn: () => Promise<void> | void): void;
|
|
20
|
+
beforeEach(fn: () => void): void;
|
|
21
|
+
expect(actual: unknown): AssercaoContrato;
|
|
22
|
+
}
|
|
23
|
+
export declare function createProvedorAssinaturaContractTests(suite: ProvedorAssinaturaContractSuite, t: TestFramework): void;
|
|
24
|
+
//# sourceMappingURL=provedor-assinatura.contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provedor-assinatura.contract.d.ts","sourceRoot":"","sources":["../../src/provedor-assinatura/provedor-assinatura.contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,gCAAgC,CAAC;AAExC,MAAM,WAAW,+BAA+B;IAC9C,cAAc,EAAE,MAAM,mBAAmB,CAAC;IAC1C,cAAc,EAAE,MAAM,oBAAoB,CAAC;CAC5C;AAKD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,IAAI,IAAI,CAAC;IACpB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,OAAO,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,IAAI,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE;QAAE,aAAa,IAAI,OAAO,CAAA;KAAE,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAC7C,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACvD,UAAU,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAAC;CAC3C;AAED,wBAAgB,qCAAqC,CACnD,KAAK,EAAE,+BAA+B,EACtC,CAAC,EAAE,aAAa,GACf,IAAI,CA6DN"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export function createProvedorAssinaturaContractTests(suite, t) {
|
|
2
|
+
const { describe, it, beforeEach, expect } = t;
|
|
3
|
+
describe('IProvedorAssinatura contract', () => {
|
|
4
|
+
let provedor;
|
|
5
|
+
beforeEach(() => {
|
|
6
|
+
provedor = suite.createProvider();
|
|
7
|
+
});
|
|
8
|
+
it('deve retornar ResultadoEnvio ao enviar documento para assinatura', async () => {
|
|
9
|
+
const documento = suite.createDocument();
|
|
10
|
+
const resultado = await provedor.enviarParaAssinatura(documento);
|
|
11
|
+
expect(resultado).toBeDefined();
|
|
12
|
+
expect(resultado.provedorDocId).toBeTypeOf('string');
|
|
13
|
+
expect(resultado.provedorDocId.length).toBeGreaterThan(0);
|
|
14
|
+
});
|
|
15
|
+
it('deve obter detalhes do documento', async () => {
|
|
16
|
+
const documento = suite.createDocument();
|
|
17
|
+
const resultado = await provedor.enviarParaAssinatura(documento);
|
|
18
|
+
const detalhes = await provedor.obterDetalhes(resultado.provedorDocId);
|
|
19
|
+
expect(detalhes).toBeDefined();
|
|
20
|
+
expect(detalhes.status).toBeTypeOf('string');
|
|
21
|
+
});
|
|
22
|
+
it('deve cancelar documento', async () => {
|
|
23
|
+
const documento = suite.createDocument();
|
|
24
|
+
const resultado = await provedor.enviarParaAssinatura(documento);
|
|
25
|
+
await expect(provedor.cancelarDocumento(resultado.provedorDocId)).resolves.toBeUndefined();
|
|
26
|
+
});
|
|
27
|
+
it('deve normalizar webhook retornando EventoAssinatura valido', () => {
|
|
28
|
+
const evento = provedor.normalizarWebhook({ qualquer: 'payload' });
|
|
29
|
+
expect(evento).toBeDefined();
|
|
30
|
+
expect(evento.tipo).toBeTypeOf('string');
|
|
31
|
+
expect([
|
|
32
|
+
'documento_finalizado',
|
|
33
|
+
'signatario_assinou',
|
|
34
|
+
'documento_cancelado',
|
|
35
|
+
'email_nao_entregue',
|
|
36
|
+
'outro',
|
|
37
|
+
]).toContain(evento.tipo);
|
|
38
|
+
expect(evento.provedorDocId).toBeTypeOf('string');
|
|
39
|
+
expect(evento.raw).toBeDefined();
|
|
40
|
+
});
|
|
41
|
+
it('deve extrair provedorDocId do payload do webhook quando presente', () => {
|
|
42
|
+
const evento = provedor.normalizarWebhook({ id: 'doc-custom-123' });
|
|
43
|
+
expect(evento.provedorDocId).toBe('doc-custom-123');
|
|
44
|
+
expect(evento.raw).toEqual({ id: 'doc-custom-123' });
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=provedor-assinatura.contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provedor-assinatura.contract.js","sourceRoot":"","sources":["../../src/provedor-assinatura/provedor-assinatura.contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DocumentoParaAssinar, IProvedorAssinatura } from './provedor-assinatura.types.js';
|
|
2
|
+
export declare function criarProvedorStub(): IProvedorAssinatura;
|
|
3
|
+
export declare function criarProvedorQueFalha(): IProvedorAssinatura;
|
|
4
|
+
export declare const documentoPadrao: DocumentoParaAssinar;
|
|
5
|
+
//# sourceMappingURL=provedor-assinatura.mock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provedor-assinatura.mock.d.ts","sourceRoot":"","sources":["../../src/provedor-assinatura/provedor-assinatura.mock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,gCAAgC,CAAC;AAExC,wBAAgB,iBAAiB,IAAI,mBAAmB,CA8BvD;AAED,wBAAgB,qBAAqB,IAAI,mBAAmB,CAW3D;AAED,eAAO,MAAM,eAAe,EAAE,oBAO7B,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { vi } from 'vitest';
|
|
2
|
+
export function criarProvedorStub() {
|
|
3
|
+
let contadorStub = 0;
|
|
4
|
+
return {
|
|
5
|
+
async enviarParaAssinatura() {
|
|
6
|
+
contadorStub++;
|
|
7
|
+
return {
|
|
8
|
+
provedorDocId: `doc-stub-${String(contadorStub).padStart(3, '0')}`,
|
|
9
|
+
linkAcompanhamento: `https://stub.assinatura.com/doc/${contadorStub}`,
|
|
10
|
+
rawResponse: { stub: true },
|
|
11
|
+
};
|
|
12
|
+
},
|
|
13
|
+
async obterDetalhes(idDoc) {
|
|
14
|
+
return {
|
|
15
|
+
status: 'signed',
|
|
16
|
+
originalFileUrl: `https://stub.assinatura.com/doc/${idDoc}/original`,
|
|
17
|
+
signedFileUrl: `https://stub.assinatura.com/doc/${idDoc}/signed`,
|
|
18
|
+
};
|
|
19
|
+
},
|
|
20
|
+
async cancelarDocumento() {
|
|
21
|
+
return;
|
|
22
|
+
},
|
|
23
|
+
normalizarWebhook(payload) {
|
|
24
|
+
const body = payload;
|
|
25
|
+
return {
|
|
26
|
+
tipo: 'documento_finalizado',
|
|
27
|
+
provedorDocId: String(body?.id ?? 'doc-stub-001'),
|
|
28
|
+
raw: payload,
|
|
29
|
+
};
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function criarProvedorQueFalha() {
|
|
34
|
+
return {
|
|
35
|
+
enviarParaAssinatura: vi
|
|
36
|
+
.fn()
|
|
37
|
+
.mockRejectedValue(new Error('Falha no provedor')),
|
|
38
|
+
obterDetalhes: vi.fn().mockRejectedValue(new Error('Falha no provedor')),
|
|
39
|
+
cancelarDocumento: vi
|
|
40
|
+
.fn()
|
|
41
|
+
.mockRejectedValue(new Error('Falha no provedor')),
|
|
42
|
+
normalizarWebhook: vi.fn(),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export const documentoPadrao = {
|
|
46
|
+
pdfBase64: 'dGVzdGU=',
|
|
47
|
+
signatarios: [{ nome: 'João Silva', email: 'joao@teste.com' }],
|
|
48
|
+
nome: 'Contrato Teste',
|
|
49
|
+
dataLimite: '2026-07-18',
|
|
50
|
+
sandbox: true,
|
|
51
|
+
idExterno: 'ext-001',
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=provedor-assinatura.mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provedor-assinatura.mock.js","sourceRoot":"","sources":["../../src/provedor-assinatura/provedor-assinatura.mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAM5B,MAAM,UAAU,iBAAiB;IAC/B,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,OAAO;QACL,KAAK,CAAC,oBAAoB;YACxB,YAAY,EAAE,CAAC;YACf,OAAO;gBACL,aAAa,EAAE,YAAY,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;gBAClE,kBAAkB,EAAE,mCAAmC,YAAY,EAAE;gBACrE,WAAW,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;aAC5B,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,aAAa,CAAC,KAAK;YACvB,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,eAAe,EAAE,mCAAmC,KAAK,WAAW;gBACpE,aAAa,EAAE,mCAAmC,KAAK,SAAS;aACjE,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,iBAAiB;YACrB,OAAO;QACT,CAAC;QACD,iBAAiB,CAAC,OAAO;YACvB,MAAM,IAAI,GAAG,OAAkC,CAAC;YAChD,OAAO;gBACL,IAAI,EAAE,sBAAsB;gBAC5B,aAAa,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,cAAc,CAAC;gBACjD,GAAG,EAAE,OAAO;aACb,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,oBAAoB,EAAE,EAAE;aACrB,EAAE,EAAE;aACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACpD,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACxE,iBAAiB,EAAE,EAAE;aAClB,EAAE,EAAE;aACJ,iBAAiB,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACpD,iBAAiB,EAAE,EAAE,CAAC,EAAE,EAAE;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAyB;IACnD,SAAS,EAAE,UAAU;IACrB,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC9D,IAAI,EAAE,gBAAgB;IACtB,UAAU,EAAE,YAAY;IACxB,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,SAAS;CACrB,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export interface Signatario {
|
|
2
|
+
nome: string;
|
|
3
|
+
email: string;
|
|
4
|
+
telefone?: string;
|
|
5
|
+
mensagemPersonalizada?: string;
|
|
6
|
+
/** Envia e-mail automático de convite a ESTE signatário (API ZapSign: send_automatic_email). */
|
|
7
|
+
sendAutomaticEmail?: boolean;
|
|
8
|
+
/** Envia convite por WhatsApp a ESTE signatário (API ZapSign: send_automatic_whatsapp). */
|
|
9
|
+
sendAutomaticWhatsapp?: boolean;
|
|
10
|
+
/** Impede ESTE signatário de editar o e-mail (API ZapSign: lock_email). */
|
|
11
|
+
lockEmail?: boolean;
|
|
12
|
+
/** Impede ESTE signatário de editar o telefone (API ZapSign: lock_phone). */
|
|
13
|
+
lockPhone?: boolean;
|
|
14
|
+
/** Exige selfie DESTE signatário (API ZapSign: require_selfie_photo). */
|
|
15
|
+
requireSelfie?: boolean;
|
|
16
|
+
/** Exige foto do documento DESTE signatário (API ZapSign: require_document_photo). */
|
|
17
|
+
requireDocumentPhoto?: boolean;
|
|
18
|
+
/** Modo de autenticação DESTE signatário (API ZapSign: auth_mode). */
|
|
19
|
+
authMode?: string;
|
|
20
|
+
}
|
|
21
|
+
export interface DocumentoParaAssinar {
|
|
22
|
+
pdfBase64: string;
|
|
23
|
+
signatarios: Signatario[];
|
|
24
|
+
nome: string;
|
|
25
|
+
/** Data-limite para assinar (YYYY-MM-DD). Opcional: quando ausente, o provedor não envia limite. */
|
|
26
|
+
dataLimite?: string;
|
|
27
|
+
sandbox: boolean;
|
|
28
|
+
idExterno: string;
|
|
29
|
+
/** Envia e-mail automático de convite aos signatários (API ZapSign: send_automatic_email). */
|
|
30
|
+
sendAutomaticEmail?: boolean;
|
|
31
|
+
/** Envia convite por WhatsApp aos signatários (API ZapSign: send_automatic_whatsapp). */
|
|
32
|
+
sendAutomaticWhatsapp?: boolean;
|
|
33
|
+
/** Impede o signatário de editar o e-mail (API ZapSign: lock_email). */
|
|
34
|
+
lockEmail?: boolean;
|
|
35
|
+
/** Impede o signatário de editar o telefone (API ZapSign: lock_phone). */
|
|
36
|
+
lockPhone?: boolean;
|
|
37
|
+
/** Exige selfie do signatário (API ZapSign: require_selfie_photo). */
|
|
38
|
+
requireSelfie?: boolean;
|
|
39
|
+
/** Exige foto do documento do signatário (API ZapSign: require_document_photo). */
|
|
40
|
+
requireDocumentPhoto?: boolean;
|
|
41
|
+
metadata?: Record<string, unknown>;
|
|
42
|
+
}
|
|
43
|
+
export interface ResultadoEnvio {
|
|
44
|
+
provedorDocId: string;
|
|
45
|
+
linkAcompanhamento?: string;
|
|
46
|
+
rawResponse: unknown;
|
|
47
|
+
}
|
|
48
|
+
export interface DetalhesDocumento {
|
|
49
|
+
status: string;
|
|
50
|
+
originalFileUrl?: string;
|
|
51
|
+
signedFileUrl?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface EventoAssinatura {
|
|
54
|
+
tipo: 'documento_finalizado' | 'signatario_assinou' | 'documento_cancelado' | 'email_nao_entregue' | 'outro';
|
|
55
|
+
provedorDocId: string;
|
|
56
|
+
/** ID externo do documento no sistema consumidor (ex.: contrato_123). Preenchido quando o provedor o envia. */
|
|
57
|
+
idExterno?: string;
|
|
58
|
+
/** URL do arquivo assinado, quando o evento a traz (ex.: doc finalizado). */
|
|
59
|
+
signedFileUrl?: string;
|
|
60
|
+
signatario?: Signatario;
|
|
61
|
+
raw: unknown;
|
|
62
|
+
}
|
|
63
|
+
export interface IProvedorAssinatura {
|
|
64
|
+
enviarParaAssinatura(documento: DocumentoParaAssinar): Promise<ResultadoEnvio>;
|
|
65
|
+
obterDetalhes(idDoc: string): Promise<DetalhesDocumento>;
|
|
66
|
+
cancelarDocumento(idDoc: string): Promise<void>;
|
|
67
|
+
normalizarWebhook(payload: unknown): EventoAssinatura;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=provedor-assinatura.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provedor-assinatura.types.d.ts","sourceRoot":"","sources":["../../src/provedor-assinatura/provedor-assinatura.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,gGAAgG;IAChG,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,2FAA2F;IAC3F,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yEAAyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,oGAAoG;IACpG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,8FAA8F;IAC9F,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yFAAyF;IACzF,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sEAAsE;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mFAAmF;IACnF,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EACA,sBAAsB,GACtB,oBAAoB,GACpB,qBAAqB,GACrB,oBAAoB,GACpB,OAAO,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,+GAA+G;IAC/G,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,oBAAoB,CAClB,SAAS,EAAE,oBAAoB,GAC9B,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACzD,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC;CACvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provedor-assinatura.types.js","sourceRoot":"","sources":["../../src/provedor-assinatura/provedor-assinatura.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provider-adapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC/E,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,6BAA6B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provider-adapter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Provider as LayerAllProvider } from '@layerall/core';
|
|
2
|
+
import type { IProvedorAssinatura } from '../provedor-assinatura/provedor-assinatura.types.js';
|
|
3
|
+
import type { DadosOperacao, PropriedadesProvedor, ResultadoOperacao } from './provider-adapter.types.js';
|
|
4
|
+
export declare function criarProviderLayerAll(provedor: IProvedorAssinatura, idProvedor?: string, propriedades?: PropriedadesProvedor): LayerAllProvider<DadosOperacao, ResultadoOperacao>;
|
|
5
|
+
export declare function obterIdProvedor(provedor: IProvedorAssinatura, indice: number): string;
|
|
6
|
+
//# sourceMappingURL=provider-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-adapter.d.ts","sourceRoot":"","sources":["../../src/provider-adapter/provider-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,QAAQ,IAAI,gBAAgB,EAC7B,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAC/F,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAErC,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,mBAAmB,EAC7B,UAAU,CAAC,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,oBAAoB,GAClC,gBAAgB,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAyBpD;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,MAAM,GACb,MAAM,CAIR"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export function criarProviderLayerAll(provedor, idProvedor, propriedades) {
|
|
2
|
+
return {
|
|
3
|
+
id: idProvedor ?? provedor.constructor.name ?? 'provider',
|
|
4
|
+
...propriedades,
|
|
5
|
+
async invoke(ctx) {
|
|
6
|
+
const { operacao, args } = ctx.payload.data;
|
|
7
|
+
switch (operacao) {
|
|
8
|
+
case 'enviarParaAssinatura':
|
|
9
|
+
return provedor.enviarParaAssinatura(args[0]);
|
|
10
|
+
case 'obterDetalhes':
|
|
11
|
+
return provedor.obterDetalhes(args[0]);
|
|
12
|
+
case 'cancelarDocumento':
|
|
13
|
+
return provedor.cancelarDocumento(args[0]);
|
|
14
|
+
default:
|
|
15
|
+
throw {
|
|
16
|
+
code: 'operacao_invalida',
|
|
17
|
+
message: `Operação desconhecida: ${operacao}`,
|
|
18
|
+
transient: false,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function obterIdProvedor(provedor, indice) {
|
|
25
|
+
const nome = provedor.constructor.name;
|
|
26
|
+
if (!nome || nome === 'Object')
|
|
27
|
+
return `provider_${indice}`;
|
|
28
|
+
return `${nome}_${indice}`;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=provider-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-adapter.js","sourceRoot":"","sources":["../../src/provider-adapter/provider-adapter.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,qBAAqB,CACnC,QAA6B,EAC7B,UAAmB,EACnB,YAAmC;IAEnC,OAAO;QACL,EAAE,EAAE,UAAU,IAAI,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,UAAU;QACzD,GAAG,YAAY;QACf,KAAK,CAAC,MAAM,CACV,GAAiC;YAEjC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;YAE5C,QAAQ,QAAQ,EAAE,CAAC;gBACjB,KAAK,sBAAsB;oBACzB,OAAO,QAAQ,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChD,KAAK,eAAe;oBAClB,OAAO,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBACzC,KAAK,mBAAmB;oBACtB,OAAO,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C;oBACE,MAAM;wBACJ,IAAI,EAAE,mBAAmB;wBACzB,OAAO,EAAE,0BAA0B,QAAQ,EAAE;wBAC7C,SAAS,EAAE,KAAK;qBACjB,CAAC;YACN,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,QAA6B,EAC7B,MAAc;IAEd,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;IACvC,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,YAAY,MAAM,EAAE,CAAC;IAC5D,OAAO,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { DetalhesDocumento, DocumentoParaAssinar, ResultadoEnvio } from '../provedor-assinatura/provedor-assinatura.types.js';
|
|
2
|
+
/** Operações de domínio expostas ao LayerAll. */
|
|
3
|
+
export type OperacaoAssinatura = 'enviarParaAssinatura' | 'obterDetalhes' | 'cancelarDocumento';
|
|
4
|
+
/** Payload de entrada de cada operação. */
|
|
5
|
+
export type DadosOperacao = {
|
|
6
|
+
operacao: 'enviarParaAssinatura';
|
|
7
|
+
args: [DocumentoParaAssinar];
|
|
8
|
+
} | {
|
|
9
|
+
operacao: 'obterDetalhes';
|
|
10
|
+
args: [string];
|
|
11
|
+
} | {
|
|
12
|
+
operacao: 'cancelarDocumento';
|
|
13
|
+
args: [string];
|
|
14
|
+
};
|
|
15
|
+
/** Resultado de cada operação. */
|
|
16
|
+
export type ResultadoOperacao = ResultadoEnvio | DetalhesDocumento | void;
|
|
17
|
+
/** Propriedades opcionais de um provedor para o LayerAll (peso, capacidade, saúde etc.). */
|
|
18
|
+
export type PropriedadesProvedor = {
|
|
19
|
+
weight?: number;
|
|
20
|
+
capacity?: number;
|
|
21
|
+
enabled?: boolean;
|
|
22
|
+
health?: number;
|
|
23
|
+
baseLatency?: number;
|
|
24
|
+
failRate?: number;
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=provider-adapter.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-adapter.types.d.ts","sourceRoot":"","sources":["../../src/provider-adapter/provider-adapter.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACf,MAAM,qDAAqD,CAAC;AAE7D,iDAAiD;AACjD,MAAM,MAAM,kBAAkB,GAC1B,sBAAsB,GACtB,eAAe,GACf,mBAAmB,CAAC;AAExB,2CAA2C;AAC3C,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,EAAE,sBAAsB,CAAC;IAAC,IAAI,EAAE,CAAC,oBAAoB,CAAC,CAAA;CAAE,GAClE;IAAE,QAAQ,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAA;CAAE,GAC7C;IAAE,QAAQ,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAA;CAAE,CAAC;AAEtD,kCAAkC;AAElC,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG,iBAAiB,GAAG,IAAI,CAAC;AAE1E,4FAA4F;AAC5F,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-adapter.types.js","sourceRoot":"","sources":["../../src/provider-adapter/provider-adapter.types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,63 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devix-tecnologia/assinatura-eletronica",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.5.1",
|
|
4
|
+
"description": "Abstração unificada para provedores de assinatura eletrônica",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"assinatura",
|
|
7
|
+
"zapsign",
|
|
8
|
+
"d4sign",
|
|
9
|
+
"eletronica"
|
|
10
|
+
],
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"author": "Devix Tecnologia Ltda <contato@devix.co> (https://devix.co)",
|
|
13
|
+
"type": "module",
|
|
14
|
+
"main": "dist/index.js",
|
|
15
|
+
"types": "dist/index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
19
|
+
"import": "./dist/index.js",
|
|
20
|
+
"default": "./dist/index.js"
|
|
21
|
+
},
|
|
22
|
+
"./provedor-assinatura.contract": {
|
|
23
|
+
"types": "./dist/provedor-assinatura/provedor-assinatura.contract.d.ts",
|
|
24
|
+
"import": "./dist/provedor-assinatura/provedor-assinatura.contract.js",
|
|
25
|
+
"default": "./dist/provedor-assinatura/provedor-assinatura.contract.js"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"dist",
|
|
30
|
+
"README.md",
|
|
31
|
+
"DEVELOPERS.md",
|
|
32
|
+
"LICENSE"
|
|
33
|
+
],
|
|
34
|
+
"publishConfig": {
|
|
35
|
+
"registry": "https://registry.npmjs.org/",
|
|
36
|
+
"@devix-tecnologia:registry": "https://registry.npmjs.org/",
|
|
37
|
+
"access": "public"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@devix-tecnologia/utils": "^0.2.0",
|
|
41
|
+
"@layerall/core": "^2.1.0"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/node": "^24.13.5",
|
|
45
|
+
"typescript": "^7.0.2",
|
|
46
|
+
"vitest": "^5.0.1"
|
|
47
|
+
},
|
|
48
|
+
"repository": {
|
|
49
|
+
"type": "git",
|
|
50
|
+
"url": "git+https://github.com/devix-tecnologia/assinatura-eletronica.git",
|
|
51
|
+
"directory": "packages/assinatura-eletronica"
|
|
52
|
+
},
|
|
53
|
+
"scripts": {
|
|
54
|
+
"build": "tsc -p tsconfig.build.json",
|
|
55
|
+
"clean": "rm -rf dist coverage tsconfig.tsbuildinfo",
|
|
56
|
+
"dev": "tsc -p tsconfig.build.json --watch",
|
|
57
|
+
"format": "biome check --write .",
|
|
58
|
+
"lint": "biome check . --error-on-warnings",
|
|
59
|
+
"test": "vitest --run",
|
|
60
|
+
"test:watch": "vitest --watch",
|
|
61
|
+
"typecheck": "tsc --noEmit"
|
|
62
|
+
}
|
|
6
63
|
}
|