A CloudFlare service worker that proxies purge cache requests. Example: https://example.com/__purge_cache?zone=XX

August 21, 2018 ยท View on GitHub

addEventListener('fetch', event => {

event.respondWith(purgeCache(event.request))

})

async function purgeCache(request) {

const url = new URL(request.url)

// If the path doesn't begin with our protected prefix, just pass the request through.
if (!url.pathname.startsWith("/__purge_cache")) {
    return fetch(request)
}

// Lets validate the zone id, and return an error if invalid
let zoneIdValidated = (new RegExp("^([a-z0-9]{32})$")).test(url.searchParams.get('zone'));

if (!zoneIdValidated) {
    return new Response('Invalid Zone ID', {
      status: 500
    });
}


let content = '{"purge_everything":true}'
let headers = {
    'Content-Type': 'application/json',
    'X-Auth-Email': '', // Cloudflare API Auth Email
    'X-Auth-Key': '' //Cloudflare API Auth Key
}

const init = {
    method: 'POST',
    headers: headers,
    body: content
}

const response = await fetch('https://api.cloudflare.com/client/v4/zones/'+url.searchParams.get('zone')+'/purge_cache', init)

return response

}