Files
NetMesh/electron/plugins/runtime/browserRuntime.mjs
zhaolei 3c72efcb7f
Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
[Init] Initial commit - NetMesh terminal manager
2026-09-13 18:24:01 +08:00

75 lines
1.9 KiB
JavaScript

import { startPluginRuntime } from "./runtimePeer.mjs";
function disableDirectBrowserCapability(name) {
try {
Object.defineProperty(globalThis, name, {
configurable: false,
enumerable: false,
value: undefined,
writable: false,
});
} catch {
try { globalThis[name] = undefined; } catch {}
}
}
function lockDirectBrowserCapabilities() {
for (const name of [
"EventSource",
"RTCPeerConnection",
"SharedWorker",
"WebSocket",
"WebSocketStream",
"WebTransport",
"Worker",
"XMLHttpRequest",
"fetch",
"webkitRTCPeerConnection",
]) disableDirectBrowserCapability(name);
try {
Object.defineProperty(Navigator.prototype, "sendBeacon", {
configurable: false,
enumerable: false,
value: () => false,
writable: false,
});
} catch {}
}
function waitForPort() {
return new Promise((resolve) => {
const acceptPort = (event) => {
if (
event.data?.type !== "netcatty-plugin:connect"
|| event.data?.runtimeToken !== window.location.hostname
) return;
const port = event.ports?.[0];
if (!port) return;
window.removeEventListener("message", acceptPort);
resolve(port);
};
window.addEventListener("message", acceptPort);
window.postMessage({
type: "netcatty-plugin:runtime-ready",
runtimeToken: window.location.hostname,
}, "*");
});
}
const [configResponse, port] = await Promise.all([
fetch(new URL("./config.json", import.meta.url), { cache: "no-store", credentials: "omit" }),
waitForPort(),
]);
if (!configResponse.ok) throw new Error("Unable to load plugin runtime configuration");
const config = await configResponse.json();
lockDirectBrowserCapabilities();
await startPluginRuntime({
port,
config,
loadPlugin: (entryUrl) => import(entryUrl),
});
window.postMessage({
type: "netcatty-plugin:runtime-connected",
runtimeToken: window.location.hostname,
}, "*");