import { AdvertisedEndpoint, DesktopServerExposureModeSchema, DesktopServerExposureStateSchema,} from "@t3tools/contracts";import * as Effect from "effect/Effect";import * as Schema from "effect/Schema"; import * as DesktopLifecycle from "../../app/DesktopLifecycle.ts";import * as DesktopServerExposure from "../../backend/DesktopServerExposure.ts";import * as IpcChannels from "../channels.ts";import * as DesktopIpc from "../DesktopIpc.ts"; const SetTailscaleServeEnabledInput = Schema.Struct({ enabled: Schema.Boolean, port: Schema.optionalKey(Schema.Number),}); export const getServerExposureState = DesktopIpc.makeIpcMethod({ channel: IpcChannels.GET_SERVER_EXPOSURE_STATE_CHANNEL, payload: Schema.Void, result: DesktopServerExposureStateSchema, handler: Effect.fn("desktop.ipc.serverExposure.getState")(function* () { const serverExposure = yield* DesktopServerExposure.DesktopServerExposure; return yield* serverExposure.getState; }),}); export const setServerExposureMode = DesktopIpc.makeIpcMethod({ channel: IpcChannels.SET_SERVER_EXPOSURE_MODE_CHANNEL, payload: DesktopServerExposureModeSchema, result: DesktopServerExposureStateSchema, handler: Effect.fn("desktop.ipc.serverExposure.setMode")(function* (mode) { const lifecycle = yield* DesktopLifecycle.DesktopLifecycle; const serverExposure = yield* DesktopServerExposure.DesktopServerExposure; const change = yield* serverExposure.setMode(mode); if (change.requiresRelaunch) { yield* lifecycle.relaunch(`serverExposureMode=${mode}`); } return change.state; }),}); export const setTailscaleServeEnabled = DesktopIpc.makeIpcMethod({ channel: IpcChannels.SET_TAILSCALE_SERVE_ENABLED_CHANNEL, payload: SetTailscaleServeEnabledInput, result: DesktopServerExposureStateSchema, handler: Effect.fn("desktop.ipc.serverExposure.setTailscaleServeEnabled")(function* (input) { const lifecycle = yield* DesktopLifecycle.DesktopLifecycle; const serverExposure = yield* DesktopServerExposure.DesktopServerExposure; const change = yield* serverExposure.setTailscaleServeEnabled(input); if (change.requiresRelaunch) { yield* lifecycle.relaunch( change.state.tailscaleServeEnabled ? "tailscale-serve-enabled" : "tailscale-serve-disabled", ); } return change.state; }),}); export const getAdvertisedEndpoints = DesktopIpc.makeIpcMethod({ channel: IpcChannels.GET_ADVERTISED_ENDPOINTS_CHANNEL, payload: Schema.Void, result: Schema.Array(AdvertisedEndpoint), handler: Effect.fn("desktop.ipc.serverExposure.getAdvertisedEndpoints")(function* () { const serverExposure = yield* DesktopServerExposure.DesktopServerExposure; return yield* serverExposure.getAdvertisedEndpoints; }),});
import {
AdvertisedEndpoint,
DesktopServerExposureModeSchema,
DesktopServerExposureStateSchema,
} from "@t3tools/contracts";
import * as Effect from "effect/Effect";
import * as Schema from "effect/Schema";
import * as DesktopLifecycle from "../../app/DesktopLifecycle.ts";
import * as DesktopServerExposure from "../../backend/DesktopServerExposure.ts";
import * as IpcChannels from "../channels.ts";
import * as DesktopIpc from "../DesktopIpc.ts";
const SetTailscaleServeEnabledInput = Schema.Struct({
enabled: Schema.Boolean,
port: Schema.optionalKey(Schema.Number),
});
export const getServerExposureState = DesktopIpc.makeIpcMethod({
channel: IpcChannels.GET_SERVER_EXPOSURE_STATE_CHANNEL,
payload: Schema.Void,
result: DesktopServerExposureStateSchema,
handler: Effect.fn("desktop.ipc.serverExposure.getState")(function* () {
const serverExposure = yield* DesktopServerExposure.DesktopServerExposure;
return yield* serverExposure.getState;
}),
});
export const setServerExposureMode = DesktopIpc.makeIpcMethod({
channel: IpcChannels.SET_SERVER_EXPOSURE_MODE_CHANNEL,
payload: DesktopServerExposureModeSchema,
result: DesktopServerExposureStateSchema,
handler: Effect.fn("desktop.ipc.serverExposure.setMode")(function* (mode) {
const lifecycle = yield* DesktopLifecycle.DesktopLifecycle;
const serverExposure = yield* DesktopServerExposure.DesktopServerExposure;
const change = yield* serverExposure.setMode(mode);
if (change.requiresRelaunch) {
yield* lifecycle.relaunch(`serverExposureMode=${mode}`);
}
return change.state;
}),
});
export const setTailscaleServeEnabled = DesktopIpc.makeIpcMethod({
channel: IpcChannels.SET_TAILSCALE_SERVE_ENABLED_CHANNEL,
payload: SetTailscaleServeEnabledInput,
result: DesktopServerExposureStateSchema,
handler: Effect.fn("desktop.ipc.serverExposure.setTailscaleServeEnabled")(function* (input) {
const lifecycle = yield* DesktopLifecycle.DesktopLifecycle;
const serverExposure = yield* DesktopServerExposure.DesktopServerExposure;
const change = yield* serverExposure.setTailscaleServeEnabled(input);
if (change.requiresRelaunch) {
yield* lifecycle.relaunch(
change.state.tailscaleServeEnabled ? "tailscale-serve-enabled" : "tailscale-serve-disabled",
);
}
return change.state;
}),
});
export const getAdvertisedEndpoints = DesktopIpc.makeIpcMethod({
channel: IpcChannels.GET_ADVERTISED_ENDPOINTS_CHANNEL,
payload: Schema.Void,
result: Schema.Array(AdvertisedEndpoint),
handler: Effect.fn("desktop.ipc.serverExposure.getAdvertisedEndpoints")(function* () {
const serverExposure = yield* DesktopServerExposure.DesktopServerExposure;
return yield* serverExposure.getAdvertisedEndpoints;
}),
});