1import {
2 createAtomCommandScheduler,
3 createRuntimeCommand,
4} from "@t3tools/client-runtime/state/runtime";
5
6import { connectionAtomRuntime } from "../connection/runtime";
7import {
8 linkPrimaryEnvironmentToCloud,
9 type CloudLinkMode,
10 type CloudLinkTarget,
11 unlinkPrimaryEnvironmentFromCloud,
12 updatePrimaryCloudPreferences,
13} from "./linkEnvironment";
14
15const cloudLinkScheduler = createAtomCommandScheduler();
16const cloudLinkConcurrency = {
17 mode: "serial" as const,
18 key: (input: { readonly target: CloudLinkTarget }) => input.target.environmentId,
19};
20
21export const linkPrimaryEnvironment = createRuntimeCommand(connectionAtomRuntime, {
22 label: "web:cloud:link-primary-environment",
23 scheduler: cloudLinkScheduler,
24 concurrency: cloudLinkConcurrency,
25 execute: (input: {
26 readonly target: CloudLinkTarget;
27 readonly clerkToken: string;
28 readonly mode?: CloudLinkMode;
29 }) => linkPrimaryEnvironmentToCloud(input),
30});
31
32export const unlinkPrimaryEnvironment = createRuntimeCommand(connectionAtomRuntime, {
33 label: "web:cloud:unlink-primary-environment",
34 scheduler: cloudLinkScheduler,
35 concurrency: cloudLinkConcurrency,
36 execute: (input: { readonly target: CloudLinkTarget; readonly clerkToken: string | null }) =>
37 unlinkPrimaryEnvironmentFromCloud(input),
38});
39
40export const updatePrimaryEnvironmentPreferences = createRuntimeCommand(connectionAtomRuntime, {
41 label: "web:cloud:update-primary-environment-preferences",
42 scheduler: cloudLinkScheduler,
43 concurrency: cloudLinkConcurrency,
44 execute: (input: {
45 readonly target: CloudLinkTarget;
46 readonly publishAgentActivity: boolean;
47 readonly holdWebhooksWhileOffline?: boolean;
48 }) => updatePrimaryCloudPreferences(input),
49});