Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/improsocial/impro
An extensible Bluesky client for web impro.social
Something went wrong. Try again.
JavaScript
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152const CACHE_NAME = "plugins-v1";
// Responses are cached indefinitely until cleared// URLs are versioned so new versions should fetch new entries
export class PluginCache { async _getCache() { return await caches.open(CACHE_NAME); }
async fetch( url, { doCacheNotFound = false, isNotFound = (status) => status === 404 } = {}, ) { const cache = await this._getCache(); let response = await cache.match(url); if (!response) { response = await fetch(url, { redirect: "follow" }); if (response.ok) { await cache.put(url, response.clone()); } else if (doCacheNotFound) { const body = await response .clone() .text() .catch(() => null); if (isNotFound(response.status, body)) { await cache.put(url, response.clone()); } } } if (!response.ok) { const error = new Error(`HTTP ${response.status} ${url}`); error.status = response.status; error.body = await response.text().catch(() => null); throw error; } return response; }
async reconcile(wantedUrls) { // Clear unwanted urls const cache = await this._getCache(); const wanted = new Set(wantedUrls); const keys = await cache.keys(); await Promise.all( keys .filter((request) => !wanted.has(request.url)) .map((request) => cache.delete(request)), ); }}