nodejs-cryptomus
Version:
A comprehensive Node.js client for the Cryptomus API
60 lines (59 loc) • 2.05 kB
JavaScript
import { verifyWebhookSignature } from '../utils/signature';
/**
* Webhook service for handling and validating webhooks
*/
export class WebhookService {
/**
* Create a new webhook service
*
* @param apiKey - API key for signature verification
*/
constructor(apiKey) {
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, signature) {
if (!verifyWebhookSignature(payload, signature, this.apiKey)) {
throw new Error('Invalid webhook signature');
}
const parsedPayload = JSON.parse(payload);
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, signature) {
const parsedPayload = this.parseWebhook(payload, signature);
if (parsedPayload.type !== 'payment') {
throw new Error('Invalid webhook type, expected payment webhook');
}
return parsedPayload;
}
/**
* 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, signature) {
const parsedPayload = this.parseWebhook(payload, signature);
if (parsedPayload.type !== 'payout') {
throw new Error('Invalid webhook type, expected payout webhook');
}
return parsedPayload;
}
}