@somewhere-cloud/sdk 0.0.0-stage → 0.13.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 (149) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +191 -2
  3. package/dist/cjs/auth/client.js +1059 -0
  4. package/dist/cjs/auth/client.js.map +1 -0
  5. package/dist/cjs/auth/continuation.js +27 -0
  6. package/dist/cjs/auth/continuation.js.map +1 -0
  7. package/dist/cjs/auth/index.js +21 -0
  8. package/dist/cjs/auth/index.js.map +1 -0
  9. package/dist/cjs/auth/react.js +295 -0
  10. package/dist/cjs/auth/react.js.map +1 -0
  11. package/dist/cjs/auth/server.js +368 -0
  12. package/dist/cjs/auth/server.js.map +1 -0
  13. package/dist/cjs/client.js +392 -0
  14. package/dist/cjs/client.js.map +1 -0
  15. package/dist/cjs/errors.js +16 -0
  16. package/dist/cjs/errors.js.map +1 -0
  17. package/dist/cjs/index.cjs +215 -0
  18. package/dist/cjs/index.js.map +1 -0
  19. package/dist/cjs/package.json +1 -0
  20. package/dist/cjs/query-cache.js +91 -0
  21. package/dist/cjs/query-cache.js.map +1 -0
  22. package/dist/cjs/resources/auth.js +875 -0
  23. package/dist/cjs/resources/auth.js.map +1 -0
  24. package/dist/cjs/resources/calls.js +42 -0
  25. package/dist/cjs/resources/calls.js.map +1 -0
  26. package/dist/cjs/resources/chat.js +82 -0
  27. package/dist/cjs/resources/chat.js.map +1 -0
  28. package/dist/cjs/resources/db.js +124 -0
  29. package/dist/cjs/resources/db.js.map +1 -0
  30. package/dist/cjs/resources/emails.js +39 -0
  31. package/dist/cjs/resources/emails.js.map +1 -0
  32. package/dist/cjs/resources/fs.js +141 -0
  33. package/dist/cjs/resources/fs.js.map +1 -0
  34. package/dist/cjs/resources/functions.js +145 -0
  35. package/dist/cjs/resources/functions.js.map +1 -0
  36. package/dist/cjs/resources/inbox.js +76 -0
  37. package/dist/cjs/resources/inbox.js.map +1 -0
  38. package/dist/cjs/resources/payments.js +68 -0
  39. package/dist/cjs/resources/payments.js.map +1 -0
  40. package/dist/cjs/resources/postgrest.js +391 -0
  41. package/dist/cjs/resources/postgrest.js.map +1 -0
  42. package/dist/cjs/resources/projects.js +71 -0
  43. package/dist/cjs/resources/projects.js.map +1 -0
  44. package/dist/cjs/resources/storage.js +191 -0
  45. package/dist/cjs/resources/storage.js.map +1 -0
  46. package/dist/cjs/resources/tasks.js +99 -0
  47. package/dist/cjs/resources/tasks.js.map +1 -0
  48. package/dist/cjs/resources/video.js +50 -0
  49. package/dist/cjs/resources/video.js.map +1 -0
  50. package/dist/cjs/types.js +3 -0
  51. package/dist/cjs/types.js.map +1 -0
  52. package/dist/esm/auth/client.js +1054 -0
  53. package/dist/esm/auth/client.js.map +1 -0
  54. package/dist/esm/auth/continuation.js +22 -0
  55. package/dist/esm/auth/continuation.js.map +1 -0
  56. package/dist/esm/auth/index.js +5 -0
  57. package/dist/esm/auth/index.js.map +1 -0
  58. package/dist/esm/auth/react.js +279 -0
  59. package/dist/esm/auth/react.js.map +1 -0
  60. package/dist/esm/auth/server.js +365 -0
  61. package/dist/esm/auth/server.js.map +1 -0
  62. package/dist/esm/client.js +388 -0
  63. package/dist/esm/client.js.map +1 -0
  64. package/dist/esm/errors.js +12 -0
  65. package/dist/esm/errors.js.map +1 -0
  66. package/dist/esm/index.js +188 -0
  67. package/dist/esm/index.js.map +1 -0
  68. package/dist/esm/package.json +1 -0
  69. package/dist/esm/query-cache.js +87 -0
  70. package/dist/esm/query-cache.js.map +1 -0
  71. package/dist/esm/resources/auth.js +871 -0
  72. package/dist/esm/resources/auth.js.map +1 -0
  73. package/dist/esm/resources/calls.js +38 -0
  74. package/dist/esm/resources/calls.js.map +1 -0
  75. package/dist/esm/resources/chat.js +77 -0
  76. package/dist/esm/resources/chat.js.map +1 -0
  77. package/dist/esm/resources/db.js +120 -0
  78. package/dist/esm/resources/db.js.map +1 -0
  79. package/dist/esm/resources/emails.js +35 -0
  80. package/dist/esm/resources/emails.js.map +1 -0
  81. package/dist/esm/resources/fs.js +137 -0
  82. package/dist/esm/resources/fs.js.map +1 -0
  83. package/dist/esm/resources/functions.js +141 -0
  84. package/dist/esm/resources/functions.js.map +1 -0
  85. package/dist/esm/resources/inbox.js +70 -0
  86. package/dist/esm/resources/inbox.js.map +1 -0
  87. package/dist/esm/resources/payments.js +64 -0
  88. package/dist/esm/resources/payments.js.map +1 -0
  89. package/dist/esm/resources/postgrest.js +386 -0
  90. package/dist/esm/resources/postgrest.js.map +1 -0
  91. package/dist/esm/resources/projects.js +67 -0
  92. package/dist/esm/resources/projects.js.map +1 -0
  93. package/dist/esm/resources/storage.js +186 -0
  94. package/dist/esm/resources/storage.js.map +1 -0
  95. package/dist/esm/resources/tasks.js +95 -0
  96. package/dist/esm/resources/tasks.js.map +1 -0
  97. package/dist/esm/resources/video.js +46 -0
  98. package/dist/esm/resources/video.js.map +1 -0
  99. package/dist/esm/types.js +2 -0
  100. package/dist/esm/types.js.map +1 -0
  101. package/dist/types/auth/client.d.ts +272 -0
  102. package/dist/types/auth/client.d.ts.map +1 -0
  103. package/dist/types/auth/continuation.d.ts +10 -0
  104. package/dist/types/auth/continuation.d.ts.map +1 -0
  105. package/dist/types/auth/index.d.ts +2 -0
  106. package/dist/types/auth/index.d.ts.map +1 -0
  107. package/dist/types/auth/react.d.ts +140 -0
  108. package/dist/types/auth/react.d.ts.map +1 -0
  109. package/dist/types/auth/server.d.ts +124 -0
  110. package/dist/types/auth/server.d.ts.map +1 -0
  111. package/dist/types/client.d.ts +128 -0
  112. package/dist/types/client.d.ts.map +1 -0
  113. package/dist/types/errors.d.ts +17 -0
  114. package/dist/types/errors.d.ts.map +1 -0
  115. package/dist/types/index.d.ts +145 -0
  116. package/dist/types/index.d.ts.map +1 -0
  117. package/dist/types/query-cache.d.ts +59 -0
  118. package/dist/types/query-cache.d.ts.map +1 -0
  119. package/dist/types/resources/auth.d.ts +188 -0
  120. package/dist/types/resources/auth.d.ts.map +1 -0
  121. package/dist/types/resources/calls.d.ts +27 -0
  122. package/dist/types/resources/calls.d.ts.map +1 -0
  123. package/dist/types/resources/chat.d.ts +24 -0
  124. package/dist/types/resources/chat.d.ts.map +1 -0
  125. package/dist/types/resources/db.d.ts +81 -0
  126. package/dist/types/resources/db.d.ts.map +1 -0
  127. package/dist/types/resources/emails.d.ts +20 -0
  128. package/dist/types/resources/emails.d.ts.map +1 -0
  129. package/dist/types/resources/fs.d.ts +68 -0
  130. package/dist/types/resources/fs.d.ts.map +1 -0
  131. package/dist/types/resources/functions.d.ts +30 -0
  132. package/dist/types/resources/functions.d.ts.map +1 -0
  133. package/dist/types/resources/inbox.d.ts +52 -0
  134. package/dist/types/resources/inbox.d.ts.map +1 -0
  135. package/dist/types/resources/payments.d.ts +31 -0
  136. package/dist/types/resources/payments.d.ts.map +1 -0
  137. package/dist/types/resources/postgrest.d.ts +121 -0
  138. package/dist/types/resources/postgrest.d.ts.map +1 -0
  139. package/dist/types/resources/projects.d.ts +79 -0
  140. package/dist/types/resources/projects.d.ts.map +1 -0
  141. package/dist/types/resources/storage.d.ts +63 -0
  142. package/dist/types/resources/storage.d.ts.map +1 -0
  143. package/dist/types/resources/tasks.d.ts +87 -0
  144. package/dist/types/resources/tasks.d.ts.map +1 -0
  145. package/dist/types/resources/video.d.ts +30 -0
  146. package/dist/types/resources/video.d.ts.map +1 -0
  147. package/dist/types/types.d.ts +379 -0
  148. package/dist/types/types.d.ts.map +1 -0
  149. package/package.json +86 -4
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Client = void 0;
4
+ const errors_js_1 = require("./errors.js");
5
+ const query_cache_js_1 = require("./query-cache.js");
6
+ const DEFAULT_BASE_URL = 'https://api.somewhere.cloud/v1';
7
+ function isBinaryBody(body) {
8
+ if (typeof FormData !== 'undefined' && body instanceof FormData)
9
+ return true;
10
+ if (typeof Blob !== 'undefined' && body instanceof Blob)
11
+ return true;
12
+ if (typeof ArrayBuffer !== 'undefined' && body instanceof ArrayBuffer)
13
+ return true;
14
+ if (ArrayBuffer.isView(body))
15
+ return true;
16
+ if (typeof ReadableStream !== 'undefined' && body instanceof ReadableStream)
17
+ return true;
18
+ return false;
19
+ }
20
+ /**
21
+ * Internal HTTP client. Not exported from the SDK surface — the
22
+ * `Somewhere` facade owns a single Client instance and passes it to
23
+ * every resource. Handles auth mode resolution, envelope unwrapping,
24
+ * typed error materialization, binary round-trips, and the `safeCall`
25
+ * helper that converts `call` into a `Result<T>` envelope for the
26
+ * result-envelope surfaces.
27
+ */
28
+ class Client {
29
+ constructor(opts) {
30
+ /**
31
+ * Set by `auth.signInWithPassword` / `auth.signUp` on success.
32
+ * Cleared by `auth.signOut`. Used by `dual` and `session` auth modes;
33
+ * NEVER overrides `developer` mode (developer-only endpoints always
34
+ * use the initial `smt_` key — the server rejects JWTs on them).
35
+ */
36
+ this.sessionAuthHeader = null;
37
+ /** Surfaces already warned about. Direct browser database and file API calls are disabled;
38
+ * each surface warns once. */
39
+ this.browserDataWarnings = new Set();
40
+ if (opts.key && opts.token) {
41
+ throw new Error('Somewhere: pass `key` OR `token`, not both.');
42
+ }
43
+ this.baseUrl = (opts.baseUrl ?? DEFAULT_BASE_URL).replace(/\/$/, '');
44
+ this.authMode =
45
+ opts.authMode ?? (typeof document !== 'undefined' ? 'cookie' : 'header');
46
+ if (!opts.key && !opts.token && this.authMode !== 'cookie') {
47
+ throw new Error('Somewhere: bearer mode requires either `key` (smt_...) or `token` (app-user JWT).');
48
+ }
49
+ this.authPath = (opts.authPath ?? '/api/auth').replace(/\/$/, '');
50
+ this.functionsUrl = opts.functionsUrl
51
+ ? opts.functionsUrl.replace(/\/$/, '').replace(/\/v1$/, '')
52
+ : undefined;
53
+ this.defaultProjectId = opts.projectId;
54
+ const initialCredential = opts.key ?? opts.token;
55
+ this.initialAuthHeader = initialCredential ? `Bearer ${initialCredential}` : null;
56
+ this.initialAuthKind = opts.key ? 'key' : opts.token ? 'token' : 'none';
57
+ this.extraHeaders = opts.headers ?? {};
58
+ const f = opts.fetch ?? globalThis.fetch;
59
+ if (!f) {
60
+ throw new Error('Somewhere: no fetch implementation found. Pass `fetch` explicitly.');
61
+ }
62
+ this.fetchImpl = f;
63
+ const cacheOpt = opts.cache;
64
+ this.cache =
65
+ cacheOpt === false
66
+ ? null
67
+ : new query_cache_js_1.QueryCache(cacheOpt === true || cacheOpt === undefined ? {} : cacheOpt);
68
+ }
69
+ /**
70
+ * Drop cached `from().select()` reads for a table. Invoked automatically
71
+ * after a write to the table (read-your-own-writes); also the public seam
72
+ * for event-driven invalidation. No-op when the cache is disabled.
73
+ */
74
+ invalidateTable(table) {
75
+ this.cache?.invalidate(table);
76
+ }
77
+ /** True when the client was constructed with a developer `smt_` key. */
78
+ get hasDeveloperKey() {
79
+ return this.initialAuthKind === 'key';
80
+ }
81
+ /** True when a user session is currently active. */
82
+ get hasSession() {
83
+ return this.sessionAuthHeader !== null;
84
+ }
85
+ resolveProjectId(explicit) {
86
+ return explicit ?? this.defaultProjectId;
87
+ }
88
+ requireProjectId(explicit, what = 'this call') {
89
+ const pid = this.resolveProjectId(explicit);
90
+ if (!pid) {
91
+ throw new Error(`Somewhere: ${what} requires a projectId (pass one in the constructor).`);
92
+ }
93
+ return pid;
94
+ }
95
+ setSessionToken(accessToken) {
96
+ const header = `Bearer ${accessToken}`;
97
+ if (header !== this.sessionAuthHeader)
98
+ this.cache?.clear();
99
+ this.sessionAuthHeader = header;
100
+ }
101
+ clearSession() {
102
+ this.cache?.clear();
103
+ this.sessionAuthHeader = null;
104
+ }
105
+ /**
106
+ * The `Authorization` value a project-function call should carry: the
107
+ * active user session if signed in, else the construction key/token.
108
+ * Same precedence as `dual` mode.
109
+ */
110
+ get sessionOrInitialBearer() {
111
+ const header = this.sessionAuthHeader ?? this.initialAuthHeader;
112
+ if (!header) {
113
+ throw new errors_js_1.SomewhereError({
114
+ code: 'BROWSER_SERVER_FUNCTION_REQUIRED',
115
+ message: 'This browser cookie client has no bearer credential. Call a same-origin server function ' +
116
+ 'with `functions.invoke`; use sw.auth.fromRequest and sw.* inside that function.',
117
+ statusCode: 400,
118
+ retry: false,
119
+ retryAfterMs: null,
120
+ });
121
+ }
122
+ return header;
123
+ }
124
+ /** Low-level fetch passthrough for absolute URLs (project function hosts). */
125
+ rawFetch(url, init) {
126
+ return this.fetchImpl(url, init);
127
+ }
128
+ authHeader(mode = 'dual') {
129
+ if (mode === 'developer') {
130
+ if (this.initialAuthKind !== 'key') {
131
+ throw new errors_js_1.SomewhereError({
132
+ code: 'INVALID_API_KEY',
133
+ message: 'This call requires a developer `smt_` API key. ' +
134
+ 'Create the client with `{ key: "smt_..." }` (server-side only).',
135
+ statusCode: 401,
136
+ retry: false,
137
+ retryAfterMs: null,
138
+ });
139
+ }
140
+ return this.initialAuthHeader;
141
+ }
142
+ if (mode === 'session') {
143
+ if (!this.sessionAuthHeader) {
144
+ throw new errors_js_1.SomewhereError({
145
+ code: 'AUTH_INVALID_CREDS',
146
+ message: 'This call requires an active user session. Sign in with ' +
147
+ '`sw.auth.signInWithPassword({ email, password })` first.',
148
+ statusCode: 401,
149
+ retry: false,
150
+ retryAfterMs: null,
151
+ });
152
+ }
153
+ return this.sessionAuthHeader;
154
+ }
155
+ // dual
156
+ const header = this.sessionAuthHeader ?? this.initialAuthHeader;
157
+ if (!header) {
158
+ throw new errors_js_1.SomewhereError({
159
+ code: 'BROWSER_SERVER_FUNCTION_REQUIRED',
160
+ message: 'This browser cookie client has no bearer credential. Move the operation into a ' +
161
+ 'same-origin server function and call it with `functions.invoke`.',
162
+ statusCode: 400,
163
+ retry: false,
164
+ retryAfterMs: null,
165
+ });
166
+ }
167
+ return header;
168
+ }
169
+ /** JSON request → JSON response. Unwraps `{ok, data}` → `data`, throws on error. */
170
+ async call(method, path, opts = {}) {
171
+ if (opts.sessionBearer !== undefined && opts.auth !== 'session') {
172
+ throw new Error('A per-request session bearer requires session auth.');
173
+ }
174
+ this.warnOnDirectBrowserDataAccess(path);
175
+ const url = this.buildUrl(path, opts.query);
176
+ const headers = {
177
+ Authorization: opts.sessionBearer === undefined ? this.authHeader(opts.auth ?? 'dual') : `Bearer ${opts.sessionBearer}`,
178
+ Accept: 'application/json',
179
+ ...this.extraHeaders,
180
+ };
181
+ let body;
182
+ if (opts.body !== undefined) {
183
+ if (isBinaryBody(opts.body)) {
184
+ body = opts.body;
185
+ }
186
+ else {
187
+ headers['Content-Type'] = 'application/json';
188
+ body = JSON.stringify(opts.body);
189
+ }
190
+ }
191
+ let res;
192
+ try {
193
+ res = await this.fetchImpl(url, { method, headers, body, ...(opts.signal ? { signal: opts.signal } : {}) });
194
+ }
195
+ catch (err) {
196
+ throw new errors_js_1.SomewhereError({
197
+ code: 'NETWORK_ERROR',
198
+ message: err instanceof Error ? err.message : 'Network error reaching the platform.',
199
+ statusCode: 0,
200
+ retry: true,
201
+ retryAfterMs: null,
202
+ });
203
+ }
204
+ const parsed = await this.parseJson(res);
205
+ return this.unwrap(parsed, res.status);
206
+ }
207
+ /**
208
+ * Same as `call` but never throws — always returns a `Result<T>`.
209
+ * Used by result-envelope surfaces where the caller branches
210
+ * on `.error` instead of catching.
211
+ */
212
+ async safeCall(method, path, opts = {}) {
213
+ try {
214
+ const data = await this.call(method, path, opts);
215
+ return { data, error: null, status: 200 };
216
+ }
217
+ catch (err) {
218
+ if (err instanceof errors_js_1.SomewhereError) {
219
+ return { data: null, error: err, status: err.statusCode };
220
+ }
221
+ throw err;
222
+ }
223
+ }
224
+ /** Raw binary download. */
225
+ async getBytes(path, query, auth = 'dual') {
226
+ this.warnOnDirectBrowserDataAccess(path);
227
+ const url = this.buildUrl(path, query);
228
+ let res;
229
+ try {
230
+ res = await this.fetchImpl(url, {
231
+ method: 'GET',
232
+ headers: { Authorization: this.authHeader(auth), ...this.extraHeaders },
233
+ });
234
+ }
235
+ catch (err) {
236
+ throw new errors_js_1.SomewhereError({
237
+ code: 'NETWORK_ERROR',
238
+ message: err instanceof Error ? err.message : 'Network error reaching the platform.',
239
+ statusCode: 0,
240
+ retry: true,
241
+ retryAfterMs: null,
242
+ });
243
+ }
244
+ if (!res.ok) {
245
+ const parsed = await this.parseJson(res).catch(() => null);
246
+ throw this.toError(parsed, res.status);
247
+ }
248
+ return {
249
+ body: await res.arrayBuffer(),
250
+ contentType: res.headers.get('content-type') ?? 'application/octet-stream',
251
+ };
252
+ }
253
+ /** Raw binary upload. */
254
+ async putBytes(path, body, contentType, auth = 'dual') {
255
+ this.warnOnDirectBrowserDataAccess(path);
256
+ const url = this.buildUrl(path);
257
+ let res;
258
+ try {
259
+ res = await this.fetchImpl(url, {
260
+ method: 'PUT',
261
+ headers: {
262
+ Authorization: this.authHeader(auth),
263
+ 'Content-Type': contentType,
264
+ Accept: 'application/json',
265
+ ...this.extraHeaders,
266
+ },
267
+ body,
268
+ });
269
+ }
270
+ catch (err) {
271
+ throw new errors_js_1.SomewhereError({
272
+ code: 'NETWORK_ERROR',
273
+ message: err instanceof Error ? err.message : 'Network error reaching the platform.',
274
+ statusCode: 0,
275
+ retry: true,
276
+ retryAfterMs: null,
277
+ });
278
+ }
279
+ const parsed = await this.parseJson(res);
280
+ return this.unwrap(parsed, res.status);
281
+ }
282
+ /**
283
+ * Direct browser calls to the platform's database and file APIs are
284
+ * disabled; browser code uses declared data/file collections or a server
285
+ * function. This one-time warning says so. It does not block or alter the
286
+ * request: the server decides, and the caller gets that answer as a normal
287
+ * Result. Server-side use of these APIs is unaffected.
288
+ */
289
+ warnOnDirectBrowserDataAccess(path) {
290
+ if (typeof document === 'undefined')
291
+ return;
292
+ const surface = path === '/db' || path.startsWith('/db/')
293
+ ? 'database'
294
+ : path === '/fs' || path.startsWith('/fs/') || path === '/storage' || path.startsWith('/storage/')
295
+ ? 'files'
296
+ : null;
297
+ if (!surface || this.browserDataWarnings.has(surface))
298
+ return;
299
+ this.browserDataWarnings.add(surface);
300
+ globalThis.console?.warn?.(surface === 'database'
301
+ ? '[@somewhere-cloud/sdk] Direct browser database API calls are disabled. ' +
302
+ 'Use the generated somewhere:data client for operations allowed by your declared data rules, ' +
303
+ 'or call a server function that uses sw.db.'
304
+ : '[@somewhere-cloud/sdk] Direct browser file API calls are disabled. ' +
305
+ 'Use a declared somewhere:files collection, or call a server function that uses sw.fs.');
306
+ }
307
+ buildUrl(path, query) {
308
+ const suffix = path.startsWith('/') ? path : `/${path}`;
309
+ const base = `${this.baseUrl}${suffix}`;
310
+ if (!query)
311
+ return base;
312
+ const params = new URLSearchParams();
313
+ for (const [k, v] of Object.entries(query)) {
314
+ if (v === undefined || v === null)
315
+ continue;
316
+ params.append(k, String(v));
317
+ }
318
+ const qs = params.toString();
319
+ return qs ? `${base}?${qs}` : base;
320
+ }
321
+ async parseJson(res) {
322
+ const text = await res.text();
323
+ if (!text)
324
+ return null;
325
+ try {
326
+ return JSON.parse(text);
327
+ }
328
+ catch {
329
+ // Non-JSON body (typically an HTML error page from a 5xx upstream
330
+ // or a CF-level block). Turn it into a typed error rather than
331
+ // letting the raw JSON.parse fault bubble up.
332
+ if (res.ok) {
333
+ throw new errors_js_1.SomewhereError({
334
+ code: 'INVALID_RESPONSE',
335
+ message: `The platform returned a non-JSON response (HTTP ${res.status}), so the operation's result could not be confirmed. ` +
336
+ 'Inspect the resulting state before repeating a write.',
337
+ statusCode: res.status,
338
+ retry: false,
339
+ retryAfterMs: null,
340
+ });
341
+ }
342
+ throw new errors_js_1.SomewhereError({
343
+ code: 'INVALID_RESPONSE',
344
+ message: `Non-JSON response (status ${res.status}): ${text.slice(0, 200)}`,
345
+ statusCode: res.status,
346
+ retry: res.status >= 500,
347
+ retryAfterMs: null,
348
+ });
349
+ }
350
+ }
351
+ unwrap(parsed, statusCode) {
352
+ // Empty-body success (204 No Content, or a proxy returning an empty
353
+ // body with a 200). Treat as `{data: null}` instead of throwing.
354
+ if (parsed === null && statusCode >= 200 && statusCode < 300) {
355
+ return null;
356
+ }
357
+ if (parsed && typeof parsed === 'object' && 'ok' in parsed) {
358
+ const envelope = parsed;
359
+ if (envelope.ok === true) {
360
+ return envelope.data;
361
+ }
362
+ }
363
+ throw this.toError(parsed, statusCode);
364
+ }
365
+ toError(parsed, statusCode) {
366
+ if (parsed &&
367
+ typeof parsed === 'object' &&
368
+ 'ok' in parsed &&
369
+ parsed.ok === false) {
370
+ const body = parsed;
371
+ const retryAfterMs = typeof body.retry_after_ms === 'number' ? body.retry_after_ms : null;
372
+ return new errors_js_1.SomewhereError({
373
+ code: body.error ?? 'UNKNOWN_ERROR',
374
+ message: body.message ?? 'Unknown error',
375
+ statusCode,
376
+ retry: body.retry === true,
377
+ retryAfterMs,
378
+ body,
379
+ });
380
+ }
381
+ return new errors_js_1.SomewhereError({
382
+ code: 'INVALID_RESPONSE',
383
+ message: `Unexpected response shape (status ${statusCode})`,
384
+ statusCode,
385
+ retry: statusCode >= 500,
386
+ retryAfterMs: null,
387
+ body: parsed,
388
+ });
389
+ }
390
+ }
391
+ exports.Client = Client;
392
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SomewhereError = void 0;
4
+ class SomewhereError extends Error {
5
+ constructor(init) {
6
+ super(init.message);
7
+ this.name = 'SomewhereError';
8
+ this.code = init.code;
9
+ this.statusCode = init.statusCode;
10
+ this.retry = init.retry;
11
+ this.retryAfterMs = init.retryAfterMs;
12
+ this.body = init.body;
13
+ }
14
+ }
15
+ exports.SomewhereError = SomewhereError;
16
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":";;;AASA,MAAa,cAAe,SAAQ,KAAK;IAOvC,YAAY,IAAwB;QAClC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;CACF;AAhBD,wCAgBC"}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Somewhere = exports.ProjectsClient = exports.TasksClient = exports.CallsClient = exports.InboxMessagesClient = exports.InboxAddressesClient = exports.InboxClient = exports.VideoClient = exports.PaymentsClient = exports.ChatCompletionsClient = exports.ChatClient = exports.FunctionsClient = exports.FsClient = exports.EmailsClient = exports.DbClient = exports.AuthClient = exports.StorageFileApi = exports.StorageClient = exports.QueryCache = exports.SomewhereQueryBuilder = exports.PostgrestFilterBuilder = exports.SomewhereError = void 0;
4
+ exports.projectIdFromUrl = projectIdFromUrl;
5
+ exports.createClient = createClient;
6
+ const client_js_1 = require("./client.js");
7
+ const auth_js_1 = require("./resources/auth.js");
8
+ const calls_js_1 = require("./resources/calls.js");
9
+ const chat_js_1 = require("./resources/chat.js");
10
+ const db_js_1 = require("./resources/db.js");
11
+ const emails_js_1 = require("./resources/emails.js");
12
+ const fs_js_1 = require("./resources/fs.js");
13
+ const functions_js_1 = require("./resources/functions.js");
14
+ const inbox_js_1 = require("./resources/inbox.js");
15
+ const payments_js_1 = require("./resources/payments.js");
16
+ const postgrest_js_1 = require("./resources/postgrest.js");
17
+ const storage_js_1 = require("./resources/storage.js");
18
+ const tasks_js_1 = require("./resources/tasks.js");
19
+ const projects_js_1 = require("./resources/projects.js");
20
+ const video_js_1 = require("./resources/video.js");
21
+ var errors_js_1 = require("./errors.js");
22
+ Object.defineProperty(exports, "SomewhereError", { enumerable: true, get: function () { return errors_js_1.SomewhereError; } });
23
+ var postgrest_js_2 = require("./resources/postgrest.js");
24
+ Object.defineProperty(exports, "PostgrestFilterBuilder", { enumerable: true, get: function () { return postgrest_js_2.PostgrestFilterBuilder; } });
25
+ Object.defineProperty(exports, "SomewhereQueryBuilder", { enumerable: true, get: function () { return postgrest_js_2.SomewhereQueryBuilder; } });
26
+ var query_cache_js_1 = require("./query-cache.js");
27
+ Object.defineProperty(exports, "QueryCache", { enumerable: true, get: function () { return query_cache_js_1.QueryCache; } });
28
+ var storage_js_2 = require("./resources/storage.js");
29
+ Object.defineProperty(exports, "StorageClient", { enumerable: true, get: function () { return storage_js_2.StorageClient; } });
30
+ Object.defineProperty(exports, "StorageFileApi", { enumerable: true, get: function () { return storage_js_2.StorageFileApi; } });
31
+ var auth_js_2 = require("./resources/auth.js");
32
+ Object.defineProperty(exports, "AuthClient", { enumerable: true, get: function () { return auth_js_2.AuthClient; } });
33
+ var db_js_2 = require("./resources/db.js");
34
+ Object.defineProperty(exports, "DbClient", { enumerable: true, get: function () { return db_js_2.DbClient; } });
35
+ var emails_js_2 = require("./resources/emails.js");
36
+ Object.defineProperty(exports, "EmailsClient", { enumerable: true, get: function () { return emails_js_2.EmailsClient; } });
37
+ var fs_js_2 = require("./resources/fs.js");
38
+ Object.defineProperty(exports, "FsClient", { enumerable: true, get: function () { return fs_js_2.FsClient; } });
39
+ var functions_js_2 = require("./resources/functions.js");
40
+ Object.defineProperty(exports, "FunctionsClient", { enumerable: true, get: function () { return functions_js_2.FunctionsClient; } });
41
+ var chat_js_2 = require("./resources/chat.js");
42
+ Object.defineProperty(exports, "ChatClient", { enumerable: true, get: function () { return chat_js_2.ChatClient; } });
43
+ Object.defineProperty(exports, "ChatCompletionsClient", { enumerable: true, get: function () { return chat_js_2.ChatCompletionsClient; } });
44
+ var payments_js_2 = require("./resources/payments.js");
45
+ Object.defineProperty(exports, "PaymentsClient", { enumerable: true, get: function () { return payments_js_2.PaymentsClient; } });
46
+ var video_js_2 = require("./resources/video.js");
47
+ Object.defineProperty(exports, "VideoClient", { enumerable: true, get: function () { return video_js_2.VideoClient; } });
48
+ var inbox_js_2 = require("./resources/inbox.js");
49
+ Object.defineProperty(exports, "InboxClient", { enumerable: true, get: function () { return inbox_js_2.InboxClient; } });
50
+ Object.defineProperty(exports, "InboxAddressesClient", { enumerable: true, get: function () { return inbox_js_2.InboxAddressesClient; } });
51
+ Object.defineProperty(exports, "InboxMessagesClient", { enumerable: true, get: function () { return inbox_js_2.InboxMessagesClient; } });
52
+ var calls_js_2 = require("./resources/calls.js");
53
+ Object.defineProperty(exports, "CallsClient", { enumerable: true, get: function () { return calls_js_2.CallsClient; } });
54
+ var tasks_js_2 = require("./resources/tasks.js");
55
+ Object.defineProperty(exports, "TasksClient", { enumerable: true, get: function () { return tasks_js_2.TasksClient; } });
56
+ var projects_js_2 = require("./resources/projects.js");
57
+ Object.defineProperty(exports, "ProjectsClient", { enumerable: true, get: function () { return projects_js_2.ProjectsClient; } });
58
+ /**
59
+ * The somewhere.tech client for explicit server and non-browser access, plus
60
+ * browser auth and application-function conveniences:
61
+ *
62
+ * - `sw.db.query(sql, params)` — raw SQL
63
+ * - `sw.db.from(table)` / `sw.from(table)` — fluent query builder
64
+ * - `sw.fs.read(path)` / `sw.fs.write(path, body)` — raw filesystem
65
+ * - `sw.storage.from(bucket)` — prefix-oriented file API
66
+ * - `sw.auth` — application auth
67
+ * - `sw.emails.send(...)` — Resend email
68
+ * - `sw.inbox.messages.list(...)` — inbound email
69
+ * - `sw.chat.completions.create()` — OpenAI chat completions
70
+ * - `sw.payments.checkout(...)` — Stripe Connect (zero platform fee)
71
+ * - `sw.video.createUploadUrl()` — direct-upload video pipeline
72
+ * - `sw.calls.createSession()` — WebRTC SFU sessions
73
+ * - `sw.tasks.create(...)` — per-project ticketing
74
+ *
75
+ * import { Somewhere } from '@somewhere-cloud/sdk'
76
+ * const sw = new Somewhere({ key: process.env.SOMEWHERE_API_KEY, projectId: 'booking-app' })
77
+ *
78
+ * const { data } = await sw.from('users').select('*').eq('id', 1)
79
+ */
80
+ class Somewhere {
81
+ constructor(opts) {
82
+ this.client = new client_js_1.Client(opts);
83
+ this.auth = new auth_js_1.AuthClient(this.client);
84
+ this.db = new db_js_1.DbClient(this.client);
85
+ this.fs = new fs_js_1.FsClient(this.client);
86
+ this.storage = new storage_js_1.StorageClient(this.client);
87
+ this.emails = new emails_js_1.EmailsClient(this.client);
88
+ this.inbox = new inbox_js_1.InboxClient(this.client);
89
+ this.chat = new chat_js_1.ChatClient(this.client);
90
+ this.payments = new payments_js_1.PaymentsClient(this.client);
91
+ this.functions = new functions_js_1.FunctionsClient(this.client);
92
+ this.video = new video_js_1.VideoClient(this.client);
93
+ this.calls = new calls_js_1.CallsClient(this.client);
94
+ this.tasks = new tasks_js_1.TasksClient(this.client);
95
+ this.projects = new projects_js_1.ProjectsClient(this.client);
96
+ }
97
+ /** Fluent query builder entry point. Alias of `sw.db.from(table)`. */
98
+ from(table) {
99
+ return new postgrest_js_1.SomewhereQueryBuilder(this.client, table);
100
+ }
101
+ /**
102
+ * Warm the client cache for a query ahead of need — hover-prefetch, route
103
+ * preload, "load the next page while they read this one". Just runs the
104
+ * query (populating the instance cache); a later identical `.select()`
105
+ * within the staleTime window is then served instantly from cache.
106
+ *
107
+ * sw.prefetch(sw.from('posts').select('*').eq('id', hoveredId))
108
+ * // …on click, this is a cache hit, no network round-trip:
109
+ * const { data } = await sw.from('posts').select('*').eq('id', hoveredId)
110
+ *
111
+ * No-op for cache effects when the client was created with `{ cache: false }`.
112
+ */
113
+ prefetch(query) {
114
+ return Promise.resolve(query);
115
+ }
116
+ /**
117
+ * Drop cached `from().select()` reads for a table. Read-your-own-writes is
118
+ * already automatic (writes self-invalidate); reach for this to invalidate
119
+ * by hand — e.g. from whatever tells your app a row changed:
120
+ *
121
+ * onRowChanged('posts', () => sw.invalidate('posts'))
122
+ */
123
+ invalidate(table) {
124
+ this.client.invalidateTable(table);
125
+ }
126
+ /**
127
+ * `rpc(name, args)` convenience method. On somewhere there are no SQL stored
128
+ * procedures — a "database function" is one of your deployed `api/<name>`
129
+ * functions. `rpc('foo', args)` therefore calls `POST {projectUrl}/api/foo`
130
+ * with `args` as the JSON body and returns `{ data, error }`. Identical to
131
+ * `functions.invoke(name, { body: args })`; provided so existing `rpc(...)`
132
+ * call sites port unchanged.
133
+ */
134
+ rpc(name, args) {
135
+ return this.functions.invoke(name, args === undefined ? {} : { body: args });
136
+ }
137
+ }
138
+ exports.Somewhere = Somewhere;
139
+ exports.default = Somewhere;
140
+ /* ─── createClient factory ───────────────────────────────────── */
141
+ /**
142
+ * Derive the project id from a legacy `*.somewhere.tech` application URL's
143
+ * subdomain. Current `*.somewhere.site` URLs, custom domains, API hosts, and
144
+ * bare hosts return `undefined`; pass `projectId` explicitly for project
145
+ * resources. The seam is loud: an unresolved project id surfaces as a clear
146
+ * error on the first call that needs one.
147
+ */
148
+ function projectIdFromUrl(url) {
149
+ let host;
150
+ try {
151
+ host = new URL(url).hostname;
152
+ }
153
+ catch {
154
+ return undefined;
155
+ }
156
+ if (!host.endsWith('.somewhere.tech'))
157
+ return undefined;
158
+ const sub = host.slice(0, -'.somewhere.tech'.length);
159
+ // `api.somewhere.tech`, `www.`, or a deeper path aren't project subdomains.
160
+ if (!sub || sub.includes('.') || sub === 'api' || sub === 'www')
161
+ return undefined;
162
+ return sub;
163
+ }
164
+ /**
165
+ * Create a somewhere.tech client from an application URL:
166
+ *
167
+ * import { createClient } from '@somewhere-cloud/sdk'
168
+ * const client = createClient('https://booking-app.somewhere.site', undefined, {
169
+ * projectId: 'booking-app',
170
+ * })
171
+ *
172
+ * await client.auth.signInWithPassword({ email, password })
173
+ * await client.functions.invoke('checkout', { body: { plan: 'pro' } })
174
+ *
175
+ * - `somewhereUrl` — your application's URL. Used as the `functions.invoke`
176
+ * host. Pass `{ projectId }` for current `*.somewhere.site` URLs and custom
177
+ * domains; automatic inference is retained for legacy `*.somewhere.tech`
178
+ * application URLs only.
179
+ * - `somewhereKey` — omit in a browser cookie app. For non-browser use, pass
180
+ * an app-user JWT or a developer `smt_` key
181
+ * (server-only). Detected by the `smt_` prefix.
182
+ *
183
+ * Database / auth / storage calls go to the platform REST base
184
+ * (`https://api.somewhere.cloud/v1`, override with `options.apiUrl`).
185
+ */
186
+ function createClient(somewhereUrl, somewhereKey, options = {}) {
187
+ const projectId = options.projectId ?? projectIdFromUrl(somewhereUrl);
188
+ const isDeveloperKey = somewhereKey?.startsWith('smt_') ?? false;
189
+ const functionsUrl = options.functionsUrl ?? (isLikelyHttpUrl(somewhereUrl) ? somewhereUrl : undefined);
190
+ return new Somewhere({
191
+ ...(somewhereKey
192
+ ? isDeveloperKey
193
+ ? { key: somewhereKey }
194
+ : { token: somewhereKey }
195
+ : {}),
196
+ projectId,
197
+ baseUrl: options.apiUrl,
198
+ functionsUrl,
199
+ fetch: options.fetch,
200
+ headers: options.headers,
201
+ authMode: options.authMode,
202
+ authPath: options.authPath,
203
+ cache: options.cache,
204
+ });
205
+ }
206
+ function isLikelyHttpUrl(value) {
207
+ try {
208
+ const u = new URL(value);
209
+ return u.protocol === 'http:' || u.protocol === 'https:';
210
+ }
211
+ catch {
212
+ return false;
213
+ }
214
+ }
215
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}