UNPKG

@paykit-sdk/core

Version:

The Payment Toolkit for Typescript

78 lines (75 loc) 2 kB
// src/error.ts var PayKitError = class extends Error { code; statusCode; provider; method; context; constructor(message, options) { super(message); this.name = this.constructor.name; this.code = options?.code || "PAYKIT_ERROR"; this.statusCode = options?.statusCode || 500; this.provider = options?.provider; this.method = options?.method; this.context = options?.context; if (options?.cause) { this.cause = options.cause; } Error.captureStackTrace(this, this.constructor); } }; var WebhookError = class extends PayKitError { constructor(message, options) { super(message, { code: "WEBHOOK_ERROR", statusCode: 400, provider: options?.provider, context: { provider: options?.provider } }); this.stack = void 0; } }; // src/webhook-provider.ts var Webhook = class { handlers = /* @__PURE__ */ new Map(); config = null; setup(config) { this.config = config; return this; } on(eventType, handler) { if (!this.config) { throw new WebhookError( "Webhook not configured. Call setup() first." ); } const typeStr = eventType; if (!this.handlers.has(typeStr)) { this.handlers.set(typeStr, []); } this.handlers.get(typeStr)?.push(handler); return this; } async handle(dto) { if (!this.config) { throw new WebhookError( "Webhook not configured. Call setup() first." ); } const { webhookSecret, provider } = this.config; const events = await provider.handleWebhook(dto, webhookSecret); const executionPromises = []; for (const event of events) { const matchedHandlers = this.handlers.get(event.type); if (matchedHandlers) { for (const handler of matchedHandlers) { const payload = event.is_raw ? event.data : event; executionPromises.push(handler(payload)); } } } await Promise.all(executionPromises); } }; export { Webhook };