commerce/lib/sfcc/utils.ts
Alex 83856a4941 Squashed commit of the following:
commit 408d6eb7583470eb84fd0e85895f97dad864b981
Author: Alex <alex.hawley@vercel.com>
Date:   Wed Sep 4 21:28:45 2024 -0500

    added content

commit af62089872de543c8f741c3092f431a8b790feec
Author: Alex <alex.hawley@vercel.com>
Date:   Wed Sep 4 20:43:02 2024 -0500

    fixed product recommendations

commit 5c921be7b1eab4ea3b4acc922d2bde842bb0c5c8
Author: Alex <alex.hawley@vercel.com>
Date:   Wed Sep 4 20:33:28 2024 -0500

    fixed cart total

commit 63e150e822ab0b4f7690221ee5d1eafaaf5f930a
Author: Alex <alex.hawley@vercel.com>
Date:   Wed Sep 4 20:14:47 2024 -0500

    fixed update cart

commit 85bd6bee403e19c7b3f66c0d6e938a8432cee62b
Author: Alex <alex.hawley@vercel.com>
Date:   Wed Sep 4 19:00:42 2024 -0500

    remove unnecessary cookie usage from sfcc calls

commit 2401bed81143508993fdd403d9d5a419ac8904e5
Author: Alex <alex.hawley@vercel.com>
Date:   Wed Sep 4 18:55:39 2024 -0500

    fixed issue with broken getCart

commit f8cc8c3c3c1c64d7cf4b69a60ed87497ad626e65
Author: Alex <alex.hawley@vercel.com>
Date:   Wed Sep 4 18:23:03 2024 -0500

    updated lib/sfcc for guest tokens

commit bd6129e3ca15125c87c8186e9ff27d835fb2f683
Author: Alex <alex.hawley@vercel.com>
Date:   Wed Sep 4 15:19:40 2024 -0500

    added now required channel_id

commit eeb805fd11219d8512c1cadefe047019d63d4b60
Author: Alex <alex.hawley@vercel.com>
Date:   Tue Sep 3 17:43:27 2024 -0500

    split out scapi

commit e4f3bb1c827137245367152c1ff0401db76e7082
Author: Alex <alex.hawley@vercel.com>
Date:   Tue Sep 3 16:55:11 2024 -0500

    carried over sfcc work

commit 2616869f56f330f44ad3dfff9ad488eaaf1dbe51
Author: Alex <alex.hawley@vercel.com>
Date:   Thu Aug 22 15:03:30 2024 -0400

    initial sfcc work
2024-09-04 21:47:12 -05:00

90 lines
2.0 KiB
TypeScript

import { isSFCCError } from './type-guards';
export type ExtractVariables<T> = T extends { variables: object } ? T['variables'] : never;
export async function salesforceFetch<T>({
method,
cache = 'force-cache',
headers,
tags,
variables,
apiEndpoint
}: {
method: 'POST' | 'GET';
apiEndpoint: string;
cache?: RequestCache;
headers?: HeadersInit;
tags?: string[];
variables?: ExtractVariables<T>;
}): Promise<{ status: number; body: T } | never> {
try {
const fetchOptions: RequestInit = {
method,
headers: {
'Content-Type': 'application/json',
...headers
},
cache,
...(tags && { next: { tags } })
};
if (method === 'POST' && variables) {
fetchOptions.body = JSON.stringify({ variables });
}
const res = await fetch(apiEndpoint, fetchOptions);
const body = await res.json();
if (body.errors) {
throw body.errors[0];
}
return {
status: res.status,
body
};
} catch (e) {
if (isSFCCError(e)) {
throw {
version: e._v || 'unknown',
fault: e?.fault || {},
apiEndpoint
};
}
throw {
error: e
};
}
}
export const validateEnvironmentVariables = () => {
const requiredEnvironmentVariables = [
'SITE_NAME',
'SFCC_CLIENT_ID',
'SFCC_ORGANIZATIONID',
'SFCC_SECRET',
'SFCC_SHORTCODE',
'SFCC_SITEID',
'SFCC_SANDBOX_DOMAIN',
'SFCC_OPENCOMMERCE_SHOP_API_ENDPOINT',
'SFCC_REVALIDATION_SECRET'
];
const missingEnvironmentVariables = [] as string[];
requiredEnvironmentVariables.forEach((envVar) => {
if (!process.env[envVar]) {
missingEnvironmentVariables.push(envVar);
}
});
if (missingEnvironmentVariables.length) {
throw new Error(
`The following environment variables are missing. Your site will not work without them. Read more: https://vercel.com/docs/integrations/salesforce-commerce-cloud#configure-environment-variables\n\n${missingEnvironmentVariables.join(
'\n'
)}\n`
);
}
};