import type { Failure, Success } from "../async-op.ts"; import type { CurrentUser, FailurePayload, SessionInfo } from "../types.ts"; export type EmitterActor = { sendBack: (event: Outgoing) => void; }; export type PullResult = | Success<{ pulled: SyncedItem[] }> | Failure; export type PushResult = | Success<{ pushed: SyncedItem[]; pulled: SyncedItem[] }> | Failure; export type SyncedItem = { id: string; name: string; updatedTs: number; deleted: boolean; }; export type SyncAttempt = { startedTs: number; pull: PullResult | null; push: PushResult | null; }; export type MachineContext = { currentSync: SyncAttempt | null; lastSuccessfulSyncTs: number | null; currentUser: CurrentUser | null; sessionInfo: SessionInfo | null; pushOnceIdle: boolean; syncLog: SyncAttempt[]; }; export type MachineEvent = | { type: "push" } | { type: "pull" } | { type: "currentUser"; currentUser: CurrentUser } | { type: "serverUser"; serverUser: CurrentUser } | { type: "sessionInfo"; sessionInfo: SessionInfo } | { type: "sessionExpired" } | { type: "reset" };