import { DesktopDiscoveredSshHostSchema, DesktopSshBearerBootstrapInputSchema, DesktopSshBearerRequestInputSchema, DesktopSshEnvironmentEnsureInputSchema, DesktopSshEnvironmentEnsureResultSchema, DesktopSshEnvironmentTargetSchema, DesktopSshHttpBaseUrlInputSchema, DesktopSshPasswordPromptCancelledType, DesktopSshPasswordPromptResolutionInputSchema, ExecutionEnvironmentDescriptor, AuthBearerBootstrapResult, AuthSessionState, AuthWebSocketTokenResult,} from "@t3tools/contracts";import * as Effect from "effect/Effect";import * as Schema from "effect/Schema"; import * as IpcChannels from "../channels.ts";import { makeIpcMethod } from "../DesktopIpc.ts";import * as DesktopSshEnvironment from "../../ssh/DesktopSshEnvironment.ts";import * as DesktopSshPasswordPrompts from "../../ssh/DesktopSshPasswordPrompts.ts";import * as DesktopSshRemoteApi from "../../ssh/DesktopSshRemoteApi.ts"; export const discoverSshHosts = makeIpcMethod({ channel: IpcChannels.DISCOVER_SSH_HOSTS_CHANNEL, payload: Schema.Void, result: Schema.Array(DesktopDiscoveredSshHostSchema), handler: Effect.fn("desktop.ipc.sshEnvironment.discoverHosts")(function* () { const sshEnvironment = yield* DesktopSshEnvironment.DesktopSshEnvironment; return yield* sshEnvironment.discoverHosts(); }),}); export const ensureSshEnvironment = makeIpcMethod({ channel: IpcChannels.ENSURE_SSH_ENVIRONMENT_CHANNEL, payload: DesktopSshEnvironmentEnsureInputSchema, result: DesktopSshEnvironmentEnsureResultSchema, handler: Effect.fn("desktop.ipc.sshEnvironment.ensureEnvironment")(function* ({ target, options, }) { const sshEnvironment = yield* DesktopSshEnvironment.DesktopSshEnvironment; return yield* sshEnvironment.ensureEnvironment(target, options).pipe( Effect.catch((error) => DesktopSshEnvironment.isDesktopSshPasswordPromptCancellation(error) ? Effect.succeed({ type: DesktopSshPasswordPromptCancelledType, message: error.message, }) : Effect.fail(error), ), ); }),}); export const disconnectSshEnvironment = makeIpcMethod({ channel: IpcChannels.DISCONNECT_SSH_ENVIRONMENT_CHANNEL, payload: DesktopSshEnvironmentTargetSchema, result: Schema.Void, handler: Effect.fn("desktop.ipc.sshEnvironment.disconnectEnvironment")(function* (target) { const sshEnvironment = yield* DesktopSshEnvironment.DesktopSshEnvironment; yield* sshEnvironment.disconnectEnvironment(target); }),}); export const fetchSshEnvironmentDescriptor = makeIpcMethod({ channel: IpcChannels.FETCH_SSH_ENVIRONMENT_DESCRIPTOR_CHANNEL, payload: DesktopSshHttpBaseUrlInputSchema, result: ExecutionEnvironmentDescriptor, handler: Effect.fn("desktop.ipc.sshEnvironment.fetchDescriptor")(function* ({ httpBaseUrl }) { const remoteApi = yield* DesktopSshRemoteApi.DesktopSshRemoteApi; return yield* remoteApi.fetchEnvironmentDescriptor({ httpBaseUrl }); }),}); export const bootstrapSshBearerSession = makeIpcMethod({ channel: IpcChannels.BOOTSTRAP_SSH_BEARER_SESSION_CHANNEL, payload: DesktopSshBearerBootstrapInputSchema, result: AuthBearerBootstrapResult, handler: Effect.fn("desktop.ipc.sshEnvironment.bootstrapBearerSession")(function* ({ httpBaseUrl, credential, }) { const remoteApi = yield* DesktopSshRemoteApi.DesktopSshRemoteApi; return yield* remoteApi.bootstrapBearerSession({ httpBaseUrl, credential }); }),}); export const fetchSshSessionState = makeIpcMethod({ channel: IpcChannels.FETCH_SSH_SESSION_STATE_CHANNEL, payload: DesktopSshBearerRequestInputSchema, result: AuthSessionState, handler: Effect.fn("desktop.ipc.sshEnvironment.fetchSessionState")(function* ({ httpBaseUrl, bearerToken, }) { const remoteApi = yield* DesktopSshRemoteApi.DesktopSshRemoteApi; return yield* remoteApi.fetchSessionState({ httpBaseUrl, bearerToken }); }),}); export const issueSshWebSocketToken = makeIpcMethod({ channel: IpcChannels.ISSUE_SSH_WEBSOCKET_TOKEN_CHANNEL, payload: DesktopSshBearerRequestInputSchema, result: AuthWebSocketTokenResult, handler: Effect.fn("desktop.ipc.sshEnvironment.issueWebSocketToken")(function* ({ httpBaseUrl, bearerToken, }) { const remoteApi = yield* DesktopSshRemoteApi.DesktopSshRemoteApi; return yield* remoteApi.issueWebSocketToken({ httpBaseUrl, bearerToken }); }),}); export const resolveSshPasswordPrompt = makeIpcMethod({ channel: IpcChannels.RESOLVE_SSH_PASSWORD_PROMPT_CHANNEL, payload: DesktopSshPasswordPromptResolutionInputSchema, result: Schema.Void, handler: Effect.fn("desktop.ipc.sshEnvironment.resolvePasswordPrompt")(function* ({ requestId, password, }) { const prompts = yield* DesktopSshPasswordPrompts.DesktopSshPasswordPrompts; yield* prompts.resolve({ requestId, password }); }),});
import {
DesktopDiscoveredSshHostSchema,
DesktopSshBearerBootstrapInputSchema,
DesktopSshBearerRequestInputSchema,
DesktopSshEnvironmentEnsureInputSchema,
DesktopSshEnvironmentEnsureResultSchema,
DesktopSshEnvironmentTargetSchema,
DesktopSshHttpBaseUrlInputSchema,
DesktopSshPasswordPromptCancelledType,
DesktopSshPasswordPromptResolutionInputSchema,
ExecutionEnvironmentDescriptor,
AuthBearerBootstrapResult,
AuthSessionState,
AuthWebSocketTokenResult,
} from "@t3tools/contracts";
import * as Effect from "effect/Effect";
import * as Schema from "effect/Schema";
import * as IpcChannels from "../channels.ts";
import { makeIpcMethod } from "../DesktopIpc.ts";
import * as DesktopSshEnvironment from "../../ssh/DesktopSshEnvironment.ts";
import * as DesktopSshPasswordPrompts from "../../ssh/DesktopSshPasswordPrompts.ts";
import * as DesktopSshRemoteApi from "../../ssh/DesktopSshRemoteApi.ts";
export const discoverSshHosts = makeIpcMethod({
channel: IpcChannels.DISCOVER_SSH_HOSTS_CHANNEL,
payload: Schema.Void,
result: Schema.Array(DesktopDiscoveredSshHostSchema),
handler: Effect.fn("desktop.ipc.sshEnvironment.discoverHosts")(function* () {
const sshEnvironment = yield* DesktopSshEnvironment.DesktopSshEnvironment;
return yield* sshEnvironment.discoverHosts();
}),
});
export const ensureSshEnvironment = makeIpcMethod({
channel: IpcChannels.ENSURE_SSH_ENVIRONMENT_CHANNEL,
payload: DesktopSshEnvironmentEnsureInputSchema,
result: DesktopSshEnvironmentEnsureResultSchema,
handler: Effect.fn("desktop.ipc.sshEnvironment.ensureEnvironment")(function* ({
target,
options,
}) {
const sshEnvironment = yield* DesktopSshEnvironment.DesktopSshEnvironment;
return yield* sshEnvironment.ensureEnvironment(target, options).pipe(
Effect.catch((error) =>
DesktopSshEnvironment.isDesktopSshPasswordPromptCancellation(error)
? Effect.succeed({
type: DesktopSshPasswordPromptCancelledType,
message: error.message,
})
: Effect.fail(error),
),
);
}),
});
export const disconnectSshEnvironment = makeIpcMethod({
channel: IpcChannels.DISCONNECT_SSH_ENVIRONMENT_CHANNEL,
payload: DesktopSshEnvironmentTargetSchema,
result: Schema.Void,
handler: Effect.fn("desktop.ipc.sshEnvironment.disconnectEnvironment")(function* (target) {
const sshEnvironment = yield* DesktopSshEnvironment.DesktopSshEnvironment;
yield* sshEnvironment.disconnectEnvironment(target);
}),
});
export const fetchSshEnvironmentDescriptor = makeIpcMethod({
channel: IpcChannels.FETCH_SSH_ENVIRONMENT_DESCRIPTOR_CHANNEL,
payload: DesktopSshHttpBaseUrlInputSchema,
result: ExecutionEnvironmentDescriptor,
handler: Effect.fn("desktop.ipc.sshEnvironment.fetchDescriptor")(function* ({ httpBaseUrl }) {
const remoteApi = yield* DesktopSshRemoteApi.DesktopSshRemoteApi;
return yield* remoteApi.fetchEnvironmentDescriptor({ httpBaseUrl });
}),
});
export const bootstrapSshBearerSession = makeIpcMethod({
channel: IpcChannels.BOOTSTRAP_SSH_BEARER_SESSION_CHANNEL,
payload: DesktopSshBearerBootstrapInputSchema,
result: AuthBearerBootstrapResult,
handler: Effect.fn("desktop.ipc.sshEnvironment.bootstrapBearerSession")(function* ({
httpBaseUrl,
credential,
}) {
const remoteApi = yield* DesktopSshRemoteApi.DesktopSshRemoteApi;
return yield* remoteApi.bootstrapBearerSession({ httpBaseUrl, credential });
}),
});
export const fetchSshSessionState = makeIpcMethod({
channel: IpcChannels.FETCH_SSH_SESSION_STATE_CHANNEL,
payload: DesktopSshBearerRequestInputSchema,
result: AuthSessionState,
handler: Effect.fn("desktop.ipc.sshEnvironment.fetchSessionState")(function* ({
httpBaseUrl,
bearerToken,
}) {
const remoteApi = yield* DesktopSshRemoteApi.DesktopSshRemoteApi;
return yield* remoteApi.fetchSessionState({ httpBaseUrl, bearerToken });
}),
});
export const issueSshWebSocketToken = makeIpcMethod({
channel: IpcChannels.ISSUE_SSH_WEBSOCKET_TOKEN_CHANNEL,
payload: DesktopSshBearerRequestInputSchema,
result: AuthWebSocketTokenResult,
handler: Effect.fn("desktop.ipc.sshEnvironment.issueWebSocketToken")(function* ({
httpBaseUrl,
bearerToken,
}) {
const remoteApi = yield* DesktopSshRemoteApi.DesktopSshRemoteApi;
return yield* remoteApi.issueWebSocketToken({ httpBaseUrl, bearerToken });
}),
});
export const resolveSshPasswordPrompt = makeIpcMethod({
channel: IpcChannels.RESOLVE_SSH_PASSWORD_PROMPT_CHANNEL,
payload: DesktopSshPasswordPromptResolutionInputSchema,
result: Schema.Void,
handler: Effect.fn("desktop.ipc.sshEnvironment.resolvePasswordPrompt")(function* ({
requestId,
password,
}) {
const prompts = yield* DesktopSshPasswordPrompts.DesktopSshPasswordPrompts;
yield* prompts.resolve({ requestId, password });
}),
});