@supabase/realtime-js 2.0.0 → 2.2.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/README.md +165 -80
- package/dist/main/RealtimeChannel.d.ts +78 -56
- package/dist/main/RealtimeChannel.d.ts.map +1 -1
- package/dist/main/RealtimeChannel.js +32 -1
- package/dist/main/RealtimeChannel.js.map +1 -1
- package/dist/main/RealtimeClient.d.ts +12 -29
- package/dist/main/RealtimeClient.d.ts.map +1 -1
- package/dist/main/RealtimeClient.js +29 -2
- package/dist/main/RealtimeClient.js.map +1 -1
- package/dist/main/RealtimePresence.d.ts +14 -55
- package/dist/main/RealtimePresence.d.ts.map +1 -1
- package/dist/main/RealtimePresence.js +12 -0
- package/dist/main/RealtimePresence.js.map +1 -1
- package/dist/main/index.d.ts +2 -2
- package/dist/main/index.d.ts.map +1 -1
- package/dist/main/index.js.map +1 -1
- package/dist/main/lib/version.d.ts +1 -1
- package/dist/main/lib/version.js +1 -1
- package/dist/module/RealtimeChannel.d.ts +78 -56
- package/dist/module/RealtimeChannel.d.ts.map +1 -1
- package/dist/module/RealtimeChannel.js +32 -1
- package/dist/module/RealtimeChannel.js.map +1 -1
- package/dist/module/RealtimeClient.d.ts +12 -29
- package/dist/module/RealtimeClient.d.ts.map +1 -1
- package/dist/module/RealtimeClient.js +29 -2
- package/dist/module/RealtimeClient.js.map +1 -1
- package/dist/module/RealtimePresence.d.ts +14 -55
- package/dist/module/RealtimePresence.d.ts.map +1 -1
- package/dist/module/RealtimePresence.js +12 -0
- package/dist/module/RealtimePresence.js.map +1 -1
- package/dist/module/index.d.ts +2 -2
- package/dist/module/index.d.ts.map +1 -1
- package/dist/module/index.js.map +1 -1
- package/dist/module/lib/version.d.ts +1 -1
- package/dist/module/lib/version.js +1 -1
- package/package.json +1 -1
- package/src/RealtimeChannel.ts +109 -21
- package/src/RealtimeClient.ts +29 -3
- package/src/RealtimePresence.ts +20 -9
- package/src/index.ts +8 -0
- package/src/lib/version.ts +1 -1
package/src/RealtimeClient.ts
CHANGED
|
@@ -159,10 +159,17 @@ export default class RealtimeClient {
|
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
+
/**
|
|
163
|
+
* Returns all created channels
|
|
164
|
+
*/
|
|
162
165
|
getChannels(): RealtimeChannel[] {
|
|
163
166
|
return this.channels
|
|
164
167
|
}
|
|
165
168
|
|
|
169
|
+
/**
|
|
170
|
+
* Unsubscribes and removes a single channel
|
|
171
|
+
* @param channel A RealtimeChannel instance
|
|
172
|
+
*/
|
|
166
173
|
removeChannel(
|
|
167
174
|
channel: RealtimeChannel
|
|
168
175
|
): Promise<RealtimeRemoveChannelResponse> {
|
|
@@ -174,6 +181,9 @@ export default class RealtimeClient {
|
|
|
174
181
|
})
|
|
175
182
|
}
|
|
176
183
|
|
|
184
|
+
/**
|
|
185
|
+
* Unsubscribes and removes all channels
|
|
186
|
+
*/
|
|
177
187
|
removeAllChannels(): Promise<RealtimeRemoveChannelResponse[]> {
|
|
178
188
|
return Promise.all(
|
|
179
189
|
this.channels.map((channel) => channel.unsubscribe())
|
|
@@ -186,7 +196,7 @@ export default class RealtimeClient {
|
|
|
186
196
|
/**
|
|
187
197
|
* Logs the message.
|
|
188
198
|
*
|
|
189
|
-
* For customized logging, `this.logger` can be
|
|
199
|
+
* For customized logging, `this.logger` can be overridden.
|
|
190
200
|
*/
|
|
191
201
|
log(kind: string, msg: string, data?: any) {
|
|
192
202
|
this.logger(kind, msg, data)
|
|
@@ -209,7 +219,7 @@ export default class RealtimeClient {
|
|
|
209
219
|
}
|
|
210
220
|
|
|
211
221
|
/**
|
|
212
|
-
*
|
|
222
|
+
* Returns `true` is the connection is open.
|
|
213
223
|
*/
|
|
214
224
|
isConnected(): boolean {
|
|
215
225
|
return this.connectionState() === CONNECTION_STATE.Open
|
|
@@ -274,6 +284,8 @@ export default class RealtimeClient {
|
|
|
274
284
|
|
|
275
285
|
/**
|
|
276
286
|
* Return the next message ref, accounting for overflows
|
|
287
|
+
*
|
|
288
|
+
* @internal
|
|
277
289
|
*/
|
|
278
290
|
_makeRef(): string {
|
|
279
291
|
let newRef = this.ref + 1
|
|
@@ -288,6 +300,8 @@ export default class RealtimeClient {
|
|
|
288
300
|
|
|
289
301
|
/**
|
|
290
302
|
* Unsubscribe from channels with the specified topic.
|
|
303
|
+
*
|
|
304
|
+
* @internal
|
|
291
305
|
*/
|
|
292
306
|
_leaveOpenTopic(topic: string): void {
|
|
293
307
|
let dupChannel = this.channels.find(
|
|
@@ -303,6 +317,8 @@ export default class RealtimeClient {
|
|
|
303
317
|
* Removes a subscription from the socket.
|
|
304
318
|
*
|
|
305
319
|
* @param channel An open subscription.
|
|
320
|
+
*
|
|
321
|
+
* @internal
|
|
306
322
|
*/
|
|
307
323
|
_remove(channel: RealtimeChannel) {
|
|
308
324
|
this.channels = this.channels.filter(
|
|
@@ -312,6 +328,8 @@ export default class RealtimeClient {
|
|
|
312
328
|
|
|
313
329
|
/**
|
|
314
330
|
* Returns the URL of the websocket.
|
|
331
|
+
*
|
|
332
|
+
* @internal
|
|
315
333
|
*/
|
|
316
334
|
private _endPointURL(): string {
|
|
317
335
|
return this._appendParams(
|
|
@@ -320,6 +338,7 @@ export default class RealtimeClient {
|
|
|
320
338
|
)
|
|
321
339
|
}
|
|
322
340
|
|
|
341
|
+
/** @internal */
|
|
323
342
|
private _onConnMessage(rawMessage: { data: any }) {
|
|
324
343
|
this.decode(rawMessage.data, (msg: RealtimeMessage) => {
|
|
325
344
|
let { topic, event, payload, ref } = msg
|
|
@@ -347,6 +366,7 @@ export default class RealtimeClient {
|
|
|
347
366
|
})
|
|
348
367
|
}
|
|
349
368
|
|
|
369
|
+
/** @internal */
|
|
350
370
|
private _onConnOpen() {
|
|
351
371
|
this.log('transport', `connected to ${this._endPointURL()}`)
|
|
352
372
|
this._flushSendBuffer()
|
|
@@ -359,6 +379,7 @@ export default class RealtimeClient {
|
|
|
359
379
|
this.stateChangeCallbacks.open.forEach((callback) => callback())!
|
|
360
380
|
}
|
|
361
381
|
|
|
382
|
+
/** @internal */
|
|
362
383
|
private _onConnClose(event: any) {
|
|
363
384
|
this.log('transport', 'close', event)
|
|
364
385
|
this._triggerChanError()
|
|
@@ -367,18 +388,21 @@ export default class RealtimeClient {
|
|
|
367
388
|
this.stateChangeCallbacks.close.forEach((callback) => callback(event))
|
|
368
389
|
}
|
|
369
390
|
|
|
391
|
+
/** @internal */
|
|
370
392
|
private _onConnError(error: ErrorEvent) {
|
|
371
393
|
this.log('transport', error.message)
|
|
372
394
|
this._triggerChanError()
|
|
373
395
|
this.stateChangeCallbacks.error.forEach((callback) => callback(error))
|
|
374
396
|
}
|
|
375
397
|
|
|
398
|
+
/** @internal */
|
|
376
399
|
private _triggerChanError() {
|
|
377
400
|
this.channels.forEach((channel: RealtimeChannel) =>
|
|
378
401
|
channel._trigger(CHANNEL_EVENTS.error)
|
|
379
402
|
)
|
|
380
403
|
}
|
|
381
404
|
|
|
405
|
+
/** @internal */
|
|
382
406
|
private _appendParams(
|
|
383
407
|
url: string,
|
|
384
408
|
params: { [key: string]: string }
|
|
@@ -392,13 +416,14 @@ export default class RealtimeClient {
|
|
|
392
416
|
return `${url}${prefix}${query}`
|
|
393
417
|
}
|
|
394
418
|
|
|
419
|
+
/** @internal */
|
|
395
420
|
private _flushSendBuffer() {
|
|
396
421
|
if (this.isConnected() && this.sendBuffer.length > 0) {
|
|
397
422
|
this.sendBuffer.forEach((callback) => callback())
|
|
398
423
|
this.sendBuffer = []
|
|
399
424
|
}
|
|
400
425
|
}
|
|
401
|
-
|
|
426
|
+
/** @internal */
|
|
402
427
|
private _sendHeartbeat() {
|
|
403
428
|
if (!this.isConnected()) {
|
|
404
429
|
return
|
|
@@ -422,6 +447,7 @@ export default class RealtimeClient {
|
|
|
422
447
|
this.setAuth(this.accessToken)
|
|
423
448
|
}
|
|
424
449
|
|
|
450
|
+
/** @internal */
|
|
425
451
|
private _throttle(
|
|
426
452
|
callback: Function,
|
|
427
453
|
eventsPerSecondLimit: number = this.eventsPerSecondLimitMs
|
package/src/RealtimePresence.ts
CHANGED
|
@@ -10,25 +10,24 @@ import {
|
|
|
10
10
|
} from 'phoenix'
|
|
11
11
|
import RealtimeChannel from './RealtimeChannel'
|
|
12
12
|
|
|
13
|
-
type Presence = {
|
|
13
|
+
type Presence<T extends { [key: string]: any } = {}> = {
|
|
14
14
|
presence_ref: string
|
|
15
|
-
|
|
16
|
-
}
|
|
15
|
+
} & T
|
|
17
16
|
|
|
18
17
|
export type RealtimePresenceState = { [key: string]: Presence[] }
|
|
19
18
|
|
|
20
|
-
export type RealtimePresenceJoinPayload = {
|
|
19
|
+
export type RealtimePresenceJoinPayload<T extends { [key: string]: any }> = {
|
|
21
20
|
event: `${REALTIME_PRESENCE_LISTEN_EVENTS.JOIN}`
|
|
22
21
|
key: string
|
|
23
|
-
currentPresences: Presence[]
|
|
24
|
-
newPresences: Presence[]
|
|
22
|
+
currentPresences: Presence<T>[]
|
|
23
|
+
newPresences: Presence<T>[]
|
|
25
24
|
}
|
|
26
25
|
|
|
27
|
-
export type RealtimePresenceLeavePayload = {
|
|
26
|
+
export type RealtimePresenceLeavePayload<T extends { [key: string]: any }> = {
|
|
28
27
|
event: `${REALTIME_PRESENCE_LISTEN_EVENTS.LEAVE}`
|
|
29
28
|
key: string
|
|
30
|
-
currentPresences: Presence[]
|
|
31
|
-
leftPresences: Presence[]
|
|
29
|
+
currentPresences: Presence<T>[]
|
|
30
|
+
leftPresences: Presence<T>[]
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
export enum REALTIME_PRESENCE_LISTEN_EVENTS {
|
|
@@ -159,6 +158,8 @@ export default class RealtimePresence {
|
|
|
159
158
|
* An optional `onJoin` and `onLeave` callback can be provided to
|
|
160
159
|
* react to changes in the client's local presences across
|
|
161
160
|
* disconnects and reconnects with the server.
|
|
161
|
+
*
|
|
162
|
+
* @internal
|
|
162
163
|
*/
|
|
163
164
|
private static syncState(
|
|
164
165
|
currentState: RealtimePresenceState,
|
|
@@ -216,6 +217,8 @@ export default class RealtimePresence {
|
|
|
216
217
|
* Like `syncState`, `syncDiff` accepts optional `onJoin` and
|
|
217
218
|
* `onLeave` callbacks to react to a user joining or leaving from a
|
|
218
219
|
* device.
|
|
220
|
+
*
|
|
221
|
+
* @internal
|
|
219
222
|
*/
|
|
220
223
|
private static syncDiff(
|
|
221
224
|
state: RealtimePresenceState,
|
|
@@ -276,6 +279,7 @@ export default class RealtimePresence {
|
|
|
276
279
|
return state
|
|
277
280
|
}
|
|
278
281
|
|
|
282
|
+
/** @internal */
|
|
279
283
|
private static map<T = any>(
|
|
280
284
|
obj: RealtimePresenceState,
|
|
281
285
|
func: PresenceChooser<T>
|
|
@@ -303,6 +307,8 @@ export default class RealtimePresence {
|
|
|
303
307
|
* ]
|
|
304
308
|
* }
|
|
305
309
|
* })
|
|
310
|
+
*
|
|
311
|
+
* @internal
|
|
306
312
|
*/
|
|
307
313
|
private static transformState(
|
|
308
314
|
state: RawPresenceState | RealtimePresenceState
|
|
@@ -329,22 +335,27 @@ export default class RealtimePresence {
|
|
|
329
335
|
}, {} as RealtimePresenceState)
|
|
330
336
|
}
|
|
331
337
|
|
|
338
|
+
/** @internal */
|
|
332
339
|
private static cloneDeep(obj: { [key: string]: any }) {
|
|
333
340
|
return JSON.parse(JSON.stringify(obj))
|
|
334
341
|
}
|
|
335
342
|
|
|
343
|
+
/** @internal */
|
|
336
344
|
private onJoin(callback: PresenceOnJoinCallback): void {
|
|
337
345
|
this.caller.onJoin = callback
|
|
338
346
|
}
|
|
339
347
|
|
|
348
|
+
/** @internal */
|
|
340
349
|
private onLeave(callback: PresenceOnLeaveCallback): void {
|
|
341
350
|
this.caller.onLeave = callback
|
|
342
351
|
}
|
|
343
352
|
|
|
353
|
+
/** @internal */
|
|
344
354
|
private onSync(callback: () => void): void {
|
|
345
355
|
this.caller.onSync = callback
|
|
346
356
|
}
|
|
347
357
|
|
|
358
|
+
/** @internal */
|
|
348
359
|
private inPendingSyncState(): boolean {
|
|
349
360
|
return !this.joinRef || this.joinRef !== this.channel._joinRef()
|
|
350
361
|
}
|
package/src/index.ts
CHANGED
|
@@ -6,7 +6,11 @@ import RealtimeClient, {
|
|
|
6
6
|
import RealtimeChannel, {
|
|
7
7
|
RealtimeChannelOptions,
|
|
8
8
|
RealtimeChannelSendResponse,
|
|
9
|
+
RealtimePostgresChangesFilter,
|
|
9
10
|
RealtimePostgresChangesPayload,
|
|
11
|
+
RealtimePostgresInsertPayload,
|
|
12
|
+
RealtimePostgresUpdatePayload,
|
|
13
|
+
RealtimePostgresDeletePayload,
|
|
10
14
|
REALTIME_LISTEN_TYPES,
|
|
11
15
|
REALTIME_POSTGRES_CHANGES_LISTEN_EVENT,
|
|
12
16
|
REALTIME_SUBSCRIBE_STATES,
|
|
@@ -26,7 +30,11 @@ export {
|
|
|
26
30
|
RealtimeClient,
|
|
27
31
|
RealtimeClientOptions,
|
|
28
32
|
RealtimeMessage,
|
|
33
|
+
RealtimePostgresChangesFilter,
|
|
29
34
|
RealtimePostgresChangesPayload,
|
|
35
|
+
RealtimePostgresInsertPayload,
|
|
36
|
+
RealtimePostgresUpdatePayload,
|
|
37
|
+
RealtimePostgresDeletePayload,
|
|
30
38
|
RealtimePresenceJoinPayload,
|
|
31
39
|
RealtimePresenceLeavePayload,
|
|
32
40
|
RealtimePresenceState,
|
package/src/lib/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '2.
|
|
1
|
+
export const version = '2.2.0'
|