export * as AccountV2 from "./account" import { Schema } from "effect" import type { HttpClientError } from "effect/unstable/http" export const ID = Schema.String.pipe(Schema.brand("AccountID")) export type ID = Schema.Schema.Type export const OrgID = Schema.String.pipe(Schema.brand("OrgID")) export type OrgID = Schema.Schema.Type export const AccessToken = Schema.String.pipe(Schema.brand("AccessToken")) export type AccessToken = Schema.Schema.Type export const RefreshToken = Schema.String.pipe(Schema.brand("RefreshToken")) export type RefreshToken = Schema.Schema.Type export const DeviceCode = Schema.String.pipe(Schema.brand("DeviceCode")) export type DeviceCode = Schema.Schema.Type export const UserCode = Schema.String.pipe(Schema.brand("UserCode")) export type UserCode = Schema.Schema.Type export class Info extends Schema.Class("Account")({ id: ID, email: Schema.String, url: Schema.String, active_org_id: Schema.NullOr(OrgID), }) {} export class Org extends Schema.Class("Org")({ id: OrgID, name: Schema.String, }) {} export class AccountRepoError extends Schema.TaggedErrorClass()("AccountRepoError", { message: Schema.String, cause: Schema.optional(Schema.Defect()), }) {} export class AccountServiceError extends Schema.TaggedErrorClass()("AccountServiceError", { message: Schema.String, cause: Schema.optional(Schema.Defect()), }) {} export class AccountTransportError extends Schema.TaggedErrorClass()("AccountTransportError", { method: Schema.String, url: Schema.String, description: Schema.optional(Schema.String), cause: Schema.optional(Schema.Defect()), }) { static fromHttpClientError(error: HttpClientError.TransportError): AccountTransportError { return new AccountTransportError({ method: error.request.method, url: error.request.url, description: error.description, cause: error.cause, }) } override get message(): string { return [ `Could not reach ${this.method} ${this.url}.`, `This failed before the server returned an HTTP response.`, this.description, `Check your network, proxy, or VPN configuration and try again.`, ] .filter(Boolean) .join("\n") } } export type AccountError = AccountRepoError | AccountServiceError | AccountTransportError export class Login extends Schema.Class("Login")({ code: DeviceCode, user: UserCode, url: Schema.String, server: Schema.String, expiry: Schema.Duration, interval: Schema.Duration, }) {} export class PollSuccess extends Schema.TaggedClass()("PollSuccess", { email: Schema.String, }) {} export class PollPending extends Schema.TaggedClass()("PollPending", {}) {} export class PollSlow extends Schema.TaggedClass()("PollSlow", {}) {} export class PollExpired extends Schema.TaggedClass()("PollExpired", {}) {} export class PollDenied extends Schema.TaggedClass()("PollDenied", {}) {} export class PollError extends Schema.TaggedClass()("PollError", { cause: Schema.Defect(), }) {} export const PollResult = Schema.Union([PollSuccess, PollPending, PollSlow, PollExpired, PollDenied, PollError]) export type PollResult = Schema.Schema.Type