@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/postgrest.js DELETED
@@ -1,467 +0,0 @@
1
- import { toError } from './http.js';
2
- import { contractPath } from '@motherbase/contracts';
3
- // ── value encoding ───────────────────────────────────────────────────────────
4
- /**
5
- * Characters that end a token in the PostgREST grammar (or in a Postgres array
6
- * literal). A string value carrying any of them has to be quoted or the server
7
- * reads a different filter than the caller wrote.
8
- */
9
- const NEEDS_QUOTING = /[,.:()"\\{}\s]/;
10
- function quoteLiteral(value) {
11
- return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
12
- }
13
- /** One scalar value: quoted only when it has to be. */
14
- export function encodeLiteral(value) {
15
- if (value === null)
16
- return 'null';
17
- if (typeof value !== 'string')
18
- return String(value);
19
- if (value === '' || NEEDS_QUOTING.test(value))
20
- return quoteLiteral(value);
21
- return value;
22
- }
23
- /** `in.(a,"b,c")` and the `(all)` / `(any)` modifier lists. */
24
- function encodeList(values) {
25
- return `(${values.map(encodeLiteral).join(',')})`;
26
- }
27
- /** A Postgres array literal: `{a,"b,c"}`. Used by `cs`, `cd`, `ov` and the like modifiers. */
28
- function encodeArrayLiteral(values) {
29
- return `{${values.map(encodeLiteral).join(',')}}`;
30
- }
31
- /**
32
- * The operand of `cs` / `cd` / `ov`, which is polymorphic in PostgREST:
33
- * an array column takes `{a,b}`, a range column takes its own literal
34
- * (`[2000-01-01,2000-01-31]`) and a jsonb column takes JSON. A string is passed
35
- * through untouched because it is already one of the last two.
36
- */
37
- function encodeArrayOperand(value) {
38
- if (typeof value === 'string')
39
- return value;
40
- if (Array.isArray(value))
41
- return encodeArrayLiteral(value);
42
- return JSON.stringify(value);
43
- }
44
- /** Values handed to `not()` / `filter()`: strings verbatim, arrays as a list. */
45
- function encodeRawOperand(value) {
46
- if (Array.isArray(value))
47
- return encodeList(value);
48
- if (value === null)
49
- return 'null';
50
- return String(value);
51
- }
52
- function isValueOf(value) {
53
- if (value === null)
54
- return 'null';
55
- if (value === true)
56
- return 'true';
57
- if (value === false)
58
- return 'false';
59
- if (value === 'null' || value === 'true' || value === 'false' || value === 'unknown')
60
- return value;
61
- // Programmer misuse, not an API error: fail loudly rather than emit a filter
62
- // the server will reject with an opaque 400.
63
- throw new TypeError(`is() accepts null, true, false or unknown, received ${JSON.stringify(value)}`);
64
- }
65
- function referenced(options) {
66
- return options?.referencedTable ?? options?.foreignTable ?? '';
67
- }
68
- function scopedKey(prefix, name) {
69
- return prefix ? `${prefix}.${name}` : name;
70
- }
71
- /** `0-9/57` -> 57. An unknown total (a star after the slash) and a missing header both give null. */
72
- function parseContentRange(header) {
73
- if (!header)
74
- return null;
75
- const total = header.split('/')[1];
76
- if (!total || total === '*')
77
- return null;
78
- const parsed = Number(total);
79
- return Number.isFinite(parsed) ? parsed : null;
80
- }
81
- // ── the builder ──────────────────────────────────────────────────────────────
82
- /**
83
- * PostgREST-style, chainable, thenable query builder mapping onto the backend's
84
- * `/rest/v1/:model` query-param dialect. Awaiting it resolves to
85
- * `{ data, error, count }` and never rejects for expected API errors (only for
86
- * programmer misuse).
87
- *
88
- * @internal This is the implementation behind `client.from()`, not a surface to
89
- * construct directly. The public, typed entry point is `client.from(table)`,
90
- * whose return type (`TypedQuery`, from `database.ts`) is what user code should
91
- * name. It is exported only so the type can be referenced where inference needs
92
- * a name for it.
93
- */
94
- export class PostgrestQueryBuilder {
95
- constructor(http, model) {
96
- this.http = http;
97
- this.model = model;
98
- this.method = 'GET';
99
- this.columns = '*';
100
- /**
101
- * Repeated filters on one column must all survive: `?price=gt.10&price=lt.20`
102
- * is two conditions ANDed together, which is why every filter is `append`ed
103
- * and never `set`. Using `set` here (as this builder once did) silently
104
- * dropped the first of the two.
105
- */
106
- this.filters = new URLSearchParams();
107
- /** Reserved params that are replaced rather than repeated (`columns`, `on_conflict`). */
108
- this.extras = new Map();
109
- /** Keyed by referenced table (`''` for the base relation). */
110
- this.orderParts = new Map();
111
- this.limits = new Map();
112
- this.offsets = new Map();
113
- this.prefer = [];
114
- this.responseKind = 'json';
115
- this.headOnly = false;
116
- this.rowMode = 'many';
117
- }
118
- // --- verbs -------------------------------------------------------------
119
- /**
120
- * Choose the columns, and optionally ask for a row count.
121
- *
122
- * After a write, `.select()` is the supabase-js way of asking for the rows
123
- * back, so it also sends `Prefer: return=representation`.
124
- */
125
- select(columns = '*', options = {}) {
126
- this.columns = columns;
127
- if (this.method !== 'GET' && this.method !== 'HEAD')
128
- this.prefer.push('return=representation');
129
- if (options.count)
130
- this.countOption = options.count;
131
- if (options.head) {
132
- this.headOnly = true;
133
- if (this.method === 'GET')
134
- this.method = 'HEAD';
135
- }
136
- return this;
137
- }
138
- insert(values, options = {}) {
139
- this.method = 'POST';
140
- this.body = values;
141
- this.applyColumns(values);
142
- if (options.count)
143
- this.countOption = options.count;
144
- if (options.defaultToNull === false)
145
- this.prefer.push('missing=default');
146
- return this;
147
- }
148
- /**
149
- * `INSERT .. ON CONFLICT DO UPDATE`. The conflict target defaults to the
150
- * primary key server side; `onConflict` names another unique constraint.
151
- */
152
- upsert(values, options = {}) {
153
- this.method = 'POST';
154
- this.body = values;
155
- this.applyColumns(values);
156
- this.prefer.push(`resolution=${options.ignoreDuplicates ? 'ignore' : 'merge'}-duplicates`);
157
- if (options.onConflict !== undefined)
158
- this.extras.set('on_conflict', options.onConflict);
159
- if (options.count)
160
- this.countOption = options.count;
161
- if (options.defaultToNull === false)
162
- this.prefer.push('missing=default');
163
- return this;
164
- }
165
- update(values, options = {}) {
166
- this.method = 'PATCH';
167
- this.body = values;
168
- if (options.count)
169
- this.countOption = options.count;
170
- return this;
171
- }
172
- delete(options = {}) {
173
- this.method = 'DELETE';
174
- if (options.count)
175
- this.countOption = options.count;
176
- return this;
177
- }
178
- /**
179
- * A bulk write states its column set explicitly, so a key missing from one
180
- * row is still written (as NULL, or as the column default under
181
- * `missing=default`) instead of being inferred from the first row alone.
182
- */
183
- applyColumns(values) {
184
- if (!Array.isArray(values))
185
- return;
186
- const seen = new Set();
187
- for (const row of values) {
188
- if (row && typeof row === 'object')
189
- for (const key of Object.keys(row))
190
- seen.add(key);
191
- }
192
- if (seen.size) {
193
- this.extras.set('columns', Array.from(seen, column => `"${column}"`).join(','));
194
- }
195
- }
196
- // --- filters -----------------------------------------------------------
197
- eq(column, value) {
198
- return this.push(column, `eq.${encodeLiteral(value)}`);
199
- }
200
- neq(column, value) {
201
- return this.push(column, `neq.${encodeLiteral(value)}`);
202
- }
203
- gt(column, value) {
204
- return this.push(column, `gt.${encodeLiteral(value)}`);
205
- }
206
- gte(column, value) {
207
- return this.push(column, `gte.${encodeLiteral(value)}`);
208
- }
209
- lt(column, value) {
210
- return this.push(column, `lt.${encodeLiteral(value)}`);
211
- }
212
- lte(column, value) {
213
- return this.push(column, `lte.${encodeLiteral(value)}`);
214
- }
215
- /** Case-sensitive LIKE. `*` is PostgREST's URL-friendly `%`. */
216
- like(column, pattern) {
217
- return this.push(column, `like.${encodeLiteral(pattern)}`);
218
- }
219
- ilike(column, pattern) {
220
- return this.push(column, `ilike.${encodeLiteral(pattern)}`);
221
- }
222
- likeAllOf(column, patterns) {
223
- return this.push(column, `like(all).${encodeArrayLiteral(patterns)}`);
224
- }
225
- likeAnyOf(column, patterns) {
226
- return this.push(column, `like(any).${encodeArrayLiteral(patterns)}`);
227
- }
228
- ilikeAllOf(column, patterns) {
229
- return this.push(column, `ilike(all).${encodeArrayLiteral(patterns)}`);
230
- }
231
- ilikeAnyOf(column, patterns) {
232
- return this.push(column, `ilike(any).${encodeArrayLiteral(patterns)}`);
233
- }
234
- in(column, values) {
235
- return this.push(column, `in.${encodeList(values)}`);
236
- }
237
- is(column, value) {
238
- return this.push(column, `is.${isValueOf(value)}`);
239
- }
240
- /** Every key equal to its value, ANDed together. */
241
- match(query) {
242
- for (const [column, value] of Object.entries(query))
243
- this.eq(column, value);
244
- return this;
245
- }
246
- /**
247
- * Negate any operator: `not('status', 'eq', 'live')` emits
248
- * `status=not.eq.live`. The value is passed through verbatim for a string, so
249
- * composite operands (`not('id', 'in', '(1,2)')`) reach the server as written.
250
- */
251
- not(column, operator, value) {
252
- return this.push(column, `not.${operator}.${encodeRawOperand(value)}`);
253
- }
254
- /**
255
- * The escape hatch: any operator, including the ones with no dedicated method
256
- * (`match`, `imatch`, `isdistinct`) and the modifier forms (`like(any)`).
257
- */
258
- filter(column, operator, value) {
259
- return this.push(column, `${operator}.${encodeRawOperand(value)}`);
260
- }
261
- /**
262
- * A disjunction, written in PostgREST's own syntax and nestable:
263
- * `or('status.eq.live,and(price.gt.10,price.lt.20)')`.
264
- */
265
- or(filters, options = {}) {
266
- return this.push(scopedKey(referenced(options), 'or'), `(${filters})`);
267
- }
268
- /** Full-text search. `type` picks the tsquery parser, `config` the dictionary. */
269
- textSearch(column, query, options = {}) {
270
- const prefix = options.type === 'plain'
271
- ? 'pl'
272
- : options.type === 'phrase'
273
- ? 'ph'
274
- : options.type === 'websearch'
275
- ? 'w'
276
- : '';
277
- const config = options.config === undefined ? '' : `(${options.config})`;
278
- return this.push(column, `${prefix}fts${config}.${encodeLiteral(query)}`);
279
- }
280
- /** `@>`: the column contains the operand (array, range or jsonb). */
281
- contains(column, value) {
282
- return this.push(column, `cs.${encodeArrayOperand(value)}`);
283
- }
284
- /** `<@`: the column is contained by the operand. */
285
- containedBy(column, value) {
286
- return this.push(column, `cd.${encodeArrayOperand(value)}`);
287
- }
288
- /** `&&`: the column and the operand have an element (or a point) in common. */
289
- overlaps(column, value) {
290
- return this.push(column, `ov.${encodeArrayOperand(value)}`);
291
- }
292
- /** `>>`: strictly right of the range. */
293
- rangeGt(column, range) {
294
- return this.push(column, `sr.${range}`);
295
- }
296
- /** `&>`: does not extend to the left of the range. */
297
- rangeGte(column, range) {
298
- return this.push(column, `nxl.${range}`);
299
- }
300
- /** `<<`: strictly left of the range. */
301
- rangeLt(column, range) {
302
- return this.push(column, `sl.${range}`);
303
- }
304
- /** `&<`: does not extend to the right of the range. */
305
- rangeLte(column, range) {
306
- return this.push(column, `nxr.${range}`);
307
- }
308
- /** `-|-`: adjacent to the range. */
309
- rangeAdjacent(column, range) {
310
- return this.push(column, `adj.${range}`);
311
- }
312
- push(key, value) {
313
- this.filters.append(key, value);
314
- return this;
315
- }
316
- // --- modifiers ---------------------------------------------------------
317
- order(column, options = {}) {
318
- const direction = options.ascending === false ? 'desc' : 'asc';
319
- const nulls = options.nullsFirst === undefined ? '' : options.nullsFirst ? '.nullsfirst' : '.nullslast';
320
- const prefix = referenced(options);
321
- const parts = this.orderParts.get(prefix) ?? [];
322
- parts.push(`${column}.${direction}${nulls}`);
323
- this.orderParts.set(prefix, parts);
324
- return this;
325
- }
326
- limit(count, options = {}) {
327
- this.limits.set(referenced(options), count);
328
- return this;
329
- }
330
- /** Inclusive range -> offset/limit. `range(0, 9)` fetches 10 rows from offset 0. */
331
- range(from, to, options = {}) {
332
- const prefix = referenced(options);
333
- this.offsets.set(prefix, from);
334
- this.limits.set(prefix, to - from + 1);
335
- return this;
336
- }
337
- /** Cancel the in-flight request when the signal aborts. */
338
- abortSignal(signal) {
339
- this.signal = signal;
340
- return this;
341
- }
342
- /**
343
- * Re-type the rows. Purely a compile-time cast, for cases the generated
344
- * `Database` cannot express (a computed column, an embedded shape).
345
- */
346
- returns() {
347
- return this;
348
- }
349
- /** Ask for `text/csv` instead of JSON. The result resolves to a string. */
350
- csv() {
351
- this.accept = 'text/csv';
352
- this.responseKind = 'text';
353
- return this;
354
- }
355
- /** Ask the server for the query plan. Admin-only, and off by default. */
356
- explain(options = {}) {
357
- const format = options.format ?? 'text';
358
- const flags = ['analyze', 'verbose', 'settings', 'buffers', 'wal']
359
- .filter(flag => options[flag])
360
- .join('|');
361
- const forMediatype = this.accept ?? 'application/json';
362
- this.accept = `application/vnd.pgrst.plan+${format}; for="${forMediatype}"; options=${flags};`;
363
- this.responseKind = format === 'json' ? 'text-json' : 'text';
364
- return this;
365
- }
366
- single() {
367
- this.rowMode = 'single';
368
- return this;
369
- }
370
- maybeSingle() {
371
- this.rowMode = 'maybeSingle';
372
- return this;
373
- }
374
- // --- execution ---------------------------------------------------------
375
- /** The URL path (with query string) this builder targets. Exposed for tests. */
376
- toPath() {
377
- const params = new URLSearchParams();
378
- if (this.columns && this.columns !== '*')
379
- params.set('select', this.columns);
380
- for (const [key, value] of this.extras)
381
- params.append(key, value);
382
- // `append`, never `set`: two filters on one column are two conditions.
383
- this.filters.forEach((value, key) => params.append(key, value));
384
- for (const [prefix, parts] of this.orderParts) {
385
- if (parts.length)
386
- params.append(scopedKey(prefix, 'order'), parts.join(','));
387
- }
388
- for (const [prefix, value] of this.limits) {
389
- params.append(scopedKey(prefix, 'limit'), String(value));
390
- }
391
- for (const [prefix, value] of this.offsets) {
392
- params.append(scopedKey(prefix, 'offset'), String(value));
393
- }
394
- const query = params.toString();
395
- return `${contractPath.rest(this.model)}${query ? `?${query}` : ''}`;
396
- }
397
- /** The headers this builder sends. Exposed for tests alongside `toPath()`. */
398
- toHeaders() {
399
- const headers = {};
400
- const prefer = [...this.prefer];
401
- if (this.countOption)
402
- prefer.push(`count=${this.countOption}`);
403
- if (prefer.length)
404
- headers['Prefer'] = prefer.join(',');
405
- if (this.accept)
406
- headers['Accept'] = this.accept;
407
- return headers;
408
- }
409
- async execute() {
410
- const path = this.toPath();
411
- const headers = this.toHeaders();
412
- try {
413
- if (this.responseKind !== 'json') {
414
- const res = await this.http.requestRaw(path, {
415
- method: this.method,
416
- body: this.body,
417
- headers,
418
- signal: this.signal,
419
- });
420
- const text = await res.text();
421
- const data = this.responseKind === 'text-json' ? safeJson(text) : text;
422
- return { data, error: null, count: parseContentRange(res.headers.get('content-range')) };
423
- }
424
- const result = await this.http.requestWithHeaders(path, {
425
- method: this.method,
426
- body: this.body,
427
- headers,
428
- signal: this.signal,
429
- });
430
- const count = parseContentRange(result.headers.get('content-range'));
431
- // A HEAD request has no body by definition: the count is the whole answer.
432
- if (this.headOnly)
433
- return { data: null, error: null, count };
434
- const rows = result.data;
435
- const list = Array.isArray(rows) ? rows : rows == null ? [] : [rows];
436
- if (this.rowMode === 'single') {
437
- if (list.length !== 1) {
438
- const error = {
439
- message: 'JSON object requested, multiple (or no) rows returned',
440
- code: 'PGRST116',
441
- };
442
- return { data: null, error, count };
443
- }
444
- return { data: list[0], error: null, count };
445
- }
446
- if (this.rowMode === 'maybeSingle') {
447
- return { data: list.length ? list[0] : null, error: null, count };
448
- }
449
- return { data: list, error: null, count };
450
- }
451
- catch (err) {
452
- return { data: null, error: toError(err), count: null };
453
- }
454
- }
455
- then(onfulfilled, onrejected) {
456
- return this.execute().then(onfulfilled, onrejected);
457
- }
458
- }
459
- function safeJson(text) {
460
- try {
461
- return JSON.parse(text);
462
- }
463
- catch {
464
- return text;
465
- }
466
- }
467
- //# sourceMappingURL=postgrest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"postgrest.js","sourceRoot":"","sources":["../src/postgrest.ts"],"names":[],"mappings":"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"}
package/dist/profile.d.ts DELETED
@@ -1,16 +0,0 @@
1
- import type { HttpClient } from './http.js';
2
- import type { User } from './types.js';
3
- /** A file-ish value accepted by multipart uploads (browser File/Blob or RN asset). */
4
- export type UploadInput = Blob | {
5
- uri: string;
6
- name?: string;
7
- type?: string;
8
- };
9
- export declare class UsersModule {
10
- private readonly http;
11
- constructor(http: HttpClient);
12
- updateUsername(username: string): Promise<User>;
13
- updateImage(file: UploadInput): Promise<User>;
14
- deleteAccount(): Promise<unknown>;
15
- }
16
- //# sourceMappingURL=profile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,sFAAsF;AACtF,MAAM,MAAM,WAAW,GAAG,IAAI,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAW/E,qBAAa,WAAW;IACV,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,UAAU;IAE7C,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAM7C,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;CAGlC"}
package/dist/profile.js DELETED
@@ -1,26 +0,0 @@
1
- function appendFile(form, field, file) {
2
- if (typeof Blob !== 'undefined' && file instanceof Blob) {
3
- form.append(field, file);
4
- }
5
- else {
6
- // React Native style { uri, name, type }
7
- form.append(field, file);
8
- }
9
- }
10
- export class UsersModule {
11
- constructor(http) {
12
- this.http = http;
13
- }
14
- updateUsername(username) {
15
- return this.http.request('/api/users/username', { method: 'PUT', body: { username } });
16
- }
17
- updateImage(file) {
18
- const form = new FormData();
19
- appendFile(form, 'image', file);
20
- return this.http.request('/api/users/image', { method: 'PUT', form });
21
- }
22
- deleteAccount() {
23
- return this.http.request('/api/users/', { method: 'DELETE' });
24
- }
25
- }
26
- //# sourceMappingURL=profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAMA,SAAS,UAAU,CAAC,IAAc,EAAE,KAAa,EAAE,IAAiB;IAClE,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QACxD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,yCAAyC;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAuB,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAED,MAAM,OAAO,WAAW;IACtB,YAA6B,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAG,CAAC;IAEjD,cAAc,CAAC,QAAgB;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAO,qBAAqB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,WAAW,CAAC,IAAiB;QAC3B,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAO,kBAAkB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;CACF"}
@@ -1,114 +0,0 @@
1
- import type { SessionStore } from './session.js';
2
- import { type RealtimeJoinAck, type RealtimeJoinConfig, type RealtimeTopicEnvelope, type RealtimeTopicMessageType } from '@motherbase/contracts';
3
- export type RealtimeStatus = 'idle' | 'connecting' | 'connected' | 'reconnecting' | 'polling' | 'disconnected' | 'error';
4
- export type RealtimeStatusListener = (status: RealtimeStatus, detail?: unknown) => void;
5
- export interface RealtimeConnectOptions {
6
- timeoutMs?: number;
7
- fallbackPolling?: boolean;
8
- }
9
- export interface RealtimeWatchOptions {
10
- intervalMs?: number;
11
- query?: string;
12
- polling?: boolean;
13
- }
14
- /** Events received are pre-filtered by server-side REST policies for the current session. */
15
- export type RealtimeWatchEvent<T> = {
16
- type: 'created' | 'updated' | 'deleted';
17
- source: 'socket';
18
- payload: T;
19
- } | {
20
- type: 'snapshot';
21
- source: 'polling';
22
- rows: T[];
23
- };
24
- /** Minimal shape we rely on from socket.io-client's Socket. */
25
- export interface SocketLike {
26
- on(event: string, cb: (...args: unknown[]) => void): void;
27
- off(event: string, cb?: (...args: unknown[]) => void): void;
28
- emit(event: string, ...args: unknown[]): void;
29
- disconnect(): void;
30
- connected: boolean;
31
- }
32
- export type IoFactory = (url: string, opts: Record<string, unknown>) => SocketLike;
33
- /** What RealtimeModule needs from a RealtimeChannel (avoids a circular import). */
34
- export interface ChannelHandle {
35
- _receive(envelope: RealtimeTopicEnvelope): void;
36
- /** Called after a reconnect replayed (or failed to replay) this topic's join. */
37
- _rejoined?(ok: boolean): void;
38
- }
39
- /**
40
- * Lazy wrapper over socket.io-client. The dependency is optional: it is only
41
- * imported when `connect()` is called, so apps that never use realtime do not
42
- * need to install it.
43
- */
44
- export declare class RealtimeModule {
45
- private readonly baseUrl;
46
- private readonly store;
47
- private readonly fetchImpl;
48
- /** Inject a socket factory (tests / custom transports). Falls back to socket.io-client. */
49
- private readonly ioFactory?;
50
- private socket;
51
- private status;
52
- private readonly statusListeners;
53
- private readonly pollers;
54
- private readonly tableSubscriptionRefs;
55
- private pollerSeq;
56
- private readonly channelsByTopic;
57
- /** Topics joined on the current socket, replayed as-is after a reconnect. */
58
- private readonly joinedTopics;
59
- private topicRouterBound;
60
- constructor(baseUrl: string, store: SessionStore, fetchImpl?: typeof fetch,
61
- /** Inject a socket factory (tests / custom transports). Falls back to socket.io-client. */
62
- ioFactory?: IoFactory | undefined);
63
- /** True once a socket is connected. */
64
- get connected(): boolean;
65
- getStatus(): RealtimeStatus;
66
- onStatusChange(listener: RealtimeStatusListener): () => void;
67
- connect(options?: RealtimeConnectOptions): Promise<void>;
68
- on(event: string, cb: (...args: unknown[]) => void): void;
69
- off(event: string, cb?: (...args: unknown[]) => void): void;
70
- emit(event: string, ...args: unknown[]): void;
71
- /**
72
- * @deprecated Legacy low-level table watcher. Prefer the Supabase-shaped
73
- * `client.channel(topic).on('postgres_changes', { event, schema, table, filter }, cb)`.
74
- * Kept for backwards compatibility; scheduled for removal.
75
- *
76
- * Subscribe to create/update/delete events for a model table.
77
- *
78
- * Events are filtered server-side: you will only receive events for rows
79
- * your session is authorized to see (based on REST API SELECT policies).
80
- * Anonymous sessions receive only public rows; authenticated sessions receive
81
- * rows matching their access policies (e.g. owner-only rows they own).
82
- *
83
- * Falls back to polling the REST endpoint at subscribe time if the WebSocket
84
- * is not yet connected (polling does not auto-start on later disconnects).
85
- */
86
- watchTable<T>(model: string, cb: (event: RealtimeWatchEvent<T>) => void, options?: RealtimeWatchOptions): () => void;
87
- disconnect(): void;
88
- /** Register a channel so incoming rt:msg envelopes for its topic are routed to it. */
89
- registerChannel(topic: string, channel: ChannelHandle): void;
90
- unregisterChannel(topic: string): void;
91
- /** Emit rt:join and resolve the server ack (or a timeout/error ack). */
92
- joinTopic(topic: string, config: RealtimeJoinConfig, timeoutMs?: number): Promise<RealtimeJoinAck>;
93
- leaveTopic(topic: string): void;
94
- sendTopic(topic: string, type: RealtimeTopicMessageType, event: string, payload: unknown): void;
95
- /** Emit an rt:msg and wait for the server ack (or resolve 'timed out'/'error'). */
96
- sendTopicWithAck(topic: string, type: RealtimeTopicMessageType, event: string, payload: unknown, timeoutMs?: number): Promise<'ok' | 'timed out' | 'error'>;
97
- private bindTopicRouter;
98
- private retainTableSubscription;
99
- private releaseTableSubscription;
100
- private resubscribeTables;
101
- /**
102
- * Replay every joined topic on a fresh socket. The server keeps topic state on
103
- * the socket, so without this a reconnected channel still reports SUBSCRIBED
104
- * and receives nothing at all.
105
- */
106
- private rejoinTopics;
107
- private bindSocketStatus;
108
- private waitForConnect;
109
- private startPolling;
110
- private stopPolling;
111
- private fetchRows;
112
- private setStatus;
113
- }
114
- //# sourceMappingURL=realtime.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../src/realtime.ts"],"names":[],"mappings":"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"}