feat: serve plugin http and websockets from one mount instead of ports

This commit is contained in:
LukeGus committed 2026-09-22 16:39:41 -05:00
1 parent c496a093ca
commit 8431570ff7
102 files changed
+2894 -2308

No files matched your search

+6 -1
View File
@@ -14,7 +14,12 @@
"termix": ">=2.9.0",
"api": "1"
},
"capabilities": ["settings:read-core", "network:outbound", "ui:surface"],
"capabilities": [
"settings:read-core",
"network:outbound",
"network:serve",
"ui:surface"
],
"contributes": {
"permissionGroup": {
"group": "tailscale",
+2 -2
View File
@@ -2,8 +2,8 @@ import type { PluginContext } from "@termix/plugin-sdk/backend";
import { startTailscaleService, stopTailscaleService } from "./routes.js";
export async function activate(ctx: PluginContext) {
startTailscaleService();
ctx.log.info("Tailscale router registered at /tailscale");
startTailscaleService(ctx.http.router());
ctx.log.info("Tailscale routes mounted at /plugin-api/tailscale");
}
export async function deactivate() {
+3 -7
View File
@@ -9,10 +9,6 @@ import { PermissionManager } from "../../../../src/backend/utils/permission-mana
import { apiLogger } from "../../../../src/backend/utils/logger.js";
import { fetchWithProxy } from "../../../../src/backend/utils/proxy-agent.js";
import { createCurrentSettingsRepository } from "../../../../src/backend/database/repositories/factory.js";
import {
registerTailscaleRouter,
unregisterTailscaleRouter,
} from "../../../../src/backend/database/routes/tailscale-dispatch.js";
interface TailscaleDevice {
id: string;
@@ -152,12 +148,12 @@ router.get(
/** Called from activate(). Mounts this router at /tailscale via the shared
* dispatcher. */
export function startTailscaleService(): void {
registerTailscaleRouter(router);
export function startTailscaleService(mountOn: Router): void {
mountOn.use(router);
}
/** Called from deactivate(). /tailscale/* falls back to 404 until
* reactivated. */
export function stopTailscaleService(): void {
unregisterTailscaleRouter();
// Unmounted by the runtime when the plugin deactivates.
}
@@ -47,7 +47,7 @@ export async function getTailscaleDevices(): Promise<{
error?: string;
}> {
try {
const response = await authApi.get("/tailscale/devices");
const response = await authApi.get("/plugin-api/tailscale/devices");
return response.data;
} catch (error) {
if (axios.isAxiosError(error)) {