Files
deflock/cms/extensions/purge-cf-cache/src/index.js
T
2026-02-13 11:16:10 -07:00

47 lines
1.3 KiB
JavaScript

export default ({ action }, { env }) => {
const { CF_API_KEY, CF_ZONE_ID } = env;
const creds = { CF_API_KEY, CF_ZONE_ID };
action('items.create', async ({ collection, keys }) => {
await purgeCloudflareCache(collection, keys, creds);
});
action('items.update', async ({ collection, keys }) => {
await purgeCloudflareCache(collection, keys, creds);
});
action('items.delete', async ({ collection, keys }) => {
await purgeCloudflareCache(collection, keys, creds);
});
};
async function purgeCloudflareCache(collectionName, ids, creds) {
const baseUrl = `cms.deflock.me/items/${collectionName}`;
const additionalUrls = ids ? ids.map(id => `${baseUrl}/${id}`) : [];
console.log(baseUrl);
console.log(additionalUrls);
const res = await fetch(
`https://api.cloudflare.com/client/v4/zones/${creds.CF_ZONE_ID}/purge_cache`,
{
method: "POST",
headers: {
"Authorization": `Bearer ${creds.CF_API_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
prefixes: [
baseUrl,
...additionalUrls
]
})
}
);
if (res.status >= 200 && res.status < 300) {
console.log(`Cloudflare Cache Purged for updated items in collection: ${collectionName}`);
} else
console.error(res);
}