Files
platform/apps/api/src/scripts/register-webhooks.ts
T

71 lines
2.3 KiB
TypeScript

import { Printful, PrintfulClient, PrintfulError, Webflow, WebflowClient, WebflowError } from "@blade-and-brawn/commerce";
import { env } from "../util";
const DOMAIN = "dev.api.bladeandbrawn.com";
const PRINTFUL_WEBHOOK_URL = env.NODE_ENV === "development" ?
`http://${DOMAIN}/webhooks/printful?secret=${env.PRINTFUL_WEBHOOK_SECRET}` :
`https://${DOMAIN}/webhooks/printful?secret=${env.PRINTFUL_WEBHOOK_SECRET}`;
// http dosent work for webflow, so cant register properly for development env
const WEBFLOW_WEBHOOK_URL = `https://${DOMAIN}/webhooks/webflow`;
function printError(err: unknown): never {
if (err instanceof WebflowError || err instanceof PrintfulError)
console.error(`${err.message}\n`, JSON.stringify(err.payload, null, 2));
else
console.error(err);
process.exit(1);
}
// Register printful webhook
try {
console.log("Registering printful webhook...");
const printful = new PrintfulClient({
token: env.PRINTFUL_AUTH,
storeId: env.PRINTFUL_STORE_ID,
});
await printful.Webhooks.create(PRINTFUL_WEBHOOK_URL, [
Printful.Webhook.Event.ProductUpdated,
Printful.Webhook.Event.ProductDeleted,
Printful.Webhook.Event.PackageShipped,
]);
const webhook = await printful.Webhooks.get();
console.log("Finished: ");
console.log(webhook);
} catch (err) {
printError(err);
}
// Register webflow webhooks
try {
console.log("Registering webflow webhooks...");
const webflow = new WebflowClient({
siteId: env.WEBFLOW_SITE_ID,
collectionIds: {
products: env.WEBFLOW_COLLECTION_PRODUCTS_ID,
skus: env.WEBFLOW_COLLECTION_SKUS_ID
},
token: env.WEBFLOW_AUTH,
webhookSecret: env.WEBFLOW_WEBHOOK_SECRET,
});
const events: Webflow.Webhook.Event[] = [
Webflow.Webhook.Event.OrderCreated,
];
const webhooksToDelete = await webflow.Webhooks.list({ forceAll: true });
for (const webhook of webhooksToDelete)
await webflow.Webhooks.remove(webhook.id);
for (const event of events)
await webflow.Webhooks.create(WEBFLOW_WEBHOOK_URL, event);
const webhooks = await webflow.Webhooks.list({ forceAll: true });
console.log("Finished: ");
console.log(webhooks);
} catch (err) {
printError(err);
}