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
JavaScript
;
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;