@pagci/node 0.1.0 → 0.1.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.
@@ -0,0 +1,372 @@
1
+ "use strict";
2
+ /**
3
+ * `pagci.listen()` — Local webhook listener for development.
4
+ *
5
+ * Starts a local HTTP server, creates a public tunnel (localtunnel),
6
+ * and returns the tunnel URL. Use it as `overwrite_webhook_url` when
7
+ * creating payments — webhooks will arrive at your local server.
8
+ *
9
+ * Usage:
10
+ * const session = await listen('api_key', { port: 3000 });
11
+ * console.log(session.url); // https://xyz.loca.lt
12
+ *
13
+ * CLI:
14
+ * npx @pagci/node listen --port 3000
15
+ *
16
+ * Requires `localtunnel` as optional peer dependency:
17
+ * npm install localtunnel
18
+ */
19
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ var desc = Object.getOwnPropertyDescriptor(m, k);
22
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
23
+ desc = { enumerable: true, get: function() { return m[k]; } };
24
+ }
25
+ Object.defineProperty(o, k2, desc);
26
+ }) : (function(o, m, k, k2) {
27
+ if (k2 === undefined) k2 = k;
28
+ o[k2] = m[k];
29
+ }));
30
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
31
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
32
+ }) : function(o, v) {
33
+ o["default"] = v;
34
+ });
35
+ var __importStar = (this && this.__importStar) || (function () {
36
+ var ownKeys = function(o) {
37
+ ownKeys = Object.getOwnPropertyNames || function (o) {
38
+ var ar = [];
39
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40
+ return ar;
41
+ };
42
+ return ownKeys(o);
43
+ };
44
+ return function (mod) {
45
+ if (mod && mod.__esModule) return mod;
46
+ var result = {};
47
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
48
+ __setModuleDefault(result, mod);
49
+ return result;
50
+ };
51
+ })();
52
+ Object.defineProperty(exports, "__esModule", { value: true });
53
+ exports.printQR = printQR;
54
+ exports.listen = listen;
55
+ const http = __importStar(require("node:http"));
56
+ // ── ANSI Colors (zero deps) ─────────────────────────────────────────
57
+ const c = {
58
+ reset: '\x1b[0m',
59
+ bold: '\x1b[1m',
60
+ dim: '\x1b[2m',
61
+ green: '\x1b[32m',
62
+ red: '\x1b[31m',
63
+ yellow: '\x1b[33m',
64
+ cyan: '\x1b[36m',
65
+ gray: '\x1b[90m',
66
+ white: '\x1b[37m',
67
+ };
68
+ // ── Pretty Output ────────────────────────────────────────────────────
69
+ function printBanner(url, port, provider) {
70
+ const line = '─'.repeat(56);
71
+ console.log();
72
+ console.log(` ${c.cyan}${c.bold}⚡ PAGCI${c.reset} ${c.dim}Webhook Listener${c.reset}`);
73
+ console.log(` ${c.gray}${line}${c.reset}`);
74
+ console.log(` ${c.gray}Tunnel${c.reset} ${c.white}${url}${c.reset}`);
75
+ console.log(` ${c.gray}Forward${c.reset} ${c.white}http://localhost:${port}${c.reset}`);
76
+ console.log(` ${c.gray}Provider${c.reset} ${c.white}${provider}${c.reset}`);
77
+ console.log(` ${c.gray}Status${c.reset} ${c.green}● Ready${c.reset}`);
78
+ console.log(` ${c.gray}${line}${c.reset}`);
79
+ console.log();
80
+ console.log(` ${c.dim}Use this URL as overwrite_webhook_url when creating payments.${c.reset}`);
81
+ console.log(` ${c.dim}Press Ctrl+C to stop.${c.reset}`);
82
+ console.log();
83
+ }
84
+ function printEvent(event, resourceId, status, ms) {
85
+ const time = new Date().toISOString().slice(11, 19);
86
+ const eventPadded = event.padEnd(24);
87
+ const eventColor = event.includes('failed') || event.includes('dispute')
88
+ ? c.red
89
+ : event.includes('confirmed') || event.includes('settled') || event.includes('completed')
90
+ ? c.green
91
+ : c.yellow;
92
+ const statusStr = status >= 200 && status < 300
93
+ ? `${c.green}${status}${c.reset}`
94
+ : `${c.red}${status}${c.reset}`;
95
+ const id = resourceId ? `${c.dim}${resourceId.slice(0, 20)}${c.reset}` : '';
96
+ console.log(` ${c.gray}${time}${c.reset} ${eventColor}→${c.reset} ${c.bold}${eventPadded}${c.reset} ${id} ${statusStr} ${c.dim}${ms}ms${c.reset}`);
97
+ }
98
+ function printVerbose(raw, headers) {
99
+ // Headers
100
+ const relevantHeaders = ['x-webhook-signature', 'x-webhook-timestamp', 'x-webhook-id', 'x-webhook-event', 'content-type'];
101
+ const headerEntries = Object.entries(headers)
102
+ .filter(([k]) => relevantHeaders.includes(k.toLowerCase()))
103
+ .sort(([a], [b]) => a.localeCompare(b));
104
+ if (headerEntries.length > 0) {
105
+ console.log(` ${c.gray}┌─ Headers${c.reset}`);
106
+ for (const [key, val] of headerEntries) {
107
+ const value = Array.isArray(val) ? val.join(', ') : val ?? '';
108
+ console.log(` ${c.gray}│${c.reset} ${c.cyan}${key}${c.reset}: ${c.dim}${value}${c.reset}`);
109
+ }
110
+ console.log(` ${c.gray}│${c.reset}`);
111
+ }
112
+ // Body (pretty JSON, indented)
113
+ try {
114
+ const parsed = JSON.parse(raw);
115
+ const pretty = JSON.stringify(parsed, null, 2);
116
+ const lines = pretty.split('\n');
117
+ console.log(` ${c.gray}├─ Body${c.reset}`);
118
+ for (const line of lines) {
119
+ console.log(` ${c.gray}│${c.reset} ${c.dim}${line}${c.reset}`);
120
+ }
121
+ console.log(` ${c.gray}└──${c.reset}`);
122
+ }
123
+ catch {
124
+ console.log(` ${c.gray}├─ Body (raw)${c.reset}`);
125
+ console.log(` ${c.gray}│${c.reset} ${c.dim}${raw.slice(0, 500)}${c.reset}`);
126
+ console.log(` ${c.gray}└──${c.reset}`);
127
+ }
128
+ console.log();
129
+ }
130
+ /**
131
+ * Print a QR code in the terminal (requires optional qrcode-terminal package).
132
+ * Falls back to a hint message if not installed.
133
+ */
134
+ async function printQR(text) {
135
+ try {
136
+ const qrt = await Promise.resolve(`${'qrcode-terminal'}`).then(s => __importStar(require(s)));
137
+ const generate = (qrt.default?.generate ?? qrt.generate);
138
+ await new Promise((resolve) => {
139
+ generate(text, { small: true }, (code) => {
140
+ const indented = code.split('\n').map((l) => ` ${l}`).join('\n');
141
+ console.log(indented);
142
+ resolve();
143
+ });
144
+ });
145
+ }
146
+ catch {
147
+ console.log(` ${c.dim}(npm i qrcode-terminal para QR no terminal)${c.reset}`);
148
+ }
149
+ }
150
+ // ── Tunnel providers (tried in order of ease of install) ─────────────
151
+ const node_child_process_1 = require("node:child_process");
152
+ /**
153
+ * Tries tunnel providers in order:
154
+ * 1. localtunnel — npm install localtunnel (easiest, no binary)
155
+ * 2. cloudflared — quick tunnel, no account needed (most reliable)
156
+ * 3. ngrok — requires free account + authtoken
157
+ *
158
+ * Uses whichever is available first.
159
+ */
160
+ async function createTunnel(port, silent) {
161
+ // 1. localtunnel (npm package — easiest to install)
162
+ const lt = await tryLocaltunnel(port);
163
+ if (lt) {
164
+ if (!silent)
165
+ printProvider('localtunnel');
166
+ return lt;
167
+ }
168
+ // 2. cloudflared (binary — most reliable)
169
+ const cf = await tryCloudflared(port);
170
+ if (cf) {
171
+ if (!silent)
172
+ printProvider('cloudflared');
173
+ return cf;
174
+ }
175
+ // 3. ngrok (binary — requires account)
176
+ const ng = await tryNgrok(port);
177
+ if (ng) {
178
+ if (!silent)
179
+ printProvider('ngrok');
180
+ return ng;
181
+ }
182
+ throw new Error(`No tunnel provider found. Install one:\n\n` +
183
+ ` ${c.bold}Option 1 — localtunnel${c.reset} ${c.dim}(easiest, no binary)${c.reset}\n` +
184
+ ` npm install localtunnel\n\n` +
185
+ ` ${c.bold}Option 2 — cloudflared${c.reset} ${c.dim}(most reliable, no account)${c.reset}\n` +
186
+ ` brew install cloudflared ${c.dim}# macOS${c.reset}\n` +
187
+ ` choco install cloudflared ${c.dim}# Windows${c.reset}\n` +
188
+ ` sudo apt install cloudflared ${c.dim}# Debian/Ubuntu${c.reset}\n\n` +
189
+ ` ${c.bold}Option 3 — ngrok${c.reset} ${c.dim}(requires free account)${c.reset}\n` +
190
+ ` brew install ngrok ${c.dim}# macOS${c.reset}\n` +
191
+ ` choco install ngrok ${c.dim}# Windows${c.reset}\n` +
192
+ ` snap install ngrok ${c.dim}# Linux${c.reset}\n` +
193
+ ` ngrok config add-authtoken <token>${c.dim}# one-time setup${c.reset}\n`);
194
+ }
195
+ function printProvider(name) {
196
+ console.log(` ${c.gray}Provider${c.reset} ${c.white}${name}${c.reset}`);
197
+ }
198
+ // ── Provider: localtunnel ────────────────────────────────────────────
199
+ async function tryLocaltunnel(port) {
200
+ try {
201
+ const ltModule = await Promise.resolve(`${'localtunnel'}`).then(s => __importStar(require(s)));
202
+ const lt = ltModule.default ?? ltModule;
203
+ const tunnel = await lt({ port });
204
+ return {
205
+ url: tunnel.url,
206
+ provider: 'localtunnel',
207
+ close: () => new Promise((r) => { tunnel.close(); r(); }),
208
+ };
209
+ }
210
+ catch {
211
+ return null;
212
+ }
213
+ }
214
+ // ── Provider: cloudflared ────────────────────────────────────────────
215
+ async function tryCloudflared(port) {
216
+ // Check if cloudflared binary exists
217
+ try {
218
+ (0, node_child_process_1.execSync)('cloudflared --version', { stdio: 'ignore' });
219
+ }
220
+ catch {
221
+ return null;
222
+ }
223
+ return new Promise((resolve) => {
224
+ const proc = (0, node_child_process_1.spawn)('cloudflared', ['tunnel', '--url', `http://localhost:${port}`, '--no-autoupdate'], { stdio: ['ignore', 'pipe', 'pipe'] });
225
+ let resolved = false;
226
+ const timeout = setTimeout(() => {
227
+ if (!resolved) {
228
+ resolved = true;
229
+ proc.kill();
230
+ resolve(null);
231
+ }
232
+ }, 15_000);
233
+ const onData = (chunk) => {
234
+ const line = chunk.toString();
235
+ // cloudflared prints the URL to stderr like: "... https://xxx.trycloudflare.com ..."
236
+ const match = /https:\/\/[a-z0-9-]+\.trycloudflare\.com/i.exec(line);
237
+ if (match && !resolved) {
238
+ resolved = true;
239
+ clearTimeout(timeout);
240
+ resolve({
241
+ url: match[0],
242
+ provider: 'cloudflared',
243
+ close: () => new Promise((r) => { proc.kill(); proc.on('close', () => r()); }),
244
+ });
245
+ }
246
+ };
247
+ proc.stdout?.on('data', onData);
248
+ proc.stderr?.on('data', onData);
249
+ proc.on('error', () => { if (!resolved) {
250
+ resolved = true;
251
+ clearTimeout(timeout);
252
+ resolve(null);
253
+ } });
254
+ proc.on('close', () => { if (!resolved) {
255
+ resolved = true;
256
+ clearTimeout(timeout);
257
+ resolve(null);
258
+ } });
259
+ });
260
+ }
261
+ // ── Provider: ngrok ──────────────────────────────────────────────────
262
+ async function tryNgrok(port) {
263
+ try {
264
+ (0, node_child_process_1.execSync)('ngrok version', { stdio: 'ignore' });
265
+ }
266
+ catch {
267
+ return null;
268
+ }
269
+ return new Promise((resolve) => {
270
+ const proc = (0, node_child_process_1.spawn)('ngrok', ['http', String(port), '--log', 'stdout', '--log-format', 'json'], { stdio: ['ignore', 'pipe', 'pipe'] });
271
+ let resolved = false;
272
+ const timeout = setTimeout(() => {
273
+ if (!resolved) {
274
+ resolved = true;
275
+ proc.kill();
276
+ resolve(null);
277
+ }
278
+ }, 15_000);
279
+ proc.stdout?.on('data', (chunk) => {
280
+ const line = chunk.toString();
281
+ // ngrok JSON logs contain "url":"https://xxx.ngrok-free.app"
282
+ const match = /"url":"(https:\/\/[^"]+)"/.exec(line);
283
+ if (match?.[1] && !resolved) {
284
+ resolved = true;
285
+ clearTimeout(timeout);
286
+ resolve({
287
+ url: match[1],
288
+ provider: 'ngrok',
289
+ close: () => new Promise((r) => { proc.kill(); proc.on('close', () => r()); }),
290
+ });
291
+ }
292
+ });
293
+ proc.on('error', () => { if (!resolved) {
294
+ resolved = true;
295
+ clearTimeout(timeout);
296
+ resolve(null);
297
+ } });
298
+ proc.on('close', () => { if (!resolved) {
299
+ resolved = true;
300
+ clearTimeout(timeout);
301
+ resolve(null);
302
+ } });
303
+ });
304
+ }
305
+ // ── Local HTTP Server ────────────────────────────────────────────────
306
+ function startServer(port, onRequest) {
307
+ const server = http.createServer((req, res) => {
308
+ if (req.method !== 'POST') {
309
+ res.writeHead(405).end();
310
+ return;
311
+ }
312
+ const chunks = [];
313
+ req.on('data', (chunk) => chunks.push(chunk));
314
+ req.on('end', () => {
315
+ const body = Buffer.concat(chunks).toString('utf8');
316
+ const status = onRequest(body, req.headers);
317
+ res.writeHead(status, { 'Content-Type': 'application/json' });
318
+ res.end(JSON.stringify({ received: true }));
319
+ });
320
+ });
321
+ server.listen(port);
322
+ return server;
323
+ }
324
+ // ── Main ─────────────────────────────────────────────────────────────
325
+ async function listen(_apiKey, options = {}) {
326
+ const port = options.port ?? 4400;
327
+ const { onEvent, silent = false, verbose = false } = options;
328
+ // Start local HTTP server to receive webhook POSTs
329
+ const server = startServer(port, (body, headers) => {
330
+ const start = Date.now();
331
+ try {
332
+ const payload = JSON.parse(body);
333
+ payload.raw = body;
334
+ payload.headers = headers;
335
+ onEvent?.(payload);
336
+ const resourceId = payload.data?.['id'] ?? '';
337
+ const ms = Date.now() - start;
338
+ if (!silent) {
339
+ printEvent(payload.event, resourceId, 200, ms);
340
+ if (verbose) {
341
+ printVerbose(body, headers);
342
+ }
343
+ }
344
+ return 200;
345
+ }
346
+ catch {
347
+ if (!silent) {
348
+ console.log(` ${c.red}✗${c.reset} ${c.dim}Failed to parse webhook body${c.reset}`);
349
+ }
350
+ return 400;
351
+ }
352
+ });
353
+ // Create public tunnel
354
+ const tunnel = await createTunnel(port, silent);
355
+ if (!silent) {
356
+ printBanner(tunnel.url, port, tunnel.provider);
357
+ }
358
+ return {
359
+ url: tunnel.url,
360
+ port,
361
+ close: async () => {
362
+ await tunnel.close();
363
+ await new Promise((resolve) => server.close(() => resolve()));
364
+ if (!silent) {
365
+ console.log();
366
+ console.log(` ${c.dim}Listener stopped.${c.reset}`);
367
+ console.log();
368
+ }
369
+ },
370
+ };
371
+ }
372
+ //# sourceMappingURL=listen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listen.js","sourceRoot":"","sources":["../../src/listen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * PAGCI CLI — Local webhook testing.
4
+ *
5
+ * Usage:
6
+ * npx @pagci/node listen Listen for webhooks
7
+ * npx @pagci/node listen --test + create test payment + QR code
8
+ * npx @pagci/node listen --test --verbose + full headers & JSON
9
+ * npx @pagci/node listen --port 3000 --test --verbose Custom port
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * PAGCI CLI — Local webhook testing.
4
+ *
5
+ * Usage:
6
+ * npx @pagci/node listen Listen for webhooks
7
+ * npx @pagci/node listen --test + create test payment + QR code
8
+ * npx @pagci/node listen --test --verbose + full headers & JSON
9
+ * npx @pagci/node listen --port 3000 --test --verbose Custom port
10
+ */
11
+ import { Pagci } from './client.js';
12
+ import { listen, printQR } from './listen.js';
13
+ const c = {
14
+ reset: '\x1b[0m',
15
+ bold: '\x1b[1m',
16
+ dim: '\x1b[2m',
17
+ cyan: '\x1b[36m',
18
+ green: '\x1b[32m',
19
+ red: '\x1b[31m',
20
+ gray: '\x1b[90m',
21
+ };
22
+ function printHelp() {
23
+ console.log();
24
+ console.log(` ${c.cyan}${c.bold}⚡ PAGCI CLI${c.reset}`);
25
+ console.log();
26
+ console.log(` ${c.bold}Usage${c.reset}`);
27
+ console.log(` ${c.dim}npx @pagci/node listen${c.reset} Listen for webhooks`);
28
+ console.log(` ${c.dim}npx @pagci/node listen --test${c.reset} + create payment + QR`);
29
+ console.log(` ${c.dim}npx @pagci/node listen --test --verbose${c.reset} + headers & JSON`);
30
+ console.log(` ${c.dim}npx @pagci/node listen --port 3000 --test${c.reset} Custom port`);
31
+ console.log();
32
+ console.log(` ${c.bold}Options${c.reset}`);
33
+ console.log(` --port <n> Port to listen on (default: 4400)`);
34
+ console.log(` --key <key> API key (or set PAGCI_API_KEY)`);
35
+ console.log(` --test Create a test payment and show PIX QR code`);
36
+ console.log(` --verbose Show full webhook headers and JSON body`);
37
+ console.log(` --wallet <id> Wallet ID for test payment (default: first available)`);
38
+ console.log();
39
+ }
40
+ const FLAGS_WITHOUT_VALUE = new Set(['verbose', 'test']);
41
+ function parseArgs(args) {
42
+ const result = {};
43
+ for (let i = 0; i < args.length; i++) {
44
+ const arg = args[i];
45
+ if (arg.startsWith('--')) {
46
+ const key = arg.slice(2);
47
+ if (FLAGS_WITHOUT_VALUE.has(key)) {
48
+ result[key] = 'true';
49
+ }
50
+ else if (i + 1 < args.length) {
51
+ result[key] = args[++i];
52
+ }
53
+ }
54
+ else {
55
+ result['_command'] = arg;
56
+ }
57
+ }
58
+ return result;
59
+ }
60
+ async function main() {
61
+ const args = parseArgs(process.argv.slice(2));
62
+ if (!args['_command'] || args['_command'] === 'help') {
63
+ printHelp();
64
+ return;
65
+ }
66
+ if (args['_command'] !== 'listen') {
67
+ console.log(` ${c.red}Unknown command: ${args['_command']}${c.reset}`);
68
+ printHelp();
69
+ process.exit(1);
70
+ }
71
+ const apiKey = args['key'] ?? process.env['PAGCI_API_KEY'] ?? '';
72
+ if (!apiKey) {
73
+ console.log();
74
+ console.log(` ${c.red}${c.bold}✗${c.reset} ${c.red}Missing API key.${c.reset}`);
75
+ console.log(` ${c.dim}Set PAGCI_API_KEY env or use --key <key>${c.reset}`);
76
+ console.log();
77
+ process.exit(1);
78
+ }
79
+ const port = args['port'] ? parseInt(args['port'], 10) : undefined;
80
+ const verbose = 'verbose' in args;
81
+ const testMode = 'test' in args;
82
+ // Start listener
83
+ const session = await listen(apiKey, { port, verbose });
84
+ // If --test, create a payment and show QR
85
+ if (testMode) {
86
+ const pagci = new Pagci(apiKey);
87
+ const walletId = args['wallet'] ?? 'icaro';
88
+ console.log(` ${c.dim}Creating test payment (R$ 0,01)...${c.reset}`);
89
+ console.log();
90
+ try {
91
+ const payment = await pagci.payments.create({
92
+ owner: { wallet_id: walletId },
93
+ customer: { id: 'cli_test', document: '12345678900' },
94
+ items: [{ name: 'CLI Test', id: 'cli_1', value: 1 }],
95
+ recipients: [{ wallet_id: walletId, amount: 1 }],
96
+ config: { overwrite_webhook_url: session.url },
97
+ });
98
+ console.log(` ${c.green}${c.bold}✓${c.reset} Payment ${c.bold}${payment.id}${c.reset} R$ ${(payment.pix_total / 100).toFixed(2)}`);
99
+ console.log();
100
+ const pixQR = payment.liquidator?.pix_qr;
101
+ if (pixQR) {
102
+ await printQR(pixQR);
103
+ console.log(` ${c.gray}PIX copia e cola:${c.reset}`);
104
+ console.log(` ${c.dim}${pixQR}${c.reset}`);
105
+ console.log();
106
+ }
107
+ console.log(` ${c.dim}Pay the PIX above. Webhook will appear here when confirmed.${c.reset}`);
108
+ console.log();
109
+ }
110
+ catch (err) {
111
+ const msg = err instanceof Error ? err.message : String(err);
112
+ console.log(` ${c.red}✗ Failed to create payment: ${msg}${c.reset}`);
113
+ console.log(` ${c.dim}Listener is still running — send webhooks to ${session.url}${c.reset}`);
114
+ console.log();
115
+ }
116
+ }
117
+ // Keep alive until Ctrl+C
118
+ const shutdown = async () => {
119
+ await session.close();
120
+ process.exit(0);
121
+ };
122
+ process.on('SIGINT', () => void shutdown());
123
+ process.on('SIGTERM', () => void shutdown());
124
+ }
125
+ main().catch((err) => {
126
+ console.error(` ${c.red}${err.message}${c.reset}`);
127
+ process.exit(1);
128
+ });
129
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -14,14 +14,53 @@ export interface PagciConfig {
14
14
  /** Custom HTTP agent (e.g. for proxies or custom TLS). */
15
15
  httpAgent?: unknown;
16
16
  }
17
- export interface WebhookEvent {
18
- /** Verified, parsed webhook payload. */
19
- payload: unknown;
20
- /** Signature header value. */
17
+ import type { Payment } from './types/payment.js';
18
+ import type { Withdrawal } from './types/withdrawal.js';
19
+ import type { Balance } from './types/balance.js';
20
+ interface WebhookEventBase {
21
+ /** HMAC signature that was verified. */
21
22
  signature: string;
22
- /** Timestamp from the webhook header. */
23
+ /** Unix timestamp from the webhook header. */
23
24
  timestamp: string;
25
+ /** Per-wallet balances at time of event. */
26
+ balances?: Record<string, Balance>;
27
+ /** Account-level total balance. */
28
+ account_balance?: Balance;
24
29
  }
30
+ export interface PaymentConfirmedEvent extends WebhookEventBase {
31
+ type: 'payment.confirmed';
32
+ data: Payment;
33
+ }
34
+ export interface PaymentFailedEvent extends WebhookEventBase {
35
+ type: 'payment.failed';
36
+ data: Payment;
37
+ }
38
+ export interface PaymentCancelledEvent extends WebhookEventBase {
39
+ type: 'payment.cancelled';
40
+ data: Payment;
41
+ }
42
+ export interface PaymentExpiredEvent extends WebhookEventBase {
43
+ type: 'payment.expired';
44
+ data: Payment;
45
+ }
46
+ export interface PaymentDisputeEvent extends WebhookEventBase {
47
+ type: 'payment.dispute';
48
+ data: Payment;
49
+ }
50
+ export interface WithdrawalSettledEvent extends WebhookEventBase {
51
+ type: 'withdrawal.settled';
52
+ data: Withdrawal;
53
+ }
54
+ export interface WithdrawalFailedEvent extends WebhookEventBase {
55
+ type: 'withdrawal.failed';
56
+ data: Withdrawal;
57
+ }
58
+ export interface RefundCompletedEvent extends WebhookEventBase {
59
+ type: 'refund.completed';
60
+ data: unknown;
61
+ }
62
+ /** Discriminated union of all webhook events. Switch on `event.type` for type narrowing. */
63
+ export type WebhookEvent = PaymentConfirmedEvent | PaymentFailedEvent | PaymentCancelledEvent | PaymentExpiredEvent | PaymentDisputeEvent | WithdrawalSettledEvent | WithdrawalFailedEvent | RefundCompletedEvent;
25
64
  /**
26
65
  * Main entry point for the PAGCI Node.js SDK.
27
66
  *
@@ -62,4 +101,5 @@ export declare class Pagci {
62
101
  };
63
102
  constructor(apiKey: string, config?: PagciConfig);
64
103
  }
104
+ export {};
65
105
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAIvD,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAID,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,SAAS,EAAE,MAAM,CAAC;CACnB;AAOD;;;;;;;GAOG;AACH,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IAIzC,OAAO,CAAC,SAAS,CAAC,CAAmB;IACrC,IAAI,QAAQ,IAAI,gBAAgB,CAE/B;IAED,OAAO,CAAC,YAAY,CAAC,CAAsB;IAC3C,IAAI,WAAW,IAAI,mBAAmB,CAErC;IAED,OAAO,CAAC,MAAM,CAAC,CAAgB;IAC/B,IAAI,KAAK,IAAI,aAAa,CAEzB;IAED,OAAO,CAAC,QAAQ,CAAC,CAAkB;IACnC,IAAI,OAAO,IAAI,eAAe,CAE7B;IAED,OAAO,CAAC,iBAAiB,CAAC,CAA2B;IACrD,IAAI,gBAAgB,IAAI,wBAAwB,CAI/C;IAED,OAAO,CAAC,OAAO,CAAC,CAAiB;IACjC,IAAI,MAAM,IAAI,cAAc,CAE3B;IAID,IAAI,QAAQ;QAIR;;;;;;;WAOG;gCAEQ,MAAM,aACJ,MAAM,UACT,MAAM,uBAEb,YAAY;QAIf;;WAEG;qCAEQ,MAAM,aACJ,MAAM,UACT,MAAM,uBAEb,OAAO,CAAC,YAAY,CAAC;MA0B3B;gBAIW,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW;CAwBjD"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -77,8 +77,12 @@ export class Pagci {
77
77
  if (!crypto.timingSafeEqual(sig, expectedSig)) {
78
78
  throw new SignatureVerificationError('Webhook signature verification failed');
79
79
  }
80
+ const envelope = JSON.parse(rawBody);
80
81
  return {
81
- payload: JSON.parse(rawBody),
82
+ type: envelope.event,
83
+ data: envelope.data,
84
+ balances: envelope.balances,
85
+ account_balance: envelope.account_balance,
82
86
  signature: sig,
83
87
  timestamp,
84
88
  };
@@ -136,8 +140,12 @@ function verifyAndParse(crypto, rawBody, signatureHeader, secret, tolerance) {
136
140
  if (!crypto.timingSafeEqual(sig, expectedSig)) {
137
141
  throw new SignatureVerificationError('Webhook signature verification failed');
138
142
  }
143
+ const envelope = JSON.parse(rawBody);
139
144
  return {
140
- payload: JSON.parse(rawBody),
145
+ type: envelope.event,
146
+ data: envelope.data,
147
+ balances: envelope.balances,
148
+ account_balance: envelope.account_balance,
141
149
  signature: sig,
142
150
  timestamp,
143
151
  };