@opendatalabs/vana-sdk 3.4.1 → 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.
Files changed (37) hide show
  1. package/dist/account/personal-server-lite-owner-binding.cjs +3 -3
  2. package/dist/account/personal-server-lite-owner-binding.cjs.map +1 -1
  3. package/dist/account/personal-server-lite-owner-binding.d.ts +2 -2
  4. package/dist/account/personal-server-lite-owner-binding.js +1 -1
  5. package/dist/account/personal-server-lite-owner-binding.js.map +1 -1
  6. package/dist/index.browser.d.ts +2 -1
  7. package/dist/index.browser.js +208 -23
  8. package/dist/index.browser.js.map +4 -4
  9. package/dist/index.node.cjs +213 -23
  10. package/dist/index.node.cjs.map +4 -4
  11. package/dist/index.node.d.ts +2 -1
  12. package/dist/index.node.js +208 -23
  13. package/dist/index.node.js.map +4 -4
  14. package/dist/{protocol/personal-server-lite-owner-binding.cjs → personal-server-lite/owner-binding.cjs} +5 -5
  15. package/dist/personal-server-lite/owner-binding.cjs.map +1 -0
  16. package/dist/{protocol/personal-server-lite-owner-binding.d.ts → personal-server-lite/owner-binding.d.ts} +3 -3
  17. package/dist/{protocol/personal-server-lite-owner-binding.js → personal-server-lite/owner-binding.js} +2 -2
  18. package/dist/personal-server-lite/owner-binding.js.map +1 -0
  19. package/dist/protocol/escrow.cjs +146 -0
  20. package/dist/protocol/escrow.cjs.map +1 -0
  21. package/dist/protocol/escrow.d.ts +336 -0
  22. package/dist/protocol/escrow.js +118 -0
  23. package/dist/protocol/escrow.js.map +1 -0
  24. package/dist/protocol/escrow.test.d.ts +1 -0
  25. package/dist/protocol/personal-server-registration.cjs +16 -4
  26. package/dist/protocol/personal-server-registration.cjs.map +1 -1
  27. package/dist/protocol/personal-server-registration.d.ts +5 -2
  28. package/dist/protocol/personal-server-registration.js +16 -4
  29. package/dist/protocol/personal-server-registration.js.map +1 -1
  30. package/dist/storage/providers/vana-storage.cjs +75 -17
  31. package/dist/storage/providers/vana-storage.cjs.map +1 -1
  32. package/dist/storage/providers/vana-storage.js +75 -17
  33. package/dist/storage/providers/vana-storage.js.map +1 -1
  34. package/package.json +1 -1
  35. package/dist/protocol/personal-server-lite-owner-binding.cjs.map +0 -1
  36. package/dist/protocol/personal-server-lite-owner-binding.js.map +0 -1
  37. /package/dist/{protocol/personal-server-lite-owner-binding.test.d.ts → personal-server-lite/owner-binding.test.d.ts} +0 -0
@@ -1186,9 +1186,11 @@ __export(index_node_exports, {
1186
1186
  DataFileEnvelopeSchema: () => DataFileEnvelopeSchema,
1187
1187
  DropboxStorage: () => DropboxStorage,
1188
1188
  ECIESError: () => ECIESError,
1189
+ ESCROW_DEPOSIT_ABI: () => ESCROW_DEPOSIT_ABI,
1189
1190
  ExpiredTokenError: () => ExpiredTokenError,
1190
1191
  FILE_DELETION_TYPES: () => FILE_DELETION_TYPES,
1191
1192
  FILE_REGISTRATION_TYPES: () => FILE_REGISTRATION_TYPES,
1193
+ GENERIC_PAYMENT_TYPES: () => GENERIC_PAYMENT_TYPES,
1192
1194
  GRANT_REGISTRATION_TYPES: () => GRANT_REGISTRATION_TYPES,
1193
1195
  GRANT_REVOCATION_TYPES: () => GRANT_REVOCATION_TYPES,
1194
1196
  GoogleDriveStorage: () => GoogleDriveStorage,
@@ -1199,6 +1201,7 @@ __export(index_node_exports, {
1199
1201
  IpfsStorage: () => IpfsStorage,
1200
1202
  MASTER_KEY_MESSAGE: () => MASTER_KEY_MESSAGE,
1201
1203
  MissingAuthError: () => MissingAuthError,
1204
+ NATIVE_ASSET_ADDRESS: () => NATIVE_ASSET_ADDRESS,
1202
1205
  NetworkError: () => NetworkError,
1203
1206
  NodeECIESProvider: () => NodeECIESUint8Provider,
1204
1207
  NodePlatformAdapter: () => NodePlatformAdapter,
@@ -1243,6 +1246,7 @@ __export(index_node_exports, {
1243
1246
  contractCacheForTesting: () => contractCacheForTesting,
1244
1247
  createBrowserPlatformAdapter: () => createBrowserPlatformAdapter,
1245
1248
  createDataFileEnvelope: () => createDataFileEnvelope,
1249
+ createEscrowGatewayClient: () => createEscrowGatewayClient,
1246
1250
  createGatewayClient: () => createGatewayClient,
1247
1251
  createNodePlatformAdapter: () => createNodePlatformAdapter,
1248
1252
  createPlatformAdapter: () => createPlatformAdapter,
@@ -1260,6 +1264,7 @@ __export(index_node_exports, {
1260
1264
  fileDeletionDomain: () => fileDeletionDomain,
1261
1265
  fileRegistrationDomain: () => fileRegistrationDomain,
1262
1266
  generatePkceVerifier: () => generatePkceVerifier,
1267
+ genericPaymentDomain: () => genericPaymentDomain,
1263
1268
  getAbi: () => getAbi,
1264
1269
  getAllChains: () => getAllChains,
1265
1270
  getChainConfig: () => getChainConfig,
@@ -29164,6 +29169,8 @@ async function buildWeb3SignedHeader(params) {
29164
29169
  var DEFAULT_ENDPOINT = "https://storage.vana.org";
29165
29170
  var BLOB_PATH_PREFIX = "/v1/blobs";
29166
29171
  var DEFAULT_TOKEN_TTL_SECONDS = 300;
29172
+ var MAX_UPLOAD_ATTEMPTS = 4;
29173
+ var MAX_RATE_LIMIT_DELAY_MS = 3e4;
29167
29174
  var VanaStorage = class {
29168
29175
  endpoint;
29169
29176
  signer;
@@ -29202,27 +29209,46 @@ var VanaStorage = class {
29202
29209
  const body = new Uint8Array(await file.arrayBuffer());
29203
29210
  const contentType = file.type !== "" ? file.type : "application/octet-stream";
29204
29211
  const header = await this.signRequest("PUT", path, body);
29205
- let response;
29206
- try {
29207
- response = await this.fetchImpl(`${this.endpoint}${path}`, {
29208
- method: "PUT",
29209
- headers: {
29210
- authorization: header,
29211
- "content-type": contentType
29212
- },
29213
- body
29214
- });
29215
- } catch (cause) {
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
+ }
29216
29243
  throw new StorageError(
29217
- `vana-storage upload network error: ${describe(cause)}`,
29218
- "UPLOAD_ERROR",
29219
- "vana-storage",
29220
- { cause: cause instanceof Error ? cause : void 0 }
29244
+ `vana-storage upload failed: ${response.status} ${response.statusText} - ${responseText}`,
29245
+ "UPLOAD_FAILED",
29246
+ "vana-storage"
29221
29247
  );
29222
29248
  }
29223
- if (!response.ok) {
29249
+ if (!response?.ok) {
29224
29250
  throw new StorageError(
29225
- `vana-storage upload failed: ${response.status} ${response.statusText} - ${await safeText(response)}`,
29251
+ `vana-storage upload failed after ${MAX_UPLOAD_ATTEMPTS} attempts - ${responseText}`,
29226
29252
  "UPLOAD_FAILED",
29227
29253
  "vana-storage"
29228
29254
  );
@@ -29375,6 +29401,43 @@ function describe(value) {
29375
29401
  if (value instanceof Error) return value.message;
29376
29402
  return String(value);
29377
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
+ }
29378
29441
  async function safeText(response) {
29379
29442
  try {
29380
29443
  return await response.text();
@@ -32739,8 +32802,11 @@ var BUILDER_REGISTRATION_TYPES = {
32739
32802
 
32740
32803
  // src/protocol/personal-server-registration.ts
32741
32804
  var import_viem14 = require("viem");
32742
- var PERSONAL_SERVER_REGISTRATION_DEFAULT_CHAIN_ID = 1480;
32743
- var PERSONAL_SERVER_REGISTRATION_DEFAULT_VERIFYING_CONTRACT = "0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c";
32805
+ var PERSONAL_SERVER_REGISTRATION_DEFAULT_CHAIN_ID = vanaMainnet2.id;
32806
+ var PERSONAL_SERVER_REGISTRATION_DEFAULT_VERIFYING_CONTRACT = getContractAddress(
32807
+ PERSONAL_SERVER_REGISTRATION_DEFAULT_CHAIN_ID,
32808
+ "DataPortabilityServers"
32809
+ );
32744
32810
  function assertAddress(value, name) {
32745
32811
  if (!(0, import_viem14.isAddress)(value)) {
32746
32812
  throw new Error(`${name} must be a valid EVM address`);
@@ -32755,6 +32821,12 @@ function getAccountAddress(account) {
32755
32821
  function isPersonalServerRegistrationSigner(source) {
32756
32822
  return "address" in source && typeof source.signTypedData === "function";
32757
32823
  }
32824
+ function getDefaultServerRegistrationContract(chainId) {
32825
+ return getContractAddress(
32826
+ chainId,
32827
+ "DataPortabilityServers"
32828
+ );
32829
+ }
32758
32830
  function createViemPersonalServerRegistrationSigner(source, options = {}) {
32759
32831
  if (isPersonalServerRegistrationSigner(source)) {
32760
32832
  return source;
@@ -32777,12 +32849,13 @@ function personalServerRegistrationDomain(input = {}) {
32777
32849
  if (input.config) {
32778
32850
  return serverRegistrationDomain(input.config);
32779
32851
  }
32780
- const verifyingContract = input.verifyingContract ?? PERSONAL_SERVER_REGISTRATION_DEFAULT_VERIFYING_CONTRACT;
32852
+ const chainId = input.chainId ?? PERSONAL_SERVER_REGISTRATION_DEFAULT_CHAIN_ID;
32853
+ const verifyingContract = input.verifyingContract ?? getDefaultServerRegistrationContract(chainId);
32781
32854
  assertAddress(verifyingContract, "verifyingContract");
32782
32855
  return {
32783
32856
  name: "Vana Data Portability",
32784
32857
  version: "1",
32785
- chainId: input.chainId ?? PERSONAL_SERVER_REGISTRATION_DEFAULT_CHAIN_ID,
32858
+ chainId,
32786
32859
  verifyingContract
32787
32860
  };
32788
32861
  }
@@ -32820,9 +32893,9 @@ async function buildPersonalServerRegistrationSignature(input) {
32820
32893
  }
32821
32894
  var registerPersonalServerSignature = buildPersonalServerRegistrationSignature;
32822
32895
 
32823
- // src/protocol/personal-server-lite-owner-binding.ts
32896
+ // src/personal-server-lite/owner-binding.ts
32824
32897
  var import_viem15 = require("viem");
32825
- var PERSONAL_SERVER_LITE_OWNER_BINDING_VERSION = "vana.account.v1";
32898
+ var PERSONAL_SERVER_LITE_OWNER_BINDING_VERSION = "vana.ps-lite.owner-binding.v1";
32826
32899
  var PERSONAL_SERVER_LITE_OWNER_BINDING_PURPOSE = "ps-lite-owner";
32827
32900
  var PERSONAL_SERVER_LITE_OWNER_BINDING_PREFIX = `${PERSONAL_SERVER_LITE_OWNER_BINDING_VERSION}:${PERSONAL_SERVER_LITE_OWNER_BINDING_PURPOSE}:`;
32828
32901
  function assertAddress2(value, name) {
@@ -33565,6 +33638,118 @@ function createGatewayClient(baseUrl) {
33565
33638
  };
33566
33639
  }
33567
33640
 
33641
+ // src/protocol/escrow.ts
33642
+ var GENERIC_PAYMENT_TYPES = {
33643
+ GenericPayment: [
33644
+ { name: "payerAddress", type: "address" },
33645
+ { name: "opType", type: "string" },
33646
+ { name: "opId", type: "bytes32" },
33647
+ { name: "asset", type: "address" },
33648
+ { name: "amount", type: "uint256" },
33649
+ { name: "paymentNonce", type: "uint256" }
33650
+ ]
33651
+ };
33652
+ function genericPaymentDomain(chainId, escrowContract) {
33653
+ return {
33654
+ name: "Vana Data Portability",
33655
+ version: "1",
33656
+ chainId,
33657
+ verifyingContract: escrowContract
33658
+ };
33659
+ }
33660
+ var ESCROW_DEPOSIT_ABI = [
33661
+ {
33662
+ type: "function",
33663
+ name: "depositNative",
33664
+ stateMutability: "payable",
33665
+ inputs: [{ name: "account", type: "address" }],
33666
+ outputs: []
33667
+ },
33668
+ {
33669
+ type: "function",
33670
+ name: "depositToken",
33671
+ stateMutability: "nonpayable",
33672
+ inputs: [
33673
+ { name: "account", type: "address" },
33674
+ { name: "token", type: "address" },
33675
+ { name: "amount", type: "uint256" }
33676
+ ],
33677
+ outputs: []
33678
+ }
33679
+ ];
33680
+ var NATIVE_ASSET_ADDRESS = "0x0000000000000000000000000000000000000000";
33681
+ function createEscrowGatewayClient(baseUrl) {
33682
+ const base = baseUrl.replace(/\/+$/, "");
33683
+ async function throwOnError(res, context) {
33684
+ if (!res.ok) {
33685
+ let detail = "";
33686
+ try {
33687
+ const body = await res.json();
33688
+ if (body.error) detail = `: ${body.error}`;
33689
+ } catch {
33690
+ }
33691
+ throw new Error(
33692
+ `Escrow gateway error (${context}): ${res.status} ${res.statusText}${detail}`
33693
+ );
33694
+ }
33695
+ }
33696
+ return {
33697
+ async submitDeposit({ txHash }) {
33698
+ const res = await fetch(`${base}/v1/escrow/deposit`, {
33699
+ method: "POST",
33700
+ headers: { "Content-Type": "application/json" },
33701
+ body: JSON.stringify({ txHash })
33702
+ });
33703
+ if (res.status !== 200 && res.status !== 202) {
33704
+ await throwOnError(res, "POST /v1/escrow/deposit");
33705
+ }
33706
+ return res.json();
33707
+ },
33708
+ async getEscrowBalance(account) {
33709
+ const res = await fetch(
33710
+ `${base}/v1/escrow/balance?account=${encodeURIComponent(account)}`
33711
+ );
33712
+ await throwOnError(res, "GET /v1/escrow/balance");
33713
+ return res.json();
33714
+ },
33715
+ async syncEscrowBalance(account) {
33716
+ const res = await fetch(
33717
+ `${base}/v1/escrow/balance/sync?account=${encodeURIComponent(account)}`,
33718
+ { method: "POST" }
33719
+ );
33720
+ await throwOnError(res, "POST /v1/escrow/balance/sync");
33721
+ return res.json();
33722
+ },
33723
+ async payForOp({
33724
+ payerAddress,
33725
+ opType,
33726
+ opId,
33727
+ asset,
33728
+ amount,
33729
+ paymentNonce,
33730
+ signature
33731
+ }) {
33732
+ const res = await fetch(`${base}/v1/escrow/pay`, {
33733
+ method: "POST",
33734
+ headers: {
33735
+ "Content-Type": "application/json",
33736
+ Authorization: `Web3Signed ${signature}`
33737
+ },
33738
+ body: JSON.stringify({
33739
+ payerAddress,
33740
+ opType,
33741
+ opId,
33742
+ asset,
33743
+ amount,
33744
+ paymentNonce
33745
+ })
33746
+ });
33747
+ await throwOnError(res, "POST /v1/escrow/pay");
33748
+ return res.json();
33749
+ }
33750
+ };
33751
+ }
33752
+
33568
33753
  // src/types/ps-errors.ts
33569
33754
  var PSError = class extends Error {
33570
33755
  constructor(code, message) {
@@ -33642,9 +33827,11 @@ async function parsePSError(response) {
33642
33827
  DataFileEnvelopeSchema,
33643
33828
  DropboxStorage,
33644
33829
  ECIESError,
33830
+ ESCROW_DEPOSIT_ABI,
33645
33831
  ExpiredTokenError,
33646
33832
  FILE_DELETION_TYPES,
33647
33833
  FILE_REGISTRATION_TYPES,
33834
+ GENERIC_PAYMENT_TYPES,
33648
33835
  GRANT_REGISTRATION_TYPES,
33649
33836
  GRANT_REVOCATION_TYPES,
33650
33837
  GoogleDriveStorage,
@@ -33655,6 +33842,7 @@ async function parsePSError(response) {
33655
33842
  IpfsStorage,
33656
33843
  MASTER_KEY_MESSAGE,
33657
33844
  MissingAuthError,
33845
+ NATIVE_ASSET_ADDRESS,
33658
33846
  NetworkError,
33659
33847
  NodeECIESProvider,
33660
33848
  NodePlatformAdapter,
@@ -33699,6 +33887,7 @@ async function parsePSError(response) {
33699
33887
  contractCacheForTesting,
33700
33888
  createBrowserPlatformAdapter,
33701
33889
  createDataFileEnvelope,
33890
+ createEscrowGatewayClient,
33702
33891
  createGatewayClient,
33703
33892
  createNodePlatformAdapter,
33704
33893
  createPlatformAdapter,
@@ -33716,6 +33905,7 @@ async function parsePSError(response) {
33716
33905
  fileDeletionDomain,
33717
33906
  fileRegistrationDomain,
33718
33907
  generatePkceVerifier,
33908
+ genericPaymentDomain,
33719
33909
  getAbi,
33720
33910
  getAllChains,
33721
33911
  getChainConfig,