Revelav3/src/util/transports.ts
2024-03-20 23:43:53 -06:00

83 lines
2.3 KiB
TypeScript

import {
SetTransport,
registerRemoteListener
} from "@mercuryworkshop/bare-mux";
//import { isIOS } from "./IosDetector";
declare global {
interface Window {
setTransport: () => void;
}
}
function changeTransport(transport: string, wispUrl: string) {
switch (transport) {
case "epoxy":
localStorage.setItem("transport", "epoxy");
console.log("Setting transport to Epoxy");
SetTransport("EpxMod.EpoxyClient", { wisp: wispUrl });
break;
case "libcurl":
localStorage.setItem("transport", "libcurl");
console.log("Setting transport to Libcurl");
SetTransport("CurlMod.LibcurlClient", {
wisp: wispUrl,
wasm: "https://cdn.jsdelivr.net/npm/libcurl.js@v0.5.3/libcurl.wasm"
});
break;
case "bare":
localStorage.setItem("transport", "bare");
console.log("Setting transport to Bare");
const bare =
localStorage.getItem("bare") || window.location.origin + "/bare/";
console.log("Bare URL: " + bare);
SetTransport("BareMod.BareClient", bare);
break;
default:
SetTransport("CurlMod.LibcurlClient", {
wisp: wispUrl,
wasm: "https://cdn.jsdelivr.net/npm/libcurl.js@v0.5.3/libcurl.wasm"
});
break;
}
}
function getTransport() {
return localStorage.getItem("transport") || "epoxy";
}
const wispUrl =
(location.protocol === "https:" ? "wss://" : "ws://") +
location.host +
"/wisp/";
registerRemoteListener(navigator.serviceWorker.controller!);
//if (isIOS) {
// console.log("iOS device detected. Bare will be used.");
// changeTransport(
// localStorage.getItem("transport") || "libcurl",
// localStorage.getItem("wispUrl") || wispUrl
// );
//} else {
// changeTransport(
// localStorage.getItem("transport") || "bare",
// localStorage.getItem("wispUrl") || wispUrl
// );
//}
//changeTransport(
// localStorage.getItem("transport") || "libcurl",
// localStorage.getItem("wispUrl") || wispUrl
//);
// helper function for ../routes.tsx
function setTransport() {
changeTransport(
localStorage.getItem("transport") || "libcurl",
localStorage.getItem("wispUrl") || wispUrl
);
}
window.setTransport = setTransport;
export { changeTransport, getTransport, setTransport };