@botmesh/core - v2.0.0-alpha.2
    Preparing search index...

    Interface InboxJournal

    Persistence contract of the inbound journal.

    interface InboxJournal {
        append(
            record: InboxAppend,
            now: number,
            lease?: LeaseOptions,
        ): Promise<{ status: "appended" | "duplicate"; record: InboxRecord }>;
        claim(options: ClaimOptions): Promise<InboxRecord[]>;
        claimOne(id: string, options: LeaseOptions): Promise<InboxRecord | null>;
        ack(id: string, token: number, now: number): Promise<void>;
        fail(
            id: string,
            token: number,
            error: string,
            options: { now: number; retryAt?: number; dead?: boolean },
        ): Promise<void>;
        release(id: string, token: number, now: number): Promise<void>;
        extend(id: string, token: number, leaseUntil: number): Promise<void>;
        replay(id: string, now: number): Promise<void>;
        get(id: string): Promise<InboxRecord | undefined>;
        list(
            filter?: { state?: InboxState; limit?: number },
        ): Promise<InboxRecord[]>;
        purge(
            options: { doneBefore: number; includeDead?: boolean },
        ): Promise<number>;
    }

    Implemented by

    Index
    • Insert-if-absent by id. 'duplicate' means the id is already known (any state); the existing record is returned unchanged. With lease, a new record is created already claimed (processing, token 1, 1 attempt), so no other claimer can take it between the append and the claim.

      Parameters

      Returns Promise<{ status: "appended" | "duplicate"; record: InboxRecord }>

    • Lease due records: pending/failed whose nextAttemptAt <= now, plus processing records whose lease expired. Oldest receivedAt first. Each claimed record comes back processing with a fresh fencingToken and attempts + 1.

      Parameters

      Returns Promise<InboxRecord[]>

    • processing → done.

      Parameters

      • id: string
      • token: number
      • now: number

      Returns Promise<void>

      when token is not the current claim.

    • processing → failed (due at retryAt, default now) or dead (dead: true).

      Parameters

      • id: string
      • token: number
      • error: string
      • options: { now: number; retryAt?: number; dead?: boolean }

      Returns Promise<void>

    • processing → pending, due now; the claim's attempt is not charged.

      Parameters

      • id: string
      • token: number
      • now: number

      Returns Promise<void>

    • Extend the current lease (heartbeat).

      Parameters

      • id: string
      • token: number
      • leaseUntil: number

      Returns Promise<void>

    • Operator replay: any record → pending, due now, attempts reset. No-op for an unknown id.

      Parameters

      • id: string
      • now: number

      Returns Promise<void>

    • Delete done records completed before doneBefore (and dead ones when includeDead). Returns the count.

      Parameters

      • options: { doneBefore: number; includeDead?: boolean }

      Returns Promise<number>