import { BaseUser, BaseUser as BaseUser$1, BroadcastProxy, ConnectionState, CrdtDocLike, EventMessage, EventNotifierSubscriptionCallback, EventRecord, EventRecord as EventRecord$1, IOEventMessage, IOLike, IORouterLike, Id, InferIOAuthorize, InferIOAuthorizeUser, InferIOCrdt, InferIOCrdtKind, InferIOEvents, InferIOInput, InferIOOutput, InputZodLike, JsonObject, MaybePromise, MergeEvents, MergeEvents as MergeEvents$1, ProcedureLike, RoomEventListenerMap, RoomLike, RoomLike as RoomLike$1, SubscribeProxy, UpdateMyPresenceAction, UserInfo, UserInfo as UserInfo$1, WebSocketConnection, WebSocketConnection as WebSocketConnection$1, WebSocketState } from "@pluv/types"; import { AbstractCrdtDocFactory, CrdtType, InferCrdtJson, InferCrdtJson as InferCrdtJson$1, InferDoc, InferDocLike, InferStorage, NoopCrdtDocFactory } from "@pluv/crdt"; //#region src/AbstractStorageStore.d.ts declare abstract class AbstractStorageStore { room: string; constructor(room: string); abstract addUpdate(update: string): Promise; abstract destroy(): Promise; abstract flatten(encodedState: string): Promise; abstract getShouldFlatten(): Promise; abstract getUpdates(start?: number): Promise; abstract initialize(): Promise; } //#endregion //#region src/utils/identity.d.ts declare const identity: (x: T) => T; //#endregion //#region src/infer.d.ts type InferCallback> = (i: typeof identity) => { io: (io: TIO) => TIO; }; declare const infer: >(callback: InferCallback) => InferCallback, InferIOCrdt, InferIOEvents>>; //#endregion //#region src/types.d.ts type EventResolver, TPresence extends Record, TDocLike extends CrdtDocLike> = (data: TInput, context: EventResolverContext) => MaybePromise; interface EventResolverContext, TDocLike extends CrdtDocLike> { doc: TDocLike; others: readonly UserInfo$1[]; room: string; user: UserInfo$1; } type InferMetadata> = TClient extends PluvClient ? IMetadata : never; type MergeEventRecords[], TRoot extends EventRecord$1 = {}> = TEventRecords extends [infer IHead extends EventRecord$1, ...infer ITail extends EventRecord$1[]] ? MergeEventRecords & { [P in keyof IHead]: TRoot extends Record ? TRoot[P] | IHead[P] : IHead[P] }> : Id; interface PluvClientLimits { /** * @description Maximum size of presence object in bytes */ presenceMaxSize?: number | null; } interface PublicKeyParams { metadata: TMetadata; } type PublicKey = string | ((params: PublicKeyParams) => string); type WithMetadata = keyof TMetadata extends never ? { metadata?: undefined; } : { metadata: TMetadata; }; //#endregion //#region src/PluvProcedure.d.ts interface PluvProcedureConfig, TPresence extends Record, TCrdt extends AbstractCrdtDocFactory> { broadcast?: EventResolver> | null; input?: InputZodLike; } declare class PluvProcedure, TPresence extends Record, TCrdt extends AbstractCrdtDocFactory, TFilled extends "input" | "broadcast" | ""> implements ProcedureLike { private _broadcast; private _input; get config(): ProcedureLike["config"]; constructor(config?: PluvProcedureConfig); broadcast = {}>(resolver: EventResolver>): Omit, TPresence, TCrdt, TFilled | "input" | "broadcast">, TFilled | "input" | "broadcast">; input(input: InputZodLike): Omit, TFilled | "input">; private _resolver; } //#endregion //#region src/CrdtManager.d.ts type CrdtManagerOptions> = { initialStorage?: TCrdt; }; //#endregion //#region src/PluvRouter.d.ts type PluvRouterEventConfig, TCrdt extends AbstractCrdtDocFactory> = { [P: string]: Pick, "config">; }; type MergedRouter[], TIO extends IOLike, TPresence extends Record, TCrdt extends AbstractCrdtDocFactory, TRoot extends TRouters[0]["_defs"]["events"]> = TRouters extends [infer IHead extends PluvRouter, ...infer ITail extends PluvRouter[]] ? MergedRouter : PluvRouter; declare class PluvRouter, TCrdt extends AbstractCrdtDocFactory, TEvents extends PluvRouterEventConfig = {}> implements IORouterLike { readonly _defs: { events: TEvents; }; constructor(events: TEvents); static merge[], TIO extends IOLike, TPresence extends Record, TCrdt extends AbstractCrdtDocFactory>(...routers: TRouters): MergedRouter; private _isValidEventName; } //#endregion //#region src/UsersManager.d.ts type UsersManagerConfig = {}> = { initialPresence?: TPresence; limits: PluvClientLimits; presence?: InputZodLike; }; //#endregion //#region src/PluvRoom.d.ts declare global { var process: { env: { [key: string]: string | undefined; }; }; } interface EndpointParams { metadata: TMetadata; room: string; } type AuthEndpoint = string | ((params: EndpointParams) => string | FetchOptions) | true; type WsEndpoint = string | ((params: EndpointParams) => string); type FetchOptions = { url: string; options?: RequestInit; }; type RoomEndpoints, TMetadata extends JsonObject> = { wsEndpoint?: WsEndpoint; } & (InferIOAuthorizeUser> extends BaseUser$1 ? { authEndpoint: AuthEndpoint; } : { authEndpoint?: undefined; }); type PluvRoomAddon, TCrdt extends AbstractCrdtDocFactory> = (input: PluvRoomAddonInput) => Partial; interface PluvRoomAddonInput, TCrdt extends AbstractCrdtDocFactory> { room: PluvRoom; } interface PluvRoomAddonResult { storage: AbstractStorageStore; } type PluvRoomDebug = Id<{ output: readonly (keyof InferIOOutput)[]; input: readonly (keyof InferIOInput)[]; }>; type RoomConnectParams = keyof TMetadata extends never ? [] : [WithMetadata]; interface ReconnectTimeoutMsParams { attempts: number; } type ReconnectTimeoutMs = number | ((params: ReconnectTimeoutMsParams) => number); type RoomConfig, TCrdt extends AbstractCrdtDocFactory, TEvents extends PluvRouterEventConfig>> = Id<{ addons?: readonly PluvRoomAddon[]; debug?: boolean | PluvRoomDebug; limits: PluvClientLimits; onAuthorizationFail?: (error: Error) => void; metadata?: InputZodLike; publicKey?: PublicKey; reconnectTimeoutMs?: ReconnectTimeoutMs; router?: PluvRouter, TEvents>; } & RoomEndpoints & Pick, "initialStorage"> & UsersManagerConfig>; declare class PluvRoom, TMetadata extends JsonObject = {}, TPresence extends Record = {}, TCrdt extends AbstractCrdtDocFactory = NoopCrdtDocFactory, TEvents extends PluvRouterEventConfig> = {}> implements RoomLike$1, TPresence, InferStorage> { #private; readonly _endpoints: RoomEndpoints; readonly id: string; readonly metadata?: InputZodLike; private readonly _crdtManager; private readonly _crdtNotifier; private readonly _debug; private readonly _eventNotifier; private readonly _intervals; private readonly _limits; private readonly _listenerManager; private readonly _listeners; private readonly _publicKey; private readonly _reconnectTimeoutMs; private readonly _router; private readonly _stateNotifier; private readonly _storageStore; private readonly _subscriptions; private readonly _timeouts; private readonly _usersManager; private readonly _usersNotifier; private _lastMetadata; private _state; private _windowListeners; private _wsListeners; constructor(room: string, options: RoomConfig); get webSocket(): WebSocket | null; addEventListener(kind: TKind, handler: RoomEventListenerMap[TKind]): () => void; broadcast: BroadcastProxy; canRedo: () => boolean; canUndo: () => boolean; connect(...args: RoomConnectParams): Promise; disconnect(): Promise; getConnection: () => WebSocketConnection$1; getDoc: () => CrdtDocLike, InferStorage>; getMyPresence: () => TPresence; getMyself: () => Id> | null; getOther: (connectionId: string) => Id> | null; getOthers: () => readonly Id>[]; getStorage: >(type: TKey) => InferStorage[TKey] | null; getStorageJson(): InferCrdtJson$1> | null; getStorageJson>(type: TKey): InferCrdtJson$1[TKey]> | null; getStorageLoaded: () => boolean; redo: () => void; subscribe: SubscribeProxy, TEvents>; transact: (fn: (storage: InferStorage) => void, origin?: string) => void; undo: () => void; updateMyPresence: (presence: UpdateMyPresenceAction) => void; private _addToStorageStore; private _attachWindowListeners; private _attachWsListeners; private _clearInterval; private _clearTimeout; private _closeWs; private _detachWindowListeners; private _detachWsListeners; private _emitSharedTypes; private _event; private _flattenStorageStore; private _getAddon; private _getAuthFetchOptions; private _getAuthorization; private _getPublicKey; private _getWsEndpoint; private _handleExit; private _handlePresenceUpdatedMessage; private _handleReceiveOthers; private _handleRegisteredMessage; private _handleStorageReceivedMessage; private _handleStorageUpdatedMessage; private _handleSyncStateReceived; private _handleUserJoinedMessage; private _heartbeat; private _logDebug; private _observeCrdt; private _onAuthorizationFail; private _onClose; /** * TODO * @description Handle websocket errors in a meaningful way, should they occur * @date August 19, 2022 */ private _onError; private _onMessage; private _onOpen; private _onNavigatorOffline; private _onNavigatorOnline; private _onVisibilityChange; private _onWindowFocus; private _other; private _parseMessage; private _pollReconnect; private _reconnect; private _sendMessage; private _setMetadata; private _updateState; } //#endregion //#region src/PluvClient.d.ts type PluvClientOptions, TPresence extends Record, TCrdt extends InferIOCrdtKind, TMetadata extends JsonObject> = RoomEndpoints & { debug?: boolean; /** * @description Configurable limits defined for client-side validation. You should only set * this if you control the server and have changed the limits there. */ limits?: PluvClientLimits; metadata?: InputZodLike; presence?: InputZodLike; publicKey?: PublicKey; types: InferCallback; } & (InferIOCrdtKind extends NoopCrdtDocFactory ? { initialStorage?: "[ERROR]: Must provide crdt to createIO to use storage"; } : { initialStorage?: TCrdt; }); type CreateRoomOptions, TPresence extends Record, TCrdt extends AbstractCrdtDocFactory, TMetadata extends JsonObject, TEvents extends PluvRouterEventConfig> = {}> = { addons?: readonly PluvRoomAddon>[]; debug?: boolean | PluvRoomDebug; initialPresence?: TPresence; initialStorage?: TCrdt; onAuthorizationFail?: (error: Error) => void; reconnectTimeoutMs?: ReconnectTimeoutMs; router?: PluvRouter, TEvents>; }; type EnterRoomParams = keyof TMetadata extends never ? [] : [WithMetadata]; declare class PluvClient, TPresence extends Record = {}, TCrdt extends InferIOCrdtKind = InferIOCrdtKind, TMetadata extends JsonObject = {}> { readonly metadata?: InputZodLike; private readonly _authEndpoint; private readonly _debug; private readonly _initialStorage?; private readonly _limits; private readonly _presence?; private readonly _publicKey; private readonly _rooms; private readonly _wsEndpoint; get _defs(): { initialStorage: TCrdt | undefined; }; get procedure(): PluvProcedure; constructor(options: PluvClientOptions); createRoom: > = {}>(room: string, options?: CreateRoomOptions) => PluvRoom; enter: (room: string | PluvRoom, ...args: EnterRoomParams) => Promise>; getRoom: (room: string) => PluvRoom | null; getRooms: () => readonly PluvRoom[]; leave: (room: string | PluvRoom) => Promise; router> = {}>(events: TEvents): PluvRouter, TEvents>; private _logDebug; } //#endregion //#region src/createClient.d.ts declare const createClient: , TPresence extends Record = {}, TCrdt extends InferIOCrdtKind = InferIOCrdtKind, TMetadata extends JsonObject = {}>(options: PluvClientOptions) => PluvClient; //#endregion //#region src/MockedRoom.d.ts type MockedRoomEvents = Partial<{ [P in keyof InferIOInput]: (data: Id[P]>) => Partial> }>; type MockedRoomConfig, TCrdt extends AbstractCrdtDocFactory, TEvents extends PluvRouterEventConfig>> = { events?: MockedRoomEvents>; limits?: PluvClientLimits; router?: PluvRouter, TEvents>; } & Pick, "initialStorage"> & Omit, "limits">; declare class MockedRoom, TCrdt extends AbstractCrdtDocFactory, TEvents extends PluvRouterEventConfig>> implements RoomLike$1, TPresence, InferStorage> { #private; readonly id: string; private readonly _crdtManager; private readonly _crdtNotifier; private readonly _eventNotifier; private readonly _events?; private readonly _limits; private readonly _usersNotifier; private readonly _router; private _state; private readonly _stateNotifier; private readonly _subscriptions; private readonly _usersManager; constructor(room: string, options: MockedRoomConfig); addEventListener(kind: TKind, handler: RoomEventListenerMap[TKind]): () => void; broadcast: BroadcastProxy; canRedo: () => boolean; canUndo: () => boolean; getConnection: () => WebSocketConnection$1; getDoc(): CrdtDocLike, InferStorage>; getMyPresence: () => TPresence; getMyself: () => Id> | null; getOther: (connectionId: string) => Id> | null; getOthers: () => readonly Id>[]; getStorage: >(type: TKey) => InferStorage[TKey] | null; getStorageJson(): InferCrdtJson$1> | null; getStorageJson>(type: TKey): InferCrdtJson$1[TKey]> | null; getStorageLoaded(): boolean; redo: () => void; storageRoot: (fn: (value: { [P in keyof InferStorage]: InferCrdtJson$1[P]> }) => void) => (() => void); subscribe: SubscribeProxy, TEvents>; transact: (fn: (storage: InferStorage) => void, origin?: string) => void; undo: () => void; updateMyPresence: (presence: UpdateMyPresenceAction) => void; private _event; private _observeCrdt; private _other; private _simulateEvent; } //#endregion //#region src/register.d.ts interface RegisterParams { authEndpoint: AuthEndpoint; publicKey: string; } declare const register: (params: RegisterParams) => { authEndpoint: AuthEndpoint; publicKey: string; wsEndpoint: (params: EndpointParams) => string; }; //#endregion export { AbstractStorageStore, type BaseUser, ConnectionState, type CrdtType, type CreateRoomOptions, type EnterRoomParams, type EventMessage, type EventNotifierSubscriptionCallback, type EventRecord, type IOEventMessage, type InferCallback, type InferCrdtJson, type InferMetadata, type MergeEvents, MockedRoom, type MockedRoomConfig, type MockedRoomEvents, PluvClient, type PluvClientOptions, type PluvProcedureConfig, PluvRoom, type PluvRoomAddon, type PluvRoomAddonInput, type PluvRoomAddonResult, type PluvRoomDebug, type PluvRouter, type PluvRouterEventConfig, type PublicKey, type PublicKeyParams, type RegisterParams, type RoomConnectParams, type RoomEndpoints, type RoomLike, type UserInfo, type WebSocketConnection, type WebSocketState, createClient, infer, register }; //# sourceMappingURL=index.d.mts.map