Telegram Web K with changes to work inside I2P https://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.5 KiB

3 years ago
/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import { pause } from "../../helpers/schedulers/pause";
3 years ago
const ctx = self as any as ServiceWorkerGlobalScope;
export const CACHE_ASSETS_NAME = 'cachedAssets';
function isCorrectResponse(response: Response) {
return response.ok && response.status === 200;
}
function timeoutRace<T extends Promise<any>>(promise: T) {
return Promise.race([
promise,
pause(10000).then(() => Promise.reject())
]);
}
3 years ago
export async function requestCache(event: FetchEvent) {
try {
// const cache = await ctx.caches.open(CACHE_ASSETS_NAME);
const cache = await timeoutRace(ctx.caches.open(CACHE_ASSETS_NAME));
const file = await timeoutRace(cache.match(event.request, {ignoreVary: true}));
3 years ago
if(file && isCorrectResponse(file)) {
return file;
}
const headers: HeadersInit = {'Vary': '*'};
let response = await fetch(event.request, {headers});
if(isCorrectResponse(response)) {
cache.put(event.request, response.clone());
} else if(response.status === 304) { // possible fix for 304 in Safari
const url = event.request.url.replace(/\?.+$/, '') + '?' + (Math.random() * 100000 | 0);
response = await fetch(url, {headers});
if(isCorrectResponse(response)) {
cache.put(event.request, response.clone());
}
}
return response;
} catch(err) {
return fetch(event.request);
}
}