import { Manager, ManagerOptions, Socket } from "socket.io-client";

//#region src/types.d.ts
type STCEventContext<T extends Record<string, any>> = T & {
  meta: {
    roomName?: string;
    roomId?: string | number;
  };
};
type EventTarget = string | number | undefined;
interface EventCallback<T = any> {
  (error: Error | null): void;
  (error: Error | null, data: T): void;
}
type DefaultEvents = {
  [event: string]: any;
};
type STSEvents = {
  [event: string]: (...args: any[]) => void;
};
type STCEvents = {
  [event: string]: (...args: any[]) => void;
};
type CTSEvents = {
  [event: string]: (...args: any[]) => void;
};
type DisconnectDescription = {
  description: string;
  context?: unknown;
};
//#endregion
//#region src/client/manager/types.d.ts
type ClientManagerTokenSyncFn = () => string | undefined;
type ClientManagerTokenAsyncFn = () => Promise<string | undefined>;
type ClientManagerTokenFn = ClientManagerTokenSyncFn | ClientManagerTokenAsyncFn;
type ClientManagerContext = {
  url: string;
  options?: Partial<ManagerOptions>;
  token?: string | ClientManagerTokenFn;
};
//#endregion
//#region src/client/manager/module.d.ts
declare class ClientManager<ListenEvents extends DefaultEvents = STCEvents, EmitEvents extends DefaultEvents = CTSEvents> {
  protected manager: Manager<ListenEvents, EmitEvents>;
  protected sockets: Map<string, Socket<ListenEvents, EmitEvents>>;
  protected tokenFn: ClientManagerTokenFn;
  constructor(ctx: ClientManagerContext);
  get options(): Partial<ManagerOptions>;
  connect(namespace?: string): Promise<Socket<ListenEvents, EmitEvents>>;
  disconnect(namespace?: string): Promise<void>;
  reconnect(namespace?: string): Promise<Socket<ListenEvents, EmitEvents>>;
  reconnectAll(): Promise<Socket<ListenEvents, EmitEvents>[]>;
  inject(namespace?: string): Socket<ListenEvents, EmitEvents>;
  eject(namespace?: string): void;
}
//#endregion
//#region src/event/constants.d.ts
declare enum EventNameSuffix {
  CREATED = "created",
  DELETED = "deleted",
  UPDATED = "updated",
  SUBSCRIBE = "subscribe",
  UNSUBSCRIBE = "unsubscribe"
}
//#endregion
//#region src/event/types.d.ts
type EventPayload = {
  event: string;
  type: string;
  data: Record<string, any>;
};
type EventFullName<ENTITY extends string = string, EVENT extends string = string> = `${ENTITY}${Capitalize<EVENT>}`;
//#endregion
//#region src/event/helpers.d.ts
declare function buildEventFullName<ENTITY extends string, VERB extends string>(entity: ENTITY, event: VERB): EventFullName<ENTITY, VERB>;
//#endregion
//#region src/helpers.d.ts
declare function isEventTarget(input: unknown): input is EventTarget;
declare function isEventCallback(input: unknown, fnArgs?: number): input is EventCallback;
//#endregion
export { CTSEvents, ClientManager, ClientManagerContext, ClientManagerTokenAsyncFn, ClientManagerTokenFn, ClientManagerTokenSyncFn, DefaultEvents, DisconnectDescription, EventCallback, EventFullName, EventNameSuffix, EventPayload, EventTarget, STCEventContext, STCEvents, STSEvents, buildEventFullName, isEventCallback, isEventTarget };
//# sourceMappingURL=index.d.mts.map