import type { CorrelationId, EffectOutcome, EffectRequest, SemanticEvent } from "../protocol.js"; export type EmailAddress = string & { readonly __emailAddress: unique symbol; }; export type State = { readonly kind: "Empty"; readonly version: number; } | { readonly kind: "Editing"; readonly email: string; readonly version: number; } | { readonly kind: "Invalid"; readonly email: string; readonly reason: string; readonly version: number; } | { readonly kind: "Checking"; readonly email: EmailAddress; readonly correlationId: CorrelationId; readonly version: number; } | { readonly kind: "Available"; readonly email: EmailAddress; readonly version: number; } | { readonly kind: "Unavailable"; readonly email: EmailAddress; readonly version: number; } | { readonly kind: "CheckFailed"; readonly email: EmailAddress; readonly retryable: boolean; readonly version: number; } | { readonly kind: "OutcomeUnknown"; readonly email: EmailAddress; readonly obligation: "ReconcileAvailability"; readonly version: number; }; export type Command = { readonly kind: "CommitEmail"; readonly value: string; } | { readonly kind: "CheckAvailability"; readonly capability: "Http"; readonly correlationId: CorrelationId; } | { readonly kind: "RecordAvailability"; readonly correlationId: CorrelationId; readonly outcome: EffectOutcome; }; export type TransitionError = { readonly kind: "IllegalFromCurrentState"; } | { readonly kind: "StaleEffectResult"; } | { readonly kind: "InvalidEmail"; readonly reason: string; }; export type TransitionResult = { readonly accepted: true; readonly state: State; readonly effects: readonly EffectRequest[]; } | { readonly accepted: false; readonly state: State; readonly error: TransitionError; }; export declare const initialState: () => State; export declare function decodeEmail(value: string): EmailAddress | null; export declare function eventToCommand(event: SemanticEvent, correlationId: CorrelationId): Command; export declare function transition(state: State, command: Command): TransitionResult; //# sourceMappingURL=domain.d.ts.map