Files
2026-05-20 22:32:37 -04:00

274 lines
6.9 KiB
JavaScript

var $scramjetController;
(() => {
var e = {
805(e, t, r) {
r.d(t, { C: () => o });
class o {
methods;
id;
sendRaw;
counter = 0;
promiseCallbacks = new Map();
constructor(e, t, r) {
((this.methods = e), (this.id = t), (this.sendRaw = r));
}
recieve(e) {
if (null == e || "object" != typeof e) return;
let t = e[this.id];
if (null == t || "object" != typeof t) return;
let r = t.$type;
if ("response" === r) {
let e = t.$token,
r = t.$data,
o = t.$error,
s = this.promiseCallbacks.get(e);
if (!s) return;
(this.promiseCallbacks.delete(e),
void 0 !== o ? s.reject(Error(o)) : s.resolve(r));
} else if ("request" === r) {
let e = t.$method,
r = t.$args;
this.methods[e](r)
.then((e) => {
this.sendRaw(
{
[this.id]: {
$type: "response",
$token: t.$token,
$data: e?.[0],
},
},
e?.[1]
);
})
.catch((e) => {
(console.error(e),
this.sendRaw(
{
[this.id]: {
$type: "response",
$token: t.$token,
$error: e?.toString() || "Unknown error",
},
},
[]
));
});
}
}
call(e, t, r = []) {
let o = this.counter++;
return new Promise((s, i) => {
(this.promiseCallbacks.set(o, { resolve: s, reject: i }),
this.sendRaw(
{
[this.id]: {
$type: "request",
$method: e,
$args: t,
$token: o,
},
},
r
));
});
}
}
},
},
t = {};
function r(o) {
var s = t[o];
if (void 0 !== s) return s.exports;
var i = (t[o] = { exports: {} });
return (e[o](i, i.exports, r), i.exports);
}
((r.d = (e, t) => {
for (var o in t)
r.o(t, o) &&
!r.o(e, o) &&
Object.defineProperty(e, o, { enumerable: !0, get: t[o] });
}),
(r.o = (e, t) => Object.prototype.hasOwnProperty.call(e, t)),
(r.r = (e) => {
("undefined" != typeof Symbol &&
Symbol.toStringTag &&
Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }),
Object.defineProperty(e, "__esModule", { value: !0 }));
}));
var o = {};
((() => {
(r.r(o), r.d(o, { route: () => a, shouldRoute: () => n }));
var e = r(805);
let t = {};
addEventListener("message", (e) => {
if (e.data && "object" == typeof e.data) {
if (
e.data.$sw$setCookieDone &&
"object" == typeof e.data.$sw$setCookieDone
) {
let r = e.data.$sw$setCookieDone,
o = t[r.id];
o && (o(), delete t[r.id]);
}
if (
e.data.$sw$initRemoteTransport &&
"object" == typeof e.data.$sw$initRemoteTransport
) {
let { port: t, prefix: r } = e.data.$sw$initRemoteTransport,
o = i.find((e) => new URL(r).pathname.startsWith(e.prefix));
if (!o)
return void console.error(
"No relevant controller found for transport init"
);
o.rpc.call("initRemoteTransport", t, [t]);
}
}
});
class s {
prefix;
id;
rpc;
constructor(r, o, s) {
((this.prefix = r),
(this.id = o),
(this.rpc = new e.C(
{
sendSetCookie: async ({ cookies: e, options: r }) => {
let o = await self.clients.matchAll(),
s = [],
i = [],
n =
r?.destination === "document" ||
r?.destination === "iframe";
for (let a of o) {
let o = Math.random().toString(36).substring(2, 10);
(s.push(o),
a.postMessage({
$controller$setCookie: { cookies: e, options: r, id: o },
}),
n ||
i.push(
new Promise((e) => {
t[o] = () => e(o);
})
));
}
if (i.length > 0) {
let r,
n = !1,
a = new Promise((i) => {
r = setTimeout(() => {
if (!n) {
let r = s.filter((e) => void 0 !== t[e]);
console.error(
`timed out waiting for set cookie response (deadlock?): cookies=${e.length} clients=${o.length} pending=${r.length}/${s.length} clientUrls=${o.map((e) => e.url).join(",")}`
);
}
i();
}, 1e3);
});
try {
await Promise.race([
a,
Promise.any(i)
.then(() => {
n = !0;
})
.catch(() => {}),
]);
} finally {
for (let e of (void 0 !== r && clearTimeout(r), s))
delete t[e];
}
}
},
},
"tabchannel-" + o,
(e, t) => {
s.postMessage(e, t);
}
)),
(s.onmessage = (e) => {
this.rpc.recieve(e.data);
}),
(s.onmessageerror = console.error),
this.rpc.call("ready", void 0));
}
}
let i = [];
function n(e) {
let t = new URL(e.request.url);
return void 0 !== i.find((e) => t.pathname.startsWith(e.prefix));
}
async function a(e) {
try {
let t = new URL(e.request.url),
r = i.find((e) => t.pathname.startsWith(e.prefix)),
o = await clients.get(e.clientId),
s = [...e.request.headers],
n = await r.rpc.call(
"request",
{
rawUrl: e.request.url,
rawReferrer: e.request.referrer,
destination: e.request.destination,
mode: e.request.mode,
referrer: e.request.referrer,
method: e.request.method,
body: e.request.body,
cache: e.request.cache,
forceCrossOriginIsolated: !1,
initialHeaders: s,
rawClientUrl: o ? o.url : void 0,
clientId: e.clientId || e.resultingClientId,
},
e.request.body instanceof ReadableStream ||
e.request.body instanceof ArrayBuffer
? [e.request.body]
: void 0
);
return new Response(n.body, {
status: n.status,
statusText: n.statusText,
headers: n.headers,
});
} catch (e) {
return (
console.error("Service Worker error:", e),
new Response("Internal Service Worker Error: " + e.message, {
status: 500,
})
);
}
}
(addEventListener("message", (e) => {
if (
!e.data ||
"object" != typeof e.data ||
!e.data.$controller$init ||
"object" != typeof e.data.$controller$init
)
return;
let t = e.data.$controller$init,
r = i.findIndex((e) => e.id === t.id);
(-1 !== r && i.splice(r, 1), i.push(new s(t.prefix, t.id, e.ports[0])));
}),
addEventListener("install", () => {
self.skipWaiting();
}),
addEventListener("activate", (e) => {
e.waitUntil(clients.claim());
}),
setTimeout(async () => {
for (let e of (console.log(
"service worker activated, notifying clients to revive"
),
await clients.matchAll()))
e.postMessage({ $controller$swrevive: {} });
}, 100));
})(),
($scramjetController = o));
})();
//# sourceMappingURL=controller.sw.js.map