@sinnu-dev/sdk 0.0.0-stage → 0.2.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/README.md CHANGED
@@ -1,3 +1,162 @@
1
- # Temporary Holding Version
1
+ # Sinnu SDK para Node.js
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ SDK oficial da [Sinnu](https://sinnu.com.br) para receber com **Pix** e **cartão de crédito**
4
+ direto do seu sistema.
5
+
6
+ Feito para **agências**, **prestadores de serviço**, **SaaS** e qualquer negócio que
7
+ cobra clientes pela internet: gere um link de pagamento, mande para o cliente e saiba na
8
+ hora quando o dinheiro entrou.
9
+
10
+ 📘 **Documentação completa:** [docs.sinnu.com.br](https://docs.sinnu.com.br)
11
+
12
+ ## O que dá para fazer
13
+
14
+ - **Cobrar** com links de pagamento: Pix e cartão em até 12x, no checkout hospedado da Sinnu.
15
+ - **Acompanhar** as transações: status, valor bruto, taxas e valor líquido.
16
+ - **Estornar** uma venda pelo próprio sistema.
17
+ - **Ser avisado** de cada pagamento por webhook, com assinatura verificada.
18
+
19
+ ## Instalação
20
+
21
+ ```bash
22
+ npm install @sinnu-dev/sdk
23
+ ```
24
+
25
+ Requer Node.js 18 ou mais recente. Funciona com TypeScript e JavaScript (ESM e CommonJS).
26
+
27
+ ## Primeiros passos
28
+
29
+ Gere sua **chave secreta** (`sk_live_...`) no painel da Sinnu, em **Chave de API**, e guarde
30
+ em uma variável de ambiente do servidor.
31
+
32
+ > A chave secreta dá acesso à sua conta. Use só no backend: nunca no navegador nem no app.
33
+
34
+ ```ts
35
+ import { Sinnu } from "@sinnu-dev/sdk";
36
+
37
+ const sinnu = new Sinnu({ apiKey: process.env.SINNU_API_KEY! });
38
+
39
+ const link = await sinnu.links.create({
40
+ title: "Consultoria inicial",
41
+ amountCents: 9900, // R$ 99,00
42
+ methods: ["pix", "credit_card"],
43
+ maxInstallments: 12,
44
+ });
45
+
46
+ // Envie esta URL para o seu cliente pagar.
47
+ console.log(sinnu.checkout.url(link.slug));
48
+ ```
49
+
50
+ Valores são sempre em **centavos**: `9900` é R$ 99,00.
51
+
52
+ ## Cobrar pedidos do seu sistema
53
+
54
+ O link é o produto e pode ser vendido muitas vezes. Para saber qual pedido cada venda
55
+ pagou, abra o checkout com a referência do pedido:
56
+
57
+ ```ts
58
+ const link = await sinnu.links.create({
59
+ title: "Consultoria inicial",
60
+ amountCents: 9900,
61
+ externalReference: "CONSULTORIA-1H", // código do produto no seu sistema
62
+ redirectUrl: "https://sualoja.com.br/obrigado", // ou o deep link do app: meuapp://pedido
63
+ });
64
+
65
+ // Um checkout por pedido: a referência volta na transação e no webhook.
66
+ const url = sinnu.checkout.url(link.slug, { reference: "pedido-123" });
67
+ ```
68
+
69
+ Depois do pagamento confirmado, o comprador volta para o `redirectUrl` (liberado por empresa:
70
+ confirme com a Sinnu se já está ativo para a sua) com
71
+ `transactionId`, `reference` e `status=approved` na query. Use esses parâmetros só para
72
+ mostrar a tela certa: libere o pedido pelo webhook ou por `transactions.get(transactionId)`.
73
+
74
+ ## Acompanhar transações
75
+
76
+ ```ts
77
+ const page = await sinnu.transactions.list({ status: "approved" });
78
+ console.log(`${page.total} vendas aprovadas`);
79
+
80
+ // Ou percorra todas as páginas:
81
+ for await (const tx of sinnu.transactions.listAll({ status: "approved" })) {
82
+ console.log(tx.id, tx.method, tx.amount, tx.net);
83
+ }
84
+ ```
85
+
86
+ ## Estornar uma venda
87
+
88
+ O estorno é sempre do valor total da transação. A chave precisa do escopo `transactions:refund`; sem ele, a API responde `403`.
89
+
90
+ ```ts
91
+ const tx = await sinnu.transactions.refund("ID_DA_TRANSACAO", {
92
+ reason: "Pedido cancelado pelo cliente",
93
+ });
94
+ ```
95
+
96
+ ## Receber webhooks
97
+
98
+ A Sinnu avisa seu sistema a cada evento de pagamento. Verifique a assinatura com o
99
+ **corpo cru** da requisição antes de processar:
100
+
101
+ ```ts
102
+ import { constructEvent, SinnuWebhookSignatureError } from "@sinnu-dev/sdk";
103
+
104
+ try {
105
+ const event = constructEvent({
106
+ payload: rawBody,
107
+ signature: req.headers["x-sinnu-signature"],
108
+ secret: process.env.SINNU_WEBHOOK_SECRET!,
109
+ });
110
+
111
+ if (event.type === "transaction.approved") {
112
+ // event.data.reference é o pedido do seu sistema (o ?ref= do checkout):
113
+ // libere o pedido, envie o acesso, emita a nota...
114
+ }
115
+ } catch (err) {
116
+ if (err instanceof SinnuWebhookSignatureError) {
117
+ // assinatura inválida: responda 400 e descarte
118
+ }
119
+ }
120
+ ```
121
+
122
+ ## Tratamento de erros
123
+
124
+ Toda falha da API vira um `SinnuError` (ou uma subclasse), com o status HTTP em
125
+ `statusCode`:
126
+
127
+ ```ts
128
+ import { SinnuAuthError, SinnuError, SinnuValidationError } from "@sinnu-dev/sdk";
129
+
130
+ try {
131
+ await sinnu.links.create({ title: "Teste", amountCents: 500 });
132
+ } catch (err) {
133
+ if (err instanceof SinnuAuthError) console.error("Chave de API inválida");
134
+ else if (err instanceof SinnuValidationError) console.error(err.body);
135
+ else if (err instanceof SinnuError) console.error(err.statusCode, err.message);
136
+ }
137
+ ```
138
+
139
+ Também existem `SinnuNotFoundError` e `SinnuRateLimitError`.
140
+
141
+ ## Recursos
142
+
143
+ | Recurso | Métodos |
144
+ |---|---|
145
+ | `sinnu.links` | `create`, `get`, `update`, `archive`, `list`, `listAll`, `transactions` |
146
+ | `sinnu.transactions` | `list`, `listAll`, `get`, `refund` |
147
+ | `sinnu.checkout` | `url` |
148
+ | `sinnu.webhooks` | `constructEvent`, `verifySignature`, `computeSignature` |
149
+
150
+ Para chamar direto qualquer rota da API pública com tipos, use `sinnu.http`.
151
+
152
+ ## Links úteis
153
+
154
+ - [Guia do SDK](https://docs.sinnu.com.br/sdk)
155
+ - [Início rápido](https://docs.sinnu.com.br/guias/inicio-rapido)
156
+ - [Autenticação](https://docs.sinnu.com.br/guias/autenticacao)
157
+ - [Webhooks](https://docs.sinnu.com.br/guias/webhooks)
158
+ - [Referência da API](https://docs.sinnu.com.br/api-reference)
159
+
160
+ ## Licença
161
+
162
+ MIT