@runappsai/sdk 0.7.8 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -3
- package/dist/browser-auth.d.ts +3 -0
- package/dist/browser-auth.d.ts.map +1 -1
- package/dist/browser-auth.js +43 -8
- package/dist/browser-auth.js.map +1 -1
- package/dist/client.d.ts +7 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -2
- package/dist/client.js.map +1 -1
- package/dist/files.d.ts +22 -2
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +62 -15
- package/dist/files.js.map +1 -1
- package/dist/sdk.umd.js +3 -3
- package/dist/sdk.umd.js.map +1 -1
- package/dist/transport.d.ts +7 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +19 -2
- package/dist/transport.js.map +1 -1
- package/package.json +1 -1
- package/src/browser-auth.ts +38 -8
- package/src/client.ts +9 -2
- package/src/files.ts +60 -17
- package/src/transport.ts +19 -2
package/dist/files.js
CHANGED
|
@@ -32,18 +32,65 @@ export class FilesService {
|
|
|
32
32
|
* rejects a scope that disagrees with it, so this is a correctness
|
|
33
33
|
* measure, not a permission one.
|
|
34
34
|
*/
|
|
35
|
-
|
|
35
|
+
legacyBase;
|
|
36
|
+
project;
|
|
37
|
+
filesBase;
|
|
38
|
+
baseCache = null;
|
|
39
|
+
basePending = null;
|
|
36
40
|
constructor(transport, project,
|
|
37
41
|
/** When given, every call emits request:start / end / error so the
|
|
38
42
|
* badge can show it in flight; the sync engine's own file traffic
|
|
39
43
|
* uses a service without one. */
|
|
40
|
-
events
|
|
44
|
+
events,
|
|
45
|
+
/** `false`: stay on the classic /v1 paths; a string: use this as the
|
|
46
|
+
* per-user base instead of asking the gateway. */
|
|
47
|
+
filesBase) {
|
|
41
48
|
this.transport = transport;
|
|
42
49
|
this.events = events;
|
|
43
|
-
this.
|
|
50
|
+
this.project = project;
|
|
51
|
+
this.filesBase = filesBase;
|
|
52
|
+
this.legacyBase = project
|
|
44
53
|
? "/v1/p/" + encodeURIComponent(project) + "/files"
|
|
45
54
|
: "/v1/files";
|
|
46
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* The URL prefix for file calls, resolved once per signed-in user.
|
|
58
|
+
*
|
|
59
|
+
* Newer gateways answer `GET /v1/files-base` with a per-user base on
|
|
60
|
+
* the files host — `https://files.runapps.ai/u/<hash>` — so every
|
|
61
|
+
* file URL is unique to its user as well as to its app, and file
|
|
62
|
+
* traffic leaves the main site. The `/files` or `/p/<app>/files` tail
|
|
63
|
+
* is appended here. A gateway without that endpoint, or a failure to
|
|
64
|
+
* reach it, falls back to the classic path on the main base. The
|
|
65
|
+
* result is cached against a fingerprint of the token: a different
|
|
66
|
+
* user signing in gets their own base.
|
|
67
|
+
*/
|
|
68
|
+
async base() {
|
|
69
|
+
if (this.filesBase === false)
|
|
70
|
+
return this.legacyBase;
|
|
71
|
+
const tail = this.project ? "/p/" + encodeURIComponent(this.project) + "/files" : "/files";
|
|
72
|
+
if (typeof this.filesBase === "string")
|
|
73
|
+
return this.filesBase.replace(/\/+$/, "") + tail;
|
|
74
|
+
const fp = await this.transport.tokenFingerprint();
|
|
75
|
+
if (this.baseCache && this.baseCache.fp === fp)
|
|
76
|
+
return this.baseCache.base;
|
|
77
|
+
if (!this.basePending) {
|
|
78
|
+
this.basePending = (async () => {
|
|
79
|
+
let base = this.legacyBase;
|
|
80
|
+
try {
|
|
81
|
+
const r = await this.transport.getJSON("/v1/files-base");
|
|
82
|
+
if (r && typeof r.base === "string" && /^https?:\/\//i.test(r.base))
|
|
83
|
+
base = r.base.replace(/\/+$/, "") + tail;
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Older gateway or a transient failure: the classic path still works.
|
|
87
|
+
}
|
|
88
|
+
this.baseCache = { fp, base };
|
|
89
|
+
return base;
|
|
90
|
+
})().finally(() => { this.basePending = null; });
|
|
91
|
+
}
|
|
92
|
+
return this.basePending;
|
|
93
|
+
}
|
|
47
94
|
/** Run one file call, with badge events when the service has a bus. */
|
|
48
95
|
run(op, fn) {
|
|
49
96
|
return this.events ? wrapEvents(this.events, { model: op, capability: "files" }, fn) : fn();
|
|
@@ -62,7 +109,7 @@ export class FilesService {
|
|
|
62
109
|
headers["If-None-Match"] = "*";
|
|
63
110
|
if (opts?.ifMatch)
|
|
64
111
|
headers["If-Match"] = `"${cleanETag(opts.ifMatch)}"`;
|
|
65
|
-
return this.run("files.put", () => this.transport.putBytes(pathToURL(this.base, path), body, {
|
|
112
|
+
return this.run("files.put", async () => this.transport.putBytes(pathToURL(await this.base(), path), body, {
|
|
66
113
|
contentType: opts?.contentType,
|
|
67
114
|
headers: Object.keys(headers).length ? headers : undefined,
|
|
68
115
|
signal: opts?.signal,
|
|
@@ -93,7 +140,7 @@ export class FilesService {
|
|
|
93
140
|
return this.run("files.read", () => this.readRaw(path, init));
|
|
94
141
|
}
|
|
95
142
|
async readRaw(path, init) {
|
|
96
|
-
const { data, contentType, etag, notModified } = await this.transport.getRaw(pathToURL(this.base, path), init);
|
|
143
|
+
const { data, contentType, etag, notModified } = await this.transport.getRaw(pathToURL(await this.base(), path), init);
|
|
97
144
|
return {
|
|
98
145
|
blob: new Blob([new Uint8Array(data)], { type: contentType || "application/octet-stream" }),
|
|
99
146
|
contentType,
|
|
@@ -124,7 +171,7 @@ export class FilesService {
|
|
|
124
171
|
}
|
|
125
172
|
/** Stat: HEAD-only object metadata. */
|
|
126
173
|
async stat(path, init) {
|
|
127
|
-
const { status, headers } = await this.run("files.stat", () => this.transport.head(pathToURL(this.base, path), init));
|
|
174
|
+
const { status, headers } = await this.run("files.stat", async () => this.transport.head(pathToURL(await this.base(), path), init));
|
|
128
175
|
if (status === 404) {
|
|
129
176
|
throw Object.assign(new Error("not found"), { status: 404 });
|
|
130
177
|
}
|
|
@@ -142,12 +189,12 @@ export class FilesService {
|
|
|
142
189
|
}
|
|
143
190
|
/** Returns true iff the path resolves to an existing object. */
|
|
144
191
|
async exists(path, init) {
|
|
145
|
-
const { status } = await this.run("files.exists", () => this.transport.head(pathToURL(this.base, path), init));
|
|
192
|
+
const { status } = await this.run("files.exists", async () => this.transport.head(pathToURL(await this.base(), path), init));
|
|
146
193
|
return status >= 200 && status < 400;
|
|
147
194
|
}
|
|
148
195
|
/** Delete the object at `path`. Idempotent. */
|
|
149
196
|
async del(path, init) {
|
|
150
|
-
await this.run("files.del", () => this.transport.deletePath(pathToURL(this.base, path), init));
|
|
197
|
+
await this.run("files.del", async () => this.transport.deletePath(pathToURL(await this.base(), path), init));
|
|
151
198
|
}
|
|
152
199
|
/** List objects. Pass an empty / omitted prefix for the root. */
|
|
153
200
|
async list(opts) {
|
|
@@ -161,7 +208,7 @@ export class FilesService {
|
|
|
161
208
|
if (opts?.glob)
|
|
162
209
|
params.set("glob", opts.glob);
|
|
163
210
|
const qs = params.toString();
|
|
164
|
-
return this.run("files.list", () => this.transport.getJSON(this.base + (qs ? "?" + qs : ""), opts?.signal ? { signal: opts.signal } : undefined));
|
|
211
|
+
return this.run("files.list", async () => this.transport.getJSON((await this.base()) + (qs ? "?" + qs : ""), opts?.signal ? { signal: opts.signal } : undefined));
|
|
165
212
|
}
|
|
166
213
|
/**
|
|
167
214
|
* Bulk delete: removes every object whose path starts with `prefix`
|
|
@@ -174,15 +221,15 @@ export class FilesService {
|
|
|
174
221
|
* client.files.deleteMany({ prefix: "logs/", glob: "*.bak" })
|
|
175
222
|
*/
|
|
176
223
|
async deleteMany(opts, init) {
|
|
177
|
-
return this.run("files.deleteMany", () => this.transport.postJSON(this.base + "/delete", { prefix: opts.prefix ?? "", glob: opts.glob ?? "" }, init));
|
|
224
|
+
return this.run("files.deleteMany", async () => this.transport.postJSON((await this.base()) + "/delete", { prefix: opts.prefix ?? "", glob: opts.glob ?? "" }, init));
|
|
178
225
|
}
|
|
179
226
|
/** Atomic rename (copy + delete server-side). */
|
|
180
227
|
async move(from, to, init) {
|
|
181
|
-
return this.run("files.move", () => this.transport.postJSON(this.base + "/move", { from, to }, init));
|
|
228
|
+
return this.run("files.move", async () => this.transport.postJSON((await this.base()) + "/move", { from, to }, init));
|
|
182
229
|
}
|
|
183
230
|
/** Server-side copy. */
|
|
184
231
|
async copy(from, to, init) {
|
|
185
|
-
return this.run("files.copy", () => this.transport.postJSON(this.base + "/copy", { from, to }, init));
|
|
232
|
+
return this.run("files.copy", async () => this.transport.postJSON((await this.base()) + "/copy", { from, to }, init));
|
|
186
233
|
}
|
|
187
234
|
/**
|
|
188
235
|
* Ask the gateway to fetch `srcURL` and store the body at `path`.
|
|
@@ -190,7 +237,7 @@ export class FilesService {
|
|
|
190
237
|
* must be a public http(s) URL (private/loopback hosts rejected).
|
|
191
238
|
*/
|
|
192
239
|
async putFromURL(path, srcURL, opts) {
|
|
193
|
-
return this.run("files.putFromURL", () => this.transport.postJSON(this.base + "/put-url", {
|
|
240
|
+
return this.run("files.putFromURL", async () => this.transport.postJSON((await this.base()) + "/put-url", {
|
|
194
241
|
path,
|
|
195
242
|
src_url: srcURL,
|
|
196
243
|
content_type: opts?.contentType,
|
|
@@ -218,13 +265,13 @@ export class FilesService {
|
|
|
218
265
|
async batchRaw(ops, init) {
|
|
219
266
|
const chunkSize = 30;
|
|
220
267
|
if (ops.length <= chunkSize) {
|
|
221
|
-
const resp = await this.transport.postJSON(this.base + "/batch", { ops }, init);
|
|
268
|
+
const resp = await this.transport.postJSON((await this.base()) + "/batch", { ops }, init);
|
|
222
269
|
return resp.results;
|
|
223
270
|
}
|
|
224
271
|
const all = [];
|
|
225
272
|
for (let i = 0; i < ops.length; i += chunkSize) {
|
|
226
273
|
const chunk = ops.slice(i, i + chunkSize);
|
|
227
|
-
const resp = await this.transport.postJSON(this.base + "/batch", { ops: chunk }, init);
|
|
274
|
+
const resp = await this.transport.postJSON((await this.base()) + "/batch", { ops: chunk }, init);
|
|
228
275
|
all.push(...resp.results);
|
|
229
276
|
}
|
|
230
277
|
return all;
|
package/dist/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,qEAAqE;AACrE,gEAAgE;AAChE,iDAAiD;AACjD,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAE1C,OAAO,EAAE,SAAS,EAAkB,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAsF7C,SAAS,SAAS,CAAC,IAAY,EAAE,CAAS;IACxC,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtC,OAAO,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,OAAO,YAAY;
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"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"}
|