@motherbase/client 2.2.1 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/COMPATIBILITY.md +157 -0
- package/LICENSE +21 -21
- package/README.md +52 -4
- package/dist/admin/auth-admin-client.d.ts +43 -0
- package/dist/admin/auth-admin-client.d.ts.map +1 -0
- package/dist/admin/auth-admin-client.js +62 -0
- package/dist/admin/auth-admin-client.js.map +1 -0
- package/dist/admin/auth-admin-mfa-client.d.ts +22 -0
- package/dist/admin/auth-admin-mfa-client.d.ts.map +1 -0
- package/dist/admin/auth-admin-mfa-client.js +17 -0
- package/dist/admin/auth-admin-mfa-client.js.map +1 -0
- package/dist/admin/types.d.ts +85 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +3 -0
- package/dist/admin/types.js.map +1 -0
- package/dist/auth/constants.d.ts +21 -0
- package/dist/auth/constants.d.ts.map +1 -0
- package/dist/auth/constants.js +34 -0
- package/dist/auth/constants.js.map +1 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +34 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/motherbase-plugin.d.ts +6 -0
- package/dist/auth/motherbase-plugin.d.ts.map +1 -0
- package/dist/auth/motherbase-plugin.js +80 -0
- package/dist/auth/motherbase-plugin.js.map +1 -0
- package/dist/auth/pkce.d.ts +19 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +89 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/session-utils.d.ts +29 -0
- package/dist/auth/session-utils.d.ts.map +1 -0
- package/dist/auth/session-utils.js +123 -0
- package/dist/auth/session-utils.js.map +1 -0
- package/dist/auth/session.d.ts +51 -0
- package/dist/auth/session.d.ts.map +1 -0
- package/dist/auth/session.js +161 -0
- package/dist/auth/session.js.map +1 -0
- package/dist/auth/types.d.ts +341 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/auth/utils.d.ts +28 -0
- package/dist/auth/utils.d.ts.map +1 -0
- package/dist/auth/utils.js +70 -0
- package/dist/auth/utils.js.map +1 -0
- package/dist/auth.d.ts +3 -2
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +27 -11
- package/dist/auth.js.map +1 -1
- package/dist/channel.d.ts +11 -0
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +26 -2
- package/dist/channel.js.map +1 -1
- package/dist/cookies/cookie-storage.d.ts +12 -0
- package/dist/cookies/cookie-storage.d.ts.map +1 -0
- package/dist/cookies/cookie-storage.js +35 -0
- package/dist/cookies/cookie-storage.js.map +1 -0
- package/dist/cookies/index.d.ts +5 -0
- package/dist/cookies/index.d.ts.map +1 -0
- package/dist/cookies/index.js +5 -0
- package/dist/cookies/index.js.map +1 -0
- package/dist/cookies/server-cookie-storage.d.ts +20 -0
- package/dist/cookies/server-cookie-storage.d.ts.map +1 -0
- package/dist/cookies/server-cookie-storage.js +60 -0
- package/dist/cookies/server-cookie-storage.js.map +1 -0
- package/dist/cookies/types.d.ts +33 -0
- package/dist/cookies/types.d.ts.map +1 -0
- package/dist/cookies/types.js +8 -0
- package/dist/cookies/types.js.map +1 -0
- package/dist/cookies/utils.d.ts +23 -0
- package/dist/cookies/utils.d.ts.map +1 -0
- package/dist/cookies/utils.js +67 -0
- package/dist/cookies/utils.js.map +1 -0
- package/dist/database/database.d.ts +197 -0
- package/dist/database/database.d.ts.map +1 -0
- package/dist/database/database.js +2 -0
- package/dist/database/database.js.map +1 -0
- package/dist/database/facade.d.ts +144 -0
- package/dist/database/facade.d.ts.map +1 -0
- package/dist/database/facade.js +147 -0
- package/dist/database/facade.js.map +1 -0
- package/dist/database/query.d.ts +97 -0
- package/dist/database/query.d.ts.map +1 -0
- package/dist/database/query.js +94 -0
- package/dist/database/query.js.map +1 -0
- package/dist/database/types.d.ts +314 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +2 -0
- package/dist/database/types.js.map +1 -0
- package/dist/functions/errors.d.ts +28 -0
- package/dist/functions/errors.d.ts.map +1 -0
- package/dist/functions/errors.js +37 -0
- package/dist/functions/errors.js.map +1 -0
- package/dist/functions/index.d.ts +9 -0
- package/dist/functions/index.d.ts.map +1 -0
- package/dist/functions/index.js +40 -0
- package/dist/functions/index.js.map +1 -0
- package/dist/functions/types.d.ts +25 -0
- package/dist/functions/types.d.ts.map +1 -0
- package/dist/functions/types.js +2 -0
- package/dist/functions/types.js.map +1 -0
- package/dist/http/backend-error.d.ts +17 -0
- package/dist/http/backend-error.d.ts.map +1 -0
- package/dist/http/backend-error.js +11 -0
- package/dist/http/backend-error.js.map +1 -0
- package/dist/http/index.d.ts +59 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +175 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/types.d.ts +45 -0
- package/dist/http/types.d.ts.map +1 -0
- package/dist/http/types.js +2 -0
- package/dist/http/types.js.map +1 -0
- package/dist/http/utils.d.ts +14 -0
- package/dist/http/utils.d.ts.map +1 -0
- package/dist/http/utils.js +37 -0
- package/dist/http/utils.js.map +1 -0
- package/dist/http.d.ts.map +1 -1
- package/dist/http.js +2 -1
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +47 -77
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -73
- package/dist/index.js.map +1 -1
- package/dist/pkce.js +4 -4
- package/dist/postgrest/index.d.ts +4 -0
- package/dist/postgrest/index.d.ts.map +1 -0
- package/dist/postgrest/index.js +4 -0
- package/dist/postgrest/index.js.map +1 -0
- package/dist/postgrest/query-builder.d.ts +224 -0
- package/dist/postgrest/query-builder.d.ts.map +1 -0
- package/dist/postgrest/query-builder.js +544 -0
- package/dist/postgrest/query-builder.js.map +1 -0
- package/dist/postgrest/rpc.d.ts +12 -0
- package/dist/postgrest/rpc.d.ts.map +1 -0
- package/dist/postgrest/rpc.js +42 -0
- package/dist/postgrest/rpc.js.map +1 -0
- package/dist/postgrest/types.d.ts +88 -0
- package/dist/postgrest/types.d.ts.map +1 -0
- package/dist/postgrest/types.js +2 -0
- package/dist/postgrest/types.js.map +1 -0
- package/dist/postgrest/utils.d.ts +23 -0
- package/dist/postgrest/utils.d.ts.map +1 -0
- package/dist/postgrest/utils.js +87 -0
- package/dist/postgrest/utils.js.map +1 -0
- package/dist/postgrest.d.ts +5 -1
- package/dist/postgrest.d.ts.map +1 -1
- package/dist/postgrest.js +17 -10
- package/dist/postgrest.js.map +1 -1
- package/dist/realtime/channel.d.ts +83 -0
- package/dist/realtime/channel.d.ts.map +1 -0
- package/dist/realtime/channel.js +240 -0
- package/dist/realtime/channel.js.map +1 -0
- package/dist/realtime/index.d.ts +94 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/index.js +455 -0
- package/dist/realtime/index.js.map +1 -0
- package/dist/realtime/types.d.ts +120 -0
- package/dist/realtime/types.d.ts.map +1 -0
- package/dist/realtime/types.js +2 -0
- package/dist/realtime/types.js.map +1 -0
- package/dist/realtime.d.ts +1 -0
- package/dist/realtime.d.ts.map +1 -1
- package/dist/realtime.js +26 -1
- package/dist/realtime.js.map +1 -1
- package/dist/runtime.d.ts +13 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +15 -0
- package/dist/runtime.js.map +1 -0
- package/dist/session.d.ts +2 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +11 -2
- package/dist/session.js.map +1 -1
- package/dist/storage/bucket.d.ts +166 -0
- package/dist/storage/bucket.d.ts.map +1 -0
- package/dist/storage/bucket.js +294 -0
- package/dist/storage/bucket.js.map +1 -0
- package/dist/storage/index.d.ts +45 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +55 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/types.d.ts +131 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/storage/utils.d.ts +27 -0
- package/dist/storage/utils.d.ts.map +1 -0
- package/dist/storage/utils.js +43 -0
- package/dist/storage/utils.js.map +1 -0
- package/dist/test.d.ts +2 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +3 -0
- package/dist/test.js.map +1 -0
- package/dist/types.d.ts +14 -249
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/compat.d.ts +40 -0
- package/dist/utils/compat.d.ts.map +1 -0
- package/dist/utils/compat.js +100 -0
- package/dist/utils/compat.js.map +1 -0
- package/dist/utils/runtime.d.ts +13 -0
- package/dist/utils/runtime.d.ts.map +1 -0
- package/dist/utils/runtime.js +15 -0
- package/dist/utils/runtime.js.map +1 -0
- package/dist/utils/testing.d.ts +38 -0
- package/dist/utils/testing.d.ts.map +1 -0
- package/dist/utils/testing.js +50 -0
- package/dist/utils/testing.js.map +1 -0
- package/dist/utils/warn.d.ts +2 -0
- package/dist/utils/warn.d.ts.map +1 -0
- package/dist/utils/warn.js +23 -0
- package/dist/utils/warn.js.map +1 -0
- package/package.json +13 -11
- package/dist/devices.d.ts +0 -13
- package/dist/devices.d.ts.map +0 -1
- package/dist/devices.js +0 -13
- package/dist/devices.js.map +0 -1
- package/dist/profile.d.ts +0 -16
- package/dist/profile.d.ts.map +0 -1
- package/dist/profile.js +0 -26
- package/dist/profile.js.map +0 -1
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { contractPath } from "@motherbase/contracts";
|
|
2
|
+
import { BackendError, FunctionsFetchError, FunctionsHttpError } from "../index.js";
|
|
3
|
+
import { warnIgnoredOption } from "../utils/warn.js";
|
|
4
|
+
import { toError } from "../http/utils.js";
|
|
5
|
+
/** Supabase-compatible edge functions client: `client.functions.invoke(name, { body })`. */
|
|
6
|
+
export class FunctionsClient {
|
|
7
|
+
constructor(http) {
|
|
8
|
+
this.http = http;
|
|
9
|
+
}
|
|
10
|
+
async invoke(name, options = {}) {
|
|
11
|
+
try {
|
|
12
|
+
if (options.region) {
|
|
13
|
+
warnIgnoredOption('functions.invoke', 'region', 'A self-hosted Motherbase runs every function in one place, so the call goes there regardless.');
|
|
14
|
+
}
|
|
15
|
+
const edgeToken = options.auth?.type === 'edge-token' ? options.auth.token : undefined;
|
|
16
|
+
const method = options.method ?? 'POST';
|
|
17
|
+
const data = await this.http.request(contractPath.edge(name), {
|
|
18
|
+
method,
|
|
19
|
+
// A GET or DELETE with a JSON body is refused by some proxies and means
|
|
20
|
+
// nothing to the function, so the body is only sent where it can be read.
|
|
21
|
+
body: method === 'GET' || method === 'DELETE' ? undefined : (options.body ?? {}),
|
|
22
|
+
anonymous: options.auth !== undefined,
|
|
23
|
+
headers: {
|
|
24
|
+
...options.headers,
|
|
25
|
+
...(edgeToken ? { 'x-motherbase-edge-token': edgeToken } : {}),
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
return { data, error: null };
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
const base = toError(err);
|
|
32
|
+
const status = err instanceof BackendError ? err.httpStatus : 0;
|
|
33
|
+
const error = status
|
|
34
|
+
? Object.assign(new FunctionsHttpError(base.message, status), base)
|
|
35
|
+
: Object.assign(new FunctionsFetchError(base.message), base);
|
|
36
|
+
return { data: null, error };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,YAAY,EAAyB,mBAAmB,EAAE,kBAAkB,EAAsB,MAAM,aAAa,CAAC;AAC/H,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,4FAA4F;AAC5F,MAAM,OAAO,eAAe;IACxB,YAA6B,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;IAAI,CAAC;IAElD,KAAK,CAAC,MAAM,CACR,IAAY,EACZ,UAAuC,EAAE;QAEzC,IAAI,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,iBAAiB,CACb,kBAAkB,EAClB,QAAQ,EACR,+FAA+F,CAClG,CAAC;YACN,CAAC;YACD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YACvF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;YACxC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAS,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAClE,MAAM;gBACN,wEAAwE;gBACxE,0EAA0E;gBAC1E,IAAI,EAAE,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;gBAChF,SAAS,EAAE,OAAO,CAAC,IAAI,KAAK,SAAS;gBACrC,OAAO,EAAE;oBACL,GAAG,OAAO,CAAC,OAAO;oBAClB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,yBAAyB,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACjE;aACJ,CAAC,CAAC;YACH,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAG,GAAG,YAAY,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,KAAK,GAAG,MAAM;gBAChB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC;gBACnE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC;YACjE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QACjC,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type FunctionInvokeAuth = {
|
|
2
|
+
type: 'edge-token';
|
|
3
|
+
token: string;
|
|
4
|
+
} | {
|
|
5
|
+
type: 'public';
|
|
6
|
+
};
|
|
7
|
+
export interface FunctionInvokeOptions<Body = unknown> {
|
|
8
|
+
/** JSON body passed to the edge function. */
|
|
9
|
+
body?: Body;
|
|
10
|
+
/**
|
|
11
|
+
* Authentication override. By default the current session bearer is used.
|
|
12
|
+
* Public and dedicated Edge-token invocations must be explicitly selected.
|
|
13
|
+
*/
|
|
14
|
+
auth?: FunctionInvokeAuth;
|
|
15
|
+
/** HTTP method the function receives. Defaults to POST, as in supabase-js. */
|
|
16
|
+
method?: 'POST' | 'GET' | 'PUT' | 'PATCH' | 'DELETE';
|
|
17
|
+
/** Extra request headers, forwarded to the function. */
|
|
18
|
+
headers?: Record<string, string>;
|
|
19
|
+
/**
|
|
20
|
+
* Accepted for supabase-js signature parity and ignored: a self-hosted
|
|
21
|
+
* Motherbase runs its functions in one place, so there is no region to pick.
|
|
22
|
+
*/
|
|
23
|
+
region?: string;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/functions/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GACxB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAEzB,MAAM,WAAW,qBAAqB,CAAC,IAAI,GAAG,OAAO;IACjD,6CAA6C;IAC7C,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;OAGG;IACH,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrD,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/functions/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare class BackendError extends Error {
|
|
2
|
+
/** HTTP status code (0 if the request never completed). */
|
|
3
|
+
readonly httpStatus: number;
|
|
4
|
+
/** The API envelope's `status` field when present. */
|
|
5
|
+
readonly apiStatus?: number;
|
|
6
|
+
/** Backend error code, when present. */
|
|
7
|
+
readonly code?: string;
|
|
8
|
+
/**
|
|
9
|
+
* Correlation id for the failed request, from the `x-request-id` response
|
|
10
|
+
* header (the backend also puts it in the error body). Quote it in a bug
|
|
11
|
+
* report or log it next to your own error: it is what matches this call to
|
|
12
|
+
* the server-side stack trace in the project's logs.
|
|
13
|
+
*/
|
|
14
|
+
readonly requestId?: string;
|
|
15
|
+
constructor(message: string, httpStatus: number, apiStatus?: number, code?: string, requestId?: string);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=backend-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-error.d.ts","sourceRoot":"","sources":["../../src/http/backend-error.ts"],"names":[],"mappings":"AAAA,qBAAa,YAAa,SAAQ,KAAK;IACnC,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAQzG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class BackendError extends Error {
|
|
2
|
+
constructor(message, httpStatus, apiStatus, code, requestId) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = 'BackendError';
|
|
5
|
+
this.httpStatus = httpStatus;
|
|
6
|
+
this.apiStatus = apiStatus;
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.requestId = requestId;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=backend-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-error.js","sourceRoot":"","sources":["../../src/http/backend-error.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAa,SAAQ,KAAK;IAenC,YAAY,OAAe,EAAE,UAAkB,EAAE,SAAkB,EAAE,IAAa,EAAE,SAAkB;QAClG,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;CACJ"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { SessionStore } from "../auth/session.js";
|
|
2
|
+
import { RequestObserver, RequestOptions } from "./types.js";
|
|
3
|
+
export declare class HttpClient {
|
|
4
|
+
private readonly baseUrl;
|
|
5
|
+
private readonly store;
|
|
6
|
+
private readonly opts;
|
|
7
|
+
/** Performs the refresh; returns true on success. Injected to avoid a cycle. */
|
|
8
|
+
private readonly doRefresh;
|
|
9
|
+
private refreshPromise;
|
|
10
|
+
constructor(baseUrl: string, store: SessionStore, opts: {
|
|
11
|
+
autoRefresh: boolean;
|
|
12
|
+
fetch: typeof fetch;
|
|
13
|
+
headers?: Record<string, string>;
|
|
14
|
+
/** Called once per HTTP round trip, including the retry after a refresh. */
|
|
15
|
+
onRequest?: RequestObserver;
|
|
16
|
+
},
|
|
17
|
+
/** Performs the refresh; returns true on success. Injected to avoid a cycle. */
|
|
18
|
+
doRefresh: () => Promise<boolean>);
|
|
19
|
+
/**
|
|
20
|
+
* Install (or clear) the request observer.
|
|
21
|
+
*
|
|
22
|
+
* Set rather than constructed, so `client.on('request', ...)` can be called
|
|
23
|
+
* after the client exists, and cleared again when the last listener goes: the
|
|
24
|
+
* timing path is skipped entirely while nobody is watching.
|
|
25
|
+
*/
|
|
26
|
+
setRequestObserver(observer: RequestObserver | undefined): void;
|
|
27
|
+
request<T>(path: string, options?: RequestOptions): Promise<T>;
|
|
28
|
+
/**
|
|
29
|
+
* Like `request`, but keeps the response headers. PostgREST puts the row count
|
|
30
|
+
* in `Content-Range`, which is unreachable from the parsed body alone.
|
|
31
|
+
*/
|
|
32
|
+
requestWithHeaders<T>(path: string, options?: RequestOptions): Promise<{
|
|
33
|
+
data: T;
|
|
34
|
+
headers: Headers;
|
|
35
|
+
status: number;
|
|
36
|
+
}>;
|
|
37
|
+
/** Like `request`, but returns the raw Response (for binary downloads). */
|
|
38
|
+
requestRaw(path: string, options?: RequestOptions): Promise<Response>;
|
|
39
|
+
private sendWithRefresh;
|
|
40
|
+
/** Shared single-flight refresh: concurrent callers await the same promise. */
|
|
41
|
+
private refreshOnce;
|
|
42
|
+
private send;
|
|
43
|
+
/**
|
|
44
|
+
* `fetchImpl`, reporting each round trip to the request observer. The auth
|
|
45
|
+
* client sends through Better Auth's own fetch, which is handed this. It
|
|
46
|
+
* passes a `URL`; the app's fetch gets a string, as from every other call.
|
|
47
|
+
*/
|
|
48
|
+
observedFetch(fetchImpl: typeof fetch): typeof fetch;
|
|
49
|
+
private observe;
|
|
50
|
+
/** An observer that throws must not fail the request it was watching. */
|
|
51
|
+
private emit;
|
|
52
|
+
private parse;
|
|
53
|
+
/** Parse a plain-JSON (non-envelope) response, mapping failures to BackendError. */
|
|
54
|
+
private parseRaw;
|
|
55
|
+
/** Absolute URL for a path. Public so callers can navigate to an endpoint
|
|
56
|
+
* rather than fetch it (see the `signIn.social` redirect in auth.ts). */
|
|
57
|
+
url(path: string): string;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAgB,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAM3E,qBAAa,UAAU;IAIf,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAOrB,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,SAAS;IAb9B,OAAO,CAAC,cAAc,CAAiC;gBAGlC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;QACnB,WAAW,EAAE,OAAO,CAAC;QACrB,KAAK,EAAE,OAAO,KAAK,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,4EAA4E;QAC5E,SAAS,CAAC,EAAE,eAAe,CAAC;KAC/B;IACD,gFAAgF;IAC/D,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC;IAGtD;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI;IAIzD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIxE;;;OAGG;IACG,kBAAkB,CAAC,CAAC,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC7B,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAMzD,2EAA2E;IACrE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;YAQjE,eAAe;IAW7B,+EAA+E;IAC/E,OAAO,CAAC,WAAW;YASL,IAAI;IAqClB;;;;OAIG;IACH,aAAa,CAAC,SAAS,EAAE,OAAO,KAAK,GAAG,OAAO,KAAK;YAStC,OAAO;IAgBrB,yEAAyE;IACzE,OAAO,CAAC,IAAI;YAQE,KAAK;IAiBnB,oFAAoF;YACtE,QAAQ;IAetB;8EAC0E;IAC1E,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAG5B"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { HTTP_ROUTES } from "@motherbase/contracts";
|
|
2
|
+
import { isBrowser } from "../utils/runtime.js";
|
|
3
|
+
import { requestIdOf, withoutTrailingSlash } from "./utils.js";
|
|
4
|
+
import { BackendError } from "./backend-error.js";
|
|
5
|
+
export class HttpClient {
|
|
6
|
+
constructor(baseUrl, store, opts,
|
|
7
|
+
/** Performs the refresh; returns true on success. Injected to avoid a cycle. */
|
|
8
|
+
doRefresh) {
|
|
9
|
+
this.baseUrl = baseUrl;
|
|
10
|
+
this.store = store;
|
|
11
|
+
this.opts = opts;
|
|
12
|
+
this.doRefresh = doRefresh;
|
|
13
|
+
this.refreshPromise = null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Install (or clear) the request observer.
|
|
17
|
+
*
|
|
18
|
+
* Set rather than constructed, so `client.on('request', ...)` can be called
|
|
19
|
+
* after the client exists, and cleared again when the last listener goes: the
|
|
20
|
+
* timing path is skipped entirely while nobody is watching.
|
|
21
|
+
*/
|
|
22
|
+
setRequestObserver(observer) {
|
|
23
|
+
this.opts.onRequest = observer;
|
|
24
|
+
}
|
|
25
|
+
async request(path, options = {}) {
|
|
26
|
+
return (await this.requestWithHeaders(path, options)).data;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Like `request`, but keeps the response headers. PostgREST puts the row count
|
|
30
|
+
* in `Content-Range`, which is unreachable from the parsed body alone.
|
|
31
|
+
*/
|
|
32
|
+
async requestWithHeaders(path, options = {}) {
|
|
33
|
+
const res = await this.sendWithRefresh(path, options);
|
|
34
|
+
const data = options.raw ? await this.parseRaw(res) : await this.parse(res);
|
|
35
|
+
return { data, headers: res.headers, status: res.status };
|
|
36
|
+
}
|
|
37
|
+
/** Like `request`, but returns the raw Response (for binary downloads). */
|
|
38
|
+
async requestRaw(path, options = {}) {
|
|
39
|
+
const res = await this.sendWithRefresh(path, options);
|
|
40
|
+
if (!res.ok) {
|
|
41
|
+
await this.parseRaw(res);
|
|
42
|
+
}
|
|
43
|
+
return res;
|
|
44
|
+
}
|
|
45
|
+
async sendWithRefresh(path, options) {
|
|
46
|
+
const res = await this.send(path, options);
|
|
47
|
+
if (res.status === 401 && this.opts.autoRefresh && !options.anonymous && !options._retry) {
|
|
48
|
+
const refreshed = await this.refreshOnce();
|
|
49
|
+
if (refreshed) {
|
|
50
|
+
return this.send(path, { ...options, _retry: true });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return res;
|
|
54
|
+
}
|
|
55
|
+
/** Shared single-flight refresh: concurrent callers await the same promise. */
|
|
56
|
+
refreshOnce() {
|
|
57
|
+
if (!this.refreshPromise) {
|
|
58
|
+
this.refreshPromise = this.doRefresh().finally(() => {
|
|
59
|
+
this.refreshPromise = null;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return this.refreshPromise;
|
|
63
|
+
}
|
|
64
|
+
async send(path, options) {
|
|
65
|
+
await this.store.hydrate();
|
|
66
|
+
const headers = { ...this.opts.headers, ...options.headers };
|
|
67
|
+
const session = this.store.get();
|
|
68
|
+
if (!options.anonymous && session?.accessToken) {
|
|
69
|
+
headers['Authorization'] = `Bearer ${session.accessToken}`;
|
|
70
|
+
}
|
|
71
|
+
let body;
|
|
72
|
+
if (options.form) {
|
|
73
|
+
// A JSON default must not replace the multipart boundary generated by fetch.
|
|
74
|
+
for (const name of Object.keys(headers)) {
|
|
75
|
+
if (name.toLowerCase() === 'content-type')
|
|
76
|
+
delete headers[name];
|
|
77
|
+
}
|
|
78
|
+
body = options.form; // browser/runtime sets the multipart boundary
|
|
79
|
+
}
|
|
80
|
+
else if (options.body !== undefined) {
|
|
81
|
+
headers['Content-Type'] = 'application/json';
|
|
82
|
+
body = JSON.stringify(options.body);
|
|
83
|
+
}
|
|
84
|
+
const method = options.method ?? 'GET';
|
|
85
|
+
if (!isBrowser() && !['GET', 'HEAD', 'OPTIONS'].includes(method.toUpperCase())
|
|
86
|
+
&& path.startsWith(`${HTTP_ROUTES.auth}/`)
|
|
87
|
+
&& !Object.keys(headers).some(name => name.toLowerCase() === 'origin')) {
|
|
88
|
+
// Node does not supply Origin. Better Auth may require it for mutations,
|
|
89
|
+
// including requests carrying cookies. Keep its CSRF checks enabled.
|
|
90
|
+
headers.Origin = new URL(this.baseUrl).origin;
|
|
91
|
+
}
|
|
92
|
+
return this.observe(method, path, () => this.opts.fetch(this.url(path), {
|
|
93
|
+
method,
|
|
94
|
+
headers,
|
|
95
|
+
body,
|
|
96
|
+
signal: options.signal,
|
|
97
|
+
...(options.credentials ? { credentials: options.credentials } : {}),
|
|
98
|
+
}));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* `fetchImpl`, reporting each round trip to the request observer. The auth
|
|
102
|
+
* client sends through Better Auth's own fetch, which is handed this. It
|
|
103
|
+
* passes a `URL`; the app's fetch gets a string, as from every other call.
|
|
104
|
+
*/
|
|
105
|
+
observedFetch(fetchImpl) {
|
|
106
|
+
return (input, init) => {
|
|
107
|
+
const href = input instanceof Request ? input.url : String(input);
|
|
108
|
+
const url = new URL(href);
|
|
109
|
+
return this.observe(init?.method ?? 'GET', `${url.pathname}${url.search}`, () => fetchImpl(input instanceof Request ? input : href, init));
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
async observe(method, path, send) {
|
|
113
|
+
// Timed only when someone is listening: reading the clock twice per request
|
|
114
|
+
// for an observer nobody registered is a cost every app pays for a feature
|
|
115
|
+
// most do not use.
|
|
116
|
+
if (!this.opts.onRequest)
|
|
117
|
+
return send();
|
|
118
|
+
const startedAt = Date.now();
|
|
119
|
+
try {
|
|
120
|
+
const res = await send();
|
|
121
|
+
this.emit({ method, path, status: res.status, durationMs: Date.now() - startedAt, requestId: requestIdOf(res) });
|
|
122
|
+
return res;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
this.emit({ method, path, status: 0, durationMs: Date.now() - startedAt, error });
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/** An observer that throws must not fail the request it was watching. */
|
|
130
|
+
emit(event) {
|
|
131
|
+
try {
|
|
132
|
+
this.opts.onRequest?.(event);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// an observer is a spectator
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async parse(res) {
|
|
139
|
+
let envelope;
|
|
140
|
+
try {
|
|
141
|
+
envelope = (await res.json());
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// non-JSON response
|
|
145
|
+
}
|
|
146
|
+
if (!res.ok || (envelope && envelope.status === 0)) {
|
|
147
|
+
const message = envelope?.message ?? `Request failed with status ${res.status}`;
|
|
148
|
+
throw new BackendError(message, res.status, envelope?.status, envelope?.code, requestIdOf(res) ?? envelope?.requestId);
|
|
149
|
+
}
|
|
150
|
+
// `in`, not `??`: a legitimate `data: null` must come back as null, not as the envelope.
|
|
151
|
+
return (envelope && typeof envelope === 'object' && 'data' in envelope ? envelope.data : envelope);
|
|
152
|
+
}
|
|
153
|
+
/** Parse a plain-JSON (non-envelope) response, mapping failures to BackendError. */
|
|
154
|
+
async parseRaw(res) {
|
|
155
|
+
let body;
|
|
156
|
+
try {
|
|
157
|
+
body = await res.json();
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
body = undefined;
|
|
161
|
+
}
|
|
162
|
+
if (!res.ok) {
|
|
163
|
+
const failure = (body ?? {});
|
|
164
|
+
const message = failure.message ?? `Request failed with status ${res.status}`;
|
|
165
|
+
throw new BackendError(message, res.status, undefined, failure.code, requestIdOf(res) ?? failure.requestId);
|
|
166
|
+
}
|
|
167
|
+
return body;
|
|
168
|
+
}
|
|
169
|
+
/** Absolute URL for a path. Public so callers can navigate to an endpoint
|
|
170
|
+
* rather than fetch it (see the `signIn.social` redirect in auth.ts). */
|
|
171
|
+
url(path) {
|
|
172
|
+
return `${withoutTrailingSlash(this.baseUrl)}${path}`;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
export interface RequestOptions {
|
|
2
|
+
method?: string;
|
|
3
|
+
/** Headers scoped to this request. Override client-level headers. */
|
|
4
|
+
headers?: Record<string, string>;
|
|
5
|
+
/** JSON body. Mutually exclusive with `form`. */
|
|
6
|
+
body?: unknown;
|
|
7
|
+
/** Multipart body. Mutually exclusive with `body`. */
|
|
8
|
+
form?: FormData;
|
|
9
|
+
/** Skip attaching the Authorization header (used by auth endpoints). */
|
|
10
|
+
anonymous?: boolean;
|
|
11
|
+
/** Abort the request when this signal fires (`.abortSignal(signal)`). */
|
|
12
|
+
signal?: AbortSignal;
|
|
13
|
+
/**
|
|
14
|
+
* Parse the response body as-is instead of unwrapping the app's
|
|
15
|
+
* `{ status, data }` envelope. Better Auth's native /api/auth/* endpoints
|
|
16
|
+
* return plain JSON, so the auth client sets this.
|
|
17
|
+
*/
|
|
18
|
+
raw?: boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Cookie mode for this request. Defaults to fetch's own `same-origin`.
|
|
21
|
+
* OAuth start endpoints need `'include'`: better-auth sets a signed state
|
|
22
|
+
* cookie on that response and verifies it on the provider callback, and a
|
|
23
|
+
* cross-origin response's cookie is discarded without it (the callback then
|
|
24
|
+
* fails with `state_mismatch`).
|
|
25
|
+
*/
|
|
26
|
+
credentials?: RequestCredentials;
|
|
27
|
+
/** Internal: prevents infinite refresh recursion. */
|
|
28
|
+
_retry?: boolean;
|
|
29
|
+
}
|
|
30
|
+
/** What every request reports to `client.on('request', ...)`. */
|
|
31
|
+
export interface RequestEvent {
|
|
32
|
+
method: string;
|
|
33
|
+
/** Path with query string, as sent. */
|
|
34
|
+
path: string;
|
|
35
|
+
/** HTTP status, or 0 when the request never completed (network, abort). */
|
|
36
|
+
status: number;
|
|
37
|
+
/** Wall time from send to response headers, in milliseconds. */
|
|
38
|
+
durationMs: number;
|
|
39
|
+
/** `x-request-id`, the id to quote when reporting a server-side failure. */
|
|
40
|
+
requestId?: string;
|
|
41
|
+
/** Set when the request failed outright rather than answering. */
|
|
42
|
+
error?: unknown;
|
|
43
|
+
}
|
|
44
|
+
export type RequestObserver = (event: RequestEvent) => void;
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/http/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,iDAAiD;IACjD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sDAAsD;IACtD,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,iEAAiE;AACjE,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/http/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { MotherbaseError, MotherbaseResponse } from "../types.js";
|
|
2
|
+
/** Convert a thrown BackendError (or any error) into a Supabase-shaped error object. */
|
|
3
|
+
export declare function toError(err: unknown): MotherbaseError;
|
|
4
|
+
/**
|
|
5
|
+
* Run a call and fold whatever it throws into the `{ data, error }` result the
|
|
6
|
+
* public SDK promises. A thunk rather than a promise, so a synchronous throw
|
|
7
|
+
* while building the request (a bad argument) is caught too.
|
|
8
|
+
*/
|
|
9
|
+
export declare function settle<T>(call: () => Promise<T>): Promise<MotherbaseResponse<T>>;
|
|
10
|
+
/** `https://x.dev/` -> `https://x.dev`, so a path can be appended to any project URL. */
|
|
11
|
+
export declare function withoutTrailingSlash(url: string): string;
|
|
12
|
+
/** The backend sets `x-request-id` on every response; older ones may not. */
|
|
13
|
+
export declare function requestIdOf(res: Response): string | undefined;
|
|
14
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/http/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGvE,wFAAwF;AACxF,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAWrD;AAED;;;;GAIG;AACH,wBAAsB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAMtF;AAED,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAE7D"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BackendError } from "./backend-error.js";
|
|
2
|
+
/** Convert a thrown BackendError (or any error) into a Supabase-shaped error object. */
|
|
3
|
+
export function toError(err) {
|
|
4
|
+
if (err instanceof BackendError) {
|
|
5
|
+
return {
|
|
6
|
+
message: err.message,
|
|
7
|
+
status: err.httpStatus || undefined,
|
|
8
|
+
code: err.code,
|
|
9
|
+
requestId: err.requestId,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
if (err instanceof Error)
|
|
13
|
+
return { message: err.message };
|
|
14
|
+
return { message: String(err) };
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Run a call and fold whatever it throws into the `{ data, error }` result the
|
|
18
|
+
* public SDK promises. A thunk rather than a promise, so a synchronous throw
|
|
19
|
+
* while building the request (a bad argument) is caught too.
|
|
20
|
+
*/
|
|
21
|
+
export async function settle(call) {
|
|
22
|
+
try {
|
|
23
|
+
return { data: await call(), error: null };
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
return { data: null, error: toError(err) };
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/** `https://x.dev/` -> `https://x.dev`, so a path can be appended to any project URL. */
|
|
30
|
+
export function withoutTrailingSlash(url) {
|
|
31
|
+
return url.replace(/\/$/, '');
|
|
32
|
+
}
|
|
33
|
+
/** The backend sets `x-request-id` on every response; older ones may not. */
|
|
34
|
+
export function requestIdOf(res) {
|
|
35
|
+
return res.headers?.get('x-request-id') ?? undefined;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/http/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,wFAAwF;AACxF,MAAM,UAAU,OAAO,CAAC,GAAY;IAChC,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;QAC9B,OAAO;YACH,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;YACnC,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,GAAG,CAAC,SAAS;SAC3B,CAAC;IACN,CAAC;IACD,IAAI,GAAG,YAAY,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAI,IAAsB;IAClD,IAAI,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/C,CAAC;AACL,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC5C,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClC,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,WAAW,CAAC,GAAa;IACrC,OAAO,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;AACzD,CAAC"}
|
package/dist/http.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAcjD,qBAAa,YAAa,SAAQ,KAAK;IACrC,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,sDAAsD;IACtD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;CAQvG;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,iDAAiD;IACjD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,sDAAsD;IACtD,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,wEAAwE;IACxE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yEAAyE;IACzE,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,GAAG,CAAC,EAAE,OAAO,CAAC;IACd;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;IACjC,qDAAqD;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,iEAAiE;AACjE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAE5D;;;GAGG;AACH,qBAAa,UAAU;IAInB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAOrB,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAC,SAAS;IAb5B,OAAO,CAAC,cAAc,CAAiC;gBAGpC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE;QACrB,WAAW,EAAE,OAAO,CAAC;QACrB,KAAK,EAAE,OAAO,KAAK,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,4EAA4E;QAC5E,SAAS,CAAC,EAAE,eAAe,CAAC;KAC7B;IACD,gFAAgF;IAC/D,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC;IAGpD;;;;;;OAMG;IACH,kBAAkB,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI;IAIzD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,CAAC,CAAC;IAIxE;;;OAGG;IACG,kBAAkB,CAAC,CAAC,EACxB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC;QAAE,IAAI,EAAE,CAAC,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAMzD,2EAA2E;IACrE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;YAQjE,eAAe;IAW7B,+EAA+E;IAC/E,OAAO,CAAC,WAAW;YASL,IAAI;IAqClB;;;;OAIG;IACH,aAAa,CAAC,SAAS,EAAE,OAAO,KAAK,GAAG,OAAO,KAAK;YAStC,OAAO;IAgBrB,yEAAyE;IACzE,OAAO,CAAC,IAAI;YAQE,KAAK;IAiBnB,oFAAoF;YACtE,QAAQ;IAetB;iEAC6D;IAC7D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAG1B;AAED,wFAAwF;AACxF,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAW7G"}
|
package/dist/http.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { HTTP_ROUTES } from '@motherbase/contracts';
|
|
2
|
+
import { isBrowser } from './runtime.js';
|
|
2
3
|
/**
|
|
3
4
|
* Error thrown internally for any non-successful API response. Callers of the
|
|
4
5
|
* public SDK never see this: module boundaries catch it and return a
|
|
@@ -102,7 +103,7 @@ export class HttpClient {
|
|
|
102
103
|
body = JSON.stringify(options.body);
|
|
103
104
|
}
|
|
104
105
|
const method = options.method ?? 'GET';
|
|
105
|
-
if (
|
|
106
|
+
if (!isBrowser() && !['GET', 'HEAD', 'OPTIONS'].includes(method.toUpperCase())
|
|
106
107
|
&& path.startsWith(`${HTTP_ROUTES.auth}/`)
|
|
107
108
|
&& !Object.keys(headers).some(name => name.toLowerCase() === 'origin')) {
|
|
108
109
|
// Node does not supply Origin. Better Auth may require it for mutations,
|
package/dist/http.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
|