@banked/node
Version:
Node.js library for the Banked API
51 lines (38 loc) • 1.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _crypto = _interopRequireDefault(require("crypto"));
var _isWithinInterval = _interopRequireDefault(require("date-fns/isWithinInterval"));
var _webhook = _interopRequireDefault(require("../validators/webhook"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const validate = (config = {}) => {
const _webhookValidator = (0, _webhook.default)(config),
value = _webhookValidator.value,
error = _webhookValidator.error;
if (error) {
throw new Error(error);
}
const raw = value.payload_header.split(".");
const payloadTimestamp = raw[0];
const payloadSignature = raw[1];
const toBeSigned = `${payloadTimestamp}.${value.payload}`;
const hmac = _crypto.default.createHmac("sha256", value.signature).update(toBeSigned);
const digest = hmac.digest("hex");
const result = {
isValid: digest === payloadSignature,
localHash: digest,
payloadHash: payloadSignature
};
if (value.time_range) {
const d = parseInt(payloadTimestamp, 10) * 1000;
result.isWithinRange = (0, _isWithinInterval.default)(new Date(d), {
start: new Date(value.time_range.start),
end: new Date(value.time_range.end)
});
}
return result;
};
var _default = validate;
exports.default = _default;