@rendobar/sdk 4.1.0 → 5.0.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/dist/index.cjs +114 -83
- package/dist/index.d.cts +175 -84
- package/dist/index.d.mts +175 -84
- package/dist/index.mjs +114 -83
- package/package.json +4 -3
package/dist/index.cjs
CHANGED
|
@@ -6,6 +6,10 @@ let partysocket = require("partysocket");
|
|
|
6
6
|
* Use isApiError() to narrow in catch blocks.
|
|
7
7
|
*/
|
|
8
8
|
var ApiError = class extends Error {
|
|
9
|
+
code;
|
|
10
|
+
statusCode;
|
|
11
|
+
details;
|
|
12
|
+
retryAfter;
|
|
9
13
|
constructor(code, statusCode, message, details, retryAfter) {
|
|
10
14
|
super(message);
|
|
11
15
|
this.code = code;
|
|
@@ -53,7 +57,7 @@ var JobFailedError = class extends Error {
|
|
|
53
57
|
const DEFAULT_TIMEOUT = 3e4;
|
|
54
58
|
const DEFAULT_MAX_RETRIES = 2;
|
|
55
59
|
const RETRY_BASE_DELAY = 500;
|
|
56
|
-
const RETRYABLE_STATUS_CODES = new Set([
|
|
60
|
+
const RETRYABLE_STATUS_CODES = /* @__PURE__ */ new Set([
|
|
57
61
|
429,
|
|
58
62
|
500,
|
|
59
63
|
502,
|
|
@@ -172,90 +176,101 @@ function isAbortError(error) {
|
|
|
172
176
|
}
|
|
173
177
|
//#endregion
|
|
174
178
|
//#region src/resources/jobs.ts
|
|
175
|
-
const
|
|
179
|
+
const TERMINAL_JOB_STATUSES$1 = /* @__PURE__ */ new Set([
|
|
176
180
|
"complete",
|
|
177
181
|
"failed",
|
|
178
182
|
"cancelled"
|
|
179
183
|
]);
|
|
180
184
|
function createJobsResource(request) {
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
});
|
|
188
|
-
},
|
|
189
|
-
async get(id, options) {
|
|
190
|
-
return request(`/jobs/${id}`, { signal: options?.signal });
|
|
191
|
-
},
|
|
192
|
-
async list(params, options) {
|
|
193
|
-
return request("/jobs", {
|
|
194
|
-
query: params,
|
|
195
|
-
signal: options?.signal
|
|
196
|
-
});
|
|
197
|
-
},
|
|
198
|
-
async *listAll(params) {
|
|
199
|
-
let offset = 0;
|
|
200
|
-
const limit = params?.limit ?? 50;
|
|
201
|
-
while (true) {
|
|
202
|
-
const page = await request("/jobs", { query: {
|
|
203
|
-
...params,
|
|
204
|
-
limit,
|
|
205
|
-
offset
|
|
206
|
-
} });
|
|
207
|
-
for (const job of page.data) yield job;
|
|
208
|
-
if (offset + page.data.length >= page.meta.total) break;
|
|
209
|
-
offset += limit;
|
|
210
|
-
}
|
|
211
|
-
},
|
|
212
|
-
async wait(id, options = {}) {
|
|
213
|
-
const { timeout = 3e5, interval = 2e3, maxInterval = 1e4, onProgress, signal, throwOnFailure = false } = options;
|
|
214
|
-
const deadline = Date.now() + timeout;
|
|
215
|
-
let currentInterval = interval;
|
|
216
|
-
while (Date.now() < deadline) {
|
|
217
|
-
if (signal?.aborted) throw new DOMException("Wait aborted", "AbortError");
|
|
218
|
-
const job = await request(`/jobs/${id}`, { signal });
|
|
219
|
-
onProgress?.(job);
|
|
220
|
-
if (TERMINAL_STATUSES$1.has(job.status)) return resolveTerminal(id, job, throwOnFailure);
|
|
221
|
-
const remaining = deadline - Date.now();
|
|
222
|
-
const delay = Math.min(currentInterval, remaining);
|
|
223
|
-
if (delay <= 0) break;
|
|
224
|
-
await sleep(delay, signal);
|
|
225
|
-
currentInterval = Math.min(currentInterval * 1.5, maxInterval);
|
|
226
|
-
}
|
|
185
|
+
async function wait(id, options = {}) {
|
|
186
|
+
const { timeout = 3e5, interval = 2e3, maxInterval = 1e4, onProgress, signal, throwOnFailure = false } = options;
|
|
187
|
+
const deadline = Date.now() + timeout;
|
|
188
|
+
let currentInterval = interval;
|
|
189
|
+
while (Date.now() < deadline) {
|
|
190
|
+
if (signal?.aborted) throw new DOMException("Wait aborted", "AbortError");
|
|
227
191
|
const job = await request(`/jobs/${id}`, { signal });
|
|
228
192
|
onProgress?.(job);
|
|
229
|
-
if (
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
193
|
+
if (TERMINAL_JOB_STATUSES$1.has(job.status)) return resolveTerminal(id, job, throwOnFailure);
|
|
194
|
+
const remaining = deadline - Date.now();
|
|
195
|
+
const delay = Math.min(currentInterval, remaining);
|
|
196
|
+
if (delay <= 0) break;
|
|
197
|
+
await sleep(delay, signal);
|
|
198
|
+
currentInterval = Math.min(currentInterval * 1.5, maxInterval);
|
|
199
|
+
}
|
|
200
|
+
const job = await request(`/jobs/${id}`, { signal });
|
|
201
|
+
onProgress?.(job);
|
|
202
|
+
if (TERMINAL_JOB_STATUSES$1.has(job.status)) return resolveTerminal(id, job, throwOnFailure);
|
|
203
|
+
throw new WaitTimeoutError(id, job.status, timeout);
|
|
204
|
+
}
|
|
205
|
+
async function create(params, options) {
|
|
206
|
+
return request("/jobs", {
|
|
207
|
+
method: "POST",
|
|
208
|
+
body: params,
|
|
209
|
+
signal: options?.signal
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
async function get(id, options) {
|
|
213
|
+
return request(`/jobs/${id}`, { signal: options?.signal });
|
|
214
|
+
}
|
|
215
|
+
async function list(params, options) {
|
|
216
|
+
return request("/jobs", {
|
|
217
|
+
query: params,
|
|
218
|
+
signal: options?.signal
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
async function* listAll(params) {
|
|
222
|
+
let offset = 0;
|
|
223
|
+
const limit = params?.limit ?? 50;
|
|
224
|
+
while (true) {
|
|
225
|
+
const page = await request("/jobs", { query: {
|
|
226
|
+
...params,
|
|
227
|
+
limit,
|
|
228
|
+
offset
|
|
229
|
+
} });
|
|
230
|
+
for (const job of page.data) yield job;
|
|
231
|
+
if (offset + page.data.length >= page.meta.total) break;
|
|
232
|
+
offset += limit;
|
|
258
233
|
}
|
|
234
|
+
}
|
|
235
|
+
async function cancel(id, options) {
|
|
236
|
+
return request(`/jobs/${id}/cancel`, {
|
|
237
|
+
method: "POST",
|
|
238
|
+
signal: options?.signal
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
async function download(id, options) {
|
|
242
|
+
return request(`/jobs/${id}/download`, {
|
|
243
|
+
raw: true,
|
|
244
|
+
signal: options?.signal
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
async function logs(id, options) {
|
|
248
|
+
return request(`/jobs/${id}/logs`, { signal: options?.signal });
|
|
249
|
+
}
|
|
250
|
+
async function getTimings(id, options) {
|
|
251
|
+
return request(`/jobs/${id}/timings`, { signal: options?.signal });
|
|
252
|
+
}
|
|
253
|
+
async function types(options) {
|
|
254
|
+
return request("/jobs/types", { signal: options?.signal });
|
|
255
|
+
}
|
|
256
|
+
async function stats(params, options) {
|
|
257
|
+
return request("/jobs/stats", {
|
|
258
|
+
query: params,
|
|
259
|
+
signal: options?.signal
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
return {
|
|
263
|
+
create,
|
|
264
|
+
get,
|
|
265
|
+
list,
|
|
266
|
+
listAll,
|
|
267
|
+
wait,
|
|
268
|
+
cancel,
|
|
269
|
+
download,
|
|
270
|
+
logs,
|
|
271
|
+
getTimings,
|
|
272
|
+
types,
|
|
273
|
+
stats
|
|
259
274
|
};
|
|
260
275
|
}
|
|
261
276
|
/**
|
|
@@ -299,6 +314,7 @@ function createBillingResource(request) {
|
|
|
299
314
|
signal: options?.signal
|
|
300
315
|
});
|
|
301
316
|
},
|
|
317
|
+
/** Usage grouped by originating client (dashboard, sdk, cli, mcp, n8n, api, ...). */
|
|
302
318
|
async usageByClient(params, options) {
|
|
303
319
|
return request("/billing/usage-by-client", {
|
|
304
320
|
query: params,
|
|
@@ -442,7 +458,16 @@ async function mapLimit(items, limit, fn, signal) {
|
|
|
442
458
|
return out;
|
|
443
459
|
}
|
|
444
460
|
function createUploadsResource(request) {
|
|
445
|
-
return {
|
|
461
|
+
return {
|
|
462
|
+
/**
|
|
463
|
+
* One-call upload. Orchestrates the `/assets` flow: init → presigned PUT
|
|
464
|
+
* (small files) or parallel multipart (large files) → complete. Returns the
|
|
465
|
+
* ready Asset, whose `id` can be used as a job input reference.
|
|
466
|
+
*
|
|
467
|
+
* @param file - File content (Blob, ArrayBuffer, or Uint8Array).
|
|
468
|
+
* @param options.filename - Display filename (required).
|
|
469
|
+
*/
|
|
470
|
+
async create(file, options) {
|
|
446
471
|
const blob = toBlob(file);
|
|
447
472
|
const size = options.size ?? blob.size;
|
|
448
473
|
if (options.signal?.aborted) throw new Error("Upload aborted");
|
|
@@ -737,21 +762,23 @@ const WS_OPTIONS = {
|
|
|
737
762
|
reconnectionDelayGrowFactor: 1.5,
|
|
738
763
|
maxRetries: Infinity
|
|
739
764
|
};
|
|
740
|
-
const
|
|
765
|
+
const TERMINAL_JOB_STATUSES = /* @__PURE__ */ new Set([
|
|
741
766
|
"complete",
|
|
742
767
|
"failed",
|
|
743
768
|
"cancelled"
|
|
744
769
|
]);
|
|
745
770
|
/** Known OrgEvent types — only dispatch events with recognized types. */
|
|
746
|
-
const KNOWN_EVENT_TYPES = new Set([
|
|
771
|
+
const KNOWN_EVENT_TYPES = /* @__PURE__ */ new Set([
|
|
747
772
|
"job.created",
|
|
748
773
|
"job.status",
|
|
749
774
|
"job.result",
|
|
750
775
|
"job.progress",
|
|
751
776
|
"job.step",
|
|
752
777
|
"job.log",
|
|
778
|
+
"job.resources",
|
|
753
779
|
"job.metrics",
|
|
754
780
|
"job.context",
|
|
781
|
+
"job.region_failover",
|
|
755
782
|
"balance.updated",
|
|
756
783
|
"subscription.updated",
|
|
757
784
|
"notification",
|
|
@@ -834,15 +861,19 @@ function dispatchJobEvent(event, options) {
|
|
|
834
861
|
case "job.status": {
|
|
835
862
|
const statusEvent = event;
|
|
836
863
|
options.onStatus?.(statusEvent);
|
|
837
|
-
if (
|
|
864
|
+
if (TERMINAL_JOB_STATUSES.has(statusEvent.status)) options.onComplete?.(statusEvent);
|
|
838
865
|
break;
|
|
839
866
|
}
|
|
840
867
|
case "job.result":
|
|
841
868
|
options.onResult?.(event);
|
|
842
869
|
break;
|
|
843
|
-
case "job.
|
|
844
|
-
|
|
870
|
+
case "job.resources":
|
|
871
|
+
case "job.metrics": {
|
|
872
|
+
const e = event;
|
|
873
|
+
options.onResources?.(e);
|
|
874
|
+
options.onMetrics?.(e);
|
|
845
875
|
break;
|
|
876
|
+
}
|
|
846
877
|
case "job.context":
|
|
847
878
|
options.onContext?.(event);
|
|
848
879
|
break;
|