import { Schema } from "effect" import { withStatics } from "@/util/schema" export const AccountID = Schema.String.pipe( Schema.brand("AccountId"), withStatics((s) => ({ make: (id: string) => s.makeUnsafe(id) })), ) export type AccountID = Schema.Schema.Type export const OrgID = Schema.String.pipe( Schema.brand("OrgId"), withStatics((s) => ({ make: (id: string) => s.makeUnsafe(id) })), ) export type OrgID = Schema.Schema.Type export const AccessToken = Schema.String.pipe( Schema.brand("AccessToken"), withStatics((s) => ({ make: (token: string) => s.makeUnsafe(token) })), ) export type AccessToken = Schema.Schema.Type export class Account extends Schema.Class("Account")({ id: AccountID, 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 type AccountError = AccountRepoError | AccountServiceError export class Login extends Schema.Class("Login")({ code: Schema.String, user: Schema.String, url: Schema.String, server: Schema.String, expiry: Schema.Number, interval: Schema.Number, }) {} 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