/** Exact trusted purchase context; a quote cannot select the ledger or cap. */ export interface SpendLedgerBinding { apiBaseUrl: string; paymentIssuer: string; payer: string; merchantId: string; scope: string; resource: string; networkMode: string; chain: string; asset: string; token: string; grossAmount: string; quoteId: string; /** Trusted factory identity shared by EVM/Solana payer keys. */ walletIdentity?: string; /** Independently sourced pre-sign rate/cap, bound only for Solana accounting. */ solanaAdmissionRateUsd?: string; solanaMaxFeeLamports?: string; solanaTransactionFeeLamports?: string; /** Makes older parsers refuse the durable pre-quote phase. */ quoteAdmissionVersion?: "1"; } export interface QuoteAdmission { id: string; ownerContext: string; requestBody: string; statement: string; quoteJson?: string; phase: "pending" | "monetary" | "terminal"; terminal?: "not-admitted" | "expired-unbroadcast"; wasReserved?: true; originalBinding: SpendLedgerBinding; } export interface SpendLedger { reserve(usd: number, cap: number, windowMs: number, binding?: SpendLedgerBinding, admissionId?: string): Promise; beginQuoteAdmission?(binding: SpendLedgerBinding, ownerContext: string, create: () => Promise<{ requestBody: string; statement: string; }>): Promise; adoptQuoteAdmission?(id: string, binding: SpendLedgerBinding, ownerContext: string, quoteJson: string): Promise; closeQuoteAdmission?(id: string, binding: SpendLedgerBinding, ownerContext: string, terminal: "not-admitted" | "expired-unbroadcast", quoteJson?: string): Promise; commit(id: string, actualUsd?: number): Promise; /** Caller must prove settlement never broadcast or reverted. */ release(id: string): Promise; total(windowMs: number): Promise; /** Required by capped v1.4 callers; old custom adapters fail before broadcast. */ prepare?(id: string, txRef: string, binding: SpendLedgerBinding): Promise; assertRecovery?(id: string, txRef: string, binding: SpendLedgerBinding): Promise; complete?(id: string, txRef: string, binding: SpendLedgerBinding): Promise; /** Exact canonical finalized failure only; retains an immutable fee-only ID. */ finalizeFailure?(id: string, txRef: string, binding: SpendLedgerBinding, feeUsd: number): Promise; } /** One-process implementation; use one shared instance or the local file ledger. */ export declare class MemorySpendLedger implements SpendLedger { private entries; private tail; private serial; reserve(usd: number, cap: number, windowMs: number, binding?: SpendLedgerBinding, admissionId?: string): Promise; commit(id: string, actualUsd?: number): Promise; release(id: string): Promise; total(windowMs: number): Promise; prepare(id: string, txRef: string, binding: SpendLedgerBinding): Promise; assertRecovery(id: string, txRef: string, binding: SpendLedgerBinding): Promise; complete(id: string, txRef: string, binding: SpendLedgerBinding): Promise; finalizeFailure(id: string, txRef: string, binding: SpendLedgerBinding, feeUsd: number): Promise; beginQuoteAdmission(binding: SpendLedgerBinding, context: string, create: () => Promise<{ requestBody: string; statement: string; }>): Promise; adoptQuoteAdmission(id: string, binding: SpendLedgerBinding, context: string, quoteJson: string): Promise; closeQuoteAdmission(id: string, binding: SpendLedgerBinding, context: string, terminal: "not-admitted" | "expired-unbroadcast", quoteJson?: string): Promise; } /** Shared cap for processes on one local filesystem; never a cross-host lock. */ export declare class FileSpendLedger implements SpendLedger { private readonly path; constructor(path: string); static forAgent(address: string): FileSpendLedger; private withLock; reserve(usd: number, cap: number, windowMs: number, binding?: SpendLedgerBinding, admissionId?: string): Promise; commit(id: string, actualUsd?: number): Promise; release(id: string): Promise; total(windowMs: number): Promise; prepare(id: string, txRef: string, binding: SpendLedgerBinding): Promise; assertRecovery(id: string, txRef: string, binding: SpendLedgerBinding): Promise; complete(id: string, txRef: string, binding: SpendLedgerBinding): Promise; finalizeFailure(id: string, txRef: string, binding: SpendLedgerBinding, feeUsd: number): Promise; beginQuoteAdmission(binding: SpendLedgerBinding, context: string, create: () => Promise<{ requestBody: string; statement: string; }>): Promise; adoptQuoteAdmission(id: string, binding: SpendLedgerBinding, context: string, quoteJson: string): Promise; closeQuoteAdmission(id: string, binding: SpendLedgerBinding, context: string, terminal: "not-admitted" | "expired-unbroadcast", quoteJson?: string): Promise; } //# sourceMappingURL=spendLedger.d.ts.map