Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
QuiteAFancyEmerald
GitHub Repository: QuiteAFancyEmerald/Holy-Unblocker
Path: blob/master/views/assets/js/register-sw.js
10586 views
1
(() => {
2
const swRoutes = {
3
uv: ['{{route}}{{/uv/sw.js}}', '{{route}}{{/uv/sw-blacklist.js}}'],
4
sj: [
5
'{{route}}{{/scram/scramjet.sw.js}}',
6
'{{route}}{{/scram/scramjet.sw-blacklist.js}}'
7
],
8
},
9
swAllowedHostnames = ['localhost', '127.0.0.1'],
10
wispUrl =
11
(location.protocol === 'https:' ? 'wss' : 'ws') +
12
'://' +
13
location.host +
14
'{{route}}{{/wisp/}}',
15
proxyUrl = {
16
tor: 'socks5h://localhost:9050',
17
eu: 'socks5h://localhost:7000',
18
jp: 'socks5h://localhost:7001',
19
},
20
transports = {
21
'{{epoxy}}': '{{route}}{{/epoxy/index.mjs}}',
22
'{{libcurl}}': '{{route}}{{/libcurl/index.mjs}}',
23
},
24
storageId = '{{hu-lts}}-storage',
25
storageObject = () => JSON.parse(localStorage.getItem(storageId)) || {},
26
readStorage = (name) => storageObject()[name],
27
defaultMode = '{{libcurl}}';
28
29
transports.default = transports[defaultMode];
30
31
Object.freeze(transports);
32
33
const registerSW = async () => {
34
if (!navigator.serviceWorker) {
35
if (
36
location.protocol !== 'https:' &&
37
!swAllowedHostnames.includes(location.hostname)
38
)
39
throw new Error('Service workers cannot be registered without https.');
40
41
throw new Error("Your browser doesn't support service workers.");
42
}
43
44
// Set the transport mode
45
const transportMode =
46
transports[readStorage('Transport')] || transports.default;
47
let transportOptions = { wisp: wispUrl };
48
49
// Socks5 proxy options
50
if ('string' === typeof readStorage('UseSocks5'))
51
transportOptions.proxy = proxyUrl[readStorage('UseSocks5')];
52
53
console.log('Using proxy:', transportOptions.proxy);
54
console.log('Transport mode:', transportMode);
55
56
const connection = new BareMux.BareMuxConnection('{{route}}{{/baremux/worker.js}}');
57
await connection.setTransport(transportMode, [transportOptions]);
58
59
const registrations = await navigator.serviceWorker.getRegistrations(),
60
usedSW = swRoutes.uv[readStorage('HideAds') !== false ? 1 : 0];
61
62
console.log('Service Worker being registered:', usedSW);
63
64
// Unregister outdated service workers
65
for (const registration of registrations)
66
if (
67
registration.active &&
68
new URL(registration.active.scriptURL).pathname !==
69
new URL(usedSW, location.origin).pathname
70
)
71
await registration.unregister();
72
73
await navigator.serviceWorker.register(usedSW);
74
};
75
76
const initializeScramjet = async () => {
77
try {
78
const { ScramjetController } = await $scramjetLoadController();
79
80
const scramjet = new ScramjetController({
81
prefix: '{{route}}{{/scram/network/}}',
82
files: {
83
wasm: '{{route}}{{/scram/scramjet.wasm.wasm}}',
84
all: '{{route}}{{/scram/scramjet.all.js}}',
85
sync: '{{route}}{{/scram/scramjet.sync.js}}',
86
},
87
flags: {
88
rewriterLogs: false,
89
naiiveRewriter: false,
90
scramitize: false,
91
},
92
});
93
94
console.log('Initializing ScramjetController');
95
scramjet.init();
96
navigator.serviceWorker.register(
97
swRoutes.sj[readStorage('HideAds') !== false ? 1 : 0]
98
);
99
} catch (err) {
100
console.error('Scramjet initialization failed:', err);
101
}
102
};
103
104
const initialize = async () => {
105
try {
106
await registerSW();
107
108
await initializeScramjet();
109
} catch (err) {
110
console.error('Initialization failed:', err);
111
}
112
};
113
114
initialize();
115
})();
116
117