@motherbase/client 1.3.1 → 1.5.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 (74) hide show
  1. package/README.md +127 -13
  2. package/package.json +10 -2
  3. package/dist/admin.d.ts +0 -81
  4. package/dist/admin.d.ts.map +0 -1
  5. package/dist/admin.js +0 -85
  6. package/dist/admin.js.map +0 -1
  7. package/dist/auth.d.ts +0 -233
  8. package/dist/auth.d.ts.map +0 -1
  9. package/dist/auth.js +0 -418
  10. package/dist/auth.js.map +0 -1
  11. package/dist/channel.d.ts +0 -119
  12. package/dist/channel.d.ts.map +0 -1
  13. package/dist/channel.js +0 -213
  14. package/dist/channel.js.map +0 -1
  15. package/dist/cookie.d.ts +0 -60
  16. package/dist/cookie.d.ts.map +0 -1
  17. package/dist/cookie.js +0 -144
  18. package/dist/cookie.js.map +0 -1
  19. package/dist/database.d.ts +0 -169
  20. package/dist/database.d.ts.map +0 -1
  21. package/dist/database.js +0 -2
  22. package/dist/database.js.map +0 -1
  23. package/dist/devices.d.ts +0 -13
  24. package/dist/devices.d.ts.map +0 -1
  25. package/dist/devices.js +0 -13
  26. package/dist/devices.js.map +0 -1
  27. package/dist/edge.d.ts +0 -7
  28. package/dist/edge.d.ts.map +0 -1
  29. package/dist/edge.js +0 -13
  30. package/dist/edge.js.map +0 -1
  31. package/dist/functions.d.ts +0 -24
  32. package/dist/functions.d.ts.map +0 -1
  33. package/dist/functions.js +0 -24
  34. package/dist/functions.js.map +0 -1
  35. package/dist/http.d.ts +0 -96
  36. package/dist/http.d.ts.map +0 -1
  37. package/dist/http.js +0 -157
  38. package/dist/http.js.map +0 -1
  39. package/dist/index.d.ts +0 -118
  40. package/dist/index.d.ts.map +0 -1
  41. package/dist/index.js +0 -180
  42. package/dist/index.js.map +0 -1
  43. package/dist/mfa.d.ts +0 -109
  44. package/dist/mfa.d.ts.map +0 -1
  45. package/dist/mfa.js +0 -134
  46. package/dist/mfa.js.map +0 -1
  47. package/dist/postgrest.d.ts +0 -239
  48. package/dist/postgrest.d.ts.map +0 -1
  49. package/dist/postgrest.js +0 -467
  50. package/dist/postgrest.js.map +0 -1
  51. package/dist/profile.d.ts +0 -16
  52. package/dist/profile.d.ts.map +0 -1
  53. package/dist/profile.js +0 -26
  54. package/dist/profile.js.map +0 -1
  55. package/dist/realtime.d.ts +0 -114
  56. package/dist/realtime.d.ts.map +0 -1
  57. package/dist/realtime.js +0 -372
  58. package/dist/realtime.js.map +0 -1
  59. package/dist/rest.d.ts +0 -50
  60. package/dist/rest.d.ts.map +0 -1
  61. package/dist/rest.js +0 -75
  62. package/dist/rest.js.map +0 -1
  63. package/dist/session.d.ts +0 -36
  64. package/dist/session.d.ts.map +0 -1
  65. package/dist/session.js +0 -90
  66. package/dist/session.js.map +0 -1
  67. package/dist/storage.d.ts +0 -72
  68. package/dist/storage.d.ts.map +0 -1
  69. package/dist/storage.js +0 -148
  70. package/dist/storage.js.map +0 -1
  71. package/dist/types.d.ts +0 -106
  72. package/dist/types.d.ts.map +0 -1
  73. package/dist/types.js +0 -2
  74. package/dist/types.js.map +0 -1
package/dist/auth.js DELETED
@@ -1,418 +0,0 @@
1
- import { BackendError, toError } from './http.js';
2
- import { MfaClient } from './mfa.js';
3
- import { AuthAdminClient } from './admin.js';
4
- import { HTTP_ROUTES } from '@motherbase/contracts';
5
- /** Build a clean Session from the Better Auth auth payload. */
6
- function toSession(payload) {
7
- return { accessToken: payload.token, user: payload.user };
8
- }
9
- /**
10
- * Read the token an OAuth callback left in the URL fragment and return the URL
11
- * with it removed, so a reload or a shared link cannot replay it.
12
- *
13
- * The provider callback cannot answer the SDK with a JSON body: it is a browser
14
- * redirect. The backend therefore appends `#access_token=…` to the redirect it
15
- * issues, the same implicit flow supabase-js reads. Exported for testing.
16
- */
17
- export function readAccessTokenFromUrl(href) {
18
- const hash = href.indexOf('#');
19
- if (hash === -1)
20
- return null;
21
- const params = new URLSearchParams(href.slice(hash + 1));
22
- const accessToken = params.get('access_token');
23
- if (!accessToken)
24
- return null;
25
- params.delete('access_token');
26
- params.delete('token_type');
27
- const rest = params.toString();
28
- return { accessToken, cleanedHref: `${href.slice(0, hash)}${rest ? `#${rest}` : ''}` };
29
- }
30
- const EVENT_MAP = {
31
- signIn: 'SIGNED_IN',
32
- signOut: 'SIGNED_OUT',
33
- tokenRefreshed: 'TOKEN_REFRESHED',
34
- };
35
- /**
36
- * Supabase-compatible auth client. Maps supabase-js method names onto the
37
- * Motherbase auth endpoints and reuses the existing token/refresh/session-store
38
- * machinery. Returns `{ data, error }` and never throws for expected failures.
39
- */
40
- export class AuthClient {
41
- constructor(http, store) {
42
- this.http = http;
43
- this.store = store;
44
- // A successful verify can return a stepped-up session, so mfa re-runs the
45
- // session read through the same path every other method uses.
46
- this.mfa = new MfaClient(http, async () => {
47
- await this.refreshSession();
48
- });
49
- this.admin = new AuthAdminClient(http);
50
- }
51
- async signUp(credentials) {
52
- try {
53
- const payload = await this.http.request(HTTP_ROUTES.authSignUp, {
54
- method: 'POST',
55
- body: { email: credentials.email, password: credentials.password, name: credentials.username ?? credentials.email },
56
- anonymous: true,
57
- raw: true,
58
- });
59
- const session = await this.persist(payload);
60
- return { data: { user: session.user, session }, error: null };
61
- }
62
- catch (err) {
63
- return { data: { user: null, session: null }, error: toError(err) };
64
- }
65
- }
66
- async signInWithPassword(credentials) {
67
- try {
68
- const payload = await this.http.request(HTTP_ROUTES.authSignIn, {
69
- method: 'POST',
70
- body: { email: credentials.email, password: credentials.password },
71
- anonymous: true,
72
- raw: true,
73
- });
74
- const session = await this.persist(payload);
75
- return { data: { user: session.user, session }, error: null };
76
- }
77
- catch (err) {
78
- return { data: { user: null, session: null }, error: toError(err) };
79
- }
80
- }
81
- /**
82
- * Request a password-reset OTP by email. Always resolves successfully
83
- * (whether or not the email is registered) to avoid leaking account
84
- * existence; check `error` only for transport/server failures.
85
- */
86
- async resetPasswordForEmail(email) {
87
- try {
88
- await this.http.request(HTTP_ROUTES.authRequestPasswordReset, {
89
- method: 'POST',
90
- body: { email },
91
- anonymous: true,
92
- raw: true,
93
- });
94
- return { error: null };
95
- }
96
- catch (err) {
97
- return { error: toError(err) };
98
- }
99
- }
100
- /** Complete a password reset using the OTP sent to the user's email. */
101
- async resetPassword(args) {
102
- try {
103
- await this.http.request(HTTP_ROUTES.authResetPassword, {
104
- method: 'POST',
105
- body: { email: args.email, otp: args.otp, password: args.password },
106
- anonymous: true,
107
- raw: true,
108
- });
109
- return { error: null };
110
- }
111
- catch (err) {
112
- return { error: toError(err) };
113
- }
114
- }
115
- /** Send a one-time sign-in code by email. Pair with `verifyOtp` to complete sign-in. */
116
- async signInWithOtp(credentials) {
117
- try {
118
- await this.http.request(HTTP_ROUTES.authSendOtp, {
119
- method: 'POST',
120
- body: { email: credentials.email, type: 'sign-in' },
121
- anonymous: true,
122
- raw: true,
123
- });
124
- return { data: {}, error: null };
125
- }
126
- catch (err) {
127
- return { data: {}, error: toError(err) };
128
- }
129
- }
130
- /** Complete a `signInWithOtp` sign-in using the code sent to the user's email. */
131
- async verifyOtp(params) {
132
- try {
133
- const payload = await this.http.request(HTTP_ROUTES.authSignInEmailOtp, {
134
- method: 'POST',
135
- body: { email: params.email, otp: params.token },
136
- anonymous: true,
137
- raw: true,
138
- });
139
- const session = await this.persist(payload);
140
- return { data: { user: session.user, session }, error: null };
141
- }
142
- catch (err) {
143
- return { data: { user: null, session: null }, error: toError(err) };
144
- }
145
- }
146
- /**
147
- * Start an OAuth sign-in with a configured social provider. Resolves with the
148
- * provider's authorize URL and, in a browser, redirects to it immediately
149
- * unless `options.skipBrowserRedirect` is set.
150
- */
151
- async signInWithOAuth(credentials) {
152
- // In a browser, hand the whole handshake to a top-level navigation. Starting
153
- // it with a fetch makes the OAuth state cookie a cross-site write, which
154
- // Safari and Firefox drop outright and Chrome drops in incognito, and the
155
- // callback then fails with state_mismatch. Navigating to the backend's own
156
- // origin makes that cookie first-party, so a plain SameSite=Lax cookie
157
- // survives everywhere. The backend redirects on from there.
158
- if (typeof window !== 'undefined' && !credentials.options?.skipBrowserRedirect) {
159
- const params = new URLSearchParams();
160
- if (credentials.options?.redirectTo)
161
- params.set('callbackURL', credentials.options.redirectTo);
162
- const query = params.toString();
163
- const url = this.http.url(`${HTTP_ROUTES.authSignInSocial}/${encodeURIComponent(credentials.provider)}${query ? `?${query}` : ''}`);
164
- window.location.href = url;
165
- return { data: { provider: credentials.provider, url }, error: null };
166
- }
167
- try {
168
- const payload = await this.http.request(HTTP_ROUTES.authSignInSocial, {
169
- method: 'POST',
170
- body: {
171
- provider: credentials.provider,
172
- callbackURL: credentials.options?.redirectTo,
173
- scopes: credentials.options?.scopes ? credentials.options.scopes.split(' ') : undefined,
174
- disableRedirect: true,
175
- },
176
- anonymous: true,
177
- raw: true,
178
- // The server answers with a signed OAuth state cookie it checks again on
179
- // the provider callback. Without 'include' the browser drops that cookie
180
- // on a cross-origin call and every callback fails with state_mismatch.
181
- credentials: 'include',
182
- });
183
- const url = payload?.url ?? null;
184
- if (url && !credentials.options?.skipBrowserRedirect && typeof window !== 'undefined') {
185
- window.location.href = url;
186
- }
187
- return { data: { provider: credentials.provider, url }, error: null };
188
- }
189
- catch (err) {
190
- return { data: { provider: credentials.provider, url: null }, error: toError(err) };
191
- }
192
- }
193
- /**
194
- * Start an enterprise SSO sign-in. Identify the provider by the user's email
195
- * domain, by an explicit `domain`, or by `providerId` when you already know
196
- * which one to use.
197
- *
198
- * Resolves with the identity provider's URL and, in a browser, redirects to it
199
- * unless `options.skipBrowserRedirect` is set. The project must have the SSO
200
- * plugin enabled and at least one provider registered (Studio →
201
- * Authentication → Organizations & SSO).
202
- */
203
- async signInWithSSO(params) {
204
- if (!params.domain && !params.email && !params.providerId && !params.organizationSlug) {
205
- return { data: { url: null }, error: { message: 'signInWithSSO needs a domain, email, providerId or organizationSlug' } };
206
- }
207
- try {
208
- const payload = await this.http.request('/api/auth/sign-in/sso', {
209
- method: 'POST',
210
- body: {
211
- ...(params.domain ? { domain: params.domain } : {}),
212
- ...(params.email ? { email: params.email } : {}),
213
- ...(params.providerId ? { providerId: params.providerId } : {}),
214
- ...(params.organizationSlug ? { organizationSlug: params.organizationSlug } : {}),
215
- callbackURL: params.options?.redirectTo,
216
- },
217
- anonymous: true,
218
- raw: true,
219
- credentials: 'include', // Same OAuth state cookie as signInWithOAuth.
220
- });
221
- const url = payload?.url ?? null;
222
- if (url && !params.options?.skipBrowserRedirect && typeof window !== 'undefined') {
223
- window.location.href = url;
224
- }
225
- return { data: { url }, error: null };
226
- }
227
- catch (err) {
228
- return { data: { url: null }, error: toError(err) };
229
- }
230
- }
231
- /**
232
- * Update the signed-in user's profile fields and/or password. Password
233
- * changes require `currentPassword` (a Better Auth requirement — there is no
234
- * blind password overwrite from an authenticated session).
235
- */
236
- async updateUser(attributes) {
237
- try {
238
- if (attributes.data && Object.keys(attributes.data).length > 0) {
239
- await this.http.request(HTTP_ROUTES.authUpdateUser, { method: 'POST', body: attributes.data, raw: true });
240
- }
241
- if (attributes.password) {
242
- if (!attributes.currentPassword) {
243
- return { data: { user: null }, error: { message: '`currentPassword` is required to change the password.' } };
244
- }
245
- await this.http.request(HTTP_ROUTES.authChangePassword, {
246
- method: 'POST',
247
- body: { newPassword: attributes.password, currentPassword: attributes.currentPassword },
248
- raw: true,
249
- });
250
- }
251
- return await this.getUser();
252
- }
253
- catch (err) {
254
- return { data: { user: null }, error: toError(err) };
255
- }
256
- }
257
- /**
258
- * Permanently delete the signed-in user's account. Not part of the
259
- * supabase-js client surface (there it's admin-only) — kept here because
260
- * self-service account deletion is a real product need. Requires the
261
- * backend's `delete-user` flow to be enabled; clears the local session on
262
- * success.
263
- */
264
- async deleteUser(attributes = {}) {
265
- try {
266
- await this.http.request(HTTP_ROUTES.authDeleteUser, {
267
- method: 'POST',
268
- body: attributes,
269
- raw: true,
270
- });
271
- await this.store.set(null, 'signOut');
272
- return { error: null };
273
- }
274
- catch (err) {
275
- return { error: toError(err) };
276
- }
277
- }
278
- /**
279
- * Adopt an externally-obtained access token as the current session (e.g. one
280
- * captured from an OAuth redirect). Validates it against the server before
281
- * persisting. `refresh_token` is accepted for supabase-js signature parity
282
- * and unused — Better Auth bearer sessions have none.
283
- */
284
- async setSession(currentSession) {
285
- await this.store.set({ accessToken: currentSession.access_token, user: { id: '', email: '' } }, 'signIn');
286
- try {
287
- const payload = await this.http.request(HTTP_ROUTES.authSession, { raw: true });
288
- if (!payload?.user) {
289
- await this.store.set(null, 'signOut');
290
- return { data: { user: null, session: null }, error: { message: 'Invalid session' } };
291
- }
292
- const session = { accessToken: currentSession.access_token, user: payload.user };
293
- await this.store.set(session, 'signIn');
294
- return { data: { user: session.user, session }, error: null };
295
- }
296
- catch (err) {
297
- await this.store.set(null, 'signOut');
298
- return { data: { user: null, session: null }, error: toError(err) };
299
- }
300
- }
301
- async signOut() {
302
- try {
303
- await this.http.request(HTTP_ROUTES.authSignOut, { method: 'POST', raw: true });
304
- }
305
- catch {
306
- // best-effort; clear locally regardless
307
- }
308
- await this.store.set(null, 'signOut');
309
- return { error: null };
310
- }
311
- /**
312
- * Finish an OAuth / SSO sign-in after the provider redirected back.
313
- *
314
- * `signInWithOAuth` only starts the flow; the session is created during the
315
- * redirect the browser makes to the backend callback, so the SDK has to pick
316
- * it up from the URL the browser landed on. Call this once on the page you
317
- * pointed `redirectTo` at (or on app start, which is where supabase-js does
318
- * the equivalent). Without it the user is signed in on the backend and signed
319
- * out in your app.
320
- *
321
- * Resolves with a null session and no error when there is nothing to read, so
322
- * it is safe to call on every page load.
323
- */
324
- async getSessionFromUrl(href) {
325
- const url = href ?? (typeof window !== 'undefined' ? window.location.href : undefined);
326
- const found = url ? readAccessTokenFromUrl(url) : null;
327
- if (!found)
328
- return { data: { user: null, session: null }, error: null };
329
- // Strip the token before the network call: a failed lookup must not leave a
330
- // usable token sitting in the address bar or in the back/forward history.
331
- if (!href && typeof window !== 'undefined') {
332
- window.history?.replaceState?.(window.history.state, '', found.cleanedHref);
333
- }
334
- try {
335
- // Resolve the user with the token explicitly rather than storing it first:
336
- // a rejected token must not emit a SIGNED_IN event carrying a null user.
337
- const payload = await this.http.request(HTTP_ROUTES.authSession, {
338
- raw: true,
339
- anonymous: true,
340
- headers: { Authorization: `Bearer ${found.accessToken}` },
341
- });
342
- if (!payload?.user) {
343
- return { data: { user: null, session: null }, error: { message: 'OAuth session is no longer valid' } };
344
- }
345
- const session = await this.persist({ token: found.accessToken, user: payload.user });
346
- return { data: { user: session.user, session }, error: null };
347
- }
348
- catch (err) {
349
- return { data: { user: null, session: null }, error: toError(err) };
350
- }
351
- }
352
- /** Fetch the current user from Better Auth (requires a valid session). */
353
- async getUser() {
354
- try {
355
- const payload = await this.http.request(HTTP_ROUTES.authSession, { raw: true });
356
- return { data: { user: payload?.user ?? null }, error: null };
357
- }
358
- catch (err) {
359
- return { data: { user: null }, error: toError(err) };
360
- }
361
- }
362
- /** The locally-held session, if any (no network call). */
363
- async getSession() {
364
- await this.store.hydrate();
365
- return { data: { session: this.store.get() }, error: null };
366
- }
367
- /**
368
- * Revalidate the current session against the server. Better Auth bearer
369
- * sessions have no refresh token — if the session is still valid the user is
370
- * refreshed; otherwise the local session is cleared.
371
- */
372
- async refreshSession() {
373
- await this.store.hydrate();
374
- const current = this.store.get();
375
- if (!current?.accessToken) {
376
- return { data: { user: null, session: null }, error: { message: 'Auth session missing!' } };
377
- }
378
- try {
379
- const payload = await this.http.request(HTTP_ROUTES.authSession, { raw: true, _retry: true });
380
- if (!payload?.user) {
381
- await this.store.set(null, 'signOut');
382
- return { data: { user: null, session: null }, error: { message: 'Session expired' } };
383
- }
384
- const session = { accessToken: current.accessToken, user: payload.user };
385
- await this.store.set(session, 'tokenRefreshed');
386
- return { data: { user: session.user, session }, error: null };
387
- }
388
- catch (err) {
389
- // Only a rejected token clears the session. A network failure or a 5xx
390
- // must leave it intact: middleware runs this on every navigation, so
391
- // one backend hiccup would otherwise sign the user out.
392
- const status = err instanceof BackendError ? err.httpStatus : 0;
393
- if (status === 401 || status === 403)
394
- await this.store.set(null, 'signOut');
395
- return { data: { user: null, session: null }, error: toError(err) };
396
- }
397
- }
398
- onAuthStateChange(callback) {
399
- const unsubscribe = this.store.subscribe((event, session) => {
400
- callback(EVENT_MAP[event], session);
401
- });
402
- return { data: { subscription: { unsubscribe } } };
403
- }
404
- /**
405
- * Internal: refresh used by the HttpClient's 401 path. Returns true on success.
406
- * Not part of the public Supabase surface.
407
- */
408
- async _refresh() {
409
- const result = await this.refreshSession();
410
- return result.error === null;
411
- }
412
- async persist(payload) {
413
- const session = toSession(payload);
414
- await this.store.set(session, 'signIn');
415
- return session;
416
- }
417
- }
418
- //# sourceMappingURL=auth.js.map
package/dist/auth.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
package/dist/channel.d.ts DELETED
@@ -1,119 +0,0 @@
1
- import type { RealtimeModule } from './realtime.js';
2
- import type { RealtimeTopicEnvelope } from '@motherbase/contracts';
3
- export type PostgresChangeEvent = 'INSERT' | 'UPDATE' | 'DELETE' | '*';
4
- export interface PostgresChangeFilter {
5
- event: PostgresChangeEvent;
6
- schema?: string;
7
- table: string;
8
- /** PostgREST-style column filter, e.g. `room_id=eq.42`. Applied server-side in sub-project #4. */
9
- filter?: string;
10
- }
11
- export interface PostgresChangePayload<T = Record<string, unknown>> {
12
- schema: string;
13
- table: string;
14
- eventType: 'INSERT' | 'UPDATE' | 'DELETE';
15
- new: T | Record<string, never>;
16
- old: T | Record<string, never>;
17
- commit_timestamp: string;
18
- }
19
- export interface BroadcastFilter {
20
- event: string;
21
- }
22
- export interface PresenceFilter {
23
- event: 'sync' | 'join' | 'leave';
24
- }
25
- export interface BroadcastMessage {
26
- type: 'broadcast';
27
- event: string;
28
- payload?: Record<string, unknown>;
29
- }
30
- export interface BroadcastReceived {
31
- type: 'broadcast';
32
- event: string;
33
- payload: unknown;
34
- }
35
- export interface PresenceEntry {
36
- presence_ref: string;
37
- [key: string]: unknown;
38
- }
39
- export type PresenceState<T extends Record<string, unknown> = Record<string, unknown>> = Record<string, Array<T & {
40
- presence_ref: string;
41
- }>>;
42
- export interface PresenceJoinPayload {
43
- key: string;
44
- newPresences: PresenceEntry[];
45
- currentPresences: PresenceEntry[];
46
- }
47
- export interface PresenceLeavePayload {
48
- key: string;
49
- leftPresences: PresenceEntry[];
50
- currentPresences: PresenceEntry[];
51
- }
52
- export type ChannelStatus = 'SUBSCRIBED' | 'TIMED_OUT' | 'CLOSED' | 'CHANNEL_ERROR';
53
- export interface RealtimeChannelOptions {
54
- config?: {
55
- broadcast?: {
56
- self?: boolean;
57
- ack?: boolean;
58
- };
59
- presence?: {
60
- key?: string;
61
- };
62
- };
63
- }
64
- /**
65
- * Supabase-compatible realtime channel. Multiplexes broadcast, presence, and
66
- * postgres_changes over a single topic. `postgres_changes` is delivered through
67
- * the RealtimeModule.watchTable bridge in this release; broadcast/presence are
68
- * routed by topic via rt:msg envelopes.
69
- */
70
- export declare class RealtimeChannel {
71
- readonly topic: string;
72
- private readonly realtime;
73
- private readonly options;
74
- private readonly pgBindings;
75
- private readonly broadcastBindings;
76
- private readonly presenceBindings;
77
- private status;
78
- private presence;
79
- /** Settles when the current subscribe() attempt has an ack (or has failed). */
80
- private ready;
81
- private onStatus?;
82
- /** Last state passed to track(), replayed after a reconnect. */
83
- private trackedState;
84
- constructor(topic: string, realtime: RealtimeModule, options?: RealtimeChannelOptions);
85
- on(type: 'broadcast', filter: BroadcastFilter, callback: (payload: BroadcastReceived) => void): this;
86
- on(type: 'presence', filter: PresenceFilter, callback: (payload: unknown) => void): this;
87
- on(type: 'postgres_changes', filter: PostgresChangeFilter, callback: (payload: PostgresChangePayload) => void): this;
88
- /**
89
- * Join the topic. Returns `this` (supabase-js shape), so it is NOT awaitable:
90
- * `send()` / `track()` / `untrack()` issued straight after are queued until the
91
- * join is acked instead of leaving early and being rejected by the server.
92
- */
93
- subscribe(onStatus?: (status: ChannelStatus, err?: Error) => void, timeoutMs?: number): this;
94
- unsubscribe(): Promise<'ok'>;
95
- /**
96
- * Broadcast a message to the topic. Other clients on the topic with a matching
97
- * `on('broadcast', { event })` binding receive it; the sender receives its own
98
- * message only when the channel was created with `config.broadcast.self`.
99
- * With `config.broadcast.ack`, resolves on the server ack.
100
- */
101
- send(message: BroadcastMessage): Promise<'ok' | 'timed out' | 'error'>;
102
- /** Announce this client's presence on the topic with the given state. */
103
- track(state: Record<string, unknown>): Promise<'ok' | 'timed out' | 'error'>;
104
- /** Remove this client's presence from the topic. */
105
- untrack(): Promise<'ok' | 'timed out' | 'error'>;
106
- /** Current presence state, keyed by presence key. */
107
- presenceState<T extends Record<string, unknown> = Record<string, unknown>>(): PresenceState<T>;
108
- /** Wait for a pending subscribe() to settle; false when the topic is not joined. */
109
- private subscribed;
110
- private setStatus;
111
- /** Internal: the module replayed this topic's join on a new socket. */
112
- _rejoined(ok: boolean): void;
113
- /** Internal: receive a topic envelope routed by RealtimeModule. */
114
- _receive(envelope: RealtimeTopicEnvelope): void;
115
- private applyPresenceState;
116
- private emitPresence;
117
- private buildConfig;
118
- }
119
- //# sourceMappingURL=channel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../src/channel.ts"],"names":[],"mappings":"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"}