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

    Interface OutboxJournal

    Persistence contract of the outbound journal.

    interface OutboxJournal {
        put(
            record: OutboxPut,
            now: number,
            lease?: LeaseOptions,
        ): Promise<{ status: "created" | "exists"; record: OutboxRecord }>;
        begin(key: string, options: LeaseOptions): Promise<OutboxRecord | null>;
        markSent(
            key: string,
            token: number,
            result: { ref: MessageRef },
            now: number,
        ): Promise<void>;
        extend(key: string, token: number, leaseUntil: number): Promise<void>;
        markFailed(
            key: string,
            token: number,
            error: OutboxError,
            options: {
                now: number;
                retryAt?: number;
                dead?: boolean;
                refund?: boolean;
            },
        ): Promise<void>;
        claimDue(options: OutboxClaimOptions): Promise<ClaimedSend[]>;
        resolveAmbiguous(
            key: string,
            token: number,
            to: "unknown" | "pending",
            now: number,
        ): Promise<void>;
        get(key: string): Promise<OutboxRecord | undefined>;
        list(
            filter?: { state?: OutboxState; chatId?: string; limit?: number },
        ): Promise<OutboxRecord[]>;
        retry(key: string, now: number): Promise<void>;
        discard(key: string): Promise<void>;
        purge(options: { before: number }): Promise<number>;
    }

    Implemented by

    Index
    • Insert-if-absent by key; on conflict the existing record is returned unchanged ('exists'). With lease, a new record is created already begun (sending, token 1, 1 attempt).

      Parameters

      Returns Promise<{ status: "created" | "exists"; record: OutboxRecord }>

    • sending → sent with the provider ref.

      Parameters

      • key: string
      • token: number
      • result: { ref: MessageRef }
      • now: number

      Returns Promise<void>

    • Extend the lease of a sending record (heartbeat while the provider call runs).

      Parameters

      • key: string
      • token: number
      • leaseUntil: number

      Returns Promise<void>

    • sending → failed (due at retryAt) or dead. With refund, the claim made no provider call (a split part deferred behind an earlier one): the attempt it counted is given back, so waiting never uses up the record's retries.

      Parameters

      • key: string
      • token: number
      • error: OutboxError
      • options: { now: number; retryAt?: number; dead?: boolean; refund?: boolean }

      Returns Promise<void>

    • Settle an ambiguous claim: 'unknown' (terminal) or 'pending' (send again).

      Parameters

      • key: string
      • token: number
      • to: "unknown" | "pending"
      • now: number

      Returns Promise<void>

    • Operator retry: failed/dead/unknown → pending, due now.

      Parameters

      • key: string
      • now: number

      Returns Promise<void>

    • Operator discard: delete the record (a later send with the same key goes out again).

      Parameters

      • key: string

      Returns Promise<void>

    • Delete terminal records completed before before. Returns the count.

      Parameters

      • options: { before: number }

      Returns Promise<number>