@motherbase/client 1.4.0 → 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 (90) hide show
  1. package/README.md +379 -284
  2. package/package.json +1 -1
  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 -362
  8. package/dist/auth.d.ts.map +0 -1
  9. package/dist/auth.js +0 -721
  10. package/dist/auth.js.map +0 -1
  11. package/dist/channel.d.ts +0 -122
  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/compat.d.ts +0 -40
  16. package/dist/compat.d.ts.map +0 -1
  17. package/dist/compat.js +0 -98
  18. package/dist/compat.js.map +0 -1
  19. package/dist/cookie.d.ts +0 -68
  20. package/dist/cookie.d.ts.map +0 -1
  21. package/dist/cookie.js +0 -152
  22. package/dist/cookie.js.map +0 -1
  23. package/dist/database.d.ts +0 -188
  24. package/dist/database.d.ts.map +0 -1
  25. package/dist/database.js +0 -2
  26. package/dist/database.js.map +0 -1
  27. package/dist/devices.d.ts +0 -13
  28. package/dist/devices.d.ts.map +0 -1
  29. package/dist/devices.js +0 -13
  30. package/dist/devices.js.map +0 -1
  31. package/dist/edge.d.ts +0 -7
  32. package/dist/edge.d.ts.map +0 -1
  33. package/dist/edge.js +0 -13
  34. package/dist/edge.js.map +0 -1
  35. package/dist/functions.d.ts +0 -60
  36. package/dist/functions.d.ts.map +0 -1
  37. package/dist/functions.js +0 -75
  38. package/dist/functions.js.map +0 -1
  39. package/dist/http.d.ts +0 -123
  40. package/dist/http.d.ts.map +0 -1
  41. package/dist/http.js +0 -205
  42. package/dist/http.js.map +0 -1
  43. package/dist/index.d.ts +0 -185
  44. package/dist/index.d.ts.map +0 -1
  45. package/dist/index.js +0 -331
  46. package/dist/index.js.map +0 -1
  47. package/dist/mfa.d.ts +0 -109
  48. package/dist/mfa.d.ts.map +0 -1
  49. package/dist/mfa.js +0 -134
  50. package/dist/mfa.js.map +0 -1
  51. package/dist/postgrest.d.ts +0 -326
  52. package/dist/postgrest.d.ts.map +0 -1
  53. package/dist/postgrest.js +0 -629
  54. package/dist/postgrest.js.map +0 -1
  55. package/dist/profile.d.ts +0 -16
  56. package/dist/profile.d.ts.map +0 -1
  57. package/dist/profile.js +0 -26
  58. package/dist/profile.js.map +0 -1
  59. package/dist/query.d.ts +0 -97
  60. package/dist/query.d.ts.map +0 -1
  61. package/dist/query.js +0 -94
  62. package/dist/query.js.map +0 -1
  63. package/dist/realtime.d.ts +0 -114
  64. package/dist/realtime.d.ts.map +0 -1
  65. package/dist/realtime.js +0 -372
  66. package/dist/realtime.js.map +0 -1
  67. package/dist/rest.d.ts +0 -50
  68. package/dist/rest.d.ts.map +0 -1
  69. package/dist/rest.js +0 -75
  70. package/dist/rest.js.map +0 -1
  71. package/dist/session.d.ts +0 -47
  72. package/dist/session.d.ts.map +0 -1
  73. package/dist/session.js +0 -136
  74. package/dist/session.js.map +0 -1
  75. package/dist/storage.d.ts +0 -239
  76. package/dist/storage.d.ts.map +0 -1
  77. package/dist/storage.js +0 -391
  78. package/dist/storage.js.map +0 -1
  79. package/dist/testing.d.ts +0 -38
  80. package/dist/testing.d.ts.map +0 -1
  81. package/dist/testing.js +0 -50
  82. package/dist/testing.js.map +0 -1
  83. package/dist/types.d.ts +0 -343
  84. package/dist/types.d.ts.map +0 -1
  85. package/dist/types.js +0 -2
  86. package/dist/types.js.map +0 -1
  87. package/dist/warn.d.ts +0 -4
  88. package/dist/warn.d.ts.map +0 -1
  89. package/dist/warn.js +0 -27
  90. package/dist/warn.js.map +0 -1
package/dist/realtime.js DELETED
@@ -1,372 +0,0 @@
1
- import { contractPath, normalizeRealtimeModel, REALTIME_SOCKET_EVENTS, REALTIME_TOPIC_EVENTS, } from '@motherbase/contracts';
2
- /**
3
- * Lazy wrapper over socket.io-client. The dependency is optional: it is only
4
- * imported when `connect()` is called, so apps that never use realtime do not
5
- * need to install it.
6
- */
7
- export class RealtimeModule {
8
- constructor(baseUrl, store, fetchImpl = globalThis.fetch?.bind(globalThis),
9
- /** Inject a socket factory (tests / custom transports). Falls back to socket.io-client. */
10
- ioFactory) {
11
- this.baseUrl = baseUrl;
12
- this.store = store;
13
- this.fetchImpl = fetchImpl;
14
- this.ioFactory = ioFactory;
15
- this.socket = null;
16
- this.status = 'idle';
17
- this.statusListeners = new Set();
18
- this.pollers = new Map();
19
- this.tableSubscriptionRefs = new Map();
20
- this.pollerSeq = 0;
21
- this.channelsByTopic = new Map();
22
- /** Topics joined on the current socket, replayed as-is after a reconnect. */
23
- this.joinedTopics = new Map();
24
- this.topicRouterBound = false;
25
- }
26
- /** True once a socket is connected. */
27
- get connected() {
28
- return Boolean(this.socket?.connected);
29
- }
30
- getStatus() {
31
- return this.status;
32
- }
33
- onStatusChange(listener) {
34
- this.statusListeners.add(listener);
35
- listener(this.status);
36
- return () => this.statusListeners.delete(listener);
37
- }
38
- async connect(options = {}) {
39
- if (this.socket?.connected)
40
- return;
41
- this.setStatus('connecting');
42
- let io;
43
- if (this.ioFactory) {
44
- io = this.ioFactory;
45
- }
46
- else {
47
- try {
48
- // socket.io-client is an optional peer dependency; resolved at runtime only.
49
- // @ts-expect-error -- optional peer dependency resolved only when realtime connects
50
- ({ io } = (await import('socket.io-client')));
51
- }
52
- catch {
53
- if (options.fallbackPolling) {
54
- this.setStatus('polling');
55
- return;
56
- }
57
- this.setStatus('error', 'socket.io-client is not installed');
58
- throw new Error('Realtime requires the optional dependency "socket.io-client". Install it: npm i socket.io-client');
59
- }
60
- }
61
- // The session may not be in memory yet (http.ts hydrates before every
62
- // request; nothing hydrates before a channel subscribe). Without this the
63
- // socket connects anonymously on a cold page load.
64
- await this.store.hydrate();
65
- const socket = io(this.baseUrl, {
66
- path: '/ws',
67
- transports: ['websocket'],
68
- reconnection: true,
69
- // Read as a callback, not a snapshot: socket.io replays the auth payload
70
- // on every reconnect, so a fixed object would pin the socket to whatever
71
- // token existed at connect() time (or to none) for the whole session.
72
- auth: (cb) => {
73
- const token = this.store.get()?.accessToken;
74
- cb(token ? { token } : {});
75
- },
76
- });
77
- this.socket = socket;
78
- this.bindSocketStatus(socket);
79
- this.topicRouterBound = false;
80
- this.bindTopicRouter();
81
- await this.waitForConnect(socket, options.timeoutMs ?? 5000, Boolean(options.fallbackPolling));
82
- }
83
- on(event, cb) {
84
- this.socket?.on(event, cb);
85
- }
86
- off(event, cb) {
87
- this.socket?.off(event, cb);
88
- }
89
- emit(event, ...args) {
90
- this.socket?.emit(event, ...args);
91
- }
92
- /**
93
- * @deprecated Legacy low-level table watcher. Prefer the Supabase-shaped
94
- * `client.channel(topic).on('postgres_changes', { event, schema, table, filter }, cb)`.
95
- * Kept for backwards compatibility; scheduled for removal.
96
- *
97
- * Subscribe to create/update/delete events for a model table.
98
- *
99
- * Events are filtered server-side: you will only receive events for rows
100
- * your session is authorized to see (based on REST API SELECT policies).
101
- * Anonymous sessions receive only public rows; authenticated sessions receive
102
- * rows matching their access policies (e.g. owner-only rows they own).
103
- *
104
- * Falls back to polling the REST endpoint at subscribe time if the WebSocket
105
- * is not yet connected (polling does not auto-start on later disconnects).
106
- */
107
- watchTable(model, cb, options = {}) {
108
- const normalizedModel = normalizeRealtimeModel(model);
109
- if (!normalizedModel)
110
- throw new Error('Invalid realtime model: ' + model);
111
- const handlers = [];
112
- const baseEvent = normalizedModel;
113
- for (const type of ['created', 'updated', 'deleted']) {
114
- const event = contractPath.realtime(baseEvent, type);
115
- const handler = (payload) => cb({ type, source: 'socket', payload: payload });
116
- handlers.push({ event, handler });
117
- this.socket?.on(event, handler);
118
- }
119
- this.retainTableSubscription(normalizedModel);
120
- const shouldPoll = options.polling !== false && (!this.socket?.connected || this.status === 'polling');
121
- const pollerId = shouldPoll ? this.startPolling(model, cb, options) : null;
122
- return () => {
123
- for (const item of handlers)
124
- this.socket?.off(item.event, item.handler);
125
- this.releaseTableSubscription(normalizedModel);
126
- if (pollerId !== null)
127
- this.stopPolling(pollerId);
128
- };
129
- }
130
- disconnect() {
131
- for (const id of Array.from(this.pollers.keys()))
132
- this.stopPolling(id);
133
- this.socket?.disconnect();
134
- this.socket = null;
135
- this.topicRouterBound = false;
136
- this.setStatus('disconnected');
137
- }
138
- /** Register a channel so incoming rt:msg envelopes for its topic are routed to it. */
139
- registerChannel(topic, channel) {
140
- this.channelsByTopic.set(topic, channel);
141
- this.bindTopicRouter();
142
- }
143
- unregisterChannel(topic) {
144
- this.channelsByTopic.delete(topic);
145
- // Drop the rejoin memo too, or removeChannel()/removeAllChannels() would
146
- // resurrect the topic on the next reconnect.
147
- this.joinedTopics.delete(topic);
148
- }
149
- /** Emit rt:join and resolve the server ack (or a timeout/error ack). */
150
- joinTopic(topic, config, timeoutMs = 10000) {
151
- if (!this.socket?.connected)
152
- return Promise.resolve({ status: 'error', error: 'not-connected' });
153
- const socket = this.socket;
154
- return new Promise(resolve => {
155
- let settled = false;
156
- const timer = setTimeout(() => {
157
- if (settled)
158
- return;
159
- settled = true;
160
- resolve({ status: 'error', error: 'timeout' });
161
- }, timeoutMs);
162
- socket.emit(REALTIME_TOPIC_EVENTS.join, { topic, config }, (ack) => {
163
- if (settled)
164
- return;
165
- settled = true;
166
- clearTimeout(timer);
167
- const result = ack ?? { status: 'error', error: 'no-ack' };
168
- // Server-side topic state (rtTopics, postgres_changes bindings, presence)
169
- // dies with the socket, so remember what to replay after a reconnect.
170
- if (result.status === 'ok')
171
- this.joinedTopics.set(topic, config);
172
- resolve(result);
173
- });
174
- });
175
- }
176
- leaveTopic(topic) {
177
- this.joinedTopics.delete(topic);
178
- this.socket?.emit(REALTIME_TOPIC_EVENTS.leave, { topic });
179
- }
180
- sendTopic(topic, type, event, payload) {
181
- this.socket?.emit(REALTIME_TOPIC_EVENTS.message, { topic, type, event, payload });
182
- }
183
- /** Emit an rt:msg and wait for the server ack (or resolve 'timed out'/'error'). */
184
- sendTopicWithAck(topic, type, event, payload, timeoutMs = 10000) {
185
- if (!this.socket?.connected)
186
- return Promise.resolve('error');
187
- const socket = this.socket;
188
- return new Promise(resolve => {
189
- let settled = false;
190
- const timer = setTimeout(() => {
191
- if (settled)
192
- return;
193
- settled = true;
194
- resolve('timed out');
195
- }, timeoutMs);
196
- socket.emit(REALTIME_TOPIC_EVENTS.message, { topic, type, event, payload }, (result) => {
197
- if (settled)
198
- return;
199
- settled = true;
200
- clearTimeout(timer);
201
- resolve(result === 'ok' ? 'ok' : 'error');
202
- });
203
- });
204
- }
205
- bindTopicRouter() {
206
- if (this.topicRouterBound || !this.socket)
207
- return;
208
- this.topicRouterBound = true;
209
- this.socket.on(REALTIME_TOPIC_EVENTS.message, (env) => {
210
- const envelope = env;
211
- if (!envelope || typeof envelope.topic !== 'string')
212
- return;
213
- this.channelsByTopic.get(envelope.topic)?._receive(envelope);
214
- });
215
- }
216
- retainTableSubscription(model) {
217
- const refs = this.tableSubscriptionRefs.get(model) ?? 0;
218
- this.tableSubscriptionRefs.set(model, refs + 1);
219
- if (refs === 0 && this.socket?.connected)
220
- this.socket.emit(REALTIME_SOCKET_EVENTS.subscribe, model);
221
- }
222
- releaseTableSubscription(model) {
223
- const refs = this.tableSubscriptionRefs.get(model) ?? 0;
224
- if (refs > 1) {
225
- this.tableSubscriptionRefs.set(model, refs - 1);
226
- return;
227
- }
228
- this.tableSubscriptionRefs.delete(model);
229
- if (refs === 1 && this.socket?.connected)
230
- this.socket.emit(REALTIME_SOCKET_EVENTS.unsubscribe, model);
231
- }
232
- resubscribeTables() {
233
- if (!this.socket?.connected)
234
- return;
235
- for (const model of this.tableSubscriptionRefs.keys()) {
236
- this.socket.emit(REALTIME_SOCKET_EVENTS.subscribe, model);
237
- }
238
- }
239
- /**
240
- * Replay every joined topic on a fresh socket. The server keeps topic state on
241
- * the socket, so without this a reconnected channel still reports SUBSCRIBED
242
- * and receives nothing at all.
243
- */
244
- async rejoinTopics() {
245
- for (const [topic, config] of Array.from(this.joinedTopics)) {
246
- const ack = await this.joinTopic(topic, config);
247
- this.channelsByTopic.get(topic)?._rejoined?.(ack.status === 'ok');
248
- }
249
- }
250
- bindSocketStatus(socket) {
251
- socket.on('connect', () => {
252
- this.setStatus('connected');
253
- this.resubscribeTables();
254
- void this.rejoinTopics();
255
- });
256
- socket.on('disconnect', () => this.setStatus(this.pollers.size ? 'polling' : 'disconnected'));
257
- socket.on('connect_error', error => this.setStatus('error', error));
258
- socket.on('reconnect_attempt', () => this.setStatus('reconnecting'));
259
- socket.on('reconnect', () => this.setStatus('connected'));
260
- }
261
- waitForConnect(socket, timeoutMs, fallbackPolling) {
262
- if (socket.connected) {
263
- this.setStatus('connected');
264
- this.resubscribeTables();
265
- return Promise.resolve();
266
- }
267
- return new Promise((resolve, reject) => {
268
- let settled = false;
269
- const cleanup = () => {
270
- socket.off('connect', onConnect);
271
- socket.off('connect_error', onError);
272
- clearTimeout(timer);
273
- };
274
- const settle = (fn) => {
275
- if (settled)
276
- return;
277
- settled = true;
278
- cleanup();
279
- fn();
280
- };
281
- const onConnect = () => settle(() => {
282
- this.setStatus('connected');
283
- resolve();
284
- });
285
- const onError = (error) => {
286
- if (fallbackPolling) {
287
- settle(() => {
288
- this.setStatus('polling', error);
289
- resolve();
290
- });
291
- return;
292
- }
293
- settle(() => {
294
- this.setStatus('error', error);
295
- reject(error instanceof Error ? error : new Error(String(error)));
296
- });
297
- };
298
- const timer = setTimeout(() => {
299
- if (fallbackPolling) {
300
- settle(() => {
301
- this.setStatus('polling');
302
- resolve();
303
- });
304
- return;
305
- }
306
- settle(() => {
307
- const error = new Error('Realtime connection timeout');
308
- this.setStatus('error', error);
309
- reject(error);
310
- });
311
- }, timeoutMs);
312
- socket.on('connect', onConnect);
313
- socket.on('connect_error', onError);
314
- });
315
- }
316
- startPolling(model, cb, options) {
317
- if (!this.fetchImpl)
318
- throw new Error('Realtime polling requires a fetch implementation.');
319
- const id = ++this.pollerSeq;
320
- let last = '';
321
- let stopped = false;
322
- const run = async () => {
323
- if (stopped)
324
- return;
325
- const rows = await this.fetchRows(model, options.query);
326
- const snapshot = JSON.stringify(rows);
327
- if (snapshot !== last) {
328
- last = snapshot;
329
- cb({ type: 'snapshot', source: 'polling', rows });
330
- }
331
- };
332
- const timer = setInterval(() => {
333
- run().catch(error => this.setStatus('error', error));
334
- }, options.intervalMs ?? 5000);
335
- this.pollers.set(id, {
336
- timer,
337
- stop: () => {
338
- stopped = true;
339
- clearInterval(timer);
340
- },
341
- });
342
- this.setStatus(this.socket?.connected ? 'connected' : 'polling');
343
- run().catch(error => this.setStatus('error', error));
344
- return id;
345
- }
346
- stopPolling(id) {
347
- const poller = this.pollers.get(id);
348
- if (!poller)
349
- return;
350
- poller.stop();
351
- this.pollers.delete(id);
352
- if (!this.socket?.connected && this.pollers.size === 0)
353
- this.setStatus('disconnected');
354
- }
355
- async fetchRows(model, query) {
356
- const path = `${contractPath.rest(model)}${query ? (query.startsWith('?') ? query : `?${query}`) : ''}`;
357
- const headers = {};
358
- const token = this.store.get()?.accessToken;
359
- if (token)
360
- headers.Authorization = `Bearer ${token}`;
361
- const res = await this.fetchImpl(`${this.baseUrl}${path}`, { headers });
362
- if (!res.ok)
363
- throw new Error(`Realtime polling failed with ${res.status}`);
364
- return (await res.json());
365
- }
366
- setStatus(status, detail) {
367
- this.status = status;
368
- for (const listener of this.statusListeners)
369
- listener(status, detail);
370
- }
371
- }
372
- //# sourceMappingURL=realtime.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"realtime.js","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"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"}
package/dist/rest.d.ts DELETED
@@ -1,50 +0,0 @@
1
- import type { HttpClient } from './http.js';
2
- type Primitive = string | number | boolean | null;
3
- export type RestOperator = 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'like' | 'ilike' | 'in' | 'is';
4
- export type OrderDirection = 'asc' | 'desc';
5
- export type RestFilterValue = Primitive | {
6
- op: RestOperator;
7
- value: Primitive | Primitive[];
8
- };
9
- export type RestFilters = Record<string, RestFilterValue>;
10
- export interface RestListOptions {
11
- select?: string[];
12
- filters?: RestFilters;
13
- order?: Array<{
14
- field: string;
15
- direction?: OrderDirection;
16
- }>;
17
- limit?: number;
18
- offset?: number;
19
- }
20
- export interface RestMutationOptions {
21
- filters?: RestFilters;
22
- }
23
- export declare class RestTable<Row extends object = Record<string, unknown>> {
24
- private readonly http;
25
- private readonly model;
26
- constructor(http: HttpClient, model: string);
27
- list(options?: RestListOptions): Promise<Row[]>;
28
- insert(data: Partial<Row>): Promise<Row[]>;
29
- update(data: Partial<Row>, options?: RestMutationOptions): Promise<Row[] | {
30
- count: number;
31
- }>;
32
- remove(options?: RestMutationOptions): Promise<Row[] | {
33
- count: number;
34
- }>;
35
- }
36
- export declare class RestModule {
37
- private readonly http;
38
- constructor(http: HttpClient);
39
- from<Row extends object = Record<string, unknown>>(model: string): RestTable<Row>;
40
- list<Row extends object = Record<string, unknown>>(model: string, options?: RestListOptions): Promise<Row[]>;
41
- insert<Row extends object = Record<string, unknown>>(model: string, data: Partial<Row>): Promise<Row[]>;
42
- update<Row extends object = Record<string, unknown>>(model: string, data: Partial<Row>, options?: RestMutationOptions): Promise<Row[] | {
43
- count: number;
44
- }>;
45
- remove<Row extends object = Record<string, unknown>>(model: string, options?: RestMutationOptions): Promise<Row[] | {
46
- count: number;
47
- }>;
48
- }
49
- export {};
50
- //# sourceMappingURL=rest.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rest.d.ts","sourceRoot":"","sources":["../src/rest.ts"],"names":[],"mappings":"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"}
package/dist/rest.js DELETED
@@ -1,75 +0,0 @@
1
- function encodeValue(value) {
2
- if (Array.isArray(value))
3
- return `(${value.map(encodeValue).join(',')})`;
4
- if (value === null)
5
- return 'null';
6
- return String(value);
7
- }
8
- function encodeFilter(value) {
9
- if (value && typeof value === 'object' && 'op' in value) {
10
- return `${value.op}.${encodeValue(value.value)}`;
11
- }
12
- return encodeValue(value);
13
- }
14
- function toQuery(options = {}) {
15
- const params = new URLSearchParams();
16
- const listOptions = options;
17
- if (listOptions.select?.length)
18
- params.set('select', listOptions.select.join(','));
19
- if (listOptions.order?.length) {
20
- params.set('order', listOptions.order.map(({ field, direction = 'asc' }) => `${field}.${direction}`).join(','));
21
- }
22
- if (typeof listOptions.limit === 'number')
23
- params.set('limit', String(listOptions.limit));
24
- if (typeof listOptions.offset === 'number')
25
- params.set('offset', String(listOptions.offset));
26
- for (const [field, value] of Object.entries(options.filters ?? {})) {
27
- params.set(field, encodeFilter(value));
28
- }
29
- const query = params.toString();
30
- return query ? `?${query}` : '';
31
- }
32
- export class RestTable {
33
- constructor(http, model) {
34
- this.http = http;
35
- this.model = model;
36
- }
37
- list(options = {}) {
38
- return this.http.request(`/rest/v1/${encodeURIComponent(this.model)}${toQuery(options)}`);
39
- }
40
- insert(data) {
41
- return this.http.request(`/rest/v1/${encodeURIComponent(this.model)}`, { method: 'POST', body: data });
42
- }
43
- update(data, options = {}) {
44
- return this.http.request(`/rest/v1/${encodeURIComponent(this.model)}${toQuery(options)}`, {
45
- method: 'PATCH',
46
- body: data,
47
- });
48
- }
49
- remove(options = {}) {
50
- return this.http.request(`/rest/v1/${encodeURIComponent(this.model)}${toQuery(options)}`, {
51
- method: 'DELETE',
52
- });
53
- }
54
- }
55
- export class RestModule {
56
- constructor(http) {
57
- this.http = http;
58
- }
59
- from(model) {
60
- return new RestTable(this.http, model);
61
- }
62
- list(model, options = {}) {
63
- return this.from(model).list(options);
64
- }
65
- insert(model, data) {
66
- return this.from(model).insert(data);
67
- }
68
- update(model, data, options = {}) {
69
- return this.from(model).update(data, options);
70
- }
71
- remove(model, options = {}) {
72
- return this.from(model).remove(options);
73
- }
74
- }
75
- //# sourceMappingURL=rest.js.map
package/dist/rest.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"rest.js","sourceRoot":"","sources":["../src/rest.ts"],"names":[],"mappings":"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"}
package/dist/session.d.ts DELETED
@@ -1,47 +0,0 @@
1
- import type { AuthEvent, AuthListener, KeyValueStorageAdapter, Session, SessionStorageAdapter } from './types.js';
2
- /**
3
- * The key every built-in storage adapter defaults to, for both the cookie and
4
- * localStorage. Defined once: it is a contract between the browser half of an
5
- * app and the server half, and a second copy of the literal is how the two
6
- * drift apart. Re-exported from `cookie.ts` and from the package root.
7
- */
8
- export declare const SESSION_COOKIE_KEY = "motherbase.session";
9
- /** In-memory adapter. Safe everywhere (SSR, tests); does not survive reloads. */
10
- export declare function memoryStorage(): SessionStorageAdapter;
11
- /**
12
- * Browser localStorage adapter. Falls back to memory when localStorage is
13
- * unavailable (SSR, private mode), so it never throws on import or use.
14
- */
15
- export declare function localStorageStorage(key?: string): SessionStorageAdapter;
16
- /**
17
- * Wrap a supabase-js style key/value store (localStorage, React Native's
18
- * AsyncStorage, a cookie shim) as a session adapter.
19
- *
20
- * This is what lets `createClient(url, key, { auth: { storage: AsyncStorage } })`
21
- * work verbatim on a ported app. A value that will not parse is treated as no
22
- * session rather than thrown: a corrupt entry must not brick every launch.
23
- */
24
- export declare function keyValueStorage(store: KeyValueStorageAdapter, key?: string): SessionStorageAdapter;
25
- /** Tell the two adapter shapes apart: supabase-js's is a key/value store. */
26
- export declare function isKeyValueStorage(value: KeyValueStorageAdapter | SessionStorageAdapter): value is KeyValueStorageAdapter;
27
- /**
28
- * Holds the live session in memory, mirrors it to a storage adapter, and
29
- * notifies listeners of auth changes. The in-memory copy is the source of truth
30
- * for synchronous reads (e.g. attaching the bearer header).
31
- */
32
- export declare class SessionStore {
33
- private readonly storage;
34
- private current;
35
- private readonly listeners;
36
- private hydrated;
37
- constructor(storage: SessionStorageAdapter);
38
- /** Load the persisted session once. Idempotent. */
39
- hydrate(): Promise<Session | null>;
40
- get(): Session | null;
41
- set(session: Session | null, event: AuthEvent): Promise<void>;
42
- /** Replace only the tokens, keeping the existing user (used after refresh). */
43
- setTokens(accessToken: string, refreshToken: string): Promise<void>;
44
- subscribe(listener: AuthListener): () => void;
45
- private emit;
46
- }
47
- //# sourceMappingURL=session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,OAAO,EACP,qBAAqB,EACtB,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AAEvD,iFAAiF;AACjF,wBAAgB,aAAa,IAAI,qBAAqB,CAQrD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,SAAqB,GAAG,qBAAqB,CAkBnF;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,sBAAsB,EAAE,GAAG,SAAqB,GAAG,qBAAqB,CAgB9G;AAED,6EAA6E;AAC7E,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,GAAG,qBAAqB,GACpD,KAAK,IAAI,sBAAsB,CAEjC;AAED;;;;GAIG;AACH,qBAAa,YAAY;IAKX,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJpC,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2B;IACrD,OAAO,CAAC,QAAQ,CAAS;gBAEI,OAAO,EAAE,qBAAqB;IAE3D,mDAAmD;IAC7C,OAAO,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAoBxC,GAAG,IAAI,OAAO,GAAG,IAAI;IAIf,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnE,+EAA+E;IACzE,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKzE,SAAS,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,IAAI;IAK7C,OAAO,CAAC,IAAI;CAGb"}