1import { ConnectionOnboarding } from "@t3tools/client-runtime/connection";
2import {
3 createAtomCommandScheduler,
4 createRuntimeCommand,
5} from "@t3tools/client-runtime/state/runtime";
6import type { DesktopSshEnvironmentTarget } from "@t3tools/contracts";
7import * as Effect from "effect/Effect";
8
9import { connectionAtomRuntime } from "./runtime";
10
11const onboardingScheduler = createAtomCommandScheduler();
12
13export const connectPairing = createRuntimeCommand(connectionAtomRuntime, {
14 label: "web:connection:connect-pairing",
15 scheduler: onboardingScheduler,
16 concurrency: {
17 mode: "singleFlight",
18 key: (input: ConnectionOnboarding.PairingConnectionInput) => JSON.stringify(input),
19 },
20 execute: (input: ConnectionOnboarding.PairingConnectionInput) =>
21 ConnectionOnboarding.ConnectionOnboarding.pipe(
22 Effect.flatMap((onboarding) => onboarding.registerPairing(input)),
23 ),
24});
25
26export const connectSshEnvironment = createRuntimeCommand(connectionAtomRuntime, {
27 label: "web:connection:connect-ssh",
28 scheduler: onboardingScheduler,
29 concurrency: {
30 mode: "serial",
31 key: (input: { readonly target: DesktopSshEnvironmentTarget }) => JSON.stringify(input.target),
32 },
33 execute: (input: ConnectionOnboarding.SshConnectionInput) =>
34 ConnectionOnboarding.ConnectionOnboarding.pipe(
35 Effect.flatMap((onboarding) => onboarding.registerSsh(input)),
36 ),
37});