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
75 lines
1.9 KiB
JavaScript
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,
|
|
}, "*");
|