@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.
- package/dist/main/RealtimeChannel.d.ts +35 -28
- package/dist/main/RealtimeChannel.d.ts.map +1 -1
- package/dist/main/RealtimeChannel.js +140 -301
- package/dist/main/RealtimeChannel.js.map +1 -1
- package/dist/main/RealtimeClient.d.ts +38 -57
- package/dist/main/RealtimeClient.d.ts.map +1 -1
- package/dist/main/RealtimeClient.js +232 -520
- package/dist/main/RealtimeClient.js.map +1 -1
- package/dist/main/RealtimePresence.d.ts +8 -24
- package/dist/main/RealtimePresence.d.ts.map +1 -1
- package/dist/main/RealtimePresence.js +6 -202
- package/dist/main/RealtimePresence.js.map +1 -1
- package/dist/main/lib/constants.d.ts +39 -35
- package/dist/main/lib/constants.d.ts.map +1 -1
- package/dist/main/lib/constants.js +30 -35
- package/dist/main/lib/constants.js.map +1 -1
- package/dist/main/lib/version.d.ts +1 -1
- package/dist/main/lib/version.d.ts.map +1 -1
- package/dist/main/lib/version.js +1 -1
- package/dist/main/lib/version.js.map +1 -1
- package/dist/main/lib/websocket-factory.d.ts +0 -9
- package/dist/main/lib/websocket-factory.d.ts.map +1 -1
- package/dist/main/lib/websocket-factory.js +0 -12
- package/dist/main/lib/websocket-factory.js.map +1 -1
- package/dist/main/phoenix/channelAdapter.d.ts +32 -0
- package/dist/main/phoenix/channelAdapter.d.ts.map +1 -0
- package/dist/main/phoenix/channelAdapter.js +103 -0
- package/dist/main/phoenix/channelAdapter.js.map +1 -0
- package/dist/main/phoenix/presenceAdapter.d.ts +53 -0
- package/dist/main/phoenix/presenceAdapter.d.ts.map +1 -0
- package/dist/main/phoenix/presenceAdapter.js +93 -0
- package/dist/main/phoenix/presenceAdapter.js.map +1 -0
- package/dist/main/phoenix/socketAdapter.d.ts +38 -0
- package/dist/main/phoenix/socketAdapter.d.ts.map +1 -0
- package/dist/main/phoenix/socketAdapter.js +114 -0
- package/dist/main/phoenix/socketAdapter.js.map +1 -0
- package/dist/main/phoenix/types.d.ts +5 -0
- package/dist/main/phoenix/types.d.ts.map +1 -0
- package/dist/main/phoenix/types.js +3 -0
- package/dist/main/phoenix/types.js.map +1 -0
- package/dist/module/RealtimeChannel.d.ts +35 -28
- package/dist/module/RealtimeChannel.d.ts.map +1 -1
- package/dist/module/RealtimeChannel.js +141 -302
- package/dist/module/RealtimeChannel.js.map +1 -1
- package/dist/module/RealtimeClient.d.ts +38 -57
- package/dist/module/RealtimeClient.d.ts.map +1 -1
- package/dist/module/RealtimeClient.js +233 -521
- package/dist/module/RealtimeClient.js.map +1 -1
- package/dist/module/RealtimePresence.d.ts +8 -24
- package/dist/module/RealtimePresence.d.ts.map +1 -1
- package/dist/module/RealtimePresence.js +5 -202
- package/dist/module/RealtimePresence.js.map +1 -1
- package/dist/module/lib/constants.d.ts +39 -35
- package/dist/module/lib/constants.d.ts.map +1 -1
- package/dist/module/lib/constants.js +30 -35
- package/dist/module/lib/constants.js.map +1 -1
- package/dist/module/lib/version.d.ts +1 -1
- package/dist/module/lib/version.d.ts.map +1 -1
- package/dist/module/lib/version.js +1 -1
- package/dist/module/lib/version.js.map +1 -1
- package/dist/module/lib/websocket-factory.d.ts +0 -9
- package/dist/module/lib/websocket-factory.d.ts.map +1 -1
- package/dist/module/lib/websocket-factory.js +0 -12
- package/dist/module/lib/websocket-factory.js.map +1 -1
- package/dist/module/phoenix/channelAdapter.d.ts +32 -0
- package/dist/module/phoenix/channelAdapter.d.ts.map +1 -0
- package/dist/module/phoenix/channelAdapter.js +100 -0
- package/dist/module/phoenix/channelAdapter.js.map +1 -0
- package/dist/module/phoenix/presenceAdapter.d.ts +53 -0
- package/dist/module/phoenix/presenceAdapter.d.ts.map +1 -0
- package/dist/module/phoenix/presenceAdapter.js +90 -0
- package/dist/module/phoenix/presenceAdapter.js.map +1 -0
- package/dist/module/phoenix/socketAdapter.d.ts +38 -0
- package/dist/module/phoenix/socketAdapter.d.ts.map +1 -0
- package/dist/module/phoenix/socketAdapter.js +111 -0
- package/dist/module/phoenix/socketAdapter.js.map +1 -0
- package/dist/module/phoenix/types.d.ts +5 -0
- package/dist/module/phoenix/types.d.ts.map +1 -0
- package/dist/module/phoenix/types.js +2 -0
- package/dist/module/phoenix/types.js.map +1 -0
- package/dist/tsconfig.module.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/RealtimeChannel.ts +201 -364
- package/src/RealtimeClient.ts +296 -583
- package/src/RealtimePresence.ts +10 -287
- package/src/lib/constants.ts +50 -37
- package/src/lib/version.ts +1 -1
- package/src/lib/websocket-factory.ts +0 -13
- package/src/phoenix/channelAdapter.ts +147 -0
- package/src/phoenix/presenceAdapter.ts +116 -0
- package/src/phoenix/socketAdapter.ts +168 -0
- package/src/phoenix/types.ts +32 -0
- package/dist/main/lib/push.d.ts +0 -48
- package/dist/main/lib/push.d.ts.map +0 -1
- package/dist/main/lib/push.js +0 -102
- package/dist/main/lib/push.js.map +0 -1
- package/dist/main/lib/timer.d.ts +0 -22
- package/dist/main/lib/timer.d.ts.map +0 -1
- package/dist/main/lib/timer.js +0 -39
- package/dist/main/lib/timer.js.map +0 -1
- package/dist/module/lib/push.d.ts +0 -48
- package/dist/module/lib/push.d.ts.map +0 -1
- package/dist/module/lib/push.js +0 -99
- package/dist/module/lib/push.js.map +0 -1
- package/dist/module/lib/timer.d.ts +0 -22
- package/dist/module/lib/timer.d.ts.map +0 -1
- package/dist/module/lib/timer.js +0 -36
- package/dist/module/lib/timer.js.map +0 -1
- package/src/lib/push.ts +0 -121
- package/src/lib/timer.ts +0 -43
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RealtimeChannel.d.ts","sourceRoot":"","sources":["../../src/RealtimeChannel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RealtimeChannel.d.ts","sourceRoot":"","sources":["../../src/RealtimeChannel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { CHANNEL_EVENTS, CHANNEL_STATES
|
|
2
|
-
import Push from './lib/push';
|
|
3
|
-
import Timer from './lib/timer';
|
|
1
|
+
import { CHANNEL_EVENTS, CHANNEL_STATES } from './lib/constants';
|
|
4
2
|
import RealtimePresence from './RealtimePresence';
|
|
5
3
|
import * as Transformers from './lib/transformers';
|
|
6
4
|
import { httpEndpointURL } from './lib/transformers';
|
|
5
|
+
import ChannelAdapter from './phoenix/channelAdapter';
|
|
7
6
|
export var REALTIME_POSTGRES_CHANGES_LISTEN_EVENT;
|
|
8
7
|
(function (REALTIME_POSTGRES_CHANGES_LISTEN_EVENT) {
|
|
9
8
|
REALTIME_POSTGRES_CHANGES_LISTEN_EVENT["ALL"] = "*";
|
|
@@ -32,6 +31,24 @@ export const REALTIME_CHANNEL_STATES = CHANNEL_STATES;
|
|
|
32
31
|
* and send and receive messages.
|
|
33
32
|
*/
|
|
34
33
|
export default class RealtimeChannel {
|
|
34
|
+
get state() {
|
|
35
|
+
return this.channelAdapter.state;
|
|
36
|
+
}
|
|
37
|
+
set state(state) {
|
|
38
|
+
this.channelAdapter.state = state;
|
|
39
|
+
}
|
|
40
|
+
get joinedOnce() {
|
|
41
|
+
return this.channelAdapter.joinedOnce;
|
|
42
|
+
}
|
|
43
|
+
get timeout() {
|
|
44
|
+
return this.socket.timeout;
|
|
45
|
+
}
|
|
46
|
+
get joinPush() {
|
|
47
|
+
return this.channelAdapter.joinPush;
|
|
48
|
+
}
|
|
49
|
+
get rejoinTimer() {
|
|
50
|
+
return this.channelAdapter.rejoinTimer;
|
|
51
|
+
}
|
|
35
52
|
/**
|
|
36
53
|
* Creates a channel that can broadcast messages, sync presence, and listen to Postgres changes.
|
|
37
54
|
*
|
|
@@ -56,59 +73,19 @@ export default class RealtimeChannel {
|
|
|
56
73
|
this.params = params;
|
|
57
74
|
this.socket = socket;
|
|
58
75
|
this.bindings = {};
|
|
59
|
-
this.state = CHANNEL_STATES.closed;
|
|
60
|
-
this.joinedOnce = false;
|
|
61
|
-
this.pushBuffer = [];
|
|
62
76
|
this.subTopic = topic.replace(/^realtime:/i, '');
|
|
63
77
|
this.params.config = Object.assign({
|
|
64
78
|
broadcast: { ack: false, self: false },
|
|
65
79
|
presence: { key: '', enabled: false },
|
|
66
80
|
private: false,
|
|
67
81
|
}, params.config);
|
|
68
|
-
this.
|
|
69
|
-
this.
|
|
70
|
-
this.rejoinTimer = new Timer(() => this._rejoinUntilConnected(), this.socket.reconnectAfterMs);
|
|
71
|
-
this.joinPush.receive('ok', () => {
|
|
72
|
-
this.state = CHANNEL_STATES.joined;
|
|
73
|
-
this.rejoinTimer.reset();
|
|
74
|
-
this.pushBuffer.forEach((pushEvent) => pushEvent.send());
|
|
75
|
-
this.pushBuffer = [];
|
|
76
|
-
});
|
|
82
|
+
this.channelAdapter = new ChannelAdapter(this.socket.socketAdapter, topic, this.params);
|
|
83
|
+
this.presence = new RealtimePresence(this);
|
|
77
84
|
this._onClose(() => {
|
|
78
|
-
this.rejoinTimer.reset();
|
|
79
|
-
this.socket.log('channel', `close ${this.topic} ${this._joinRef()}`);
|
|
80
|
-
this.state = CHANNEL_STATES.closed;
|
|
81
85
|
this.socket._remove(this);
|
|
82
86
|
});
|
|
83
|
-
this.
|
|
84
|
-
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
this.socket.log('channel', `error ${this.topic}`, reason);
|
|
88
|
-
this.state = CHANNEL_STATES.errored;
|
|
89
|
-
this.rejoinTimer.scheduleTimeout();
|
|
90
|
-
});
|
|
91
|
-
this.joinPush.receive('timeout', () => {
|
|
92
|
-
if (!this._isJoining()) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
this.socket.log('channel', `timeout ${this.topic}`, this.joinPush.timeout);
|
|
96
|
-
this.state = CHANNEL_STATES.errored;
|
|
97
|
-
this.rejoinTimer.scheduleTimeout();
|
|
98
|
-
});
|
|
99
|
-
this.joinPush.receive('error', (reason) => {
|
|
100
|
-
if (this._isLeaving() || this._isClosed()) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
this.socket.log('channel', `error ${this.topic}`, reason);
|
|
104
|
-
this.state = CHANNEL_STATES.errored;
|
|
105
|
-
this.rejoinTimer.scheduleTimeout();
|
|
106
|
-
});
|
|
107
|
-
this._on(CHANNEL_EVENTS.reply, {}, (payload, ref) => {
|
|
108
|
-
this._trigger(this._replyEventName(ref), payload);
|
|
109
|
-
});
|
|
110
|
-
this.presence = new RealtimePresence(this);
|
|
111
|
-
this.broadcastEndpointURL = httpEndpointURL(this.socket.endPoint);
|
|
87
|
+
this._updateFilterTransform();
|
|
88
|
+
this.broadcastEndpointURL = httpEndpointURL(this.socket.socketAdapter.endPointURL());
|
|
112
89
|
this.private = this.params.config.private || false;
|
|
113
90
|
if (!this.private && ((_b = (_a = this.params.config) === null || _a === void 0 ? void 0 : _a.broadcast) === null || _b === void 0 ? void 0 : _b.replay)) {
|
|
114
91
|
throw `tried to use replay on public channel '${this.topic}'. It must be a private channel.`;
|
|
@@ -120,7 +97,7 @@ export default class RealtimeChannel {
|
|
|
120
97
|
if (!this.socket.isConnected()) {
|
|
121
98
|
this.socket.connect();
|
|
122
99
|
}
|
|
123
|
-
if (this.
|
|
100
|
+
if (this.channelAdapter.isClosed()) {
|
|
124
101
|
const { config: { broadcast, presence, private: isPrivate }, } = this.params;
|
|
125
102
|
const postgres_changes = (_b = (_a = this.bindings.postgres_changes) === null || _a === void 0 ? void 0 : _a.map((r) => r.filter)) !== null && _b !== void 0 ? _b : [];
|
|
126
103
|
const presence_enabled = (!!this.bindings[REALTIME_LISTEN_TYPES.PRESENCE] &&
|
|
@@ -136,14 +113,15 @@ export default class RealtimeChannel {
|
|
|
136
113
|
if (this.socket.accessTokenValue) {
|
|
137
114
|
accessTokenPayload.access_token = this.socket.accessTokenValue;
|
|
138
115
|
}
|
|
139
|
-
this._onError((
|
|
116
|
+
this._onError((reason) => {
|
|
117
|
+
callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, reason);
|
|
118
|
+
});
|
|
140
119
|
this._onClose(() => callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CLOSED));
|
|
141
120
|
this.updateJoinPayload(Object.assign({ config }, accessTokenPayload));
|
|
142
|
-
this.
|
|
143
|
-
this.
|
|
144
|
-
|
|
121
|
+
this._updateFilterMessage();
|
|
122
|
+
this.channelAdapter
|
|
123
|
+
.subscribe(timeout)
|
|
145
124
|
.receive('ok', async ({ postgres_changes }) => {
|
|
146
|
-
var _a;
|
|
147
125
|
// Only refresh auth if using callback-based tokens
|
|
148
126
|
if (!this.socket._isManualToken()) {
|
|
149
127
|
this.socket.setAuth();
|
|
@@ -152,45 +130,46 @@ export default class RealtimeChannel {
|
|
|
152
130
|
callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);
|
|
153
131
|
return;
|
|
154
132
|
}
|
|
155
|
-
|
|
156
|
-
const clientPostgresBindings = this.bindings.postgres_changes;
|
|
157
|
-
const bindingsLen = (_a = clientPostgresBindings === null || clientPostgresBindings === void 0 ? void 0 : clientPostgresBindings.length) !== null && _a !== void 0 ? _a : 0;
|
|
158
|
-
const newPostgresBindings = [];
|
|
159
|
-
for (let i = 0; i < bindingsLen; i++) {
|
|
160
|
-
const clientPostgresBinding = clientPostgresBindings[i];
|
|
161
|
-
const { filter: { event, schema, table, filter }, } = clientPostgresBinding;
|
|
162
|
-
const serverPostgresFilter = postgres_changes && postgres_changes[i];
|
|
163
|
-
if (serverPostgresFilter &&
|
|
164
|
-
serverPostgresFilter.event === event &&
|
|
165
|
-
RealtimeChannel.isFilterValueEqual(serverPostgresFilter.schema, schema) &&
|
|
166
|
-
RealtimeChannel.isFilterValueEqual(serverPostgresFilter.table, table) &&
|
|
167
|
-
RealtimeChannel.isFilterValueEqual(serverPostgresFilter.filter, filter)) {
|
|
168
|
-
newPostgresBindings.push(Object.assign(Object.assign({}, clientPostgresBinding), { id: serverPostgresFilter.id }));
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
this.unsubscribe();
|
|
172
|
-
this.state = CHANNEL_STATES.errored;
|
|
173
|
-
callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error('mismatch between server and client bindings for postgres changes'));
|
|
174
|
-
return;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
this.bindings.postgres_changes = newPostgresBindings;
|
|
178
|
-
callback && callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
133
|
+
this._updatePostgresBindings(postgres_changes, callback);
|
|
181
134
|
})
|
|
182
135
|
.receive('error', (error) => {
|
|
183
136
|
this.state = CHANNEL_STATES.errored;
|
|
184
137
|
callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error(JSON.stringify(Object.values(error).join(', ') || 'error')));
|
|
185
|
-
return;
|
|
186
138
|
})
|
|
187
139
|
.receive('timeout', () => {
|
|
188
140
|
callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.TIMED_OUT);
|
|
189
|
-
return;
|
|
190
141
|
});
|
|
191
142
|
}
|
|
192
143
|
return this;
|
|
193
144
|
}
|
|
145
|
+
_updatePostgresBindings(postgres_changes, callback) {
|
|
146
|
+
var _a;
|
|
147
|
+
const clientPostgresBindings = this.bindings.postgres_changes;
|
|
148
|
+
const bindingsLen = (_a = clientPostgresBindings === null || clientPostgresBindings === void 0 ? void 0 : clientPostgresBindings.length) !== null && _a !== void 0 ? _a : 0;
|
|
149
|
+
const newPostgresBindings = [];
|
|
150
|
+
for (let i = 0; i < bindingsLen; i++) {
|
|
151
|
+
const clientPostgresBinding = clientPostgresBindings[i];
|
|
152
|
+
const { filter: { event, schema, table, filter }, } = clientPostgresBinding;
|
|
153
|
+
const serverPostgresFilter = postgres_changes && postgres_changes[i];
|
|
154
|
+
if (serverPostgresFilter &&
|
|
155
|
+
serverPostgresFilter.event === event &&
|
|
156
|
+
RealtimeChannel.isFilterValueEqual(serverPostgresFilter.schema, schema) &&
|
|
157
|
+
RealtimeChannel.isFilterValueEqual(serverPostgresFilter.table, table) &&
|
|
158
|
+
RealtimeChannel.isFilterValueEqual(serverPostgresFilter.filter, filter)) {
|
|
159
|
+
newPostgresBindings.push(Object.assign(Object.assign({}, clientPostgresBinding), { id: serverPostgresFilter.id }));
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
this.unsubscribe();
|
|
163
|
+
this.state = CHANNEL_STATES.errored;
|
|
164
|
+
callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error('mismatch between server and client bindings for postgres changes'));
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
this.bindings.postgres_changes = newPostgresBindings;
|
|
169
|
+
if (this.state != CHANNEL_STATES.errored && callback) {
|
|
170
|
+
callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
194
173
|
/**
|
|
195
174
|
* Returns the current presence state for this channel.
|
|
196
175
|
*
|
|
@@ -221,9 +200,9 @@ export default class RealtimeChannel {
|
|
|
221
200
|
}, opts);
|
|
222
201
|
}
|
|
223
202
|
on(type, filter, callback) {
|
|
224
|
-
if (this.
|
|
225
|
-
this.socket.log('channel', `
|
|
226
|
-
|
|
203
|
+
if (this.channelAdapter.isJoined() && type === REALTIME_LISTEN_TYPES.PRESENCE) {
|
|
204
|
+
this.socket.log('channel', `cannot add presence callbacks for ${this.topic} after joining.`);
|
|
205
|
+
throw new Error('cannot add presence callbacks after joining a channel');
|
|
227
206
|
}
|
|
228
207
|
return this._on(type, filter, callback);
|
|
229
208
|
}
|
|
@@ -287,7 +266,7 @@ export default class RealtimeChannel {
|
|
|
287
266
|
*/
|
|
288
267
|
async send(args, opts = {}) {
|
|
289
268
|
var _a, _b;
|
|
290
|
-
if (!this.
|
|
269
|
+
if (!this.channelAdapter.canPush() && args.type === 'broadcast') {
|
|
291
270
|
console.warn('Realtime send() is automatically falling back to REST API. ' +
|
|
292
271
|
'This behavior will be deprecated in the future. ' +
|
|
293
272
|
'Please use httpSend() explicitly for REST delivery.');
|
|
@@ -330,7 +309,7 @@ export default class RealtimeChannel {
|
|
|
330
309
|
else {
|
|
331
310
|
return new Promise((resolve) => {
|
|
332
311
|
var _a, _b, _c;
|
|
333
|
-
const push = this.
|
|
312
|
+
const push = this.channelAdapter.push(args.type, args, opts.timeout || this.timeout);
|
|
334
313
|
if (args.type === 'broadcast' && !((_c = (_b = (_a = this.params) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.broadcast) === null || _c === void 0 ? void 0 : _c.ack)) {
|
|
335
314
|
resolve('ok');
|
|
336
315
|
}
|
|
@@ -345,7 +324,7 @@ export default class RealtimeChannel {
|
|
|
345
324
|
* Useful for rotating access tokens or updating config without re-creating the channel.
|
|
346
325
|
*/
|
|
347
326
|
updateJoinPayload(payload) {
|
|
348
|
-
this.
|
|
327
|
+
this.channelAdapter.updateJoinPayload(payload);
|
|
349
328
|
}
|
|
350
329
|
/**
|
|
351
330
|
* Leaves the channel.
|
|
@@ -356,48 +335,20 @@ export default class RealtimeChannel {
|
|
|
356
335
|
* To receive leave acknowledgements, use the a `receive` hook to bind to the server ack, ie:
|
|
357
336
|
* channel.unsubscribe().receive("ok", () => alert("left!") )
|
|
358
337
|
*/
|
|
359
|
-
unsubscribe(timeout = this.timeout) {
|
|
360
|
-
this.state = CHANNEL_STATES.leaving;
|
|
361
|
-
const onClose = () => {
|
|
362
|
-
this.socket.log('channel', `leave ${this.topic}`);
|
|
363
|
-
this._trigger(CHANNEL_EVENTS.close, 'leave', this._joinRef());
|
|
364
|
-
};
|
|
365
|
-
this.joinPush.destroy();
|
|
366
|
-
let leavePush = null;
|
|
338
|
+
async unsubscribe(timeout = this.timeout) {
|
|
367
339
|
return new Promise((resolve) => {
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
.receive('ok', () =>
|
|
371
|
-
|
|
372
|
-
resolve('
|
|
373
|
-
})
|
|
374
|
-
.receive('timeout', () => {
|
|
375
|
-
onClose();
|
|
376
|
-
resolve('timed out');
|
|
377
|
-
})
|
|
378
|
-
.receive('error', () => {
|
|
379
|
-
resolve('error');
|
|
380
|
-
});
|
|
381
|
-
leavePush.send();
|
|
382
|
-
if (!this._canPush()) {
|
|
383
|
-
leavePush.trigger('ok', {});
|
|
384
|
-
}
|
|
385
|
-
}).finally(() => {
|
|
386
|
-
leavePush === null || leavePush === void 0 ? void 0 : leavePush.destroy();
|
|
340
|
+
this.channelAdapter
|
|
341
|
+
.unsubscribe(timeout)
|
|
342
|
+
.receive('ok', () => resolve('ok'))
|
|
343
|
+
.receive('timeout', () => resolve('timed out'))
|
|
344
|
+
.receive('error', () => resolve('error'));
|
|
387
345
|
});
|
|
388
346
|
}
|
|
389
347
|
/**
|
|
390
|
-
* Teardown the channel.
|
|
391
|
-
*
|
|
392
348
|
* Destroys and stops related timers.
|
|
393
349
|
*/
|
|
394
350
|
teardown() {
|
|
395
|
-
this.
|
|
396
|
-
this.pushBuffer = [];
|
|
397
|
-
this.rejoinTimer.reset();
|
|
398
|
-
this.joinPush.destroy();
|
|
399
|
-
this.state = CHANNEL_STATES.closed;
|
|
400
|
-
this.bindings = {};
|
|
351
|
+
this.channelAdapter.teardown();
|
|
401
352
|
}
|
|
402
353
|
/** @internal */
|
|
403
354
|
async _fetchWithTimeout(url, options, timeout) {
|
|
@@ -408,136 +359,14 @@ export default class RealtimeChannel {
|
|
|
408
359
|
return response;
|
|
409
360
|
}
|
|
410
361
|
/** @internal */
|
|
411
|
-
_push(event, payload, timeout = this.timeout) {
|
|
412
|
-
if (!this.joinedOnce) {
|
|
413
|
-
throw `tried to push '${event}' to '${this.topic}' before joining. Use channel.subscribe() before pushing events`;
|
|
414
|
-
}
|
|
415
|
-
let pushEvent = new Push(this, event, payload, timeout);
|
|
416
|
-
if (this._canPush()) {
|
|
417
|
-
pushEvent.send();
|
|
418
|
-
}
|
|
419
|
-
else {
|
|
420
|
-
this._addToPushBuffer(pushEvent);
|
|
421
|
-
}
|
|
422
|
-
return pushEvent;
|
|
423
|
-
}
|
|
424
|
-
/** @internal */
|
|
425
|
-
_addToPushBuffer(pushEvent) {
|
|
426
|
-
pushEvent.startTimeout();
|
|
427
|
-
this.pushBuffer.push(pushEvent);
|
|
428
|
-
// Enforce buffer size limit
|
|
429
|
-
if (this.pushBuffer.length > MAX_PUSH_BUFFER_SIZE) {
|
|
430
|
-
const removedPush = this.pushBuffer.shift();
|
|
431
|
-
if (removedPush) {
|
|
432
|
-
removedPush.destroy();
|
|
433
|
-
this.socket.log('channel', `discarded push due to buffer overflow: ${removedPush.event}`, removedPush.payload);
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
/**
|
|
438
|
-
* Overridable message hook
|
|
439
|
-
*
|
|
440
|
-
* Receives all events for specialized message handling before dispatching to the channel callbacks.
|
|
441
|
-
* Must return the payload, modified or unmodified.
|
|
442
|
-
*
|
|
443
|
-
* @internal
|
|
444
|
-
*/
|
|
445
|
-
_onMessage(_event, payload, _ref) {
|
|
446
|
-
return payload;
|
|
447
|
-
}
|
|
448
|
-
/** @internal */
|
|
449
|
-
_isMember(topic) {
|
|
450
|
-
return this.topic === topic;
|
|
451
|
-
}
|
|
452
|
-
/** @internal */
|
|
453
|
-
_joinRef() {
|
|
454
|
-
return this.joinPush.ref;
|
|
455
|
-
}
|
|
456
|
-
/** @internal */
|
|
457
|
-
_trigger(type, payload, ref) {
|
|
458
|
-
var _a, _b;
|
|
459
|
-
const typeLower = type.toLocaleLowerCase();
|
|
460
|
-
const { close, error, leave, join } = CHANNEL_EVENTS;
|
|
461
|
-
const events = [close, error, leave, join];
|
|
462
|
-
if (ref && events.indexOf(typeLower) >= 0 && ref !== this._joinRef()) {
|
|
463
|
-
return;
|
|
464
|
-
}
|
|
465
|
-
let handledPayload = this._onMessage(typeLower, payload, ref);
|
|
466
|
-
if (payload && !handledPayload) {
|
|
467
|
-
throw 'channel onMessage callbacks must return the payload, modified or unmodified';
|
|
468
|
-
}
|
|
469
|
-
if (['insert', 'update', 'delete'].includes(typeLower)) {
|
|
470
|
-
(_a = this.bindings.postgres_changes) === null || _a === void 0 ? void 0 : _a.filter((bind) => {
|
|
471
|
-
var _a, _b, _c;
|
|
472
|
-
return ((_a = bind.filter) === null || _a === void 0 ? void 0 : _a.event) === '*' || ((_c = (_b = bind.filter) === null || _b === void 0 ? void 0 : _b.event) === null || _c === void 0 ? void 0 : _c.toLocaleLowerCase()) === typeLower;
|
|
473
|
-
}).map((bind) => bind.callback(handledPayload, ref));
|
|
474
|
-
}
|
|
475
|
-
else {
|
|
476
|
-
(_b = this.bindings[typeLower]) === null || _b === void 0 ? void 0 : _b.filter((bind) => {
|
|
477
|
-
var _a, _b, _c, _d, _e, _f;
|
|
478
|
-
if (['broadcast', 'presence', 'postgres_changes'].includes(typeLower)) {
|
|
479
|
-
if ('id' in bind) {
|
|
480
|
-
const bindId = bind.id;
|
|
481
|
-
const bindEvent = (_a = bind.filter) === null || _a === void 0 ? void 0 : _a.event;
|
|
482
|
-
return (bindId &&
|
|
483
|
-
((_b = payload.ids) === null || _b === void 0 ? void 0 : _b.includes(bindId)) &&
|
|
484
|
-
(bindEvent === '*' ||
|
|
485
|
-
(bindEvent === null || bindEvent === void 0 ? void 0 : bindEvent.toLocaleLowerCase()) === ((_c = payload.data) === null || _c === void 0 ? void 0 : _c.type.toLocaleLowerCase())));
|
|
486
|
-
}
|
|
487
|
-
else {
|
|
488
|
-
const bindEvent = (_e = (_d = bind === null || bind === void 0 ? void 0 : bind.filter) === null || _d === void 0 ? void 0 : _d.event) === null || _e === void 0 ? void 0 : _e.toLocaleLowerCase();
|
|
489
|
-
return bindEvent === '*' || bindEvent === ((_f = payload === null || payload === void 0 ? void 0 : payload.event) === null || _f === void 0 ? void 0 : _f.toLocaleLowerCase());
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
else {
|
|
493
|
-
return bind.type.toLocaleLowerCase() === typeLower;
|
|
494
|
-
}
|
|
495
|
-
}).map((bind) => {
|
|
496
|
-
if (typeof handledPayload === 'object' && 'ids' in handledPayload) {
|
|
497
|
-
const postgresChanges = handledPayload.data;
|
|
498
|
-
const { schema, table, commit_timestamp, type, errors } = postgresChanges;
|
|
499
|
-
const enrichedPayload = {
|
|
500
|
-
schema: schema,
|
|
501
|
-
table: table,
|
|
502
|
-
commit_timestamp: commit_timestamp,
|
|
503
|
-
eventType: type,
|
|
504
|
-
new: {},
|
|
505
|
-
old: {},
|
|
506
|
-
errors: errors,
|
|
507
|
-
};
|
|
508
|
-
handledPayload = Object.assign(Object.assign({}, enrichedPayload), this._getPayloadRecords(postgresChanges));
|
|
509
|
-
}
|
|
510
|
-
bind.callback(handledPayload, ref);
|
|
511
|
-
});
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
/** @internal */
|
|
515
|
-
_isClosed() {
|
|
516
|
-
return this.state === CHANNEL_STATES.closed;
|
|
517
|
-
}
|
|
518
|
-
/** @internal */
|
|
519
|
-
_isJoined() {
|
|
520
|
-
return this.state === CHANNEL_STATES.joined;
|
|
521
|
-
}
|
|
522
|
-
/** @internal */
|
|
523
|
-
_isJoining() {
|
|
524
|
-
return this.state === CHANNEL_STATES.joining;
|
|
525
|
-
}
|
|
526
|
-
/** @internal */
|
|
527
|
-
_isLeaving() {
|
|
528
|
-
return this.state === CHANNEL_STATES.leaving;
|
|
529
|
-
}
|
|
530
|
-
/** @internal */
|
|
531
|
-
_replyEventName(ref) {
|
|
532
|
-
return `chan_reply_${ref}`;
|
|
533
|
-
}
|
|
534
|
-
/** @internal */
|
|
535
362
|
_on(type, filter, callback) {
|
|
536
363
|
const typeLower = type.toLocaleLowerCase();
|
|
364
|
+
const ref = this.channelAdapter.on(type, callback);
|
|
537
365
|
const binding = {
|
|
538
366
|
type: typeLower,
|
|
539
367
|
filter: filter,
|
|
540
368
|
callback: callback,
|
|
369
|
+
ref: ref,
|
|
541
370
|
};
|
|
542
371
|
if (this.bindings[typeLower]) {
|
|
543
372
|
this.bindings[typeLower].push(binding);
|
|
@@ -545,56 +374,16 @@ export default class RealtimeChannel {
|
|
|
545
374
|
else {
|
|
546
375
|
this.bindings[typeLower] = [binding];
|
|
547
376
|
}
|
|
377
|
+
this._updateFilterMessage();
|
|
548
378
|
return this;
|
|
549
379
|
}
|
|
550
|
-
/** @internal */
|
|
551
|
-
_off(type, filter) {
|
|
552
|
-
const typeLower = type.toLocaleLowerCase();
|
|
553
|
-
if (this.bindings[typeLower]) {
|
|
554
|
-
this.bindings[typeLower] = this.bindings[typeLower].filter((bind) => {
|
|
555
|
-
var _a;
|
|
556
|
-
return !(((_a = bind.type) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase()) === typeLower &&
|
|
557
|
-
RealtimeChannel.isEqual(bind.filter, filter));
|
|
558
|
-
});
|
|
559
|
-
}
|
|
560
|
-
return this;
|
|
561
|
-
}
|
|
562
|
-
/** @internal */
|
|
563
|
-
static isEqual(obj1, obj2) {
|
|
564
|
-
if (Object.keys(obj1).length !== Object.keys(obj2).length) {
|
|
565
|
-
return false;
|
|
566
|
-
}
|
|
567
|
-
for (const k in obj1) {
|
|
568
|
-
if (obj1[k] !== obj2[k]) {
|
|
569
|
-
return false;
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
return true;
|
|
573
|
-
}
|
|
574
|
-
/**
|
|
575
|
-
* Compares two optional filter values for equality.
|
|
576
|
-
* Treats undefined, null, and empty string as equivalent empty values.
|
|
577
|
-
* @internal
|
|
578
|
-
*/
|
|
579
|
-
static isFilterValueEqual(serverValue, clientValue) {
|
|
580
|
-
const normalizedServer = serverValue !== null && serverValue !== void 0 ? serverValue : undefined;
|
|
581
|
-
const normalizedClient = clientValue !== null && clientValue !== void 0 ? clientValue : undefined;
|
|
582
|
-
return normalizedServer === normalizedClient;
|
|
583
|
-
}
|
|
584
|
-
/** @internal */
|
|
585
|
-
_rejoinUntilConnected() {
|
|
586
|
-
this.rejoinTimer.scheduleTimeout();
|
|
587
|
-
if (this.socket.isConnected()) {
|
|
588
|
-
this._rejoin();
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
380
|
/**
|
|
592
381
|
* Registers a callback that will be executed when the channel closes.
|
|
593
382
|
*
|
|
594
383
|
* @internal
|
|
595
384
|
*/
|
|
596
385
|
_onClose(callback) {
|
|
597
|
-
this.
|
|
386
|
+
this.channelAdapter.onClose(callback);
|
|
598
387
|
}
|
|
599
388
|
/**
|
|
600
389
|
* Registers a callback that will be executed when the channel encounteres an error.
|
|
@@ -602,24 +391,74 @@ export default class RealtimeChannel {
|
|
|
602
391
|
* @internal
|
|
603
392
|
*/
|
|
604
393
|
_onError(callback) {
|
|
605
|
-
this.
|
|
394
|
+
this.channelAdapter.onError(callback);
|
|
395
|
+
}
|
|
396
|
+
/** @internal */
|
|
397
|
+
_updateFilterMessage() {
|
|
398
|
+
this.channelAdapter.updateFilterBindings((binding, payload, ref) => {
|
|
399
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
400
|
+
const typeLower = binding.event.toLocaleLowerCase();
|
|
401
|
+
if (this._notThisChannelEvent(typeLower, ref)) {
|
|
402
|
+
return false;
|
|
403
|
+
}
|
|
404
|
+
const bind = (_a = this.bindings[typeLower]) === null || _a === void 0 ? void 0 : _a.find((bind) => bind.ref === binding.ref);
|
|
405
|
+
if (!bind) {
|
|
406
|
+
return true;
|
|
407
|
+
}
|
|
408
|
+
if (['broadcast', 'presence', 'postgres_changes'].includes(typeLower)) {
|
|
409
|
+
if ('id' in bind) {
|
|
410
|
+
const bindId = bind.id;
|
|
411
|
+
const bindEvent = (_b = bind.filter) === null || _b === void 0 ? void 0 : _b.event;
|
|
412
|
+
return (bindId &&
|
|
413
|
+
((_c = payload.ids) === null || _c === void 0 ? void 0 : _c.includes(bindId)) &&
|
|
414
|
+
(bindEvent === '*' ||
|
|
415
|
+
(bindEvent === null || bindEvent === void 0 ? void 0 : bindEvent.toLocaleLowerCase()) === ((_d = payload.data) === null || _d === void 0 ? void 0 : _d.type.toLocaleLowerCase())));
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
const bindEvent = (_f = (_e = bind === null || bind === void 0 ? void 0 : bind.filter) === null || _e === void 0 ? void 0 : _e.event) === null || _f === void 0 ? void 0 : _f.toLocaleLowerCase();
|
|
419
|
+
return bindEvent === '*' || bindEvent === ((_g = payload === null || payload === void 0 ? void 0 : payload.event) === null || _g === void 0 ? void 0 : _g.toLocaleLowerCase());
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
return bind.type.toLocaleLowerCase() === typeLower;
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
}
|
|
427
|
+
/** @internal */
|
|
428
|
+
_notThisChannelEvent(event, ref) {
|
|
429
|
+
const { close, error, leave, join } = CHANNEL_EVENTS;
|
|
430
|
+
const events = [close, error, leave, join];
|
|
431
|
+
return ref && events.includes(event) && ref !== this.joinPush.ref;
|
|
432
|
+
}
|
|
433
|
+
/** @internal */
|
|
434
|
+
_updateFilterTransform() {
|
|
435
|
+
this.channelAdapter.updatePayloadTransform((event, payload, ref) => {
|
|
436
|
+
if (typeof payload === 'object' && 'ids' in payload) {
|
|
437
|
+
const postgresChanges = payload.data;
|
|
438
|
+
const { schema, table, commit_timestamp, type, errors } = postgresChanges;
|
|
439
|
+
const enrichedPayload = {
|
|
440
|
+
schema: schema,
|
|
441
|
+
table: table,
|
|
442
|
+
commit_timestamp: commit_timestamp,
|
|
443
|
+
eventType: type,
|
|
444
|
+
new: {},
|
|
445
|
+
old: {},
|
|
446
|
+
errors: errors,
|
|
447
|
+
};
|
|
448
|
+
return Object.assign(Object.assign({}, enrichedPayload), this._getPayloadRecords(postgresChanges));
|
|
449
|
+
}
|
|
450
|
+
return payload;
|
|
451
|
+
});
|
|
606
452
|
}
|
|
607
453
|
/**
|
|
608
|
-
*
|
|
609
|
-
*
|
|
454
|
+
* Compares two optional filter values for equality.
|
|
455
|
+
* Treats undefined, null, and empty string as equivalent empty values.
|
|
610
456
|
* @internal
|
|
611
457
|
*/
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
_rejoin(timeout = this.timeout) {
|
|
617
|
-
if (this._isLeaving()) {
|
|
618
|
-
return;
|
|
619
|
-
}
|
|
620
|
-
this.socket._leaveOpenTopic(this.topic);
|
|
621
|
-
this.state = CHANNEL_STATES.joining;
|
|
622
|
-
this.joinPush.resend(timeout);
|
|
458
|
+
static isFilterValueEqual(serverValue, clientValue) {
|
|
459
|
+
const normalizedServer = serverValue !== null && serverValue !== void 0 ? serverValue : undefined;
|
|
460
|
+
const normalizedClient = clientValue !== null && clientValue !== void 0 ? clientValue : undefined;
|
|
461
|
+
return normalizedServer === normalizedClient;
|
|
623
462
|
}
|
|
624
463
|
/** @internal */
|
|
625
464
|
_getPayloadRecords(payload) {
|