import type { Observable } from 'rxjs';
import type { RaidenAction } from '../../actions';
import type { RaidenState } from '../../state';
import type { RaidenEpicDeps } from '../../types';
import { channelSettle, channelSettleable } from '../actions';
/**
 * Process newBlocks, emits ChannelSettleableAction if any closed channel is now settleable
 *
 * @param action$ - Observable of newBlock actions
 * @param state$ - Observable of RaidenStates
 * @param deps - Epics dependencies
 * @param deps.getBlockTimestamp - Block's timestamp getter function
 * @param deps.latest$ - Latest observable
 * @returns Observable of channelSettleable actions
 */
export declare function channelSettleableEpic({}: Observable<RaidenAction>, state$: Observable<RaidenState>, { getBlockTimestamp, latest$ }: RaidenEpicDeps): Observable<channelSettleable>;
/**
 * If config.autoSettle is true, calls channelSettle.request on settleable channels
 * If partner is a LC and not the closing side, they're expected to wait [config.revealTimeout]
 * after channel becomes settleable before attempting to auto-settle, so we should attempt it
 * earlier [config.confirmationBlocks] after settleable. PCs always attempt earlier, so we should
 * wait longer regardless of who closed the channel, to avoid races and wasted gas; if even after
 * waiting (earlier or later) channel isn't settling/settled, we do it anyway.
 *
 * @param action$ - Observable of RaidenActions
 * @param state$ - Observable of RaidenStates
 * @param deps - RaidenEpicDeps members
 * @param deps.address - Our address
 * @param deps.config$ - Config observable
 * @returns Observable of channelSettle.request actions
 */
export declare function channelAutoSettleEpic(action$: Observable<RaidenAction>, state$: Observable<RaidenState>, { address, config$ }: RaidenEpicDeps): Observable<channelSettle.request>;
/**
 * A ChannelSettle action requested by user
 * Needs to be called on an settleable or settling (for retries) channel.
 * If tx goes through successfuly, stop as ChannelSettled success action will instead be detected
 * and reacted by channelEventsEpic.
 * If anything detectable goes wrong, fires a ChannelSettleActionFailed instead
 *
 * @param action$ - Observable of channelSettle actions
 * @param state$ - Observable of RaidenStates
 * @param deps - RaidenEpicDeps members
 * @param deps.log - Logger instance
 * @param deps.signer - Signer instance
 * @param deps.address - Our address
 * @param deps.main - Main signer/address
 * @param deps.provider - Provider instance
 * @param deps.getTokenNetworkContract - TokenNetwork contract instance getter
 * @param deps.config$ - Config observable
 * @param deps.latest$ - Latest observable
 * @param deps.db - Database instance
 * @returns Observable of channelSettle.failure actions
 */
export declare function channelSettleEpic(action$: Observable<RaidenAction>, state$: Observable<RaidenState>, deps: RaidenEpicDeps): Observable<channelSettle.failure>;
/**
 * When channel is settled, unlock any pending lock on-chain
 * TODO: check if it's worth it to also unlock partner's end
 * TODO: do it only if economically viable (and define what that means)
 *
 * @param action$ - Observable of channelSettle.success actions
 * @param state$ - Observable of RaidenStates
 * @param deps - RaidenEpicDeps members
 * @param deps.log - Logger instance
 * @param deps.signer - Signer instance
 * @param deps.address - Our address
 * @param deps.main - Main signer/address
 * @param deps.provider - Provider instance
 * @param deps.getTokenNetworkContract - TokenNetwork contract instance getter
 * @param deps.config$ - Config observable
 * @param deps.latest$ - Latest observable
 * @returns Empty observable
 */
export declare function channelUnlockEpic(action$: Observable<RaidenAction>, state$: Observable<RaidenState>, deps: RaidenEpicDeps): Observable<channelSettle.failure>;
