import { DesktopSshEnvironmentTargetSchema, EnvironmentId } from "@t3tools/contracts";import * as Option from "effect/Option";import * as Schema from "effect/Schema"; 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), }; }}
import { DesktopSshEnvironmentTargetSchema, EnvironmentId } from "@t3tools/contracts";
import * as Option from "effect/Option";
import * as Schema from "effect/Schema";
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),
};
}
}