import * as Db from '../../db/Db.js'; import * as FundingDepositAddresses from '../../db/tables/fundingDepositAddresses.js'; import * as FundingDeposits from '../../db/tables/fundingDeposits.js'; import type * as Metrics from '../../Metrics.js'; import type * as Webhooks from '../Webhooks.js'; import * as Deposit from './Deposit.js'; import * as Provider from './Provider.js'; import * as Subsidy from './Subsidy.js'; /** Verified token transfer returned by an authoritative chain reader. */ export type TransferEvidence = { /** Token quantity in base units. */ amount: string; /** Verified sender account, when the chain exposes it. */ sender?: string | undefined; /** Verified transaction reference. */ transactionHash: string; /** Transfer position within the transaction. */ transferIndex: number; }; /** Authoritative chain-evidence reader used during deposit reconciliation. */ export type VerifyTransfers = (parameters: VerifyTransfers.Parameters) => Promise; /** Parameters passed to an authoritative chain-evidence reader. */ export declare namespace VerifyTransfers { type Parameters = { /** Account that must receive the token transfer. */ recipient: string; /** Chain containing the transaction. */ chain: Provider.ChainRef; /** Token that must be transferred. */ token: Provider.TokenRef; /** Provider-discovered transaction reference to verify. */ transactionHash: string; }; } /** Creates a reusable-address reconciliation tracker. */ export declare function createTracker(options: createTracker.Options): createTracker.Tracker; export declare namespace createTracker { /** Dependencies and bounds for deposit reconciliation. */ type Options = { /** Maximum addresses claimed by one scheduled tick. */ batchSize?: number | undefined; /** Authoritative database or per-invocation database factory. */ db: Db.Source; /** Durable reconciliation queue transport. */ dispatch: (message: Provider.Webhook.receive.Dispatchable, options?: createTracker.DispatchOptions) => Promise; /** Stages and dispatches committed funding deposit webhook updates. */ dispatchDepositUpdates?: ((references: readonly Webhooks.QueueReference[]) => Promise) | undefined; /** Duration of one reconciliation lease. */ leaseMs?: number | undefined; /** Optional bounded operational metrics sink. */ metrics?: Metrics.Metrics | undefined; /** Clock used for scheduling and tests. */ now?: (() => Date) | undefined; /** Delay before a successfully reconciled address is polled again. */ pollIntervalMs?: number | undefined; /** Configured funding provider integrations. */ providers: readonly Provider.Provider[]; /** Optional cancellation signal for provider reads. */ signal?: AbortSignal | undefined; /** Optional pathUSD-funded subsidy settler. */ subsidies?: Subsidy.Settler | undefined; /** Authoritative source and Tempo transfer verifier. */ verifyTransfers: VerifyTransfers; }; /** Delivery options for one reconciliation queue message. */ type DispatchOptions = { /** Delay before the queue makes the message available. */ delaySeconds: number; }; /** Result of reconciling one queue message. */ type ReconcileResult = { type: 'busy' | 'provider_unavailable' | 'stale'; } | { created: number; type: 'completed'; updated: number; }; /** Scheduled and queue-driven reusable-address tracker. */ type Tracker = { /** Reconciles one address from provider discovery and verified chain evidence. */ reconcile(message: Provider.Webhook.receive.Queued): Promise; /** Claims and enqueues one bounded batch of due reusable addresses. */ tick(): Promise<{ claimed: number; failed: number; }>; }; } /** Reconciles one provider request against verified chain evidence. */ export declare function reconcileRequest(db: Db.Db, options: reconcileRequest.Options): Promise; export declare namespace reconcileRequest { /** Provider request, address, and settlement dependencies. */ type Options = { /** Reusable deposit address attributed by the provider. */ address: FundingDepositAddresses.Record; /** Optional bounded operational metrics sink. */ metrics?: Metrics.Metrics | undefined; /** Observes the latest committed form of each verified deposit. */ onDeposit?: ((deposit: FundingDeposits.Record, references: readonly Webhooks.QueueReference[]) => void) | undefined; /** Provider integration that discovered the request. */ provider?: Provider.Provider | undefined; /** Provider request containing discovered chain transactions. */ request: Provider.listDepositAddressRequests.ReturnType['requests'][number]; /** Abort signal forwarded to provider delivery observation. */ signal?: AbortSignal | undefined; /** Optional pathUSD-funded subsidy settler. */ subsidies?: Subsidy.Settler | undefined; /** Mechanism that requested reconciliation. */ trigger?: Deposit.DetectionTrigger | undefined; /** Authoritative source and destination transfer verifier. */ verifyTransfers: VerifyTransfers; }; /** Material changes produced by one provider request. */ type ReturnType = { /** Number of newly detected source transfers. */ created: number; /** Work that needs a bounded delayed follow-up. */ followUp?: 'delivery' | 'settlement' | undefined; /** Whether every deposit from this request reached a terminal state. */ terminal: boolean; /** Number of existing or new deposits materially changed. */ updated: number; }; } /** Provider pagination exceeded the bounded reconciliation limit. */ export declare class PaginationLimitError extends Error { name: string; } /** The reconciliation lease was claimed by another worker. */ export declare class StaleLeaseError extends Error { name: string; } //# sourceMappingURL=Reconciliation.d.ts.map