Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
QuiteAFancyEmerald
GitHub Repository: QuiteAFancyEmerald/Holy-Unblocker
Path: blob/master/views/scram/scramjet.sw.js
5227 views
1
importScripts('{{route}}{{/scram/scramjet.all.js}}');
2
const { ScramjetServiceWorker } = $scramjetLoadWorker();
3
const scramjet = new ScramjetServiceWorker();
4
5
async function handleRequest(event) {
6
await scramjet.loadConfig();
7
if (scramjet.route(event)) {
8
return scramjet.fetch(event);
9
}
10
return fetch(event.request);
11
}
12
13
self.addEventListener('fetch', (event) => {
14
event.respondWith(handleRequest(event));
15
});
16
17
let playgroundData;
18
self.addEventListener('message', (event) => {
19
if (event.data.type === 'playgroundData') {
20
playgroundData = event.data;
21
} else if (event.data.type === 'requestAC') {
22
// Set up a message channel from common.js to process autocomplete search results.
23
const requestPort = event.ports[0];
24
requestPort.addEventListener('message', async (event) => {
25
const response = await scramjet.fetch(event.data);
26
27
// This contains some duplicate code from common.js, since Response objects
28
// cannot be passed through service workers and must be preprocessed.
29
const responseType = response.headers.get('content-type');
30
let responseJSON = {};
31
if (responseType && responseType.indexOf('application/json') !== -1)
32
responseJSON = await response.json();
33
else
34
try {
35
responseJSON = await response.text();
36
try {
37
responseJSON = JSON.parse(responseJSON);
38
} catch (e) {
39
responseJSON = JSON.parse(
40
responseJSON.replace(/^[^[{]*|[^\]}]*$/g, '')
41
);
42
}
43
} catch (e) {
44
// responseJSON will be an empty object if everything was invalid.
45
}
46
47
// Return the processed data.
48
requestPort.postMessage({
49
responseJSON: responseJSON,
50
searchType: event.data.type,
51
time: event.data.request.headers.get('Date'),
52
});
53
});
54
requestPort.start();
55
}
56
});
57
58