@agenus-io/webhook-centralizer 1.0.26 → 1.0.27
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 +394 -215
- package/dist/WebhookTypes/index.d.ts +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Webhook Centralizer SDK
|
|
2
2
|
|
|
3
|
-
SDK para
|
|
3
|
+
SDK para gerenciamento de plataformas de webhook e centralização de eventos de plataformas de pagamento.
|
|
4
4
|
|
|
5
5
|
## Instalação
|
|
6
6
|
|
|
@@ -14,10 +14,12 @@ pnpm add @agenus-io/webhook-centralizer
|
|
|
14
14
|
|
|
15
15
|
## Funcionalidades
|
|
16
16
|
|
|
17
|
-
Este SDK fornece funcionalidades para
|
|
17
|
+
Este SDK fornece funcionalidades para gerenciar plataformas de webhook e centralizar eventos de plataformas de pagamento, permitindo:
|
|
18
18
|
|
|
19
|
-
1. **Gerenciamento de
|
|
20
|
-
2. **
|
|
19
|
+
1. **Gerenciamento de Plataformas**: CRUD completo de plataformas de webhook
|
|
20
|
+
2. **Consulta de Webhooks**: Listagem e consulta de webhooks processados
|
|
21
|
+
3. **KPIs**: Métricas de aceitação e rejeição de webhooks
|
|
22
|
+
4. **Configurações**: Consulta de configurações disponíveis de plataformas
|
|
21
23
|
|
|
22
24
|
## Uso
|
|
23
25
|
|
|
@@ -25,325 +27,502 @@ Este SDK fornece funcionalidades para centralização de webhooks de plataformas
|
|
|
25
27
|
|
|
26
28
|
```typescript
|
|
27
29
|
import { WebhookCentralizerSDK } from "@agenus-io/webhook-centralizer";
|
|
28
|
-
import type { AWSConfig, Order } from "@agenus-io/webhook-centralizer";
|
|
29
|
-
|
|
30
|
-
// Configure o SDK com suas credenciais AWS e credenciais da aplicação
|
|
31
|
-
const config: AWSConfig = {
|
|
32
|
-
region: "us-east-1",
|
|
33
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
34
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
35
|
-
queueUrl: process.env.QUEUE_SALES_URL!,
|
|
36
|
-
};
|
|
37
30
|
|
|
31
|
+
// Configure o SDK com suas credenciais da aplicação
|
|
38
32
|
const appId = process.env.APP_ID!;
|
|
39
33
|
const appToken = process.env.APP_TOKEN!;
|
|
34
|
+
const environment = process.env.NODE_ENV === "production" ? "production" : "develop";
|
|
40
35
|
|
|
41
|
-
const sdk = new WebhookCentralizerSDK(
|
|
36
|
+
const sdk = new WebhookCentralizerSDK(appId, appToken, environment);
|
|
42
37
|
```
|
|
43
38
|
|
|
44
|
-
### 1.
|
|
39
|
+
### 1. Criar Plataforma de Webhook
|
|
45
40
|
|
|
46
41
|
```typescript
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
fbc: "fb.1.1733718123.uYhGtFdSLoPqWeRtYuIo", // Meta/Facebook
|
|
60
|
-
fbp: "fb.1.1733718123.4455667788", // Meta/Facebook
|
|
61
|
-
fbclid: "fbclid-value", // Meta/Facebook
|
|
62
|
-
gclid: "Cj0KCQi...", // Google
|
|
63
|
-
gbraid: "gbraid-value", // Google
|
|
64
|
-
wbraid: "wbraid-value", // Google
|
|
65
|
-
|
|
66
|
-
customer: {
|
|
67
|
-
email: "cliente@example.com",
|
|
68
|
-
externalId: "USR-123", // opcional
|
|
69
|
-
firstName: "João",
|
|
70
|
-
lastName: "Silva",
|
|
71
|
-
phone: "+55 11 99999-9999", // opcional
|
|
72
|
-
city: "São Paulo", // opcional
|
|
73
|
-
state: "SP", // opcional
|
|
74
|
-
zipCode: "01310-100", // opcional
|
|
75
|
-
country: "BR", // opcional
|
|
76
|
-
ip: "189.45.201.77", // opcional
|
|
77
|
-
userAgent: "Mozilla/5.0...", // opcional
|
|
42
|
+
import { WebhookCentralizerPlatformEnum, WebhookPlatformRoleEnum } from "@agenus-io/webhook-centralizer";
|
|
43
|
+
|
|
44
|
+
const result = await sdk.Create({
|
|
45
|
+
workSpaceId: "workspace-123",
|
|
46
|
+
title: "Plataforma Hotmart",
|
|
47
|
+
type: WebhookCentralizerPlatformEnum.HOTMART,
|
|
48
|
+
role: WebhookPlatformRoleEnum.PRODUCER,
|
|
49
|
+
platformToken: "token-da-plataforma", // opcional
|
|
50
|
+
apiToken: "api-token", // opcional
|
|
51
|
+
slug: "hotmart-slug", // opcional
|
|
52
|
+
meta: { // opcional
|
|
53
|
+
customField: "value"
|
|
78
54
|
},
|
|
79
|
-
|
|
80
|
-
products: [
|
|
81
|
-
{
|
|
82
|
-
id: "PROD-001",
|
|
83
|
-
title: "Produto 1",
|
|
84
|
-
externalId: "EXT-001",
|
|
85
|
-
quantity: 2,
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
id: "PROD-002",
|
|
89
|
-
title: "Produto 2",
|
|
90
|
-
externalId: "EXT-002",
|
|
91
|
-
quantity: 1,
|
|
92
|
-
},
|
|
93
|
-
],
|
|
94
|
-
};
|
|
55
|
+
});
|
|
95
56
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
});
|
|
101
|
-
console.log("Venda enviada com sucesso!");
|
|
102
|
-
} catch (error) {
|
|
103
|
-
console.error("Erro ao enviar venda:", error);
|
|
57
|
+
if (result.isError) {
|
|
58
|
+
console.error("Erro ao criar plataforma:", result.error);
|
|
59
|
+
} else {
|
|
60
|
+
console.log("Plataforma criada com sucesso! ID:", result.id);
|
|
104
61
|
}
|
|
105
62
|
```
|
|
106
63
|
|
|
107
|
-
### 2.
|
|
64
|
+
### 2. Listar Plataformas
|
|
108
65
|
|
|
109
|
-
|
|
66
|
+
```typescript
|
|
67
|
+
const result = await sdk.Get({
|
|
68
|
+
workSpaceId: "workspace-123",
|
|
69
|
+
page: 1,
|
|
70
|
+
pageSize: 10,
|
|
71
|
+
filter: undefined, // opcional - filtro de busca
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
console.log(result.data); // Array de plataformas
|
|
75
|
+
console.log(result.meta); // Metadados de paginação
|
|
76
|
+
// {
|
|
77
|
+
// total: 50,
|
|
78
|
+
// totalPages: 5,
|
|
79
|
+
// page: 1,
|
|
80
|
+
// pageSize: 10
|
|
81
|
+
// }
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### 3. Buscar Plataforma por ID
|
|
110
85
|
|
|
111
86
|
```typescript
|
|
112
|
-
await sdk.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
title: "Pixel Meta",
|
|
116
|
-
status: true,
|
|
117
|
-
sendLead: true,
|
|
118
|
-
sendLeadText: "Lead capturado",
|
|
119
|
-
addToCart: true,
|
|
120
|
-
addToCartText: "Produto adicionado ao carrinho",
|
|
121
|
-
initiateCheckout: true,
|
|
122
|
-
initiateCheckoutDetection: "AUTOMATIC",
|
|
123
|
-
initiateCheckoutDetectionText: undefined,
|
|
124
|
-
purchaseSendType: "SALES_APPROVED",
|
|
125
|
-
purchaseValueType: "SALE_VALUE",
|
|
126
|
-
type: "META",
|
|
127
|
-
productIds: ["prod-1", "prod-2"],
|
|
128
|
-
sendIp: "IPV6_AND_IPV4",
|
|
129
|
-
pixelMeta: [
|
|
130
|
-
{
|
|
131
|
-
id: "pixel-id-123",
|
|
132
|
-
title: "Pixel Principal",
|
|
133
|
-
token: "pixel-token-123",
|
|
134
|
-
},
|
|
135
|
-
],
|
|
136
|
-
},
|
|
87
|
+
const result = await sdk.GetById({
|
|
88
|
+
id: "platform-id-123",
|
|
89
|
+
workSpaceId: "workspace-123",
|
|
137
90
|
});
|
|
91
|
+
|
|
92
|
+
if (result.isError) {
|
|
93
|
+
console.error("Erro ao buscar plataforma:", result.error);
|
|
94
|
+
} else {
|
|
95
|
+
console.log("Plataforma encontrada:", result.data);
|
|
96
|
+
}
|
|
138
97
|
```
|
|
139
98
|
|
|
140
|
-
|
|
99
|
+
### 4. Buscar Plataforma por Título
|
|
141
100
|
|
|
142
101
|
```typescript
|
|
143
|
-
const result = await sdk.
|
|
102
|
+
const result = await sdk.GetByTitle({
|
|
103
|
+
title: "Plataforma Hotmart",
|
|
104
|
+
workSpaceId: "workspace-123",
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
console.log("Plataforma encontrada:", result);
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### 5. Atualizar Plataforma
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
const result = await sdk.Update({
|
|
114
|
+
id: "platform-id-123",
|
|
115
|
+
workSpaceId: "workspace-123",
|
|
116
|
+
title: "Plataforma Atualizada", // opcional
|
|
117
|
+
platformToken: "novo-token", // opcional
|
|
118
|
+
// Apenas os campos que deseja atualizar
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
if (result.isError) {
|
|
122
|
+
console.error("Erro ao atualizar plataforma:", result.error);
|
|
123
|
+
} else {
|
|
124
|
+
console.log("Plataforma atualizada com sucesso!");
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 6. Deletar Plataforma
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
const result = await sdk.Delete({
|
|
132
|
+
id: "platform-id-123",
|
|
133
|
+
workSpaceId: "workspace-123",
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
if (result.isError) {
|
|
137
|
+
console.error("Erro ao deletar plataforma:", result.error);
|
|
138
|
+
} else {
|
|
139
|
+
console.log("Plataforma deletada com sucesso!");
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 7. Listar Webhooks de uma Plataforma
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
import { WebhookCentralizerStatusEnum } from "@agenus-io/webhook-centralizer";
|
|
147
|
+
|
|
148
|
+
const result = await sdk.GetWebhooks({
|
|
149
|
+
id: "platform-id-123",
|
|
144
150
|
workSpaceId: "workspace-123",
|
|
145
151
|
page: 1,
|
|
146
152
|
pageSize: 10,
|
|
147
153
|
filter: undefined, // opcional
|
|
154
|
+
status: WebhookCentralizerStatusEnum.COMPLETED, // opcional - filtrar por status
|
|
148
155
|
});
|
|
149
156
|
|
|
150
|
-
console.log(result.data); // Array de
|
|
157
|
+
console.log(result.data); // Array de webhooks
|
|
151
158
|
console.log(result.meta); // Metadados de paginação
|
|
152
159
|
```
|
|
153
160
|
|
|
154
|
-
|
|
161
|
+
### 8. Buscar Webhook por ID
|
|
155
162
|
|
|
156
163
|
```typescript
|
|
157
|
-
const result = await sdk.
|
|
158
|
-
id: "
|
|
164
|
+
const result = await sdk.GetWebhookById({
|
|
165
|
+
id: "webhook-id-123",
|
|
159
166
|
workSpaceId: "workspace-123",
|
|
160
167
|
});
|
|
161
168
|
|
|
162
|
-
|
|
169
|
+
if (result.isError) {
|
|
170
|
+
console.error("Erro ao buscar webhook:", result.error);
|
|
171
|
+
} else {
|
|
172
|
+
console.log("Webhook encontrado:", result.data);
|
|
173
|
+
}
|
|
163
174
|
```
|
|
164
175
|
|
|
165
|
-
|
|
176
|
+
### 9. Consultar Configurações de Plataformas Disponíveis
|
|
166
177
|
|
|
167
178
|
```typescript
|
|
168
|
-
await sdk.
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
179
|
+
const result = await sdk.GetPlatformSettings();
|
|
180
|
+
|
|
181
|
+
console.log(result.data); // Array de configurações disponíveis
|
|
182
|
+
// Cada configuração contém informações sobre:
|
|
183
|
+
// - Plataformas suportadas
|
|
184
|
+
// - Se tem PostBack
|
|
185
|
+
// - Se tem Token
|
|
186
|
+
// - Se tem Slug
|
|
187
|
+
// - Se tem API
|
|
188
|
+
// - Se está em preparação
|
|
177
189
|
```
|
|
178
190
|
|
|
179
|
-
|
|
191
|
+
### 10. Consultar KPIs
|
|
180
192
|
|
|
181
193
|
```typescript
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
194
|
+
import {
|
|
195
|
+
WebhookCentralizerStatusEnum,
|
|
196
|
+
WebhookCentralizerEventEnum
|
|
197
|
+
} from "@agenus-io/webhook-centralizer";
|
|
198
|
+
|
|
199
|
+
const result = await sdk.Kpi({
|
|
200
|
+
id: "platform-id-123",
|
|
201
|
+
workSpaceId: "workspace-123",
|
|
202
|
+
status: [
|
|
203
|
+
WebhookCentralizerStatusEnum.COMPLETED,
|
|
204
|
+
WebhookCentralizerStatusEnum.PROCESSING
|
|
205
|
+
],
|
|
206
|
+
event: [
|
|
207
|
+
WebhookCentralizerEventEnum.PURCHASE_CONFIRMED,
|
|
208
|
+
WebhookCentralizerEventEnum.PURCHASE_PENDING
|
|
209
|
+
],
|
|
185
210
|
});
|
|
211
|
+
|
|
212
|
+
console.log("Total:", result.total);
|
|
213
|
+
console.log("Aceitos:", result.amountAccepted);
|
|
214
|
+
console.log("Rejeitados:", result.amountRejected);
|
|
186
215
|
```
|
|
187
216
|
|
|
188
217
|
## Tipos Exportados
|
|
189
218
|
|
|
190
|
-
### `
|
|
219
|
+
### `webhookCentralizerPlatform`
|
|
220
|
+
Plataformas de pagamento suportadas:
|
|
191
221
|
```typescript
|
|
192
|
-
type
|
|
222
|
+
type webhookCentralizerPlatform =
|
|
223
|
+
| "BEMONY"
|
|
224
|
+
| "B4YOU"
|
|
225
|
+
| "BRAIP"
|
|
226
|
+
| "CARTPANDA"
|
|
227
|
+
| "NUTRALINK"
|
|
228
|
+
| "HOTMART"
|
|
229
|
+
| "KIRVANO"
|
|
230
|
+
| "KIWIFY"
|
|
231
|
+
| "LAST_LINK"
|
|
232
|
+
| "PAYT"
|
|
233
|
+
| "DIGISTORE";
|
|
193
234
|
```
|
|
194
235
|
|
|
195
|
-
### `
|
|
236
|
+
### `webhookCentralizerEvent`
|
|
237
|
+
Eventos de webhook suportados:
|
|
196
238
|
```typescript
|
|
197
|
-
type
|
|
239
|
+
type webhookCentralizerEvent =
|
|
240
|
+
| "ABANDONED_CART"
|
|
241
|
+
| "PURCHASE_UPSELL"
|
|
242
|
+
| "PURCHASE_CONFIRMED"
|
|
243
|
+
| "PURCHASE_PENDING"
|
|
244
|
+
| "PURCHASE_EXPIRED"
|
|
245
|
+
| "PURCHASE_CANCELED"
|
|
246
|
+
| "PURCHASE_SHIPPED"
|
|
247
|
+
| "PURCHASE_REFUND"
|
|
248
|
+
| "PURCHASE_UPDATED"
|
|
249
|
+
| "PURCHASE_CHARGEBACK"
|
|
250
|
+
| "SUBSCRIPTION_INITIATED"
|
|
251
|
+
| "SUBSCRIPTION_RENEWAL"
|
|
252
|
+
| "SUBSCRIPTION_RENEWAL_PENDING"
|
|
253
|
+
| "SUBSCRIPTION_UPDATED"
|
|
254
|
+
| "SUBSCRIPTION_CANCELED"
|
|
255
|
+
| "SUBSCRIPTION_EXPIRED"
|
|
256
|
+
| "SUBSCRIPTION_RENEWAL_CANCELLED"
|
|
257
|
+
| "SUBSCRIPTION_RENEWAL_RESUMED"
|
|
258
|
+
| "REJECTED"
|
|
259
|
+
| "UNKNOWN";
|
|
198
260
|
```
|
|
199
261
|
|
|
200
|
-
### `
|
|
262
|
+
### `webhookCentralizerOrderStatus`
|
|
263
|
+
Status de pedidos:
|
|
201
264
|
```typescript
|
|
202
|
-
type
|
|
265
|
+
type webhookCentralizerOrderStatus =
|
|
266
|
+
| "PENDING"
|
|
267
|
+
| "PROCESSING"
|
|
268
|
+
| "COMPLETED"
|
|
269
|
+
| "FAILED";
|
|
203
270
|
```
|
|
204
271
|
|
|
205
|
-
### `
|
|
272
|
+
### `webhookCentralizerDispatchType`
|
|
273
|
+
Tipo de despacho:
|
|
206
274
|
```typescript
|
|
207
|
-
type
|
|
275
|
+
type webhookCentralizerDispatchType = "WEBHOOK" | "POST_BACK";
|
|
208
276
|
```
|
|
209
277
|
|
|
210
|
-
### `
|
|
278
|
+
### `webhookPlatformRole`
|
|
279
|
+
Papel da plataforma:
|
|
211
280
|
```typescript
|
|
212
|
-
type
|
|
281
|
+
type webhookPlatformRole = "PRODUCER" | "CO_PRODUCER" | "AFFILIATE";
|
|
213
282
|
```
|
|
214
283
|
|
|
215
|
-
###
|
|
284
|
+
### Enums Disponíveis
|
|
285
|
+
|
|
286
|
+
O SDK exporta enums para facilitar o uso:
|
|
287
|
+
|
|
216
288
|
```typescript
|
|
217
|
-
|
|
289
|
+
import {
|
|
290
|
+
WebhookCentralizerPlatformEnum,
|
|
291
|
+
WebhookCentralizerEventEnum,
|
|
292
|
+
WebhookCentralizerStatusEnum,
|
|
293
|
+
WebhookCentralizerDispatchTypeEnum,
|
|
294
|
+
WebhookPlatformRoleEnum,
|
|
295
|
+
} from "@agenus-io/webhook-centralizer";
|
|
296
|
+
|
|
297
|
+
// Exemplo de uso
|
|
298
|
+
const platform = WebhookCentralizerPlatformEnum.HOTMART;
|
|
299
|
+
const event = WebhookCentralizerEventEnum.PURCHASE_CONFIRMED;
|
|
300
|
+
const status = WebhookCentralizerStatusEnum.COMPLETED;
|
|
218
301
|
```
|
|
219
302
|
|
|
220
|
-
###
|
|
221
|
-
Estrutura completa de dados da venda (veja exemplo acima).
|
|
303
|
+
### Tipos de Dados Centralizados
|
|
222
304
|
|
|
223
|
-
|
|
224
|
-
Configuração necessária para conexão com AWS SQS:
|
|
225
|
-
- `region`: string - Região AWS
|
|
226
|
-
- `accessKeyId`: string - Access Key ID
|
|
227
|
-
- `secretAccessKey`: string - Secret Access Key
|
|
228
|
-
- `queueUrl`: string - URL da fila SQS
|
|
305
|
+
O SDK também exporta tipos para estruturas de dados centralizadas:
|
|
229
306
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
307
|
+
```typescript
|
|
308
|
+
import type {
|
|
309
|
+
ICentralizedSaleDTO,
|
|
310
|
+
ICentralizedSubscriptionDTO,
|
|
311
|
+
ICentralizedAbandonedCartDTO,
|
|
312
|
+
} from "@agenus-io/webhook-centralizer";
|
|
313
|
+
```
|
|
234
314
|
|
|
235
315
|
## Variáveis de Ambiente
|
|
236
316
|
|
|
237
|
-
As credenciais
|
|
317
|
+
As credenciais da aplicação devem ser fornecidas ao instanciar o SDK. Recomendamos usar variáveis de ambiente:
|
|
238
318
|
|
|
239
319
|
```env
|
|
240
|
-
AWS_REGION=us-east-1
|
|
241
|
-
AWS_ACCESS_KEY_ID=AKIA...
|
|
242
|
-
AWS_SECRET_ACCESS_KEY=secret...
|
|
243
|
-
QUEUE_SALES_URL=https://sqs.us-east-1.amazonaws.com/123456789012/queue-name
|
|
244
320
|
APP_ID=your-app-id
|
|
245
321
|
APP_TOKEN=your-app-token
|
|
322
|
+
NODE_ENV=production # ou develop
|
|
246
323
|
```
|
|
247
324
|
|
|
248
325
|
## Exemplo Completo
|
|
249
326
|
|
|
250
327
|
```typescript
|
|
251
|
-
import {
|
|
252
|
-
|
|
328
|
+
import {
|
|
329
|
+
WebhookCentralizerSDK,
|
|
330
|
+
WebhookCentralizerPlatformEnum,
|
|
331
|
+
WebhookPlatformRoleEnum,
|
|
332
|
+
WebhookCentralizerStatusEnum,
|
|
333
|
+
WebhookCentralizerEventEnum,
|
|
334
|
+
} from "@agenus-io/webhook-centralizer";
|
|
253
335
|
|
|
254
336
|
// 1. Configurar SDK
|
|
255
|
-
const config: AWSConfig = {
|
|
256
|
-
region: process.env.AWS_REGION!,
|
|
257
|
-
accessKeyId: process.env.AWS_ACCESS_KEY_ID!,
|
|
258
|
-
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY!,
|
|
259
|
-
queueUrl: process.env.QUEUE_SALES_URL!,
|
|
260
|
-
};
|
|
261
|
-
|
|
262
337
|
const sdk = new WebhookCentralizerSDK(
|
|
263
|
-
config,
|
|
264
338
|
process.env.APP_ID!,
|
|
265
|
-
process.env.APP_TOKEN
|
|
339
|
+
process.env.APP_TOKEN!,
|
|
340
|
+
process.env.NODE_ENV === "production" ? "production" : "develop"
|
|
266
341
|
);
|
|
267
342
|
|
|
268
|
-
// 2.
|
|
269
|
-
function
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
valueNet: order.subtotal,
|
|
278
|
-
createdAt: order.createdAt,
|
|
279
|
-
customer: {
|
|
280
|
-
email: order.customer.email,
|
|
281
|
-
firstName: order.customer.firstName,
|
|
282
|
-
lastName: order.customer.lastName,
|
|
283
|
-
phone: order.customer.phone,
|
|
284
|
-
// ... outros campos opcionais
|
|
285
|
-
},
|
|
286
|
-
products: order.items.map(item => ({
|
|
287
|
-
id: item.productId,
|
|
288
|
-
title: item.title,
|
|
289
|
-
externalId: item.externalId,
|
|
290
|
-
quantity: item.quantity,
|
|
291
|
-
})),
|
|
292
|
-
};
|
|
293
|
-
}
|
|
343
|
+
// 2. Criar uma nova plataforma
|
|
344
|
+
async function criarPlataforma() {
|
|
345
|
+
const result = await sdk.Create({
|
|
346
|
+
workSpaceId: "workspace-123",
|
|
347
|
+
title: "Minha Plataforma Hotmart",
|
|
348
|
+
type: WebhookCentralizerPlatformEnum.HOTMART,
|
|
349
|
+
role: WebhookPlatformRoleEnum.PRODUCER,
|
|
350
|
+
platformToken: "token-da-plataforma",
|
|
351
|
+
});
|
|
294
352
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
try {
|
|
300
|
-
await sdk.SendOrder({
|
|
301
|
-
workspaceId,
|
|
302
|
-
order: orderData,
|
|
303
|
-
});
|
|
304
|
-
console.log(`Venda ${order.id} enviada com sucesso!`);
|
|
305
|
-
} catch (error) {
|
|
306
|
-
console.error(`Erro ao enviar venda ${order.id}:`, error);
|
|
307
|
-
// Implemente sua lógica de retry ou notificação aqui
|
|
353
|
+
if (result.isError) {
|
|
354
|
+
console.error("Erro:", result.error);
|
|
355
|
+
return;
|
|
308
356
|
}
|
|
357
|
+
|
|
358
|
+
console.log("Plataforma criada com ID:", result.id);
|
|
359
|
+
return result.id;
|
|
309
360
|
}
|
|
310
361
|
|
|
311
|
-
//
|
|
362
|
+
// 3. Listar todas as plataformas
|
|
363
|
+
async function listarPlataformas(workSpaceId: string) {
|
|
364
|
+
const result = await sdk.Get({
|
|
365
|
+
workSpaceId,
|
|
366
|
+
page: 1,
|
|
367
|
+
pageSize: 10,
|
|
368
|
+
});
|
|
369
|
+
|
|
370
|
+
console.log(`Total de plataformas: ${result.meta.total}`);
|
|
371
|
+
result.data.forEach(platform => {
|
|
372
|
+
console.log(`- ${platform.title} (${platform.type})`);
|
|
373
|
+
console.log(` Aceitos: ${platform.amountAccepted}, Rejeitados: ${platform.amountRejected}`);
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// 4. Consultar webhooks de uma plataforma
|
|
378
|
+
async function consultarWebhooks(platformId: string, workSpaceId: string) {
|
|
379
|
+
const result = await sdk.GetWebhooks({
|
|
380
|
+
id: platformId,
|
|
381
|
+
workSpaceId,
|
|
382
|
+
page: 1,
|
|
383
|
+
pageSize: 20,
|
|
384
|
+
status: WebhookCentralizerStatusEnum.COMPLETED,
|
|
385
|
+
});
|
|
386
|
+
|
|
387
|
+
console.log(`Total de webhooks: ${result.meta.total}`);
|
|
388
|
+
result.data.forEach(webhook => {
|
|
389
|
+
console.log(`- ${webhook.event} (${webhook.status}) - ${webhook.code}`);
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// 5. Consultar KPIs
|
|
394
|
+
async function consultarKPIs(platformId: string, workSpaceId: string) {
|
|
395
|
+
const result = await sdk.Kpi({
|
|
396
|
+
id: platformId,
|
|
397
|
+
workSpaceId,
|
|
398
|
+
status: [
|
|
399
|
+
WebhookCentralizerStatusEnum.COMPLETED,
|
|
400
|
+
WebhookCentralizerStatusEnum.PROCESSING,
|
|
401
|
+
],
|
|
402
|
+
event: [
|
|
403
|
+
WebhookCentralizerEventEnum.PURCHASE_CONFIRMED,
|
|
404
|
+
WebhookCentralizerEventEnum.PURCHASE_PENDING,
|
|
405
|
+
],
|
|
406
|
+
});
|
|
407
|
+
|
|
408
|
+
console.log("KPIs da Plataforma:");
|
|
409
|
+
console.log(`Total: ${result.total}`);
|
|
410
|
+
console.log(`Aceitos: ${result.amountAccepted}`);
|
|
411
|
+
console.log(`Rejeitados: ${result.amountRejected}`);
|
|
412
|
+
console.log(`Taxa de sucesso: ${((result.amountAccepted / result.total) * 100).toFixed(2)}%`);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
// 6. Fluxo completo
|
|
312
416
|
async function exemploCompleto() {
|
|
313
|
-
|
|
314
|
-
|
|
417
|
+
const workSpaceId = "workspace-123";
|
|
418
|
+
|
|
419
|
+
// Listar plataformas existentes
|
|
420
|
+
await listarPlataformas(workSpaceId);
|
|
421
|
+
|
|
422
|
+
// Criar nova plataforma
|
|
423
|
+
const platformId = await criarPlataforma();
|
|
424
|
+
|
|
425
|
+
if (platformId) {
|
|
426
|
+
// Consultar webhooks
|
|
427
|
+
await consultarWebhooks(platformId, workSpaceId);
|
|
428
|
+
|
|
429
|
+
// Consultar KPIs
|
|
430
|
+
await consultarKPIs(platformId, workSpaceId);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
## Tratamento de Erros
|
|
436
|
+
|
|
437
|
+
Todos os métodos que podem retornar erros seguem o padrão:
|
|
438
|
+
|
|
439
|
+
```typescript
|
|
440
|
+
const result = await sdk.Create({ /* ... */ });
|
|
441
|
+
|
|
442
|
+
if (result.isError) {
|
|
443
|
+
// Tratar erro
|
|
444
|
+
console.error("Erro:", result.error);
|
|
445
|
+
} else {
|
|
446
|
+
// Sucesso
|
|
447
|
+
console.log("ID:", result.id);
|
|
448
|
+
}
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
Para métodos que lançam exceções (`Get`, `GetByTitle`, `GetWebhooks`), use try/catch:
|
|
452
|
+
|
|
453
|
+
```typescript
|
|
454
|
+
try {
|
|
455
|
+
const result = await sdk.Get({
|
|
315
456
|
workSpaceId: "workspace-123",
|
|
316
457
|
page: 1,
|
|
317
458
|
pageSize: 10,
|
|
318
459
|
});
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
// Processar um webhook de pagamento
|
|
323
|
-
await handleOrderCompleted(myOrder, "workspace-123");
|
|
460
|
+
// Processar resultado
|
|
461
|
+
} catch (error) {
|
|
462
|
+
console.error("Erro ao listar plataformas:", error);
|
|
324
463
|
}
|
|
325
464
|
```
|
|
326
465
|
|
|
327
|
-
##
|
|
466
|
+
## Ambientes
|
|
328
467
|
|
|
329
|
-
|
|
468
|
+
O SDK suporta dois ambientes:
|
|
330
469
|
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
3. Se houver breaking changes, serão documentados nas release notes
|
|
470
|
+
- **production**: Conecta-se a `https://webhook-centralizer-production.up.railway.app`
|
|
471
|
+
- **develop**: Conecta-se a `https://service-webhook-develop.up.railway.app`
|
|
334
472
|
|
|
335
|
-
|
|
473
|
+
O ambiente é definido no construtor:
|
|
336
474
|
|
|
337
|
-
|
|
475
|
+
```typescript
|
|
476
|
+
const sdk = new WebhookCentralizerSDK(
|
|
477
|
+
appId,
|
|
478
|
+
appToken,
|
|
479
|
+
"production" // ou "develop"
|
|
480
|
+
);
|
|
481
|
+
```
|
|
338
482
|
|
|
339
483
|
## API de Webhooks
|
|
340
484
|
|
|
341
|
-
O SDK se conecta à API de centralização de webhooks hospedada em:
|
|
485
|
+
O SDK se conecta à API de centralização de webhooks hospedada em:
|
|
342
486
|
|
|
343
|
-
|
|
487
|
+
- **Produção**: `https://webhook-centralizer-production.up.railway.app`
|
|
488
|
+
- **Desenvolvimento**: `https://service-webhook-develop.up.railway.app`
|
|
489
|
+
|
|
490
|
+
Todas as operações utilizam autenticação via headers:
|
|
344
491
|
- `app-id`: ID da aplicação
|
|
345
492
|
- `app-secret-token`: Token secreto da aplicação
|
|
346
|
-
- `work-space-id`: ID do workspace
|
|
493
|
+
- `work-space-id`: ID do workspace (quando aplicável)
|
|
494
|
+
|
|
495
|
+
## Schemas de Validação
|
|
496
|
+
|
|
497
|
+
O SDK exporta schemas Zod para validação:
|
|
498
|
+
|
|
499
|
+
```typescript
|
|
500
|
+
import {
|
|
501
|
+
WebhookCentralizerCreatePlatformSchema,
|
|
502
|
+
WebhookCentralizerUpdatePlatformSchema,
|
|
503
|
+
WebhookCentralizerGetPlatformsSchema,
|
|
504
|
+
WebhookCentralizerGetPlatformWebhooksSchema,
|
|
505
|
+
} from "@agenus-io/webhook-centralizer";
|
|
506
|
+
|
|
507
|
+
// Validar dados antes de criar
|
|
508
|
+
const data = WebhookCentralizerCreatePlatformSchema.parse({
|
|
509
|
+
title: "Minha Plataforma",
|
|
510
|
+
type: "HOTMART",
|
|
511
|
+
role: "PRODUCER",
|
|
512
|
+
});
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
## Manutenção
|
|
516
|
+
|
|
517
|
+
Quando houver atualizações no SDK:
|
|
518
|
+
|
|
519
|
+
1. A versão será atualizada no npm
|
|
520
|
+
2. Atualize o pacote nos seus apps: `npm update @agenus-io/webhook-centralizer`
|
|
521
|
+
3. Se houver breaking changes, serão documentados nas release notes
|
|
522
|
+
|
|
523
|
+
## Segurança
|
|
524
|
+
|
|
525
|
+
⚠️ **IMPORTANTE**: Nunca commite credenciais ou tokens no código fonte. Sempre use variáveis de ambiente ou serviços de gerenciamento de segredos.
|
|
347
526
|
|
|
348
527
|
## Suporte
|
|
349
528
|
|
package/package.json
CHANGED