@rebound-dlq/node 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,103 +1,106 @@
1
- # Rebound DLQ SDK 🚀
1
+ # Rebound DLQ for Node.js
2
2
 
3
- O **Rebound DLQ SDK** é uma solução de altíssima performance (Zero Gargalos e Fila em Memória) para capturar falhas em integrações, proteger sua regra de negócio e fazer o reprocessamento de DLQs (Dead Letter Queues) de forma transparente para sua aplicação Node.js.
3
+ [![NPM Version](https://img.shields.io/npm/v/@rebound-dlq/node)](https://www.npmjs.com/package/@rebound-dlq/node)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
5
 
5
- Sua aplicação original não vai travar nem ficar lenta, mesmo se a nossa API cair ou a rede oscilar.
6
+ O **@rebound-dlq/node** é o SDK oficial em Node.js para integração com a plataforma **[Rebound DLQ](https://rebound-dlq.com)**.
6
7
 
7
- ## 📦 1. Instalação
8
+ Este pacote permite capturar falhas em integrações (APIs de terceiros, pagamentos, envio de e-mails, etc.) de forma transparente para a sua aplicação Node.js. Sem travar sua regra de negócio e sem adicionar latência. Quando uma operação falha, o SDK captura o payload, criptografa a informação e envia o evento em plano de fundo (background) para a sua conta no Rebound DLQ, aplicando estratégias de retry exponencial automaticamente se houver instabilidade na rede.
8
9
 
9
- Abra o terminal do seu projeto Node.js e instale o pacote:
10
+ ## Por que usar o Rebound DLQ?
10
11
 
11
- ```bash
12
- npm install @rebound/dlq-sdk
13
- ```
14
-
15
- *(Nota: Se você está rodando um pacote em testes local via `.tgz`, use: `npm install ./caminho/do/seu/rebound-dlq-sdk-0.1.0.tgz`)*
12
+ - ⚡ **Zero Latência (In-Memory Queue)**: A aplicação não espera a resposta do envio do log para a nossa infraestrutura. A execução ocorre inteiramente em memória e em background, liberando o processo Node.js principal na hora (`O(1)`).
13
+ - 🛡️ **Segurança e Criptografia Local**: Todo o payload de erro é criptografado localmente na sua máquina (usando AES-256) antes mesmo de trafegar pela rede. Seus dados chegam anônimos na nossa infraestrutura, e somente você consegue descriptografá-los com a sua chave secreta.
14
+ - 🔁 **Resiliência e Retentativa Automática**: Falhas de rede ou indisponibilidade? O SDK mantém o evento a salvo em memória e aplica _backoff exponencial_ para garantir a entrega quando a conexão for reestabelecida.
16
15
 
17
- ---
16
+ > ⚠️ **Atenção**: Este SDK requer uma conta ativa na plataforma **[Rebound DLQ](https://rebound-dlq.com)**.
18
17
 
19
- ## ⚙️ 2. Como Configurar e Usar na Prática
18
+ ## Instalação
20
19
 
21
- A forma ideal de utilizar o SDK é "abraçando" (envolvendo) as funções de risco do seu sistema (pagamentos, cadastros em APIs externas, envio de emails, etc) através do `DlqWrapper`.
20
+ Abra o terminal e instale o pacote via npm, yarn ou pnpm:
22
21
 
23
- ### Passo A: Importar e Configurar o SDK
22
+ ```bash
23
+ npm install @rebound-dlq/node
24
+ ```
24
25
 
25
- No topo do seu arquivo principal (ou no seu arquivo de injeção de dependências), inicialize o Wrapper passando suas credenciais:
26
+ ## Configuração Segura
26
27
 
27
- ```javascript
28
- // Se você usa CommonJS (require):
29
- const { DlqWrapper } = require('@rebound/dlq-sdk');
28
+ O SDK só precisa da chave de integração do seu projeto (`projectSecret`).
30
29
 
31
- // Se você usa ES Modules (import):
32
- // import { DlqWrapper } from '@rebound/dlq-sdk';
30
+ **Prática Recomendada:** Nunca exponha (hard-code) a sua chave diretamente no código-fonte. Armazene a sua chave `projectSecret` de forma segura utilizando variáveis de ambiente (ex: arquivo `.env`).
33
31
 
34
- const dlqWrapper = new DlqWrapper({
35
- projectId: "seu-project-id", // Pegue no painel do Rebound
36
- projectSecret: "sk_dev_sua_chave_secreta", // Use sk_dev_ para testes ou sk_live_ para produção
37
- });
32
+ ```env
33
+ # Arquivo .env
34
+ REBOUND_PROJECT_SECRET="sk_dev_sua_chave_secreta_aqui"
38
35
  ```
39
36
 
40
- ### Passo B: Proteger sua Função
37
+ > **Dica de Ambiente**:
38
+ > - Chaves iniciadas com `sk_dev_` enviarão eventos automaticamente para o ambiente de testes/sandbox.
39
+ > - Chaves iniciadas com `sk_live_` enviarão eventos para o ambiente de produção.
41
40
 
42
- Em vez de chamar sua função diretamente, chame ela *dentro* do método `.execute()` do SDK.
41
+ ## Uso Básico
43
42
 
44
- Sempre que a sua função der erro, o SDK silenciosamente vai capturar o payload e enviar pra Rebound em backgroud, enquanto sua aplicação segue a vida imediatamente e de forma limpa.
43
+ A forma ideal de utilizar o SDK é encapsular a sua função com o método `.execute()` oferecido pela classe `DlqWrapper`.
45
44
 
46
- ```javascript
47
- // Uma função sua que costuma falhar ou chamar serviços externos
48
- async function minhaFuncaoDeRisco(dados) {
49
- console.log("Iniciando pagamento...");
50
- if (dados.valor > 1000) {
51
- throw new Error("Saldo insuficiente na operadora do cartão");
52
- }
53
- return "Sucesso!";
45
+ Se atente à inicialização e uso:
46
+
47
+ ```typescript
48
+ import { DlqWrapper } from '@rebound-dlq/node';
49
+
50
+ // Inicializa o SDK consumindo de variáveis de ambiente
51
+ const dlq = new DlqWrapper({
52
+ projectSecret: process.env.REBOUND_PROJECT_SECRET,
53
+ });
54
+
55
+ // A função que se conecta ao seu provedor ou ao seu banco de dados (que pode falhar)
56
+ async function processarPagamento(dados) {
57
+ if (dados.valor > 1000) {
58
+ throw new Error('Saldo insuficiente na operadora do cartão');
59
+ }
60
+ return 'Sucesso!';
54
61
  }
55
62
 
56
- async function run() {
57
- // 1. Defina os dados que você quer salvar caso essa rotina falhe
58
- const payloadQueSeraSalvoNaDLQ = {
59
- userId: "123",
60
- valor: 5000,
61
- tentativa: 1,
62
- modulo: "Checkout"
63
- };
64
-
65
- try {
66
- // 2. Execute a sua função DENTRO da proteção do SDK
67
- const resultado = await dlqWrapper.execute(
68
- () => minhaFuncaoDeRisco(payloadQueSeraSalvoNaDLQ), // Sua função de negócio
69
- payloadQueSeraSalvoNaDLQ // O Payload que vai pra nuvem em caso de erro
70
- );
71
-
72
- console.log("Deu tudo certo:", resultado);
73
-
74
- } catch (erro) {
75
- // 3. Trate o erro localmente como você sempre fez (o App NÃO morre)
76
- console.log("Erro na aplicação:", erro.message);
77
-
78
- // 🚀 A MÁGICA:
79
- // Nesse exato momento, o SDK já pegou esse erro e despachou para o Rebound na nuvem.
80
- // Se a internet falhou, ele salvou na memória RAM e ficará tentando de novo em background
81
- // sem travar ou deixar sua API mais lenta!
82
- }
63
+ async function main() {
64
+ // Os dados de contexto que você gostaria de analisar depois se algo der errado
65
+ const payloadQueSeraSalvoNaDLQ = {
66
+ userId: '123',
67
+ valor: 5000,
68
+ tentativa: 1,
69
+ modulo: 'Checkout',
70
+ };
71
+
72
+ try {
73
+ console.log("Iniciando transação...");
74
+
75
+ // Protegemos a função com o wrapper. Se der erro dentro de processarPagamento,
76
+ // o dlq envia os detalhes do erro E o payloadQueSeraSalvoNaDLQ para o Rebound automatically!
77
+ const resultado = await dlq.execute(
78
+ () => processarPagamento(payloadQueSeraSalvoNaDLQ),
79
+ payloadQueSeraSalvoNaDLQ
80
+ );
81
+
82
+ console.log('Finalizado com:', resultado);
83
+
84
+ } catch (erro) {
85
+ // A aplicação não morre; o erro é lançado apenas para seu tratamento habitual
86
+ console.log('Aconteceu um erro previsto na aplicação:', erro.message);
87
+ }
83
88
  }
84
89
 
85
- run();
90
+ main();
86
91
  ```
87
92
 
88
- ---
89
-
90
- ## ⚡ Por que usar nossa DLQ Engine?
93
+ ### O que acontece por baixo dos panos neste exemplo?
91
94
 
92
- 1. **In-Memory Zero-Latency**: A comunicação com nossos servidores não engargala os verbos HTTP da sua aplicação. Assim que a exceção bater e você usar o wrapper, ele joga o payload rápido (`O(1)`) pra uma fila inteligente em Memória RAM da sua máquina.
93
- 2. **Entrega Garantida**: Se a sua infra ou nossa nuvem apresentar lentidão, sua requisição fica salva temporariamente no Node Event Loop da sua aplicação fazendo "Retry Exponencial" silencioso.
94
- 3. **Criptografia Automática**: Todas as requisições enviadas ao Painel são criptografadas (AES-256) com sua `projectSecret` ainda na sua infraestrutura. Ninguém acessa do outro lado além de você.
95
+ 1. Ao chamar `.execute()`, se o `processarPagamento` lançar qualquer **exceção**.
96
+ 2. Essa exceção é **capturada sem dor**.
97
+ 3. A variável `payloadQueSeraSalvoNaDLQ` entra na **memória RAM do SDK**.
98
+ 4. É processada **criptografia local AES-256** no dado, utilizando a sua chave.
99
+ 5. Em Background, um processo envia de forma segura este evento para a plataforma Rebound, garantindo entrega do Dead Letter Queue para reprocessamento futuro ou simples visualização pela Dashboard.
95
100
 
96
- ### Modos suportados
101
+ ## Suporte
97
102
 
98
- - `sk_dev_*` conectará automaticamente na Sandbox / Local (Porta 3001)
99
- - `sk_live_*` conectará aos endpoints oficiais estabilizados de produção.
103
+ Em caso de dúvidas, problemas de implementação ou bugs, abra um chamado pela Dashboard oficial do [Rebound Platform](https://rebound-dlq.com).
100
104
 
101
- ---
102
- **Suporte Rebound**
103
- Dúvidas ou problemas? Acesse seu dashboard e abra um chamado com nosso time de engenharia.
105
+ ***
106
+ _Feito com ❤️ por **[Codify Labs] / [Rebound DLQ]**._
@@ -1,11 +1,9 @@
1
1
  export interface DlqServiceConfig {
2
- projectId: string;
3
2
  projectSecret: string;
4
3
  endpoint?: string;
5
4
  maxFailures?: number;
6
5
  }
7
6
  export declare class DlqWrapper {
8
- private projectId;
9
7
  private projectSecret;
10
8
  private readonly endpoint;
11
9
  constructor(config: DlqServiceConfig);
@@ -9,7 +9,6 @@ const constants_1 = require("./constants");
9
9
  const queue_1 = require("./queue");
10
10
  class DlqWrapper {
11
11
  constructor(config) {
12
- this.projectId = config.projectId;
13
12
  this.projectSecret = config.projectSecret;
14
13
  // Identifica se é ambiente de teste através do projectSecret (mesma lógica da apiKey no ReboundClient)
15
14
  const isTest = config.projectSecret.startsWith('sk_dev_');
@@ -35,7 +34,6 @@ class DlqWrapper {
35
34
  const fingerprint = this.generateFingerprint(error);
36
35
  const encryptedPayload = this.encrypt(payload);
37
36
  const data = {
38
- projectId: this.projectId,
39
37
  fingerprint,
40
38
  error: {
41
39
  name: error.name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rebound-dlq/node",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": ["dist"],