@supabase/realtime-js 2.99.2 → 2.100.0-rc.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 (111) hide show
  1. package/dist/main/RealtimeChannel.d.ts +35 -28
  2. package/dist/main/RealtimeChannel.d.ts.map +1 -1
  3. package/dist/main/RealtimeChannel.js +140 -301
  4. package/dist/main/RealtimeChannel.js.map +1 -1
  5. package/dist/main/RealtimeClient.d.ts +38 -57
  6. package/dist/main/RealtimeClient.d.ts.map +1 -1
  7. package/dist/main/RealtimeClient.js +232 -520
  8. package/dist/main/RealtimeClient.js.map +1 -1
  9. package/dist/main/RealtimePresence.d.ts +8 -24
  10. package/dist/main/RealtimePresence.d.ts.map +1 -1
  11. package/dist/main/RealtimePresence.js +6 -202
  12. package/dist/main/RealtimePresence.js.map +1 -1
  13. package/dist/main/lib/constants.d.ts +39 -35
  14. package/dist/main/lib/constants.d.ts.map +1 -1
  15. package/dist/main/lib/constants.js +30 -35
  16. package/dist/main/lib/constants.js.map +1 -1
  17. package/dist/main/lib/version.d.ts +1 -1
  18. package/dist/main/lib/version.d.ts.map +1 -1
  19. package/dist/main/lib/version.js +1 -1
  20. package/dist/main/lib/version.js.map +1 -1
  21. package/dist/main/lib/websocket-factory.d.ts +0 -9
  22. package/dist/main/lib/websocket-factory.d.ts.map +1 -1
  23. package/dist/main/lib/websocket-factory.js +0 -12
  24. package/dist/main/lib/websocket-factory.js.map +1 -1
  25. package/dist/main/phoenix/channelAdapter.d.ts +32 -0
  26. package/dist/main/phoenix/channelAdapter.d.ts.map +1 -0
  27. package/dist/main/phoenix/channelAdapter.js +103 -0
  28. package/dist/main/phoenix/channelAdapter.js.map +1 -0
  29. package/dist/main/phoenix/presenceAdapter.d.ts +53 -0
  30. package/dist/main/phoenix/presenceAdapter.d.ts.map +1 -0
  31. package/dist/main/phoenix/presenceAdapter.js +93 -0
  32. package/dist/main/phoenix/presenceAdapter.js.map +1 -0
  33. package/dist/main/phoenix/socketAdapter.d.ts +38 -0
  34. package/dist/main/phoenix/socketAdapter.d.ts.map +1 -0
  35. package/dist/main/phoenix/socketAdapter.js +114 -0
  36. package/dist/main/phoenix/socketAdapter.js.map +1 -0
  37. package/dist/main/phoenix/types.d.ts +5 -0
  38. package/dist/main/phoenix/types.d.ts.map +1 -0
  39. package/dist/main/phoenix/types.js +3 -0
  40. package/dist/main/phoenix/types.js.map +1 -0
  41. package/dist/module/RealtimeChannel.d.ts +35 -28
  42. package/dist/module/RealtimeChannel.d.ts.map +1 -1
  43. package/dist/module/RealtimeChannel.js +141 -302
  44. package/dist/module/RealtimeChannel.js.map +1 -1
  45. package/dist/module/RealtimeClient.d.ts +38 -57
  46. package/dist/module/RealtimeClient.d.ts.map +1 -1
  47. package/dist/module/RealtimeClient.js +233 -521
  48. package/dist/module/RealtimeClient.js.map +1 -1
  49. package/dist/module/RealtimePresence.d.ts +8 -24
  50. package/dist/module/RealtimePresence.d.ts.map +1 -1
  51. package/dist/module/RealtimePresence.js +5 -202
  52. package/dist/module/RealtimePresence.js.map +1 -1
  53. package/dist/module/lib/constants.d.ts +39 -35
  54. package/dist/module/lib/constants.d.ts.map +1 -1
  55. package/dist/module/lib/constants.js +30 -35
  56. package/dist/module/lib/constants.js.map +1 -1
  57. package/dist/module/lib/version.d.ts +1 -1
  58. package/dist/module/lib/version.d.ts.map +1 -1
  59. package/dist/module/lib/version.js +1 -1
  60. package/dist/module/lib/version.js.map +1 -1
  61. package/dist/module/lib/websocket-factory.d.ts +0 -9
  62. package/dist/module/lib/websocket-factory.d.ts.map +1 -1
  63. package/dist/module/lib/websocket-factory.js +0 -12
  64. package/dist/module/lib/websocket-factory.js.map +1 -1
  65. package/dist/module/phoenix/channelAdapter.d.ts +32 -0
  66. package/dist/module/phoenix/channelAdapter.d.ts.map +1 -0
  67. package/dist/module/phoenix/channelAdapter.js +100 -0
  68. package/dist/module/phoenix/channelAdapter.js.map +1 -0
  69. package/dist/module/phoenix/presenceAdapter.d.ts +53 -0
  70. package/dist/module/phoenix/presenceAdapter.d.ts.map +1 -0
  71. package/dist/module/phoenix/presenceAdapter.js +90 -0
  72. package/dist/module/phoenix/presenceAdapter.js.map +1 -0
  73. package/dist/module/phoenix/socketAdapter.d.ts +38 -0
  74. package/dist/module/phoenix/socketAdapter.d.ts.map +1 -0
  75. package/dist/module/phoenix/socketAdapter.js +111 -0
  76. package/dist/module/phoenix/socketAdapter.js.map +1 -0
  77. package/dist/module/phoenix/types.d.ts +5 -0
  78. package/dist/module/phoenix/types.d.ts.map +1 -0
  79. package/dist/module/phoenix/types.js +2 -0
  80. package/dist/module/phoenix/types.js.map +1 -0
  81. package/dist/tsconfig.module.tsbuildinfo +1 -1
  82. package/dist/tsconfig.tsbuildinfo +1 -1
  83. package/package.json +2 -2
  84. package/src/RealtimeChannel.ts +201 -364
  85. package/src/RealtimeClient.ts +296 -583
  86. package/src/RealtimePresence.ts +10 -287
  87. package/src/lib/constants.ts +50 -37
  88. package/src/lib/version.ts +1 -1
  89. package/src/lib/websocket-factory.ts +0 -13
  90. package/src/phoenix/channelAdapter.ts +147 -0
  91. package/src/phoenix/presenceAdapter.ts +116 -0
  92. package/src/phoenix/socketAdapter.ts +168 -0
  93. package/src/phoenix/types.ts +32 -0
  94. package/dist/main/lib/push.d.ts +0 -48
  95. package/dist/main/lib/push.d.ts.map +0 -1
  96. package/dist/main/lib/push.js +0 -102
  97. package/dist/main/lib/push.js.map +0 -1
  98. package/dist/main/lib/timer.d.ts +0 -22
  99. package/dist/main/lib/timer.d.ts.map +0 -1
  100. package/dist/main/lib/timer.js +0 -39
  101. package/dist/main/lib/timer.js.map +0 -1
  102. package/dist/module/lib/push.d.ts +0 -48
  103. package/dist/module/lib/push.d.ts.map +0 -1
  104. package/dist/module/lib/push.js +0 -99
  105. package/dist/module/lib/push.js.map +0 -1
  106. package/dist/module/lib/timer.d.ts +0 -22
  107. package/dist/module/lib/timer.d.ts.map +0 -1
  108. package/dist/module/lib/timer.js +0 -36
  109. package/dist/module/lib/timer.js.map +0 -1
  110. package/src/lib/push.ts +0 -121
  111. package/src/lib/timer.ts +0 -43
@@ -94,18 +94,6 @@ class WebSocketFactory {
94
94
  }
95
95
  throw new Error(errorMessage);
96
96
  }
97
- /**
98
- * Creates a WebSocket using the detected constructor.
99
- *
100
- * @example
101
- * ```ts
102
- * const socket = WebSocketFactory.createWebSocket('wss://realtime.supabase.co/socket')
103
- * ```
104
- */
105
- static createWebSocket(url, protocols) {
106
- const WS = this.getWebSocketConstructor();
107
- return new WS(url, protocols);
108
- }
109
97
  /**
110
98
  * Detects whether the runtime can establish WebSocket connections.
111
99
  *
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-factory.js","sourceRoot":"","sources":["../../../src/lib/websocket-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"websocket-factory.js","sourceRoot":"","sources":["../../../src/lib/websocket-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { RealtimeChannelOptions } from '../RealtimeChannel';
2
+ import SocketAdapter from './socketAdapter';
3
+ import type { ChannelBindingCallback, ChannelOnMessage, ChannelOnErrorCallback, ChannelFilterBindings, ChannelState, Push, Timer } from './types';
4
+ export default class ChannelAdapter {
5
+ private channel;
6
+ private socket;
7
+ constructor(socket: SocketAdapter, topic: string, params: RealtimeChannelOptions);
8
+ get state(): ChannelState;
9
+ set state(state: ChannelState);
10
+ get joinedOnce(): boolean;
11
+ get joinPush(): Push;
12
+ get rejoinTimer(): Timer;
13
+ on(event: string, callback: ChannelBindingCallback): number;
14
+ off(event: string, refNumber?: number): void;
15
+ subscribe(timeout?: number): Push;
16
+ unsubscribe(timeout?: number): Push;
17
+ teardown(): void;
18
+ onClose(callback: ChannelBindingCallback): void;
19
+ onError(callback: ChannelOnErrorCallback): number;
20
+ push(event: string, payload: {
21
+ [key: string]: any;
22
+ }, timeout?: number): Push;
23
+ updateJoinPayload(payload: Record<string, any>): void;
24
+ canPush(): boolean;
25
+ isJoined(): boolean;
26
+ isJoining(): boolean;
27
+ isClosed(): boolean;
28
+ isLeaving(): boolean;
29
+ updateFilterBindings(filterBindings: ChannelFilterBindings): void;
30
+ updatePayloadTransform(callback: ChannelOnMessage): void;
31
+ }
32
+ //# sourceMappingURL=channelAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channelAdapter.d.ts","sourceRoot":"","sources":["../../../src/phoenix/channelAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAChE,OAAO,aAAa,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,EACV,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EAErB,YAAY,EACZ,IAAI,EACJ,KAAK,EACN,MAAM,SAAS,CAAA;AAEhB,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB;IAMhF,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,YAAY,EAE5B;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,QAAQ,IAAI,IAAI,CAEnB;IAED,IAAI,WAAW,IAAI,KAAK,CAEvB;IAED,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,GAAG,MAAM;IAI3D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAIrC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAIjC,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAInC,QAAQ;IAIR,OAAO,CAAC,QAAQ,EAAE,sBAAsB;IAIxC,OAAO,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM;IAIjD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAqB5E,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAK9C,OAAO;IAIP,QAAQ;IAIR,SAAS;IAIT,QAAQ;IAIR,SAAS;IAIT,oBAAoB,CAAC,cAAc,EAAE,qBAAqB;IAI1D,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB;CAUlD"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const constants_1 = require("../lib/constants");
4
+ class ChannelAdapter {
5
+ constructor(socket, topic, params) {
6
+ const phoenixParams = phoenixChannelParams(params);
7
+ this.channel = socket.getSocket().channel(topic, phoenixParams);
8
+ this.socket = socket;
9
+ }
10
+ get state() {
11
+ return this.channel.state;
12
+ }
13
+ set state(state) {
14
+ this.channel.state = state;
15
+ }
16
+ get joinedOnce() {
17
+ return this.channel.joinedOnce;
18
+ }
19
+ get joinPush() {
20
+ return this.channel.joinPush;
21
+ }
22
+ get rejoinTimer() {
23
+ return this.channel.rejoinTimer;
24
+ }
25
+ on(event, callback) {
26
+ return this.channel.on(event, callback);
27
+ }
28
+ off(event, refNumber) {
29
+ this.channel.off(event, refNumber);
30
+ }
31
+ subscribe(timeout) {
32
+ return this.channel.join(timeout);
33
+ }
34
+ unsubscribe(timeout) {
35
+ return this.channel.leave(timeout);
36
+ }
37
+ teardown() {
38
+ this.channel.teardown();
39
+ }
40
+ onClose(callback) {
41
+ this.channel.onClose(callback);
42
+ }
43
+ onError(callback) {
44
+ return this.channel.onError(callback);
45
+ }
46
+ push(event, payload, timeout) {
47
+ let push;
48
+ try {
49
+ push = this.channel.push(event, payload, timeout);
50
+ }
51
+ catch (error) {
52
+ throw `tried to push '${event}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`;
53
+ }
54
+ if (this.channel.pushBuffer.length > constants_1.MAX_PUSH_BUFFER_SIZE) {
55
+ const removedPush = this.channel.pushBuffer.shift();
56
+ removedPush.cancelTimeout();
57
+ this.socket.log('channel', `discarded push due to buffer overflow: ${removedPush.event}`, removedPush.payload());
58
+ }
59
+ return push;
60
+ }
61
+ updateJoinPayload(payload) {
62
+ const oldPayload = this.channel.joinPush.payload();
63
+ this.channel.joinPush.payload = () => (Object.assign(Object.assign({}, oldPayload), payload));
64
+ }
65
+ canPush() {
66
+ return this.socket.isConnected() && this.state === constants_1.CHANNEL_STATES.joined;
67
+ }
68
+ isJoined() {
69
+ return this.state === constants_1.CHANNEL_STATES.joined;
70
+ }
71
+ isJoining() {
72
+ return this.state === constants_1.CHANNEL_STATES.joining;
73
+ }
74
+ isClosed() {
75
+ return this.state === constants_1.CHANNEL_STATES.closed;
76
+ }
77
+ isLeaving() {
78
+ return this.state === constants_1.CHANNEL_STATES.leaving;
79
+ }
80
+ updateFilterBindings(filterBindings) {
81
+ this.channel.filterBindings = filterBindings;
82
+ }
83
+ updatePayloadTransform(callback) {
84
+ this.channel.onMessage = callback;
85
+ }
86
+ /**
87
+ * @internal
88
+ */
89
+ getChannel() {
90
+ return this.channel;
91
+ }
92
+ }
93
+ exports.default = ChannelAdapter;
94
+ function phoenixChannelParams(options) {
95
+ return {
96
+ config: Object.assign({
97
+ broadcast: { ack: false, self: false },
98
+ presence: { key: '', enabled: false },
99
+ private: false,
100
+ }, options.config),
101
+ };
102
+ }
103
+ //# sourceMappingURL=channelAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channelAdapter.js","sourceRoot":"","sources":["../../../src/phoenix/channelAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import type { PresenceState, PresenceStates } from './types';
2
+ import type { RealtimePresenceOptions, RealtimePresenceState } from '../RealtimePresence';
3
+ import ChannelAdapter from './channelAdapter';
4
+ export default class PresenceAdapter {
5
+ private presence;
6
+ constructor(channel: ChannelAdapter, opts?: RealtimePresenceOptions);
7
+ get state(): RealtimePresenceState;
8
+ /**
9
+ * @private
10
+ * Remove 'metas' key
11
+ * Change 'phx_ref' to 'presence_ref'
12
+ * Remove 'phx_ref' and 'phx_ref_prev'
13
+ *
14
+ * @example
15
+ * // returns {
16
+ * abc123: [
17
+ * { presence_ref: '2', user_id: 1 },
18
+ * { presence_ref: '3', user_id: 2 }
19
+ * ]
20
+ * }
21
+ * RealtimePresence.transformState({
22
+ * abc123: {
23
+ * metas: [
24
+ * { phx_ref: '2', phx_ref_prev: '1' user_id: 1 },
25
+ * { phx_ref: '3', user_id: 2 }
26
+ * ]
27
+ * }
28
+ * })
29
+ *
30
+ */
31
+ static transformState(state: PresenceStates): RealtimePresenceState;
32
+ static onJoinPayload(key: string, currentPresence: PresenceState, newPresence: PresenceState): {
33
+ event: string;
34
+ key: string;
35
+ currentPresences: {
36
+ presence_ref: string;
37
+ }[];
38
+ newPresences: {
39
+ presence_ref: string;
40
+ }[];
41
+ };
42
+ static onLeavePayload(key: string, currentPresence: PresenceState, leftPresence: PresenceState): {
43
+ event: string;
44
+ key: string;
45
+ currentPresences: {
46
+ presence_ref: string;
47
+ }[];
48
+ leftPresences: {
49
+ presence_ref: string;
50
+ }[];
51
+ };
52
+ }
53
+ //# sourceMappingURL=presenceAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presenceAdapter.d.ts","sourceRoot":"","sources":["../../../src/phoenix/presenceAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC5D,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EAEtB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,cAAc,MAAM,kBAAkB,CAAA;AAE7C,MAAM,CAAC,OAAO,OAAO,eAAe;IAClC,OAAO,CAAC,QAAQ,CAAU;gBAEd,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,uBAAuB;IAmBnE,IAAI,KAAK,0BAER;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,qBAAqB;IAWnE,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa;;;;;;;;;;IAY5F,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa;;;;;;;;;;CAW/F"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const phoenix_1 = require("@supabase/phoenix");
4
+ class PresenceAdapter {
5
+ constructor(channel, opts) {
6
+ const phoenixOptions = phoenixPresenceOptions(opts);
7
+ this.presence = new phoenix_1.Presence(channel.getChannel(), phoenixOptions);
8
+ this.presence.onJoin((key, currentPresence, newPresence) => {
9
+ const onJoinPayload = PresenceAdapter.onJoinPayload(key, currentPresence, newPresence);
10
+ channel.getChannel().trigger('presence', onJoinPayload);
11
+ });
12
+ this.presence.onLeave((key, currentPresence, leftPresence) => {
13
+ const onLeavePayload = PresenceAdapter.onLeavePayload(key, currentPresence, leftPresence);
14
+ channel.getChannel().trigger('presence', onLeavePayload);
15
+ });
16
+ this.presence.onSync(() => {
17
+ channel.getChannel().trigger('presence', { event: 'sync' });
18
+ });
19
+ }
20
+ get state() {
21
+ return PresenceAdapter.transformState(this.presence.state);
22
+ }
23
+ /**
24
+ * @private
25
+ * Remove 'metas' key
26
+ * Change 'phx_ref' to 'presence_ref'
27
+ * Remove 'phx_ref' and 'phx_ref_prev'
28
+ *
29
+ * @example
30
+ * // returns {
31
+ * abc123: [
32
+ * { presence_ref: '2', user_id: 1 },
33
+ * { presence_ref: '3', user_id: 2 }
34
+ * ]
35
+ * }
36
+ * RealtimePresence.transformState({
37
+ * abc123: {
38
+ * metas: [
39
+ * { phx_ref: '2', phx_ref_prev: '1' user_id: 1 },
40
+ * { phx_ref: '3', user_id: 2 }
41
+ * ]
42
+ * }
43
+ * })
44
+ *
45
+ */
46
+ static transformState(state) {
47
+ state = cloneState(state);
48
+ return Object.getOwnPropertyNames(state).reduce((newState, key) => {
49
+ const presences = state[key];
50
+ newState[key] = transformState(presences);
51
+ return newState;
52
+ }, {});
53
+ }
54
+ static onJoinPayload(key, currentPresence, newPresence) {
55
+ const currentPresences = parseCurrentPresences(currentPresence);
56
+ const newPresences = transformState(newPresence);
57
+ return {
58
+ event: 'join',
59
+ key,
60
+ currentPresences,
61
+ newPresences,
62
+ };
63
+ }
64
+ static onLeavePayload(key, currentPresence, leftPresence) {
65
+ const currentPresences = parseCurrentPresences(currentPresence);
66
+ const leftPresences = transformState(leftPresence);
67
+ return {
68
+ event: 'leave',
69
+ key,
70
+ currentPresences,
71
+ leftPresences,
72
+ };
73
+ }
74
+ }
75
+ exports.default = PresenceAdapter;
76
+ function transformState(presences) {
77
+ return presences.metas.map((presence) => {
78
+ presence['presence_ref'] = presence['phx_ref'];
79
+ delete presence['phx_ref'];
80
+ delete presence['phx_ref_prev'];
81
+ return presence;
82
+ });
83
+ }
84
+ function cloneState(state) {
85
+ return JSON.parse(JSON.stringify(state));
86
+ }
87
+ function phoenixPresenceOptions(opts) {
88
+ return (opts === null || opts === void 0 ? void 0 : opts.events) && { events: opts.events };
89
+ }
90
+ function parseCurrentPresences(currentPresences) {
91
+ return (currentPresences === null || currentPresences === void 0 ? void 0 : currentPresences.metas) ? transformState(currentPresences) : [];
92
+ }
93
+ //# sourceMappingURL=presenceAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presenceAdapter.js","sourceRoot":"","sources":["../../../src/phoenix/presenceAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import type { Message, SocketOnClose, SocketOnMessage, SocketOnOpen, SocketOnError, SocketOptions, SocketStateChangeCallbacks, Vsn, Encode, Decode, HeartbeatCallback, Timer } from './types';
2
+ import { ConnectionState } from '../lib/constants';
3
+ import type { HeartbeatTimer, WebSocketLikeConstructor } from '../RealtimeClient';
4
+ export default class SocketAdapter {
5
+ private socket;
6
+ constructor(endPoint: string, options: SocketOptions);
7
+ get timeout(): number;
8
+ get endPoint(): string;
9
+ get transport(): WebSocketLikeConstructor;
10
+ get heartbeatIntervalMs(): number;
11
+ get heartbeatCallback(): HeartbeatCallback;
12
+ set heartbeatCallback(callback: HeartbeatCallback);
13
+ get heartbeatTimer(): HeartbeatTimer;
14
+ get pendingHeartbeatRef(): string | null;
15
+ get reconnectTimer(): Timer;
16
+ get vsn(): Vsn;
17
+ get encode(): Encode<void>;
18
+ get decode(): Decode<void>;
19
+ get reconnectAfterMs(): (tries: number) => number;
20
+ get sendBuffer(): (() => void)[];
21
+ get stateChangeCallbacks(): SocketStateChangeCallbacks;
22
+ connect(): void;
23
+ disconnect(callback: () => void, code?: number, reason?: string, timeout?: number): Promise<'ok' | 'timeout'>;
24
+ push(data: Message<Record<string, unknown>>): void;
25
+ log(kind: string, msg: string, data?: any): void;
26
+ makeRef(): string;
27
+ onOpen(callback: SocketOnOpen): void;
28
+ onClose(callback: SocketOnClose): void;
29
+ onError(callback: SocketOnError): void;
30
+ onMessage(callback: SocketOnMessage): void;
31
+ isConnected(): boolean;
32
+ isConnecting(): boolean;
33
+ isDisconnecting(): boolean;
34
+ connectionState(): ConnectionState;
35
+ endPointURL(): string;
36
+ sendHeartbeat(): void;
37
+ }
38
+ //# sourceMappingURL=socketAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socketAdapter.d.ts","sourceRoot":"","sources":["../../../src/phoenix/socketAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,OAAO,EACP,aAAa,EACb,eAAe,EACf,YAAY,EACZ,aAAa,EACb,aAAa,EACb,0BAA0B,EAC1B,GAAG,EACH,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,KAAK,EACN,MAAM,SAAS,CAAA;AAChB,OAAO,EAAoB,eAAe,EAAE,MAAM,kBAAkB,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAA;AAEjF,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,OAAO,CAAC,MAAM,CAAQ;gBAEV,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAIpD,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,SAAS,IAAI,wBAAwB,CAExC;IAED,IAAI,mBAAmB,IAAI,MAAM,CAEhC;IAED,IAAI,iBAAiB,IAAI,iBAAiB,CAEzC;IAED,IAAI,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAEhD;IAED,IAAI,cAAc,IAAI,cAAc,CAEnC;IAED,IAAI,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEvC;IAED,IAAI,cAAc,IAAI,KAAK,CAE1B;IAED,IAAI,GAAG,IAAI,GAAG,CAEb;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAEzB;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAEzB;IAED,IAAI,gBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAEhD;IAED,IAAI,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAE/B;IAED,IAAI,oBAAoB,IAAI,0BAA0B,CAErD;IAED,OAAO;IAIP,UAAU,CACR,QAAQ,EAAE,MAAM,IAAI,EACpB,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,MAAc,GACtB,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAc5B,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI3C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG;IAIzC,OAAO,IAAI,MAAM;IAIjB,MAAM,CAAC,QAAQ,EAAE,YAAY;IAI7B,OAAO,CAAC,QAAQ,EAAE,aAAa;IAI/B,OAAO,CAAC,QAAQ,EAAE,aAAa;IAI/B,SAAS,CAAC,QAAQ,EAAE,eAAe;IAInC,WAAW;IAIX,YAAY;IAIZ,eAAe;IAIf,eAAe,IAAI,eAAe;IAKlC,WAAW,IAAI,MAAM;IAIrB,aAAa;CAUd"}
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const phoenix_1 = require("@supabase/phoenix");
4
+ const constants_1 = require("../lib/constants");
5
+ class SocketAdapter {
6
+ constructor(endPoint, options) {
7
+ this.socket = new phoenix_1.Socket(endPoint, options);
8
+ }
9
+ get timeout() {
10
+ return this.socket.timeout;
11
+ }
12
+ get endPoint() {
13
+ return this.socket.endPoint;
14
+ }
15
+ get transport() {
16
+ return this.socket.transport;
17
+ }
18
+ get heartbeatIntervalMs() {
19
+ return this.socket.heartbeatIntervalMs;
20
+ }
21
+ get heartbeatCallback() {
22
+ return this.socket.heartbeatCallback;
23
+ }
24
+ set heartbeatCallback(callback) {
25
+ this.socket.heartbeatCallback = callback;
26
+ }
27
+ get heartbeatTimer() {
28
+ return this.socket.heartbeatTimer;
29
+ }
30
+ get pendingHeartbeatRef() {
31
+ return this.socket.pendingHeartbeatRef;
32
+ }
33
+ get reconnectTimer() {
34
+ return this.socket.reconnectTimer;
35
+ }
36
+ get vsn() {
37
+ return this.socket.vsn;
38
+ }
39
+ get encode() {
40
+ return this.socket.encode;
41
+ }
42
+ get decode() {
43
+ return this.socket.decode;
44
+ }
45
+ get reconnectAfterMs() {
46
+ return this.socket.reconnectAfterMs;
47
+ }
48
+ get sendBuffer() {
49
+ return this.socket.sendBuffer;
50
+ }
51
+ get stateChangeCallbacks() {
52
+ return this.socket.stateChangeCallbacks;
53
+ }
54
+ connect() {
55
+ this.socket.connect();
56
+ }
57
+ disconnect(callback, code, reason, timeout = 10000) {
58
+ return new Promise((resolve) => {
59
+ setTimeout(() => resolve('timeout'), timeout);
60
+ this.socket.disconnect(() => {
61
+ callback();
62
+ resolve('ok');
63
+ }, code, reason);
64
+ });
65
+ }
66
+ push(data) {
67
+ this.socket.push(data);
68
+ }
69
+ log(kind, msg, data) {
70
+ this.socket.log(kind, msg, data);
71
+ }
72
+ makeRef() {
73
+ return this.socket.makeRef();
74
+ }
75
+ onOpen(callback) {
76
+ this.socket.onOpen(callback);
77
+ }
78
+ onClose(callback) {
79
+ this.socket.onClose(callback);
80
+ }
81
+ onError(callback) {
82
+ this.socket.onError(callback);
83
+ }
84
+ onMessage(callback) {
85
+ this.socket.onMessage(callback);
86
+ }
87
+ isConnected() {
88
+ return this.socket.isConnected();
89
+ }
90
+ isConnecting() {
91
+ return this.socket.connectionState() == constants_1.CONNECTION_STATE.connecting;
92
+ }
93
+ isDisconnecting() {
94
+ return this.socket.connectionState() == constants_1.CONNECTION_STATE.closing;
95
+ }
96
+ connectionState() {
97
+ // @ts-ignore - requires better typing and exposing type in phoenix
98
+ return this.socket.connectionState();
99
+ }
100
+ endPointURL() {
101
+ return this.socket.endPointURL();
102
+ }
103
+ sendHeartbeat() {
104
+ this.socket.sendHeartbeat();
105
+ }
106
+ /**
107
+ * @internal
108
+ */
109
+ getSocket() {
110
+ return this.socket;
111
+ }
112
+ }
113
+ exports.default = SocketAdapter;
114
+ //# sourceMappingURL=socketAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socketAdapter.js","sourceRoot":"","sources":["../../../src/phoenix/socketAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export type { Socket, SocketOptions, SocketState, SocketOnOpen, SocketOnError, SocketOnMessage, SocketOnClose, SocketStateChangeCallbacks, Channel, ChannelState, ChannelEvent, ChannelBindingCallback, ChannelFilterBindings, ChannelOnMessage, ChannelOnErrorCallback, PresenceState, Message, Params, Transport, Timer, Vsn, Encode, Decode, HeartbeatCallback, HeartbeatStatus, } from '@supabase/phoenix';
2
+ import type { Channel, PresenceState } from '@supabase/phoenix';
3
+ export type Push = ReturnType<Channel['push']>;
4
+ export type PresenceStates = Record<string, PresenceState>;
5
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/phoenix/types.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,aAAa,EACb,WAAW,EACX,YAAY,EACZ,aAAa,EACb,eAAe,EACf,aAAa,EACb,0BAA0B,EAC1B,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,OAAO,EACP,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,MAAM,EACN,MAAM,EACN,iBAAiB,EACjB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAE/D,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;AAC9C,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/phoenix/types.ts"],"names":[],"mappings":""}
@@ -1,9 +1,8 @@
1
- import { CHANNEL_STATES } from './lib/constants';
2
- import Push from './lib/push';
1
+ import type { ChannelState } from './lib/constants';
3
2
  import type RealtimeClient from './RealtimeClient';
4
- import Timer from './lib/timer';
5
3
  import RealtimePresence, { REALTIME_PRESENCE_LISTEN_EVENTS } from './RealtimePresence';
6
4
  import type { RealtimePresenceJoinPayload, RealtimePresenceLeavePayload, RealtimePresenceState } from './RealtimePresence';
5
+ import { ChannelBindingCallback } from './phoenix/types';
7
6
  type ReplayOption = {
8
7
  since: number;
9
8
  limit?: number;
@@ -131,7 +130,22 @@ export declare enum REALTIME_SUBSCRIBE_STATES {
131
130
  CLOSED = "CLOSED",
132
131
  CHANNEL_ERROR = "CHANNEL_ERROR"
133
132
  }
134
- export declare const REALTIME_CHANNEL_STATES: typeof CHANNEL_STATES;
133
+ export declare const REALTIME_CHANNEL_STATES: {
134
+ readonly closed: "closed";
135
+ readonly errored: "errored";
136
+ readonly joined: "joined";
137
+ readonly joining: "joining";
138
+ readonly leaving: "leaving";
139
+ };
140
+ type Binding = {
141
+ type: string;
142
+ filter: {
143
+ [key: string]: any;
144
+ };
145
+ callback: ChannelBindingCallback;
146
+ ref: number;
147
+ id?: string;
148
+ };
135
149
  /** A channel is the basic building block of Realtime
136
150
  * and narrows the scope of data flow to subscribed clients.
137
151
  * You can think of a channel as a chatroom where participants are able to see who's online
@@ -142,26 +156,17 @@ export default class RealtimeChannel {
142
156
  topic: string;
143
157
  params: RealtimeChannelOptions;
144
158
  socket: RealtimeClient;
145
- bindings: {
146
- [key: string]: {
147
- type: string;
148
- filter: {
149
- [key: string]: any;
150
- };
151
- callback: Function;
152
- id?: string;
153
- }[];
154
- };
155
- timeout: number;
156
- state: CHANNEL_STATES;
157
- joinedOnce: boolean;
158
- joinPush: Push;
159
- rejoinTimer: Timer;
160
- pushBuffer: Push[];
161
- presence: RealtimePresence;
162
- broadcastEndpointURL: string;
159
+ bindings: Record<string, Binding[]>;
163
160
  subTopic: string;
161
+ broadcastEndpointURL: string;
164
162
  private: boolean;
163
+ presence: RealtimePresence;
164
+ get state(): ChannelState;
165
+ set state(state: ChannelState);
166
+ get joinedOnce(): boolean;
167
+ get timeout(): number;
168
+ get joinPush(): import("@supabase/phoenix").Push;
169
+ get rejoinTimer(): import("@supabase/phoenix/priv/static/types/timer").default;
165
170
  /**
166
171
  * Creates a channel that can broadcast messages, sync presence, and listen to Postgres changes.
167
172
  *
@@ -183,6 +188,7 @@ export default class RealtimeChannel {
183
188
  topic: string, params: RealtimeChannelOptions | undefined, socket: RealtimeClient);
184
189
  /** Subscribe registers your client with the server */
185
190
  subscribe(callback?: (status: REALTIME_SUBSCRIBE_STATES, err?: Error) => void, timeout?: number): RealtimeChannel;
191
+ private _updatePostgresBindings;
186
192
  /**
187
193
  * Returns the current presence state for this channel.
188
194
  *
@@ -223,6 +229,11 @@ export default class RealtimeChannel {
223
229
  }>(type: `${REALTIME_LISTEN_TYPES.PRESENCE}`, filter: {
224
230
  event: `${REALTIME_PRESENCE_LISTEN_EVENTS.LEAVE}`;
225
231
  }, callback: (payload: RealtimePresenceLeavePayload<T>) => void): RealtimeChannel;
232
+ on<T extends {
233
+ [key: string]: any;
234
+ }>(type: `${REALTIME_LISTEN_TYPES.PRESENCE}`, filter: {
235
+ event: '*';
236
+ }, callback: (payload?: RealtimePresenceJoinPayload<T> | RealtimePresenceLeavePayload<T>) => void): RealtimeChannel;
226
237
  on<T extends {
227
238
  [key: string]: any;
228
239
  }>(type: `${REALTIME_LISTEN_TYPES.POSTGRES_CHANGES}`, filter: RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL}`>, callback: (payload: RealtimePostgresChangesPayload<T>) => void): RealtimeChannel;
@@ -346,9 +357,7 @@ export default class RealtimeChannel {
346
357
  * Updates the payload that will be sent the next time the channel joins (reconnects).
347
358
  * Useful for rotating access tokens or updating config without re-creating the channel.
348
359
  */
349
- updateJoinPayload(payload: {
350
- [key: string]: any;
351
- }): void;
360
+ updateJoinPayload(payload: Record<string, any>): void;
352
361
  /**
353
362
  * Leaves the channel.
354
363
  *
@@ -358,10 +367,8 @@ export default class RealtimeChannel {
358
367
  * To receive leave acknowledgements, use the a `receive` hook to bind to the server ack, ie:
359
368
  * channel.unsubscribe().receive("ok", () => alert("left!") )
360
369
  */
361
- unsubscribe(timeout?: number): Promise<'ok' | 'timed out' | 'error'>;
370
+ unsubscribe(timeout?: number): Promise<RealtimeChannelSendResponse>;
362
371
  /**
363
- * Teardown the channel.
364
- *
365
372
  * Destroys and stops related timers.
366
373
  */
367
374
  teardown(): void;