@opendatalabs/vana-sdk 3.5.0 → 3.5.1
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.browser.js +75 -17
- package/dist/index.browser.js.map +2 -2
- package/dist/index.node.cjs +75 -17
- package/dist/index.node.cjs.map +2 -2
- package/dist/index.node.js +75 -17
- package/dist/index.node.js.map +2 -2
- package/dist/storage/providers/vana-storage.cjs +75 -17
- package/dist/storage/providers/vana-storage.cjs.map +1 -1
- package/dist/storage/providers/vana-storage.js +75 -17
- package/dist/storage/providers/vana-storage.js.map +1 -1
- package/package.json +1 -1
package/dist/index.node.cjs
CHANGED
|
@@ -29169,6 +29169,8 @@ async function buildWeb3SignedHeader(params) {
|
|
|
29169
29169
|
var DEFAULT_ENDPOINT = "https://storage.vana.org";
|
|
29170
29170
|
var BLOB_PATH_PREFIX = "/v1/blobs";
|
|
29171
29171
|
var DEFAULT_TOKEN_TTL_SECONDS = 300;
|
|
29172
|
+
var MAX_UPLOAD_ATTEMPTS = 4;
|
|
29173
|
+
var MAX_RATE_LIMIT_DELAY_MS = 3e4;
|
|
29172
29174
|
var VanaStorage = class {
|
|
29173
29175
|
endpoint;
|
|
29174
29176
|
signer;
|
|
@@ -29207,27 +29209,46 @@ var VanaStorage = class {
|
|
|
29207
29209
|
const body = new Uint8Array(await file.arrayBuffer());
|
|
29208
29210
|
const contentType = file.type !== "" ? file.type : "application/octet-stream";
|
|
29209
29211
|
const header = await this.signRequest("PUT", path, body);
|
|
29210
|
-
let response;
|
|
29211
|
-
|
|
29212
|
-
|
|
29213
|
-
|
|
29214
|
-
|
|
29215
|
-
|
|
29216
|
-
|
|
29217
|
-
|
|
29218
|
-
|
|
29219
|
-
|
|
29220
|
-
|
|
29212
|
+
let response = null;
|
|
29213
|
+
let responseText = "";
|
|
29214
|
+
for (let attempt = 1; attempt <= MAX_UPLOAD_ATTEMPTS; attempt++) {
|
|
29215
|
+
try {
|
|
29216
|
+
response = await this.fetchImpl(`${this.endpoint}${path}`, {
|
|
29217
|
+
method: "PUT",
|
|
29218
|
+
headers: {
|
|
29219
|
+
authorization: header,
|
|
29220
|
+
"content-type": contentType
|
|
29221
|
+
},
|
|
29222
|
+
body
|
|
29223
|
+
});
|
|
29224
|
+
} catch (cause) {
|
|
29225
|
+
throw new StorageError(
|
|
29226
|
+
`vana-storage upload network error: ${describe(cause)}`,
|
|
29227
|
+
"UPLOAD_ERROR",
|
|
29228
|
+
"vana-storage",
|
|
29229
|
+
{ cause: cause instanceof Error ? cause : void 0 }
|
|
29230
|
+
);
|
|
29231
|
+
}
|
|
29232
|
+
if (response.ok) {
|
|
29233
|
+
break;
|
|
29234
|
+
}
|
|
29235
|
+
responseText = await safeText(response);
|
|
29236
|
+
if (response.status === 429 && attempt < MAX_UPLOAD_ATTEMPTS) {
|
|
29237
|
+
const delayMs = retryDelayMs(response, responseText);
|
|
29238
|
+
if (delayMs > 0) {
|
|
29239
|
+
await sleep(delayMs);
|
|
29240
|
+
}
|
|
29241
|
+
continue;
|
|
29242
|
+
}
|
|
29221
29243
|
throw new StorageError(
|
|
29222
|
-
`vana-storage upload
|
|
29223
|
-
"
|
|
29224
|
-
"vana-storage"
|
|
29225
|
-
{ cause: cause instanceof Error ? cause : void 0 }
|
|
29244
|
+
`vana-storage upload failed: ${response.status} ${response.statusText} - ${responseText}`,
|
|
29245
|
+
"UPLOAD_FAILED",
|
|
29246
|
+
"vana-storage"
|
|
29226
29247
|
);
|
|
29227
29248
|
}
|
|
29228
|
-
if (!response
|
|
29249
|
+
if (!response?.ok) {
|
|
29229
29250
|
throw new StorageError(
|
|
29230
|
-
`vana-storage upload failed
|
|
29251
|
+
`vana-storage upload failed after ${MAX_UPLOAD_ATTEMPTS} attempts - ${responseText}`,
|
|
29231
29252
|
"UPLOAD_FAILED",
|
|
29232
29253
|
"vana-storage"
|
|
29233
29254
|
);
|
|
@@ -29380,6 +29401,43 @@ function describe(value) {
|
|
|
29380
29401
|
if (value instanceof Error) return value.message;
|
|
29381
29402
|
return String(value);
|
|
29382
29403
|
}
|
|
29404
|
+
function retryDelayMs(response, responseText) {
|
|
29405
|
+
const headerDelayMs = parseRetryAfterHeaderMs(
|
|
29406
|
+
response.headers.get("retry-after")
|
|
29407
|
+
);
|
|
29408
|
+
if (headerDelayMs !== null) {
|
|
29409
|
+
return clampRateLimitDelay(headerDelayMs);
|
|
29410
|
+
}
|
|
29411
|
+
return clampRateLimitDelay(parseRetryAfterBodyMs(responseText) ?? 0);
|
|
29412
|
+
}
|
|
29413
|
+
function parseRetryAfterHeaderMs(value) {
|
|
29414
|
+
if (!value) return null;
|
|
29415
|
+
const seconds = Number(value);
|
|
29416
|
+
if (Number.isFinite(seconds)) {
|
|
29417
|
+
return seconds * 1e3;
|
|
29418
|
+
}
|
|
29419
|
+
const dateMs = Date.parse(value);
|
|
29420
|
+
if (Number.isFinite(dateMs)) {
|
|
29421
|
+
return Math.max(0, dateMs - Date.now());
|
|
29422
|
+
}
|
|
29423
|
+
return null;
|
|
29424
|
+
}
|
|
29425
|
+
function parseRetryAfterBodyMs(responseText) {
|
|
29426
|
+
if (!responseText) return null;
|
|
29427
|
+
try {
|
|
29428
|
+
const parsed = JSON.parse(responseText);
|
|
29429
|
+
const seconds = Number(parsed.retryAfter);
|
|
29430
|
+
return Number.isFinite(seconds) ? seconds * 1e3 : null;
|
|
29431
|
+
} catch {
|
|
29432
|
+
return null;
|
|
29433
|
+
}
|
|
29434
|
+
}
|
|
29435
|
+
function clampRateLimitDelay(delayMs) {
|
|
29436
|
+
return Math.min(Math.max(0, delayMs), MAX_RATE_LIMIT_DELAY_MS);
|
|
29437
|
+
}
|
|
29438
|
+
function sleep(ms) {
|
|
29439
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
29440
|
+
}
|
|
29383
29441
|
async function safeText(response) {
|
|
29384
29442
|
try {
|
|
29385
29443
|
return await response.text();
|