import { Message, MessageError, MessagePeerType, PeerConnectionOptions, PeerSendOptions, RoutedMessage, ServiceMessage } from '@amadeus-it-group/microfrontends';
import { Observable } from 'rxjs';
import { InjectionToken } from '@angular/core';
import * as i0 from "@angular/core";
/**
 * Interface for the peer service that provides an observable for incoming messages
 */
export interface MessagePeerServiceType<M extends Message> extends Omit<MessagePeerType<M>, 'messages' | 'serviceMessages' | 'errors'> {
    /**
     * Observable for incoming messages
     */
    get messages$(): Observable<RoutedMessage<M>>;
    /**
     * Observable for incoming service messages
     */
    get serviceMessages$(): Observable<RoutedMessage<ServiceMessage>>;
    /**
     * Observable for peer local errors when processing messages
     */
    get errors$(): Observable<MessageError>;
}
/**
 * Configuration for the peer service that should be provided in the DI container before using the service
 */
export interface MessagePeerConfig {
    /**
     * Unique peer identifier on the network
     */
    id: string;
    /**
     * List of known messages that the peer can receive
     */
    knownMessages?: Message[];
}
/**
 * Injection token for {@link MessagePeerConfig}, required for the {@link MessagePeerService} configuration.
 */
export declare const MESSAGE_PEER_CONFIG: InjectionToken<MessagePeerConfig>;
/**
 * Injection token for {@link PeerConnectionOptions} used as default options to pass to {@link MessagePeerService#connect}.
 */
export declare const MESSAGE_PEER_CONNECT_OPTIONS: InjectionToken<PeerConnectionOptions>;
/**
 * Injection token for {@link PeerConnectionOptions} used as default options to pass to {@link MessagePeerService#listen}.
 */
export declare const MESSAGE_PEER_LISTEN_OPTIONS: InjectionToken<PeerConnectionOptions>;
/**
 * Angular service that wraps {@link MessagePeer} and provides an observable for incoming messages and errors
 * It is essentially just a wrapper around {@link MessagePeer} that integrates with Angular's DI system.
 */
export declare class MessagePeerService<M extends Message> implements MessagePeerServiceType<M> {
    #private;
    /**
     * @inheritDoc
     */
    messages$: Observable<RoutedMessage<M>>;
    /**
     * @inheritDoc
     */
    serviceMessages$: Observable<RoutedMessage<ServiceMessage>>;
    /**
     * @inheritDoc
     */
    errors$: Observable<MessageError>;
    constructor();
    /**
     * @inheritDoc
     */
    get id(): string;
    /**
     * @inheritDoc
     */
    get knownPeers(): Map<string, Message[]>;
    /**
     * @inheritDoc
     */
    listen(peerId: string, options?: PeerConnectionOptions): Promise<() => void>;
    /**
     * @inheritDoc
     */
    connect(peerId: string, options?: PeerConnectionOptions): Promise<() => void>;
    /**
     * @inheritDoc
     */
    registerMessage(message: Message): void;
    /**
     * @inheritDoc
     */
    send(message: M, options?: PeerSendOptions): void;
    /**
     * @inheritDoc
     */
    disconnect(peerId?: string): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<MessagePeerService<any>, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<MessagePeerService<any>>;
}
