@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.js
CHANGED
|
@@ -29018,6 +29018,8 @@ async function buildWeb3SignedHeader(params) {
|
|
|
29018
29018
|
var DEFAULT_ENDPOINT = "https://storage.vana.org";
|
|
29019
29019
|
var BLOB_PATH_PREFIX = "/v1/blobs";
|
|
29020
29020
|
var DEFAULT_TOKEN_TTL_SECONDS = 300;
|
|
29021
|
+
var MAX_UPLOAD_ATTEMPTS = 4;
|
|
29022
|
+
var MAX_RATE_LIMIT_DELAY_MS = 3e4;
|
|
29021
29023
|
var VanaStorage = class {
|
|
29022
29024
|
endpoint;
|
|
29023
29025
|
signer;
|
|
@@ -29056,27 +29058,46 @@ var VanaStorage = class {
|
|
|
29056
29058
|
const body = new Uint8Array(await file.arrayBuffer());
|
|
29057
29059
|
const contentType = file.type !== "" ? file.type : "application/octet-stream";
|
|
29058
29060
|
const header = await this.signRequest("PUT", path, body);
|
|
29059
|
-
let response;
|
|
29060
|
-
|
|
29061
|
-
|
|
29062
|
-
|
|
29063
|
-
|
|
29064
|
-
|
|
29065
|
-
|
|
29066
|
-
|
|
29067
|
-
|
|
29068
|
-
|
|
29069
|
-
|
|
29061
|
+
let response = null;
|
|
29062
|
+
let responseText = "";
|
|
29063
|
+
for (let attempt = 1; attempt <= MAX_UPLOAD_ATTEMPTS; attempt++) {
|
|
29064
|
+
try {
|
|
29065
|
+
response = await this.fetchImpl(`${this.endpoint}${path}`, {
|
|
29066
|
+
method: "PUT",
|
|
29067
|
+
headers: {
|
|
29068
|
+
authorization: header,
|
|
29069
|
+
"content-type": contentType
|
|
29070
|
+
},
|
|
29071
|
+
body
|
|
29072
|
+
});
|
|
29073
|
+
} catch (cause) {
|
|
29074
|
+
throw new StorageError(
|
|
29075
|
+
`vana-storage upload network error: ${describe(cause)}`,
|
|
29076
|
+
"UPLOAD_ERROR",
|
|
29077
|
+
"vana-storage",
|
|
29078
|
+
{ cause: cause instanceof Error ? cause : void 0 }
|
|
29079
|
+
);
|
|
29080
|
+
}
|
|
29081
|
+
if (response.ok) {
|
|
29082
|
+
break;
|
|
29083
|
+
}
|
|
29084
|
+
responseText = await safeText(response);
|
|
29085
|
+
if (response.status === 429 && attempt < MAX_UPLOAD_ATTEMPTS) {
|
|
29086
|
+
const delayMs = retryDelayMs(response, responseText);
|
|
29087
|
+
if (delayMs > 0) {
|
|
29088
|
+
await sleep(delayMs);
|
|
29089
|
+
}
|
|
29090
|
+
continue;
|
|
29091
|
+
}
|
|
29070
29092
|
throw new StorageError(
|
|
29071
|
-
`vana-storage upload
|
|
29072
|
-
"
|
|
29073
|
-
"vana-storage"
|
|
29074
|
-
{ cause: cause instanceof Error ? cause : void 0 }
|
|
29093
|
+
`vana-storage upload failed: ${response.status} ${response.statusText} - ${responseText}`,
|
|
29094
|
+
"UPLOAD_FAILED",
|
|
29095
|
+
"vana-storage"
|
|
29075
29096
|
);
|
|
29076
29097
|
}
|
|
29077
|
-
if (!response
|
|
29098
|
+
if (!response?.ok) {
|
|
29078
29099
|
throw new StorageError(
|
|
29079
|
-
`vana-storage upload failed
|
|
29100
|
+
`vana-storage upload failed after ${MAX_UPLOAD_ATTEMPTS} attempts - ${responseText}`,
|
|
29080
29101
|
"UPLOAD_FAILED",
|
|
29081
29102
|
"vana-storage"
|
|
29082
29103
|
);
|
|
@@ -29229,6 +29250,43 @@ function describe(value) {
|
|
|
29229
29250
|
if (value instanceof Error) return value.message;
|
|
29230
29251
|
return String(value);
|
|
29231
29252
|
}
|
|
29253
|
+
function retryDelayMs(response, responseText) {
|
|
29254
|
+
const headerDelayMs = parseRetryAfterHeaderMs(
|
|
29255
|
+
response.headers.get("retry-after")
|
|
29256
|
+
);
|
|
29257
|
+
if (headerDelayMs !== null) {
|
|
29258
|
+
return clampRateLimitDelay(headerDelayMs);
|
|
29259
|
+
}
|
|
29260
|
+
return clampRateLimitDelay(parseRetryAfterBodyMs(responseText) ?? 0);
|
|
29261
|
+
}
|
|
29262
|
+
function parseRetryAfterHeaderMs(value) {
|
|
29263
|
+
if (!value) return null;
|
|
29264
|
+
const seconds = Number(value);
|
|
29265
|
+
if (Number.isFinite(seconds)) {
|
|
29266
|
+
return seconds * 1e3;
|
|
29267
|
+
}
|
|
29268
|
+
const dateMs = Date.parse(value);
|
|
29269
|
+
if (Number.isFinite(dateMs)) {
|
|
29270
|
+
return Math.max(0, dateMs - Date.now());
|
|
29271
|
+
}
|
|
29272
|
+
return null;
|
|
29273
|
+
}
|
|
29274
|
+
function parseRetryAfterBodyMs(responseText) {
|
|
29275
|
+
if (!responseText) return null;
|
|
29276
|
+
try {
|
|
29277
|
+
const parsed = JSON.parse(responseText);
|
|
29278
|
+
const seconds = Number(parsed.retryAfter);
|
|
29279
|
+
return Number.isFinite(seconds) ? seconds * 1e3 : null;
|
|
29280
|
+
} catch {
|
|
29281
|
+
return null;
|
|
29282
|
+
}
|
|
29283
|
+
}
|
|
29284
|
+
function clampRateLimitDelay(delayMs) {
|
|
29285
|
+
return Math.min(Math.max(0, delayMs), MAX_RATE_LIMIT_DELAY_MS);
|
|
29286
|
+
}
|
|
29287
|
+
function sleep(ms) {
|
|
29288
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
29289
|
+
}
|
|
29232
29290
|
async function safeText(response) {
|
|
29233
29291
|
try {
|
|
29234
29292
|
return await response.text();
|