import type { Observable } from 'rxjs';
import type { RaidenAction } from '../../actions';
import { messageSend } from '../../messages/actions';
import type { RaidenState } from '../../state';
import { matrixPresence } from '../../transport/actions';
import type { RaidenEpicDeps } from '../../types';
import { withdraw, withdrawBusy, withdrawCompleted, withdrawExpire, withdrawMessage } from '../actions';
/**
 * Emits withdraw action once for each own non-confirmed message at startup
 *
 * @param state$ - Observable of RaidenStates
 * @returns Observable of withdrawMessage.request|withdrawExpire.success actions
 */
export declare function initWithdrawMessagesEpic({}: Observable<RaidenAction>, state$: Observable<RaidenState>): Observable<withdrawMessage.request | withdrawExpire.success>;
/**
 * Resolve a withdrawResolve action and emit withdraw.request
 * Resolving withdraws require that partner is online and contracts support `cooperativeSettle`.
 *
 * @param action$ - Observable of withdrawResolve actions
 * @param state$ - Observable of RaidenStates
 * @param deps - Epics dependencies
 * @param deps.getTokenNetworkContract - TokenNetwork contract getter
 * @returns Observable of withdraw.request|withdraw.failure actions
 */
export declare function withdrawResolveEpic(action$: Observable<RaidenAction>, {}: Observable<RaidenState>, { getTokenNetworkContract }: RaidenEpicDeps): Observable<matrixPresence.request | withdraw.request | withdraw.failure>;
/**
 * Retry sending 'WithdrawRequest' messages to partner until WithdrawConfirmation is received
 *
 * @param action$ - Observable of withdrawRequest.request actions
 * @param state$ - Observable of RaidenStates
 * @param deps - Epics dependencies
 * @param deps.config$ - Config observable
 * @returns Observable of messageSend.request actions
 */
export declare function withdrawSendRequestMessageEpic(action$: Observable<RaidenAction>, state$: Observable<RaidenState>, { config$ }: RaidenEpicDeps): Observable<messageSend.request>;
/**
 * Upon valid [[WithdrawConfirmation]], send the on-chain withdraw transaction
 *
 * @param action$ - Observable of withdrawMessage.success actions
 * @param state$ - Observable of RaidenStates
 * @param deps - Epics dependencies
 * @returns Observable of withdraw.success|withdraw.failure actions
 */
export declare function withdrawSendTxEpic(action$: Observable<RaidenAction>, {}: Observable<RaidenState>, deps: RaidenEpicDeps): Observable<withdraw.success | withdraw.failure | withdrawBusy>;
/**
 * Upon receiving withdraw request or confirmation, send partner the respective Processed message
 *
 * SDK-based clients (with caps.Delivery set) don't need it, so skip. They, instead, confirm
 * the request with the confirmation, and re-sends confirmation on request retries
 *
 * @param action$ - Observable of withdrawMessage.request|withdrawMessage.success actions
 * @param state$ - Observable of RaidenStates
 * @param deps - Epics dependencies
 * @param deps.signer - Signer instance
 * @param deps.log - Logger instance
 * @returns Observable of messageSend.request actions
 */
export declare function withdrawMessageProcessedEpic(action$: Observable<RaidenAction>, {}: Observable<RaidenState>, { signer, log }: RaidenEpicDeps): Observable<messageSend.request>;
/**
 * Dispatch withdrawExpire.request when one of our sent WithdrawRequests expired
 *
 * @param action$ - Observable of newBlock actions
 * @param state$ - Observable of RaidenStates
 * @param deps - Epics dependencies
 * @param deps.config$ - Config observable
 * @param deps.latest$ - Latest observable
 * @returns Observable of withdrawExpired actions
 */
export declare function withdrawAutoExpireEpic(action$: Observable<RaidenAction>, {}: Observable<RaidenState>, { config$, latest$ }: RaidenEpicDeps): Observable<withdrawExpire.request | withdraw.failure>;
/**
 * Retry sending own WithdrawExpired messages until Processed, completes withdraw then
 *
 * @param action$ - Observable of withdrawExpire.success actions
 * @param state$ - Observable of RaidenStates
 * @param deps - Epics dependencies
 * @param deps.config$ - Config observable
 * @returns Observable of messageSend.request actions
 */
export declare function withdrawSendExpireMessageEpic(action$: Observable<RaidenAction>, {}: Observable<RaidenState>, { config$ }: RaidenEpicDeps): Observable<messageSend.request | withdrawCompleted>;
