UNPKG

nodejs-cryptomus

Version:

A comprehensive Node.js client for the Cryptomus API

72 lines (61 loc) 2.25 kB
import { WebhookPayload, PaymentWebhookPayload, PayoutWebhookPayload } from '../types'; import { verifyWebhookSignature } from '../utils/signature'; /** * Webhook service for handling and validating webhooks */ export class WebhookService { private readonly apiKey: string; /** * Create a new webhook service * * @param apiKey - API key for signature verification */ constructor(apiKey: string) { this.apiKey = apiKey; } /** * Parse and validate a webhook payload * * @param payload - Raw webhook payload as string * @param signature - Signature from webhook headers * @returns Parsed webhook payload * @throws Error if signature is invalid */ parseWebhook(payload: string, signature: string): WebhookPayload { if (!verifyWebhookSignature(payload, signature, this.apiKey)) { throw new Error('Invalid webhook signature'); } const parsedPayload = JSON.parse(payload) as WebhookPayload; return parsedPayload; } /** * Parse and validate a payment webhook payload * * @param payload - Raw webhook payload as string * @param signature - Signature from webhook headers * @returns Parsed payment webhook payload * @throws Error if signature is invalid or payload type is not payment */ parsePaymentWebhook(payload: string, signature: string): PaymentWebhookPayload { const parsedPayload = this.parseWebhook(payload, signature); if (parsedPayload.type !== 'payment') { throw new Error('Invalid webhook type, expected payment webhook'); } return parsedPayload as PaymentWebhookPayload; } /** * Parse and validate a payout webhook payload * * @param payload - Raw webhook payload as string * @param signature - Signature from webhook headers * @returns Parsed payout webhook payload * @throws Error if signature is invalid or payload type is not payout */ parsePayoutWebhook(payload: string, signature: string): PayoutWebhookPayload { const parsedPayload = this.parseWebhook(payload, signature); if (parsedPayload.type !== 'payout') { throw new Error('Invalid webhook type, expected payout webhook'); } return parsedPayload as PayoutWebhookPayload; } }