143 lines · 4.4 KB · TypeScript
RawDownload
import { DesktopSshEnvironmentTargetSchema, EnvironmentId } from "@t3tools/contracts";import * as Context from "effect/Context";import type * as Effect from "effect/Effect";import * as Option from "effect/Option";import * as Schema from "effect/Schema"; import type { ConnectionAttemptError } from "./model.ts";import {  BearerConnectionTarget,  PrimaryConnectionTarget,  RelayConnectionTarget,  SshConnectionTarget,  type ConnectionTarget,} from "./model.ts"; const ConnectionProfileBase = {  connectionId: Schema.String,  environmentId: EnvironmentId,  label: Schema.String,}; export class BearerConnectionProfile extends Schema.TaggedClass<BearerConnectionProfile>()(  "BearerConnectionProfile",  {    ...ConnectionProfileBase,    httpBaseUrl: Schema.String,    wsBaseUrl: Schema.String,  },) {} export class SshConnectionProfile extends Schema.TaggedClass<SshConnectionProfile>()(  "SshConnectionProfile",  {    ...ConnectionProfileBase,    target: DesktopSshEnvironmentTargetSchema,  },) {} export const ConnectionProfile = Schema.Union([BearerConnectionProfile, SshConnectionProfile]);export type ConnectionProfile = typeof ConnectionProfile.Type; export interface ConnectionCatalogEntry {  readonly target: ConnectionTarget;  readonly profile: Option.Option<ConnectionProfile>;} export class BearerConnectionCredential extends Schema.TaggedClass<BearerConnectionCredential>()(  "BearerConnectionCredential",  {    token: Schema.String,  },) {} export const ConnectionCredential = Schema.Union([BearerConnectionCredential]);export type ConnectionCredential = typeof ConnectionCredential.Type; export class PrimaryConnectionRegistration extends Schema.TaggedClass<PrimaryConnectionRegistration>()(  "PrimaryConnectionRegistration",  {    target: PrimaryConnectionTarget,  },) {} export class RelayConnectionRegistration extends Schema.TaggedClass<RelayConnectionRegistration>()(  "RelayConnectionRegistration",  {    target: RelayConnectionTarget,  },) {} export class BearerConnectionRegistration extends Schema.TaggedClass<BearerConnectionRegistration>()(  "BearerConnectionRegistration",  {    target: BearerConnectionTarget,    profile: BearerConnectionProfile,    credential: BearerConnectionCredential,  },) {} export class SshConnectionRegistration extends Schema.TaggedClass<SshConnectionRegistration>()(  "SshConnectionRegistration",  {    target: SshConnectionTarget,    profile: SshConnectionProfile,  },) {} export const ConnectionRegistration = Schema.Union([  RelayConnectionRegistration,  BearerConnectionRegistration,  SshConnectionRegistration,]);export type ConnectionRegistration = typeof ConnectionRegistration.Type; export function connectionRegistrationTarget(  registration: ConnectionRegistration | PrimaryConnectionRegistration,): ConnectionTarget {  return registration.target;} export function connectionRegistrationCatalogEntry(  registration: ConnectionRegistration | PrimaryConnectionRegistration,): ConnectionCatalogEntry {  switch (registration._tag) {    case "PrimaryConnectionRegistration":    case "RelayConnectionRegistration":      return {        target: registration.target,        profile: Option.none(),      };    case "BearerConnectionRegistration":    case "SshConnectionRegistration":      return {        target: registration.target,        profile: Option.some(registration.profile),      };  }} export class ConnectionProfileStore extends Context.Service<  ConnectionProfileStore,  {    readonly get: (      connectionId: string,    ) => Effect.Effect<Option.Option<ConnectionProfile>, ConnectionAttemptError>;    readonly put: (profile: ConnectionProfile) => Effect.Effect<void, ConnectionAttemptError>;    readonly remove: (connectionId: string) => Effect.Effect<void, ConnectionAttemptError>;  }>()("@t3tools/client-runtime/connection/catalog/ConnectionProfileStore") {} export class ConnectionCredentialStore extends Context.Service<  ConnectionCredentialStore,  {    readonly get: (      connectionId: string,    ) => Effect.Effect<Option.Option<ConnectionCredential>, ConnectionAttemptError>;    readonly put: (      connectionId: string,      credential: ConnectionCredential,    ) => Effect.Effect<void, ConnectionAttemptError>;    readonly remove: (connectionId: string) => Effect.Effect<void, ConnectionAttemptError>;  }>()("@t3tools/client-runtime/connection/catalog/ConnectionCredentialStore") {}