UNPKG

@scayle/storefront-core

Version:

Collection of essential utilities to work with the Storefront API

61 lines (60 loc) 2.11 kB
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" } );