@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.
Files changed (41) hide show
  1. package/README.md +165 -80
  2. package/dist/main/RealtimeChannel.d.ts +78 -56
  3. package/dist/main/RealtimeChannel.d.ts.map +1 -1
  4. package/dist/main/RealtimeChannel.js +32 -1
  5. package/dist/main/RealtimeChannel.js.map +1 -1
  6. package/dist/main/RealtimeClient.d.ts +12 -29
  7. package/dist/main/RealtimeClient.d.ts.map +1 -1
  8. package/dist/main/RealtimeClient.js +29 -2
  9. package/dist/main/RealtimeClient.js.map +1 -1
  10. package/dist/main/RealtimePresence.d.ts +14 -55
  11. package/dist/main/RealtimePresence.d.ts.map +1 -1
  12. package/dist/main/RealtimePresence.js +12 -0
  13. package/dist/main/RealtimePresence.js.map +1 -1
  14. package/dist/main/index.d.ts +2 -2
  15. package/dist/main/index.d.ts.map +1 -1
  16. package/dist/main/index.js.map +1 -1
  17. package/dist/main/lib/version.d.ts +1 -1
  18. package/dist/main/lib/version.js +1 -1
  19. package/dist/module/RealtimeChannel.d.ts +78 -56
  20. package/dist/module/RealtimeChannel.d.ts.map +1 -1
  21. package/dist/module/RealtimeChannel.js +32 -1
  22. package/dist/module/RealtimeChannel.js.map +1 -1
  23. package/dist/module/RealtimeClient.d.ts +12 -29
  24. package/dist/module/RealtimeClient.d.ts.map +1 -1
  25. package/dist/module/RealtimeClient.js +29 -2
  26. package/dist/module/RealtimeClient.js.map +1 -1
  27. package/dist/module/RealtimePresence.d.ts +14 -55
  28. package/dist/module/RealtimePresence.d.ts.map +1 -1
  29. package/dist/module/RealtimePresence.js +12 -0
  30. package/dist/module/RealtimePresence.js.map +1 -1
  31. package/dist/module/index.d.ts +2 -2
  32. package/dist/module/index.d.ts.map +1 -1
  33. package/dist/module/index.js.map +1 -1
  34. package/dist/module/lib/version.d.ts +1 -1
  35. package/dist/module/lib/version.js +1 -1
  36. package/package.json +1 -1
  37. package/src/RealtimeChannel.ts +109 -21
  38. package/src/RealtimeClient.ts +29 -3
  39. package/src/RealtimePresence.ts +20 -9
  40. package/src/index.ts +8 -0
  41. package/src/lib/version.ts +1 -1
@@ -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 overriden.
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
- * Retuns `true` is the connection is open.
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
@@ -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
- [key: string]: any
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,
@@ -1 +1 @@
1
- export const version = '2.0.0'
1
+ export const version = '2.2.0'