[Init] Initial commit - NetMesh terminal manager
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
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
This commit is contained in:
74
electron/plugins/runtime/browserRuntime.mjs
Normal file
74
electron/plugins/runtime/browserRuntime.mjs
Normal file
@@ -0,0 +1,74 @@
|
||||
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,
|
||||
}, "*");
|
||||
Reference in New Issue
Block a user