//#region src/channel/types.d.ts
type MessageBase = {
  requestID: string;
};
type RequestMessage<TType extends string = string, TData = void> = {
  type: TType;
  data: TData;
} & MessageBase;
type ResponseMessageBase = {
  status: number;
  msg: string;
} & MessageBase;
type SuccessResponseMessage<TData = void> = {
  data: TData;
  error?: never;
} & ResponseMessageBase;
type ErrorResponseMessage<TError = unknown> = {
  data?: never;
  error: unknown | TError;
} & ResponseMessageBase;
type ResponseMessage<TData = void, TError = unknown> = SuccessResponseMessage<TData> | ErrorResponseMessage<TError>;
type ExtractSuccessResponseMessage<TResponse extends UnknownResponseMessage> = Extract<TResponse, {
  error?: never;
}>;
type ExtractErrorResponseMessage<TResponse extends UnknownResponseMessage> = Extract<TResponse, {
  data?: never;
}>;
type UnknownRequestMessage = RequestMessage<string, unknown>;
type UnknownSuccessResponseMessage = SuccessResponseMessage<unknown>;
type UnknownErrorResponseMessage = ErrorResponseMessage<unknown>;
type UnknownResponseMessage = UnknownSuccessResponseMessage | UnknownErrorResponseMessage;
type UnknownMessage = UnknownRequestMessage | UnknownResponseMessage;
type Transaction<TRequest extends UnknownRequestMessage, TResponse extends UnknownResponseMessage = ResponseMessage<void>> = {
  request: TRequest;
  response: TResponse;
};
type TransactionMethod<TTransaction extends Transaction<UnknownRequestMessage, UnknownResponseMessage>> = (data: TTransaction["request"]["data"]) => Promise<ExtractSuccessResponseMessage<TTransaction["response"]>>;
type TransactionHandler<TTransaction extends Transaction<UnknownRequestMessage, UnknownResponseMessage>> = (request: TTransaction["request"], response: {
  success: (data: ExtractSuccessResponseMessage<TTransaction["response"]>["data"], status?: number) => ExtractSuccessResponseMessage<TTransaction["response"]>;
  error: (error: ExtractErrorResponseMessage<TTransaction["response"]>["error"], status?: number) => ExtractErrorResponseMessage<TTransaction["response"]>;
}) => Promise<TTransaction["response"]> | TTransaction["response"];
type TransactionsMethods<TTransactions extends Record<string, UnknownTransaction>> = { [Key in keyof TTransactions]: TransactionMethod<TTransactions[Key]> };
type TransactionsHandlers<TTransactions extends Record<string, UnknownTransaction>> = { [Key in keyof TTransactions]: TransactionHandler<TTransactions[Key]> };
type UnknownTransaction = Transaction<UnknownRequestMessage, UnknownResponseMessage>;
declare enum InternalEmitterRequestType {
  Connect = "connect"
}
type InternalEmitterTransactions<TReceiverOptions extends Record<string, unknown> = Record<string, unknown>> = {
  [InternalEmitterRequestType.Connect]: Transaction<RequestMessage<InternalEmitterRequestType.Connect, Partial<Omit<TReceiverOptions, "debug" | "requestIDPrefix" | "readyTimeout">> | undefined>>;
};
//#endregion
export { ErrorResponseMessage, ExtractSuccessResponseMessage, InternalEmitterTransactions, RequestMessage, ResponseMessage, SuccessResponseMessage, Transaction, TransactionMethod, TransactionsHandlers, TransactionsMethods, UnknownErrorResponseMessage, UnknownMessage, UnknownRequestMessage, UnknownResponseMessage, UnknownSuccessResponseMessage, UnknownTransaction };
//# sourceMappingURL=types.d.cts.map