@motherbase/client 2.2.1 → 2.2.4
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/COMPATIBILITY.md +157 -0
- package/LICENSE +21 -21
- package/README.md +52 -4
- package/dist/admin/auth-admin-client.d.ts +43 -0
- package/dist/admin/auth-admin-client.d.ts.map +1 -0
- package/dist/admin/auth-admin-client.js +62 -0
- package/dist/admin/auth-admin-client.js.map +1 -0
- package/dist/admin/auth-admin-mfa-client.d.ts +22 -0
- package/dist/admin/auth-admin-mfa-client.d.ts.map +1 -0
- package/dist/admin/auth-admin-mfa-client.js +17 -0
- package/dist/admin/auth-admin-mfa-client.js.map +1 -0
- package/dist/admin/types.d.ts +85 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +3 -0
- package/dist/admin/types.js.map +1 -0
- package/dist/auth/constants.d.ts +21 -0
- package/dist/auth/constants.d.ts.map +1 -0
- package/dist/auth/constants.js +34 -0
- package/dist/auth/constants.js.map +1 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +34 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/motherbase-plugin.d.ts +6 -0
- package/dist/auth/motherbase-plugin.d.ts.map +1 -0
- package/dist/auth/motherbase-plugin.js +80 -0
- package/dist/auth/motherbase-plugin.js.map +1 -0
- package/dist/auth/pkce.d.ts +19 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +89 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/session-utils.d.ts +29 -0
- package/dist/auth/session-utils.d.ts.map +1 -0
- package/dist/auth/session-utils.js +123 -0
- package/dist/auth/session-utils.js.map +1 -0
- package/dist/auth/session.d.ts +51 -0
- package/dist/auth/session.d.ts.map +1 -0
- package/dist/auth/session.js +161 -0
- package/dist/auth/session.js.map +1 -0
- package/dist/auth/types.d.ts +341 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/auth/utils.d.ts +28 -0
- package/dist/auth/utils.d.ts.map +1 -0
- package/dist/auth/utils.js +70 -0
- package/dist/auth/utils.js.map +1 -0
- package/dist/auth.d.ts +3 -2
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +27 -11
- package/dist/auth.js.map +1 -1
- package/dist/channel.d.ts +11 -0
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +26 -2
- package/dist/channel.js.map +1 -1
- package/dist/cookies/cookie-storage.d.ts +12 -0
- package/dist/cookies/cookie-storage.d.ts.map +1 -0
- package/dist/cookies/cookie-storage.js +35 -0
- package/dist/cookies/cookie-storage.js.map +1 -0
- package/dist/cookies/index.d.ts +5 -0
- package/dist/cookies/index.d.ts.map +1 -0
- package/dist/cookies/index.js +5 -0
- package/dist/cookies/index.js.map +1 -0
- package/dist/cookies/server-cookie-storage.d.ts +20 -0
- package/dist/cookies/server-cookie-storage.d.ts.map +1 -0
- package/dist/cookies/server-cookie-storage.js +60 -0
- package/dist/cookies/server-cookie-storage.js.map +1 -0
- package/dist/cookies/types.d.ts +33 -0
- package/dist/cookies/types.d.ts.map +1 -0
- package/dist/cookies/types.js +8 -0
- package/dist/cookies/types.js.map +1 -0
- package/dist/cookies/utils.d.ts +23 -0
- package/dist/cookies/utils.d.ts.map +1 -0
- package/dist/cookies/utils.js +67 -0
- package/dist/cookies/utils.js.map +1 -0
- package/dist/database/database.d.ts +197 -0
- package/dist/database/database.d.ts.map +1 -0
- package/dist/database/database.js +2 -0
- package/dist/database/database.js.map +1 -0
- package/dist/database/facade.d.ts +218 -0
- package/dist/database/facade.d.ts.map +1 -0
- package/dist/database/facade.js +198 -0
- package/dist/database/facade.js.map +1 -0
- package/dist/database/query.d.ts +97 -0
- package/dist/database/query.d.ts.map +1 -0
- package/dist/database/query.js +94 -0
- package/dist/database/query.js.map +1 -0
- package/dist/database/types.d.ts +314 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +2 -0
- package/dist/database/types.js.map +1 -0
- package/dist/functions/errors.d.ts +28 -0
- package/dist/functions/errors.d.ts.map +1 -0
- package/dist/functions/errors.js +37 -0
- package/dist/functions/errors.js.map +1 -0
- package/dist/functions/index.d.ts +9 -0
- package/dist/functions/index.d.ts.map +1 -0
- package/dist/functions/index.js +40 -0
- package/dist/functions/index.js.map +1 -0
- package/dist/functions/types.d.ts +25 -0
- package/dist/functions/types.d.ts.map +1 -0
- package/dist/functions/types.js +2 -0
- package/dist/functions/types.js.map +1 -0
- package/dist/http/backend-error.d.ts +17 -0
- package/dist/http/backend-error.d.ts.map +1 -0
- package/dist/http/backend-error.js +11 -0
- package/dist/http/backend-error.js.map +1 -0
- package/dist/http/index.d.ts +59 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +175 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/types.d.ts +45 -0
- package/dist/http/types.d.ts.map +1 -0
- package/dist/http/types.js +2 -0
- package/dist/http/types.js.map +1 -0
- package/dist/http/utils.d.ts +14 -0
- package/dist/http/utils.d.ts.map +1 -0
- package/dist/http/utils.js +37 -0
- package/dist/http/utils.js.map +1 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +2 -1
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +47 -77
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -73
- package/dist/index.js.map +1 -1
- package/dist/pkce.js +4 -4
- package/dist/postgrest/index.d.ts +4 -0
- package/dist/postgrest/index.d.ts.map +1 -0
- package/dist/postgrest/index.js +4 -0
- package/dist/postgrest/index.js.map +1 -0
- package/dist/postgrest/query-builder.d.ts +224 -0
- package/dist/postgrest/query-builder.d.ts.map +1 -0
- package/dist/postgrest/query-builder.js +544 -0
- package/dist/postgrest/query-builder.js.map +1 -0
- package/dist/postgrest/rpc.d.ts +12 -0
- package/dist/postgrest/rpc.d.ts.map +1 -0
- package/dist/postgrest/rpc.js +42 -0
- package/dist/postgrest/rpc.js.map +1 -0
- package/dist/postgrest/types.d.ts +88 -0
- package/dist/postgrest/types.d.ts.map +1 -0
- package/dist/postgrest/types.js +2 -0
- package/dist/postgrest/types.js.map +1 -0
- package/dist/postgrest/utils.d.ts +23 -0
- package/dist/postgrest/utils.d.ts.map +1 -0
- package/dist/postgrest/utils.js +87 -0
- package/dist/postgrest/utils.js.map +1 -0
- package/dist/postgrest.d.ts +5 -1
- package/dist/postgrest.d.ts.map +1 -1
- package/dist/postgrest.js +17 -10
- package/dist/postgrest.js.map +1 -1
- package/dist/realtime/channel.d.ts +83 -0
- package/dist/realtime/channel.d.ts.map +1 -0
- package/dist/realtime/channel.js +240 -0
- package/dist/realtime/channel.js.map +1 -0
- package/dist/realtime/index.d.ts +94 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/index.js +455 -0
- package/dist/realtime/index.js.map +1 -0
- package/dist/realtime/types.d.ts +120 -0
- package/dist/realtime/types.d.ts.map +1 -0
- package/dist/realtime/types.js +2 -0
- package/dist/realtime/types.js.map +1 -0
- package/dist/realtime.d.ts +1 -0
- package/dist/realtime.d.ts.map +1 -1
- package/dist/realtime.js +26 -1
- package/dist/realtime.js.map +1 -1
- package/dist/runtime.d.ts +13 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +15 -0
- package/dist/runtime.js.map +1 -0
- package/dist/session.d.ts +2 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +11 -2
- package/dist/session.js.map +1 -1
- package/dist/storage/bucket.d.ts +166 -0
- package/dist/storage/bucket.d.ts.map +1 -0
- package/dist/storage/bucket.js +294 -0
- package/dist/storage/bucket.js.map +1 -0
- package/dist/storage/index.d.ts +45 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +55 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/types.d.ts +131 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/storage/utils.d.ts +27 -0
- package/dist/storage/utils.d.ts.map +1 -0
- package/dist/storage/utils.js +43 -0
- package/dist/storage/utils.js.map +1 -0
- package/dist/test.d.ts +2 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +3 -0
- package/dist/test.js.map +1 -0
- package/dist/types.d.ts +14 -249
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/compat.d.ts +40 -0
- package/dist/utils/compat.d.ts.map +1 -0
- package/dist/utils/compat.js +100 -0
- package/dist/utils/compat.js.map +1 -0
- package/dist/utils/runtime.d.ts +13 -0
- package/dist/utils/runtime.d.ts.map +1 -0
- package/dist/utils/runtime.js +15 -0
- package/dist/utils/runtime.js.map +1 -0
- package/dist/utils/testing.d.ts +38 -0
- package/dist/utils/testing.d.ts.map +1 -0
- package/dist/utils/testing.js +50 -0
- package/dist/utils/testing.js.map +1 -0
- package/dist/utils/warn.d.ts +2 -0
- package/dist/utils/warn.d.ts.map +1 -0
- package/dist/utils/warn.js +23 -0
- package/dist/utils/warn.js.map +1 -0
- package/package.json +13 -11
- package/dist/devices.d.ts +0 -13
- package/dist/devices.d.ts.map +0 -1
- package/dist/devices.js +0 -13
- package/dist/devices.js.map +0 -1
- package/dist/profile.d.ts +0 -16
- package/dist/profile.d.ts.map +0 -1
- package/dist/profile.js +0 -26
- package/dist/profile.js.map +0 -1
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Supabase-compatible realtime channel. Multiplexes broadcast, presence, and
|
|
3
|
+
* postgres_changes over a single topic. `postgres_changes` is delivered through
|
|
4
|
+
* the RealtimeModule.watchTable bridge in this release; broadcast/presence are
|
|
5
|
+
* routed by topic via rt:msg envelopes.
|
|
6
|
+
*/
|
|
7
|
+
export class RealtimeChannel {
|
|
8
|
+
constructor(topic, realtime, options = {}) {
|
|
9
|
+
this.topic = topic;
|
|
10
|
+
this.realtime = realtime;
|
|
11
|
+
this.options = options;
|
|
12
|
+
this.pgBindings = [];
|
|
13
|
+
this.broadcastBindings = [];
|
|
14
|
+
this.presenceBindings = [];
|
|
15
|
+
this.status = 'CLOSED';
|
|
16
|
+
this.presence = {};
|
|
17
|
+
/** Settles when the current subscribe() attempt has an ack (or has failed). */
|
|
18
|
+
this.ready = Promise.resolve();
|
|
19
|
+
/** Last state passed to track(), replayed after a reconnect. */
|
|
20
|
+
this.trackedState = null;
|
|
21
|
+
this.generation = 0;
|
|
22
|
+
this.subscribing = false;
|
|
23
|
+
}
|
|
24
|
+
on(type, filter, callback) {
|
|
25
|
+
if (type === 'broadcast') {
|
|
26
|
+
this.broadcastBindings.push({
|
|
27
|
+
event: filter.event,
|
|
28
|
+
callback: callback,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
else if (type === 'presence') {
|
|
32
|
+
this.presenceBindings.push({
|
|
33
|
+
event: filter.event,
|
|
34
|
+
callback: callback,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
else if (type === 'postgres_changes') {
|
|
38
|
+
this.pgBindings.push({
|
|
39
|
+
filter: filter,
|
|
40
|
+
callback: callback,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
throw new Error(`Unsupported channel event type "${type}". Use broadcast | presence | postgres_changes.`);
|
|
45
|
+
}
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Join the topic. Returns `this` (supabase-js shape), so it is NOT awaitable:
|
|
50
|
+
* `send()` / `track()` / `untrack()` issued straight after are queued until the
|
|
51
|
+
* join is acked instead of leaving early and being rejected by the server.
|
|
52
|
+
*/
|
|
53
|
+
subscribe(onStatus, timeoutMs = 10000) {
|
|
54
|
+
this.onStatus = onStatus;
|
|
55
|
+
if (this.subscribing || this.status === 'SUBSCRIBED')
|
|
56
|
+
return this;
|
|
57
|
+
const generation = ++this.generation;
|
|
58
|
+
this.subscribing = true;
|
|
59
|
+
this.ready = (async () => {
|
|
60
|
+
try {
|
|
61
|
+
await this.realtime.connect({ fallbackPolling: false });
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
if (generation !== this.generation)
|
|
65
|
+
return;
|
|
66
|
+
this.subscribing = false;
|
|
67
|
+
this.setStatus('CHANNEL_ERROR', err instanceof Error ? err : new Error(String(err)));
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (generation !== this.generation)
|
|
71
|
+
return;
|
|
72
|
+
this.realtime.registerChannel(this.topic, this);
|
|
73
|
+
const ack = await this.realtime.joinTopic(this.topic, this.buildConfig(), timeoutMs);
|
|
74
|
+
if (generation !== this.generation)
|
|
75
|
+
return;
|
|
76
|
+
this.subscribing = false;
|
|
77
|
+
if (ack.status === 'ok' && this.pgBindings.length > 1 && !ack.bindingIds) {
|
|
78
|
+
this.realtime.leaveTopic(this.topic);
|
|
79
|
+
this.realtime.unregisterChannel(this.topic);
|
|
80
|
+
this.setStatus('CHANNEL_ERROR', new Error('Multiple postgres_changes bindings require a server with binding-id support. Upgrade the server or use one binding per channel.'));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (ack.status === 'ok')
|
|
84
|
+
this.setStatus('SUBSCRIBED');
|
|
85
|
+
else if (ack.error === 'timeout')
|
|
86
|
+
this.setStatus('TIMED_OUT', new Error('Realtime join timed out'));
|
|
87
|
+
else
|
|
88
|
+
this.setStatus('CHANNEL_ERROR', new Error(ack.error ?? 'Realtime join failed'));
|
|
89
|
+
})();
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
/** Leave the topic and stop every listener. The channel can `subscribe()` again. */
|
|
93
|
+
async unsubscribe() {
|
|
94
|
+
this.generation += 1;
|
|
95
|
+
this.subscribing = false;
|
|
96
|
+
this.realtime.leaveTopic(this.topic);
|
|
97
|
+
this.realtime.unregisterChannel(this.topic);
|
|
98
|
+
this.presence = {};
|
|
99
|
+
this.trackedState = null;
|
|
100
|
+
this.setStatus('CLOSED');
|
|
101
|
+
this.ready = Promise.resolve();
|
|
102
|
+
return 'ok';
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Broadcast a message to the topic. Other clients on the topic with a matching
|
|
106
|
+
* `on('broadcast', { event })` binding receive it; the sender receives its own
|
|
107
|
+
* message only when the channel was created with `config.broadcast.self`.
|
|
108
|
+
* With `config.broadcast.ack`, resolves on the server ack.
|
|
109
|
+
*/
|
|
110
|
+
async send(message) {
|
|
111
|
+
if (!(await this.subscribed()))
|
|
112
|
+
return 'error';
|
|
113
|
+
if (this.options.config?.broadcast?.ack) {
|
|
114
|
+
return this.realtime.sendTopicWithAck(this.topic, 'broadcast', message.event, message.payload ?? {});
|
|
115
|
+
}
|
|
116
|
+
this.realtime.sendTopic(this.topic, 'broadcast', message.event, message.payload ?? {});
|
|
117
|
+
return 'ok';
|
|
118
|
+
}
|
|
119
|
+
/** Announce this client's presence on the topic with the given state. */
|
|
120
|
+
async track(state) {
|
|
121
|
+
this.trackedState = state;
|
|
122
|
+
if (!(await this.subscribed()))
|
|
123
|
+
return 'error';
|
|
124
|
+
return this.realtime.sendTopicWithAck(this.topic, 'presence', 'track', { state });
|
|
125
|
+
}
|
|
126
|
+
/** Remove this client's presence from the topic. */
|
|
127
|
+
async untrack() {
|
|
128
|
+
this.trackedState = null;
|
|
129
|
+
if (!(await this.subscribed()))
|
|
130
|
+
return 'error';
|
|
131
|
+
return this.realtime.sendTopicWithAck(this.topic, 'presence', 'untrack', {});
|
|
132
|
+
}
|
|
133
|
+
/** Current presence state, keyed by presence key. */
|
|
134
|
+
presenceState() {
|
|
135
|
+
return this.presence;
|
|
136
|
+
}
|
|
137
|
+
/** Wait for a pending subscribe() to settle; false when the topic is not joined. */
|
|
138
|
+
async subscribed() {
|
|
139
|
+
await this.ready;
|
|
140
|
+
return this.status === 'SUBSCRIBED';
|
|
141
|
+
}
|
|
142
|
+
setStatus(status, err) {
|
|
143
|
+
this.status = status;
|
|
144
|
+
this.onStatus?.(status, err);
|
|
145
|
+
}
|
|
146
|
+
/** Internal: the module replayed this topic's join on a new socket. */
|
|
147
|
+
_rejoined(ok) {
|
|
148
|
+
if (!ok) {
|
|
149
|
+
this.setStatus('CHANNEL_ERROR', new Error('Realtime rejoin failed'));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
// Presence lives on the server socket that just died: re-announce it.
|
|
153
|
+
if (this.trackedState) {
|
|
154
|
+
void this.realtime.sendTopicWithAck(this.topic, 'presence', 'track', { state: this.trackedState });
|
|
155
|
+
}
|
|
156
|
+
this.setStatus('SUBSCRIBED');
|
|
157
|
+
}
|
|
158
|
+
/** Internal: receive a topic envelope routed by RealtimeModule. */
|
|
159
|
+
_receive(envelope) {
|
|
160
|
+
if (envelope.type === 'broadcast') {
|
|
161
|
+
for (const binding of this.broadcastBindings) {
|
|
162
|
+
if (binding.event === '*' || binding.event === envelope.event) {
|
|
163
|
+
binding.callback({ type: 'broadcast', event: envelope.event, payload: envelope.payload });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else if (envelope.type === 'presence') {
|
|
168
|
+
// The server sends the full presence state; diff it into sync/join/leave.
|
|
169
|
+
if (envelope.event === 'state')
|
|
170
|
+
this.applyPresenceState(envelope.payload);
|
|
171
|
+
}
|
|
172
|
+
else if (envelope.type === 'postgres_changes') {
|
|
173
|
+
const payload = envelope.payload;
|
|
174
|
+
for (const [index, binding] of this.pgBindings.entries()) {
|
|
175
|
+
if (envelope.bindingId !== undefined ? envelope.bindingId !== index + 1 : this.pgBindings.length > 1)
|
|
176
|
+
continue;
|
|
177
|
+
const filter = binding.filter;
|
|
178
|
+
if ((filter.schema ?? 'public') !== payload.schema)
|
|
179
|
+
continue;
|
|
180
|
+
if (filter.table !== payload.table)
|
|
181
|
+
continue;
|
|
182
|
+
if (filter.event !== '*' && filter.event !== payload.eventType)
|
|
183
|
+
continue;
|
|
184
|
+
binding.callback(payload);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
applyPresenceState(next) {
|
|
189
|
+
const prev = this.presence;
|
|
190
|
+
const prevRefs = new Set();
|
|
191
|
+
for (const key of Object.keys(prev))
|
|
192
|
+
for (const p of prev[key])
|
|
193
|
+
prevRefs.add(p.presence_ref);
|
|
194
|
+
const nextRefs = new Set();
|
|
195
|
+
for (const key of Object.keys(next))
|
|
196
|
+
for (const p of next[key])
|
|
197
|
+
nextRefs.add(p.presence_ref);
|
|
198
|
+
for (const key of Object.keys(next)) {
|
|
199
|
+
const newPresences = next[key].filter(p => !prevRefs.has(p.presence_ref));
|
|
200
|
+
if (newPresences.length) {
|
|
201
|
+
this.emitPresence('join', { key, newPresences, currentPresences: next[key] });
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
for (const key of Object.keys(prev)) {
|
|
205
|
+
const leftPresences = prev[key].filter(p => !nextRefs.has(p.presence_ref));
|
|
206
|
+
if (leftPresences.length) {
|
|
207
|
+
this.emitPresence('leave', { key, leftPresences, currentPresences: next[key] ?? [] });
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
this.presence = next;
|
|
211
|
+
this.emitPresence('sync', undefined);
|
|
212
|
+
}
|
|
213
|
+
emitPresence(event, payload) {
|
|
214
|
+
for (const binding of this.presenceBindings) {
|
|
215
|
+
if (binding.event === event)
|
|
216
|
+
binding.callback(payload);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
buildConfig() {
|
|
220
|
+
const config = {};
|
|
221
|
+
if (this.options.config?.broadcast) {
|
|
222
|
+
config.broadcast = { self: Boolean(this.options.config.broadcast.self) };
|
|
223
|
+
}
|
|
224
|
+
if (this.options.config?.presence) {
|
|
225
|
+
config.presence = { key: this.options.config.presence.key };
|
|
226
|
+
}
|
|
227
|
+
if (this.options.config?.private)
|
|
228
|
+
config.private = true;
|
|
229
|
+
if (this.pgBindings.length) {
|
|
230
|
+
config.postgres_changes = this.pgBindings.map(b => ({
|
|
231
|
+
event: b.filter.event,
|
|
232
|
+
schema: b.filter.schema ?? 'public',
|
|
233
|
+
table: b.filter.table,
|
|
234
|
+
filter: b.filter.filter,
|
|
235
|
+
}));
|
|
236
|
+
}
|
|
237
|
+
return config;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/realtime/channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { RealtimeJoinConfig, RealtimeJoinAck, RealtimeTopicMessageType } from '@motherbase/contracts';
|
|
2
|
+
import { IoFactory, ChannelHandle, RealtimeStatus, RealtimeStatusListener, RealtimeConnectOptions, RealtimeWatchEvent, RealtimeWatchOptions } from './types.js';
|
|
3
|
+
import { SessionStore } from '../auth/session.js';
|
|
4
|
+
/**
|
|
5
|
+
* Lazy wrapper over socket.io-client. The dependency is optional: it is only
|
|
6
|
+
* imported when `connect()` is called, so apps that never use realtime do not
|
|
7
|
+
* need to install it.
|
|
8
|
+
*/
|
|
9
|
+
export declare class RealtimeModule {
|
|
10
|
+
private readonly baseUrl;
|
|
11
|
+
private readonly store;
|
|
12
|
+
private readonly fetchImpl;
|
|
13
|
+
/** Inject a socket factory (tests / custom transports). Falls back to socket.io-client. */
|
|
14
|
+
private readonly ioFactory?;
|
|
15
|
+
private socket;
|
|
16
|
+
private status;
|
|
17
|
+
private readonly statusListeners;
|
|
18
|
+
private readonly pollers;
|
|
19
|
+
private readonly tableSubscriptionRefs;
|
|
20
|
+
private pollerSeq;
|
|
21
|
+
private readonly channelsByTopic;
|
|
22
|
+
/** Topics joined on the current socket, replayed as-is after a reconnect. */
|
|
23
|
+
private readonly joinedTopics;
|
|
24
|
+
private topicRouterBound;
|
|
25
|
+
private connecting;
|
|
26
|
+
private readonly pendingJoins;
|
|
27
|
+
/** The token the open socket authenticated with: undefined = anonymous. */
|
|
28
|
+
private handshakeToken;
|
|
29
|
+
constructor(baseUrl: string, store: SessionStore, fetchImpl?: typeof fetch,
|
|
30
|
+
/** Inject a socket factory (tests / custom transports). Falls back to socket.io-client. */
|
|
31
|
+
ioFactory?: IoFactory | undefined);
|
|
32
|
+
/**
|
|
33
|
+
* Reopen the socket under the current session. Joined topics are kept, so
|
|
34
|
+
* the `connect` handler replays them on the new socket and each channel
|
|
35
|
+
* reports SUBSCRIBED (or CHANNEL_ERROR) again through its status callback.
|
|
36
|
+
*/
|
|
37
|
+
private reauthenticate;
|
|
38
|
+
/** True once a socket is connected. */
|
|
39
|
+
get connected(): boolean;
|
|
40
|
+
/** The connection state right now. */
|
|
41
|
+
getStatus(): RealtimeStatus;
|
|
42
|
+
/** Call `listener` now and on every connection state change. Returns the unsubscribe function. */
|
|
43
|
+
onStatusChange(listener: RealtimeStatusListener): () => void;
|
|
44
|
+
/** Concurrent callers (several channels subscribing at once) share one attempt, not one socket each. */
|
|
45
|
+
connect(options?: RealtimeConnectOptions): Promise<void>;
|
|
46
|
+
private open;
|
|
47
|
+
on(event: string, cb: (...args: unknown[]) => void): void;
|
|
48
|
+
off(event: string, cb?: (...args: unknown[]) => void): void;
|
|
49
|
+
emit(event: string, ...args: unknown[]): void;
|
|
50
|
+
/**
|
|
51
|
+
* @deprecated Legacy low-level table watcher. Prefer the Supabase-shaped
|
|
52
|
+
* `client.channel(topic).on('postgres_changes', { event, schema, table, filter }, cb)`.
|
|
53
|
+
* Kept for backwards compatibility; scheduled for removal.
|
|
54
|
+
*
|
|
55
|
+
* Subscribe to create/update/delete events for a model table.
|
|
56
|
+
*
|
|
57
|
+
* Events are filtered server-side: you will only receive events for rows
|
|
58
|
+
* your session is authorized to see (based on REST API SELECT policies).
|
|
59
|
+
* Anonymous sessions receive only public rows; authenticated sessions receive
|
|
60
|
+
* rows matching their access policies (e.g. owner-only rows they own).
|
|
61
|
+
*
|
|
62
|
+
* Falls back to polling the REST endpoint at subscribe time if the WebSocket
|
|
63
|
+
* is not yet connected (polling does not auto-start on later disconnects).
|
|
64
|
+
*/
|
|
65
|
+
watchTable<T>(model: string, cb: (event: RealtimeWatchEvent<T>) => void, options?: RealtimeWatchOptions): () => void;
|
|
66
|
+
/** Close the socket and stop every poller. */
|
|
67
|
+
disconnect(): void;
|
|
68
|
+
/** Register a channel so incoming rt:msg envelopes for its topic are routed to it. */
|
|
69
|
+
registerChannel(topic: string, channel: ChannelHandle): void;
|
|
70
|
+
unregisterChannel(topic: string): void;
|
|
71
|
+
/** Emit rt:join and resolve the server ack (or a timeout/error ack). */
|
|
72
|
+
joinTopic(topic: string, config: RealtimeJoinConfig, timeoutMs?: number): Promise<RealtimeJoinAck>;
|
|
73
|
+
leaveTopic(topic: string): void;
|
|
74
|
+
sendTopic(topic: string, type: RealtimeTopicMessageType, event: string, payload: unknown): void;
|
|
75
|
+
/** Emit an rt:msg and wait for the server ack (or resolve 'timed out'/'error'). */
|
|
76
|
+
sendTopicWithAck(topic: string, type: RealtimeTopicMessageType, event: string, payload: unknown, timeoutMs?: number): Promise<'ok' | 'timed out' | 'error'>;
|
|
77
|
+
private bindTopicRouter;
|
|
78
|
+
private retainTableSubscription;
|
|
79
|
+
private releaseTableSubscription;
|
|
80
|
+
private resubscribeTables;
|
|
81
|
+
/**
|
|
82
|
+
* Replay every joined topic on a fresh socket. The server keeps topic state on
|
|
83
|
+
* the socket, so without this a reconnected channel still reports SUBSCRIBED
|
|
84
|
+
* and receives nothing at all.
|
|
85
|
+
*/
|
|
86
|
+
private rejoinTopics;
|
|
87
|
+
private bindSocketStatus;
|
|
88
|
+
private waitForConnect;
|
|
89
|
+
private startPolling;
|
|
90
|
+
private stopPolling;
|
|
91
|
+
private fetchRows;
|
|
92
|
+
private setStatus;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/realtime/index.ts"],"names":[],"mappings":"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"}
|