@scayle/storefront-core
Version:
Collection of essential utilities to work with the Storefront API
61 lines (60 loc) • 2.11 kB
JavaScript
import { HttpStatusCode, HttpStatusMessage } from "../../constants/index.mjs";
import { ErrorResponse } from "../../errors/index.mjs";
import { defineRpcHandler } from "../../utils/index.mjs";
import { encodeBase64, verifyOrderSuccessToken } from "../../utils/hash.mjs";
export const getOrderDataByCbd = defineRpcHandler(
async ({ cbdToken }, context) => {
const payload = await verifyOrderSuccessToken(
cbdToken,
context.checkout.secret
);
if (!payload) {
context.log.warn(
"Unable to verify CBD token. Please check that you configured the correct Checkout Secret"
);
return new ErrorResponse(
HttpStatusCode.BAD_REQUEST,
HttpStatusMessage.BAD_REQUEST,
"Unable to verify CBD token."
);
}
if (context.checkout.cbdExpiration && Math.floor(Date.now() / 1e3) - payload.issued_at > context.checkout.cbdExpiration) {
context.log.warn("Attempting to use expired CBD token");
return new ErrorResponse(
HttpStatusCode.BAD_REQUEST,
HttpStatusMessage.BAD_REQUEST,
"The CBD token has expired."
);
}
const checkoutUrl = context.checkout.url;
const basicAuth = encodeBase64(
`${context.checkout.user}:${context.checkout.token}`
);
const response = await fetch(
`${checkoutUrl}/api/v1/orders/${payload.order_id}`,
{
headers: {
Accept: "application/json",
Authorization: `Basic ${basicAuth}`,
"X-Shop-Id": context.shopId.toString(),
...context.internalAccessHeader ? { "x-internal-access": context.internalAccessHeader } : {}
}
}
);
if (response.ok) {
return await response.json();
}
context.log.error(
`Unexpected status code when fetching order from Checkout API: ${response.status}`
);
return new ErrorResponse(
HttpStatusCode.INTERNAL_SERVER_ERROR,
HttpStatusMessage.INTERNAL_SERVER_ERROR,
"Unknown error",
{
detail: `Fetching order failed with status code ${response.status}`
}
);
},
{ method: "POST" }
);