import type { Observable } from 'rxjs';
import type { RaidenAction } from '../../actions';
import { messageReceived, messageSend, messageServiceSend } from '../../messages/actions';
import type { RaidenState } from '../../state';
import type { RaidenEpicDeps } from '../../types';
import { matrixPresence } from '../actions';
/**
 * Handles a [[messageSend.request]] action and send its message to peer through rtcChannel or
 * toDevice
 *
 * @param action$ - Observable of messageSend.request actions
 * @param state$ - Observable of RaidenStates
 * @param deps - RaidenEpicDeps members
 * @returns Observable of messageSend.success | messageSend.failure actions
 */
export declare function matrixMessageSendEpic(action$: Observable<RaidenAction>, {}: Observable<RaidenState>, deps: RaidenEpicDeps): Observable<messageSend.success | messageSend.failure | matrixPresence.request>;
/**
 * Handles a [[messageServiceSend.request]] action and send one-shot message to a service
 *
 * @param action$ - Observable of messageServiceSend actions
 * @param state$ - Observable of RaidenStates
 * @param deps - Epics dependencies
 * @returns Observable of messageServiceSend.success|failure actions
 */
export declare function matrixMessageServiceSendEpic(action$: Observable<RaidenAction>, {}: Observable<RaidenState>, deps: RaidenEpicDeps): Observable<messageServiceSend.success | messageServiceSend.failure>;
/**
 * Subscribe to matrix messages and emits MessageReceivedAction upon receiving a valid message from
 * an user of interest (one valid signature from an address we monitor) in a room we have for them
 *
 * @param action$ - Observable of RaidenActions
 * @param state$ - Observable of RaidenStates
 * @param deps - RaidenEpicDeps members
 * @param deps.log - Logger instance
 * @param deps.matrix$ - MatrixClient async subject
 * @param deps.config$ - Config observable
 * @param deps.latest$ - Latest values
 * @returns Observable of messageReceived|matrixPresence.request actions
 */
export declare function matrixMessageReceivedEpic(action$: Observable<RaidenAction>, {}: Observable<RaidenState>, { log, matrix$, config$, latest$ }: RaidenEpicDeps): Observable<messageReceived | matrixPresence.request>;
/**
 * Sends Delivered for specific messages
 *
 * @param action$ - Observable of messageReceived actions
 * @param state$ - Observable of RaidenStates
 * @param deps - RaidenEpicDeps members
 * @param deps.log - Logger instance
 * @param deps.signer - Signer instance
 * @returns Observable of messageSend.request actions
 */
export declare function deliveredEpic(action$: Observable<RaidenAction>, {}: Observable<RaidenState>, { log, signer }: RaidenEpicDeps): Observable<messageSend.request>;
