Setu-TS
    Preparing search index...

    Interface IOutboxStore

    The outbox store port.

    Every method returns a promise that REJECTS on failure and never throws synchronously. Every transition atomically requires the expected status and kind equal to OUTBOX_RECORD_KIND. Claims compare and increment the read version; settlement compares the held version. Every read requires that discriminator. A custom store must honour these rules.

    0.9.0

    interface IOutboxStore {
        append(scope: IOutboxWriteScope, record: OutboxRecord): Promise<void>;
        claim(
            id: string,
            update: { claimVersion: number; leaseUntil: number },
        ): Promise<OutboxTransition>;
        failedKeys(limit: number): Promise<readonly OutboxKey[]>;
        markFailure(
            id: string,
            update: {
                attempts: number;
                availableAt: number;
                claimVersion: number;
                lastError: string;
                status: "failed" | "pending";
            },
        ): Promise<OutboxTransition>;
        markInvalid(id: string, now: number): Promise<OutboxTransition>;
        markSent(
            id: string,
            update: {
                claimVersion: number;
                deleteNow: boolean;
                sentBy: string;
                settledAt: number;
            },
        ): Promise<OutboxTransition>;
        purge(before: number, limit: number): Promise<number>;
        release(
            id: string,
            action: "retry" | "discard",
            now: number,
        ): Promise<OutboxTransition>;
        scanPending(
            after: string | undefined,
            limit: number,
        ): Promise<readonly OutboxRecord[]>;
        stats(): Promise<OutboxStoreStats>;
        verify(): Promise<void>;
    }
    Index
    • Claims a pending row at the read version, incrementing that version by one.

      Parameters

      • id: string

        The row id

      • update: { claimVersion: number; leaseUntil: number }

        The read version and the new lease expiry

        • ReadonlyclaimVersion: number

          Version read by the caller, in [0, Number.MAX_SAFE_INTEGER - 1].

          0.9.0

        • ReadonlyleaseUntil: number

          New claim expiry in epoch milliseconds.

          0.9.0

      Returns Promise<OutboxTransition>

      applied, missing, not-pending, or claim-lost

      0.9.0

    • Records a publish failure on a pending row at the held version, clearing its lease.

      Parameters

      • id: string

        The row id

      • update: {
            attempts: number;
            availableAt: number;
            claimVersion: number;
            lastError: string;
            status: "failed" | "pending";
        }

        The held version, attempt count, error line, retry time and status

        • Readonlyattempts: number
        • ReadonlyavailableAt: number
        • ReadonlyclaimVersion: number

          Version held by the publishing relay.

          0.9.0

        • ReadonlylastError: string
        • Readonlystatus: "failed" | "pending"

      Returns Promise<OutboxTransition>

      applied, or why nothing was written

    • Poisons an invalid pending row without a claim, preserving its attempts. Writes failed, invalid-row, availableAt: now, and leaseUntil: 0.

      Parameters

      • id: string

        The row id

      • now: number

        Epoch milliseconds

      Returns Promise<OutboxTransition>

      applied, missing, or not-pending

      0.9.0

    • Marks a pending row as sent (or deletes it when deleteNow is set).

      Parameters

      • id: string

        The row id

      • update: { claimVersion: number; deleteNow: boolean; sentBy: string; settledAt: number }

        The held version, settlement time, sending sweep and deletion policy

        • ReadonlyclaimVersion: number

          Version held by the sending relay.

          0.9.0

        • ReadonlydeleteNow: boolean

          Delete immediately instead of retaining the sent row.

          0.9.0

        • ReadonlysentBy: string

          Sending instance and sweep origin, for operator diagnostics.

          0.9.0

        • ReadonlysettledAt: number

          Settlement time in epoch milliseconds.

          0.9.0

      Returns Promise<OutboxTransition>

      applied, or why nothing was written

    • Deletes sent, then discarded, rows settled before before.

      Parameters

      • before: number

        Epoch milliseconds; rows with settledAt < before are deleted

      • limit: number

        Maximum rows deleted per status

      Returns Promise<number>

      The number of rows deleted (a row already gone counts zero)

    • Releases a failed row: retry returns it to pending with attempts: 0, availableAt: now, leaseUntil: 0 and no lastError, keeping its version; discard makes it discarded with settledAt: now.

      Parameters

      • id: string

        The row id

      • action: "retry" | "discard"

        retry or discard

      • now: number

        Epoch milliseconds

      Returns Promise<OutboxTransition>

      applied, missing, or not-failed

    • Reads pending rows in ascending position order.

      Applies NO availableAt filter: the relay decides what a row's backoff means for its key.

      Parameters

      • after: string | undefined

        Exclusive lower bound on position; undefined reads from the start

      • limit: number

        Maximum rows returned

      Returns Promise<readonly OutboxRecord[]>

      The rows, in position order

    • Refuses, at startup, a backend that cannot serve the outbox.

      Returns Promise<void>

      A promise that rejects naming why the store cannot serve