UNPKG

modem-pay

Version:

A TypeScript SDK for integrating with the Modem Pay payment gateway, enabling seamless payment processing and financial services in your applications.

42 lines (41 loc) 1.8 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const crypto_1 = __importDefault(require("crypto")); const base_1 = __importDefault(require("./base")); class WebhooksResource extends base_1.default { constructor(apiKey, maxRetries, timeout) { super(apiKey, maxRetries, timeout); } /** Builds and validates an Event signature based on the provided details. */ composeEventDetails(payload, signature, secret) { const payloadString = typeof payload === "string" ? payload : JSON.stringify(payload); // Generate HMAC-SHA256 hash for comparison const computedSignature = crypto_1.default .createHmac("sha512", secret) .update(payloadString) .digest("hex"); // Check signature length for a quick validation step if (computedSignature.length !== signature.length) { throw new Error("Invalid signature length"); } // Perform timing-safe comparison for added security if (!crypto_1.default.timingSafeEqual(Buffer.from(computedSignature), Buffer.from(signature))) { throw new Error("Invalid signature!"); } // Parse the payload if it's a JSON string let parsedPayload; try { parsedPayload = typeof payload === "string" ? JSON.parse(payload) : payload; } catch (_a) { throw new Error("Invalid Payload!"); } // Return the event object with event type and payload return { event: parsedPayload["event"], payload: parsedPayload["payload"] }; } } exports.default = WebhooksResource;