@commercelayer/sdk-utils
Version:
Commerce Layer Javascript SDK Utils library
233 lines (228 loc) • 7.05 kB
JavaScript
;
var chunkOGEPN5MT_cjs = require('./chunk-OGEPN5MT.cjs');
var sdk = require('@commercelayer/sdk');
var crypto = require('crypto');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var crypto__default = /*#__PURE__*/_interopDefault(crypto);
var checkPayload = (payload) => {
let resource;
try {
resource = JSON.parse(payload);
} catch (error) {
throw new Error(`Error parsing payload [${error.message}]`);
}
if (!sdk.CommerceLayerStatic.resources().includes(resource.data?.type)) throw new Error(`Invalid resource type [${resource.data?.type}]`);
return resource;
};
var denormalizePayload = (payload) => {
let denormalized;
const resource = checkPayload(payload);
if (resource.links) delete resource.links;
const data = resource.data;
const included = resource.included;
if (!data) denormalized = data;
else {
if (Array.isArray(data)) denormalized = data.map((res) => denormalizeResource(res, included));
else denormalized = denormalizeResource(data, included);
}
return denormalized;
};
var findIncluded = (rel, included = []) => {
const inc = included.find((inc2) => {
return rel.id === inc2.id && rel.type === inc2.type;
});
return inc || rel;
};
var denormalizeResource = (res, included, chain = []) => {
if (!res) return res;
const resource = {
id: res.id,
type: res.type,
...res.attributes
};
if (res.relationships) Object.keys(res.relationships).forEach((key) => {
const rel = res.relationships[key].data;
if (rel) {
if (chain.filter((r) => r.id === rel.id && r.type === rel.type).length >= chunkOGEPN5MT_cjs.config.webhooks.jsonapi.maxResourceIncluded) resource[key] = rel;
if (Array.isArray(rel)) resource[key] = rel.map((r) => denormalizeResource(findIncluded(r, included), included, [...chain, r]));
else resource[key] = denormalizeResource(findIncluded(rel, included), included, [...chain, rel]);
} else if (rel === null) resource[key] = null;
});
return resource;
};
var generateHMAC = (payload, sharedSecret) => {
const { algorithm, digest } = chunkOGEPN5MT_cjs.config.webhooks.signature;
return crypto__default.default.createHmac(algorithm, sharedSecret).update(payload).digest(digest);
};
var checkSignature = (body, headers, secret) => {
const status = {
ok: false
};
try {
const topic = typeof headers === "string" ? void 0 : headers[chunkOGEPN5MT_cjs.config.webhooks.topic];
const signature = typeof headers === "string" ? headers : headers[chunkOGEPN5MT_cjs.config.webhooks.signature.header];
if (!secret) return { ...status, message: "Missing shared secret" };
if (!signature) return { ...status, message: "Missing webhook signature" };
const hash = generateHMAC(body, secret);
status.topic = topic;
if (signature === hash) {
status.ok = true;
status.message = "Signature successfully checked";
} else status.message = "Payload signature verification failed";
} catch (err) {
status.ok = false;
status.message = err.message;
}
return status;
};
var ParseError = class extends Error {
constructor(message) {
super(message);
this.name = "ParseError";
}
};
var parse = (payload, type) => {
try {
const res = denormalizePayload(payload);
const resType = res.type;
if (resType !== type) throw new ParseError(`Invalid resource type [${resType}]`);
return res;
} catch (error) {
throw new ParseError(`Payload parse error [${error.message}]`);
}
};
var parsers = {
addresses(payload) {
return parse(payload, "addresses");
},
authorizations(payload) {
return parse(payload, "authorizations");
},
avalara_accounts(payload) {
return parse(payload, "avalara_accounts");
},
bundles(payload) {
return parse(payload, "bundles");
},
buy_x_pay_y_promotions(payload) {
return parse(payload, "buy_x_pay_y_promotions");
},
captures(payload) {
return parse(payload, "captures");
},
cleanups(payload) {
return parse(payload, "cleanups");
},
coupons(payload) {
return parse(payload, "coupons");
},
customer_addresses(payload) {
return parse(payload, "customer_addresses");
},
customer_password_resets(payload) {
return parse(payload, "customer_password_resets");
},
customer_subscriptions(payload) {
return parse(payload, "customer_subscriptions");
},
customers(payload) {
return parse(payload, "customers");
},
exports(payload) {
return parse(payload, "exports");
},
external_promotions(payload) {
return parse(payload, "external_promotions");
},
fixed_amount_promotions(payload) {
return parse(payload, "fixed_amount_promotions");
},
fixed_price_promotions(payload) {
return parse(payload, "fixed_price_promotions");
},
free_gift_promotions(payload) {
return parse(payload, "free_gift_promotions");
},
free_shipping_promotions(payload) {
return parse(payload, "free_shipping_promotions");
},
gift_cards(payload) {
return parse(payload, "gift_cards");
},
imports(payload) {
return parse(payload, "imports");
},
in_stock_subscriptions(payload) {
return parse(payload, "in_stock_subscriptions");
},
line_items(payload) {
return parse(payload, "line_items");
},
line_items_options(payload) {
return parse(payload, "line_items_options");
},
orders(payload) {
return parse(payload, "orders");
},
order_copies(payload) {
return parse(payload, "order_copies");
},
order_subscriptions(payload) {
return parse(payload, "order_subscriptions");
},
parcels(payload) {
return parse(payload, "parcels");
},
percentage_discount_promotions(payload) {
return parse(payload, "percentage_discount_promotions");
},
price_frequency_tiers(payload) {
return parse(payload, "price_frequency_tiers");
},
price_volume_tiers(payload) {
return parse(payload, "price_volume_tiers");
},
promotions(payload) {
return parse(payload, "promotions");
},
recurring_order_copies(payload) {
return parse(payload, "recurring_order_copies");
},
refunds(payload) {
return parse(payload, "refunds");
},
returns(payload) {
return parse(payload, "returns");
},
shipments(payload) {
return parse(payload, "shipments");
},
shipping_weight_tiers(payload) {
return parse(payload, "shipping_weight_tiers");
},
skus(payload) {
return parse(payload, "skus");
},
sku_options(payload) {
return parse(payload, "sku_options");
},
stock_transfers(payload) {
return parse(payload, "stock_transfers");
},
transactions(payload) {
return parse(payload, "transactions");
},
voids(payload) {
return parse(payload, "voids");
}
};
var webhooks = {
denormalizePayload,
checkSignature,
parse: parsers
};
exports.checkSignature = checkSignature;
exports.denormalizePayload = denormalizePayload;
exports.webhooks = webhooks;
//# sourceMappingURL=chunk-N2YKKMHB.cjs.map
//# sourceMappingURL=chunk-N2YKKMHB.cjs.map