import { ExtractSuccessResponseMessage, InternalEmitterTransactions, SuccessResponseMessage, TransactionsHandlers, UnknownRequestMessage, UnknownResponseMessage, UnknownTransaction } from "./types.cjs";
import { ChannelNetwork, ChannelNetworkOptions, PostRequestOptions } from "./ChannelNetwork.cjs";
import { AllChannelReceiverOptions } from "./ChannelReceiver.cjs";

//#region src/channel/ChannelEmitter.d.ts
type ChannelEmitterOptions = {
  connectTimeout: number;
};
type AllChannelEmitterOptions = ChannelEmitterOptions & ChannelNetworkOptions;
declare abstract class ChannelEmitter<TReceiverTransactions extends Record<string, UnknownTransaction> = Record<string, never>, TOptions extends Record<string, unknown> = Record<string, unknown>, TReceiverOptions extends Record<string, unknown> = Record<string, unknown>> extends ChannelNetwork<TReceiverTransactions, ChannelEmitterOptions & TOptions> {
  private _target;
  private _channel;
  protected get channel(): MessageChannel;
  protected set channel(channel: MessageChannel | null);
  private _receiverReady;
  private _receiverReadyCallback;
  private _connected;
  get connected(): boolean;
  constructor(target: HTMLIFrameElement, requestHandlers: TransactionsHandlers<TReceiverTransactions>, options: Partial<AllChannelEmitterOptions> & TOptions);
  /**
   * Initiates connection to receiver
   *
   * @param receiverOptions - Options to configure the receiver with
   * @param newOrigin - Indicates to the emitter that we're connecting to a new origin
   * @returns Success connect message
   */
  connect(receiverOptions?: InternalEmitterTransactions<AllChannelReceiverOptions & TReceiverOptions>["connect"]["request"]["data"], newOrigin?: boolean): Promise<SuccessResponseMessage>;
  /** Destroys current connection to receiver if any */
  disconnect(): void;
  /** Handles public messages */
  private _onPublicMessage;
  protected postFormattedRequest<TRequest extends UnknownRequestMessage, TResponse extends UnknownResponseMessage>(type: TRequest["type"], data?: TRequest["data"], options?: PostRequestOptions): Promise<ExtractSuccessResponseMessage<TResponse>>;
}
//#endregion
export { AllChannelEmitterOptions, ChannelEmitter };
//# sourceMappingURL=ChannelEmitter.d.cts.map