@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
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BucketClient = exports.StorageClient = void 0;
|
|
4
|
+
const errors_js_1 = require("./errors.js");
|
|
5
|
+
const util_js_1 = require("./util.js");
|
|
6
|
+
function cleanKey(key) {
|
|
7
|
+
const cleaned = key.replace(/^\/+/, "");
|
|
8
|
+
if (!cleaned)
|
|
9
|
+
throw new errors_js_1.ConfigError("A storage key cannot be empty.");
|
|
10
|
+
return cleaned;
|
|
11
|
+
}
|
|
12
|
+
/** Storage buckets declared in the project. */
|
|
13
|
+
class StorageClient {
|
|
14
|
+
http;
|
|
15
|
+
constructor(http) {
|
|
16
|
+
this.http = http;
|
|
17
|
+
}
|
|
18
|
+
/** The buckets this environment has. */
|
|
19
|
+
async listBuckets() {
|
|
20
|
+
return (await this.http.request({ path: "/storage/v1/buckets" })).data;
|
|
21
|
+
}
|
|
22
|
+
/** Work with one bucket. */
|
|
23
|
+
from(bucket) {
|
|
24
|
+
return new BucketClient(this.http, bucket);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.StorageClient = StorageClient;
|
|
28
|
+
class BucketClient {
|
|
29
|
+
http;
|
|
30
|
+
name;
|
|
31
|
+
constructor(http, name) {
|
|
32
|
+
this.http = http;
|
|
33
|
+
this.name = name;
|
|
34
|
+
}
|
|
35
|
+
object(key) {
|
|
36
|
+
return `/storage/v1/object/${encodeURIComponent(this.name)}/${(0, util_js_1.encodePath)(cleanKey(key))}`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Upload (or overwrite) an object. The bucket's policy decides who may, and its
|
|
40
|
+
* `accepts` and `max_bytes` limits apply: a refused type or size is an error, not a truncated file.
|
|
41
|
+
*/
|
|
42
|
+
upload(key, body, options = {}) {
|
|
43
|
+
const declared = options.contentType ??
|
|
44
|
+
(typeof Blob !== "undefined" && body instanceof Blob && body.type ? body.type : undefined) ??
|
|
45
|
+
(typeof body === "string" ? "text/plain; charset=utf-8" : "application/octet-stream");
|
|
46
|
+
const multipart = typeof FormData !== "undefined" && body instanceof FormData;
|
|
47
|
+
return this.http.request({
|
|
48
|
+
method: "PUT",
|
|
49
|
+
path: this.object(key),
|
|
50
|
+
body,
|
|
51
|
+
...(multipart ? {} : { headers: { "content-type": declared } }),
|
|
52
|
+
signal: options.signal,
|
|
53
|
+
...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),
|
|
54
|
+
// Replacing an object with itself is safe to repeat.
|
|
55
|
+
idempotent: true,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/** The object's bytes. */
|
|
59
|
+
download(key, options = {}) {
|
|
60
|
+
return this.http.request({ path: this.object(key), parse: "blob", headers: { accept: "*/*" }, ...this.opts(options) });
|
|
61
|
+
}
|
|
62
|
+
/** The object as text. */
|
|
63
|
+
downloadText(key, options = {}) {
|
|
64
|
+
return this.http.request({ path: this.object(key), parse: "text", headers: { accept: "*/*" }, ...this.opts(options) });
|
|
65
|
+
}
|
|
66
|
+
/** The object parsed as JSON. */
|
|
67
|
+
async downloadJson(key, options = {}) {
|
|
68
|
+
return JSON.parse(await this.downloadText(key, options));
|
|
69
|
+
}
|
|
70
|
+
/** The object as a stream, for large files. */
|
|
71
|
+
async downloadStream(key, options = {}) {
|
|
72
|
+
const stream = await this.http.request({
|
|
73
|
+
path: this.object(key),
|
|
74
|
+
parse: "stream",
|
|
75
|
+
headers: { accept: "*/*" },
|
|
76
|
+
...this.opts(options),
|
|
77
|
+
});
|
|
78
|
+
if (!stream)
|
|
79
|
+
throw new errors_js_1.ConfigError("The response had no body.");
|
|
80
|
+
return stream;
|
|
81
|
+
}
|
|
82
|
+
/** The raw response, for its headers (`etag`, `content-type`, `content-length`). */
|
|
83
|
+
downloadResponse(key, options = {}) {
|
|
84
|
+
return this.http.request({ path: this.object(key), parse: "response", headers: { accept: "*/*" }, ...this.opts(options) });
|
|
85
|
+
}
|
|
86
|
+
/** Delete an object. A missing object (or one you may not see) is a `NotFoundError`. */
|
|
87
|
+
async remove(key, options = {}) {
|
|
88
|
+
await this.http.request({ method: "DELETE", path: this.object(key), ...this.opts(options) });
|
|
89
|
+
}
|
|
90
|
+
/** One page of objects below a prefix. Pass the returned `cursor` back to continue. */
|
|
91
|
+
list(options = {}) {
|
|
92
|
+
return this.http.request({
|
|
93
|
+
path: `/storage/v1/list/${encodeURIComponent(this.name)}`,
|
|
94
|
+
query: { prefix: options.prefix, cursor: options.cursor, limit: options.limit },
|
|
95
|
+
...this.opts(options),
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
/** Every object below a prefix, page by page. */
|
|
99
|
+
async *listAll(options = {}) {
|
|
100
|
+
let cursor = "";
|
|
101
|
+
do {
|
|
102
|
+
const page = await this.list({
|
|
103
|
+
...(options.prefix !== undefined ? { prefix: options.prefix } : {}),
|
|
104
|
+
...(cursor ? { cursor } : {}),
|
|
105
|
+
...(options.pageSize !== undefined ? { limit: options.pageSize } : {}),
|
|
106
|
+
signal: options.signal,
|
|
107
|
+
});
|
|
108
|
+
yield* page.files;
|
|
109
|
+
cursor = page.cursor;
|
|
110
|
+
} while (cursor);
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* A URL for an object in a **public** bucket, usable in `<img src>`. The publishable key
|
|
114
|
+
* travels in the URL (it is meant to be public); a secret key is refused.
|
|
115
|
+
*/
|
|
116
|
+
getPublicUrl(key) {
|
|
117
|
+
const apiKey = this.http.config.apiKey;
|
|
118
|
+
if ((0, util_js_1.isSecretKey)(apiKey)) {
|
|
119
|
+
throw new errors_js_1.ConfigError("Refusing to put a secret key in a URL. Use a publishable key, or createSignedUrl().");
|
|
120
|
+
}
|
|
121
|
+
return `${this.http.url(this.object(key))}?apikey=${encodeURIComponent(apiKey)}`;
|
|
122
|
+
}
|
|
123
|
+
/** A temporary URL that lets anyone with it read the object, with no key. Needs read access yourself. */
|
|
124
|
+
createSignedUrl(key, options = {}) {
|
|
125
|
+
return this.sign(key, { method: "GET", expires_in: options.expiresIn ?? 300 }, options);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* A temporary URL that lets anyone with it upload one object, pinned to a content type
|
|
129
|
+
* and size. Hand it to a browser or device; it then calls {@link uploadToSignedUrl}.
|
|
130
|
+
*/
|
|
131
|
+
createSignedUploadUrl(key, options = {}) {
|
|
132
|
+
return this.sign(key, {
|
|
133
|
+
method: "PUT",
|
|
134
|
+
expires_in: options.expiresIn ?? 300,
|
|
135
|
+
...(options.contentType ? { content_type: options.contentType } : {}),
|
|
136
|
+
...(options.maxBytes ? { max_bytes: options.maxBytes } : {}),
|
|
137
|
+
}, options);
|
|
138
|
+
}
|
|
139
|
+
sign(key, body, options) {
|
|
140
|
+
return this.http.request({
|
|
141
|
+
method: "POST",
|
|
142
|
+
path: `/storage/v1/sign/${encodeURIComponent(this.name)}/${(0, util_js_1.encodePath)(cleanKey(key))}`,
|
|
143
|
+
body,
|
|
144
|
+
idempotent: true,
|
|
145
|
+
...this.opts(options),
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/** Upload through a signed upload URL. Sends no API key or token: the URL is the credential. */
|
|
149
|
+
async uploadToSignedUrl(url, body, options = {}) {
|
|
150
|
+
const declared = options.contentType ??
|
|
151
|
+
(typeof Blob !== "undefined" && body instanceof Blob && body.type ? body.type : "application/octet-stream");
|
|
152
|
+
return this.http.request({
|
|
153
|
+
method: "PUT",
|
|
154
|
+
path: "",
|
|
155
|
+
absoluteUrl: url,
|
|
156
|
+
body,
|
|
157
|
+
headers: { "content-type": declared },
|
|
158
|
+
signal: options.signal,
|
|
159
|
+
...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
opts(options) {
|
|
163
|
+
return { signal: options.signal, ...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}) };
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
exports.BucketClient = BucketClient;
|
|
167
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { HttpClient } from "./http.js";
|
|
2
|
+
import type { QueryValue } from "./util.js";
|
|
3
|
+
export interface CallOptions {
|
|
4
|
+
headers?: Record<string, string>;
|
|
5
|
+
signal?: AbortSignal | null | undefined;
|
|
6
|
+
timeoutMs?: number;
|
|
7
|
+
/** Allow retrying a `POST` after a network failure. Only when running it twice is harmless. */
|
|
8
|
+
idempotent?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface FetchOptions extends CallOptions {
|
|
11
|
+
method?: string;
|
|
12
|
+
query?: Record<string, QueryValue | QueryValue[]>;
|
|
13
|
+
/** An object is sent as JSON; strings, `Blob`, `FormData`, buffers and streams as they are. */
|
|
14
|
+
body?: unknown;
|
|
15
|
+
/** Run the function deployed on this branch (`x-pawabase-branch`). */
|
|
16
|
+
branch?: string;
|
|
17
|
+
}
|
|
18
|
+
/** Functions you wrote in your project's code, invoked at `/functions/v1/<name>`. */
|
|
19
|
+
export declare class FunctionsClient {
|
|
20
|
+
private readonly http;
|
|
21
|
+
constructor(http: HttpClient);
|
|
22
|
+
/**
|
|
23
|
+
* Call a function and return what it returned. The API key needs the
|
|
24
|
+
* `functions:invoke` scope (an unrestricted key has it).
|
|
25
|
+
*/
|
|
26
|
+
invoke<T = unknown>(name: string, input?: unknown, options?: CallOptions): Promise<T>;
|
|
27
|
+
/**
|
|
28
|
+
* Call an HTTP function (`functions/<name>/index.ts`) with any method and path, and get its `Response` as it is — status, headers
|
|
29
|
+
* and a streaming body. An error status is returned, not thrown; the API key and the signed-in user's token are sent as for any call.
|
|
30
|
+
*
|
|
31
|
+
* ```ts
|
|
32
|
+
* const res = await pawabase.functions.fetch("orders", "/42/items", { method: "POST", body: { sku: "A1" } });
|
|
33
|
+
* if (res.ok) console.log(await res.json());
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
fetch(name: string, path?: string, options?: FetchOptions): Promise<Response>;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Flows with an HTTP trigger that has no path, invoked at `/flows/v1/<name>`.
|
|
40
|
+
* (Flows bound to a path are reached as routes, see {@link RoutesClient}.)
|
|
41
|
+
*/
|
|
42
|
+
export declare class FlowsClient {
|
|
43
|
+
private readonly http;
|
|
44
|
+
constructor(http: HttpClient);
|
|
45
|
+
/**
|
|
46
|
+
* Run a flow and return its response body: whatever its `response.return` block sends,
|
|
47
|
+
* or `{ data: … }` with the flow's result when it has none.
|
|
48
|
+
*/
|
|
49
|
+
run<T = unknown>(name: string, input?: unknown, options?: CallOptions): Promise<T>;
|
|
50
|
+
}
|
|
51
|
+
export interface RouteOptions extends CallOptions {
|
|
52
|
+
query?: Record<string, QueryValue | QueryValue[]>;
|
|
53
|
+
body?: unknown;
|
|
54
|
+
}
|
|
55
|
+
/** Custom routes you defined, served under `/rest/v1/<path>`. */
|
|
56
|
+
export declare class RoutesClient {
|
|
57
|
+
private readonly http;
|
|
58
|
+
constructor(http: HttpClient);
|
|
59
|
+
call<T = unknown>(method: string, path: string, options?: RouteOptions): Promise<T>;
|
|
60
|
+
get<T = unknown>(path: string, options?: Omit<RouteOptions, "body">): Promise<T>;
|
|
61
|
+
post<T = unknown>(path: string, body?: unknown, options?: Omit<RouteOptions, "body">): Promise<T>;
|
|
62
|
+
put<T = unknown>(path: string, body?: unknown, options?: Omit<RouteOptions, "body">): Promise<T>;
|
|
63
|
+
patch<T = unknown>(path: string, body?: unknown, options?: Omit<RouteOptions, "body">): Promise<T>;
|
|
64
|
+
delete<T = unknown>(path: string, options?: Omit<RouteOptions, "body">): Promise<T>;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=functions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.d.ts","sourceRoot":"","sources":["../../src/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RoutesClient = exports.FlowsClient = exports.FunctionsClient = void 0;
|
|
4
|
+
const util_js_1 = require("./util.js");
|
|
5
|
+
function pass(options) {
|
|
6
|
+
return {
|
|
7
|
+
...(options.headers ? { headers: options.headers } : {}),
|
|
8
|
+
signal: options.signal,
|
|
9
|
+
...(options.timeoutMs !== undefined ? { timeoutMs: options.timeoutMs } : {}),
|
|
10
|
+
...(options.idempotent !== undefined ? { idempotent: options.idempotent } : {}),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
/** Functions you wrote in your project's code, invoked at `/functions/v1/<name>`. */
|
|
14
|
+
class FunctionsClient {
|
|
15
|
+
http;
|
|
16
|
+
constructor(http) {
|
|
17
|
+
this.http = http;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Call a function and return what it returned. The API key needs the
|
|
21
|
+
* `functions:invoke` scope (an unrestricted key has it).
|
|
22
|
+
*/
|
|
23
|
+
async invoke(name, input, options = {}) {
|
|
24
|
+
const body = await this.http.request({
|
|
25
|
+
method: "POST",
|
|
26
|
+
path: `/functions/v1/${(0, util_js_1.encodePath)(name)}`,
|
|
27
|
+
body: input === undefined ? undefined : input,
|
|
28
|
+
...pass(options),
|
|
29
|
+
});
|
|
30
|
+
return body?.data;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Call an HTTP function (`functions/<name>/index.ts`) with any method and path, and get its `Response` as it is — status, headers
|
|
34
|
+
* and a streaming body. An error status is returned, not thrown; the API key and the signed-in user's token are sent as for any call.
|
|
35
|
+
*
|
|
36
|
+
* ```ts
|
|
37
|
+
* const res = await pawabase.functions.fetch("orders", "/42/items", { method: "POST", body: { sku: "A1" } });
|
|
38
|
+
* if (res.ok) console.log(await res.json());
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
fetch(name, path = "/", options = {}) {
|
|
42
|
+
const rest = path === "/" || path === "" ? "" : path.startsWith("/") ? path : `/${path}`;
|
|
43
|
+
return this.http.send({
|
|
44
|
+
method: options.method ?? (options.body === undefined ? "GET" : "POST"),
|
|
45
|
+
path: `/functions/v1/${(0, util_js_1.encodePath)(name)}${rest}`,
|
|
46
|
+
...(options.query ? { query: options.query } : {}),
|
|
47
|
+
...(options.body !== undefined ? { body: options.body } : {}),
|
|
48
|
+
...pass({ ...options, headers: { ...(options.branch ? { "x-pawabase-branch": options.branch } : {}), ...options.headers } }),
|
|
49
|
+
throwOnError: false,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.FunctionsClient = FunctionsClient;
|
|
54
|
+
/**
|
|
55
|
+
* Flows with an HTTP trigger that has no path, invoked at `/flows/v1/<name>`.
|
|
56
|
+
* (Flows bound to a path are reached as routes, see {@link RoutesClient}.)
|
|
57
|
+
*/
|
|
58
|
+
class FlowsClient {
|
|
59
|
+
http;
|
|
60
|
+
constructor(http) {
|
|
61
|
+
this.http = http;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Run a flow and return its response body: whatever its `response.return` block sends,
|
|
65
|
+
* or `{ data: … }` with the flow's result when it has none.
|
|
66
|
+
*/
|
|
67
|
+
run(name, input, options = {}) {
|
|
68
|
+
return this.http.request({
|
|
69
|
+
method: "POST",
|
|
70
|
+
path: `/flows/v1/${(0, util_js_1.encodePath)(name)}`,
|
|
71
|
+
body: input === undefined ? undefined : input,
|
|
72
|
+
...pass(options),
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
exports.FlowsClient = FlowsClient;
|
|
77
|
+
/** Custom routes you defined, served under `/rest/v1/<path>`. */
|
|
78
|
+
class RoutesClient {
|
|
79
|
+
http;
|
|
80
|
+
constructor(http) {
|
|
81
|
+
this.http = http;
|
|
82
|
+
}
|
|
83
|
+
call(method, path, options = {}) {
|
|
84
|
+
return this.http.request({
|
|
85
|
+
method,
|
|
86
|
+
path: `/rest/v1/${(0, util_js_1.encodePath)(path.replace(/^\/+/, ""))}`,
|
|
87
|
+
...(options.query ? { query: options.query } : {}),
|
|
88
|
+
...(options.body !== undefined ? { body: options.body } : {}),
|
|
89
|
+
...pass(options),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
get(path, options = {}) {
|
|
93
|
+
return this.call("GET", path, options);
|
|
94
|
+
}
|
|
95
|
+
post(path, body, options = {}) {
|
|
96
|
+
return this.call("POST", path, { ...options, body });
|
|
97
|
+
}
|
|
98
|
+
put(path, body, options = {}) {
|
|
99
|
+
return this.call("PUT", path, { ...options, body });
|
|
100
|
+
}
|
|
101
|
+
patch(path, body, options = {}) {
|
|
102
|
+
return this.call("PATCH", path, { ...options, body });
|
|
103
|
+
}
|
|
104
|
+
delete(path, options = {}) {
|
|
105
|
+
return this.call("DELETE", path, options);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
exports.RoutesClient = RoutesClient;
|
|
109
|
+
//# sourceMappingURL=functions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"functions.js","sourceRoot":"","sources":["../../src/functions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { type QueryValue } from "./util.js";
|
|
2
|
+
export type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;
|
|
3
|
+
export interface RetryOptions {
|
|
4
|
+
/** Extra attempts after the first. `0` disables retries. Default `2`. */
|
|
5
|
+
retries?: number;
|
|
6
|
+
/** First backoff ceiling in milliseconds. Default `300`. */
|
|
7
|
+
baseDelayMs?: number;
|
|
8
|
+
/** Largest backoff in milliseconds. Default `8000`. */
|
|
9
|
+
maxDelayMs?: number;
|
|
10
|
+
/**
|
|
11
|
+
* The longest `Retry-After` the client will wait for. A server asking for more
|
|
12
|
+
* is surfaced as a {@link RateLimitError} instead. Default `30000`.
|
|
13
|
+
*/
|
|
14
|
+
maxRetryAfterMs?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface RequestInfo {
|
|
17
|
+
method: string;
|
|
18
|
+
url: string;
|
|
19
|
+
attempt: number;
|
|
20
|
+
}
|
|
21
|
+
export interface ResponseInfo extends RequestInfo {
|
|
22
|
+
status: number;
|
|
23
|
+
durationMs: number;
|
|
24
|
+
requestId: string | null;
|
|
25
|
+
}
|
|
26
|
+
/** Observability hooks. Throwing inside a hook never fails the request. */
|
|
27
|
+
export interface Hooks {
|
|
28
|
+
onRequest?: (info: RequestInfo & {
|
|
29
|
+
headers: Record<string, string>;
|
|
30
|
+
}) => void;
|
|
31
|
+
onResponse?: (info: ResponseInfo) => void;
|
|
32
|
+
onRetry?: (info: RequestInfo & {
|
|
33
|
+
reason: string;
|
|
34
|
+
delayMs: number;
|
|
35
|
+
}) => void;
|
|
36
|
+
onError?: (error: unknown, info: RequestInfo) => void;
|
|
37
|
+
}
|
|
38
|
+
/** Where the transport gets the signed-in user's access token. */
|
|
39
|
+
export interface TokenProvider {
|
|
40
|
+
/** The current access token, refreshing it first when it is about to expire. `null` when signed out. */
|
|
41
|
+
getAccessToken(): Promise<string | null>;
|
|
42
|
+
/** Called after a `401` for `failed`. Returns a fresh token to retry with, or `null` to give up. */
|
|
43
|
+
onUnauthorized(failed: string): Promise<string | null>;
|
|
44
|
+
}
|
|
45
|
+
export interface HttpConfig {
|
|
46
|
+
baseUrl: string;
|
|
47
|
+
apiKey: string;
|
|
48
|
+
fetch: FetchLike;
|
|
49
|
+
headers: Record<string, string>;
|
|
50
|
+
timeoutMs: number;
|
|
51
|
+
retry: RetryOptions | false;
|
|
52
|
+
hooks: Hooks;
|
|
53
|
+
tokens: TokenProvider | null;
|
|
54
|
+
}
|
|
55
|
+
export type ParseAs = "json" | "text" | "blob" | "arrayBuffer" | "stream" | "response";
|
|
56
|
+
export interface RequestOptions {
|
|
57
|
+
method?: string;
|
|
58
|
+
path: string;
|
|
59
|
+
query?: Record<string, QueryValue | QueryValue[]>;
|
|
60
|
+
/** An object is sent as JSON. Strings, `Blob`, `FormData`, buffers and streams are sent as they are. */
|
|
61
|
+
body?: unknown;
|
|
62
|
+
headers?: Record<string, string>;
|
|
63
|
+
signal?: AbortSignal | null | undefined;
|
|
64
|
+
/** Per-attempt timeout. `0` disables it. Default: the client's `timeoutMs`. */
|
|
65
|
+
timeoutMs?: number;
|
|
66
|
+
retry?: RetryOptions | false;
|
|
67
|
+
/**
|
|
68
|
+
* Allow retrying after a network failure or `502`/`503`/`504` even for a method
|
|
69
|
+
* that is not naturally safe to repeat (`POST`, `PATCH`). Only set it when repeating is harmless.
|
|
70
|
+
*/
|
|
71
|
+
idempotent?: boolean;
|
|
72
|
+
/** `user`: send the user's token when there is one (default). `none`: the API key alone. */
|
|
73
|
+
auth?: "user" | "none";
|
|
74
|
+
/**
|
|
75
|
+
* Call an absolute URL as it is, sending neither the API key nor a token. For signed
|
|
76
|
+
* URLs, which carry their own authority.
|
|
77
|
+
*/
|
|
78
|
+
absoluteUrl?: string;
|
|
79
|
+
/** An explicit user token for this one call, instead of the session's. */
|
|
80
|
+
accessToken?: string | null;
|
|
81
|
+
parse?: ParseAs;
|
|
82
|
+
/** `false`: hand back an error status as a `Response` instead of throwing (after retries). For raw responses, such as HTTP functions. */
|
|
83
|
+
throwOnError?: boolean;
|
|
84
|
+
}
|
|
85
|
+
export declare class HttpClient {
|
|
86
|
+
readonly config: HttpConfig;
|
|
87
|
+
constructor(config: HttpConfig);
|
|
88
|
+
url(path: string, query?: RequestOptions["query"]): string;
|
|
89
|
+
/** Make a request and return the parsed body (`undefined` for `204`). */
|
|
90
|
+
request<T = unknown>(options: RequestOptions): Promise<T>;
|
|
91
|
+
/** Make a request and return the raw `Response`. Non-2xx answers throw. */
|
|
92
|
+
send(options: RequestOptions): Promise<Response>;
|
|
93
|
+
private retryPolicy;
|
|
94
|
+
private retryDelay;
|
|
95
|
+
private once;
|
|
96
|
+
private toError;
|
|
97
|
+
private discard;
|
|
98
|
+
read(response: Response, as: ParseAs): Promise<unknown>;
|
|
99
|
+
private hook;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/http.ts"],"names":[],"mappings":"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"}
|