@opendatalabs/vana-sdk 3.10.1 → 3.12.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 +37 -1
- package/dist/direct/controller.cjs +2 -1
- package/dist/direct/controller.cjs.map +1 -1
- package/dist/direct/controller.d.ts +9 -1
- package/dist/direct/controller.js +2 -1
- package/dist/direct/controller.js.map +1 -1
- package/dist/direct/personal-server-read.cjs +57 -15
- package/dist/direct/personal-server-read.cjs.map +1 -1
- package/dist/direct/personal-server-read.d.ts +23 -0
- package/dist/direct/personal-server-read.js +57 -15
- package/dist/direct/personal-server-read.js.map +1 -1
- package/dist/index.browser.js +44 -7
- package/dist/index.browser.js.map +2 -2
- package/dist/index.node.cjs +44 -7
- package/dist/index.node.cjs.map +2 -2
- package/dist/index.node.js +44 -7
- package/dist/index.node.js.map +2 -2
- package/dist/server.cjs.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js.map +1 -1
- package/dist/storage/index.cjs.map +1 -1
- package/dist/storage/index.d.ts +1 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/providers/vana-storage.cjs +44 -7
- package/dist/storage/providers/vana-storage.cjs.map +1 -1
- package/dist/storage/providers/vana-storage.d.ts +33 -0
- package/dist/storage/providers/vana-storage.js +44 -7
- package/dist/storage/providers/vana-storage.js.map +1 -1
- package/package.json +1 -1
package/dist/index.node.cjs
CHANGED
|
@@ -29206,12 +29206,14 @@ async function buildWeb3SignedHeader(params) {
|
|
|
29206
29206
|
|
|
29207
29207
|
// src/storage/providers/vana-storage.ts
|
|
29208
29208
|
var DEFAULT_ENDPOINT = "https://storage.vana.org";
|
|
29209
|
-
var
|
|
29209
|
+
var LEGACY_BLOB_PATH_PREFIX = "/v1/blobs";
|
|
29210
29210
|
var DEFAULT_TOKEN_TTL_SECONDS = 300;
|
|
29211
29211
|
var MAX_UPLOAD_ATTEMPTS = 4;
|
|
29212
29212
|
var MAX_RATE_LIMIT_DELAY_MS = 3e4;
|
|
29213
29213
|
var VanaStorage = class {
|
|
29214
29214
|
endpoint;
|
|
29215
|
+
network;
|
|
29216
|
+
blobPathPrefix;
|
|
29215
29217
|
signer;
|
|
29216
29218
|
ownerAddress;
|
|
29217
29219
|
fetchImpl;
|
|
@@ -29224,6 +29226,15 @@ var VanaStorage = class {
|
|
|
29224
29226
|
);
|
|
29225
29227
|
}
|
|
29226
29228
|
this.endpoint = (config.endpoint ?? DEFAULT_ENDPOINT).replace(/\/+$/, "");
|
|
29229
|
+
if (config.network !== void 0 && !isProtocolNetwork(config.network)) {
|
|
29230
|
+
throw new StorageError(
|
|
29231
|
+
`Unsupported vana-storage network '${String(config.network)}'`,
|
|
29232
|
+
"INVALID_NETWORK",
|
|
29233
|
+
"vana-storage"
|
|
29234
|
+
);
|
|
29235
|
+
}
|
|
29236
|
+
this.network = config.network;
|
|
29237
|
+
this.blobPathPrefix = this.network ? `/v1/networks/${this.network}/blobs` : LEGACY_BLOB_PATH_PREFIX;
|
|
29227
29238
|
this.signer = config.signer;
|
|
29228
29239
|
this.ownerAddress = (config.ownerAddress ?? config.signer.address).toLowerCase();
|
|
29229
29240
|
this.fetchImpl = config.fetchImpl ?? globalThis.fetch.bind(globalThis);
|
|
@@ -29244,7 +29255,7 @@ var VanaStorage = class {
|
|
|
29244
29255
|
);
|
|
29245
29256
|
}
|
|
29246
29257
|
const subpath = encodeRelativePath(filename);
|
|
29247
|
-
const path = `${
|
|
29258
|
+
const path = `${this.blobPathPrefix}/${this.ownerAddress}/${subpath}`;
|
|
29248
29259
|
const body = new Uint8Array(await file.arrayBuffer());
|
|
29249
29260
|
const contentType = file.type !== "" ? file.type : "application/octet-stream";
|
|
29250
29261
|
const header = await this.signRequest("PUT", path, body);
|
|
@@ -29412,12 +29423,18 @@ var VanaStorage = class {
|
|
|
29412
29423
|
"vana-storage"
|
|
29413
29424
|
);
|
|
29414
29425
|
}
|
|
29415
|
-
const
|
|
29416
|
-
|
|
29417
|
-
const valid = segments.length === 5 && segments[0] === "v1" && segments[1] === "blobs" && segments[2]?.toLowerCase() === this.ownerAddress && segments[3] !== void 0 && !isTraversal(segments[3]) && segments[4] !== void 0 && !isTraversal(segments[4]);
|
|
29418
|
-
if (!valid) {
|
|
29426
|
+
const route = parseBlobPath(parsed.pathname);
|
|
29427
|
+
if (!route || route.owner.toLowerCase() !== this.ownerAddress) {
|
|
29419
29428
|
throw new StorageError(
|
|
29420
|
-
`URL path '${parsed.pathname}' must be
|
|
29429
|
+
`URL path '${parsed.pathname}' must be ${this.blobPathPrefix}/${this.ownerAddress}/{scope}/{collectedAt}`,
|
|
29430
|
+
"INVALID_URL",
|
|
29431
|
+
"vana-storage"
|
|
29432
|
+
);
|
|
29433
|
+
}
|
|
29434
|
+
const crossNetwork = this.network ? route.network !== void 0 && route.network !== this.network : route.network !== void 0;
|
|
29435
|
+
if (crossNetwork) {
|
|
29436
|
+
throw new StorageError(
|
|
29437
|
+
`URL network '${route.network ?? "legacy"}' does not match provider network '${this.network ?? "legacy"}'`,
|
|
29421
29438
|
"INVALID_URL",
|
|
29422
29439
|
"vana-storage"
|
|
29423
29440
|
);
|
|
@@ -29425,6 +29442,26 @@ var VanaStorage = class {
|
|
|
29425
29442
|
return parsed.pathname;
|
|
29426
29443
|
}
|
|
29427
29444
|
};
|
|
29445
|
+
var PROTOCOL_NETWORKS = ["mainnet", "moksha"];
|
|
29446
|
+
function isProtocolNetwork(value) {
|
|
29447
|
+
return typeof value === "string" && PROTOCOL_NETWORKS.includes(value);
|
|
29448
|
+
}
|
|
29449
|
+
function parseBlobPath(pathname) {
|
|
29450
|
+
const segments = pathname.split("/").filter((s) => s.length > 0);
|
|
29451
|
+
const isTraversal = (s) => s === "." || s === "..";
|
|
29452
|
+
if (segments.length === 5 && segments[0] === "v1" && segments[1] === "blobs") {
|
|
29453
|
+
const [, , owner, scope, collectedAt] = segments;
|
|
29454
|
+
if (isTraversal(scope) || isTraversal(collectedAt)) return null;
|
|
29455
|
+
return { owner, scope, collectedAt };
|
|
29456
|
+
}
|
|
29457
|
+
if (segments.length === 7 && segments[0] === "v1" && segments[1] === "networks" && segments[3] === "blobs") {
|
|
29458
|
+
const [, , network, , owner, scope, collectedAt] = segments;
|
|
29459
|
+
if (!isProtocolNetwork(network)) return null;
|
|
29460
|
+
if (isTraversal(scope) || isTraversal(collectedAt)) return null;
|
|
29461
|
+
return { network, owner, scope, collectedAt };
|
|
29462
|
+
}
|
|
29463
|
+
return null;
|
|
29464
|
+
}
|
|
29428
29465
|
function encodeRelativePath(filename) {
|
|
29429
29466
|
const parts = filename.split("/");
|
|
29430
29467
|
if (parts.length !== 2 || parts.some((p) => p.length === 0 || p === "." || p === "..")) {
|