@paykit-sdk/core
Version:
The Payment Toolkit for Typescript
78 lines (75 loc) • 2 kB
JavaScript
// 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 };