@pluv/client 0.25.3 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +8 -8
- package/CHANGELOG.md +61 -0
- package/dist/index.d.mts +76 -67
- package/dist/index.d.ts +76 -67
- package/dist/index.js +181 -179
- package/dist/index.mjs +181 -179
- package/package.json +5 -5
- package/src/PluvClient.ts +20 -19
- package/src/PluvRoom.ts +37 -21
- package/src/createClient.ts +5 -3
- package/src/index.ts +8 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @pluv/client@0.
|
|
2
|
+
> @pluv/client@0.26.0 build /home/runner/work/pluv/pluv/packages/client
|
|
3
3
|
> tsup src/index.ts --format esm,cjs --dts
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/index.ts
|
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
[34mCLI[39m Target: es6
|
|
9
9
|
[34mESM[39m Build start
|
|
10
10
|
[34mCJS[39m Build start
|
|
11
|
-
[
|
|
12
|
-
[
|
|
13
|
-
[
|
|
14
|
-
[
|
|
11
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m42.38 KB[39m
|
|
12
|
+
[32mESM[39m ⚡️ Build success in 133ms
|
|
13
|
+
[32mCJS[39m [1mdist/index.js [22m[32m43.65 KB[39m
|
|
14
|
+
[32mCJS[39m ⚡️ Build success in 134ms
|
|
15
15
|
[34mDTS[39m Build start
|
|
16
|
-
[32mDTS[39m ⚡️ Build success in
|
|
17
|
-
[32mDTS[39m [1mdist/index.d.mts [22m[
|
|
18
|
-
[32mDTS[39m [1mdist/index.d.ts [22m[
|
|
16
|
+
[32mDTS[39m ⚡️ Build success in 3009ms
|
|
17
|
+
[32mDTS[39m [1mdist/index.d.mts [22m[32m15.43 KB[39m
|
|
18
|
+
[32mDTS[39m [1mdist/index.d.ts [22m[32m15.43 KB[39m
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,66 @@
|
|
|
1
1
|
# @pluv/client
|
|
2
2
|
|
|
3
|
+
## 0.26.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 19e5dda: **BREAKING**
|
|
8
|
+
Update `authEndpoint` and `wsEndpoint` to now use a parameterized object that passes through additional data via a `metadata` property.
|
|
9
|
+
|
|
10
|
+
```tsx
|
|
11
|
+
// Before
|
|
12
|
+
|
|
13
|
+
import { env } from "./env";
|
|
14
|
+
import type { ioServer } from "./server";
|
|
15
|
+
|
|
16
|
+
const client = createClient<typeof ioServer>({
|
|
17
|
+
authEndpoint: (room: string) => `${env.API_URL}}/room/${room}`,
|
|
18
|
+
wsEndpoint: (room: string) => `${env.WS_URL}/room/${room}`,
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// After
|
|
22
|
+
|
|
23
|
+
const client = createClient<
|
|
24
|
+
typeof ioServer,
|
|
25
|
+
// Optional: You can specify types for metadata here. This is useful for Cloudflare Pages
|
|
26
|
+
{ apiUrl: string; wsUrl: string }
|
|
27
|
+
>({
|
|
28
|
+
authEndpoint: ({ metadata, room }) => `${metadata.apiUrl}}/room/${room}`,
|
|
29
|
+
wsEndpoint: ({ metadata, room }) => `${{ metadata.wsUrl }}/room/${room}`,
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
client.createRoom("my-room", {
|
|
33
|
+
// This property exists when the `metadata` generic type is defined above
|
|
34
|
+
metadata: {
|
|
35
|
+
apiUrl: "https://example.com/api",
|
|
36
|
+
wsUrl: "wss://example.com/api",
|
|
37
|
+
},
|
|
38
|
+
// ...
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
<PluvRoomProvider
|
|
42
|
+
// This property exists when the `metadata` generic type is defined above
|
|
43
|
+
metadata={{
|
|
44
|
+
apiUrl: "https://example.com/api",
|
|
45
|
+
wsUrl: "wss://example.com/api",
|
|
46
|
+
}}
|
|
47
|
+
>
|
|
48
|
+
{/* ... */}
|
|
49
|
+
</PluvRoomProvider>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Patch Changes
|
|
53
|
+
|
|
54
|
+
- @pluv/crdt@0.26.0
|
|
55
|
+
- @pluv/types@0.26.0
|
|
56
|
+
|
|
57
|
+
## 0.25.4
|
|
58
|
+
|
|
59
|
+
### Patch Changes
|
|
60
|
+
|
|
61
|
+
- @pluv/crdt@0.25.4
|
|
62
|
+
- @pluv/types@0.25.4
|
|
63
|
+
|
|
3
64
|
## 0.25.3
|
|
4
65
|
|
|
5
66
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -97,48 +97,6 @@ type UsersManagerConfig<TPresence extends JsonObject = {}> = {
|
|
|
97
97
|
presence?: InputZodLike<TPresence>;
|
|
98
98
|
};
|
|
99
99
|
|
|
100
|
-
type MockedRoomEvents<TIO extends IOLike> = Partial<{
|
|
101
|
-
[P in keyof InferIOInput<TIO>]: (data: Id<InferIOInput<TIO>[P]>) => Partial<InferIOOutput<TIO>>;
|
|
102
|
-
}>;
|
|
103
|
-
type MockedRoomConfig<TIO extends IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = {
|
|
104
|
-
events?: MockedRoomEvents<TIO>;
|
|
105
|
-
} & Omit<CrdtManagerOptions<TStorage>, "encodedState"> & UsersManagerConfig<TPresence>;
|
|
106
|
-
declare class MockedRoom<TIO extends IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> extends AbstractRoom<TIO, TPresence, TStorage> {
|
|
107
|
-
private _crdtManager;
|
|
108
|
-
private _crdtNotifier;
|
|
109
|
-
private _eventNotifier;
|
|
110
|
-
private _events?;
|
|
111
|
-
private _otherNotifier;
|
|
112
|
-
private _state;
|
|
113
|
-
private _stateNotifier;
|
|
114
|
-
private _subscriptions;
|
|
115
|
-
private _usersManager;
|
|
116
|
-
constructor(room: string, options: MockedRoomConfig<TIO, TPresence, TStorage>);
|
|
117
|
-
get storageLoaded(): boolean;
|
|
118
|
-
broadcast<TEvent extends keyof InferIOInput<TIO>>(event: TEvent, data: Id<InferIOInput<TIO>[TEvent]>): void;
|
|
119
|
-
canRedo: () => boolean;
|
|
120
|
-
canUndo: () => boolean;
|
|
121
|
-
event: <TEvent extends keyof InferIOOutput<TIO>>(event: TEvent, callback: EventNotifierSubscriptionCallback<TIO, TEvent>) => (() => void);
|
|
122
|
-
getConnection: () => WebSocketConnection;
|
|
123
|
-
getDoc(): AbstractCrdtDoc<TStorage>;
|
|
124
|
-
getMyPresence: () => TPresence;
|
|
125
|
-
getMyself: () => Id<UserInfo<TIO, TPresence>> | null;
|
|
126
|
-
getOther: (connectionId: string) => Id<UserInfo<TIO, TPresence>> | null;
|
|
127
|
-
getOthers: () => readonly Id<UserInfo<TIO, TPresence>>[];
|
|
128
|
-
getStorage: <TKey extends keyof TStorage>(type: TKey) => TStorage[TKey] | null;
|
|
129
|
-
getStorageJson(): InferCrdtJson<TStorage> | null;
|
|
130
|
-
getStorageJson<TKey extends keyof TStorage>(type: TKey): InferCrdtJson<TStorage[TKey]> | null;
|
|
131
|
-
other: (connectionId: string, callback: OtherNotifierSubscriptionCallback<TIO>) => (() => void);
|
|
132
|
-
redo: () => void;
|
|
133
|
-
storage: <TKey extends keyof TStorage>(key: TKey, fn: (value: InferCrdtJson<TStorage[TKey]>) => void) => (() => void);
|
|
134
|
-
storageRoot: (fn: (value: { [P in keyof TStorage]: InferCrdtJson<TStorage[P]>; }) => void) => (() => void);
|
|
135
|
-
subscribe: <TSubject extends keyof StateNotifierSubjects<TIO, TPresence>>(name: TSubject, callback: SubscriptionCallback<TIO, TPresence, TSubject>) => (() => void);
|
|
136
|
-
transact: (fn: (storage: TStorage) => void, origin?: string) => void;
|
|
137
|
-
undo: () => void;
|
|
138
|
-
updateMyPresence: (presence: UpdateMyPresenceAction<TPresence>) => void;
|
|
139
|
-
private _observeCrdt;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
100
|
declare global {
|
|
143
101
|
var process: {
|
|
144
102
|
env: {
|
|
@@ -146,22 +104,26 @@ declare global {
|
|
|
146
104
|
};
|
|
147
105
|
};
|
|
148
106
|
}
|
|
149
|
-
|
|
150
|
-
|
|
107
|
+
interface EndpointParams<TMetadata extends JsonObject> {
|
|
108
|
+
metadata: TMetadata;
|
|
109
|
+
room: string;
|
|
110
|
+
}
|
|
111
|
+
type AuthEndpoint<TMetadata extends JsonObject> = string | ((params: EndpointParams<TMetadata>) => string | FetchOptions) | true;
|
|
112
|
+
type WsEndpoint<TMetadata extends JsonObject> = string | ((params: EndpointParams<TMetadata>) => string);
|
|
151
113
|
type FetchOptions = {
|
|
152
114
|
url: string;
|
|
153
115
|
options?: RequestInit;
|
|
154
116
|
};
|
|
155
|
-
type RoomEndpoints<TIO extends IOLike> = {
|
|
156
|
-
wsEndpoint?: WsEndpoint
|
|
117
|
+
type RoomEndpoints<TIO extends IOLike, TMetadata extends JsonObject> = {
|
|
118
|
+
wsEndpoint?: WsEndpoint<TMetadata>;
|
|
157
119
|
} & (InferIOAuthorizeRequired<InferIOAuthorize<TIO>> extends true ? {
|
|
158
|
-
authEndpoint: AuthEndpoint
|
|
120
|
+
authEndpoint: AuthEndpoint<TMetadata>;
|
|
159
121
|
} : {
|
|
160
122
|
authEndpoint?: undefined;
|
|
161
123
|
});
|
|
162
|
-
type PluvRoomAddon<TIO extends IOLike = IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = (input: PluvRoomAddonInput<TIO, TPresence, TStorage>) => Partial<PluvRoomAddonResult>;
|
|
163
|
-
interface PluvRoomAddonInput<TIO extends IOLike = IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> {
|
|
164
|
-
room: PluvRoom<TIO, TPresence, TStorage>;
|
|
124
|
+
type PluvRoomAddon<TIO extends IOLike = IOLike, TMetadata extends JsonObject = {}, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = (input: PluvRoomAddonInput<TIO, TMetadata, TPresence, TStorage>) => Partial<PluvRoomAddonResult>;
|
|
125
|
+
interface PluvRoomAddonInput<TIO extends IOLike = IOLike, TMetadata extends JsonObject = {}, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> {
|
|
126
|
+
room: PluvRoom<TIO, TMetadata, TPresence, TStorage>;
|
|
165
127
|
}
|
|
166
128
|
interface PluvRoomAddonResult {
|
|
167
129
|
storage: AbstractStorageStore;
|
|
@@ -170,20 +132,25 @@ type PluvRoomDebug<TIO extends IOLike> = Id<{
|
|
|
170
132
|
output: readonly (keyof InferIOOutput<TIO>)[];
|
|
171
133
|
input: readonly (keyof InferIOInput<TIO>)[];
|
|
172
134
|
}>;
|
|
173
|
-
type PluvRoomOptions<TIO extends IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = {
|
|
174
|
-
addons?: readonly PluvRoomAddon<TIO, TPresence, TStorage>[];
|
|
135
|
+
type PluvRoomOptions<TIO extends IOLike, TMetadata extends JsonObject = {}, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = {
|
|
136
|
+
addons?: readonly PluvRoomAddon<TIO, TMetadata, TPresence, TStorage>[];
|
|
175
137
|
debug?: boolean | PluvRoomDebug<TIO>;
|
|
176
138
|
onAuthorizationFail?: (error: Error) => void;
|
|
177
|
-
} & Omit<CrdtManagerOptions<TStorage>, "encodedState"> & UsersManagerConfig<TPresence
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
139
|
+
} & Omit<CrdtManagerOptions<TStorage>, "encodedState"> & UsersManagerConfig<TPresence> & (keyof TMetadata extends never ? {
|
|
140
|
+
metadata?: undefined;
|
|
141
|
+
} : {
|
|
142
|
+
metadata: TMetadata;
|
|
143
|
+
});
|
|
144
|
+
type RoomConfig<TIO extends IOLike, TMetadata extends JsonObject = {}, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = RoomEndpoints<TIO, TMetadata> & PluvRoomOptions<TIO, TMetadata, TPresence, TStorage>;
|
|
145
|
+
declare class PluvRoom<TIO extends IOLike, TMetadata extends JsonObject = {}, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> extends AbstractRoom<TIO, TPresence, TStorage> {
|
|
146
|
+
readonly _endpoints: RoomEndpoints<TIO, TMetadata>;
|
|
181
147
|
private _crdtManager;
|
|
182
148
|
private _crdtNotifier;
|
|
183
149
|
private _debug;
|
|
184
150
|
private _eventNotifier;
|
|
185
151
|
private _intervals;
|
|
186
152
|
private _listeners;
|
|
153
|
+
private _metadata;
|
|
187
154
|
private _otherNotifier;
|
|
188
155
|
private _state;
|
|
189
156
|
private _stateNotifier;
|
|
@@ -193,7 +160,7 @@ declare class PluvRoom<TIO extends IOLike, TPresence extends JsonObject = {}, TS
|
|
|
193
160
|
private _windowListeners;
|
|
194
161
|
private _wsListeners;
|
|
195
162
|
private _usersManager;
|
|
196
|
-
constructor(room: string, options: RoomConfig<TIO, TPresence, TStorage>);
|
|
163
|
+
constructor(room: string, options: RoomConfig<TIO, TMetadata, TPresence, TStorage>);
|
|
197
164
|
get storageLoaded(): boolean;
|
|
198
165
|
get webSocket(): WebSocket | null;
|
|
199
166
|
broadcast: (<TEvent extends keyof InferIOInput<TIO>>(event: TEvent, data: Id<InferIOInput<TIO>[TEvent]>) => void) & { [event in keyof InferIOInput<TIO>]: (data: Id<InferIOInput<TIO>[event]>) => void; };
|
|
@@ -270,23 +237,65 @@ declare class PluvRoom<TIO extends IOLike, TPresence extends JsonObject = {}, TS
|
|
|
270
237
|
private _updateState;
|
|
271
238
|
}
|
|
272
239
|
|
|
273
|
-
type PluvClientOptions<TIO extends IOLike> = RoomEndpoints<TIO> & {
|
|
240
|
+
type PluvClientOptions<TIO extends IOLike, TMetadata extends JsonObject> = RoomEndpoints<TIO, TMetadata> & {
|
|
274
241
|
debug?: boolean;
|
|
275
242
|
};
|
|
276
|
-
declare class PluvClient<TIO extends IOLike = IOLike> {
|
|
243
|
+
declare class PluvClient<TIO extends IOLike = IOLike, TMetadata extends JsonObject = {}> {
|
|
277
244
|
private _authEndpoint;
|
|
278
245
|
private _debug;
|
|
279
246
|
private _wsEndpoint;
|
|
280
247
|
private _rooms;
|
|
281
|
-
constructor(options: PluvClientOptions<TIO>);
|
|
282
|
-
createRoom: <TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}>(room: string, options: PluvRoomOptions<TIO, TPresence, TStorage>) => PluvRoom<TIO, TPresence, TStorage>;
|
|
283
|
-
enter: (room: string | PluvRoom<TIO, any, any>) => Promise<PluvRoom<TIO, JsonObject, any>>;
|
|
284
|
-
getRoom: <TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}>(room: string) => PluvRoom<TIO, TPresence, TStorage> | null;
|
|
285
|
-
getRooms: () => readonly PluvRoom<TIO, JsonObject, any>[];
|
|
286
|
-
leave: (room: string | PluvRoom<TIO, any, any>) => Promise<void>;
|
|
248
|
+
constructor(options: PluvClientOptions<TIO, TMetadata>);
|
|
249
|
+
createRoom: <TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}>(room: string, options: PluvRoomOptions<TIO, TMetadata, TPresence, TStorage>) => PluvRoom<TIO, TMetadata, TPresence, TStorage>;
|
|
250
|
+
enter: (room: string | PluvRoom<TIO, any, any, any>) => Promise<PluvRoom<TIO, TMetadata, JsonObject, any>>;
|
|
251
|
+
getRoom: <TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}>(room: string) => PluvRoom<TIO, TMetadata, TPresence, TStorage> | null;
|
|
252
|
+
getRooms: () => readonly PluvRoom<TIO, TMetadata, JsonObject, any>[];
|
|
253
|
+
leave: (room: string | PluvRoom<TIO, any, any, any>) => Promise<void>;
|
|
287
254
|
private _logDebug;
|
|
288
255
|
}
|
|
289
256
|
|
|
290
|
-
declare const createClient: <TIO extends IOLike = IOLike<_pluv_types.IOAuthorize<any, any, any>, {}
|
|
257
|
+
declare const createClient: <TIO extends IOLike = IOLike<_pluv_types.IOAuthorize<any, any, any>, {}>, TMetadata extends JsonObject = {}>(options: PluvClientOptions<TIO, TMetadata>) => PluvClient<TIO, TMetadata>;
|
|
258
|
+
|
|
259
|
+
type MockedRoomEvents<TIO extends IOLike> = Partial<{
|
|
260
|
+
[P in keyof InferIOInput<TIO>]: (data: Id<InferIOInput<TIO>[P]>) => Partial<InferIOOutput<TIO>>;
|
|
261
|
+
}>;
|
|
262
|
+
type MockedRoomConfig<TIO extends IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = {
|
|
263
|
+
events?: MockedRoomEvents<TIO>;
|
|
264
|
+
} & Omit<CrdtManagerOptions<TStorage>, "encodedState"> & UsersManagerConfig<TPresence>;
|
|
265
|
+
declare class MockedRoom<TIO extends IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> extends AbstractRoom<TIO, TPresence, TStorage> {
|
|
266
|
+
private _crdtManager;
|
|
267
|
+
private _crdtNotifier;
|
|
268
|
+
private _eventNotifier;
|
|
269
|
+
private _events?;
|
|
270
|
+
private _otherNotifier;
|
|
271
|
+
private _state;
|
|
272
|
+
private _stateNotifier;
|
|
273
|
+
private _subscriptions;
|
|
274
|
+
private _usersManager;
|
|
275
|
+
constructor(room: string, options: MockedRoomConfig<TIO, TPresence, TStorage>);
|
|
276
|
+
get storageLoaded(): boolean;
|
|
277
|
+
broadcast<TEvent extends keyof InferIOInput<TIO>>(event: TEvent, data: Id<InferIOInput<TIO>[TEvent]>): void;
|
|
278
|
+
canRedo: () => boolean;
|
|
279
|
+
canUndo: () => boolean;
|
|
280
|
+
event: <TEvent extends keyof InferIOOutput<TIO>>(event: TEvent, callback: EventNotifierSubscriptionCallback<TIO, TEvent>) => (() => void);
|
|
281
|
+
getConnection: () => WebSocketConnection;
|
|
282
|
+
getDoc(): AbstractCrdtDoc<TStorage>;
|
|
283
|
+
getMyPresence: () => TPresence;
|
|
284
|
+
getMyself: () => Id<UserInfo<TIO, TPresence>> | null;
|
|
285
|
+
getOther: (connectionId: string) => Id<UserInfo<TIO, TPresence>> | null;
|
|
286
|
+
getOthers: () => readonly Id<UserInfo<TIO, TPresence>>[];
|
|
287
|
+
getStorage: <TKey extends keyof TStorage>(type: TKey) => TStorage[TKey] | null;
|
|
288
|
+
getStorageJson(): InferCrdtJson<TStorage> | null;
|
|
289
|
+
getStorageJson<TKey extends keyof TStorage>(type: TKey): InferCrdtJson<TStorage[TKey]> | null;
|
|
290
|
+
other: (connectionId: string, callback: OtherNotifierSubscriptionCallback<TIO>) => (() => void);
|
|
291
|
+
redo: () => void;
|
|
292
|
+
storage: <TKey extends keyof TStorage>(key: TKey, fn: (value: InferCrdtJson<TStorage[TKey]>) => void) => (() => void);
|
|
293
|
+
storageRoot: (fn: (value: { [P in keyof TStorage]: InferCrdtJson<TStorage[P]>; }) => void) => (() => void);
|
|
294
|
+
subscribe: <TSubject extends keyof StateNotifierSubjects<TIO, TPresence>>(name: TSubject, callback: SubscriptionCallback<TIO, TPresence, TSubject>) => (() => void);
|
|
295
|
+
transact: (fn: (storage: TStorage) => void, origin?: string) => void;
|
|
296
|
+
undo: () => void;
|
|
297
|
+
updateMyPresence: (presence: UpdateMyPresenceAction<TPresence>) => void;
|
|
298
|
+
private _observeCrdt;
|
|
299
|
+
}
|
|
291
300
|
|
|
292
|
-
export { AbstractRoom, AbstractStorageStore, ConnectionState, MockedRoom, type MockedRoomConfig, type MockedRoomEvents, PluvClient, type PluvClientOptions, PluvRoom, type PluvRoomAddon, type PluvRoomAddonInput, type PluvRoomAddonResult, type PluvRoomDebug, type UserInfo, type WebSocketConnection, type WebSocketState, createClient };
|
|
301
|
+
export { AbstractRoom, AbstractStorageStore, ConnectionState, MockedRoom, type MockedRoomConfig, type MockedRoomEvents, PluvClient, type PluvClientOptions, PluvRoom, type PluvRoomAddon, type PluvRoomAddonInput, type PluvRoomAddonResult, type PluvRoomDebug, type PluvRoomOptions, type UserInfo, type WebSocketConnection, type WebSocketState, createClient };
|
package/dist/index.d.ts
CHANGED
|
@@ -97,48 +97,6 @@ type UsersManagerConfig<TPresence extends JsonObject = {}> = {
|
|
|
97
97
|
presence?: InputZodLike<TPresence>;
|
|
98
98
|
};
|
|
99
99
|
|
|
100
|
-
type MockedRoomEvents<TIO extends IOLike> = Partial<{
|
|
101
|
-
[P in keyof InferIOInput<TIO>]: (data: Id<InferIOInput<TIO>[P]>) => Partial<InferIOOutput<TIO>>;
|
|
102
|
-
}>;
|
|
103
|
-
type MockedRoomConfig<TIO extends IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = {
|
|
104
|
-
events?: MockedRoomEvents<TIO>;
|
|
105
|
-
} & Omit<CrdtManagerOptions<TStorage>, "encodedState"> & UsersManagerConfig<TPresence>;
|
|
106
|
-
declare class MockedRoom<TIO extends IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> extends AbstractRoom<TIO, TPresence, TStorage> {
|
|
107
|
-
private _crdtManager;
|
|
108
|
-
private _crdtNotifier;
|
|
109
|
-
private _eventNotifier;
|
|
110
|
-
private _events?;
|
|
111
|
-
private _otherNotifier;
|
|
112
|
-
private _state;
|
|
113
|
-
private _stateNotifier;
|
|
114
|
-
private _subscriptions;
|
|
115
|
-
private _usersManager;
|
|
116
|
-
constructor(room: string, options: MockedRoomConfig<TIO, TPresence, TStorage>);
|
|
117
|
-
get storageLoaded(): boolean;
|
|
118
|
-
broadcast<TEvent extends keyof InferIOInput<TIO>>(event: TEvent, data: Id<InferIOInput<TIO>[TEvent]>): void;
|
|
119
|
-
canRedo: () => boolean;
|
|
120
|
-
canUndo: () => boolean;
|
|
121
|
-
event: <TEvent extends keyof InferIOOutput<TIO>>(event: TEvent, callback: EventNotifierSubscriptionCallback<TIO, TEvent>) => (() => void);
|
|
122
|
-
getConnection: () => WebSocketConnection;
|
|
123
|
-
getDoc(): AbstractCrdtDoc<TStorage>;
|
|
124
|
-
getMyPresence: () => TPresence;
|
|
125
|
-
getMyself: () => Id<UserInfo<TIO, TPresence>> | null;
|
|
126
|
-
getOther: (connectionId: string) => Id<UserInfo<TIO, TPresence>> | null;
|
|
127
|
-
getOthers: () => readonly Id<UserInfo<TIO, TPresence>>[];
|
|
128
|
-
getStorage: <TKey extends keyof TStorage>(type: TKey) => TStorage[TKey] | null;
|
|
129
|
-
getStorageJson(): InferCrdtJson<TStorage> | null;
|
|
130
|
-
getStorageJson<TKey extends keyof TStorage>(type: TKey): InferCrdtJson<TStorage[TKey]> | null;
|
|
131
|
-
other: (connectionId: string, callback: OtherNotifierSubscriptionCallback<TIO>) => (() => void);
|
|
132
|
-
redo: () => void;
|
|
133
|
-
storage: <TKey extends keyof TStorage>(key: TKey, fn: (value: InferCrdtJson<TStorage[TKey]>) => void) => (() => void);
|
|
134
|
-
storageRoot: (fn: (value: { [P in keyof TStorage]: InferCrdtJson<TStorage[P]>; }) => void) => (() => void);
|
|
135
|
-
subscribe: <TSubject extends keyof StateNotifierSubjects<TIO, TPresence>>(name: TSubject, callback: SubscriptionCallback<TIO, TPresence, TSubject>) => (() => void);
|
|
136
|
-
transact: (fn: (storage: TStorage) => void, origin?: string) => void;
|
|
137
|
-
undo: () => void;
|
|
138
|
-
updateMyPresence: (presence: UpdateMyPresenceAction<TPresence>) => void;
|
|
139
|
-
private _observeCrdt;
|
|
140
|
-
}
|
|
141
|
-
|
|
142
100
|
declare global {
|
|
143
101
|
var process: {
|
|
144
102
|
env: {
|
|
@@ -146,22 +104,26 @@ declare global {
|
|
|
146
104
|
};
|
|
147
105
|
};
|
|
148
106
|
}
|
|
149
|
-
|
|
150
|
-
|
|
107
|
+
interface EndpointParams<TMetadata extends JsonObject> {
|
|
108
|
+
metadata: TMetadata;
|
|
109
|
+
room: string;
|
|
110
|
+
}
|
|
111
|
+
type AuthEndpoint<TMetadata extends JsonObject> = string | ((params: EndpointParams<TMetadata>) => string | FetchOptions) | true;
|
|
112
|
+
type WsEndpoint<TMetadata extends JsonObject> = string | ((params: EndpointParams<TMetadata>) => string);
|
|
151
113
|
type FetchOptions = {
|
|
152
114
|
url: string;
|
|
153
115
|
options?: RequestInit;
|
|
154
116
|
};
|
|
155
|
-
type RoomEndpoints<TIO extends IOLike> = {
|
|
156
|
-
wsEndpoint?: WsEndpoint
|
|
117
|
+
type RoomEndpoints<TIO extends IOLike, TMetadata extends JsonObject> = {
|
|
118
|
+
wsEndpoint?: WsEndpoint<TMetadata>;
|
|
157
119
|
} & (InferIOAuthorizeRequired<InferIOAuthorize<TIO>> extends true ? {
|
|
158
|
-
authEndpoint: AuthEndpoint
|
|
120
|
+
authEndpoint: AuthEndpoint<TMetadata>;
|
|
159
121
|
} : {
|
|
160
122
|
authEndpoint?: undefined;
|
|
161
123
|
});
|
|
162
|
-
type PluvRoomAddon<TIO extends IOLike = IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = (input: PluvRoomAddonInput<TIO, TPresence, TStorage>) => Partial<PluvRoomAddonResult>;
|
|
163
|
-
interface PluvRoomAddonInput<TIO extends IOLike = IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> {
|
|
164
|
-
room: PluvRoom<TIO, TPresence, TStorage>;
|
|
124
|
+
type PluvRoomAddon<TIO extends IOLike = IOLike, TMetadata extends JsonObject = {}, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = (input: PluvRoomAddonInput<TIO, TMetadata, TPresence, TStorage>) => Partial<PluvRoomAddonResult>;
|
|
125
|
+
interface PluvRoomAddonInput<TIO extends IOLike = IOLike, TMetadata extends JsonObject = {}, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> {
|
|
126
|
+
room: PluvRoom<TIO, TMetadata, TPresence, TStorage>;
|
|
165
127
|
}
|
|
166
128
|
interface PluvRoomAddonResult {
|
|
167
129
|
storage: AbstractStorageStore;
|
|
@@ -170,20 +132,25 @@ type PluvRoomDebug<TIO extends IOLike> = Id<{
|
|
|
170
132
|
output: readonly (keyof InferIOOutput<TIO>)[];
|
|
171
133
|
input: readonly (keyof InferIOInput<TIO>)[];
|
|
172
134
|
}>;
|
|
173
|
-
type PluvRoomOptions<TIO extends IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = {
|
|
174
|
-
addons?: readonly PluvRoomAddon<TIO, TPresence, TStorage>[];
|
|
135
|
+
type PluvRoomOptions<TIO extends IOLike, TMetadata extends JsonObject = {}, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = {
|
|
136
|
+
addons?: readonly PluvRoomAddon<TIO, TMetadata, TPresence, TStorage>[];
|
|
175
137
|
debug?: boolean | PluvRoomDebug<TIO>;
|
|
176
138
|
onAuthorizationFail?: (error: Error) => void;
|
|
177
|
-
} & Omit<CrdtManagerOptions<TStorage>, "encodedState"> & UsersManagerConfig<TPresence
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
139
|
+
} & Omit<CrdtManagerOptions<TStorage>, "encodedState"> & UsersManagerConfig<TPresence> & (keyof TMetadata extends never ? {
|
|
140
|
+
metadata?: undefined;
|
|
141
|
+
} : {
|
|
142
|
+
metadata: TMetadata;
|
|
143
|
+
});
|
|
144
|
+
type RoomConfig<TIO extends IOLike, TMetadata extends JsonObject = {}, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = RoomEndpoints<TIO, TMetadata> & PluvRoomOptions<TIO, TMetadata, TPresence, TStorage>;
|
|
145
|
+
declare class PluvRoom<TIO extends IOLike, TMetadata extends JsonObject = {}, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> extends AbstractRoom<TIO, TPresence, TStorage> {
|
|
146
|
+
readonly _endpoints: RoomEndpoints<TIO, TMetadata>;
|
|
181
147
|
private _crdtManager;
|
|
182
148
|
private _crdtNotifier;
|
|
183
149
|
private _debug;
|
|
184
150
|
private _eventNotifier;
|
|
185
151
|
private _intervals;
|
|
186
152
|
private _listeners;
|
|
153
|
+
private _metadata;
|
|
187
154
|
private _otherNotifier;
|
|
188
155
|
private _state;
|
|
189
156
|
private _stateNotifier;
|
|
@@ -193,7 +160,7 @@ declare class PluvRoom<TIO extends IOLike, TPresence extends JsonObject = {}, TS
|
|
|
193
160
|
private _windowListeners;
|
|
194
161
|
private _wsListeners;
|
|
195
162
|
private _usersManager;
|
|
196
|
-
constructor(room: string, options: RoomConfig<TIO, TPresence, TStorage>);
|
|
163
|
+
constructor(room: string, options: RoomConfig<TIO, TMetadata, TPresence, TStorage>);
|
|
197
164
|
get storageLoaded(): boolean;
|
|
198
165
|
get webSocket(): WebSocket | null;
|
|
199
166
|
broadcast: (<TEvent extends keyof InferIOInput<TIO>>(event: TEvent, data: Id<InferIOInput<TIO>[TEvent]>) => void) & { [event in keyof InferIOInput<TIO>]: (data: Id<InferIOInput<TIO>[event]>) => void; };
|
|
@@ -270,23 +237,65 @@ declare class PluvRoom<TIO extends IOLike, TPresence extends JsonObject = {}, TS
|
|
|
270
237
|
private _updateState;
|
|
271
238
|
}
|
|
272
239
|
|
|
273
|
-
type PluvClientOptions<TIO extends IOLike> = RoomEndpoints<TIO> & {
|
|
240
|
+
type PluvClientOptions<TIO extends IOLike, TMetadata extends JsonObject> = RoomEndpoints<TIO, TMetadata> & {
|
|
274
241
|
debug?: boolean;
|
|
275
242
|
};
|
|
276
|
-
declare class PluvClient<TIO extends IOLike = IOLike> {
|
|
243
|
+
declare class PluvClient<TIO extends IOLike = IOLike, TMetadata extends JsonObject = {}> {
|
|
277
244
|
private _authEndpoint;
|
|
278
245
|
private _debug;
|
|
279
246
|
private _wsEndpoint;
|
|
280
247
|
private _rooms;
|
|
281
|
-
constructor(options: PluvClientOptions<TIO>);
|
|
282
|
-
createRoom: <TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}>(room: string, options: PluvRoomOptions<TIO, TPresence, TStorage>) => PluvRoom<TIO, TPresence, TStorage>;
|
|
283
|
-
enter: (room: string | PluvRoom<TIO, any, any>) => Promise<PluvRoom<TIO, JsonObject, any>>;
|
|
284
|
-
getRoom: <TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}>(room: string) => PluvRoom<TIO, TPresence, TStorage> | null;
|
|
285
|
-
getRooms: () => readonly PluvRoom<TIO, JsonObject, any>[];
|
|
286
|
-
leave: (room: string | PluvRoom<TIO, any, any>) => Promise<void>;
|
|
248
|
+
constructor(options: PluvClientOptions<TIO, TMetadata>);
|
|
249
|
+
createRoom: <TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}>(room: string, options: PluvRoomOptions<TIO, TMetadata, TPresence, TStorage>) => PluvRoom<TIO, TMetadata, TPresence, TStorage>;
|
|
250
|
+
enter: (room: string | PluvRoom<TIO, any, any, any>) => Promise<PluvRoom<TIO, TMetadata, JsonObject, any>>;
|
|
251
|
+
getRoom: <TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}>(room: string) => PluvRoom<TIO, TMetadata, TPresence, TStorage> | null;
|
|
252
|
+
getRooms: () => readonly PluvRoom<TIO, TMetadata, JsonObject, any>[];
|
|
253
|
+
leave: (room: string | PluvRoom<TIO, any, any, any>) => Promise<void>;
|
|
287
254
|
private _logDebug;
|
|
288
255
|
}
|
|
289
256
|
|
|
290
|
-
declare const createClient: <TIO extends IOLike = IOLike<_pluv_types.IOAuthorize<any, any, any>, {}
|
|
257
|
+
declare const createClient: <TIO extends IOLike = IOLike<_pluv_types.IOAuthorize<any, any, any>, {}>, TMetadata extends JsonObject = {}>(options: PluvClientOptions<TIO, TMetadata>) => PluvClient<TIO, TMetadata>;
|
|
258
|
+
|
|
259
|
+
type MockedRoomEvents<TIO extends IOLike> = Partial<{
|
|
260
|
+
[P in keyof InferIOInput<TIO>]: (data: Id<InferIOInput<TIO>[P]>) => Partial<InferIOOutput<TIO>>;
|
|
261
|
+
}>;
|
|
262
|
+
type MockedRoomConfig<TIO extends IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> = {
|
|
263
|
+
events?: MockedRoomEvents<TIO>;
|
|
264
|
+
} & Omit<CrdtManagerOptions<TStorage>, "encodedState"> & UsersManagerConfig<TPresence>;
|
|
265
|
+
declare class MockedRoom<TIO extends IOLike, TPresence extends JsonObject = {}, TStorage extends Record<string, CrdtType<any, any>> = {}> extends AbstractRoom<TIO, TPresence, TStorage> {
|
|
266
|
+
private _crdtManager;
|
|
267
|
+
private _crdtNotifier;
|
|
268
|
+
private _eventNotifier;
|
|
269
|
+
private _events?;
|
|
270
|
+
private _otherNotifier;
|
|
271
|
+
private _state;
|
|
272
|
+
private _stateNotifier;
|
|
273
|
+
private _subscriptions;
|
|
274
|
+
private _usersManager;
|
|
275
|
+
constructor(room: string, options: MockedRoomConfig<TIO, TPresence, TStorage>);
|
|
276
|
+
get storageLoaded(): boolean;
|
|
277
|
+
broadcast<TEvent extends keyof InferIOInput<TIO>>(event: TEvent, data: Id<InferIOInput<TIO>[TEvent]>): void;
|
|
278
|
+
canRedo: () => boolean;
|
|
279
|
+
canUndo: () => boolean;
|
|
280
|
+
event: <TEvent extends keyof InferIOOutput<TIO>>(event: TEvent, callback: EventNotifierSubscriptionCallback<TIO, TEvent>) => (() => void);
|
|
281
|
+
getConnection: () => WebSocketConnection;
|
|
282
|
+
getDoc(): AbstractCrdtDoc<TStorage>;
|
|
283
|
+
getMyPresence: () => TPresence;
|
|
284
|
+
getMyself: () => Id<UserInfo<TIO, TPresence>> | null;
|
|
285
|
+
getOther: (connectionId: string) => Id<UserInfo<TIO, TPresence>> | null;
|
|
286
|
+
getOthers: () => readonly Id<UserInfo<TIO, TPresence>>[];
|
|
287
|
+
getStorage: <TKey extends keyof TStorage>(type: TKey) => TStorage[TKey] | null;
|
|
288
|
+
getStorageJson(): InferCrdtJson<TStorage> | null;
|
|
289
|
+
getStorageJson<TKey extends keyof TStorage>(type: TKey): InferCrdtJson<TStorage[TKey]> | null;
|
|
290
|
+
other: (connectionId: string, callback: OtherNotifierSubscriptionCallback<TIO>) => (() => void);
|
|
291
|
+
redo: () => void;
|
|
292
|
+
storage: <TKey extends keyof TStorage>(key: TKey, fn: (value: InferCrdtJson<TStorage[TKey]>) => void) => (() => void);
|
|
293
|
+
storageRoot: (fn: (value: { [P in keyof TStorage]: InferCrdtJson<TStorage[P]>; }) => void) => (() => void);
|
|
294
|
+
subscribe: <TSubject extends keyof StateNotifierSubjects<TIO, TPresence>>(name: TSubject, callback: SubscriptionCallback<TIO, TPresence, TSubject>) => (() => void);
|
|
295
|
+
transact: (fn: (storage: TStorage) => void, origin?: string) => void;
|
|
296
|
+
undo: () => void;
|
|
297
|
+
updateMyPresence: (presence: UpdateMyPresenceAction<TPresence>) => void;
|
|
298
|
+
private _observeCrdt;
|
|
299
|
+
}
|
|
291
300
|
|
|
292
|
-
export { AbstractRoom, AbstractStorageStore, ConnectionState, MockedRoom, type MockedRoomConfig, type MockedRoomEvents, PluvClient, type PluvClientOptions, PluvRoom, type PluvRoomAddon, type PluvRoomAddonInput, type PluvRoomAddonResult, type PluvRoomDebug, type UserInfo, type WebSocketConnection, type WebSocketState, createClient };
|
|
301
|
+
export { AbstractRoom, AbstractStorageStore, ConnectionState, MockedRoom, type MockedRoomConfig, type MockedRoomEvents, PluvClient, type PluvClientOptions, PluvRoom, type PluvRoomAddon, type PluvRoomAddonInput, type PluvRoomAddonResult, type PluvRoomDebug, type PluvRoomOptions, type UserInfo, type WebSocketConnection, type WebSocketState, createClient };
|