@pawabase/client 0.0.0-stage → 0.1.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/README.md +313 -2
- package/dist/cjs/admin.d.ts +187 -0
- package/dist/cjs/admin.d.ts.map +1 -0
- package/dist/cjs/admin.js +235 -0
- package/dist/cjs/admin.js.map +1 -0
- package/dist/cjs/auth.d.ts +448 -0
- package/dist/cjs/auth.d.ts.map +1 -0
- package/dist/cjs/auth.js +1016 -0
- package/dist/cjs/auth.js.map +1 -0
- package/dist/cjs/client.d.ts +103 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +144 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/data.d.ts +220 -0
- package/dist/cjs/data.d.ts.map +1 -0
- package/dist/cjs/data.js +490 -0
- package/dist/cjs/data.js.map +1 -0
- package/dist/cjs/errors.d.ts +167 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +316 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/files.d.ts +80 -0
- package/dist/cjs/files.d.ts.map +1 -0
- package/dist/cjs/files.js +167 -0
- package/dist/cjs/files.js.map +1 -0
- package/dist/cjs/functions.d.ts +66 -0
- package/dist/cjs/functions.d.ts.map +1 -0
- package/dist/cjs/functions.js +109 -0
- package/dist/cjs/functions.js.map +1 -0
- package/dist/cjs/http.d.ts +101 -0
- package/dist/cjs/http.d.ts.map +1 -0
- package/dist/cjs/http.js +249 -0
- package/dist/cjs/http.js.map +1 -0
- package/dist/cjs/index.d.ts +22 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +45 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/manage/access.d.ts +136 -0
- package/dist/cjs/manage/access.d.ts.map +1 -0
- package/dist/cjs/manage/access.js +162 -0
- package/dist/cjs/manage/access.js.map +1 -0
- package/dist/cjs/manage/automation.d.ts +106 -0
- package/dist/cjs/manage/automation.d.ts.map +1 -0
- package/dist/cjs/manage/automation.js +144 -0
- package/dist/cjs/manage/automation.js.map +1 -0
- package/dist/cjs/manage/base.d.ts +52 -0
- package/dist/cjs/manage/base.d.ts.map +1 -0
- package/dist/cjs/manage/base.js +69 -0
- package/dist/cjs/manage/base.js.map +1 -0
- package/dist/cjs/manage/data.d.ts +100 -0
- package/dist/cjs/manage/data.d.ts.map +1 -0
- package/dist/cjs/manage/data.js +141 -0
- package/dist/cjs/manage/data.js.map +1 -0
- package/dist/cjs/manage/files.d.ts +45 -0
- package/dist/cjs/manage/files.d.ts.map +1 -0
- package/dist/cjs/manage/files.js +73 -0
- package/dist/cjs/manage/files.js.map +1 -0
- package/dist/cjs/manage/functions.d.ts +48 -0
- package/dist/cjs/manage/functions.d.ts.map +1 -0
- package/dist/cjs/manage/functions.js +61 -0
- package/dist/cjs/manage/functions.js.map +1 -0
- package/dist/cjs/manage/index.d.ts +76 -0
- package/dist/cjs/manage/index.d.ts.map +1 -0
- package/dist/cjs/manage/index.js +134 -0
- package/dist/cjs/manage/index.js.map +1 -0
- package/dist/cjs/manage/lifecycle.d.ts +128 -0
- package/dist/cjs/manage/lifecycle.d.ts.map +1 -0
- package/dist/cjs/manage/lifecycle.js +167 -0
- package/dist/cjs/manage/lifecycle.js.map +1 -0
- package/dist/cjs/manage/mail.d.ts +16 -0
- package/dist/cjs/manage/mail.d.ts.map +1 -0
- package/dist/cjs/manage/mail.js +24 -0
- package/dist/cjs/manage/mail.js.map +1 -0
- package/dist/cjs/manage/observe.d.ts +149 -0
- package/dist/cjs/manage/observe.d.ts.map +1 -0
- package/dist/cjs/manage/observe.js +168 -0
- package/dist/cjs/manage/observe.js.map +1 -0
- package/dist/cjs/manage/realtime.d.ts +52 -0
- package/dist/cjs/manage/realtime.d.ts.map +1 -0
- package/dist/cjs/manage/realtime.js +71 -0
- package/dist/cjs/manage/realtime.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/realtime.d.ts +207 -0
- package/dist/cjs/realtime.d.ts.map +1 -0
- package/dist/cjs/realtime.js +704 -0
- package/dist/cjs/realtime.js.map +1 -0
- package/dist/cjs/session-store.d.ts +16 -0
- package/dist/cjs/session-store.d.ts.map +1 -0
- package/dist/cjs/session-store.js +37 -0
- package/dist/cjs/session-store.js.map +1 -0
- package/dist/cjs/typegen.d.ts +26 -0
- package/dist/cjs/typegen.d.ts.map +1 -0
- package/dist/cjs/typegen.js +167 -0
- package/dist/cjs/typegen.js.map +1 -0
- package/dist/cjs/types.d.ts +178 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +4 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/util.d.ts +27 -0
- package/dist/cjs/util.d.ts.map +1 -0
- package/dist/cjs/util.js +115 -0
- package/dist/cjs/util.js.map +1 -0
- package/dist/cjs/version.d.ts +2 -0
- package/dist/cjs/version.d.ts.map +1 -0
- package/dist/cjs/version.js +5 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/esm/admin.d.ts +187 -0
- package/dist/esm/admin.d.ts.map +1 -0
- package/dist/esm/admin.js +222 -0
- package/dist/esm/admin.js.map +1 -0
- package/dist/esm/auth.d.ts +448 -0
- package/dist/esm/auth.d.ts.map +1 -0
- package/dist/esm/auth.js +1012 -0
- package/dist/esm/auth.js.map +1 -0
- package/dist/esm/cli/gen-types.d.ts +2 -0
- package/dist/esm/cli/gen-types.d.ts.map +1 -0
- package/dist/esm/cli/gen-types.js +100 -0
- package/dist/esm/cli/gen-types.js.map +1 -0
- package/dist/esm/client.d.ts +103 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +139 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/data.d.ts +220 -0
- package/dist/esm/data.d.ts.map +1 -0
- package/dist/esm/data.js +485 -0
- package/dist/esm/data.js.map +1 -0
- package/dist/esm/errors.d.ts +167 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +293 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/files.d.ts +80 -0
- package/dist/esm/files.d.ts.map +1 -0
- package/dist/esm/files.js +162 -0
- package/dist/esm/files.js.map +1 -0
- package/dist/esm/functions.d.ts +66 -0
- package/dist/esm/functions.d.ts.map +1 -0
- package/dist/esm/functions.js +103 -0
- package/dist/esm/functions.js.map +1 -0
- package/dist/esm/http.d.ts +101 -0
- package/dist/esm/http.d.ts.map +1 -0
- package/dist/esm/http.js +245 -0
- package/dist/esm/http.js.map +1 -0
- package/dist/esm/index.d.ts +22 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/manage/access.d.ts +136 -0
- package/dist/esm/manage/access.d.ts.map +1 -0
- package/dist/esm/manage/access.js +155 -0
- package/dist/esm/manage/access.js.map +1 -0
- package/dist/esm/manage/automation.d.ts +106 -0
- package/dist/esm/manage/automation.d.ts.map +1 -0
- package/dist/esm/manage/automation.js +134 -0
- package/dist/esm/manage/automation.js.map +1 -0
- package/dist/esm/manage/base.d.ts +52 -0
- package/dist/esm/manage/base.d.ts.map +1 -0
- package/dist/esm/manage/base.js +63 -0
- package/dist/esm/manage/base.js.map +1 -0
- package/dist/esm/manage/data.d.ts +100 -0
- package/dist/esm/manage/data.d.ts.map +1 -0
- package/dist/esm/manage/data.js +130 -0
- package/dist/esm/manage/data.js.map +1 -0
- package/dist/esm/manage/files.d.ts +45 -0
- package/dist/esm/manage/files.d.ts.map +1 -0
- package/dist/esm/manage/files.js +68 -0
- package/dist/esm/manage/files.js.map +1 -0
- package/dist/esm/manage/functions.d.ts +48 -0
- package/dist/esm/manage/functions.d.ts.map +1 -0
- package/dist/esm/manage/functions.js +57 -0
- package/dist/esm/manage/functions.js.map +1 -0
- package/dist/esm/manage/index.d.ts +76 -0
- package/dist/esm/manage/index.d.ts.map +1 -0
- package/dist/esm/manage/index.js +115 -0
- package/dist/esm/manage/index.js.map +1 -0
- package/dist/esm/manage/lifecycle.d.ts +128 -0
- package/dist/esm/manage/lifecycle.d.ts.map +1 -0
- package/dist/esm/manage/lifecycle.js +161 -0
- package/dist/esm/manage/lifecycle.js.map +1 -0
- package/dist/esm/manage/mail.d.ts +16 -0
- package/dist/esm/manage/mail.d.ts.map +1 -0
- package/dist/esm/manage/mail.js +19 -0
- package/dist/esm/manage/mail.js.map +1 -0
- package/dist/esm/manage/observe.d.ts +149 -0
- package/dist/esm/manage/observe.d.ts.map +1 -0
- package/dist/esm/manage/observe.js +161 -0
- package/dist/esm/manage/observe.js.map +1 -0
- package/dist/esm/manage/realtime.d.ts +52 -0
- package/dist/esm/manage/realtime.d.ts.map +1 -0
- package/dist/esm/manage/realtime.js +66 -0
- package/dist/esm/manage/realtime.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/realtime.d.ts +207 -0
- package/dist/esm/realtime.d.ts.map +1 -0
- package/dist/esm/realtime.js +699 -0
- package/dist/esm/realtime.js.map +1 -0
- package/dist/esm/session-store.d.ts +16 -0
- package/dist/esm/session-store.d.ts.map +1 -0
- package/dist/esm/session-store.js +32 -0
- package/dist/esm/session-store.js.map +1 -0
- package/dist/esm/typegen.d.ts +26 -0
- package/dist/esm/typegen.d.ts.map +1 -0
- package/dist/esm/typegen.js +163 -0
- package/dist/esm/typegen.js.map +1 -0
- package/dist/esm/types.d.ts +178 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +3 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/util.d.ts +27 -0
- package/dist/esm/util.d.ts.map +1 -0
- package/dist/esm/util.js +102 -0
- package/dist/esm/util.js.map +1 -0
- package/dist/esm/version.d.ts +2 -0
- package/dist/esm/version.d.ts.map +1 -0
- package/dist/esm/version.js +2 -0
- package/dist/esm/version.js.map +1 -0
- package/package.json +92 -4
- package/src/admin.ts +311 -0
- package/src/auth.ts +1180 -0
- package/src/cli/gen-types.ts +105 -0
- package/src/client.ts +189 -0
- package/src/data.ts +576 -0
- package/src/errors.ts +330 -0
- package/src/files.ts +208 -0
- package/src/functions.ts +131 -0
- package/src/http.ts +354 -0
- package/src/index.ts +56 -0
- package/src/manage/access.ts +206 -0
- package/src/manage/automation.ts +162 -0
- package/src/manage/base.ts +83 -0
- package/src/manage/data.ts +159 -0
- package/src/manage/files.ts +79 -0
- package/src/manage/functions.ts +69 -0
- package/src/manage/index.ts +132 -0
- package/src/manage/lifecycle.ts +208 -0
- package/src/manage/mail.ts +22 -0
- package/src/manage/observe.ts +226 -0
- package/src/manage/realtime.ts +95 -0
- package/src/realtime.ts +765 -0
- package/src/session-store.ts +36 -0
- package/src/typegen.ts +192 -0
- package/src/types.ts +195 -0
- package/src/util.ts +114 -0
- package/src/version.ts +1 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every failure the client raises is a {@link PawabaseError}.
|
|
3
|
+
*
|
|
4
|
+
* Pawabase answers errors in several shapes: a bare string (most `4xx`), a bare
|
|
5
|
+
* array of validation issues (`422`), an `{error, message, details}` object
|
|
6
|
+
* (functions, flows, the gateway) and Akountz's own `{detail}` bodies. The
|
|
7
|
+
* client normalises all of them into one class hierarchy, so application code
|
|
8
|
+
* checks `error.status`, `error.code` or `instanceof` and never parses a body.
|
|
9
|
+
*/
|
|
10
|
+
/** One field a request body was refused for (`422`). */
|
|
11
|
+
export interface ValidationIssue {
|
|
12
|
+
/** Path to the field, e.g. `["body", "email"]` or `["query", "per_page"]`. */
|
|
13
|
+
loc: Array<string | number>;
|
|
14
|
+
/** The field name without the `body`/`query` prefix, e.g. `email`. */
|
|
15
|
+
field: string;
|
|
16
|
+
message: string;
|
|
17
|
+
type?: string;
|
|
18
|
+
input?: unknown;
|
|
19
|
+
}
|
|
20
|
+
export interface ApiErrorInit {
|
|
21
|
+
status: number;
|
|
22
|
+
code: string;
|
|
23
|
+
message: string;
|
|
24
|
+
details?: unknown;
|
|
25
|
+
body?: unknown;
|
|
26
|
+
requestId?: string | null;
|
|
27
|
+
method?: string;
|
|
28
|
+
url?: string;
|
|
29
|
+
retryAfter?: number | null;
|
|
30
|
+
policy?: string | null;
|
|
31
|
+
cause?: unknown;
|
|
32
|
+
}
|
|
33
|
+
/** The base class of everything this package throws. */
|
|
34
|
+
export declare class PawabaseError extends Error {
|
|
35
|
+
name: string;
|
|
36
|
+
constructor(message: string, options?: {
|
|
37
|
+
cause?: unknown;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/** The server answered with an error status. */
|
|
41
|
+
export declare class ApiError extends PawabaseError {
|
|
42
|
+
name: string;
|
|
43
|
+
/** HTTP status code. */
|
|
44
|
+
readonly status: number;
|
|
45
|
+
/**
|
|
46
|
+
* A stable machine-readable code: the server's own (`rate_limit_exceeded`,
|
|
47
|
+
* `invalid_api_key`, a flow's `raised` code…) or one derived from the status
|
|
48
|
+
* (`unauthenticated`, `forbidden`, `not_found`, `conflict`, `validation_failed`,
|
|
49
|
+
* `rate_limited`, `server_error`).
|
|
50
|
+
*/
|
|
51
|
+
readonly code: string;
|
|
52
|
+
/** Structured extras the server sent (validation issues, flow details). */
|
|
53
|
+
readonly details: unknown;
|
|
54
|
+
/** The parsed response body exactly as received. */
|
|
55
|
+
readonly body: unknown;
|
|
56
|
+
/** The `x-request-id` to quote to an operator; look it up in Studio → Observability. */
|
|
57
|
+
readonly requestId: string | null;
|
|
58
|
+
readonly method: string | undefined;
|
|
59
|
+
readonly url: string | undefined;
|
|
60
|
+
/** Seconds the server asked the caller to wait (`429`, `503`). */
|
|
61
|
+
readonly retryAfter: number | null;
|
|
62
|
+
/** The name of the policy that refused the request (`policy 'x' refused`), when stated. */
|
|
63
|
+
readonly policy: string | null;
|
|
64
|
+
constructor(init: ApiErrorInit);
|
|
65
|
+
/** True when `code` matches. Handy in `catch`: `if (e instanceof ApiError && e.is("not_found"))`. */
|
|
66
|
+
is(code: string): boolean;
|
|
67
|
+
}
|
|
68
|
+
/** `401`: no or invalid credentials. The API key is wrong, or the user is not signed in (or the token expired). */
|
|
69
|
+
export declare class AuthenticationError extends ApiError {
|
|
70
|
+
name: string;
|
|
71
|
+
}
|
|
72
|
+
/** `403`: signed in (or keyed) but not allowed. {@link ApiError.policy} names the refusing policy when stated. */
|
|
73
|
+
export declare class PermissionError extends ApiError {
|
|
74
|
+
name: string;
|
|
75
|
+
}
|
|
76
|
+
/** `404`: no such record, route or file, or a read policy hides it. */
|
|
77
|
+
export declare class NotFoundError extends ApiError {
|
|
78
|
+
name: string;
|
|
79
|
+
}
|
|
80
|
+
/** `409`: a unique value is taken, or the request conflicts with current state. */
|
|
81
|
+
export declare class ConflictError extends ApiError {
|
|
82
|
+
name: string;
|
|
83
|
+
}
|
|
84
|
+
/** `400`/`422`: the request was refused before any policy ran. See {@link issues}. */
|
|
85
|
+
export declare class ValidationError extends ApiError {
|
|
86
|
+
name: string;
|
|
87
|
+
readonly issues: ValidationIssue[];
|
|
88
|
+
constructor(init: ApiErrorInit & {
|
|
89
|
+
issues: ValidationIssue[];
|
|
90
|
+
});
|
|
91
|
+
/** The first message for a field, or `undefined`. Useful for form errors. */
|
|
92
|
+
fieldError(field: string): string | undefined;
|
|
93
|
+
/** All issues by field: `{ email: ["must be a valid email"], … }`. */
|
|
94
|
+
byField(): Record<string, string[]>;
|
|
95
|
+
}
|
|
96
|
+
/** `413`: the body is larger than the gateway or bucket allows. */
|
|
97
|
+
export declare class PayloadTooLargeError extends ApiError {
|
|
98
|
+
name: string;
|
|
99
|
+
}
|
|
100
|
+
/** `429`: rate limited. {@link ApiError.retryAfter} is the wait in seconds. */
|
|
101
|
+
export declare class RateLimitError extends ApiError {
|
|
102
|
+
name: string;
|
|
103
|
+
}
|
|
104
|
+
/** `5xx`: the platform failed. `502`/`503`/`504` are retried automatically for safe requests. */
|
|
105
|
+
export declare class ServerError extends ApiError {
|
|
106
|
+
name: string;
|
|
107
|
+
}
|
|
108
|
+
/** The request never produced a response (offline, DNS, refused, reset). */
|
|
109
|
+
export declare class NetworkError extends PawabaseError {
|
|
110
|
+
name: string;
|
|
111
|
+
readonly method: string | undefined;
|
|
112
|
+
readonly url: string | undefined;
|
|
113
|
+
constructor(message: string, options?: {
|
|
114
|
+
cause?: unknown;
|
|
115
|
+
method?: string;
|
|
116
|
+
url?: string;
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/** The request exceeded its `timeoutMs`. */
|
|
120
|
+
export declare class TimeoutError extends PawabaseError {
|
|
121
|
+
name: string;
|
|
122
|
+
readonly timeoutMs: number;
|
|
123
|
+
constructor(timeoutMs: number, options?: {
|
|
124
|
+
cause?: unknown;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/** The caller's `AbortSignal` fired. */
|
|
128
|
+
export declare class AbortError extends PawabaseError {
|
|
129
|
+
name: string;
|
|
130
|
+
constructor(message?: string, options?: {
|
|
131
|
+
cause?: unknown;
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/** The client was configured or used incorrectly (no URL, a secret key in a browser…). */
|
|
135
|
+
export declare class ConfigError extends PawabaseError {
|
|
136
|
+
name: string;
|
|
137
|
+
}
|
|
138
|
+
/** A realtime operation failed: refused, not connected, or no acknowledgement. */
|
|
139
|
+
export declare class RealtimeError extends PawabaseError {
|
|
140
|
+
name: string;
|
|
141
|
+
readonly code: string;
|
|
142
|
+
constructor(code: string, message: string, options?: {
|
|
143
|
+
cause?: unknown;
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
export declare function isPawabaseError(value: unknown): value is PawabaseError;
|
|
147
|
+
/** Narrow to an {@link ApiError} with a given status. */
|
|
148
|
+
export declare function isApiError(value: unknown, status?: number): value is ApiError;
|
|
149
|
+
/** Parse `Retry-After`: delta seconds or an HTTP date. Returns seconds, or `null`. */
|
|
150
|
+
export declare function parseRetryAfter(value: string | null | undefined, now?: number): number | null;
|
|
151
|
+
/** Turn a failed response into the right error class. */
|
|
152
|
+
export declare function errorFromResponse(input: {
|
|
153
|
+
status: number;
|
|
154
|
+
body: unknown;
|
|
155
|
+
headers?: Headers | undefined;
|
|
156
|
+
method?: string | undefined;
|
|
157
|
+
url?: string | undefined;
|
|
158
|
+
}): ApiError;
|
|
159
|
+
/**
|
|
160
|
+
* A query the client refuses to send because the server would answer it wrongly
|
|
161
|
+
* rather than refuse it: two filters on one field (the server keeps only the last),
|
|
162
|
+
* or an `in` value that contains a comma (the server splits on commas).
|
|
163
|
+
*/
|
|
164
|
+
export declare class InvalidQueryError extends PawabaseError {
|
|
165
|
+
name: string;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every failure the client raises is a {@link PawabaseError}.
|
|
3
|
+
*
|
|
4
|
+
* Pawabase answers errors in several shapes: a bare string (most `4xx`), a bare
|
|
5
|
+
* array of validation issues (`422`), an `{error, message, details}` object
|
|
6
|
+
* (functions, flows, the gateway) and Akountz's own `{detail}` bodies. The
|
|
7
|
+
* client normalises all of them into one class hierarchy, so application code
|
|
8
|
+
* checks `error.status`, `error.code` or `instanceof` and never parses a body.
|
|
9
|
+
*/
|
|
10
|
+
/** The base class of everything this package throws. */
|
|
11
|
+
export class PawabaseError extends Error {
|
|
12
|
+
name = "PawabaseError";
|
|
13
|
+
constructor(message, options) {
|
|
14
|
+
super(message, options);
|
|
15
|
+
Object.setPrototypeOf(this, new.target.prototype);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** The server answered with an error status. */
|
|
19
|
+
export class ApiError extends PawabaseError {
|
|
20
|
+
name = "ApiError";
|
|
21
|
+
/** HTTP status code. */
|
|
22
|
+
status;
|
|
23
|
+
/**
|
|
24
|
+
* A stable machine-readable code: the server's own (`rate_limit_exceeded`,
|
|
25
|
+
* `invalid_api_key`, a flow's `raised` code…) or one derived from the status
|
|
26
|
+
* (`unauthenticated`, `forbidden`, `not_found`, `conflict`, `validation_failed`,
|
|
27
|
+
* `rate_limited`, `server_error`).
|
|
28
|
+
*/
|
|
29
|
+
code;
|
|
30
|
+
/** Structured extras the server sent (validation issues, flow details). */
|
|
31
|
+
details;
|
|
32
|
+
/** The parsed response body exactly as received. */
|
|
33
|
+
body;
|
|
34
|
+
/** The `x-request-id` to quote to an operator; look it up in Studio → Observability. */
|
|
35
|
+
requestId;
|
|
36
|
+
method;
|
|
37
|
+
url;
|
|
38
|
+
/** Seconds the server asked the caller to wait (`429`, `503`). */
|
|
39
|
+
retryAfter;
|
|
40
|
+
/** The name of the policy that refused the request (`policy 'x' refused`), when stated. */
|
|
41
|
+
policy;
|
|
42
|
+
constructor(init) {
|
|
43
|
+
super(init.message, { cause: init.cause });
|
|
44
|
+
this.status = init.status;
|
|
45
|
+
this.code = init.code;
|
|
46
|
+
this.details = init.details;
|
|
47
|
+
this.body = init.body;
|
|
48
|
+
this.requestId = init.requestId ?? null;
|
|
49
|
+
this.method = init.method;
|
|
50
|
+
this.url = init.url;
|
|
51
|
+
this.retryAfter = init.retryAfter ?? null;
|
|
52
|
+
this.policy = init.policy ?? null;
|
|
53
|
+
}
|
|
54
|
+
/** True when `code` matches. Handy in `catch`: `if (e instanceof ApiError && e.is("not_found"))`. */
|
|
55
|
+
is(code) {
|
|
56
|
+
return this.code === code;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** `401`: no or invalid credentials. The API key is wrong, or the user is not signed in (or the token expired). */
|
|
60
|
+
export class AuthenticationError extends ApiError {
|
|
61
|
+
name = "AuthenticationError";
|
|
62
|
+
}
|
|
63
|
+
/** `403`: signed in (or keyed) but not allowed. {@link ApiError.policy} names the refusing policy when stated. */
|
|
64
|
+
export class PermissionError extends ApiError {
|
|
65
|
+
name = "PermissionError";
|
|
66
|
+
}
|
|
67
|
+
/** `404`: no such record, route or file, or a read policy hides it. */
|
|
68
|
+
export class NotFoundError extends ApiError {
|
|
69
|
+
name = "NotFoundError";
|
|
70
|
+
}
|
|
71
|
+
/** `409`: a unique value is taken, or the request conflicts with current state. */
|
|
72
|
+
export class ConflictError extends ApiError {
|
|
73
|
+
name = "ConflictError";
|
|
74
|
+
}
|
|
75
|
+
/** `400`/`422`: the request was refused before any policy ran. See {@link issues}. */
|
|
76
|
+
export class ValidationError extends ApiError {
|
|
77
|
+
name = "ValidationError";
|
|
78
|
+
issues;
|
|
79
|
+
constructor(init) {
|
|
80
|
+
super(init);
|
|
81
|
+
this.issues = init.issues;
|
|
82
|
+
}
|
|
83
|
+
/** The first message for a field, or `undefined`. Useful for form errors. */
|
|
84
|
+
fieldError(field) {
|
|
85
|
+
return this.issues.find((issue) => issue.field === field)?.message;
|
|
86
|
+
}
|
|
87
|
+
/** All issues by field: `{ email: ["must be a valid email"], … }`. */
|
|
88
|
+
byField() {
|
|
89
|
+
const out = {};
|
|
90
|
+
for (const issue of this.issues)
|
|
91
|
+
(out[issue.field] ??= []).push(issue.message);
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/** `413`: the body is larger than the gateway or bucket allows. */
|
|
96
|
+
export class PayloadTooLargeError extends ApiError {
|
|
97
|
+
name = "PayloadTooLargeError";
|
|
98
|
+
}
|
|
99
|
+
/** `429`: rate limited. {@link ApiError.retryAfter} is the wait in seconds. */
|
|
100
|
+
export class RateLimitError extends ApiError {
|
|
101
|
+
name = "RateLimitError";
|
|
102
|
+
}
|
|
103
|
+
/** `5xx`: the platform failed. `502`/`503`/`504` are retried automatically for safe requests. */
|
|
104
|
+
export class ServerError extends ApiError {
|
|
105
|
+
name = "ServerError";
|
|
106
|
+
}
|
|
107
|
+
/** The request never produced a response (offline, DNS, refused, reset). */
|
|
108
|
+
export class NetworkError extends PawabaseError {
|
|
109
|
+
name = "NetworkError";
|
|
110
|
+
method;
|
|
111
|
+
url;
|
|
112
|
+
constructor(message, options) {
|
|
113
|
+
super(message, options);
|
|
114
|
+
this.method = options?.method;
|
|
115
|
+
this.url = options?.url;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/** The request exceeded its `timeoutMs`. */
|
|
119
|
+
export class TimeoutError extends PawabaseError {
|
|
120
|
+
name = "TimeoutError";
|
|
121
|
+
timeoutMs;
|
|
122
|
+
constructor(timeoutMs, options) {
|
|
123
|
+
super(`The request timed out after ${timeoutMs} ms.`, options);
|
|
124
|
+
this.timeoutMs = timeoutMs;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
/** The caller's `AbortSignal` fired. */
|
|
128
|
+
export class AbortError extends PawabaseError {
|
|
129
|
+
name = "AbortError";
|
|
130
|
+
constructor(message = "The request was aborted.", options) {
|
|
131
|
+
super(message, options);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/** The client was configured or used incorrectly (no URL, a secret key in a browser…). */
|
|
135
|
+
export class ConfigError extends PawabaseError {
|
|
136
|
+
name = "ConfigError";
|
|
137
|
+
}
|
|
138
|
+
/** A realtime operation failed: refused, not connected, or no acknowledgement. */
|
|
139
|
+
export class RealtimeError extends PawabaseError {
|
|
140
|
+
name = "RealtimeError";
|
|
141
|
+
code;
|
|
142
|
+
constructor(code, message, options) {
|
|
143
|
+
super(message, options);
|
|
144
|
+
this.code = code;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export function isPawabaseError(value) {
|
|
148
|
+
return value instanceof PawabaseError;
|
|
149
|
+
}
|
|
150
|
+
/** Narrow to an {@link ApiError} with a given status. */
|
|
151
|
+
export function isApiError(value, status) {
|
|
152
|
+
return value instanceof ApiError && (status === undefined || value.status === status);
|
|
153
|
+
}
|
|
154
|
+
const STATUS_CODES = {
|
|
155
|
+
400: "bad_request",
|
|
156
|
+
401: "unauthenticated",
|
|
157
|
+
403: "forbidden",
|
|
158
|
+
404: "not_found",
|
|
159
|
+
405: "method_not_allowed",
|
|
160
|
+
409: "conflict",
|
|
161
|
+
413: "payload_too_large",
|
|
162
|
+
415: "unsupported_media_type",
|
|
163
|
+
422: "validation_failed",
|
|
164
|
+
429: "rate_limited",
|
|
165
|
+
};
|
|
166
|
+
function isRecord(value) {
|
|
167
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
168
|
+
}
|
|
169
|
+
function toIssues(items) {
|
|
170
|
+
return items.map((item) => {
|
|
171
|
+
if (isRecord(item)) {
|
|
172
|
+
const loc = Array.isArray(item["loc"]) ? item["loc"] : [];
|
|
173
|
+
const field = typeof item["field"] === "string"
|
|
174
|
+
? item["field"]
|
|
175
|
+
: loc.filter((part) => part !== "body" && part !== "query" && part !== "path").join(".");
|
|
176
|
+
const message = String(item["msg"] ?? item["message"] ?? "is invalid");
|
|
177
|
+
return {
|
|
178
|
+
loc,
|
|
179
|
+
field,
|
|
180
|
+
message,
|
|
181
|
+
...(typeof item["type"] === "string" ? { type: item["type"] } : {}),
|
|
182
|
+
...("input" in item ? { input: item["input"] } : {}),
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
return { loc: [], field: "", message: String(item) };
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
function summarise(issues) {
|
|
189
|
+
if (!issues.length)
|
|
190
|
+
return "The request was refused.";
|
|
191
|
+
return issues.map((i) => (i.field ? `${i.field}: ${i.message}` : i.message)).join("; ");
|
|
192
|
+
}
|
|
193
|
+
/** Parse `Retry-After`: delta seconds or an HTTP date. Returns seconds, or `null`. */
|
|
194
|
+
export function parseRetryAfter(value, now = Date.now()) {
|
|
195
|
+
if (!value)
|
|
196
|
+
return null;
|
|
197
|
+
const seconds = Number(value);
|
|
198
|
+
if (Number.isFinite(seconds) && seconds >= 0)
|
|
199
|
+
return seconds;
|
|
200
|
+
const date = Date.parse(value);
|
|
201
|
+
if (Number.isNaN(date))
|
|
202
|
+
return null;
|
|
203
|
+
return Math.max(0, (date - now) / 1000);
|
|
204
|
+
}
|
|
205
|
+
/** Turn a failed response into the right error class. */
|
|
206
|
+
export function errorFromResponse(input) {
|
|
207
|
+
const { status, body } = input;
|
|
208
|
+
const requestId = input.headers?.get("x-request-id") ?? null;
|
|
209
|
+
let retryAfter = parseRetryAfter(input.headers?.get("retry-after"));
|
|
210
|
+
let message = "";
|
|
211
|
+
let code = STATUS_CODES[status] ?? (status >= 500 ? "server_error" : "http_error");
|
|
212
|
+
let details;
|
|
213
|
+
let issues = null;
|
|
214
|
+
if (typeof body === "string") {
|
|
215
|
+
message = body.trim();
|
|
216
|
+
}
|
|
217
|
+
else if (Array.isArray(body)) {
|
|
218
|
+
issues = toIssues(body);
|
|
219
|
+
message = summarise(issues);
|
|
220
|
+
details = issues;
|
|
221
|
+
}
|
|
222
|
+
else if (isRecord(body)) {
|
|
223
|
+
const detail = body["detail"];
|
|
224
|
+
const named = body["error"];
|
|
225
|
+
if (typeof named === "string")
|
|
226
|
+
code = named;
|
|
227
|
+
else if (typeof body["code"] === "string")
|
|
228
|
+
code = body["code"];
|
|
229
|
+
if (typeof body["message"] === "string")
|
|
230
|
+
message = body["message"];
|
|
231
|
+
else if (typeof detail === "string")
|
|
232
|
+
message = detail;
|
|
233
|
+
if (Array.isArray(detail)) {
|
|
234
|
+
issues = toIssues(detail);
|
|
235
|
+
message ||= summarise(issues);
|
|
236
|
+
details = issues;
|
|
237
|
+
}
|
|
238
|
+
else if (Array.isArray(body["details"])) {
|
|
239
|
+
details = body["details"];
|
|
240
|
+
const asIssues = toIssues(body["details"]);
|
|
241
|
+
if (asIssues.every((issue) => issue.field))
|
|
242
|
+
issues = asIssues;
|
|
243
|
+
message ||= summarise(asIssues);
|
|
244
|
+
}
|
|
245
|
+
else if ("details" in body) {
|
|
246
|
+
details = body["details"];
|
|
247
|
+
}
|
|
248
|
+
if (retryAfter === null && typeof body["retry_after"] === "number")
|
|
249
|
+
retryAfter = body["retry_after"];
|
|
250
|
+
}
|
|
251
|
+
if (!message)
|
|
252
|
+
message = `Request failed with status ${status}.`;
|
|
253
|
+
const policyMatch = /policy '([^']+)' refused/.exec(message);
|
|
254
|
+
const init = {
|
|
255
|
+
status,
|
|
256
|
+
code,
|
|
257
|
+
message,
|
|
258
|
+
details,
|
|
259
|
+
body,
|
|
260
|
+
requestId,
|
|
261
|
+
method: input.method,
|
|
262
|
+
url: input.url,
|
|
263
|
+
retryAfter,
|
|
264
|
+
policy: policyMatch?.[1] ?? null,
|
|
265
|
+
};
|
|
266
|
+
if (status === 422 || (status === 400 && issues)) {
|
|
267
|
+
return new ValidationError({ ...init, issues: issues ?? [] });
|
|
268
|
+
}
|
|
269
|
+
if (status === 401)
|
|
270
|
+
return new AuthenticationError(init);
|
|
271
|
+
if (status === 403)
|
|
272
|
+
return new PermissionError(init);
|
|
273
|
+
if (status === 404)
|
|
274
|
+
return new NotFoundError(init);
|
|
275
|
+
if (status === 409)
|
|
276
|
+
return new ConflictError(init);
|
|
277
|
+
if (status === 413)
|
|
278
|
+
return new PayloadTooLargeError(init);
|
|
279
|
+
if (status === 429)
|
|
280
|
+
return new RateLimitError(init);
|
|
281
|
+
if (status >= 500)
|
|
282
|
+
return new ServerError(init);
|
|
283
|
+
return new ApiError(init);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* A query the client refuses to send because the server would answer it wrongly
|
|
287
|
+
* rather than refuse it: two filters on one field (the server keeps only the last),
|
|
288
|
+
* or an `in` value that contains a comma (the server splits on commas).
|
|
289
|
+
*/
|
|
290
|
+
export class InvalidQueryError extends PawabaseError {
|
|
291
|
+
name = "InvalidQueryError";
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA2BH,wDAAwD;AACxD,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,GAAG,eAAe,CAAC;IAChC,YAAY,OAAe,EAAE,OAA6B;QACxD,KAAK,CAAC,OAAO,EAAE,OAAuB,CAAC,CAAC;QACxC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;CACF;AAED,gDAAgD;AAChD,MAAM,OAAO,QAAS,SAAQ,aAAa;IAChC,IAAI,GAAG,UAAU,CAAC;IAC3B,wBAAwB;IACf,MAAM,CAAS;IACxB;;;;;OAKG;IACM,IAAI,CAAS;IACtB,2EAA2E;IAClE,OAAO,CAAU;IAC1B,oDAAoD;IAC3C,IAAI,CAAU;IACvB,wFAAwF;IAC/E,SAAS,CAAgB;IACzB,MAAM,CAAqB;IAC3B,GAAG,CAAqB;IACjC,kEAAkE;IACzD,UAAU,CAAgB;IACnC,2FAA2F;IAClF,MAAM,CAAgB;IAE/B,YAAY,IAAkB;QAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,qGAAqG;IACrG,EAAE,CAAC,IAAY;QACb,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;IAC5B,CAAC;CACF;AAED,mHAAmH;AACnH,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IACtC,IAAI,GAAG,qBAAqB,CAAC;CACvC;AAED,kHAAkH;AAClH,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAClC,IAAI,GAAG,iBAAiB,CAAC;CACnC;AAED,uEAAuE;AACvE,MAAM,OAAO,aAAc,SAAQ,QAAQ;IAChC,IAAI,GAAG,eAAe,CAAC;CACjC;AAED,mFAAmF;AACnF,MAAM,OAAO,aAAc,SAAQ,QAAQ;IAChC,IAAI,GAAG,eAAe,CAAC;CACjC;AAED,sFAAsF;AACtF,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAClC,IAAI,GAAG,iBAAiB,CAAC;IACzB,MAAM,CAAoB;IACnC,YAAY,IAAkD;QAC5D,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC5B,CAAC;IACD,6EAA6E;IAC7E,UAAU,CAAC,KAAa;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,OAAO,CAAC;IACrE,CAAC;IACD,sEAAsE;IACtE,OAAO;QACL,MAAM,GAAG,GAA6B,EAAE,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM;YAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/E,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAED,mEAAmE;AACnE,MAAM,OAAO,oBAAqB,SAAQ,QAAQ;IACvC,IAAI,GAAG,sBAAsB,CAAC;CACxC;AAED,+EAA+E;AAC/E,MAAM,OAAO,cAAe,SAAQ,QAAQ;IACjC,IAAI,GAAG,gBAAgB,CAAC;CAClC;AAED,iGAAiG;AACjG,MAAM,OAAO,WAAY,SAAQ,QAAQ;IAC9B,IAAI,GAAG,aAAa,CAAC;CAC/B;AAED,4EAA4E;AAC5E,MAAM,OAAO,YAAa,SAAQ,aAAa;IACpC,IAAI,GAAG,cAAc,CAAC;IACtB,MAAM,CAAqB;IAC3B,GAAG,CAAqB;IACjC,YAAY,OAAe,EAAE,OAA4D;QACvF,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,CAAC;QAC9B,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG,CAAC;IAC1B,CAAC;CACF;AAED,4CAA4C;AAC5C,MAAM,OAAO,YAAa,SAAQ,aAAa;IACpC,IAAI,GAAG,cAAc,CAAC;IACtB,SAAS,CAAS;IAC3B,YAAY,SAAiB,EAAE,OAA6B;QAC1D,KAAK,CAAC,+BAA+B,SAAS,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/D,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,wCAAwC;AACxC,MAAM,OAAO,UAAW,SAAQ,aAAa;IAClC,IAAI,GAAG,YAAY,CAAC;IAC7B,YAAY,OAAO,GAAG,0BAA0B,EAAE,OAA6B;QAC7E,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC1B,CAAC;CACF;AAED,0FAA0F;AAC1F,MAAM,OAAO,WAAY,SAAQ,aAAa;IACnC,IAAI,GAAG,aAAa,CAAC;CAC/B;AAED,kFAAkF;AAClF,MAAM,OAAO,aAAc,SAAQ,aAAa;IACrC,IAAI,GAAG,eAAe,CAAC;IACvB,IAAI,CAAS;IACtB,YAAY,IAAY,EAAE,OAAe,EAAE,OAA6B;QACtE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,KAAK,YAAY,aAAa,CAAC;AACxC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,MAAe;IACxD,OAAO,KAAK,YAAY,QAAQ,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,YAAY,GAA2B;IAC3C,GAAG,EAAE,aAAa;IAClB,GAAG,EAAE,iBAAiB;IACtB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,WAAW;IAChB,GAAG,EAAE,oBAAoB;IACzB,GAAG,EAAE,UAAU;IACf,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,wBAAwB;IAC7B,GAAG,EAAE,mBAAmB;IACxB,GAAG,EAAE,cAAc;CACpB,CAAC;AAEF,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAgB;IAChC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAA4B,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,MAAM,KAAK,GACT,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,QAAQ;gBAC/B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;gBACf,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7F,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,CAAC;YACvE,OAAO;gBACL,GAAG;gBACH,KAAK;gBACL,OAAO;gBACP,GAAG,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrD,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,MAAyB;IAC1C,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,0BAA0B,CAAC;IACtD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1F,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAAC,KAAgC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAChF,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC9B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,iBAAiB,CAAC,KAMjC;IACC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC;IAC7D,IAAI,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IACpE,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IACnF,IAAI,OAAgB,CAAC;IACrB,IAAI,MAAM,GAA6B,IAAI,CAAC;IAE5C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;SAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;SAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,IAAI,GAAG,KAAK,CAAC;aACvC,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ;YAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAW,CAAC;QACzE,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,QAAQ;YAAE,OAAO,GAAG,IAAI,CAAC,SAAS,CAAW,CAAC;aACxE,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,GAAG,MAAM,CAAC;QACtD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC1B,OAAO,KAAK,SAAS,CAAC,MAAM,CAAC,CAAC;YAC9B,OAAO,GAAG,MAAM,CAAC;QACnB,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YAC1C,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAc,CAAC,CAAC;YACxD,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,MAAM,GAAG,QAAQ,CAAC;YAC9D,OAAO,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YAC7B,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ;YAAE,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;IACvG,CAAC;IACD,IAAI,CAAC,OAAO;QAAE,OAAO,GAAG,8BAA8B,MAAM,GAAG,CAAC;IAEhE,MAAM,WAAW,GAAG,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAiB;QACzB,MAAM;QACN,IAAI;QACJ,OAAO;QACP,OAAO;QACP,IAAI;QACJ,SAAS;QACT,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,UAAU;QACV,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;KACjC,CAAC;IAEF,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC;QACjD,OAAO,IAAI,eAAe,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACzD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IACrD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;IACpD,IAAI,MAAM,IAAI,GAAG;QAAE,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,aAAa;IACzC,IAAI,GAAG,mBAAmB,CAAC;CACrC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import type { HttpClient } from "./http.js";
|
|
2
|
+
import type { FileEntry, FileListing, SignedUrl, StorageBucket, StoredObject } from "./types.js";
|
|
3
|
+
/** Anything an upload accepts. Streams upload without buffering but cannot be retried. */
|
|
4
|
+
export type UploadBody = Blob | ArrayBuffer | ArrayBufferView | string | ReadableStream<Uint8Array> | URLSearchParams | FormData;
|
|
5
|
+
export interface UploadOptions {
|
|
6
|
+
/** The object's content type. Default: the `Blob`'s own type, else `application/octet-stream`. */
|
|
7
|
+
contentType?: string;
|
|
8
|
+
signal?: AbortSignal | null | undefined;
|
|
9
|
+
timeoutMs?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface TransferOptions {
|
|
12
|
+
signal?: AbortSignal | null | undefined;
|
|
13
|
+
timeoutMs?: number;
|
|
14
|
+
}
|
|
15
|
+
/** Storage buckets declared in the project. */
|
|
16
|
+
export declare class StorageClient {
|
|
17
|
+
private readonly http;
|
|
18
|
+
constructor(http: HttpClient);
|
|
19
|
+
/** The buckets this environment has. */
|
|
20
|
+
listBuckets(): Promise<StorageBucket[]>;
|
|
21
|
+
/** Work with one bucket. */
|
|
22
|
+
from(bucket: string): BucketClient;
|
|
23
|
+
}
|
|
24
|
+
export declare class BucketClient {
|
|
25
|
+
private readonly http;
|
|
26
|
+
readonly name: string;
|
|
27
|
+
constructor(http: HttpClient, name: string);
|
|
28
|
+
private object;
|
|
29
|
+
/**
|
|
30
|
+
* Upload (or overwrite) an object. The bucket's policy decides who may, and its
|
|
31
|
+
* `accepts` and `max_bytes` limits apply: a refused type or size is an error, not a truncated file.
|
|
32
|
+
*/
|
|
33
|
+
upload(key: string, body: UploadBody, options?: UploadOptions): Promise<StoredObject>;
|
|
34
|
+
/** The object's bytes. */
|
|
35
|
+
download(key: string, options?: TransferOptions): Promise<Blob>;
|
|
36
|
+
/** The object as text. */
|
|
37
|
+
downloadText(key: string, options?: TransferOptions): Promise<string>;
|
|
38
|
+
/** The object parsed as JSON. */
|
|
39
|
+
downloadJson<T = unknown>(key: string, options?: TransferOptions): Promise<T>;
|
|
40
|
+
/** The object as a stream, for large files. */
|
|
41
|
+
downloadStream(key: string, options?: TransferOptions): Promise<ReadableStream<Uint8Array>>;
|
|
42
|
+
/** The raw response, for its headers (`etag`, `content-type`, `content-length`). */
|
|
43
|
+
downloadResponse(key: string, options?: TransferOptions): Promise<Response>;
|
|
44
|
+
/** Delete an object. A missing object (or one you may not see) is a `NotFoundError`. */
|
|
45
|
+
remove(key: string, options?: TransferOptions): Promise<void>;
|
|
46
|
+
/** One page of objects below a prefix. Pass the returned `cursor` back to continue. */
|
|
47
|
+
list(options?: {
|
|
48
|
+
prefix?: string;
|
|
49
|
+
cursor?: string;
|
|
50
|
+
limit?: number;
|
|
51
|
+
} & TransferOptions): Promise<FileListing>;
|
|
52
|
+
/** Every object below a prefix, page by page. */
|
|
53
|
+
listAll(options?: {
|
|
54
|
+
prefix?: string;
|
|
55
|
+
pageSize?: number;
|
|
56
|
+
} & TransferOptions): AsyncGenerator<FileEntry, void, void>;
|
|
57
|
+
/**
|
|
58
|
+
* A URL for an object in a **public** bucket, usable in `<img src>`. The publishable key
|
|
59
|
+
* travels in the URL (it is meant to be public); a secret key is refused.
|
|
60
|
+
*/
|
|
61
|
+
getPublicUrl(key: string): string;
|
|
62
|
+
/** A temporary URL that lets anyone with it read the object, with no key. Needs read access yourself. */
|
|
63
|
+
createSignedUrl(key: string, options?: {
|
|
64
|
+
expiresIn?: number;
|
|
65
|
+
} & TransferOptions): Promise<SignedUrl>;
|
|
66
|
+
/**
|
|
67
|
+
* A temporary URL that lets anyone with it upload one object, pinned to a content type
|
|
68
|
+
* and size. Hand it to a browser or device; it then calls {@link uploadToSignedUrl}.
|
|
69
|
+
*/
|
|
70
|
+
createSignedUploadUrl(key: string, options?: {
|
|
71
|
+
expiresIn?: number;
|
|
72
|
+
contentType?: string;
|
|
73
|
+
maxBytes?: number;
|
|
74
|
+
} & TransferOptions): Promise<SignedUrl>;
|
|
75
|
+
private sign;
|
|
76
|
+
/** Upload through a signed upload URL. Sends no API key or token: the URL is the credential. */
|
|
77
|
+
uploadToSignedUrl(url: string, body: UploadBody, options?: UploadOptions): Promise<StoredObject>;
|
|
78
|
+
private opts;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"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"}
|