@opendatalabs/vana-sdk 3.13.4 → 3.14.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 (116) hide show
  1. package/dist/account/personal-server-lite-owner-binding.d.ts +1 -1
  2. package/dist/account/personal-server-registration.d.ts +1 -1
  3. package/dist/auth/errors.d.ts +1 -1
  4. package/dist/auth/oauth-client.d.ts +1 -1
  5. package/dist/browser.d.ts +1 -1
  6. package/dist/chains/index.d.ts +2 -2
  7. package/dist/chains.browser.d.ts +2 -2
  8. package/dist/chains.d.ts +2 -2
  9. package/dist/chains.node.d.ts +2 -2
  10. package/dist/config/contracts.config.cjs +1 -1
  11. package/dist/config/contracts.config.cjs.map +1 -1
  12. package/dist/config/contracts.config.js +1 -1
  13. package/dist/config/contracts.config.js.map +1 -1
  14. package/dist/contracts/contractController.d.ts +4 -4
  15. package/dist/core/client.d.ts +1 -1
  16. package/dist/crypto/ecies/base.d.ts +1 -1
  17. package/dist/crypto/ecies/browser.d.ts +1 -1
  18. package/dist/crypto/ecies/index.d.ts +2 -2
  19. package/dist/crypto/ecies/node.d.ts +1 -1
  20. package/dist/crypto/services/WalletKeyEncryptionService.d.ts +1 -1
  21. package/dist/direct/access-request-client.cjs +3 -1
  22. package/dist/direct/access-request-client.cjs.map +1 -1
  23. package/dist/direct/access-request-client.d.ts +2 -2
  24. package/dist/direct/access-request-client.js +3 -1
  25. package/dist/direct/access-request-client.js.map +1 -1
  26. package/dist/direct/connect-flow.d.ts +1 -1
  27. package/dist/direct/controller.cjs +72 -32
  28. package/dist/direct/controller.cjs.map +1 -1
  29. package/dist/direct/controller.d.ts +48 -10
  30. package/dist/direct/controller.js +77 -33
  31. package/dist/direct/controller.js.map +1 -1
  32. package/dist/direct/endpoints.d.ts +1 -1
  33. package/dist/direct/errors.cjs +11 -2
  34. package/dist/direct/errors.cjs.map +1 -1
  35. package/dist/direct/errors.d.ts +14 -1
  36. package/dist/direct/errors.js +9 -1
  37. package/dist/direct/errors.js.map +1 -1
  38. package/dist/direct/escrow-payment.cjs +147 -12
  39. package/dist/direct/escrow-payment.cjs.map +1 -1
  40. package/dist/direct/escrow-payment.d.ts +65 -12
  41. package/dist/direct/escrow-payment.js +143 -12
  42. package/dist/direct/escrow-payment.js.map +1 -1
  43. package/dist/direct/personal-server-read.cjs +164 -23
  44. package/dist/direct/personal-server-read.cjs.map +1 -1
  45. package/dist/direct/personal-server-read.d.ts +28 -18
  46. package/dist/direct/personal-server-read.js +167 -25
  47. package/dist/direct/personal-server-read.js.map +1 -1
  48. package/dist/direct/types.cjs.map +1 -1
  49. package/dist/direct/types.d.ts +81 -21
  50. package/dist/direct/types.js.map +1 -1
  51. package/dist/direct/use-direct-vana-connect.d.ts +1 -1
  52. package/dist/generated/abi/index.d.ts +25 -25
  53. package/dist/generated/addresses.cjs +6 -6
  54. package/dist/generated/addresses.cjs.map +1 -1
  55. package/dist/generated/addresses.d.ts +6 -6
  56. package/dist/generated/addresses.js +6 -6
  57. package/dist/generated/addresses.js.map +1 -1
  58. package/dist/index.browser.d.ts +44 -44
  59. package/dist/index.browser.js +6 -6
  60. package/dist/index.browser.js.map +2 -2
  61. package/dist/index.node.cjs +498 -6
  62. package/dist/index.node.cjs.map +4 -4
  63. package/dist/index.node.d.ts +48 -45
  64. package/dist/index.node.js +486 -6
  65. package/dist/index.node.js.map +4 -4
  66. package/dist/node.d.ts +1 -1
  67. package/dist/platform/browser-only.d.ts +3 -3
  68. package/dist/platform/browser-safe.d.ts +3 -3
  69. package/dist/platform/browser.d.ts +1 -1
  70. package/dist/platform/index.d.ts +5 -5
  71. package/dist/platform/node.d.ts +1 -1
  72. package/dist/platform/ports/openpgp-port.d.ts +1 -1
  73. package/dist/platform/utils.d.ts +1 -1
  74. package/dist/platform.browser.d.ts +4 -4
  75. package/dist/platform.d.ts +5 -5
  76. package/dist/platform.node.d.ts +5 -5
  77. package/dist/protocol/data-point-status.d.ts +1 -1
  78. package/dist/protocol/eip712.cjs.map +1 -1
  79. package/dist/protocol/eip712.js.map +1 -1
  80. package/dist/protocol/escrow-deposit.d.ts +1 -1
  81. package/dist/protocol/escrow.cjs.map +1 -1
  82. package/dist/protocol/escrow.d.ts +11 -4
  83. package/dist/protocol/escrow.js.map +1 -1
  84. package/dist/protocol/fee-registry.d.ts +1 -1
  85. package/dist/protocol/gateway.cjs.map +1 -1
  86. package/dist/protocol/gateway.js.map +1 -1
  87. package/dist/protocol/grants.d.ts +1 -1
  88. package/dist/protocol/personal-server-data.d.ts +2 -2
  89. package/dist/protocol/personal-server-registration.d.ts +2 -2
  90. package/dist/react.d.ts +3 -3
  91. package/dist/server.cjs +12 -0
  92. package/dist/server.cjs.map +1 -1
  93. package/dist/server.d.ts +8 -8
  94. package/dist/server.js +12 -0
  95. package/dist/server.js.map +1 -1
  96. package/dist/session-relay/client.d.ts +1 -1
  97. package/dist/session-relay/endpoints.d.ts +1 -1
  98. package/dist/session-relay/errors.d.ts +1 -1
  99. package/dist/session-relay/index.d.ts +5 -5
  100. package/dist/session-relay/signing.d.ts +1 -1
  101. package/dist/session-relay/types.d.ts +1 -1
  102. package/dist/session-relay.d.ts +5 -5
  103. package/dist/storage/default.d.ts +2 -2
  104. package/dist/storage/index.d.ts +16 -16
  105. package/dist/storage/manager.d.ts +1 -1
  106. package/dist/storage/providers/callback-storage.d.ts +2 -2
  107. package/dist/storage/providers/dropbox.d.ts +1 -1
  108. package/dist/storage/providers/google-drive.d.ts +1 -1
  109. package/dist/storage/providers/ipfs.d.ts +1 -1
  110. package/dist/storage/providers/pinata.d.ts +1 -1
  111. package/dist/storage/providers/r2.d.ts +1 -1
  112. package/dist/storage/providers/vana-storage.d.ts +3 -3
  113. package/dist/types/config.d.ts +1 -1
  114. package/dist/types/index.d.ts +6 -6
  115. package/dist/types.d.ts +1 -1
  116. package/package.json +13 -1
@@ -8,7 +8,7 @@
8
8
  * @category Account
9
9
  */
10
10
  import type { Address, Hex } from "viem";
11
- import { buildPersonalServerLiteOwnerBindingMessage, type PersonalServerLiteOwnerBindingSignature } from "../personal-server-lite/owner-binding";
11
+ import { buildPersonalServerLiteOwnerBindingMessage, type PersonalServerLiteOwnerBindingSignature } from "../personal-server-lite/owner-binding.js";
12
12
  export interface AccountPersonalServerLiteOwnerBindingClient {
13
13
  getAddress(): Promise<Address | null> | Address | null;
14
14
  signMessage(input: {
@@ -8,7 +8,7 @@
8
8
  * @category Account
9
9
  */
10
10
  import { type Address } from "viem";
11
- import { type BuildPersonalServerRegistrationTypedDataInput, type PersonalServerRegistrationSignature, type PersonalServerRegistrationSigner, type PersonalServerRegistrationTypedData } from "../protocol/personal-server-registration";
11
+ import { type BuildPersonalServerRegistrationTypedDataInput, type PersonalServerRegistrationSignature, type PersonalServerRegistrationSigner, type PersonalServerRegistrationTypedData } from "../protocol/personal-server-registration.js";
12
12
  export declare const ACCOUNT_PERSONAL_SERVER_REGISTRATION_INTENT: "personal_server.server_registration.v1";
13
13
  export type AccountPersonalServerRegistrationIntent = typeof ACCOUNT_PERSONAL_SERVER_REGISTRATION_INTENT;
14
14
  export type AccountPersonalServerRegistrationStatus = "signed" | "confirmation_required" | "fallback_required";
@@ -8,7 +8,7 @@
8
8
  *
9
9
  * @category Error Handling
10
10
  */
11
- import { VanaError } from "../errors";
11
+ import { VanaError } from "../errors.js";
12
12
  /** Thrown when an Authorization header is missing or empty. */
13
13
  export declare class MissingAuthError extends VanaError {
14
14
  readonly details?: Record<string, unknown> | undefined;
@@ -9,7 +9,7 @@
9
9
  * @category Auth
10
10
  * @module auth/oauth-client
11
11
  */
12
- import { type TokenRecord, type TokenStore } from "./token-store";
12
+ import { type TokenRecord, type TokenStore } from "./token-store.js";
13
13
  /**
14
14
  * Constructor options for {@link OAuthClient}.
15
15
  */
package/dist/browser.d.ts CHANGED
@@ -33,4 +33,4 @@
33
33
  * @category Browser
34
34
  * @module browser
35
35
  */
36
- export { BrowserPlatformAdapter } from "./platform/browser";
36
+ export { BrowserPlatformAdapter } from "./platform/browser.js";
@@ -30,5 +30,5 @@
30
30
  * @category Chains
31
31
  * @module chains
32
32
  */
33
- export type { VanaChainConfig } from "./definitions";
34
- export { vanaMainnet, moksha, mokshaTestnet, getChainConfig, getAllChains, } from "./definitions";
33
+ export type { VanaChainConfig } from "./definitions.js";
34
+ export { vanaMainnet, moksha, mokshaTestnet, getChainConfig, getAllChains, } from "./definitions.js";
@@ -4,5 +4,5 @@
4
4
  * This is identical to the base chains export since chain configurations
5
5
  * are environment-agnostic.
6
6
  */
7
- export type { VanaChainConfig } from "./chains/definitions";
8
- export { vanaMainnet, moksha, mokshaTestnet, getChainConfig, getAllChains, } from "./chains/definitions";
7
+ export type { VanaChainConfig } from "./chains/definitions.js";
8
+ export { vanaMainnet, moksha, mokshaTestnet, getChainConfig, getAllChains, } from "./chains/definitions.js";
package/dist/chains.d.ts CHANGED
@@ -4,5 +4,5 @@
4
4
  * This module exports only chain configurations without any platform-specific
5
5
  * dependencies, making it safe for server-side rendering.
6
6
  */
7
- export type { VanaChainConfig } from "./chains/definitions";
8
- export { vanaMainnet, moksha, mokshaTestnet, getChainConfig, getAllChains, } from "./chains/definitions";
7
+ export type { VanaChainConfig } from "./chains/definitions.js";
8
+ export { vanaMainnet, moksha, mokshaTestnet, getChainConfig, getAllChains, } from "./chains/definitions.js";
@@ -4,5 +4,5 @@
4
4
  * This is identical to the base chains export since chain configurations
5
5
  * are environment-agnostic.
6
6
  */
7
- export type { VanaChainConfig } from "./chains/definitions";
8
- export { vanaMainnet, moksha, mokshaTestnet, getChainConfig, getAllChains, } from "./chains/definitions";
7
+ export type { VanaChainConfig } from "./chains/definitions.js";
8
+ export { vanaMainnet, moksha, mokshaTestnet, getChainConfig, getAllChains, } from "./chains/definitions.js";
@@ -45,7 +45,7 @@ const CONTRACTS = {
45
45
  },
46
46
  DataPortabilityServers: {
47
47
  addresses: {
48
- 14800: "0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c",
48
+ 14800: "0xCae2CE0e9caa6643ed28186cF57bd40Bd9E17Eab",
49
49
  1480: "0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c"
50
50
  }
51
51
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/contracts.config.ts"],"sourcesContent":["// SOURCE CONFIGURATION - Complete contract registry\n// Generated output: src/generated/addresses.ts\n\n/**\n * Complete contract configuration for the Vana protocol.\n *\n * ⚠️ THIS IS A SOURCE FILE - EDIT THIS TO ADD/UPDATE CONTRACTS\n *\n * @remarks\n * This file contains all contract addresses and discovery metadata in one place.\n *\n * **Contract Types:**\n * - Entry Points: Contracts without `discovery` field (must be known externally)\n * - Discoverable: Contracts with `discovery` field (auto-discovered from parent)\n *\n * **Build Process:**\n * 1. Edit this file to add/update contracts\n * 2. Run `npm run discover-addresses` to validate and generate complete registry\n * 3. Run `npm run fetch-abis` to fetch ABIs for all contracts\n *\n * @category Configuration\n * @internal This is a source file - apps should import from src/generated/addresses.ts\n */\n\ninterface DiscoveryMetadata {\n /** Parent contract to discover this from */\n parent: string;\n /** Getter function name on parent contract */\n getter: string;\n}\n\ninterface ContractConfig {\n addresses: {\n 14800: string;\n 1480: string;\n };\n /** If present, this contract can be auto-discovered from parent */\n discovery?: DiscoveryMetadata;\n}\n\nexport const CONTRACTS: Record<string, ContractConfig> = {\n // ========================================\n // DATA PORTABILITY CONTRACTS\n // ========================================\n DataPortabilityEscrow: {\n addresses: {\n 14800: \"0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3\",\n 1480: \"0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3\",\n },\n },\n FeeRegistry: {\n addresses: {\n 14800: \"0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2\",\n 1480: \"0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2\",\n },\n },\n DataPortabilityPermissions: {\n addresses: {\n 14800: \"0xD54523048AdD05b4d734aFaE7C68324Ebb7373eF\",\n 1480: \"0xD54523048AdD05b4d734aFaE7C68324Ebb7373eF\",\n },\n },\n DataPortabilityServers: {\n addresses: {\n 14800: \"0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c\",\n 1480: \"0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c\",\n },\n },\n DataPortabilityGrantees: {\n addresses: {\n 14800: \"0x8325C0A0948483EdA023A1A2Fd895e62C5131234\",\n 1480: \"0x8325C0A0948483EdA023A1A2Fd895e62C5131234\",\n },\n },\n DataRegistry: {\n addresses: {\n 14800: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n 1480: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n },\n },\n\n // ========================================\n // COMPUTING INFRASTRUCTURE\n // ========================================\n ComputeEngine: {\n addresses: {\n 14800: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n 1480: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n },\n },\n ComputeEngineTreasury: {\n addresses: {\n 14800: \"0xceB33C501B624D984bD1Ed3298f6D1d8F7CE03d1\",\n 1480: \"0xceB33C501B624D984bD1Ed3298f6D1d8F7CE03d1\",\n },\n discovery: {\n parent: \"ComputeEngine\",\n getter: \"computeEngineTreasury\",\n },\n },\n QueryEngine: {\n addresses: {\n 14800: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n 1480: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n },\n },\n VanaTreasury: {\n addresses: {\n 14800: \"0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\",\n 1480: \"0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\",\n },\n discovery: {\n parent: \"QueryEngine\",\n getter: \"queryEngineTreasury\",\n },\n },\n DataRefinerRegistry: {\n addresses: {\n 14800: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n 1480: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n },\n },\n ComputeInstructionRegistry: {\n addresses: {\n 14800: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n 1480: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n },\n },\n\n // ========================================\n // TEE POOLS (Canonical Deployments)\n // ========================================\n TeePoolPhala: {\n addresses: {\n 14800: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n 1480: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n },\n },\n TeePoolEphemeralStandard: {\n addresses: {\n 14800: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n 1480: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n },\n },\n TeePoolPersistentStandard: {\n addresses: {\n 14800: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n 1480: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n },\n },\n TeePoolPersistentGpu: {\n addresses: {\n 14800: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n 1480: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n },\n },\n TeePoolDedicatedStandard: {\n addresses: {\n 14800: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n 1480: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n },\n },\n TeePoolDedicatedGpu: {\n addresses: {\n 14800: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n 1480: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n },\n },\n\n // ========================================\n // VANA EPOCH / DLP REGISTRY\n // ========================================\n // Note: DLP rewards-specific contracts (DLPPerformance, DLPRewardDeployer,\n // DLPRewardDeployerTreasury, DLPRewardSwap, SwapHelper) were removed in the\n // protocol unification cleanup. VanaEpoch, DLPRegistry, and DLPRegistryTreasury\n // are kept because they may be referenced beyond the rewards system.\n VanaEpoch: {\n addresses: {\n 14800: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n 1480: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n },\n },\n DLPRegistry: {\n addresses: {\n 14800: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n 1480: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n },\n },\n DLPRegistryTreasury: {\n addresses: {\n 14800: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n 1480: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n },\n discovery: {\n parent: \"DLPRegistry\",\n getter: \"treasury\",\n },\n },\n\n // ========================================\n // VANA POOL (STAKING)\n // ========================================\n VanaPoolStaking: {\n addresses: {\n 14800: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n 1480: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n },\n },\n VanaPoolTreasury: {\n addresses: {\n 14800: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n 1480: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n },\n discovery: {\n parent: \"VanaPoolStaking\",\n getter: \"vanaPoolTreasury\",\n },\n },\n VanaPoolEntity: {\n addresses: {\n 14800: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n 1480: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n },\n discovery: {\n parent: \"VanaPoolStaking\",\n getter: \"vanaPoolEntity\",\n },\n },\n\n // ========================================\n // DLP DEPLOYMENT & TOKEN SYSTEM\n // ========================================\n DATFactory: {\n addresses: {\n 14800: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n 1480: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n },\n },\n DAT: {\n addresses: {\n 14800: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n 1480: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n },\n },\n DATPausable: {\n addresses: {\n 14800: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n 1480: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n },\n },\n DATVotes: {\n addresses: {\n 14800: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n 1480: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n },\n },\n\n // ========================================\n // EXTERNAL DEPENDENCIES (DeFi)\n // ========================================\n WVANA: {\n addresses: {\n 14800: \"0xbccc4b4c6530F82FE309c5E845E50b5E9C89f2AD\",\n 1480: \"0x00EDdD9621Fb08436d0331c149D1690909a5906d\",\n },\n },\n UniswapV3NonfungiblePositionManager: {\n addresses: {\n 14800: \"0x48Bd633f4B9128a38Ebb4a48b6975EB3Eaf1931b\",\n 1480: \"0x45a2992e1bFdCF9b9AcE0a84A238f2E56F481816\",\n },\n },\n UniswapV3QuoterV2: {\n addresses: {\n 14800: \"0x3152246f3CD4dD465292Dd4Ffd792E2Cf602e332\",\n 1480: \"0x1b13728ea3C90863990aC0e05987CfeC1888908c\",\n },\n },\n\n // ========================================\n // UTILITY CONTRACTS\n // ========================================\n Multicall3: {\n addresses: {\n 14800: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n 1480: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n },\n },\n Multisend: {\n addresses: {\n 14800: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n 1480: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n },\n },\n} as const;\n\n// Legacy DLPRoot* and deprecated TeePool entries were removed in the protocol\n// unification cleanup. They were part of the old DLP rewards system superseded\n// by other contracts.\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/config/contracts.config.ts"],"sourcesContent":["// SOURCE CONFIGURATION - Complete contract registry\n// Generated output: src/generated/addresses.ts\n\n/**\n * Complete contract configuration for the Vana protocol.\n *\n * ⚠️ THIS IS A SOURCE FILE - EDIT THIS TO ADD/UPDATE CONTRACTS\n *\n * @remarks\n * This file contains all contract addresses and discovery metadata in one place.\n *\n * **Contract Types:**\n * - Entry Points: Contracts without `discovery` field (must be known externally)\n * - Discoverable: Contracts with `discovery` field (auto-discovered from parent)\n *\n * **Build Process:**\n * 1. Edit this file to add/update contracts\n * 2. Run `npm run discover-addresses` to validate and generate complete registry\n * 3. Run `npm run fetch-abis` to fetch ABIs for all contracts\n *\n * @category Configuration\n * @internal This is a source file - apps should import from src/generated/addresses.ts\n */\n\ninterface DiscoveryMetadata {\n /** Parent contract to discover this from */\n parent: string;\n /** Getter function name on parent contract */\n getter: string;\n}\n\ninterface ContractConfig {\n addresses: {\n 14800: string;\n 1480: string;\n };\n /** If present, this contract can be auto-discovered from parent */\n discovery?: DiscoveryMetadata;\n}\n\nexport const CONTRACTS: Record<string, ContractConfig> = {\n // ========================================\n // DATA PORTABILITY CONTRACTS\n // ========================================\n DataPortabilityEscrow: {\n addresses: {\n 14800: \"0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3\",\n 1480: \"0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3\",\n },\n },\n FeeRegistry: {\n addresses: {\n 14800: \"0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2\",\n 1480: \"0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2\",\n },\n },\n DataPortabilityPermissions: {\n addresses: {\n 14800: \"0xD54523048AdD05b4d734aFaE7C68324Ebb7373eF\",\n 1480: \"0xD54523048AdD05b4d734aFaE7C68324Ebb7373eF\",\n },\n },\n DataPortabilityServers: {\n addresses: {\n 14800: \"0xCae2CE0e9caa6643ed28186cF57bd40Bd9E17Eab\",\n 1480: \"0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c\",\n },\n },\n DataPortabilityGrantees: {\n addresses: {\n 14800: \"0x8325C0A0948483EdA023A1A2Fd895e62C5131234\",\n 1480: \"0x8325C0A0948483EdA023A1A2Fd895e62C5131234\",\n },\n },\n DataRegistry: {\n addresses: {\n 14800: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n 1480: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n },\n },\n\n // ========================================\n // COMPUTING INFRASTRUCTURE\n // ========================================\n ComputeEngine: {\n addresses: {\n 14800: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n 1480: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n },\n },\n ComputeEngineTreasury: {\n addresses: {\n 14800: \"0xceB33C501B624D984bD1Ed3298f6D1d8F7CE03d1\",\n 1480: \"0xceB33C501B624D984bD1Ed3298f6D1d8F7CE03d1\",\n },\n discovery: {\n parent: \"ComputeEngine\",\n getter: \"computeEngineTreasury\",\n },\n },\n QueryEngine: {\n addresses: {\n 14800: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n 1480: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n },\n },\n VanaTreasury: {\n addresses: {\n 14800: \"0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\",\n 1480: \"0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\",\n },\n discovery: {\n parent: \"QueryEngine\",\n getter: \"queryEngineTreasury\",\n },\n },\n DataRefinerRegistry: {\n addresses: {\n 14800: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n 1480: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n },\n },\n ComputeInstructionRegistry: {\n addresses: {\n 14800: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n 1480: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n },\n },\n\n // ========================================\n // TEE POOLS (Canonical Deployments)\n // ========================================\n TeePoolPhala: {\n addresses: {\n 14800: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n 1480: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n },\n },\n TeePoolEphemeralStandard: {\n addresses: {\n 14800: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n 1480: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n },\n },\n TeePoolPersistentStandard: {\n addresses: {\n 14800: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n 1480: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n },\n },\n TeePoolPersistentGpu: {\n addresses: {\n 14800: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n 1480: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n },\n },\n TeePoolDedicatedStandard: {\n addresses: {\n 14800: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n 1480: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n },\n },\n TeePoolDedicatedGpu: {\n addresses: {\n 14800: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n 1480: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n },\n },\n\n // ========================================\n // VANA EPOCH / DLP REGISTRY\n // ========================================\n // Note: DLP rewards-specific contracts (DLPPerformance, DLPRewardDeployer,\n // DLPRewardDeployerTreasury, DLPRewardSwap, SwapHelper) were removed in the\n // protocol unification cleanup. VanaEpoch, DLPRegistry, and DLPRegistryTreasury\n // are kept because they may be referenced beyond the rewards system.\n VanaEpoch: {\n addresses: {\n 14800: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n 1480: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n },\n },\n DLPRegistry: {\n addresses: {\n 14800: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n 1480: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n },\n },\n DLPRegistryTreasury: {\n addresses: {\n 14800: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n 1480: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n },\n discovery: {\n parent: \"DLPRegistry\",\n getter: \"treasury\",\n },\n },\n\n // ========================================\n // VANA POOL (STAKING)\n // ========================================\n VanaPoolStaking: {\n addresses: {\n 14800: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n 1480: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n },\n },\n VanaPoolTreasury: {\n addresses: {\n 14800: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n 1480: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n },\n discovery: {\n parent: \"VanaPoolStaking\",\n getter: \"vanaPoolTreasury\",\n },\n },\n VanaPoolEntity: {\n addresses: {\n 14800: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n 1480: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n },\n discovery: {\n parent: \"VanaPoolStaking\",\n getter: \"vanaPoolEntity\",\n },\n },\n\n // ========================================\n // DLP DEPLOYMENT & TOKEN SYSTEM\n // ========================================\n DATFactory: {\n addresses: {\n 14800: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n 1480: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n },\n },\n DAT: {\n addresses: {\n 14800: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n 1480: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n },\n },\n DATPausable: {\n addresses: {\n 14800: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n 1480: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n },\n },\n DATVotes: {\n addresses: {\n 14800: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n 1480: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n },\n },\n\n // ========================================\n // EXTERNAL DEPENDENCIES (DeFi)\n // ========================================\n WVANA: {\n addresses: {\n 14800: \"0xbccc4b4c6530F82FE309c5E845E50b5E9C89f2AD\",\n 1480: \"0x00EDdD9621Fb08436d0331c149D1690909a5906d\",\n },\n },\n UniswapV3NonfungiblePositionManager: {\n addresses: {\n 14800: \"0x48Bd633f4B9128a38Ebb4a48b6975EB3Eaf1931b\",\n 1480: \"0x45a2992e1bFdCF9b9AcE0a84A238f2E56F481816\",\n },\n },\n UniswapV3QuoterV2: {\n addresses: {\n 14800: \"0x3152246f3CD4dD465292Dd4Ffd792E2Cf602e332\",\n 1480: \"0x1b13728ea3C90863990aC0e05987CfeC1888908c\",\n },\n },\n\n // ========================================\n // UTILITY CONTRACTS\n // ========================================\n Multicall3: {\n addresses: {\n 14800: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n 1480: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n },\n },\n Multisend: {\n addresses: {\n 14800: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n 1480: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n },\n },\n} as const;\n\n// Legacy DLPRoot* and deprecated TeePool entries were removed in the protocol\n// unification cleanup. They were part of the old DLP rewards system superseded\n// by other contracts.\n"],"mappings":"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","names":[]}
@@ -22,7 +22,7 @@ const CONTRACTS = {
22
22
  },
23
23
  DataPortabilityServers: {
24
24
  addresses: {
25
- 14800: "0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c",
25
+ 14800: "0xCae2CE0e9caa6643ed28186cF57bd40Bd9E17Eab",
26
26
  1480: "0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c"
27
27
  }
28
28
  },
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/config/contracts.config.ts"],"sourcesContent":["// SOURCE CONFIGURATION - Complete contract registry\n// Generated output: src/generated/addresses.ts\n\n/**\n * Complete contract configuration for the Vana protocol.\n *\n * ⚠️ THIS IS A SOURCE FILE - EDIT THIS TO ADD/UPDATE CONTRACTS\n *\n * @remarks\n * This file contains all contract addresses and discovery metadata in one place.\n *\n * **Contract Types:**\n * - Entry Points: Contracts without `discovery` field (must be known externally)\n * - Discoverable: Contracts with `discovery` field (auto-discovered from parent)\n *\n * **Build Process:**\n * 1. Edit this file to add/update contracts\n * 2. Run `npm run discover-addresses` to validate and generate complete registry\n * 3. Run `npm run fetch-abis` to fetch ABIs for all contracts\n *\n * @category Configuration\n * @internal This is a source file - apps should import from src/generated/addresses.ts\n */\n\ninterface DiscoveryMetadata {\n /** Parent contract to discover this from */\n parent: string;\n /** Getter function name on parent contract */\n getter: string;\n}\n\ninterface ContractConfig {\n addresses: {\n 14800: string;\n 1480: string;\n };\n /** If present, this contract can be auto-discovered from parent */\n discovery?: DiscoveryMetadata;\n}\n\nexport const CONTRACTS: Record<string, ContractConfig> = {\n // ========================================\n // DATA PORTABILITY CONTRACTS\n // ========================================\n DataPortabilityEscrow: {\n addresses: {\n 14800: \"0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3\",\n 1480: \"0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3\",\n },\n },\n FeeRegistry: {\n addresses: {\n 14800: \"0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2\",\n 1480: \"0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2\",\n },\n },\n DataPortabilityPermissions: {\n addresses: {\n 14800: \"0xD54523048AdD05b4d734aFaE7C68324Ebb7373eF\",\n 1480: \"0xD54523048AdD05b4d734aFaE7C68324Ebb7373eF\",\n },\n },\n DataPortabilityServers: {\n addresses: {\n 14800: \"0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c\",\n 1480: \"0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c\",\n },\n },\n DataPortabilityGrantees: {\n addresses: {\n 14800: \"0x8325C0A0948483EdA023A1A2Fd895e62C5131234\",\n 1480: \"0x8325C0A0948483EdA023A1A2Fd895e62C5131234\",\n },\n },\n DataRegistry: {\n addresses: {\n 14800: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n 1480: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n },\n },\n\n // ========================================\n // COMPUTING INFRASTRUCTURE\n // ========================================\n ComputeEngine: {\n addresses: {\n 14800: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n 1480: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n },\n },\n ComputeEngineTreasury: {\n addresses: {\n 14800: \"0xceB33C501B624D984bD1Ed3298f6D1d8F7CE03d1\",\n 1480: \"0xceB33C501B624D984bD1Ed3298f6D1d8F7CE03d1\",\n },\n discovery: {\n parent: \"ComputeEngine\",\n getter: \"computeEngineTreasury\",\n },\n },\n QueryEngine: {\n addresses: {\n 14800: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n 1480: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n },\n },\n VanaTreasury: {\n addresses: {\n 14800: \"0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\",\n 1480: \"0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\",\n },\n discovery: {\n parent: \"QueryEngine\",\n getter: \"queryEngineTreasury\",\n },\n },\n DataRefinerRegistry: {\n addresses: {\n 14800: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n 1480: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n },\n },\n ComputeInstructionRegistry: {\n addresses: {\n 14800: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n 1480: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n },\n },\n\n // ========================================\n // TEE POOLS (Canonical Deployments)\n // ========================================\n TeePoolPhala: {\n addresses: {\n 14800: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n 1480: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n },\n },\n TeePoolEphemeralStandard: {\n addresses: {\n 14800: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n 1480: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n },\n },\n TeePoolPersistentStandard: {\n addresses: {\n 14800: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n 1480: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n },\n },\n TeePoolPersistentGpu: {\n addresses: {\n 14800: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n 1480: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n },\n },\n TeePoolDedicatedStandard: {\n addresses: {\n 14800: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n 1480: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n },\n },\n TeePoolDedicatedGpu: {\n addresses: {\n 14800: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n 1480: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n },\n },\n\n // ========================================\n // VANA EPOCH / DLP REGISTRY\n // ========================================\n // Note: DLP rewards-specific contracts (DLPPerformance, DLPRewardDeployer,\n // DLPRewardDeployerTreasury, DLPRewardSwap, SwapHelper) were removed in the\n // protocol unification cleanup. VanaEpoch, DLPRegistry, and DLPRegistryTreasury\n // are kept because they may be referenced beyond the rewards system.\n VanaEpoch: {\n addresses: {\n 14800: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n 1480: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n },\n },\n DLPRegistry: {\n addresses: {\n 14800: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n 1480: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n },\n },\n DLPRegistryTreasury: {\n addresses: {\n 14800: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n 1480: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n },\n discovery: {\n parent: \"DLPRegistry\",\n getter: \"treasury\",\n },\n },\n\n // ========================================\n // VANA POOL (STAKING)\n // ========================================\n VanaPoolStaking: {\n addresses: {\n 14800: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n 1480: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n },\n },\n VanaPoolTreasury: {\n addresses: {\n 14800: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n 1480: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n },\n discovery: {\n parent: \"VanaPoolStaking\",\n getter: \"vanaPoolTreasury\",\n },\n },\n VanaPoolEntity: {\n addresses: {\n 14800: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n 1480: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n },\n discovery: {\n parent: \"VanaPoolStaking\",\n getter: \"vanaPoolEntity\",\n },\n },\n\n // ========================================\n // DLP DEPLOYMENT & TOKEN SYSTEM\n // ========================================\n DATFactory: {\n addresses: {\n 14800: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n 1480: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n },\n },\n DAT: {\n addresses: {\n 14800: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n 1480: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n },\n },\n DATPausable: {\n addresses: {\n 14800: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n 1480: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n },\n },\n DATVotes: {\n addresses: {\n 14800: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n 1480: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n },\n },\n\n // ========================================\n // EXTERNAL DEPENDENCIES (DeFi)\n // ========================================\n WVANA: {\n addresses: {\n 14800: \"0xbccc4b4c6530F82FE309c5E845E50b5E9C89f2AD\",\n 1480: \"0x00EDdD9621Fb08436d0331c149D1690909a5906d\",\n },\n },\n UniswapV3NonfungiblePositionManager: {\n addresses: {\n 14800: \"0x48Bd633f4B9128a38Ebb4a48b6975EB3Eaf1931b\",\n 1480: \"0x45a2992e1bFdCF9b9AcE0a84A238f2E56F481816\",\n },\n },\n UniswapV3QuoterV2: {\n addresses: {\n 14800: \"0x3152246f3CD4dD465292Dd4Ffd792E2Cf602e332\",\n 1480: \"0x1b13728ea3C90863990aC0e05987CfeC1888908c\",\n },\n },\n\n // ========================================\n // UTILITY CONTRACTS\n // ========================================\n Multicall3: {\n addresses: {\n 14800: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n 1480: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n },\n },\n Multisend: {\n addresses: {\n 14800: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n 1480: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n },\n },\n} as const;\n\n// Legacy DLPRoot* and deprecated TeePool entries were removed in the protocol\n// unification cleanup. They were part of the old DLP rewards system superseded\n// by other contracts.\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/config/contracts.config.ts"],"sourcesContent":["// SOURCE CONFIGURATION - Complete contract registry\n// Generated output: src/generated/addresses.ts\n\n/**\n * Complete contract configuration for the Vana protocol.\n *\n * ⚠️ THIS IS A SOURCE FILE - EDIT THIS TO ADD/UPDATE CONTRACTS\n *\n * @remarks\n * This file contains all contract addresses and discovery metadata in one place.\n *\n * **Contract Types:**\n * - Entry Points: Contracts without `discovery` field (must be known externally)\n * - Discoverable: Contracts with `discovery` field (auto-discovered from parent)\n *\n * **Build Process:**\n * 1. Edit this file to add/update contracts\n * 2. Run `npm run discover-addresses` to validate and generate complete registry\n * 3. Run `npm run fetch-abis` to fetch ABIs for all contracts\n *\n * @category Configuration\n * @internal This is a source file - apps should import from src/generated/addresses.ts\n */\n\ninterface DiscoveryMetadata {\n /** Parent contract to discover this from */\n parent: string;\n /** Getter function name on parent contract */\n getter: string;\n}\n\ninterface ContractConfig {\n addresses: {\n 14800: string;\n 1480: string;\n };\n /** If present, this contract can be auto-discovered from parent */\n discovery?: DiscoveryMetadata;\n}\n\nexport const CONTRACTS: Record<string, ContractConfig> = {\n // ========================================\n // DATA PORTABILITY CONTRACTS\n // ========================================\n DataPortabilityEscrow: {\n addresses: {\n 14800: \"0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3\",\n 1480: \"0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3\",\n },\n },\n FeeRegistry: {\n addresses: {\n 14800: \"0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2\",\n 1480: \"0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2\",\n },\n },\n DataPortabilityPermissions: {\n addresses: {\n 14800: \"0xD54523048AdD05b4d734aFaE7C68324Ebb7373eF\",\n 1480: \"0xD54523048AdD05b4d734aFaE7C68324Ebb7373eF\",\n },\n },\n DataPortabilityServers: {\n addresses: {\n 14800: \"0xCae2CE0e9caa6643ed28186cF57bd40Bd9E17Eab\",\n 1480: \"0x1483B1F634DBA75AeaE60da7f01A679aabd5ee2c\",\n },\n },\n DataPortabilityGrantees: {\n addresses: {\n 14800: \"0x8325C0A0948483EdA023A1A2Fd895e62C5131234\",\n 1480: \"0x8325C0A0948483EdA023A1A2Fd895e62C5131234\",\n },\n },\n DataRegistry: {\n addresses: {\n 14800: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n 1480: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n },\n },\n\n // ========================================\n // COMPUTING INFRASTRUCTURE\n // ========================================\n ComputeEngine: {\n addresses: {\n 14800: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n 1480: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n },\n },\n ComputeEngineTreasury: {\n addresses: {\n 14800: \"0xceB33C501B624D984bD1Ed3298f6D1d8F7CE03d1\",\n 1480: \"0xceB33C501B624D984bD1Ed3298f6D1d8F7CE03d1\",\n },\n discovery: {\n parent: \"ComputeEngine\",\n getter: \"computeEngineTreasury\",\n },\n },\n QueryEngine: {\n addresses: {\n 14800: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n 1480: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n },\n },\n VanaTreasury: {\n addresses: {\n 14800: \"0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\",\n 1480: \"0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\",\n },\n discovery: {\n parent: \"QueryEngine\",\n getter: \"queryEngineTreasury\",\n },\n },\n DataRefinerRegistry: {\n addresses: {\n 14800: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n 1480: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n },\n },\n ComputeInstructionRegistry: {\n addresses: {\n 14800: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n 1480: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n },\n },\n\n // ========================================\n // TEE POOLS (Canonical Deployments)\n // ========================================\n TeePoolPhala: {\n addresses: {\n 14800: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n 1480: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n },\n },\n TeePoolEphemeralStandard: {\n addresses: {\n 14800: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n 1480: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n },\n },\n TeePoolPersistentStandard: {\n addresses: {\n 14800: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n 1480: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n },\n },\n TeePoolPersistentGpu: {\n addresses: {\n 14800: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n 1480: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n },\n },\n TeePoolDedicatedStandard: {\n addresses: {\n 14800: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n 1480: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n },\n },\n TeePoolDedicatedGpu: {\n addresses: {\n 14800: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n 1480: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n },\n },\n\n // ========================================\n // VANA EPOCH / DLP REGISTRY\n // ========================================\n // Note: DLP rewards-specific contracts (DLPPerformance, DLPRewardDeployer,\n // DLPRewardDeployerTreasury, DLPRewardSwap, SwapHelper) were removed in the\n // protocol unification cleanup. VanaEpoch, DLPRegistry, and DLPRegistryTreasury\n // are kept because they may be referenced beyond the rewards system.\n VanaEpoch: {\n addresses: {\n 14800: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n 1480: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n },\n },\n DLPRegistry: {\n addresses: {\n 14800: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n 1480: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n },\n },\n DLPRegistryTreasury: {\n addresses: {\n 14800: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n 1480: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n },\n discovery: {\n parent: \"DLPRegistry\",\n getter: \"treasury\",\n },\n },\n\n // ========================================\n // VANA POOL (STAKING)\n // ========================================\n VanaPoolStaking: {\n addresses: {\n 14800: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n 1480: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n },\n },\n VanaPoolTreasury: {\n addresses: {\n 14800: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n 1480: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n },\n discovery: {\n parent: \"VanaPoolStaking\",\n getter: \"vanaPoolTreasury\",\n },\n },\n VanaPoolEntity: {\n addresses: {\n 14800: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n 1480: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n },\n discovery: {\n parent: \"VanaPoolStaking\",\n getter: \"vanaPoolEntity\",\n },\n },\n\n // ========================================\n // DLP DEPLOYMENT & TOKEN SYSTEM\n // ========================================\n DATFactory: {\n addresses: {\n 14800: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n 1480: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n },\n },\n DAT: {\n addresses: {\n 14800: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n 1480: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n },\n },\n DATPausable: {\n addresses: {\n 14800: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n 1480: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n },\n },\n DATVotes: {\n addresses: {\n 14800: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n 1480: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n },\n },\n\n // ========================================\n // EXTERNAL DEPENDENCIES (DeFi)\n // ========================================\n WVANA: {\n addresses: {\n 14800: \"0xbccc4b4c6530F82FE309c5E845E50b5E9C89f2AD\",\n 1480: \"0x00EDdD9621Fb08436d0331c149D1690909a5906d\",\n },\n },\n UniswapV3NonfungiblePositionManager: {\n addresses: {\n 14800: \"0x48Bd633f4B9128a38Ebb4a48b6975EB3Eaf1931b\",\n 1480: \"0x45a2992e1bFdCF9b9AcE0a84A238f2E56F481816\",\n },\n },\n UniswapV3QuoterV2: {\n addresses: {\n 14800: \"0x3152246f3CD4dD465292Dd4Ffd792E2Cf602e332\",\n 1480: \"0x1b13728ea3C90863990aC0e05987CfeC1888908c\",\n },\n },\n\n // ========================================\n // UTILITY CONTRACTS\n // ========================================\n Multicall3: {\n addresses: {\n 14800: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n 1480: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n },\n },\n Multisend: {\n addresses: {\n 14800: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n 1480: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n },\n },\n} as const;\n\n// Legacy DLPRoot* and deprecated TeePool entries were removed in the protocol\n// unification cleanup. They were part of the old DLP rewards system superseded\n// by other contracts.\n"],"mappings":"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","names":[]}
@@ -11,10 +11,10 @@
11
11
  */
12
12
  import type { Abi } from "abitype";
13
13
  import { type GetContractReturnType, type PublicClient, type WalletClient } from "viem";
14
- import { type ContractAbis, type VanaContract } from "../generated/abi";
15
- import type { VanaChainId, ContractInfo } from "../types/index";
16
- import { type VanaContractAddress } from "../generated/addresses";
17
- import { createClient } from "../core/client";
14
+ import { type ContractAbis, type VanaContract } from "../generated/abi/index.js";
15
+ import type { VanaChainId, ContractInfo } from "../types/index.js";
16
+ import { type VanaContractAddress } from "../generated/addresses.js";
17
+ import { createClient } from "../core/client.js";
18
18
  type AddressedVanaContract = Extract<VanaContract, VanaContractAddress>;
19
19
  export declare const contractCacheForTesting: Map<string, {
20
20
  address: `0x${string}`;
@@ -1,5 +1,5 @@
1
1
  import type { Chain, Account, PublicClient, WalletClient } from "viem";
2
- import { chains } from "../config/chains";
2
+ import { chains } from "../config/chains.js";
3
3
  /**
4
4
  * Default starting block numbers for querying blockchain events and data per chain.
5
5
  *
@@ -1,4 +1,4 @@
1
- import type { ECIESProvider, ECIESEncrypted } from "./interface";
1
+ import type { ECIESProvider, ECIESEncrypted } from "./interface.js";
2
2
  /**
3
3
  * Provides shared ECIES encryption logic across platforms using Uint8Array.
4
4
  *
@@ -5,7 +5,7 @@
5
5
  * Uses native browser crypto APIs and @noble/secp256k1 for elliptic curve operations.
6
6
  * This implementation is polyfill-free and works in all modern browsers.
7
7
  */
8
- import { BaseECIESUint8 } from "./base";
8
+ import { BaseECIESUint8 } from "./base.js";
9
9
  /**
10
10
  * Browser-specific ECIES provider using @noble/secp256k1
11
11
  *
@@ -12,5 +12,5 @@
12
12
  *
13
13
  * @category Cryptography
14
14
  */
15
- export type { ECIESProvider, ECIESEncrypted, ECIESOptions } from "./interface";
16
- export { ECIESError, isECIESEncrypted, serializeECIES, deserializeECIES, } from "./interface";
15
+ export type { ECIESProvider, ECIESEncrypted, ECIESOptions } from "./interface.js";
16
+ export { ECIESError, isECIESEncrypted, serializeECIES, deserializeECIES, } from "./interface.js";
@@ -6,7 +6,7 @@
6
6
  * Uses Node.js crypto module for hashing and AES operations.
7
7
  * Provides Uint8Array-only interface with no Buffer exposure.
8
8
  */
9
- import { BaseECIESUint8 } from "./base";
9
+ import { BaseECIESUint8 } from "./base.js";
10
10
  /**
11
11
  * Node.js-specific ECIES provider using native secp256k1
12
12
  *
@@ -9,7 +9,7 @@
9
9
  * @category Cryptography
10
10
  * @internal
11
11
  */
12
- import type { ECIESProvider, ECIESEncrypted } from "../ecies/interface";
12
+ import type { ECIESProvider, ECIESEncrypted } from "../ecies/interface.js";
13
13
  export interface WalletKeyEncryptionServiceConfig {
14
14
  /** ECIES provider for encryption/decryption */
15
15
  eciesProvider: ECIESProvider;
@@ -134,11 +134,13 @@ function createDefaultAccessRequestClient(options) {
134
134
  );
135
135
  }
136
136
  const body = await res.json();
137
+ const scopes = body.scopes && body.scopes.length > 0 ? body.scopes : body.scope ? [body.scope] : void 0;
137
138
  return {
138
139
  status: normalizeStatus(body.status),
139
140
  personalServerUrl: body.personalServerUrl,
140
141
  grantId: body.grantId,
141
- scope: body.scope
142
+ scope: body.scope ?? scopes?.[0],
143
+ scopes
142
144
  };
143
145
  },
144
146
  async acknowledgeRead(requestId) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/direct/access-request-client.ts"],"sourcesContent":["/**\n * Default client for the Vana Account access-request API.\n *\n * @remarks\n * Calls the Vana Account endpoints that issue `dcr_*` ids and approval URLs and\n * report request status. Inject a custom {@link AccessRequestClient} on the\n * controller to point at a different deployment; pass `fetchFn` to supply a test\n * double for the HTTP layer.\n *\n * @category Direct\n * @module direct/access-request-client\n */\n\nimport type {\n AccessRequest,\n AccessRequestClient,\n AccessRequestStatus,\n AccessRequestStatusValue,\n} from \"./types\";\nimport type { Web3SignedSignFn } from \"../auth/web3-signed-builder\";\n\n/** Minimal `fetch` signature so the client is testable without a global fetch. */\nexport type FetchLike = (\n input: string,\n init?: {\n method?: string;\n headers?: Record<string, string>;\n body?: string;\n },\n) => Promise<{\n ok: boolean;\n status: number;\n statusText: string;\n json(): Promise<unknown>;\n text(): Promise<string>;\n}>;\n\n/** Options for {@link createDefaultAccessRequestClient}. */\nexport interface DefaultAccessRequestClientOptions {\n /** Base URL of the Vana Account access-request API. */\n baseUrl: string;\n /** Base URL the user is sent to for approval. */\n approvalBaseUrl: string;\n /** `fetch` implementation. Defaults to the global `fetch`. */\n fetchFn?: FetchLike;\n /** App identity address used for direct access-request authentication. */\n appAddress?: string;\n /** EIP-191 signer for direct access-request authentication. */\n signMessage?: Web3SignedSignFn;\n /** Clock source used for signed request timestamps. */\n now?: () => number;\n}\n\nconst VALID_STATUSES: readonly AccessRequestStatusValue[] = [\n \"pending\",\n \"approved\",\n \"ready_for_read\",\n \"completed\",\n \"denied\",\n \"expired\",\n];\n\nfunction normalizeStatus(value: unknown): AccessRequestStatusValue {\n return VALID_STATUSES.includes(value as AccessRequestStatusValue)\n ? (value as AccessRequestStatusValue)\n : \"pending\";\n}\n\nfunction stripTrailingSlash(url: string): string {\n return url.replace(/\\/+$/, \"\");\n}\n\nconst DIRECT_ACCESS_REQUEST_MESSAGE_PREFIX = \"Vana Direct Access Request v1\";\n\ninterface DirectAccessRequestAuthInput {\n body: string;\n method: string;\n path: string;\n timestamp: string;\n}\n\nexport function buildDirectAccessRequestAuthMessage(\n input: DirectAccessRequestAuthInput,\n): string {\n return [\n DIRECT_ACCESS_REQUEST_MESSAGE_PREFIX,\n `method:${input.method.toUpperCase()}`,\n `path:${input.path}`,\n `timestamp:${input.timestamp}`,\n `body:${input.body}`,\n ].join(\"\\n\");\n}\n\nasync function buildDirectAccessRequestHeaders(\n options: DefaultAccessRequestClientOptions,\n input: Omit<DirectAccessRequestAuthInput, \"timestamp\">,\n): Promise<Record<string, string>> {\n if (!options.appAddress && !options.signMessage) {\n return {};\n }\n if (!options.appAddress || !options.signMessage) {\n throw new Error(\n \"Direct access-request authentication requires both `appAddress` and `signMessage`.\",\n );\n }\n\n const timestamp = String(options.now?.() ?? Date.now());\n const signature = await options.signMessage(\n buildDirectAccessRequestAuthMessage({ ...input, timestamp }),\n );\n\n return {\n \"X-Vana-App-Address\": options.appAddress,\n \"X-Vana-App-Signature\": signature,\n \"X-Vana-App-Timestamp\": timestamp,\n };\n}\n\n/**\n * Build an approval URL for a request id, matching the documented format\n * (`{app}/data-connection-requests/{requestId}?mode=page`).\n *\n * @param approvalBaseUrl - Base URL of the Vana approval app.\n * @param requestId - The `dcr_*` request id.\n * @returns The full approval URL.\n */\nexport function buildApprovalUrl(\n approvalBaseUrl: string,\n requestId: string,\n): string {\n return `${stripTrailingSlash(approvalBaseUrl)}/data-connection-requests/${encodeURIComponent(\n requestId,\n )}?mode=page`;\n}\n\n/**\n * Create the default {@link AccessRequestClient} for the Vana Account\n * access-request API.\n *\n * @param options - Base URLs and an optional `fetch` implementation.\n * @returns An {@link AccessRequestClient} backed by HTTP calls.\n */\nexport function createDefaultAccessRequestClient(\n options: DefaultAccessRequestClientOptions,\n): AccessRequestClient {\n const fetchFn = options.fetchFn ?? (globalThis.fetch as FetchLike);\n if (!fetchFn) {\n throw new Error(\n \"No fetch implementation available. Pass `fetchFn` to createDefaultAccessRequestClient.\",\n );\n }\n const base = stripTrailingSlash(options.baseUrl);\n\n return {\n async createAccessRequest(input): Promise<AccessRequest> {\n const path = \"/api/data-connection-requests\";\n const body = JSON.stringify({\n appAddress: input.appAddress,\n app: input.app,\n source: input.source,\n scopes: input.scopes,\n returnUrl: input.returnUrl,\n network: input.network,\n });\n const res = await fetchFn(`${base}${path}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(await buildDirectAccessRequestHeaders(options, {\n body,\n method: \"POST\",\n path,\n })),\n },\n body,\n });\n if (!res.ok) {\n throw new Error(\n `Access request service error: ${res.status} ${res.statusText}`,\n );\n }\n const responseBody = (await res.json()) as {\n requestId?: string;\n id?: string;\n approvalUrl?: string;\n appAddress?: string;\n };\n const requestId = responseBody.requestId ?? responseBody.id;\n if (!requestId) {\n throw new Error(\"Access request service returned no requestId\");\n }\n return {\n requestId,\n approvalUrl:\n responseBody.approvalUrl ??\n buildApprovalUrl(options.approvalBaseUrl, requestId),\n appAddress: responseBody.appAddress ?? input.appAddress,\n };\n },\n\n async getAccessRequestStatus(\n requestId: string,\n ): Promise<AccessRequestStatus> {\n const path = `/api/data-connection-requests/${encodeURIComponent(requestId)}`;\n const res = await fetchFn(`${base}${path}`, {\n method: \"GET\",\n headers: await buildDirectAccessRequestHeaders(options, {\n body: \"\",\n method: \"GET\",\n path,\n }),\n });\n if (!res.ok) {\n throw new Error(\n `Access request service error: ${res.status} ${res.statusText}`,\n );\n }\n const body = (await res.json()) as {\n status?: string;\n personalServerUrl?: string;\n grantId?: string;\n scope?: string;\n };\n return {\n status: normalizeStatus(body.status),\n personalServerUrl: body.personalServerUrl,\n grantId: body.grantId,\n scope: body.scope,\n };\n },\n\n async acknowledgeRead(requestId: string): Promise<void> {\n const path = `/api/data-connection-requests/${encodeURIComponent(requestId)}/consumer-ack`;\n const res = await fetchFn(`${base}${path}`, {\n method: \"POST\",\n headers: await buildDirectAccessRequestHeaders(options, {\n body: \"\",\n method: \"POST\",\n path,\n }),\n });\n if (!res.ok) {\n throw new Error(\n `Access request ack service error: ${res.status} ${res.statusText}`,\n );\n }\n },\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/direct/access-request-client.ts"],"sourcesContent":["/**\n * Default client for the Vana Account access-request API.\n *\n * @remarks\n * Calls the Vana Account endpoints that issue `dcr_*` ids and approval URLs and\n * report request status. Inject a custom {@link AccessRequestClient} on the\n * controller to point at a different deployment; pass `fetchFn` to supply a test\n * double for the HTTP layer.\n *\n * @category Direct\n * @module direct/access-request-client\n */\n\nimport type {\n AccessRequest,\n AccessRequestClient,\n AccessRequestStatus,\n AccessRequestStatusValue,\n} from \"./types\";\nimport type { Web3SignedSignFn } from \"../auth/web3-signed-builder\";\n\n/** Minimal `fetch` signature so the client is testable without a global fetch. */\nexport type FetchLike = (\n input: string,\n init?: {\n method?: string;\n headers?: Record<string, string>;\n body?: string;\n },\n) => Promise<{\n ok: boolean;\n status: number;\n statusText: string;\n json(): Promise<unknown>;\n text(): Promise<string>;\n}>;\n\n/** Options for {@link createDefaultAccessRequestClient}. */\nexport interface DefaultAccessRequestClientOptions {\n /** Base URL of the Vana Account access-request API. */\n baseUrl: string;\n /** Base URL the user is sent to for approval. */\n approvalBaseUrl: string;\n /** `fetch` implementation. Defaults to the global `fetch`. */\n fetchFn?: FetchLike;\n /** App identity address used for direct access-request authentication. */\n appAddress?: string;\n /** EIP-191 signer for direct access-request authentication. */\n signMessage?: Web3SignedSignFn;\n /** Clock source used for signed request timestamps. */\n now?: () => number;\n}\n\nconst VALID_STATUSES: readonly AccessRequestStatusValue[] = [\n \"pending\",\n \"approved\",\n \"ready_for_read\",\n \"completed\",\n \"denied\",\n \"expired\",\n];\n\nfunction normalizeStatus(value: unknown): AccessRequestStatusValue {\n return VALID_STATUSES.includes(value as AccessRequestStatusValue)\n ? (value as AccessRequestStatusValue)\n : \"pending\";\n}\n\nfunction stripTrailingSlash(url: string): string {\n return url.replace(/\\/+$/, \"\");\n}\n\nconst DIRECT_ACCESS_REQUEST_MESSAGE_PREFIX = \"Vana Direct Access Request v1\";\n\ninterface DirectAccessRequestAuthInput {\n body: string;\n method: string;\n path: string;\n timestamp: string;\n}\n\nexport function buildDirectAccessRequestAuthMessage(\n input: DirectAccessRequestAuthInput,\n): string {\n return [\n DIRECT_ACCESS_REQUEST_MESSAGE_PREFIX,\n `method:${input.method.toUpperCase()}`,\n `path:${input.path}`,\n `timestamp:${input.timestamp}`,\n `body:${input.body}`,\n ].join(\"\\n\");\n}\n\nasync function buildDirectAccessRequestHeaders(\n options: DefaultAccessRequestClientOptions,\n input: Omit<DirectAccessRequestAuthInput, \"timestamp\">,\n): Promise<Record<string, string>> {\n if (!options.appAddress && !options.signMessage) {\n return {};\n }\n if (!options.appAddress || !options.signMessage) {\n throw new Error(\n \"Direct access-request authentication requires both `appAddress` and `signMessage`.\",\n );\n }\n\n const timestamp = String(options.now?.() ?? Date.now());\n const signature = await options.signMessage(\n buildDirectAccessRequestAuthMessage({ ...input, timestamp }),\n );\n\n return {\n \"X-Vana-App-Address\": options.appAddress,\n \"X-Vana-App-Signature\": signature,\n \"X-Vana-App-Timestamp\": timestamp,\n };\n}\n\n/**\n * Build an approval URL for a request id, matching the documented format\n * (`{app}/data-connection-requests/{requestId}?mode=page`).\n *\n * @param approvalBaseUrl - Base URL of the Vana approval app.\n * @param requestId - The `dcr_*` request id.\n * @returns The full approval URL.\n */\nexport function buildApprovalUrl(\n approvalBaseUrl: string,\n requestId: string,\n): string {\n return `${stripTrailingSlash(approvalBaseUrl)}/data-connection-requests/${encodeURIComponent(\n requestId,\n )}?mode=page`;\n}\n\n/**\n * Create the default {@link AccessRequestClient} for the Vana Account\n * access-request API.\n *\n * @param options - Base URLs and an optional `fetch` implementation.\n * @returns An {@link AccessRequestClient} backed by HTTP calls.\n */\nexport function createDefaultAccessRequestClient(\n options: DefaultAccessRequestClientOptions,\n): AccessRequestClient {\n const fetchFn = options.fetchFn ?? (globalThis.fetch as FetchLike);\n if (!fetchFn) {\n throw new Error(\n \"No fetch implementation available. Pass `fetchFn` to createDefaultAccessRequestClient.\",\n );\n }\n const base = stripTrailingSlash(options.baseUrl);\n\n return {\n async createAccessRequest(input): Promise<AccessRequest> {\n const path = \"/api/data-connection-requests\";\n const body = JSON.stringify({\n appAddress: input.appAddress,\n app: input.app,\n source: input.source,\n scopes: input.scopes,\n returnUrl: input.returnUrl,\n network: input.network,\n });\n const res = await fetchFn(`${base}${path}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(await buildDirectAccessRequestHeaders(options, {\n body,\n method: \"POST\",\n path,\n })),\n },\n body,\n });\n if (!res.ok) {\n throw new Error(\n `Access request service error: ${res.status} ${res.statusText}`,\n );\n }\n const responseBody = (await res.json()) as {\n requestId?: string;\n id?: string;\n approvalUrl?: string;\n appAddress?: string;\n };\n const requestId = responseBody.requestId ?? responseBody.id;\n if (!requestId) {\n throw new Error(\"Access request service returned no requestId\");\n }\n return {\n requestId,\n approvalUrl:\n responseBody.approvalUrl ??\n buildApprovalUrl(options.approvalBaseUrl, requestId),\n appAddress: responseBody.appAddress ?? input.appAddress,\n };\n },\n\n async getAccessRequestStatus(\n requestId: string,\n ): Promise<AccessRequestStatus> {\n const path = `/api/data-connection-requests/${encodeURIComponent(requestId)}`;\n const res = await fetchFn(`${base}${path}`, {\n method: \"GET\",\n headers: await buildDirectAccessRequestHeaders(options, {\n body: \"\",\n method: \"GET\",\n path,\n }),\n });\n if (!res.ok) {\n throw new Error(\n `Access request service error: ${res.status} ${res.statusText}`,\n );\n }\n const body = (await res.json()) as {\n status?: string;\n personalServerUrl?: string;\n grantId?: string;\n scope?: string;\n scopes?: string[];\n };\n // `scopes` is the full approved set; `scope` is the first of them, kept\n // for callers (and deployments) that predate the array.\n const scopes =\n body.scopes && body.scopes.length > 0\n ? body.scopes\n : body.scope\n ? [body.scope]\n : undefined;\n return {\n status: normalizeStatus(body.status),\n personalServerUrl: body.personalServerUrl,\n grantId: body.grantId,\n scope: body.scope ?? scopes?.[0],\n scopes,\n };\n },\n\n async acknowledgeRead(requestId: string): Promise<void> {\n const path = `/api/data-connection-requests/${encodeURIComponent(requestId)}/consumer-ack`;\n const res = await fetchFn(`${base}${path}`, {\n method: \"POST\",\n headers: await buildDirectAccessRequestHeaders(options, {\n body: \"\",\n method: \"POST\",\n path,\n }),\n });\n if (!res.ok) {\n throw new Error(\n `Access request ack service error: ${res.status} ${res.statusText}`,\n );\n }\n },\n };\n}\n"],"mappings":"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","names":[]}
@@ -10,8 +10,8 @@
10
10
  * @category Direct
11
11
  * @module direct/access-request-client
12
12
  */
13
- import type { AccessRequestClient } from "./types";
14
- import type { Web3SignedSignFn } from "../auth/web3-signed-builder";
13
+ import type { AccessRequestClient } from "./types.js";
14
+ import type { Web3SignedSignFn } from "../auth/web3-signed-builder.js";
15
15
  /** Minimal `fetch` signature so the client is testable without a global fetch. */
16
16
  export type FetchLike = (input: string, init?: {
17
17
  method?: string;
@@ -109,11 +109,13 @@ function createDefaultAccessRequestClient(options) {
109
109
  );
110
110
  }
111
111
  const body = await res.json();
112
+ const scopes = body.scopes && body.scopes.length > 0 ? body.scopes : body.scope ? [body.scope] : void 0;
112
113
  return {
113
114
  status: normalizeStatus(body.status),
114
115
  personalServerUrl: body.personalServerUrl,
115
116
  grantId: body.grantId,
116
- scope: body.scope
117
+ scope: body.scope ?? scopes?.[0],
118
+ scopes
117
119
  };
118
120
  },
119
121
  async acknowledgeRead(requestId) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/direct/access-request-client.ts"],"sourcesContent":["/**\n * Default client for the Vana Account access-request API.\n *\n * @remarks\n * Calls the Vana Account endpoints that issue `dcr_*` ids and approval URLs and\n * report request status. Inject a custom {@link AccessRequestClient} on the\n * controller to point at a different deployment; pass `fetchFn` to supply a test\n * double for the HTTP layer.\n *\n * @category Direct\n * @module direct/access-request-client\n */\n\nimport type {\n AccessRequest,\n AccessRequestClient,\n AccessRequestStatus,\n AccessRequestStatusValue,\n} from \"./types\";\nimport type { Web3SignedSignFn } from \"../auth/web3-signed-builder\";\n\n/** Minimal `fetch` signature so the client is testable without a global fetch. */\nexport type FetchLike = (\n input: string,\n init?: {\n method?: string;\n headers?: Record<string, string>;\n body?: string;\n },\n) => Promise<{\n ok: boolean;\n status: number;\n statusText: string;\n json(): Promise<unknown>;\n text(): Promise<string>;\n}>;\n\n/** Options for {@link createDefaultAccessRequestClient}. */\nexport interface DefaultAccessRequestClientOptions {\n /** Base URL of the Vana Account access-request API. */\n baseUrl: string;\n /** Base URL the user is sent to for approval. */\n approvalBaseUrl: string;\n /** `fetch` implementation. Defaults to the global `fetch`. */\n fetchFn?: FetchLike;\n /** App identity address used for direct access-request authentication. */\n appAddress?: string;\n /** EIP-191 signer for direct access-request authentication. */\n signMessage?: Web3SignedSignFn;\n /** Clock source used for signed request timestamps. */\n now?: () => number;\n}\n\nconst VALID_STATUSES: readonly AccessRequestStatusValue[] = [\n \"pending\",\n \"approved\",\n \"ready_for_read\",\n \"completed\",\n \"denied\",\n \"expired\",\n];\n\nfunction normalizeStatus(value: unknown): AccessRequestStatusValue {\n return VALID_STATUSES.includes(value as AccessRequestStatusValue)\n ? (value as AccessRequestStatusValue)\n : \"pending\";\n}\n\nfunction stripTrailingSlash(url: string): string {\n return url.replace(/\\/+$/, \"\");\n}\n\nconst DIRECT_ACCESS_REQUEST_MESSAGE_PREFIX = \"Vana Direct Access Request v1\";\n\ninterface DirectAccessRequestAuthInput {\n body: string;\n method: string;\n path: string;\n timestamp: string;\n}\n\nexport function buildDirectAccessRequestAuthMessage(\n input: DirectAccessRequestAuthInput,\n): string {\n return [\n DIRECT_ACCESS_REQUEST_MESSAGE_PREFIX,\n `method:${input.method.toUpperCase()}`,\n `path:${input.path}`,\n `timestamp:${input.timestamp}`,\n `body:${input.body}`,\n ].join(\"\\n\");\n}\n\nasync function buildDirectAccessRequestHeaders(\n options: DefaultAccessRequestClientOptions,\n input: Omit<DirectAccessRequestAuthInput, \"timestamp\">,\n): Promise<Record<string, string>> {\n if (!options.appAddress && !options.signMessage) {\n return {};\n }\n if (!options.appAddress || !options.signMessage) {\n throw new Error(\n \"Direct access-request authentication requires both `appAddress` and `signMessage`.\",\n );\n }\n\n const timestamp = String(options.now?.() ?? Date.now());\n const signature = await options.signMessage(\n buildDirectAccessRequestAuthMessage({ ...input, timestamp }),\n );\n\n return {\n \"X-Vana-App-Address\": options.appAddress,\n \"X-Vana-App-Signature\": signature,\n \"X-Vana-App-Timestamp\": timestamp,\n };\n}\n\n/**\n * Build an approval URL for a request id, matching the documented format\n * (`{app}/data-connection-requests/{requestId}?mode=page`).\n *\n * @param approvalBaseUrl - Base URL of the Vana approval app.\n * @param requestId - The `dcr_*` request id.\n * @returns The full approval URL.\n */\nexport function buildApprovalUrl(\n approvalBaseUrl: string,\n requestId: string,\n): string {\n return `${stripTrailingSlash(approvalBaseUrl)}/data-connection-requests/${encodeURIComponent(\n requestId,\n )}?mode=page`;\n}\n\n/**\n * Create the default {@link AccessRequestClient} for the Vana Account\n * access-request API.\n *\n * @param options - Base URLs and an optional `fetch` implementation.\n * @returns An {@link AccessRequestClient} backed by HTTP calls.\n */\nexport function createDefaultAccessRequestClient(\n options: DefaultAccessRequestClientOptions,\n): AccessRequestClient {\n const fetchFn = options.fetchFn ?? (globalThis.fetch as FetchLike);\n if (!fetchFn) {\n throw new Error(\n \"No fetch implementation available. Pass `fetchFn` to createDefaultAccessRequestClient.\",\n );\n }\n const base = stripTrailingSlash(options.baseUrl);\n\n return {\n async createAccessRequest(input): Promise<AccessRequest> {\n const path = \"/api/data-connection-requests\";\n const body = JSON.stringify({\n appAddress: input.appAddress,\n app: input.app,\n source: input.source,\n scopes: input.scopes,\n returnUrl: input.returnUrl,\n network: input.network,\n });\n const res = await fetchFn(`${base}${path}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(await buildDirectAccessRequestHeaders(options, {\n body,\n method: \"POST\",\n path,\n })),\n },\n body,\n });\n if (!res.ok) {\n throw new Error(\n `Access request service error: ${res.status} ${res.statusText}`,\n );\n }\n const responseBody = (await res.json()) as {\n requestId?: string;\n id?: string;\n approvalUrl?: string;\n appAddress?: string;\n };\n const requestId = responseBody.requestId ?? responseBody.id;\n if (!requestId) {\n throw new Error(\"Access request service returned no requestId\");\n }\n return {\n requestId,\n approvalUrl:\n responseBody.approvalUrl ??\n buildApprovalUrl(options.approvalBaseUrl, requestId),\n appAddress: responseBody.appAddress ?? input.appAddress,\n };\n },\n\n async getAccessRequestStatus(\n requestId: string,\n ): Promise<AccessRequestStatus> {\n const path = `/api/data-connection-requests/${encodeURIComponent(requestId)}`;\n const res = await fetchFn(`${base}${path}`, {\n method: \"GET\",\n headers: await buildDirectAccessRequestHeaders(options, {\n body: \"\",\n method: \"GET\",\n path,\n }),\n });\n if (!res.ok) {\n throw new Error(\n `Access request service error: ${res.status} ${res.statusText}`,\n );\n }\n const body = (await res.json()) as {\n status?: string;\n personalServerUrl?: string;\n grantId?: string;\n scope?: string;\n };\n return {\n status: normalizeStatus(body.status),\n personalServerUrl: body.personalServerUrl,\n grantId: body.grantId,\n scope: body.scope,\n };\n },\n\n async acknowledgeRead(requestId: string): Promise<void> {\n const path = `/api/data-connection-requests/${encodeURIComponent(requestId)}/consumer-ack`;\n const res = await fetchFn(`${base}${path}`, {\n method: \"POST\",\n headers: await buildDirectAccessRequestHeaders(options, {\n body: \"\",\n method: \"POST\",\n path,\n }),\n });\n if (!res.ok) {\n throw new Error(\n `Access request ack service error: ${res.status} ${res.statusText}`,\n );\n }\n },\n };\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/direct/access-request-client.ts"],"sourcesContent":["/**\n * Default client for the Vana Account access-request API.\n *\n * @remarks\n * Calls the Vana Account endpoints that issue `dcr_*` ids and approval URLs and\n * report request status. Inject a custom {@link AccessRequestClient} on the\n * controller to point at a different deployment; pass `fetchFn` to supply a test\n * double for the HTTP layer.\n *\n * @category Direct\n * @module direct/access-request-client\n */\n\nimport type {\n AccessRequest,\n AccessRequestClient,\n AccessRequestStatus,\n AccessRequestStatusValue,\n} from \"./types\";\nimport type { Web3SignedSignFn } from \"../auth/web3-signed-builder\";\n\n/** Minimal `fetch` signature so the client is testable without a global fetch. */\nexport type FetchLike = (\n input: string,\n init?: {\n method?: string;\n headers?: Record<string, string>;\n body?: string;\n },\n) => Promise<{\n ok: boolean;\n status: number;\n statusText: string;\n json(): Promise<unknown>;\n text(): Promise<string>;\n}>;\n\n/** Options for {@link createDefaultAccessRequestClient}. */\nexport interface DefaultAccessRequestClientOptions {\n /** Base URL of the Vana Account access-request API. */\n baseUrl: string;\n /** Base URL the user is sent to for approval. */\n approvalBaseUrl: string;\n /** `fetch` implementation. Defaults to the global `fetch`. */\n fetchFn?: FetchLike;\n /** App identity address used for direct access-request authentication. */\n appAddress?: string;\n /** EIP-191 signer for direct access-request authentication. */\n signMessage?: Web3SignedSignFn;\n /** Clock source used for signed request timestamps. */\n now?: () => number;\n}\n\nconst VALID_STATUSES: readonly AccessRequestStatusValue[] = [\n \"pending\",\n \"approved\",\n \"ready_for_read\",\n \"completed\",\n \"denied\",\n \"expired\",\n];\n\nfunction normalizeStatus(value: unknown): AccessRequestStatusValue {\n return VALID_STATUSES.includes(value as AccessRequestStatusValue)\n ? (value as AccessRequestStatusValue)\n : \"pending\";\n}\n\nfunction stripTrailingSlash(url: string): string {\n return url.replace(/\\/+$/, \"\");\n}\n\nconst DIRECT_ACCESS_REQUEST_MESSAGE_PREFIX = \"Vana Direct Access Request v1\";\n\ninterface DirectAccessRequestAuthInput {\n body: string;\n method: string;\n path: string;\n timestamp: string;\n}\n\nexport function buildDirectAccessRequestAuthMessage(\n input: DirectAccessRequestAuthInput,\n): string {\n return [\n DIRECT_ACCESS_REQUEST_MESSAGE_PREFIX,\n `method:${input.method.toUpperCase()}`,\n `path:${input.path}`,\n `timestamp:${input.timestamp}`,\n `body:${input.body}`,\n ].join(\"\\n\");\n}\n\nasync function buildDirectAccessRequestHeaders(\n options: DefaultAccessRequestClientOptions,\n input: Omit<DirectAccessRequestAuthInput, \"timestamp\">,\n): Promise<Record<string, string>> {\n if (!options.appAddress && !options.signMessage) {\n return {};\n }\n if (!options.appAddress || !options.signMessage) {\n throw new Error(\n \"Direct access-request authentication requires both `appAddress` and `signMessage`.\",\n );\n }\n\n const timestamp = String(options.now?.() ?? Date.now());\n const signature = await options.signMessage(\n buildDirectAccessRequestAuthMessage({ ...input, timestamp }),\n );\n\n return {\n \"X-Vana-App-Address\": options.appAddress,\n \"X-Vana-App-Signature\": signature,\n \"X-Vana-App-Timestamp\": timestamp,\n };\n}\n\n/**\n * Build an approval URL for a request id, matching the documented format\n * (`{app}/data-connection-requests/{requestId}?mode=page`).\n *\n * @param approvalBaseUrl - Base URL of the Vana approval app.\n * @param requestId - The `dcr_*` request id.\n * @returns The full approval URL.\n */\nexport function buildApprovalUrl(\n approvalBaseUrl: string,\n requestId: string,\n): string {\n return `${stripTrailingSlash(approvalBaseUrl)}/data-connection-requests/${encodeURIComponent(\n requestId,\n )}?mode=page`;\n}\n\n/**\n * Create the default {@link AccessRequestClient} for the Vana Account\n * access-request API.\n *\n * @param options - Base URLs and an optional `fetch` implementation.\n * @returns An {@link AccessRequestClient} backed by HTTP calls.\n */\nexport function createDefaultAccessRequestClient(\n options: DefaultAccessRequestClientOptions,\n): AccessRequestClient {\n const fetchFn = options.fetchFn ?? (globalThis.fetch as FetchLike);\n if (!fetchFn) {\n throw new Error(\n \"No fetch implementation available. Pass `fetchFn` to createDefaultAccessRequestClient.\",\n );\n }\n const base = stripTrailingSlash(options.baseUrl);\n\n return {\n async createAccessRequest(input): Promise<AccessRequest> {\n const path = \"/api/data-connection-requests\";\n const body = JSON.stringify({\n appAddress: input.appAddress,\n app: input.app,\n source: input.source,\n scopes: input.scopes,\n returnUrl: input.returnUrl,\n network: input.network,\n });\n const res = await fetchFn(`${base}${path}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(await buildDirectAccessRequestHeaders(options, {\n body,\n method: \"POST\",\n path,\n })),\n },\n body,\n });\n if (!res.ok) {\n throw new Error(\n `Access request service error: ${res.status} ${res.statusText}`,\n );\n }\n const responseBody = (await res.json()) as {\n requestId?: string;\n id?: string;\n approvalUrl?: string;\n appAddress?: string;\n };\n const requestId = responseBody.requestId ?? responseBody.id;\n if (!requestId) {\n throw new Error(\"Access request service returned no requestId\");\n }\n return {\n requestId,\n approvalUrl:\n responseBody.approvalUrl ??\n buildApprovalUrl(options.approvalBaseUrl, requestId),\n appAddress: responseBody.appAddress ?? input.appAddress,\n };\n },\n\n async getAccessRequestStatus(\n requestId: string,\n ): Promise<AccessRequestStatus> {\n const path = `/api/data-connection-requests/${encodeURIComponent(requestId)}`;\n const res = await fetchFn(`${base}${path}`, {\n method: \"GET\",\n headers: await buildDirectAccessRequestHeaders(options, {\n body: \"\",\n method: \"GET\",\n path,\n }),\n });\n if (!res.ok) {\n throw new Error(\n `Access request service error: ${res.status} ${res.statusText}`,\n );\n }\n const body = (await res.json()) as {\n status?: string;\n personalServerUrl?: string;\n grantId?: string;\n scope?: string;\n scopes?: string[];\n };\n // `scopes` is the full approved set; `scope` is the first of them, kept\n // for callers (and deployments) that predate the array.\n const scopes =\n body.scopes && body.scopes.length > 0\n ? body.scopes\n : body.scope\n ? [body.scope]\n : undefined;\n return {\n status: normalizeStatus(body.status),\n personalServerUrl: body.personalServerUrl,\n grantId: body.grantId,\n scope: body.scope ?? scopes?.[0],\n scopes,\n };\n },\n\n async acknowledgeRead(requestId: string): Promise<void> {\n const path = `/api/data-connection-requests/${encodeURIComponent(requestId)}/consumer-ack`;\n const res = await fetchFn(`${base}${path}`, {\n method: \"POST\",\n headers: await buildDirectAccessRequestHeaders(options, {\n body: \"\",\n method: \"POST\",\n path,\n }),\n });\n if (!res.ok) {\n throw new Error(\n `Access request ack service error: ${res.status} ${res.statusText}`,\n );\n }\n },\n };\n}\n"],"mappings":"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","names":[]}
@@ -12,7 +12,7 @@
12
12
  * @category Direct
13
13
  * @module direct/connect-flow
14
14
  */
15
- import type { AccessRequest, AccessRequestStatus, ApprovedDataResult } from "./types";
15
+ import type { AccessRequest, AccessRequestStatus, ApprovedDataResult } from "./types.js";
16
16
  /**
17
17
  * Caller-supplied transports. These typically `fetch` the app's own backend
18
18
  * routes, which in turn delegate to a {@link DirectDataController}.
@@ -108,42 +108,82 @@ function createDirectDataController(config) {
108
108
  return accessRequestClient.getAccessRequestStatus(requestId);
109
109
  },
110
110
  async readApprovedData(input) {
111
- const status = await accessRequestClient.getAccessRequestStatus(
112
- input.requestId
113
- );
114
- if (!isReadReadyStatus(status.status) || !status.personalServerUrl || !status.grantId || !status.scope) {
115
- throw new import_errors.AccessNotApprovedError(
116
- "Request is not approved or is missing grantId/scope/personalServerUrl",
117
- {
118
- requestId: input.requestId,
119
- status: status.status,
120
- hasPersonalServerUrl: Boolean(status.personalServerUrl),
121
- hasGrantId: Boolean(status.grantId),
122
- hasScope: Boolean(status.scope)
123
- }
124
- );
111
+ const status = await requireReadReady(input.requestId);
112
+ const scope = resolveRequestedScope(status, input.scope);
113
+ const result = await readScope(status, scope);
114
+ if (input.acknowledge !== false) {
115
+ await acknowledgeQuietly(input.requestId);
125
116
  }
126
- const result = await (0, import_personal_server_read.readPersonalServerData)({
127
- personalServerUrl: status.personalServerUrl,
128
- scope: status.scope,
129
- grantId: status.grantId,
130
- payerAddress: account.address,
131
- signMessage,
132
- escrow,
133
- fetchFn: config.personalServerFetch,
134
- transportRetry: config.personalServerTransportRetry
135
- });
136
- try {
137
- await accessRequestClient.acknowledgeRead?.(input.requestId);
138
- } catch {
117
+ return result;
118
+ },
119
+ async readAllApprovedData(input) {
120
+ const status = await requireReadReady(input.requestId);
121
+ const scopes = approvedScopes(status);
122
+ const results = {};
123
+ const errors = {};
124
+ for (const scope of scopes) {
125
+ try {
126
+ results[scope] = await readScope(status, scope);
127
+ } catch (error) {
128
+ errors[scope] = error instanceof Error ? error : new Error(String(error));
129
+ }
139
130
  }
140
- return {
141
- scope: status.scope,
142
- data: result.data,
143
- payment: result.payment
144
- };
131
+ if (Object.keys(errors).length === 0) {
132
+ await acknowledgeQuietly(input.requestId);
133
+ }
134
+ return { results, errors };
145
135
  }
146
136
  };
137
+ async function requireReadReady(requestId) {
138
+ const status = await accessRequestClient.getAccessRequestStatus(requestId);
139
+ if (!isReadReadyStatus(status.status) || !status.personalServerUrl || !status.grantId || approvedScopes(status).length === 0) {
140
+ throw new import_errors.AccessNotApprovedError(
141
+ "Request is not approved or is missing grantId/scope/personalServerUrl",
142
+ {
143
+ requestId,
144
+ status: status.status,
145
+ hasPersonalServerUrl: Boolean(status.personalServerUrl),
146
+ hasGrantId: Boolean(status.grantId),
147
+ hasScope: approvedScopes(status).length > 0
148
+ }
149
+ );
150
+ }
151
+ return status;
152
+ }
153
+ function approvedScopes(status) {
154
+ if (status.scopes && status.scopes.length > 0) return status.scopes;
155
+ return status.scope ? [status.scope] : [];
156
+ }
157
+ function resolveRequestedScope(status, requested) {
158
+ const scopes = approvedScopes(status);
159
+ if (requested === void 0) return scopes[0];
160
+ if (!scopes.includes(requested)) {
161
+ throw new import_errors.ScopeNotApprovedError(
162
+ `Scope "${requested}" is not approved on this request`,
163
+ { requestedScope: requested, approvedScopes: scopes }
164
+ );
165
+ }
166
+ return requested;
167
+ }
168
+ async function readScope(status, scope) {
169
+ const result = await (0, import_personal_server_read.readPersonalServerData)({
170
+ personalServerUrl: status.personalServerUrl,
171
+ scope,
172
+ grantId: status.grantId,
173
+ payerAddress: account.address,
174
+ signMessage,
175
+ escrow,
176
+ fetchFn: config.personalServerFetch,
177
+ transportRetry: config.personalServerTransportRetry
178
+ });
179
+ return { scope, data: result.data, payment: result.payment };
180
+ }
181
+ async function acknowledgeQuietly(requestId) {
182
+ try {
183
+ await accessRequestClient.acknowledgeRead?.(requestId);
184
+ } catch {
185
+ }
186
+ }
147
187
  }
148
188
  // Annotate the CommonJS export names for ESM import in node:
149
189
  0 && (module.exports = {