import { AsyncStorageTaskQueue, TaskProcessor } from '@arkade-os/sdk/worker/expo';
import { Identity, ArkProvider, IndexerProvider, IWallet } from '@arkade-os/sdk';
import { m as SwapRepository, N as Network, r as BoltzSwapProvider, A as ArkadeSwapsConfig } from './types-BKEkNZxK.js';

/**
 * Dependencies injected into every swap processor at runtime.
 *
 * Unlike the wallet's `TaskDependencies`, these are swap-specific:
 * we need the Boltz provider, swap repository, and identity to
 * poll status and attempt claim/refund.
 */
interface SwapTaskDependencies {
    swapRepository: SwapRepository;
    swapProvider: BoltzSwapProvider;
    arkProvider: ArkProvider;
    indexerProvider: IndexerProvider;
    identity: Identity;
    wallet: IWallet;
}
/**
 * Minimal config persisted to AsyncStorage for background rehydration.
 *
 * The background handler runs in a fresh JS context without access to
 * the foreground's in-memory state, so we persist just enough to
 * reconstruct providers and identity.
 */
interface PersistedSwapBackgroundConfig {
    boltzApiUrl: string;
    arkServerUrl: string;
    network: Network;
}
/**
 * Background scheduling configuration for {@link ExpoArkadeSwaps}.
 *
 * OS-level task registration is **not** part of this config — call
 * `registerExpoSwapBackgroundTask` from `@arkade-os/boltz-swap/expo/background`
 * explicitly. Splitting that step out keeps `/expo` free of the
 * `expo-task-manager` / `expo-background-task` dependencies.
 */
interface ExpoSwapBackgroundConfig {
    /** Persistence layer for foreground ↔ background handoff. */
    taskQueue: AsyncStorageTaskQueue;
    /** If set, acknowledges background results at this interval (ms) while the app is in the foreground. */
    foregroundIntervalMs?: number;
}
/**
 * Options for {@link defineExpoSwapBackgroundTask}.
 */
interface DefineSwapBackgroundTaskOptions {
    /** AsyncStorage-backed queue (must match the one passed to ExpoArkadeSwaps.setup). */
    taskQueue: AsyncStorageTaskQueue;
    /** Swap repository (fresh instance is fine — connects to the same DB). */
    swapRepository: SwapRepository;
    /** Factory to reconstruct Identity from secure storage in the background. */
    identityFactory: () => Promise<Identity>;
}
/**
 * Configuration for {@link ExpoArkadeSwaps.setup}.
 */
interface ExpoArkadeSwapsConfig extends ArkadeSwapsConfig {
    /**
     * Ark server base URL (e.g. "https://ark.example.com").
     *
     * Recommended for type-safe background rehydration. If omitted,
     * ExpoArkadeSwaps will attempt to derive it from the ArkProvider.
     */
    arkServerUrl?: string;
    background: ExpoSwapBackgroundConfig;
}
/** @deprecated Use ExpoArkadeSwapsConfig instead */
type ExpoArkadeLightningConfig = ExpoArkadeSwapsConfig;

/**
 * Task type identifier for {@link swapsPollProcessor}.
 */
declare const SWAP_POLL_TASK_TYPE = "swap-poll";
/**
 * Stateless processor that polls Boltz for swap status updates and
 * attempts best-effort claim/refund for actionable swaps.
 *
 * Designed for Expo background tasks (~30s window) and follows the
 * same `TaskProcessor` pattern as `contractPollProcessor` in ts-sdk.
 *
 * Steps:
 * 1. Read all non-final swaps from SwapRepository
 * 2. Poll Boltz HTTP API for each swap's current status
 * 3. Persist status changes immediately
 * 4. For actionable statuses: attempt claimVHTLC / refundVHTLC (best-effort)
 * 5. Return summary metrics
 */
declare const swapsPollProcessor: TaskProcessor<SwapTaskDependencies>;

export { type DefineSwapBackgroundTaskOptions as D, type ExpoArkadeSwapsConfig as E, type PersistedSwapBackgroundConfig as P, SWAP_POLL_TASK_TYPE as S, type SwapTaskDependencies as a, type ExpoArkadeLightningConfig as b, type ExpoSwapBackgroundConfig as c, swapsPollProcessor as s };
