Skip to content
Source
Sign inSign up
Open History to see the last commit

onboarding.ts

46 lines1.6 KB

1import { ConnectionOnboarding } from "@t3tools/client-runtime/connection";
2import {
3 createAtomCommandScheduler,
4 createRuntimeCommand,
5} from "@t3tools/client-runtime/state/runtime";
6import type { EnvironmentId } from "@t3tools/contracts";
7import * as Effect from "effect/Effect";
8​
9import { connectionAtomRuntime } from "./runtime";
10​
11const onboardingScheduler = createAtomCommandScheduler();
12​
13export const connectPairingUrl = createRuntimeCommand(connectionAtomRuntime, {
14 label: "mobile:connection:connect-pairing-url",
15 scheduler: onboardingScheduler,
16 concurrency: {
17 mode: "singleFlight",
18 // The same link used for another machine needs its own expected-machine check.
19 key: (input: { readonly pairingUrl: string; readonly expectedEnvironmentId?: EnvironmentId }) =>
20 JSON.stringify([input.pairingUrl, input.expectedEnvironmentId ?? null]),
21 },
22 execute: (input: {
23 readonly pairingUrl: string;
24 readonly expectedEnvironmentId?: EnvironmentId;
25 }) =>
26 ConnectionOnboarding.ConnectionOnboarding.pipe(
27 Effect.flatMap((onboarding) => onboarding.registerPairing(input)),
28 ),
29});
30​
31export const updateBearerConnection = createRuntimeCommand(connectionAtomRuntime, {
32 label: "mobile:connection:update-bearer",
33 scheduler: onboardingScheduler,
34 concurrency: {
35 mode: "serial",
36 key: (input: { readonly environmentId: EnvironmentId }) => input.environmentId,
37 },
38 execute: (input: {
39 readonly environmentId: EnvironmentId;
40 readonly label: string;
41 readonly httpBaseUrl: string;
42 }) =>
43 ConnectionOnboarding.ConnectionOnboarding.pipe(
44 Effect.flatMap((onboarding) => onboarding.updateBearer(input)),
45 ),
46});