@opendatalabs/vana-sdk 0.1.0-alpha.7ee7635 → 0.1.0-alpha.8117ac2

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 (700) hide show
  1. package/dist/__tests__/waitForTransactionEvents.test.d.ts +1 -0
  2. package/dist/browser.cjs.map +1 -1
  3. package/dist/browser.d.ts +36 -2
  4. package/dist/browser.js.map +1 -1
  5. package/dist/chains/definitions.cjs +9 -6
  6. package/dist/chains/definitions.cjs.map +1 -1
  7. package/dist/chains/definitions.d.ts +9 -11
  8. package/dist/chains/definitions.js +9 -6
  9. package/dist/chains/definitions.js.map +1 -1
  10. package/dist/chains/index.cjs.map +1 -1
  11. package/dist/chains/index.d.ts +34 -2
  12. package/dist/chains/index.js.map +1 -1
  13. package/dist/chains.browser.d.ts +8 -2
  14. package/dist/chains.d.ts +8 -2
  15. package/dist/chains.node.d.ts +8 -2
  16. package/dist/config/addresses.d.ts +8 -45
  17. package/dist/config/chains.cjs.map +1 -1
  18. package/dist/config/chains.d.ts +108 -13
  19. package/dist/config/chains.js.map +1 -1
  20. package/dist/config/default-services.cjs +60 -0
  21. package/dist/config/default-services.cjs.map +1 -0
  22. package/dist/config/default-services.d.ts +46 -0
  23. package/dist/config/default-services.js +33 -0
  24. package/dist/config/default-services.js.map +1 -0
  25. package/dist/config/default-services.test.d.ts +1 -0
  26. package/dist/config/features.d.ts +1 -3
  27. package/dist/config/tests/addresses.test.d.ts +1 -0
  28. package/dist/contracts/contractController.cjs +3 -3
  29. package/dist/contracts/contractController.cjs.map +1 -1
  30. package/dist/contracts/contractController.d.ts +77 -59
  31. package/dist/contracts/contractController.js +4 -7
  32. package/dist/contracts/contractController.js.map +1 -1
  33. package/dist/contracts/tests/contractController.test.d.ts +1 -0
  34. package/dist/controllers/__tests__/data-consistency-integration.test.d.ts +7 -0
  35. package/dist/controllers/__tests__/schemas-edge-cases.test.d.ts +1 -0
  36. package/dist/controllers/base.cjs +116 -0
  37. package/dist/controllers/base.cjs.map +1 -0
  38. package/dist/controllers/base.d.ts +94 -0
  39. package/dist/controllers/base.js +92 -0
  40. package/dist/controllers/base.js.map +1 -0
  41. package/dist/controllers/data-error-handling.test.d.ts +1 -0
  42. package/dist/controllers/data.cjs +699 -373
  43. package/dist/controllers/data.cjs.map +1 -1
  44. package/dist/controllers/data.d.ts +368 -228
  45. package/dist/controllers/data.js +712 -376
  46. package/dist/controllers/data.js.map +1 -1
  47. package/dist/controllers/permissions.cjs +688 -489
  48. package/dist/controllers/permissions.cjs.map +1 -1
  49. package/dist/controllers/permissions.d.ts +98 -165
  50. package/dist/controllers/permissions.js +688 -489
  51. package/dist/controllers/permissions.js.map +1 -1
  52. package/dist/controllers/protocol.cjs +15 -11
  53. package/dist/controllers/protocol.cjs.map +1 -1
  54. package/dist/controllers/protocol.d.ts +34 -84
  55. package/dist/controllers/protocol.js +15 -14
  56. package/dist/controllers/protocol.js.map +1 -1
  57. package/dist/controllers/schemas.cjs +57 -52
  58. package/dist/controllers/schemas.cjs.map +1 -1
  59. package/dist/controllers/schemas.d.ts +55 -61
  60. package/dist/controllers/schemas.js +57 -52
  61. package/dist/controllers/schemas.js.map +1 -1
  62. package/dist/controllers/server-additional.test.d.ts +1 -0
  63. package/dist/controllers/server.cjs +32 -25
  64. package/dist/controllers/server.cjs.map +1 -1
  65. package/dist/controllers/server.d.ts +53 -58
  66. package/dist/controllers/server.js +32 -25
  67. package/dist/controllers/server.js.map +1 -1
  68. package/dist/core/apiClient.cjs +68 -15
  69. package/dist/core/apiClient.cjs.map +1 -1
  70. package/dist/core/apiClient.d.ts +137 -16
  71. package/dist/core/apiClient.js +72 -22
  72. package/dist/core/apiClient.js.map +1 -1
  73. package/dist/core/client.cjs +7 -7
  74. package/dist/core/client.cjs.map +1 -1
  75. package/dist/core/client.d.ts +6 -9
  76. package/dist/core/client.js +7 -7
  77. package/dist/core/client.js.map +1 -1
  78. package/dist/core/core.test.d.ts +1 -0
  79. package/dist/core/generics.cjs +41 -12
  80. package/dist/core/generics.cjs.map +1 -1
  81. package/dist/core/generics.d.ts +104 -19
  82. package/dist/core/generics.js +52 -32
  83. package/dist/core/generics.js.map +1 -1
  84. package/dist/core/tests/apiClient.test.d.ts +1 -0
  85. package/dist/core/tests/client.test.d.ts +1 -0
  86. package/dist/core/tests/generics.test.d.ts +1 -0
  87. package/dist/core.cjs +115 -47
  88. package/dist/core.cjs.map +1 -1
  89. package/dist/core.d.ts +24 -74
  90. package/dist/core.js +137 -72
  91. package/dist/core.js.map +1 -1
  92. package/dist/crypto/ecies/__tests__/base.test.d.ts +4 -0
  93. package/dist/crypto/ecies/__tests__/compatibility.test.d.ts +8 -0
  94. package/dist/crypto/ecies/__tests__/constants.test.d.ts +4 -0
  95. package/dist/crypto/ecies/__tests__/native-parity.test.d.ts +7 -0
  96. package/dist/crypto/ecies/__tests__/normalization.test.d.ts +1 -0
  97. package/dist/crypto/ecies/__tests__/test-vectors.d.ts +2 -4
  98. package/dist/crypto/ecies/base.cjs +4 -3
  99. package/dist/crypto/ecies/base.cjs.map +1 -1
  100. package/dist/crypto/ecies/base.d.ts +2 -5
  101. package/dist/crypto/ecies/base.js +12 -15
  102. package/dist/crypto/ecies/base.js.map +1 -1
  103. package/dist/crypto/ecies/browser.cjs +2 -1
  104. package/dist/crypto/ecies/browser.cjs.map +1 -1
  105. package/dist/crypto/ecies/browser.d.ts +2 -7
  106. package/dist/crypto/ecies/browser.js +2 -1
  107. package/dist/crypto/ecies/browser.js.map +1 -1
  108. package/dist/crypto/ecies/constants.d.ts +7 -9
  109. package/dist/crypto/ecies/index.d.ts +8 -1
  110. package/dist/crypto/ecies/interface.cjs +4 -5
  111. package/dist/crypto/ecies/interface.cjs.map +1 -1
  112. package/dist/crypto/ecies/interface.d.ts +9 -11
  113. package/dist/crypto/ecies/interface.js +4 -5
  114. package/dist/crypto/ecies/interface.js.map +1 -1
  115. package/dist/crypto/ecies/node.cjs +3 -2
  116. package/dist/crypto/ecies/node.cjs.map +1 -1
  117. package/dist/crypto/ecies/node.d.ts +2 -7
  118. package/dist/crypto/ecies/node.js +11 -16
  119. package/dist/crypto/ecies/node.js.map +1 -1
  120. package/dist/crypto/ecies/utils.cjs +2 -41
  121. package/dist/crypto/ecies/utils.cjs.map +1 -1
  122. package/dist/crypto/ecies/utils.d.ts +3 -40
  123. package/dist/crypto/ecies/utils.js +1 -35
  124. package/dist/crypto/ecies/utils.js.map +1 -1
  125. package/dist/crypto/services/WalletKeyEncryptionService.cjs +2 -2
  126. package/dist/crypto/services/WalletKeyEncryptionService.cjs.map +1 -1
  127. package/dist/crypto/services/WalletKeyEncryptionService.d.ts +3 -7
  128. package/dist/crypto/services/WalletKeyEncryptionService.js +5 -9
  129. package/dist/crypto/services/WalletKeyEncryptionService.js.map +1 -1
  130. package/dist/crypto/services/WalletKeyEncryptionService.test.d.ts +1 -0
  131. package/dist/diagnostics.d.ts +1 -3
  132. package/dist/diagnostics.test.d.ts +1 -0
  133. package/dist/errors.cjs +16 -0
  134. package/dist/errors.cjs.map +1 -1
  135. package/dist/errors.d.ts +53 -15
  136. package/dist/errors.js +18 -6
  137. package/dist/errors.js.map +1 -1
  138. package/dist/generated/abi/ComputeEngineImplementation.d.ts +2 -3
  139. package/dist/generated/abi/ComputeInstructionRegistryImplementation.cjs.map +1 -1
  140. package/dist/generated/abi/ComputeInstructionRegistryImplementation.d.ts +2 -3
  141. package/dist/generated/abi/ComputeInstructionRegistryImplementation.js.map +1 -1
  142. package/dist/generated/abi/DATFactoryImplementation.d.ts +2 -3
  143. package/dist/generated/abi/DATImplementation.d.ts +2 -3
  144. package/dist/generated/abi/DATPausableImplementation.d.ts +2 -3
  145. package/dist/generated/abi/DATVotesImplementation.d.ts +2 -3
  146. package/dist/generated/abi/DLPPerformanceImplementation.d.ts +2 -3
  147. package/dist/generated/abi/DLPRegistryImplementation.d.ts +2 -3
  148. package/dist/generated/abi/DLPRegistryTreasuryImplementation.d.ts +2 -3
  149. package/dist/generated/abi/DLPRewardDeployerImplementation.d.ts +2 -3
  150. package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.d.ts +2 -3
  151. package/dist/generated/abi/DLPRewardSwapImplementation.d.ts +2 -3
  152. package/dist/generated/abi/DLPRootImplementation.d.ts +1 -3
  153. package/dist/generated/abi/DLPTreasuryImplementation.d.ts +2 -3
  154. package/dist/generated/abi/DataLiquidityPoolImplementation.d.ts +1 -3
  155. package/dist/generated/abi/DataPortabilityGranteesImplementation.d.ts +2 -3
  156. package/dist/generated/abi/DataPortabilityPermissionsImplementation.cjs.map +1 -1
  157. package/dist/generated/abi/DataPortabilityPermissionsImplementation.d.ts +2 -3
  158. package/dist/generated/abi/DataPortabilityPermissionsImplementation.js.map +1 -1
  159. package/dist/generated/abi/DataPortabilityServersImplementation.cjs.map +1 -1
  160. package/dist/generated/abi/DataPortabilityServersImplementation.d.ts +2 -3
  161. package/dist/generated/abi/DataPortabilityServersImplementation.js.map +1 -1
  162. package/dist/generated/abi/DataRefinerRegistryImplementation.d.ts +2 -3
  163. package/dist/generated/abi/DataRegistryImplementation.d.ts +2 -3
  164. package/dist/generated/abi/QueryEngineImplementation.d.ts +2 -3
  165. package/dist/generated/abi/SwapHelperImplementation.d.ts +2 -3
  166. package/dist/generated/abi/TeePoolDedicatedGpuImplementation.d.ts +2 -3
  167. package/dist/generated/abi/TeePoolDedicatedStandardImplementation.d.ts +2 -3
  168. package/dist/generated/abi/TeePoolEphemeralStandardImplementation.d.ts +2 -3
  169. package/dist/generated/abi/TeePoolImplementation.d.ts +2 -3
  170. package/dist/generated/abi/TeePoolPersistentGpuImplementation.d.ts +2 -3
  171. package/dist/generated/abi/TeePoolPersistentStandardImplementation.d.ts +2 -3
  172. package/dist/generated/abi/TeePoolPhalaImplementation.d.ts +2 -3
  173. package/dist/generated/abi/VanaEpochImplementation.d.ts +2 -3
  174. package/dist/generated/abi/VanaPoolEntityImplementation.d.ts +2 -3
  175. package/dist/generated/abi/VanaPoolStakingImplementation.d.ts +2 -3
  176. package/dist/generated/abi/VanaPoolTreasuryImplementation.d.ts +2 -3
  177. package/dist/generated/abi/index.d.ts +37 -39
  178. package/dist/generated/event-types.d.ts +9 -10
  179. package/dist/generated/eventRegistry.d.ts +3 -7
  180. package/dist/generated/server/server-exports.d.ts +19 -21
  181. package/dist/generated/server/server.cjs.map +1 -1
  182. package/dist/generated/server/server.d.ts +113 -87
  183. package/dist/generated/subgraph.cjs +797 -32
  184. package/dist/generated/subgraph.cjs.map +1 -1
  185. package/dist/generated/subgraph.d.ts +464 -332
  186. package/dist/generated/subgraph.js +792 -32
  187. package/dist/generated/subgraph.js.map +1 -1
  188. package/dist/index.browser.d.ts +47 -96
  189. package/dist/index.browser.js +12 -0
  190. package/dist/index.browser.js.map +1 -1
  191. package/dist/index.cjs +3 -1
  192. package/dist/index.cjs.map +1 -1
  193. package/dist/index.d.ts +0 -2
  194. package/dist/index.js +3 -1
  195. package/dist/index.js.map +1 -1
  196. package/dist/index.node.cjs +14 -3
  197. package/dist/index.node.cjs.map +1 -1
  198. package/dist/index.node.d.ts +203 -87
  199. package/dist/index.node.js +14 -2
  200. package/dist/index.node.js.map +1 -1
  201. package/dist/node.cjs.map +1 -1
  202. package/dist/node.d.ts +42 -2
  203. package/dist/node.js.map +1 -1
  204. package/dist/platform/browser-only.d.ts +5 -8
  205. package/dist/platform/browser-only.test.d.ts +1 -0
  206. package/dist/platform/browser-safe.d.ts +6 -9
  207. package/dist/platform/browser-safe.test.d.ts +1 -0
  208. package/dist/platform/browser.cjs +167 -8
  209. package/dist/platform/browser.cjs.map +1 -1
  210. package/dist/platform/browser.d.ts +235 -18
  211. package/dist/platform/browser.js +179 -29
  212. package/dist/platform/browser.js.map +1 -1
  213. package/dist/platform/browser.test.d.ts +1 -0
  214. package/dist/platform/index.d.ts +11 -5
  215. package/dist/platform/interface.cjs.map +1 -1
  216. package/dist/platform/interface.d.ts +289 -98
  217. package/dist/platform/node.cjs +163 -2
  218. package/dist/platform/node.cjs.map +1 -1
  219. package/dist/platform/node.d.ts +72 -13
  220. package/dist/platform/node.js +175 -21
  221. package/dist/platform/node.js.map +1 -1
  222. package/dist/platform/ports/openpgp-port.cjs +74 -0
  223. package/dist/platform/ports/openpgp-port.cjs.map +1 -0
  224. package/dist/platform/ports/openpgp-port.d.ts +13 -0
  225. package/dist/platform/ports/openpgp-port.js +59 -0
  226. package/dist/platform/ports/openpgp-port.js.map +1 -0
  227. package/dist/platform/ports/pgp-port.cjs +17 -0
  228. package/dist/platform/ports/pgp-port.cjs.map +1 -0
  229. package/dist/platform/ports/pgp-port.d.ts +35 -0
  230. package/dist/platform/ports/pgp-port.js +1 -0
  231. package/dist/platform/ports/pgp-port.js.map +1 -0
  232. package/dist/platform/shared/error-utils.d.ts +2 -4
  233. package/dist/platform/shared/pgp-utils.cjs +2 -2
  234. package/dist/platform/shared/pgp-utils.cjs.map +1 -1
  235. package/dist/platform/shared/pgp-utils.d.ts +3 -5
  236. package/dist/platform/shared/pgp-utils.js +2 -2
  237. package/dist/platform/shared/pgp-utils.js.map +1 -1
  238. package/dist/platform/shared/stream-utils.d.ts +1 -3
  239. package/dist/platform/utils.d.ts +6 -10
  240. package/dist/platform/utils.test.d.ts +1 -0
  241. package/dist/platform.browser.d.ts +9 -4
  242. package/dist/platform.d.ts +11 -5
  243. package/dist/platform.node.d.ts +10 -5
  244. package/dist/server/relayerHandler.cjs +337 -0
  245. package/dist/server/relayerHandler.cjs.map +1 -0
  246. package/dist/server/relayerHandler.d.ts +38 -0
  247. package/dist/server/relayerHandler.js +313 -0
  248. package/dist/server/relayerHandler.js.map +1 -0
  249. package/dist/storage/index.d.ts +56 -10
  250. package/dist/storage/manager.cjs +110 -27
  251. package/dist/storage/manager.cjs.map +1 -1
  252. package/dist/storage/manager.d.ts +121 -30
  253. package/dist/storage/manager.js +113 -37
  254. package/dist/storage/manager.js.map +1 -1
  255. package/dist/storage/providers/callback-storage.cjs +89 -18
  256. package/dist/storage/providers/callback-storage.cjs.map +1 -1
  257. package/dist/storage/providers/callback-storage.d.ts +111 -28
  258. package/dist/storage/providers/callback-storage.js +89 -18
  259. package/dist/storage/providers/callback-storage.js.map +1 -1
  260. package/dist/storage/providers/google-drive.cjs +2 -2
  261. package/dist/storage/providers/google-drive.cjs.map +1 -1
  262. package/dist/storage/providers/google-drive.d.ts +3 -7
  263. package/dist/storage/providers/google-drive.js +4 -7
  264. package/dist/storage/providers/google-drive.js.map +1 -1
  265. package/dist/storage/providers/google-drive.test.d.ts +1 -0
  266. package/dist/storage/providers/ipfs.cjs +5 -5
  267. package/dist/storage/providers/ipfs.cjs.map +1 -1
  268. package/dist/storage/providers/ipfs.d.ts +3 -6
  269. package/dist/storage/providers/ipfs.js +7 -10
  270. package/dist/storage/providers/ipfs.js.map +1 -1
  271. package/dist/storage/providers/pinata.cjs +6 -6
  272. package/dist/storage/providers/pinata.cjs.map +1 -1
  273. package/dist/storage/providers/pinata.d.ts +17 -22
  274. package/dist/storage/providers/pinata.js +8 -11
  275. package/dist/storage/providers/pinata.js.map +1 -1
  276. package/dist/storage/tests/callbackStorage.test.d.ts +1 -0
  277. package/dist/storage/tests/googleDriveStorage.test.d.ts +1 -0
  278. package/dist/storage/tests/ipfsStorage.test.d.ts +1 -0
  279. package/dist/storage/tests/pinataStorage.test.d.ts +1 -0
  280. package/dist/storage/tests/storageManager.test.d.ts +1 -0
  281. package/dist/tests/abi.test.d.ts +1 -0
  282. package/dist/tests/chains-definitions.test.d.ts +1 -0
  283. package/dist/tests/core-encryption.test.d.ts +1 -0
  284. package/dist/tests/core-extended.test.d.ts +1 -0
  285. package/dist/tests/core-generics-coverage.test.d.ts +1 -0
  286. package/dist/tests/coverage-boost.test.d.ts +1 -0
  287. package/dist/tests/crypto-cross-platform-compatibility.test.d.ts +1 -0
  288. package/dist/tests/data-addfile-permissions-schema.test.d.ts +1 -0
  289. package/dist/tests/data-additional-methods.test.d.ts +1 -0
  290. package/dist/tests/data-controller-edge-cases.test.d.ts +1 -0
  291. package/dist/tests/data-ipfs-gateways.test.d.ts +1 -0
  292. package/dist/tests/data-relayer.test.d.ts +1 -0
  293. package/dist/tests/data-schema-validation.test.d.ts +1 -0
  294. package/dist/tests/data-simple-methods.test.d.ts +1 -0
  295. package/dist/tests/data.test.d.ts +1 -0
  296. package/dist/tests/demo-integration.test.d.ts +1 -0
  297. package/dist/tests/demo-trusted-server-integration.test.d.ts +1 -0
  298. package/dist/tests/download-relayer.test.d.ts +1 -0
  299. package/dist/tests/dual-mode-permissions.test.d.ts +1 -0
  300. package/dist/tests/dual-mode-trusted-servers.test.d.ts +1 -0
  301. package/dist/tests/encryption-correct-implementation.test.d.ts +1 -0
  302. package/dist/tests/encryption-coverage.test.d.ts +1 -0
  303. package/dist/tests/encryption-edge-cases.test.d.ts +1 -0
  304. package/dist/tests/encryption-utils-updated.test.d.ts +1 -0
  305. package/dist/tests/errors-coverage.test.d.ts +1 -0
  306. package/dist/tests/errors.test.d.ts +1 -0
  307. package/dist/tests/factories/mockFactory.d.ts +316 -0
  308. package/dist/tests/fakes/FakeStorageManager.d.ts +200 -0
  309. package/dist/tests/fakes/FakeStorageManager.test.d.ts +1 -0
  310. package/dist/tests/fakes/FakeWaitForTransactionEvents.d.ts +170 -0
  311. package/dist/tests/fakes/FakeWaitForTransactionEvents.test.d.ts +1 -0
  312. package/dist/tests/fakes/fake-pgp-port.d.ts +13 -0
  313. package/dist/tests/grantValidation-edge-cases.test.d.ts +1 -0
  314. package/dist/tests/grantValidation-unreachable-branch.test.d.ts +1 -0
  315. package/dist/tests/helper-methods.test.d.ts +1 -0
  316. package/dist/tests/helpers/platformTestHelpers.d.ts +106 -0
  317. package/dist/tests/helpers/typedMocks.d.ts +64 -0
  318. package/dist/tests/index-browser.test.d.ts +1 -0
  319. package/dist/tests/index-node.test.d.ts +1 -0
  320. package/dist/tests/index.test.d.ts +1 -0
  321. package/dist/tests/mocks/platformAdapter.d.ts +12 -0
  322. package/dist/tests/new-permissions-methods.test.d.ts +1 -0
  323. package/dist/tests/no-buffer-browser.test.d.ts +1 -0
  324. package/dist/tests/permissions-grantee.test.d.ts +1 -0
  325. package/dist/tests/permissions-revoke-relayer.test.d.ts +1 -0
  326. package/dist/tests/permissions-schema-validation.test.d.ts +1 -0
  327. package/dist/tests/permissions-server-files.test.d.ts +1 -0
  328. package/dist/tests/permissions-transaction-options.test.d.ts +1 -0
  329. package/dist/tests/permissions-trust-servers.test.d.ts +1 -0
  330. package/dist/tests/permissions.test.d.ts +1 -0
  331. package/dist/tests/personal.test.d.ts +1 -0
  332. package/dist/tests/platform-browser.test.d.ts +1 -0
  333. package/dist/tests/platform-crypto-expanded.test.d.ts +1 -0
  334. package/dist/tests/platform-crypto.test.d.ts +1 -0
  335. package/dist/tests/platform-index.test.d.ts +1 -0
  336. package/dist/tests/platform-node.test.d.ts +1 -0
  337. package/dist/tests/platform-shared-utils.test.d.ts +1 -0
  338. package/dist/tests/platform-updated.test.d.ts +1 -0
  339. package/dist/tests/protocol-additional-methods.test.d.ts +1 -0
  340. package/dist/tests/protocol.test.d.ts +1 -0
  341. package/dist/tests/read-only-mode.test.d.ts +1 -0
  342. package/dist/tests/relayer-integration.test.d.ts +1 -0
  343. package/dist/tests/relayer-unified.test.d.ts +1 -0
  344. package/dist/tests/schemas.test.d.ts +1 -0
  345. package/dist/tests/server-relayer-handler.test.d.ts +1 -0
  346. package/dist/tests/setup.d.ts +7 -0
  347. package/dist/tests/signatureFormatter.test.d.ts +1 -0
  348. package/dist/tests/trusted-server-queries.test.d.ts +1 -0
  349. package/dist/tests/typedDataConverter.test.d.ts +1 -0
  350. package/dist/tests/types-contracts.test.d.ts +1 -0
  351. package/dist/tests/types-data.test.d.ts +1 -0
  352. package/dist/tests/types-external-apis.test.d.ts +1 -0
  353. package/dist/tests/types-generics.test.d.ts +1 -0
  354. package/dist/tests/types-permissions.test.d.ts +1 -0
  355. package/dist/tests/types-upload-params.test.d.ts +1 -0
  356. package/dist/tests/types.test.d.ts +1 -0
  357. package/dist/tests/utils-formatters.test.d.ts +1 -0
  358. package/dist/tests/utils-grantFiles-edge-cases.test.d.ts +1 -0
  359. package/dist/tests/utils-grantFiles-validation.test.d.ts +1 -0
  360. package/dist/tests/utils-grantFiles.test.d.ts +1 -0
  361. package/dist/tests/utils-grantValidation-consolidated.test.d.ts +1 -0
  362. package/dist/tests/utils-grants.test.d.ts +1 -0
  363. package/dist/tests/utils-ipfs-additional.test.d.ts +1 -0
  364. package/dist/tests/utils-ipfs.test.d.ts +4 -0
  365. package/dist/tests/utils-schemaValidation.test.d.ts +1 -0
  366. package/dist/tests/vana.test.d.ts +1 -0
  367. package/dist/tests/wallet-crypto-compatibility.test.d.ts +1 -0
  368. package/dist/types/blockchain.cjs.map +1 -1
  369. package/dist/types/blockchain.d.ts +46 -13
  370. package/dist/types/chains-additional.test.d.ts +1 -0
  371. package/dist/types/chains.cjs.map +1 -1
  372. package/dist/types/chains.d.ts +80 -16
  373. package/dist/types/chains.js.map +1 -1
  374. package/dist/types/config.cjs +10 -0
  375. package/dist/types/config.cjs.map +1 -1
  376. package/dist/types/config.d.ts +236 -242
  377. package/dist/types/config.js +8 -0
  378. package/dist/types/config.js.map +1 -1
  379. package/dist/types/contracts.cjs.map +1 -1
  380. package/dist/types/contracts.d.ts +79 -18
  381. package/dist/types/controller-context.cjs.map +1 -1
  382. package/dist/types/controller-context.d.ts +17 -21
  383. package/dist/types/data.cjs.map +1 -1
  384. package/dist/types/data.d.ts +111 -49
  385. package/dist/types/external-apis.d.ts +10 -12
  386. package/dist/types/generics.cjs.map +1 -1
  387. package/dist/types/generics.d.ts +116 -48
  388. package/dist/types/index.cjs +5 -4
  389. package/dist/types/index.cjs.map +1 -1
  390. package/dist/types/index.d.ts +47 -22
  391. package/dist/types/index.js +9 -2
  392. package/dist/types/index.js.map +1 -1
  393. package/dist/types/operations.cjs +2 -2
  394. package/dist/types/operations.cjs.map +1 -1
  395. package/dist/types/operations.d.ts +178 -32
  396. package/dist/types/operations.js +2 -2
  397. package/dist/types/operations.js.map +1 -1
  398. package/dist/types/options.cjs +17 -0
  399. package/dist/types/options.cjs.map +1 -0
  400. package/dist/types/options.d.ts +213 -0
  401. package/dist/types/options.js +1 -0
  402. package/dist/types/options.js.map +1 -0
  403. package/dist/types/permissions.cjs.map +1 -1
  404. package/dist/types/permissions.d.ts +72 -78
  405. package/dist/types/personal.cjs.map +1 -1
  406. package/dist/types/personal.d.ts +137 -22
  407. package/dist/types/relayer.cjs.map +1 -1
  408. package/dist/types/relayer.d.ts +293 -50
  409. package/dist/types/storage.cjs.map +1 -1
  410. package/dist/types/storage.d.ts +15 -29
  411. package/dist/types/storage.js +2 -5
  412. package/dist/types/storage.js.map +1 -1
  413. package/dist/types/transactionResults.d.ts +16 -18
  414. package/dist/types/utils.cjs.map +1 -1
  415. package/dist/types/utils.d.ts +20 -68
  416. package/dist/types.d.ts +4 -28
  417. package/dist/utils/__tests__/parseTransaction.test.d.ts +1 -0
  418. package/dist/utils/__tests__/pojo-serialization.test.d.ts +1 -0
  419. package/dist/utils/__tests__/signatureCache.test.d.ts +1 -0
  420. package/dist/utils/__tests__/subgraphConsistency.test.d.ts +4 -0
  421. package/dist/utils/__tests__/subgraphPagination.test.d.ts +4 -0
  422. package/dist/utils/__tests__/transaction-edge-cases.test.d.ts +1 -0
  423. package/dist/utils/__tests__/transactionHelpers.test.d.ts +1 -0
  424. package/dist/utils/__tests__/urlResolver.test.d.ts +4 -0
  425. package/dist/utils/blockchain/registry.cjs +2 -2
  426. package/dist/utils/blockchain/registry.cjs.map +1 -1
  427. package/dist/utils/blockchain/registry.d.ts +6 -8
  428. package/dist/utils/blockchain/registry.js +2 -2
  429. package/dist/utils/blockchain/registry.js.map +1 -1
  430. package/dist/utils/blockchain/registry.test.d.ts +1 -0
  431. package/dist/utils/chainQuery.cjs +107 -0
  432. package/dist/utils/chainQuery.cjs.map +1 -0
  433. package/dist/utils/chainQuery.d.ts +31 -0
  434. package/dist/utils/chainQuery.js +82 -0
  435. package/dist/utils/chainQuery.js.map +1 -0
  436. package/dist/utils/crypto-utils.cjs +0 -12
  437. package/dist/utils/crypto-utils.cjs.map +1 -1
  438. package/dist/utils/crypto-utils.d.ts +9 -27
  439. package/dist/utils/crypto-utils.js +0 -11
  440. package/dist/utils/crypto-utils.js.map +1 -1
  441. package/dist/utils/crypto-utils.test.d.ts +1 -0
  442. package/dist/utils/download.cjs +3 -3
  443. package/dist/utils/download.cjs.map +1 -1
  444. package/dist/utils/download.d.ts +13 -14
  445. package/dist/utils/download.js +2 -2
  446. package/dist/utils/download.js.map +1 -1
  447. package/dist/utils/encoding.cjs +1 -1
  448. package/dist/utils/encoding.cjs.map +1 -1
  449. package/dist/utils/encoding.d.ts +4 -6
  450. package/dist/utils/encoding.js +1 -1
  451. package/dist/utils/encoding.js.map +1 -1
  452. package/dist/utils/encoding.test.d.ts +1 -0
  453. package/dist/utils/encryption.cjs +16 -10
  454. package/dist/utils/encryption.cjs.map +1 -1
  455. package/dist/utils/encryption.d.ts +13 -17
  456. package/dist/utils/encryption.js +16 -10
  457. package/dist/utils/encryption.js.map +1 -1
  458. package/dist/utils/formatters.cjs +4 -2
  459. package/dist/utils/formatters.cjs.map +1 -1
  460. package/dist/utils/formatters.d.ts +4 -6
  461. package/dist/utils/formatters.js +4 -2
  462. package/dist/utils/formatters.js.map +1 -1
  463. package/dist/utils/grantFiles.cjs +7 -4
  464. package/dist/utils/grantFiles.cjs.map +1 -1
  465. package/dist/utils/grantFiles.d.ts +16 -30
  466. package/dist/utils/grantFiles.js +7 -4
  467. package/dist/utils/grantFiles.js.map +1 -1
  468. package/dist/utils/grantValidation.cjs +1 -1
  469. package/dist/utils/grantValidation.cjs.map +1 -1
  470. package/dist/utils/grantValidation.d.ts +109 -33
  471. package/dist/utils/grantValidation.js +1 -1
  472. package/dist/utils/grantValidation.js.map +1 -1
  473. package/dist/utils/grants.cjs +1 -1
  474. package/dist/utils/grants.cjs.map +1 -1
  475. package/dist/utils/grants.d.ts +101 -23
  476. package/dist/utils/grants.js +1 -1
  477. package/dist/utils/grants.js.map +1 -1
  478. package/dist/utils/ipfs.cjs +2 -4
  479. package/dist/utils/ipfs.cjs.map +1 -1
  480. package/dist/utils/ipfs.d.ts +8 -10
  481. package/dist/utils/ipfs.js +2 -4
  482. package/dist/utils/ipfs.js.map +1 -1
  483. package/dist/utils/lazy-import.cjs +4 -6
  484. package/dist/utils/lazy-import.cjs.map +1 -1
  485. package/dist/utils/lazy-import.d.ts +33 -10
  486. package/dist/utils/lazy-import.js +4 -6
  487. package/dist/utils/lazy-import.js.map +1 -1
  488. package/dist/utils/multicall.cjs +4 -2
  489. package/dist/utils/multicall.cjs.map +1 -1
  490. package/dist/utils/multicall.d.ts +5 -8
  491. package/dist/utils/multicall.js +4 -2
  492. package/dist/utils/multicall.js.map +1 -1
  493. package/dist/utils/parseTransactionPojo.cjs.map +1 -1
  494. package/dist/utils/parseTransactionPojo.d.ts +4 -10
  495. package/dist/utils/parseTransactionPojo.js.map +1 -1
  496. package/dist/utils/schemaValidation.cjs +5 -5
  497. package/dist/utils/schemaValidation.cjs.map +1 -1
  498. package/dist/utils/schemaValidation.d.ts +8 -12
  499. package/dist/utils/schemaValidation.js +7 -10
  500. package/dist/utils/schemaValidation.js.map +1 -1
  501. package/dist/utils/signatureCache.cjs +9 -4
  502. package/dist/utils/signatureCache.cjs.map +1 -1
  503. package/dist/utils/signatureCache.d.ts +53 -15
  504. package/dist/utils/signatureCache.js +12 -10
  505. package/dist/utils/signatureCache.js.map +1 -1
  506. package/dist/utils/signatureFormatter.cjs +6 -9
  507. package/dist/utils/signatureFormatter.cjs.map +1 -1
  508. package/dist/utils/signatureFormatter.d.ts +2 -5
  509. package/dist/utils/signatureFormatter.js +6 -9
  510. package/dist/utils/signatureFormatter.js.map +1 -1
  511. package/dist/utils/subgraphConsistency.cjs +184 -0
  512. package/dist/utils/subgraphConsistency.cjs.map +1 -0
  513. package/dist/utils/subgraphConsistency.d.ts +65 -0
  514. package/dist/utils/subgraphConsistency.js +155 -0
  515. package/dist/utils/subgraphConsistency.js.map +1 -0
  516. package/dist/utils/subgraphMetaCache.cjs +101 -0
  517. package/dist/utils/subgraphMetaCache.cjs.map +1 -0
  518. package/dist/utils/subgraphMetaCache.d.ts +56 -0
  519. package/dist/utils/subgraphMetaCache.js +76 -0
  520. package/dist/utils/subgraphMetaCache.js.map +1 -0
  521. package/dist/utils/subgraphPagination.cjs +104 -0
  522. package/dist/utils/subgraphPagination.cjs.map +1 -0
  523. package/dist/utils/subgraphPagination.d.ts +78 -0
  524. package/dist/utils/subgraphPagination.js +78 -0
  525. package/dist/utils/subgraphPagination.js.map +1 -0
  526. package/dist/utils/tests/multicall.test.d.ts +1 -0
  527. package/dist/utils/transactionHelpers.cjs.map +1 -1
  528. package/dist/utils/transactionHelpers.d.ts +17 -23
  529. package/dist/utils/transactionHelpers.js.map +1 -1
  530. package/dist/utils/typeGuards.cjs +109 -0
  531. package/dist/utils/typeGuards.cjs.map +1 -0
  532. package/dist/utils/typeGuards.d.ts +138 -0
  533. package/dist/utils/typeGuards.js +74 -0
  534. package/dist/utils/typeGuards.js.map +1 -0
  535. package/dist/utils/typedDataConverter.cjs.map +1 -1
  536. package/dist/utils/typedDataConverter.d.ts +42 -9
  537. package/dist/utils/typedDataConverter.js.map +1 -1
  538. package/dist/utils/urlResolver.cjs +8 -1
  539. package/dist/utils/urlResolver.cjs.map +1 -1
  540. package/dist/utils/urlResolver.d.ts +24 -8
  541. package/dist/utils/urlResolver.js +9 -2
  542. package/dist/utils/urlResolver.js.map +1 -1
  543. package/dist/utils/wallet.cjs +63 -0
  544. package/dist/utils/wallet.cjs.map +1 -0
  545. package/dist/utils/wallet.d.ts +94 -0
  546. package/dist/utils/wallet.js +37 -0
  547. package/dist/utils/wallet.js.map +1 -0
  548. package/dist/utils/withEvents.cjs.map +1 -1
  549. package/dist/utils/withEvents.d.ts +5 -12
  550. package/dist/utils/withEvents.js.map +1 -1
  551. package/package.json +24 -16
  552. package/dist/browser.d.cts +0 -2
  553. package/dist/chains/definitions.d.cts +0 -53
  554. package/dist/chains/index.d.cts +0 -2
  555. package/dist/chains.browser.cjs +0 -37
  556. package/dist/chains.browser.cjs.map +0 -1
  557. package/dist/chains.browser.d.cts +0 -2
  558. package/dist/chains.d.cts +0 -2
  559. package/dist/chains.node.d.cts +0 -2
  560. package/dist/config/addresses.d.cts +0 -401
  561. package/dist/config/chains.d.cts +0 -85
  562. package/dist/config/features.d.cts +0 -64
  563. package/dist/contracts/contractController.d.cts +0 -117
  564. package/dist/controllers/data.d.cts +0 -915
  565. package/dist/controllers/permissions.d.cts +0 -1383
  566. package/dist/controllers/protocol.d.cts +0 -188
  567. package/dist/controllers/schemas.d.cts +0 -260
  568. package/dist/controllers/server.d.cts +0 -230
  569. package/dist/core/apiClient.d.cts +0 -165
  570. package/dist/core/client.d.cts +0 -92
  571. package/dist/core/generics.d.cts +0 -120
  572. package/dist/core.d.cts +0 -493
  573. package/dist/crypto/ecies/__tests__/test-vectors.d.cts +0 -40
  574. package/dist/crypto/ecies/base.d.cts +0 -143
  575. package/dist/crypto/ecies/browser.d.cts +0 -48
  576. package/dist/crypto/ecies/constants.d.cts +0 -122
  577. package/dist/crypto/ecies/index.d.cts +0 -1
  578. package/dist/crypto/ecies/interface.d.cts +0 -176
  579. package/dist/crypto/ecies/node.d.cts +0 -50
  580. package/dist/crypto/ecies/test-vectors/eccrypto-vectors.d.cts +0 -76
  581. package/dist/crypto/ecies/test-vectors/eccrypto-vectors.d.ts +0 -76
  582. package/dist/crypto/ecies/utils.d.cts +0 -67
  583. package/dist/crypto/services/WalletKeyEncryptionService.d.cts +0 -92
  584. package/dist/diagnostics.d.cts +0 -26
  585. package/dist/errors.d.cts +0 -350
  586. package/dist/generated/abi/ComputeEngineImplementation.d.cts +0 -996
  587. package/dist/generated/abi/ComputeInstructionRegistryImplementation.d.cts +0 -545
  588. package/dist/generated/abi/DATFactoryImplementation.d.cts +0 -661
  589. package/dist/generated/abi/DATImplementation.d.cts +0 -693
  590. package/dist/generated/abi/DATPausableImplementation.d.cts +0 -1145
  591. package/dist/generated/abi/DATVotesImplementation.d.cts +0 -1095
  592. package/dist/generated/abi/DLPPerformanceImplementation.d.cts +0 -883
  593. package/dist/generated/abi/DLPRegistryImplementation.d.cts +0 -1123
  594. package/dist/generated/abi/DLPRegistryTreasuryImplementation.d.cts +0 -452
  595. package/dist/generated/abi/DLPRewardDeployerImplementation.d.cts +0 -714
  596. package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.d.cts +0 -452
  597. package/dist/generated/abi/DLPRewardSwapImplementation.d.cts +0 -706
  598. package/dist/generated/abi/DLPRootImplementation.d.cts +0 -1248
  599. package/dist/generated/abi/DLPTreasuryImplementation.d.cts +0 -452
  600. package/dist/generated/abi/DataLiquidityPoolImplementation.d.cts +0 -737
  601. package/dist/generated/abi/DataPortabilityGranteesImplementation.d.cts +0 -661
  602. package/dist/generated/abi/DataPortabilityPermissionsImplementation.d.cts +0 -989
  603. package/dist/generated/abi/DataPortabilityServersImplementation.d.cts +0 -1086
  604. package/dist/generated/abi/DataRefinerRegistryImplementation.d.cts +0 -737
  605. package/dist/generated/abi/DataRegistryImplementation.d.cts +0 -1014
  606. package/dist/generated/abi/QueryEngineImplementation.d.cts +0 -1001
  607. package/dist/generated/abi/SwapHelperImplementation.d.cts +0 -764
  608. package/dist/generated/abi/TeePoolDedicatedGpuImplementation.d.cts +0 -701
  609. package/dist/generated/abi/TeePoolDedicatedStandardImplementation.d.cts +0 -701
  610. package/dist/generated/abi/TeePoolEphemeralStandardImplementation.d.cts +0 -701
  611. package/dist/generated/abi/TeePoolImplementation.d.cts +0 -993
  612. package/dist/generated/abi/TeePoolPersistentGpuImplementation.d.cts +0 -701
  613. package/dist/generated/abi/TeePoolPersistentStandardImplementation.d.cts +0 -701
  614. package/dist/generated/abi/TeePoolPhalaImplementation.d.cts +0 -993
  615. package/dist/generated/abi/VanaEpochImplementation.d.cts +0 -900
  616. package/dist/generated/abi/VanaPoolEntityImplementation.d.cts +0 -934
  617. package/dist/generated/abi/VanaPoolStakingImplementation.d.cts +0 -693
  618. package/dist/generated/abi/VanaPoolTreasuryImplementation.d.cts +0 -394
  619. package/dist/generated/abi/index.d.cts +0 -26547
  620. package/dist/generated/event-types.d.cts +0 -855
  621. package/dist/generated/eventRegistry.d.cts +0 -18
  622. package/dist/generated/server/server-exports.d.cts +0 -21
  623. package/dist/generated/server/server.d.cts +0 -512
  624. package/dist/generated/subgraph.d.cts +0 -5981
  625. package/dist/index.browser.cjs +0 -151
  626. package/dist/index.browser.cjs.map +0 -1
  627. package/dist/index.browser.d.cts +0 -201
  628. package/dist/index.d.cts +0 -2
  629. package/dist/index.node.d.cts +0 -87
  630. package/dist/node.d.cts +0 -2
  631. package/dist/platform/browser-only.d.cts +0 -25
  632. package/dist/platform/browser-safe.d.cts +0 -32
  633. package/dist/platform/browser.d.cts +0 -74
  634. package/dist/platform/index.d.cts +0 -5
  635. package/dist/platform/interface.d.cts +0 -218
  636. package/dist/platform/node.d.cts +0 -27
  637. package/dist/platform/shared/error-utils.d.cts +0 -25
  638. package/dist/platform/shared/pgp-utils.d.cts +0 -61
  639. package/dist/platform/shared/stream-utils.d.cts +0 -16
  640. package/dist/platform/utils.d.cts +0 -53
  641. package/dist/platform.browser.cjs +0 -41
  642. package/dist/platform.browser.cjs.map +0 -1
  643. package/dist/platform.browser.d.cts +0 -4
  644. package/dist/platform.d.cts +0 -5
  645. package/dist/platform.node.d.cts +0 -5
  646. package/dist/schemas/dataSchema.schema.d.cts +0 -88
  647. package/dist/schemas/dataSchema.schema.d.ts +0 -88
  648. package/dist/schemas/grantFile.schema.d.cts +0 -57
  649. package/dist/schemas/grantFile.schema.d.ts +0 -57
  650. package/dist/server/handler.cjs +0 -101
  651. package/dist/server/handler.cjs.map +0 -1
  652. package/dist/server/handler.d.cts +0 -306
  653. package/dist/server/handler.d.ts +0 -306
  654. package/dist/server/handler.js +0 -77
  655. package/dist/server/handler.js.map +0 -1
  656. package/dist/storage/index.d.cts +0 -10
  657. package/dist/storage/manager.d.cts +0 -150
  658. package/dist/storage/providers/callback-storage.d.cts +0 -100
  659. package/dist/storage/providers/google-drive.d.cts +0 -156
  660. package/dist/storage/providers/ipfs.d.cts +0 -163
  661. package/dist/storage/providers/pinata.d.cts +0 -173
  662. package/dist/types/blockchain.d.cts +0 -52
  663. package/dist/types/chains.d.cts +0 -34
  664. package/dist/types/config.d.cts +0 -726
  665. package/dist/types/contracts.d.cts +0 -68
  666. package/dist/types/controller-context.d.cts +0 -71
  667. package/dist/types/data.d.cts +0 -694
  668. package/dist/types/eccrypto-js.d.d.cts +0 -13
  669. package/dist/types/eccrypto-js.d.d.ts +0 -13
  670. package/dist/types/external-apis.d.cts +0 -186
  671. package/dist/types/generics.d.cts +0 -450
  672. package/dist/types/index.d.cts +0 -22
  673. package/dist/types/operations.d.cts +0 -116
  674. package/dist/types/permissions.d.cts +0 -957
  675. package/dist/types/personal.d.cts +0 -40
  676. package/dist/types/relayer.d.cts +0 -284
  677. package/dist/types/storage.d.cts +0 -131
  678. package/dist/types/transactionResults.d.cts +0 -195
  679. package/dist/types/utils.d.cts +0 -819
  680. package/dist/types.d.cts +0 -54
  681. package/dist/utils/blockchain/registry.d.cts +0 -34
  682. package/dist/utils/crypto-utils.d.cts +0 -118
  683. package/dist/utils/download.d.cts +0 -41
  684. package/dist/utils/encoding.d.cts +0 -54
  685. package/dist/utils/encryption.d.cts +0 -275
  686. package/dist/utils/formatters.d.cts +0 -120
  687. package/dist/utils/grantFiles.d.cts +0 -186
  688. package/dist/utils/grantValidation.d.cts +0 -150
  689. package/dist/utils/grants.d.cts +0 -70
  690. package/dist/utils/ipfs.d.cts +0 -90
  691. package/dist/utils/lazy-import.d.cts +0 -20
  692. package/dist/utils/multicall.d.cts +0 -129
  693. package/dist/utils/parseTransactionPojo.d.cts +0 -37
  694. package/dist/utils/schemaValidation.d.cts +0 -172
  695. package/dist/utils/signatureCache.d.cts +0 -134
  696. package/dist/utils/signatureFormatter.d.cts +0 -39
  697. package/dist/utils/transactionHelpers.d.cts +0 -86
  698. package/dist/utils/typedDataConverter.d.cts +0 -13
  699. package/dist/utils/urlResolver.d.cts +0 -40
  700. package/dist/utils/withEvents.d.cts +0 -63
package/dist/core.js CHANGED
@@ -1,24 +1,22 @@
1
- var __defProp = Object.defineProperty;
2
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
- var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
1
  import {
5
2
  isWalletConfig,
6
3
  isChainConfig,
4
+ isReadOnlyConfig,
5
+ isAddressOnlyConfig,
7
6
  isVanaChainId,
8
7
  hasStorageConfig
9
8
  } from "./types";
10
9
  import { InvalidConfigurationError } from "./errors";
11
- import {
12
- PermissionsController
13
- } from "./controllers/permissions";
10
+ import { PermissionsController } from "./controllers/permissions";
14
11
  import { DataController } from "./controllers/data";
15
12
  import { SchemaController } from "./controllers/schemas";
16
13
  import { ServerController } from "./controllers/server";
17
14
  import { ProtocolController } from "./controllers/protocol";
18
15
  import { StorageManager } from "./storage";
19
16
  import { createWalletClient, createPublicClient, http } from "viem";
17
+ import { extractAddress } from "./utils/wallet";
20
18
  import { chains } from "./config/chains";
21
- import { getChainConfig } from "./chains";
19
+ import { getChainConfig, vanaMainnet } from "./chains";
22
20
  import {
23
21
  encryptBlobWithSignedKey,
24
22
  decryptBlobWithSignedKey
@@ -65,6 +63,29 @@ class VanaCoreFactory {
65
63
  }
66
64
  }
67
65
  class VanaCore {
66
+ /** Manages gasless data access permissions and trusted server registry. */
67
+ permissions;
68
+ /** Handles user data file operations. */
69
+ data;
70
+ /** Manages data schemas and refiners. */
71
+ schemas;
72
+ /** Provides personal server setup and trusted server interactions. */
73
+ server;
74
+ /** Offers low-level access to Vana protocol smart contracts. */
75
+ protocol;
76
+ /** Handles environment-specific operations like encryption and file systems. */
77
+ platform;
78
+ relayerConfig;
79
+ relayerCallback;
80
+ downloadRelayer;
81
+ storageManager;
82
+ hasRequiredStorage;
83
+ ipfsGateways;
84
+ publicClient;
85
+ walletClient;
86
+ _staticUserAddress;
87
+ // For read-only mode
88
+ operationStore;
68
89
  /**
69
90
  * Initializes a new VanaCore client instance with the provided configuration.
70
91
  *
@@ -87,42 +108,41 @@ class VanaCore {
87
108
  * ```
88
109
  */
89
110
  constructor(platform, config) {
90
- /** Manages gasless data access permissions and trusted server registry. */
91
- __publicField(this, "permissions");
92
- /** Handles user data file operations. */
93
- __publicField(this, "data");
94
- /** Manages data schemas and refiners. */
95
- __publicField(this, "schemas");
96
- /** Provides personal server setup and trusted server interactions. */
97
- __publicField(this, "server");
98
- /** Offers low-level access to Vana protocol smart contracts. */
99
- __publicField(this, "protocol");
100
- /** Handles environment-specific operations like encryption and file systems. */
101
- __publicField(this, "platform");
102
- __publicField(this, "relayerCallbacks");
103
- __publicField(this, "downloadRelayer");
104
- __publicField(this, "storageManager");
105
- __publicField(this, "hasRequiredStorage");
106
- __publicField(this, "ipfsGateways");
107
- __publicField(this, "defaultPersonalServerUrl");
108
- __publicField(this, "publicClient");
109
- __publicField(this, "walletClient");
110
111
  this.platform = platform;
111
112
  this.validateConfig(config);
112
- this.relayerCallbacks = config.relayerCallbacks;
113
+ this.operationStore = config?.operationStore;
114
+ this.relayerConfig = config.relayer;
115
+ if (config.relayer) {
116
+ if (typeof config.relayer !== "string" && typeof config.relayer !== "function") {
117
+ throw new InvalidConfigurationError(
118
+ "Relayer must be either a URL string or a callback function"
119
+ );
120
+ }
121
+ if (typeof config.relayer === "string") {
122
+ const url = config.relayer;
123
+ this.relayerCallback = async (request) => {
124
+ const response = await fetch(url, {
125
+ method: "POST",
126
+ headers: { "Content-Type": "application/json" },
127
+ body: JSON.stringify(request)
128
+ });
129
+ if (!response.ok) {
130
+ throw new Error(`Relayer request failed: ${response.statusText}`);
131
+ }
132
+ return response.json();
133
+ };
134
+ } else {
135
+ this.relayerCallback = config.relayer;
136
+ }
137
+ }
113
138
  this.downloadRelayer = config.downloadRelayer;
114
139
  this.ipfsGateways = config.ipfsGateways;
115
- this.defaultPersonalServerUrl = config.defaultPersonalServerUrl;
116
140
  this.hasRequiredStorage = hasStorageConfig(config);
117
141
  if (config.storage?.providers) {
118
142
  this.storageManager = new StorageManager();
119
143
  for (const [name, provider] of Object.entries(config.storage.providers)) {
120
144
  const isDefault = name === config.storage.defaultProvider;
121
- this.storageManager.register(
122
- name,
123
- provider,
124
- isDefault
125
- );
145
+ this.storageManager.register(name, provider, isDefault);
126
146
  }
127
147
  if (!config.storage.defaultProvider && Object.keys(config.storage.providers).length > 0) {
128
148
  const firstProviderName = Object.keys(config.storage.providers)[0];
@@ -130,8 +150,34 @@ class VanaCore {
130
150
  }
131
151
  }
132
152
  let walletClient;
153
+ let publicClient;
154
+ let staticUserAddress;
155
+ let chainToUse;
133
156
  if (isWalletConfig(config)) {
134
157
  walletClient = config.walletClient;
158
+ chainToUse = walletClient.chain ?? vanaMainnet;
159
+ staticUserAddress = void 0;
160
+ if ("publicClient" in config && config.publicClient) {
161
+ publicClient = config.publicClient;
162
+ } else {
163
+ publicClient = createPublicClient({
164
+ chain: chainToUse,
165
+ transport: http()
166
+ });
167
+ }
168
+ } else if (isReadOnlyConfig(config)) {
169
+ walletClient = void 0;
170
+ publicClient = config.publicClient;
171
+ staticUserAddress = config.address;
172
+ chainToUse = config.publicClient.chain ?? vanaMainnet;
173
+ } else if (isAddressOnlyConfig(config)) {
174
+ walletClient = void 0;
175
+ staticUserAddress = config.address;
176
+ chainToUse = config.chain ?? vanaMainnet;
177
+ publicClient = createPublicClient({
178
+ chain: chainToUse,
179
+ transport: http()
180
+ });
135
181
  } else if (isChainConfig(config)) {
136
182
  if (!config.account) {
137
183
  throw new InvalidConfigurationError(
@@ -144,30 +190,38 @@ class VanaCore {
144
190
  `Unsupported chain ID: ${config.chainId}`
145
191
  );
146
192
  }
193
+ chainToUse = chain;
147
194
  walletClient = createWalletClient({
148
195
  chain,
149
- transport: http(config.rpcUrl || chain.rpcUrls.default.http[0]),
196
+ transport: http(config.rpcUrl ?? chain.rpcUrls.default.http[0]),
150
197
  account: config.account
151
198
  });
199
+ staticUserAddress = void 0;
200
+ publicClient = createPublicClient({
201
+ chain,
202
+ transport: http()
203
+ });
152
204
  } else {
153
205
  throw new InvalidConfigurationError(
154
- "Invalid configuration: must be either WalletConfig or ChainConfig"
206
+ "Invalid configuration: must provide either walletClient, publicClient + address, or address alone"
155
207
  );
156
208
  }
157
- const publicClient = createPublicClient({
158
- chain: walletClient.chain,
159
- transport: http()
160
- });
161
209
  this.publicClient = publicClient;
162
210
  this.walletClient = walletClient;
163
- const chainConfig = getChainConfig(walletClient.chain.id);
164
- const subgraphUrl = config.subgraphUrl || chainConfig?.subgraphUrl;
211
+ this._staticUserAddress = staticUserAddress;
212
+ const chainConfig = getChainConfig(chainToUse.id);
213
+ const subgraphUrl = config.subgraphUrl ?? chainConfig?.subgraphUrl;
214
+ const personalServerUrl = config.defaultPersonalServerUrl ?? chainConfig?.personalServerUrl;
215
+ const self = this;
165
216
  const sharedContext = {
166
217
  walletClient,
167
218
  publicClient,
219
+ get userAddress() {
220
+ return self.userAddress;
221
+ },
168
222
  applicationClient: walletClient,
169
223
  // Using same wallet for now
170
- relayerCallbacks: this.relayerCallbacks,
224
+ relayer: this.relayerCallback,
171
225
  downloadRelayer: this.downloadRelayer,
172
226
  storageManager: this.storageManager,
173
227
  subgraphUrl,
@@ -176,9 +230,10 @@ class VanaCore {
176
230
  validateStorageRequired: this.validateStorageRequired.bind(this),
177
231
  hasStorage: this.hasStorage.bind(this),
178
232
  ipfsGateways: this.ipfsGateways,
179
- defaultPersonalServerUrl: this.defaultPersonalServerUrl,
233
+ defaultPersonalServerUrl: personalServerUrl,
180
234
  waitForTransactionEvents: this.waitForTransactionEvents.bind(this),
181
- waitForOperation: this.waitForOperation.bind(this)
235
+ waitForOperation: this.waitForOperation.bind(this),
236
+ operationStore: this.operationStore
182
237
  };
183
238
  this.permissions = new PermissionsController(sharedContext);
184
239
  this.data = new DataController(sharedContext);
@@ -202,7 +257,7 @@ class VanaCore {
202
257
  validateStorageRequired() {
203
258
  if (!this.hasRequiredStorage) {
204
259
  throw new InvalidConfigurationError(
205
- "Storage configuration is required for this operation. Please configure storage providers in VanaConfig.storage, provide a relayerCallbacks.storeGrantFile implementation, or pass pre-stored URLs to avoid this dependency. \n\nFor better type safety, consider using VanaCoreFactory.createWithStorage() with VanaConfigWithStorage to catch this error at compile time."
260
+ "Storage configuration is required for this operation. Please configure storage providers in VanaConfig.storage, provide a relayer configuration, or pass pre-stored URLs to avoid this dependency. \n\nFor better type safety, consider using VanaCoreFactory.createWithStorage() with VanaConfigWithStorage to catch this error at compile time."
206
261
  );
207
262
  }
208
263
  }
@@ -251,13 +306,6 @@ class VanaCore {
251
306
  if (!config) {
252
307
  throw new InvalidConfigurationError("Configuration object is required");
253
308
  }
254
- if (config.relayerCallbacks !== void 0) {
255
- if (typeof config.relayerCallbacks !== "object") {
256
- throw new InvalidConfigurationError(
257
- "relayerCallbacks must be an object"
258
- );
259
- }
260
- }
261
309
  if (config.storage?.providers) {
262
310
  if (typeof config.storage.providers !== "object") {
263
311
  throw new InvalidConfigurationError(
@@ -295,13 +343,13 @@ class VanaCore {
295
343
  }
296
344
  if (!isVanaChainId(config.walletClient.chain.id)) {
297
345
  throw new InvalidConfigurationError(
298
- `Unsupported chain ID: ${config.walletClient.chain.id}. Supported chains: 14800 (Moksha testnet), 1480 (Vana mainnet)`
346
+ `Unsupported chain ID: ${String(config.walletClient.chain.id)}. Supported chains: 14800 (Moksha testnet), 1480 (Vana mainnet)`
299
347
  );
300
348
  }
301
349
  } else if (isChainConfig(config)) {
302
350
  if (!isVanaChainId(config.chainId)) {
303
351
  throw new InvalidConfigurationError(
304
- `Unsupported chain ID: ${config.chainId}. Supported chains: 14800 (Moksha testnet), 1480 (Vana mainnet)`
352
+ `Unsupported chain ID: ${String(config.chainId)}. Supported chains: 14800 (Moksha testnet), 1480 (Vana mainnet)`
305
353
  );
306
354
  }
307
355
  if (config.rpcUrl) {
@@ -324,9 +372,26 @@ class VanaCore {
324
372
  );
325
373
  }
326
374
  }
375
+ } else if (isReadOnlyConfig(config)) {
376
+ if (!config.publicClient) {
377
+ throw new InvalidConfigurationError(
378
+ "publicClient is required for read-only configuration"
379
+ );
380
+ }
381
+ if (!config.address) {
382
+ throw new InvalidConfigurationError(
383
+ "address is required for read-only configuration"
384
+ );
385
+ }
386
+ } else if (isAddressOnlyConfig(config)) {
387
+ if (!config.address) {
388
+ throw new InvalidConfigurationError(
389
+ "address is required for address-only configuration"
390
+ );
391
+ }
327
392
  } else {
328
393
  throw new InvalidConfigurationError(
329
- "Configuration must be either WalletConfig or ChainConfig"
394
+ "Invalid configuration: must provide either walletClient, publicClient + address, or address alone"
330
395
  );
331
396
  }
332
397
  }
@@ -357,27 +422,24 @@ class VanaCore {
357
422
  return this.protocol.getChainName();
358
423
  }
359
424
  /**
360
- * Retrieves the user's wallet address from the connected client.
425
+ * The user's wallet address.
426
+ * In wallet mode, this always returns the current wallet account address.
427
+ * In read-only mode, this returns the static address provided during initialization.
361
428
  *
362
- * @returns A Promise that resolves to the user's Ethereum address
363
429
  * @example
364
430
  * ```typescript
365
- * const address = await vana.getUserAddress();
431
+ * const address = vana.userAddress;
366
432
  * console.log(`User address: ${address}`); // e.g., "User address: 0x742d35..."
367
433
  * ```
368
434
  */
369
- async getUserAddress() {
370
- if (!this.walletClient.account) {
371
- throw new Error("No wallet account connected");
372
- }
373
- const account = this.walletClient.account;
374
- if (typeof account === "string") {
375
- return account;
435
+ get userAddress() {
436
+ if (this.walletClient?.account) {
437
+ return extractAddress(this.walletClient.account);
376
438
  }
377
- if (typeof account === "object" && account.address) {
378
- return account.address;
439
+ if (this._staticUserAddress) {
440
+ return this._staticUserAddress;
379
441
  }
380
- throw new Error("Unable to determine wallet address");
442
+ throw new Error("No user address available");
381
443
  }
382
444
  /**
383
445
  * Retrieves comprehensive runtime configuration information.
@@ -394,8 +456,8 @@ class VanaCore {
394
456
  return {
395
457
  chainId: this.chainId,
396
458
  chainName: this.chainName,
397
- relayerCallbacks: this.relayerCallbacks,
398
- storageProviders: this.storageManager?.getStorageProviders() || [],
459
+ relayerConfig: this.relayerConfig,
460
+ storageProviders: this.storageManager?.getStorageProviders() ?? [],
399
461
  defaultStorageProvider: this.storageManager?.getDefaultStorageProvider()
400
462
  };
401
463
  }
@@ -624,7 +686,10 @@ class VanaCore {
624
686
  */
625
687
  async waitForTransactionEvents(transaction, options) {
626
688
  const { parseTransaction } = await import("./utils/parseTransactionPojo");
627
- const receipt = await this.waitForTransactionReceipt(transaction.hash, options);
689
+ const receipt = await this.waitForTransactionReceipt(
690
+ transaction.hash,
691
+ options
692
+ );
628
693
  const result = parseTransaction(transaction, receipt);
629
694
  return result;
630
695
  }
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core.ts"],"sourcesContent":["import type {\n VanaConfig,\n VanaConfigWithStorage,\n RuntimeConfig,\n VanaChainId,\n StorageRequiredMarker,\n} from \"./types\";\nimport {\n isWalletConfig,\n isChainConfig,\n isVanaChainId,\n hasStorageConfig,\n} from \"./types\";\nimport type {\n RelayerCallbacks,\n DownloadRelayerCallbacks,\n} from \"./types/config\";\nimport { InvalidConfigurationError } from \"./errors\";\nimport {\n PermissionsController,\n ControllerContext,\n} from \"./controllers/permissions\";\nimport { DataController } from \"./controllers/data\";\nimport { SchemaController } from \"./controllers/schemas\";\nimport { ServerController } from \"./controllers/server\";\nimport { ProtocolController } from \"./controllers/protocol\";\nimport { StorageManager, StorageProvider } from \"./storage\";\nimport { createWalletClient, createPublicClient, http } from \"viem\";\nimport { chains } from \"./config/chains\";\nimport { getChainConfig } from \"./chains\";\nimport type { VanaPlatformAdapter } from \"./platform/interface\";\nimport {\n encryptBlobWithSignedKey,\n decryptBlobWithSignedKey,\n} from \"./utils/encryption\";\n\n/**\n * Factory functions for creating VanaCore instances with proper type safety\n */\nexport class VanaCoreFactory {\n /**\n * Creates a VanaCore instance that enforces storage requirements at compile time.\n * Use this factory when you know you'll need storage-dependent operations.\n *\n * @param platform - The platform adapter for environment-specific operations\n * @param config - Configuration that includes required storage providers\n * @returns VanaCore instance with storage validation\n * @example\n * ```typescript\n * const vanaCore = VanaCoreFactory.createWithStorage(platformAdapter, {\n * walletClient: myWalletClient,\n * storage: {\n * providers: { ipfs: new IPFSStorage() },\n * defaultProvider: 'ipfs'\n * }\n * });\n * ```\n */\n static createWithStorage(\n platform: VanaPlatformAdapter,\n config: VanaConfigWithStorage,\n ): VanaCore & StorageRequiredMarker {\n const core = new VanaCore(platform, config);\n return core as VanaCore & StorageRequiredMarker;\n }\n\n /**\n * Creates a VanaCore instance without storage requirements.\n * Storage-dependent operations will fail at runtime if not configured.\n *\n * @param platform - The platform adapter for environment-specific operations\n * @param config - Basic configuration without required storage\n * @returns VanaCore instance\n * @example\n * ```typescript\n * const vanaCore = VanaCoreFactory.create(platformAdapter, {\n * walletClient: myWalletClient\n * });\n * ```\n */\n static create(platform: VanaPlatformAdapter, config: VanaConfig): VanaCore {\n return new VanaCore(platform, config);\n }\n}\n\n/**\n * Provides the core SDK functionality for interacting with the Vana network.\n *\n * @remarks\n * This environment-agnostic class contains all SDK logic and accepts a platform\n * adapter to handle environment-specific operations. It initializes all controllers\n * and manages shared context between them, providing a unified interface for\n * data management, permissions, smart contracts, and storage operations.\n *\n * The class uses TypeScript overloading to enforce storage requirements at compile time.\n * Methods that require storage will throw `InvalidConfigurationError` at runtime if\n * storage providers are not configured, implementing a fail-fast approach to prevent\n * errors during expensive operations.\n *\n * **Core Architecture:**\n * - **Controllers**: Specialized modules for different Vana features (data, permissions, etc.)\n * - **Platform Adapters**: Environment-specific implementations (browser vs Node.js)\n * - **Storage Managers**: Abstraction layer for multiple storage providers\n * - **Context Sharing**: Unified configuration and services across all controllers\n *\n * For public usage, use the platform-specific factory functions:\n * - Browser: `import { Vana } from '@opendatalabs/vana-sdk/browser'`\n * - Node.js: `import { Vana } from '@opendatalabs/vana-sdk/node'`\n *\n * @example\n * ```typescript\n * // Direct instantiation (advanced usage)\n * import { VanaCore, BrowserPlatformAdapter } from '@opendatalabs/vana-sdk/browser';\n *\n * const core = new VanaCore(new BrowserPlatformAdapter(), {\n * walletClient: myWalletClient,\n * storage: {\n * providers: { ipfs: new IPFSStorage() },\n * defaultProvider: 'ipfs'\n * }\n * });\n *\n * // Access all controllers\n * const files = await core.data.getUserFiles();\n * const permissions = await core.permissions.grant({\n * grantee: '0x742d35...',\n * operation: 'read'\n * });\n * ```\n * @category Core SDK\n */\nexport class VanaCore {\n /** Manages gasless data access permissions and trusted server registry. */\n public readonly permissions: PermissionsController;\n\n /** Handles user data file operations. */\n public readonly data: DataController;\n\n /** Manages data schemas and refiners. */\n public readonly schemas: SchemaController;\n\n /** Provides personal server setup and trusted server interactions. */\n public readonly server: ServerController;\n\n /** Offers low-level access to Vana protocol smart contracts. */\n public readonly protocol: ProtocolController;\n\n /** Handles environment-specific operations like encryption and file systems. */\n protected platform: VanaPlatformAdapter;\n\n private readonly relayerCallbacks?: RelayerCallbacks;\n private readonly downloadRelayer?: DownloadRelayerCallbacks;\n private readonly storageManager?: StorageManager;\n private readonly hasRequiredStorage: boolean;\n private readonly ipfsGateways?: string[];\n private readonly defaultPersonalServerUrl?: string;\n private readonly publicClient: import(\"viem\").PublicClient;\n private readonly walletClient: import(\"viem\").WalletClient;\n\n /**\n * Initializes a new VanaCore client instance with the provided configuration.\n *\n * @remarks\n * The constructor validates the configuration, initializes storage providers if configured,\n * creates wallet and public clients, and sets up all SDK controllers with shared context.\n *\n * IMPORTANT: This constructor will validate storage requirements at runtime to fail fast.\n * Methods that require storage will throw runtime errors if storage is not configured.\n *\n * @param platform - The platform adapter for environment-specific operations\n * @param config - The configuration object specifying wallet or chain settings\n * @throws {InvalidConfigurationError} When the configuration is invalid or incomplete\n * @example\n * ```typescript\n * // Direct instantiation (consider using factory methods instead)\n * const vanaCore = new VanaCore(platformAdapter, {\n * walletClient: myWalletClient,\n * });\n * ```\n */\n constructor(platform: VanaPlatformAdapter, config: VanaConfig) {\n // Store the platform adapter\n this.platform = platform;\n\n // Validate configuration\n this.validateConfig(config);\n\n // Store relayer callbacks if provided\n this.relayerCallbacks = config.relayerCallbacks;\n\n // Store download relayer if provided\n this.downloadRelayer = config.downloadRelayer;\n\n // Store IPFS gateways if provided\n this.ipfsGateways = config.ipfsGateways;\n\n // Store default personal server URL if provided\n this.defaultPersonalServerUrl = config.defaultPersonalServerUrl;\n\n // Check if storage is properly configured\n this.hasRequiredStorage = hasStorageConfig(config);\n\n // Initialize storage manager if storage providers are provided\n if (config.storage?.providers) {\n this.storageManager = new StorageManager();\n\n // Register all provided storage providers\n for (const [name, provider] of Object.entries(config.storage.providers)) {\n const isDefault = name === config.storage.defaultProvider;\n this.storageManager.register(\n name,\n provider as StorageProvider,\n isDefault,\n );\n }\n\n // If no default was explicitly set but providers exist, use the first one\n if (\n !config.storage.defaultProvider &&\n Object.keys(config.storage.providers).length > 0\n ) {\n const firstProviderName = Object.keys(config.storage.providers)[0];\n this.storageManager.setDefaultProvider(firstProviderName);\n }\n }\n\n // Create wallet client based on configuration type\n let walletClient;\n\n if (isWalletConfig(config)) {\n // Direct wallet client configuration\n walletClient = config.walletClient;\n } else if (isChainConfig(config)) {\n // Chain configuration - create wallet client\n if (!config.account) {\n throw new InvalidConfigurationError(\n \"Account is required when using ChainConfig\",\n );\n }\n\n const chain = chains[config.chainId];\n if (!chain) {\n throw new InvalidConfigurationError(\n `Unsupported chain ID: ${config.chainId}`,\n );\n }\n\n walletClient = createWalletClient({\n chain,\n transport: http(config.rpcUrl || chain.rpcUrls.default.http[0]),\n account: config.account,\n });\n } else {\n throw new InvalidConfigurationError(\n \"Invalid configuration: must be either WalletConfig or ChainConfig\",\n );\n }\n\n // Create public client for reading contracts\n const publicClient = createPublicClient({\n chain: walletClient.chain,\n transport: http(),\n });\n\n // Store the clients for later use\n this.publicClient = publicClient;\n this.walletClient = walletClient;\n\n // Get default subgraph URL if not provided in config\n const chainConfig = getChainConfig(walletClient.chain.id);\n const subgraphUrl = config.subgraphUrl || chainConfig?.subgraphUrl;\n\n // Create shared context for all controllers, now including the platform adapter\n const sharedContext: ControllerContext = {\n walletClient,\n publicClient,\n applicationClient: walletClient, // Using same wallet for now\n relayerCallbacks: this.relayerCallbacks,\n downloadRelayer: this.downloadRelayer,\n storageManager: this.storageManager,\n subgraphUrl,\n platform: this.platform, // Pass the platform adapter to controllers\n validateStorageRequired: this.validateStorageRequired.bind(this),\n hasStorage: this.hasStorage.bind(this),\n ipfsGateways: this.ipfsGateways,\n defaultPersonalServerUrl: this.defaultPersonalServerUrl,\n waitForTransactionEvents: this.waitForTransactionEvents.bind(this),\n waitForOperation: this.waitForOperation.bind(this),\n };\n\n // Initialize controllers\n this.permissions = new PermissionsController(sharedContext);\n this.data = new DataController(sharedContext);\n this.schemas = new SchemaController(sharedContext);\n this.server = new ServerController(sharedContext);\n this.protocol = new ProtocolController(sharedContext);\n }\n\n /**\n * Validates that storage is available for storage-dependent operations.\n * This method enforces the fail-fast principle by checking storage availability\n * at method call time rather than during expensive operations.\n *\n * @throws {InvalidConfigurationError} When storage is required but not configured\n * @example\n * ```typescript\n * // This will throw if storage is not configured\n * vana.validateStorageRequired();\n * await vana.data.uploadFile(file); // Safe to proceed\n * ```\n */\n public validateStorageRequired(): void {\n if (!this.hasRequiredStorage) {\n throw new InvalidConfigurationError(\n \"Storage configuration is required for this operation. \" +\n \"Please configure storage providers in VanaConfig.storage, \" +\n \"provide a relayerCallbacks.storeGrantFile implementation, \" +\n \"or pass pre-stored URLs to avoid this dependency. \" +\n \"\\n\\nFor better type safety, consider using VanaCoreFactory.createWithStorage() \" +\n \"with VanaConfigWithStorage to catch this error at compile time.\",\n );\n }\n }\n\n /**\n * Checks whether storage is configured without throwing an error.\n *\n * @returns True if storage is properly configured\n * @example\n * ```typescript\n * if (vana.hasStorage()) {\n * await vana.data.uploadFile(file);\n * } else {\n * console.warn('Storage not configured - using pre-stored URLs only');\n * }\n * ```\n */\n public hasStorage(): boolean {\n return this.hasRequiredStorage;\n }\n\n /**\n * Type guard to check if this instance has storage enabled at compile time.\n * Use this when you need TypeScript to understand that storage is available.\n *\n * @returns True if storage is configured, with type narrowing\n * @example\n * ```typescript\n * if (vana.isStorageEnabled()) {\n * // TypeScript knows storage is available here\n * await vana.data.uploadFile(file);\n * }\n * ```\n */\n public isStorageEnabled(): this is VanaCore & StorageRequiredMarker {\n return this.hasRequiredStorage;\n }\n\n /**\n * Validates the provided configuration object against all requirements.\n *\n * @remarks\n * This method performs comprehensive validation of wallet client configuration,\n * chain configuration, storage providers, and relayer callbacks.\n * @param config - The configuration object to validate\n * @throws {InvalidConfigurationError} When any configuration parameter is invalid\n */\n private validateConfig(config: VanaConfig): void {\n if (!config) {\n throw new InvalidConfigurationError(\"Configuration object is required\");\n }\n\n // Validate relayerCallbacks if provided\n if (config.relayerCallbacks !== undefined) {\n if (typeof config.relayerCallbacks !== \"object\") {\n throw new InvalidConfigurationError(\n \"relayerCallbacks must be an object\",\n );\n }\n }\n\n // Validate storage configuration if provided\n if (config.storage?.providers) {\n if (typeof config.storage.providers !== \"object\") {\n throw new InvalidConfigurationError(\n \"storage.providers must be an object\",\n );\n }\n\n // Validate that all providers have required methods\n for (const [name, provider] of Object.entries(config.storage.providers)) {\n if (!provider || typeof provider !== \"object\") {\n throw new InvalidConfigurationError(\n `Storage provider '${name}' must be a valid StorageProvider object`,\n );\n }\n }\n\n // Validate default provider if specified\n if (config.storage.defaultProvider) {\n if (!(config.storage.defaultProvider in config.storage.providers)) {\n throw new InvalidConfigurationError(\n `Default storage provider '${config.storage.defaultProvider}' not found in providers`,\n );\n }\n }\n }\n\n if (isWalletConfig(config)) {\n // Validate WalletConfig\n if (!config.walletClient) {\n throw new InvalidConfigurationError(\"walletClient is required\");\n }\n\n // Validate that walletClient is actually a WalletClient\n if (\n typeof config.walletClient !== \"object\" ||\n !config.walletClient.signTypedData\n ) {\n throw new InvalidConfigurationError(\n \"walletClient must be a valid viem WalletClient\",\n );\n }\n\n // Validate that wallet client has a chain\n if (!config.walletClient.chain) {\n throw new InvalidConfigurationError(\n \"walletClient must have a chain configured\",\n );\n }\n\n // Validate that the chain is supported\n if (!isVanaChainId(config.walletClient.chain.id)) {\n throw new InvalidConfigurationError(\n `Unsupported chain ID: ${config.walletClient.chain.id}. Supported chains: 14800 (Moksha testnet), 1480 (Vana mainnet)`,\n );\n }\n } else if (isChainConfig(config)) {\n // Validate ChainConfig\n if (!isVanaChainId(config.chainId)) {\n throw new InvalidConfigurationError(\n `Unsupported chain ID: ${config.chainId}. Supported chains: 14800 (Moksha testnet), 1480 (Vana mainnet)`,\n );\n }\n\n // Validate rpcUrl if provided\n if (config.rpcUrl) {\n if (typeof config.rpcUrl !== \"string\") {\n throw new InvalidConfigurationError(\"rpcUrl must be a string\");\n }\n\n if (config.rpcUrl.trim() === \"\") {\n throw new InvalidConfigurationError(\"rpcUrl cannot be empty\");\n }\n\n // Basic URL validation for RPC URL\n try {\n new URL(config.rpcUrl);\n } catch {\n throw new InvalidConfigurationError(\"rpcUrl must be a valid URL\");\n }\n }\n\n // Account is optional for ChainConfig, but if provided, validate it\n if (config.account) {\n if (typeof config.account !== \"object\" || !config.account.address) {\n throw new InvalidConfigurationError(\n \"account must be a valid viem Account object\",\n );\n }\n }\n } else {\n throw new InvalidConfigurationError(\n \"Configuration must be either WalletConfig or ChainConfig\",\n );\n }\n }\n\n /**\n * Gets the current chain ID from the wallet client.\n *\n * @returns The numeric chain ID of the connected network\n * @example\n * ```typescript\n * const chainId = vana.chainId;\n * console.log(`Connected to chain: ${chainId}`); // e.g., \"Connected to chain: 14800\"\n * ```\n */\n get chainId(): number {\n return this.protocol.getChainId();\n }\n\n /**\n * Gets the current chain name from the wallet client.\n *\n * @returns The human-readable name of the connected network\n * @example\n * ```typescript\n * const chainName = vana.chainName;\n * console.log(`Connected to: ${chainName}`); // e.g., \"Connected to: Moksha Testnet\"\n * ```\n */\n get chainName(): string {\n return this.protocol.getChainName();\n }\n\n /**\n * Retrieves the user's wallet address from the connected client.\n *\n * @returns A Promise that resolves to the user's Ethereum address\n * @example\n * ```typescript\n * const address = await vana.getUserAddress();\n * console.log(`User address: ${address}`); // e.g., \"User address: 0x742d35...\"\n * ```\n */\n async getUserAddress(): Promise<import(\"viem\").Address> {\n if (!this.walletClient.account) {\n throw new Error(\"No wallet account connected\");\n }\n\n const account = this.walletClient.account;\n\n // Return the account address directly if available\n if (typeof account === \"string\") {\n return account as import(\"viem\").Address;\n }\n\n // If account is an object, get the address property\n if (typeof account === \"object\" && account.address) {\n return account.address;\n }\n\n throw new Error(\"Unable to determine wallet address\");\n }\n\n /**\n * Retrieves comprehensive runtime configuration information.\n *\n * @returns The current runtime configuration including chain, storage, and relayer settings\n * @example\n * ```typescript\n * const config = vana.getConfig();\n * console.log(`Chain: ${config.chainName} (${config.chainId})`);\n * console.log(`Storage providers: ${config.storageProviders.join(\", \")}`);\n * ```\n */\n getConfig(): RuntimeConfig {\n return {\n chainId: this.chainId as VanaChainId,\n chainName: this.chainName,\n relayerCallbacks: this.relayerCallbacks,\n storageProviders: this.storageManager?.getStorageProviders() || [],\n defaultStorageProvider: this.storageManager?.getDefaultStorageProvider(),\n };\n }\n\n /**\n * Sets the platform adapter for environment-specific operations.\n * This is useful for testing and advanced use cases where you need\n * to override the default platform detection.\n *\n * @param adapter - The platform adapter to use\n * @example\n * ```typescript\n * // For testing with a mock adapter\n * const mockAdapter = new MockPlatformAdapter();\n * vana.setPlatformAdapter(mockAdapter);\n *\n * // For advanced use cases with custom adapters\n * const customAdapter = new CustomPlatformAdapter();\n * vana.setPlatformAdapter(customAdapter);\n * ```\n */\n setPlatformAdapter(adapter: VanaPlatformAdapter): void {\n this.platform = adapter;\n\n // Note: Controllers will use the new platform adapter on their next operation\n // since they access this.platform from the shared context\n }\n\n /**\n * Gets the current platform adapter.\n * This is useful for advanced use cases where you need to access\n * the platform adapter directly.\n *\n * @returns The current platform adapter\n * @example\n * ```typescript\n * const adapter = vana.getPlatformAdapter();\n * const encrypted = await adapter.encrypt(data, key);\n * ```\n */\n getPlatformAdapter(): VanaPlatformAdapter {\n return this.platform;\n }\n\n /**\n * Encrypts data using the Vana protocol standard encryption.\n *\n * @remarks\n * This method implements the Vana network's standard encryption protocol using\n * platform-appropriate cryptographic libraries. It automatically handles different\n * input types (string or Blob) and produces encrypted output suitable for secure\n * storage or transmission. The encryption is compatible with the network's\n * decryption protocols and can be decrypted by authorized parties.\n *\n * @param data - The data to encrypt (string or Blob)\n * @param key - The encryption key (typically generated via `generateEncryptionKey`)\n * @returns The encrypted data as a Blob\n * @throws {Error} When encryption fails due to invalid key or data format\n * @example\n * ```typescript\n * import { generateEncryptionKey } from '@opendatalabs/vana-sdk/node';\n *\n * // Generate encryption key from wallet signature\n * const encryptionKey = await generateEncryptionKey(vana.walletClient);\n *\n * // Encrypt string data\n * const sensitiveData = \"User's private information\";\n * const encrypted = await vana.encryptBlob(sensitiveData, encryptionKey);\n *\n * // Encrypt file data\n * const fileBlob = new Blob([fileContent], { type: 'application/json' });\n * const encryptedFile = await vana.encryptBlob(fileBlob, encryptionKey);\n *\n * // Store encrypted data safely\n * await storageProvider.upload(encrypted, 'encrypted-data.bin');\n * ```\n */\n public async encryptBlob(data: string | Blob, key: string): Promise<Blob> {\n return encryptBlobWithSignedKey(data, key, this.platform);\n }\n\n /**\n * Decrypts data that was encrypted using the Vana protocol.\n *\n * @remarks\n * This method decrypts data that was previously encrypted using the Vana network's\n * standard encryption protocol. It requires the same wallet signature that was used\n * for encryption and automatically uses the appropriate platform adapter for\n * cryptographic operations. The decrypted output maintains the original data format.\n *\n * @param encryptedData - The encrypted data (string or Blob)\n * @param walletSignature - The wallet signature used as decryption key\n * @returns The decrypted data as a Blob\n * @throws {Error} When decryption fails due to invalid signature or corrupted data\n * @example\n * ```typescript\n * import { generateEncryptionKey } from '@opendatalabs/vana-sdk/node';\n *\n * // Retrieve encrypted data from storage\n * const encryptedBlob = await storageProvider.download('encrypted-data.bin');\n *\n * // Generate the same key used for encryption\n * const decryptionKey = await generateEncryptionKey(vana.walletClient);\n *\n * // Decrypt the data\n * const decrypted = await vana.decryptBlob(encryptedBlob, decryptionKey);\n *\n * // Convert back to original format\n * const originalText = await decrypted.text();\n * const originalJson = JSON.parse(originalText);\n *\n * console.log('Decrypted data:', originalJson);\n * ```\n *\n * @example\n * ```typescript\n * // Decrypt file downloaded from Vana network\n * const userFiles = await vana.data.getUserFiles();\n * const file = userFiles[0];\n *\n * // Download encrypted content\n * const encrypted = await fetch(file.url).then(r => r.blob());\n *\n * // Decrypt with user's key\n * const decryptionKey = await generateEncryptionKey(vana.walletClient);\n * const decrypted = await vana.decryptBlob(encrypted, decryptionKey);\n *\n * // Process original data\n * const fileContent = await decrypted.arrayBuffer();\n * ```\n */\n public async decryptBlob(\n encryptedData: string | Blob,\n walletSignature: string,\n ): Promise<Blob> {\n return decryptBlobWithSignedKey(\n encryptedData,\n walletSignature,\n this.platform,\n );\n }\n\n /**\n * Waits for an operation to complete and returns the final result.\n *\n * @remarks\n * This method polls the operation status at regular intervals until it\n * reaches a terminal state (succeeded, failed, or canceled). Supports\n * ergonomic overloads to accept either an Operation object or just the ID.\n *\n * @param opOrId - Either an Operation object or operation ID string\n * @param options - Optional polling configuration\n * @returns The completed operation with result or error\n * @throws {PersonalServerError} When the operation fails or times out\n * @example\n * ```typescript\n * // Using operation object\n * const operation = await vana.server.createOperation({ permissionId: 123 });\n * const completed = await vana.waitForOperation(operation);\n *\n * // Using just the ID\n * const completed = await vana.waitForOperation(\"op_abc123\");\n *\n * // With custom timeout\n * const completed = await vana.waitForOperation(operation, {\n * timeout: 60000,\n * pollingInterval: 1000\n * });\n * ```\n */\n public async waitForOperation<T = unknown>(\n opOrId: import(\"./types/operations\").Operation<T> | string,\n options?: import(\"./types/operations\").PollingOptions,\n ): Promise<import(\"./types/operations\").Operation<T>> {\n return this.server.waitForOperation(opOrId, options);\n }\n\n /**\n * Waits for a transaction to be confirmed and returns the receipt.\n *\n * @remarks\n * This method polls for transaction confirmation on the blockchain.\n * Supports ergonomic overloads to accept either a transaction result\n * object or just the hash string.\n *\n * @param hashOrObj - Either a TransactionResult object or hash string\n * @param options - Optional wait configuration\n * @returns The transaction receipt with logs and status\n * @example\n * ```typescript\n * // Using transaction result object\n * const tx = await vana.permissions.grant(params);\n * const receipt = await vana.waitForTransactionReceipt(tx);\n *\n * // Using just the hash\n * const receipt = await vana.waitForTransactionReceipt(\"0x123...\");\n *\n * // With custom confirmations\n * const receipt = await vana.waitForTransactionReceipt(tx, {\n * confirmations: 3,\n * timeout: 60000\n * });\n * ```\n */\n public async waitForTransactionReceipt(\n hashOrObj:\n | import(\"./types/operations\").TransactionResult\n | { hash: import(\"viem\").Hash }\n | import(\"viem\").Hash,\n options?: import(\"./types/operations\").TransactionWaitOptions,\n ): Promise<import(\"viem\").TransactionReceipt> {\n const hash = typeof hashOrObj === \"string\" ? hashOrObj : hashOrObj.hash;\n\n return this.publicClient.waitForTransactionReceipt({\n hash,\n confirmations: options?.confirmations,\n pollingInterval: options?.pollingInterval,\n timeout: options?.timeout,\n });\n }\n\n /**\n * Waits for transaction confirmation and extracts blockchain event data.\n *\n * @remarks\n * This method leverages the context-carrying POJO architecture. When passed a\n * `TransactionResult` with an `operation` field, it automatically parses the\n * correct events from the transaction logs. For legacy compatibility, it accepts\n * raw hashes but will not parse events without operation context.\n *\n * @param transaction - Transaction result with operation context\n * @param options - Optional confirmation and timeout settings\n * @returns Parsed event data specific to the transaction's operation type\n * @throws {NetworkError} When transaction confirmation times out\n * @throws {BlockchainError} When expected events are not found in the transaction\n *\n * @example\n * ```typescript\n * // Recommended: Pass the transaction result for automatic event parsing\n * const tx = await vana.permissions.submitAddServerFilesAndPermissions(params);\n * const events = await vana.waitForTransactionEvents<{ permissionId: bigint }>(tx);\n * console.log(`Permission ID: ${events.permissionId}`);\n *\n * // Legacy: Raw hash without event parsing (returns receipt)\n * const receipt = await vana.waitForTransactionEvents(\"0x123...\");\n * ```\n *\n * @see For understanding transaction flows, visit https://docs.vana.org/docs/transactions\n */\n public async waitForTransactionEvents<\n C extends import(\"./generated/event-types\").Contract,\n F extends import(\"./generated/event-types\").Fn<C>\n >(\n transaction: import(\"./types/operations\").TransactionResult<C, F>,\n options?: import(\"./types/operations\").TransactionWaitOptions,\n ): Promise<import(\"./generated/event-types\").TypedTransactionResult<C, F>> {\n // Import the POJO-based parser\n const { parseTransaction } = await import(\"./utils/parseTransactionPojo\");\n \n // Wait for the transaction to be mined\n const receipt = await this.waitForTransactionReceipt(transaction.hash, options);\n \n // Parse events using our heuristic-free POJO system\n const result = parseTransaction(transaction, receipt);\n \n // Return the strongly-typed result\n // TypeScript knows exactly what events are possible!\n return result;\n }\n}\n"],"mappings":";;;AAOA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAKP,SAAS,iCAAiC;AAC1C;AAAA,EACE;AAAA,OAEK;AACP,SAAS,sBAAsB;AAC/B,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS,0BAA0B;AACnC,SAAS,sBAAuC;AAChD,SAAS,oBAAoB,oBAAoB,YAAY;AAC7D,SAAS,cAAc;AACvB,SAAS,sBAAsB;AAE/B;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAKA,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmB3B,OAAO,kBACL,UACA,QACkC;AAClC,UAAM,OAAO,IAAI,SAAS,UAAU,MAAM;AAC1C,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,OAAO,OAAO,UAA+B,QAA8B;AACzE,WAAO,IAAI,SAAS,UAAU,MAAM;AAAA,EACtC;AACF;AAgDO,MAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiDpB,YAAY,UAA+B,QAAoB;AA/C/D;AAAA,wBAAgB;AAGhB;AAAA,wBAAgB;AAGhB;AAAA,wBAAgB;AAGhB;AAAA,wBAAgB;AAGhB;AAAA,wBAAgB;AAGhB;AAAA,wBAAU;AAEV,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB;AACjB,wBAAiB;AAyBf,SAAK,WAAW;AAGhB,SAAK,eAAe,MAAM;AAG1B,SAAK,mBAAmB,OAAO;AAG/B,SAAK,kBAAkB,OAAO;AAG9B,SAAK,eAAe,OAAO;AAG3B,SAAK,2BAA2B,OAAO;AAGvC,SAAK,qBAAqB,iBAAiB,MAAM;AAGjD,QAAI,OAAO,SAAS,WAAW;AAC7B,WAAK,iBAAiB,IAAI,eAAe;AAGzC,iBAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,OAAO,QAAQ,SAAS,GAAG;AACvE,cAAM,YAAY,SAAS,OAAO,QAAQ;AAC1C,aAAK,eAAe;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAGA,UACE,CAAC,OAAO,QAAQ,mBAChB,OAAO,KAAK,OAAO,QAAQ,SAAS,EAAE,SAAS,GAC/C;AACA,cAAM,oBAAoB,OAAO,KAAK,OAAO,QAAQ,SAAS,EAAE,CAAC;AACjE,aAAK,eAAe,mBAAmB,iBAAiB;AAAA,MAC1D;AAAA,IACF;AAGA,QAAI;AAEJ,QAAI,eAAe,MAAM,GAAG;AAE1B,qBAAe,OAAO;AAAA,IACxB,WAAW,cAAc,MAAM,GAAG;AAEhC,UAAI,CAAC,OAAO,SAAS;AACnB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,YAAM,QAAQ,OAAO,OAAO,OAAO;AACnC,UAAI,CAAC,OAAO;AACV,cAAM,IAAI;AAAA,UACR,yBAAyB,OAAO,OAAO;AAAA,QACzC;AAAA,MACF;AAEA,qBAAe,mBAAmB;AAAA,QAChC;AAAA,QACA,WAAW,KAAK,OAAO,UAAU,MAAM,QAAQ,QAAQ,KAAK,CAAC,CAAC;AAAA,QAC9D,SAAS,OAAO;AAAA,MAClB,CAAC;AAAA,IACH,OAAO;AACL,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAGA,UAAM,eAAe,mBAAmB;AAAA,MACtC,OAAO,aAAa;AAAA,MACpB,WAAW,KAAK;AAAA,IAClB,CAAC;AAGD,SAAK,eAAe;AACpB,SAAK,eAAe;AAGpB,UAAM,cAAc,eAAe,aAAa,MAAM,EAAE;AACxD,UAAM,cAAc,OAAO,eAAe,aAAa;AAGvD,UAAM,gBAAmC;AAAA,MACvC;AAAA,MACA;AAAA,MACA,mBAAmB;AAAA;AAAA,MACnB,kBAAkB,KAAK;AAAA,MACvB,iBAAiB,KAAK;AAAA,MACtB,gBAAgB,KAAK;AAAA,MACrB;AAAA,MACA,UAAU,KAAK;AAAA;AAAA,MACf,yBAAyB,KAAK,wBAAwB,KAAK,IAAI;AAAA,MAC/D,YAAY,KAAK,WAAW,KAAK,IAAI;AAAA,MACrC,cAAc,KAAK;AAAA,MACnB,0BAA0B,KAAK;AAAA,MAC/B,0BAA0B,KAAK,yBAAyB,KAAK,IAAI;AAAA,MACjE,kBAAkB,KAAK,iBAAiB,KAAK,IAAI;AAAA,IACnD;AAGA,SAAK,cAAc,IAAI,sBAAsB,aAAa;AAC1D,SAAK,OAAO,IAAI,eAAe,aAAa;AAC5C,SAAK,UAAU,IAAI,iBAAiB,aAAa;AACjD,SAAK,SAAS,IAAI,iBAAiB,aAAa;AAChD,SAAK,WAAW,IAAI,mBAAmB,aAAa;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeO,0BAAgC;AACrC,QAAI,CAAC,KAAK,oBAAoB;AAC5B,YAAM,IAAI;AAAA,QACR;AAAA,MAMF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeO,aAAsB;AAC3B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeO,mBAA6D;AAClE,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWQ,eAAe,QAA0B;AAC/C,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,0BAA0B,kCAAkC;AAAA,IACxE;AAGA,QAAI,OAAO,qBAAqB,QAAW;AACzC,UAAI,OAAO,OAAO,qBAAqB,UAAU;AAC/C,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,QAAI,OAAO,SAAS,WAAW;AAC7B,UAAI,OAAO,OAAO,QAAQ,cAAc,UAAU;AAChD,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAGA,iBAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,OAAO,QAAQ,SAAS,GAAG;AACvE,YAAI,CAAC,YAAY,OAAO,aAAa,UAAU;AAC7C,gBAAM,IAAI;AAAA,YACR,qBAAqB,IAAI;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAGA,UAAI,OAAO,QAAQ,iBAAiB;AAClC,YAAI,EAAE,OAAO,QAAQ,mBAAmB,OAAO,QAAQ,YAAY;AACjE,gBAAM,IAAI;AAAA,YACR,6BAA6B,OAAO,QAAQ,eAAe;AAAA,UAC7D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,eAAe,MAAM,GAAG;AAE1B,UAAI,CAAC,OAAO,cAAc;AACxB,cAAM,IAAI,0BAA0B,0BAA0B;AAAA,MAChE;AAGA,UACE,OAAO,OAAO,iBAAiB,YAC/B,CAAC,OAAO,aAAa,eACrB;AACA,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAGA,UAAI,CAAC,OAAO,aAAa,OAAO;AAC9B,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAGA,UAAI,CAAC,cAAc,OAAO,aAAa,MAAM,EAAE,GAAG;AAChD,cAAM,IAAI;AAAA,UACR,yBAAyB,OAAO,aAAa,MAAM,EAAE;AAAA,QACvD;AAAA,MACF;AAAA,IACF,WAAW,cAAc,MAAM,GAAG;AAEhC,UAAI,CAAC,cAAc,OAAO,OAAO,GAAG;AAClC,cAAM,IAAI;AAAA,UACR,yBAAyB,OAAO,OAAO;AAAA,QACzC;AAAA,MACF;AAGA,UAAI,OAAO,QAAQ;AACjB,YAAI,OAAO,OAAO,WAAW,UAAU;AACrC,gBAAM,IAAI,0BAA0B,yBAAyB;AAAA,QAC/D;AAEA,YAAI,OAAO,OAAO,KAAK,MAAM,IAAI;AAC/B,gBAAM,IAAI,0BAA0B,wBAAwB;AAAA,QAC9D;AAGA,YAAI;AACF,cAAI,IAAI,OAAO,MAAM;AAAA,QACvB,QAAQ;AACN,gBAAM,IAAI,0BAA0B,4BAA4B;AAAA,QAClE;AAAA,MACF;AAGA,UAAI,OAAO,SAAS;AAClB,YAAI,OAAO,OAAO,YAAY,YAAY,CAAC,OAAO,QAAQ,SAAS;AACjE,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAI,UAAkB;AACpB,WAAO,KAAK,SAAS,WAAW;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAI,YAAoB;AACtB,WAAO,KAAK,SAAS,aAAa;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,iBAAkD;AACtD,QAAI,CAAC,KAAK,aAAa,SAAS;AAC9B,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,UAAM,UAAU,KAAK,aAAa;AAGlC,QAAI,OAAO,YAAY,UAAU;AAC/B,aAAO;AAAA,IACT;AAGA,QAAI,OAAO,YAAY,YAAY,QAAQ,SAAS;AAClD,aAAO,QAAQ;AAAA,IACjB;AAEA,UAAM,IAAI,MAAM,oCAAoC;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,YAA2B;AACzB,WAAO;AAAA,MACL,SAAS,KAAK;AAAA,MACd,WAAW,KAAK;AAAA,MAChB,kBAAkB,KAAK;AAAA,MACvB,kBAAkB,KAAK,gBAAgB,oBAAoB,KAAK,CAAC;AAAA,MACjE,wBAAwB,KAAK,gBAAgB,0BAA0B;AAAA,IACzE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,mBAAmB,SAAoC;AACrD,SAAK,WAAW;AAAA,EAIlB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,qBAA0C;AACxC,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCA,MAAa,YAAY,MAAqB,KAA4B;AACxE,WAAO,yBAAyB,MAAM,KAAK,KAAK,QAAQ;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoDA,MAAa,YACX,eACA,iBACe;AACf,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,KAAK;AAAA,IACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BA,MAAa,iBACX,QACA,SACoD;AACpD,WAAO,KAAK,OAAO,iBAAiB,QAAQ,OAAO;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BA,MAAa,0BACX,WAIA,SAC4C;AAC5C,UAAM,OAAO,OAAO,cAAc,WAAW,YAAY,UAAU;AAEnE,WAAO,KAAK,aAAa,0BAA0B;AAAA,MACjD;AAAA,MACA,eAAe,SAAS;AAAA,MACxB,iBAAiB,SAAS;AAAA,MAC1B,SAAS,SAAS;AAAA,IACpB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BA,MAAa,yBAIX,aACA,SACyE;AAEzE,UAAM,EAAE,iBAAiB,IAAI,MAAM,OAAO,8BAA8B;AAGxE,UAAM,UAAU,MAAM,KAAK,0BAA0B,YAAY,MAAM,OAAO;AAG9E,UAAM,SAAS,iBAAiB,aAAa,OAAO;AAIpD,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/core.ts"],"sourcesContent":["import type {\n VanaConfig,\n VanaConfigWithStorage,\n RuntimeConfig,\n VanaChainId,\n StorageRequiredMarker,\n} from \"./types\";\nimport {\n isWalletConfig,\n isChainConfig,\n isReadOnlyConfig,\n isAddressOnlyConfig,\n isVanaChainId,\n hasStorageConfig,\n} from \"./types\";\nimport type { DownloadRelayerCallbacks } from \"./types/config\";\nimport type {\n RelayerConfig,\n UnifiedRelayerRequest,\n UnifiedRelayerResponse,\n} from \"./types/relayer\";\nimport { InvalidConfigurationError } from \"./errors\";\nimport type { ControllerContext } from \"./controllers/permissions\";\nimport { PermissionsController } from \"./controllers/permissions\";\nimport { DataController } from \"./controllers/data\";\nimport { SchemaController } from \"./controllers/schemas\";\nimport { ServerController } from \"./controllers/server\";\nimport { ProtocolController } from \"./controllers/protocol\";\nimport { StorageManager } from \"./storage\";\nimport { createWalletClient, createPublicClient, http } from \"viem\";\nimport type {\n PublicClient,\n WalletClient,\n Address,\n Hash,\n TransactionReceipt,\n Chain,\n} from \"viem\";\nimport { extractAddress } from \"./utils/wallet\";\nimport type {\n Operation,\n PollingOptions,\n TransactionResult,\n TransactionWaitOptions,\n IOperationStore,\n} from \"./types/operations\";\nimport type {\n Contract,\n Fn,\n TypedTransactionResult,\n} from \"./generated/event-types\";\nimport { chains } from \"./config/chains\";\nimport { getChainConfig, vanaMainnet } from \"./chains\";\nimport type { VanaPlatformAdapter } from \"./platform/interface\";\nimport {\n encryptBlobWithSignedKey,\n decryptBlobWithSignedKey,\n} from \"./utils/encryption\";\n\n/**\n * Factory functions for creating VanaCore instances with proper type safety\n */\nexport class VanaCoreFactory {\n /**\n * Creates a VanaCore instance that enforces storage requirements at compile time.\n * Use this factory when you know you'll need storage-dependent operations.\n *\n * @param platform - The platform adapter for environment-specific operations\n * @param config - Configuration that includes required storage providers\n * @returns VanaCore instance with storage validation\n * @example\n * ```typescript\n * const vanaCore = VanaCoreFactory.createWithStorage(platformAdapter, {\n * walletClient: myWalletClient,\n * storage: {\n * providers: { ipfs: new IPFSStorage() },\n * defaultProvider: 'ipfs'\n * }\n * });\n * ```\n */\n static createWithStorage(\n platform: VanaPlatformAdapter,\n config: VanaConfigWithStorage,\n ): VanaCore & StorageRequiredMarker {\n const core = new VanaCore(platform, config);\n return core as VanaCore & StorageRequiredMarker;\n }\n\n /**\n * Creates a VanaCore instance without storage requirements.\n * Storage-dependent operations will fail at runtime if not configured.\n *\n * @param platform - The platform adapter for environment-specific operations\n * @param config - Basic configuration without required storage\n * @returns VanaCore instance\n * @example\n * ```typescript\n * const vanaCore = VanaCoreFactory.create(platformAdapter, {\n * walletClient: myWalletClient\n * });\n * ```\n */\n static create(platform: VanaPlatformAdapter, config: VanaConfig): VanaCore {\n return new VanaCore(platform, config);\n }\n}\n\n/**\n * Provides the core SDK functionality for interacting with the Vana network.\n *\n * @remarks\n * This environment-agnostic class contains all SDK logic and accepts a platform\n * adapter to handle environment-specific operations. It initializes all controllers\n * and manages shared context between them, providing a unified interface for\n * data management, permissions, smart contracts, and storage operations.\n *\n * The class uses TypeScript overloading to enforce storage requirements at compile time.\n * Methods that require storage will throw `InvalidConfigurationError` at runtime if\n * storage providers are not configured, implementing a fail-fast approach to prevent\n * errors during expensive operations.\n *\n * **Core Architecture:**\n * - **Controllers**: Specialized modules for different Vana features (data, permissions, etc.)\n * - **Platform Adapters**: Environment-specific implementations (browser vs Node.js)\n * - **Storage Managers**: Abstraction layer for multiple storage providers\n * - **Context Sharing**: Unified configuration and services across all controllers\n *\n * For public usage, use the platform-specific factory functions:\n * - Browser: `import { Vana } from '@opendatalabs/vana-sdk/browser'`\n * - Node.js: `import { Vana } from '@opendatalabs/vana-sdk/node'`\n *\n * @example\n * ```typescript\n * // Direct instantiation (advanced usage)\n * import { VanaCore, BrowserPlatformAdapter } from '@opendatalabs/vana-sdk/browser';\n *\n * const core = new VanaCore(new BrowserPlatformAdapter(), {\n * walletClient: myWalletClient,\n * storage: {\n * providers: { ipfs: new IPFSStorage() },\n * defaultProvider: 'ipfs'\n * }\n * });\n *\n * // Access all controllers\n * const files = await core.data.getUserFiles();\n * const permissions = await core.permissions.grant({\n * grantee: '0x742d35...',\n * operation: 'read'\n * });\n * ```\n * @category Core SDK\n */\nexport class VanaCore {\n /** Manages gasless data access permissions and trusted server registry. */\n public readonly permissions: PermissionsController;\n\n /** Handles user data file operations. */\n public readonly data: DataController;\n\n /** Manages data schemas and refiners. */\n public readonly schemas: SchemaController;\n\n /** Provides personal server setup and trusted server interactions. */\n public readonly server: ServerController;\n\n /** Offers low-level access to Vana protocol smart contracts. */\n public readonly protocol: ProtocolController;\n\n /** Handles environment-specific operations like encryption and file systems. */\n protected platform: VanaPlatformAdapter;\n\n private readonly relayerConfig?: RelayerConfig;\n private readonly relayerCallback?: (\n request: UnifiedRelayerRequest,\n ) => Promise<UnifiedRelayerResponse>;\n private readonly downloadRelayer?: DownloadRelayerCallbacks;\n private readonly storageManager?: StorageManager;\n private readonly hasRequiredStorage: boolean;\n private readonly ipfsGateways?: string[];\n private readonly publicClient: PublicClient;\n private readonly walletClient?: WalletClient;\n private readonly _staticUserAddress?: Address; // For read-only mode\n protected readonly operationStore?: IOperationStore;\n\n /**\n * Initializes a new VanaCore client instance with the provided configuration.\n *\n * @remarks\n * The constructor validates the configuration, initializes storage providers if configured,\n * creates wallet and public clients, and sets up all SDK controllers with shared context.\n *\n * IMPORTANT: This constructor will validate storage requirements at runtime to fail fast.\n * Methods that require storage will throw runtime errors if storage is not configured.\n *\n * @param platform - The platform adapter for environment-specific operations\n * @param config - The configuration object specifying wallet or chain settings\n * @throws {InvalidConfigurationError} When the configuration is invalid or incomplete\n * @example\n * ```typescript\n * // Direct instantiation (consider using factory methods instead)\n * const vanaCore = new VanaCore(platformAdapter, {\n * walletClient: myWalletClient,\n * });\n * ```\n */\n constructor(platform: VanaPlatformAdapter, config: VanaConfig) {\n // Store the platform adapter\n this.platform = platform;\n\n // Validate configuration\n this.validateConfig(config);\n\n // Store operation store if provided\n this.operationStore = config?.operationStore;\n\n // Store relayer config and set up callback\n this.relayerConfig = config.relayer;\n if (config.relayer) {\n // Validate relayer type\n if (\n typeof config.relayer !== \"string\" &&\n typeof config.relayer !== \"function\"\n ) {\n throw new InvalidConfigurationError(\n \"Relayer must be either a URL string or a callback function\",\n );\n }\n\n if (typeof config.relayer === \"string\") {\n // Convenience: URL string - create HTTP transport\n const url = config.relayer;\n this.relayerCallback = async (request: UnifiedRelayerRequest) => {\n const response = await fetch(url, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(request),\n });\n if (!response.ok) {\n throw new Error(`Relayer request failed: ${response.statusText}`);\n }\n return response.json();\n };\n } else {\n // Direct callback function\n this.relayerCallback = config.relayer;\n }\n }\n\n // Store download relayer if provided\n this.downloadRelayer = config.downloadRelayer;\n\n // Store IPFS gateways if provided\n this.ipfsGateways = config.ipfsGateways;\n\n // Check if storage is properly configured\n this.hasRequiredStorage = hasStorageConfig(config);\n\n // Initialize storage manager if storage providers are provided\n if (config.storage?.providers) {\n this.storageManager = new StorageManager();\n\n // Register all provided storage providers\n for (const [name, provider] of Object.entries(config.storage.providers)) {\n const isDefault = name === config.storage.defaultProvider;\n this.storageManager.register(name, provider, isDefault);\n }\n\n // If no default was explicitly set but providers exist, use the first one\n if (\n !config.storage.defaultProvider &&\n Object.keys(config.storage.providers).length > 0\n ) {\n const firstProviderName = Object.keys(config.storage.providers)[0];\n this.storageManager.setDefaultProvider(firstProviderName);\n }\n }\n\n // Initialize clients based on configuration type\n let walletClient: WalletClient | undefined;\n let publicClient: PublicClient;\n let staticUserAddress: Address | undefined; // Only for read-only mode\n let chainToUse: Chain;\n\n if (isWalletConfig(config)) {\n // Full mode with wallet client\n walletClient = config.walletClient;\n chainToUse = (walletClient.chain as Chain) ?? vanaMainnet;\n\n // In wallet mode, address is dynamic (not stored)\n staticUserAddress = undefined;\n\n // Use provided publicClient or create one\n if (\"publicClient\" in config && config.publicClient) {\n publicClient = config.publicClient;\n } else {\n publicClient = createPublicClient({\n chain: chainToUse,\n transport: http(),\n });\n }\n } else if (isReadOnlyConfig(config)) {\n // Read-only mode with public client and address\n walletClient = undefined;\n publicClient = config.publicClient;\n staticUserAddress = config.address;\n chainToUse = config.publicClient.chain ?? vanaMainnet;\n } else if (isAddressOnlyConfig(config)) {\n // Read-only mode with just address (create public client)\n walletClient = undefined;\n staticUserAddress = config.address;\n chainToUse = config.chain ?? vanaMainnet;\n\n publicClient = createPublicClient({\n chain: chainToUse,\n transport: http(),\n });\n } else if (isChainConfig(config)) {\n // Legacy chain configuration - create wallet client\n if (!config.account) {\n throw new InvalidConfigurationError(\n \"Account is required when using ChainConfig\",\n );\n }\n\n const chain = chains[config.chainId];\n if (!chain) {\n throw new InvalidConfigurationError(\n `Unsupported chain ID: ${config.chainId}`,\n );\n }\n\n chainToUse = chain;\n walletClient = createWalletClient({\n chain,\n transport: http(config.rpcUrl ?? chain.rpcUrls.default.http[0]),\n account: config.account,\n });\n // In wallet mode, address is dynamic (not stored)\n staticUserAddress = undefined;\n publicClient = createPublicClient({\n chain,\n transport: http(),\n });\n } else {\n throw new InvalidConfigurationError(\n \"Invalid configuration: must provide either walletClient, publicClient + address, or address alone\",\n );\n }\n\n // Store the clients and static address for later use\n this.publicClient = publicClient;\n this.walletClient = walletClient;\n this._staticUserAddress = staticUserAddress;\n\n // Get default service URLs from chain config if not provided\n const chainConfig = getChainConfig(chainToUse.id);\n const subgraphUrl = config.subgraphUrl ?? chainConfig?.subgraphUrl;\n const personalServerUrl =\n config.defaultPersonalServerUrl ?? chainConfig?.personalServerUrl;\n\n // Create shared context for all controllers with dynamic userAddress getter\n const self = this; // Capture VanaCore instance for getter delegation\n const sharedContext: ControllerContext = {\n walletClient,\n publicClient,\n get userAddress() {\n // Delegate to VanaCore's getter for dynamic resolution\n return self.userAddress;\n },\n applicationClient: walletClient, // Using same wallet for now\n relayer: this.relayerCallback,\n downloadRelayer: this.downloadRelayer,\n storageManager: this.storageManager,\n subgraphUrl,\n platform: this.platform, // Pass the platform adapter to controllers\n validateStorageRequired: this.validateStorageRequired.bind(this),\n hasStorage: this.hasStorage.bind(this),\n ipfsGateways: this.ipfsGateways,\n defaultPersonalServerUrl: personalServerUrl,\n waitForTransactionEvents: this.waitForTransactionEvents.bind(this),\n waitForOperation: this.waitForOperation.bind(this),\n operationStore: this.operationStore,\n };\n\n // Initialize controllers\n this.permissions = new PermissionsController(sharedContext);\n this.data = new DataController(sharedContext);\n this.schemas = new SchemaController(sharedContext);\n this.server = new ServerController(sharedContext);\n this.protocol = new ProtocolController(sharedContext);\n }\n\n /**\n * Validates that storage is available for storage-dependent operations.\n * This method enforces the fail-fast principle by checking storage availability\n * at method call time rather than during expensive operations.\n *\n * @throws {InvalidConfigurationError} When storage is required but not configured\n * @example\n * ```typescript\n * // This will throw if storage is not configured\n * vana.validateStorageRequired();\n * await vana.data.uploadFile(file); // Safe to proceed\n * ```\n */\n public validateStorageRequired(): void {\n if (!this.hasRequiredStorage) {\n throw new InvalidConfigurationError(\n \"Storage configuration is required for this operation. \" +\n \"Please configure storage providers in VanaConfig.storage, \" +\n \"provide a relayer configuration, \" +\n \"or pass pre-stored URLs to avoid this dependency. \" +\n \"\\n\\nFor better type safety, consider using VanaCoreFactory.createWithStorage() \" +\n \"with VanaConfigWithStorage to catch this error at compile time.\",\n );\n }\n }\n\n /**\n * Checks whether storage is configured without throwing an error.\n *\n * @returns True if storage is properly configured\n * @example\n * ```typescript\n * if (vana.hasStorage()) {\n * await vana.data.uploadFile(file);\n * } else {\n * console.warn('Storage not configured - using pre-stored URLs only');\n * }\n * ```\n */\n public hasStorage(): boolean {\n return this.hasRequiredStorage;\n }\n\n /**\n * Type guard to check if this instance has storage enabled at compile time.\n * Use this when you need TypeScript to understand that storage is available.\n *\n * @returns True if storage is configured, with type narrowing\n * @example\n * ```typescript\n * if (vana.isStorageEnabled()) {\n * // TypeScript knows storage is available here\n * await vana.data.uploadFile(file);\n * }\n * ```\n */\n public isStorageEnabled(): this is VanaCore & StorageRequiredMarker {\n return this.hasRequiredStorage;\n }\n\n /**\n * Validates the provided configuration object against all requirements.\n *\n * @remarks\n * This method performs comprehensive validation of wallet client configuration,\n * chain configuration, storage providers, and relayer callbacks.\n * @param config - The configuration object to validate\n * @throws {InvalidConfigurationError} When any configuration parameter is invalid\n */\n private validateConfig(config: VanaConfig): void {\n if (!config) {\n throw new InvalidConfigurationError(\"Configuration object is required\");\n }\n\n // Validate storage configuration if provided\n if (config.storage?.providers) {\n if (typeof config.storage.providers !== \"object\") {\n throw new InvalidConfigurationError(\n \"storage.providers must be an object\",\n );\n }\n\n // Validate that all providers have required methods\n for (const [name, provider] of Object.entries(config.storage.providers)) {\n if (!provider || typeof provider !== \"object\") {\n throw new InvalidConfigurationError(\n `Storage provider '${name}' must be a valid StorageProvider object`,\n );\n }\n }\n\n // Validate default provider if specified\n if (config.storage.defaultProvider) {\n if (!(config.storage.defaultProvider in config.storage.providers)) {\n throw new InvalidConfigurationError(\n `Default storage provider '${config.storage.defaultProvider}' not found in providers`,\n );\n }\n }\n }\n\n if (isWalletConfig(config)) {\n // Validate WalletConfig\n if (!config.walletClient) {\n throw new InvalidConfigurationError(\"walletClient is required\");\n }\n\n // Validate that walletClient is actually a WalletClient\n if (\n typeof config.walletClient !== \"object\" ||\n !config.walletClient.signTypedData\n ) {\n throw new InvalidConfigurationError(\n \"walletClient must be a valid viem WalletClient\",\n );\n }\n\n // Validate that wallet client has a chain\n if (!config.walletClient.chain) {\n throw new InvalidConfigurationError(\n \"walletClient must have a chain configured\",\n );\n }\n\n // Validate that the chain is supported\n if (!isVanaChainId(config.walletClient.chain.id)) {\n throw new InvalidConfigurationError(\n `Unsupported chain ID: ${String(config.walletClient.chain.id)}. Supported chains: 14800 (Moksha testnet), 1480 (Vana mainnet)`,\n );\n }\n } else if (isChainConfig(config)) {\n // Validate ChainConfig\n if (!isVanaChainId(config.chainId)) {\n throw new InvalidConfigurationError(\n `Unsupported chain ID: ${String(config.chainId)}. Supported chains: 14800 (Moksha testnet), 1480 (Vana mainnet)`,\n );\n }\n\n // Validate rpcUrl if provided\n if (config.rpcUrl) {\n if (typeof config.rpcUrl !== \"string\") {\n throw new InvalidConfigurationError(\"rpcUrl must be a string\");\n }\n\n if (config.rpcUrl.trim() === \"\") {\n throw new InvalidConfigurationError(\"rpcUrl cannot be empty\");\n }\n\n // Basic URL validation for RPC URL\n try {\n new URL(config.rpcUrl);\n } catch {\n throw new InvalidConfigurationError(\"rpcUrl must be a valid URL\");\n }\n }\n\n // Account is optional for ChainConfig, but if provided, validate it\n if (config.account) {\n if (typeof config.account !== \"object\" || !config.account.address) {\n throw new InvalidConfigurationError(\n \"account must be a valid viem Account object\",\n );\n }\n }\n } else if (isReadOnlyConfig(config)) {\n // Validate read-only config with publicClient and address\n if (!config.publicClient) {\n throw new InvalidConfigurationError(\n \"publicClient is required for read-only configuration\",\n );\n }\n if (!config.address) {\n throw new InvalidConfigurationError(\n \"address is required for read-only configuration\",\n );\n }\n } else if (isAddressOnlyConfig(config)) {\n // Validate address-only config\n if (!config.address) {\n throw new InvalidConfigurationError(\n \"address is required for address-only configuration\",\n );\n }\n // chain is optional, will use default\n } else {\n throw new InvalidConfigurationError(\n \"Invalid configuration: must provide either walletClient, publicClient + address, or address alone\",\n );\n }\n }\n\n /**\n * Gets the current chain ID from the wallet client.\n *\n * @returns The numeric chain ID of the connected network\n * @example\n * ```typescript\n * const chainId = vana.chainId;\n * console.log(`Connected to chain: ${chainId}`); // e.g., \"Connected to chain: 14800\"\n * ```\n */\n get chainId(): number {\n return this.protocol.getChainId();\n }\n\n /**\n * Gets the current chain name from the wallet client.\n *\n * @returns The human-readable name of the connected network\n * @example\n * ```typescript\n * const chainName = vana.chainName;\n * console.log(`Connected to: ${chainName}`); // e.g., \"Connected to: Moksha Testnet\"\n * ```\n */\n get chainName(): string {\n return this.protocol.getChainName();\n }\n\n /**\n * The user's wallet address.\n * In wallet mode, this always returns the current wallet account address.\n * In read-only mode, this returns the static address provided during initialization.\n *\n * @example\n * ```typescript\n * const address = vana.userAddress;\n * console.log(`User address: ${address}`); // e.g., \"User address: 0x742d35...\"\n * ```\n */\n get userAddress(): Address {\n // In wallet mode: dynamically read from wallet\n if (this.walletClient?.account) {\n return extractAddress(this.walletClient.account);\n }\n\n // In read-only mode: use static address\n if (this._staticUserAddress) {\n return this._staticUserAddress;\n }\n\n throw new Error(\"No user address available\");\n }\n\n /**\n * Retrieves comprehensive runtime configuration information.\n *\n * @returns The current runtime configuration including chain, storage, and relayer settings\n * @example\n * ```typescript\n * const config = vana.getConfig();\n * console.log(`Chain: ${config.chainName} (${config.chainId})`);\n * console.log(`Storage providers: ${config.storageProviders.join(\", \")}`);\n * ```\n */\n getConfig(): RuntimeConfig {\n return {\n chainId: this.chainId as VanaChainId,\n chainName: this.chainName,\n relayerConfig: this.relayerConfig,\n storageProviders: this.storageManager?.getStorageProviders() ?? [],\n defaultStorageProvider: this.storageManager?.getDefaultStorageProvider(),\n };\n }\n\n /**\n * Sets the platform adapter for environment-specific operations.\n * This is useful for testing and advanced use cases where you need\n * to override the default platform detection.\n *\n * @param adapter - The platform adapter to use\n * @example\n * ```typescript\n * // For testing with a mock adapter\n * const mockAdapter = new MockPlatformAdapter();\n * vana.setPlatformAdapter(mockAdapter);\n *\n * // For advanced use cases with custom adapters\n * const customAdapter = new CustomPlatformAdapter();\n * vana.setPlatformAdapter(customAdapter);\n * ```\n */\n setPlatformAdapter(adapter: VanaPlatformAdapter): void {\n this.platform = adapter;\n\n // Note: Controllers will use the new platform adapter on their next operation\n // since they access this.platform from the shared context\n }\n\n /**\n * Gets the current platform adapter.\n * This is useful for advanced use cases where you need to access\n * the platform adapter directly.\n *\n * @returns The current platform adapter\n * @example\n * ```typescript\n * const adapter = vana.getPlatformAdapter();\n * const encrypted = await adapter.encrypt(data, key);\n * ```\n */\n getPlatformAdapter(): VanaPlatformAdapter {\n return this.platform;\n }\n\n /**\n * Encrypts data using the Vana protocol standard encryption.\n *\n * @remarks\n * This method implements the Vana network's standard encryption protocol using\n * platform-appropriate cryptographic libraries. It automatically handles different\n * input types (string or Blob) and produces encrypted output suitable for secure\n * storage or transmission. The encryption is compatible with the network's\n * decryption protocols and can be decrypted by authorized parties.\n *\n * @param data - The data to encrypt (string or Blob)\n * @param key - The encryption key (typically generated via `generateEncryptionKey`)\n * @returns The encrypted data as a Blob\n * @throws {Error} When encryption fails due to invalid key or data format\n * @example\n * ```typescript\n * import { generateEncryptionKey } from '@opendatalabs/vana-sdk/node';\n *\n * // Generate encryption key from wallet signature\n * const encryptionKey = await generateEncryptionKey(vana.walletClient);\n *\n * // Encrypt string data\n * const sensitiveData = \"User's private information\";\n * const encrypted = await vana.encryptBlob(sensitiveData, encryptionKey);\n *\n * // Encrypt file data\n * const fileBlob = new Blob([fileContent], { type: 'application/json' });\n * const encryptedFile = await vana.encryptBlob(fileBlob, encryptionKey);\n *\n * // Store encrypted data safely\n * await storageProvider.upload(encrypted, 'encrypted-data.bin');\n * ```\n */\n public async encryptBlob(data: string | Blob, key: string): Promise<Blob> {\n return encryptBlobWithSignedKey(data, key, this.platform);\n }\n\n /**\n * Decrypts data that was encrypted using the Vana protocol.\n *\n * @remarks\n * This method decrypts data that was previously encrypted using the Vana network's\n * standard encryption protocol. It requires the same wallet signature that was used\n * for encryption and automatically uses the appropriate platform adapter for\n * cryptographic operations. The decrypted output maintains the original data format.\n *\n * @param encryptedData - The encrypted data (string or Blob)\n * @param walletSignature - The wallet signature used as decryption key\n * @returns The decrypted data as a Blob\n * @throws {Error} When decryption fails due to invalid signature or corrupted data\n * @example\n * ```typescript\n * import { generateEncryptionKey } from '@opendatalabs/vana-sdk/node';\n *\n * // Retrieve encrypted data from storage\n * const encryptedBlob = await storageProvider.download('encrypted-data.bin');\n *\n * // Generate the same key used for encryption\n * const decryptionKey = await generateEncryptionKey(vana.walletClient);\n *\n * // Decrypt the data\n * const decrypted = await vana.decryptBlob(encryptedBlob, decryptionKey);\n *\n * // Convert back to original format\n * const originalText = await decrypted.text();\n * const originalJson = JSON.parse(originalText);\n *\n * console.log('Decrypted data:', originalJson);\n * ```\n *\n * @example\n * ```typescript\n * // Decrypt file downloaded from Vana network\n * const userFiles = await vana.data.getUserFiles();\n * const file = userFiles[0];\n *\n * // Download encrypted content\n * const encrypted = await fetch(file.url).then(r => r.blob());\n *\n * // Decrypt with user's key\n * const decryptionKey = await generateEncryptionKey(vana.walletClient);\n * const decrypted = await vana.decryptBlob(encrypted, decryptionKey);\n *\n * // Process original data\n * const fileContent = await decrypted.arrayBuffer();\n * ```\n */\n public async decryptBlob(\n encryptedData: string | Blob,\n walletSignature: string,\n ): Promise<Blob> {\n return decryptBlobWithSignedKey(\n encryptedData,\n walletSignature,\n this.platform,\n );\n }\n\n /**\n * Waits for an operation to complete and returns the final result.\n *\n * @remarks\n * This method polls the operation status at regular intervals until it\n * reaches a terminal state (succeeded, failed, or canceled). Supports\n * ergonomic overloads to accept either an Operation object or just the ID.\n *\n * @param opOrId - Either an Operation object or operation ID string\n * @param options - Optional polling configuration\n * @returns The completed operation with result or error\n * @throws {PersonalServerError} When the operation fails or times out\n * @example\n * ```typescript\n * // Using operation object\n * const operation = await vana.server.createOperation({ permissionId: 123 });\n * const completed = await vana.waitForOperation(operation);\n *\n * // Using just the ID\n * const completed = await vana.waitForOperation(\"op_abc123\");\n *\n * // With custom timeout\n * const completed = await vana.waitForOperation(operation, {\n * timeout: 60000,\n * pollingInterval: 1000\n * });\n * ```\n */\n public async waitForOperation<T = unknown>(\n opOrId: Operation<T> | string,\n options?: PollingOptions,\n ): Promise<Operation<T>> {\n return this.server.waitForOperation(opOrId, options);\n }\n\n /**\n * Waits for a transaction to be confirmed and returns the receipt.\n *\n * @remarks\n * This method polls for transaction confirmation on the blockchain.\n * Supports ergonomic overloads to accept either a transaction result\n * object or just the hash string.\n *\n * @param hashOrObj - Either a TransactionResult object or hash string\n * @param options - Optional wait configuration\n * @returns The transaction receipt with logs and status\n * @example\n * ```typescript\n * // Using transaction result object\n * const tx = await vana.permissions.grant(params);\n * const receipt = await vana.waitForTransactionReceipt(tx);\n *\n * // Using just the hash\n * const receipt = await vana.waitForTransactionReceipt(\"0x123...\");\n *\n * // With custom confirmations\n * const receipt = await vana.waitForTransactionReceipt(tx, {\n * confirmations: 3,\n * timeout: 60000\n * });\n * ```\n */\n public async waitForTransactionReceipt(\n hashOrObj: TransactionResult | { hash: Hash } | Hash,\n options?: TransactionWaitOptions,\n ): Promise<TransactionReceipt> {\n const hash = typeof hashOrObj === \"string\" ? hashOrObj : hashOrObj.hash;\n\n return this.publicClient.waitForTransactionReceipt({\n hash,\n confirmations: options?.confirmations,\n pollingInterval: options?.pollingInterval,\n timeout: options?.timeout,\n });\n }\n\n /**\n * Waits for transaction confirmation and extracts blockchain event data.\n *\n * @remarks\n * This method leverages the context-carrying POJO architecture. When passed a\n * `TransactionResult` with an `operation` field, it automatically parses the\n * correct events from the transaction logs. For legacy compatibility, it accepts\n * raw hashes but will not parse events without operation context.\n *\n * @param transaction - Transaction result with operation context\n * @param options - Optional confirmation and timeout settings\n * @returns Parsed event data specific to the transaction's operation type\n * @throws {NetworkError} When transaction confirmation times out\n * @throws {BlockchainError} When expected events are not found in the transaction\n *\n * @example\n * ```typescript\n * // Recommended: Pass the transaction result for automatic event parsing\n * const tx = await vana.permissions.submitAddServerFilesAndPermissions(params);\n * const events = await vana.waitForTransactionEvents<{ permissionId: bigint }>(tx);\n * console.log(`Permission ID: ${events.permissionId}`);\n *\n * // Legacy: Raw hash without event parsing (returns receipt)\n * const receipt = await vana.waitForTransactionEvents(\"0x123...\");\n * ```\n *\n * @see For understanding transaction flows, visit https://docs.vana.org/docs/transactions\n */\n public async waitForTransactionEvents<C extends Contract, F extends Fn<C>>(\n transaction: TransactionResult<C, F>,\n options?: TransactionWaitOptions,\n ): Promise<TypedTransactionResult<C, F>> {\n // Import the POJO-based parser\n const { parseTransaction } = await import(\"./utils/parseTransactionPojo\");\n\n // Wait for the transaction to be mined\n const receipt = await this.waitForTransactionReceipt(\n transaction.hash,\n options,\n );\n\n // Parse events using our heuristic-free POJO system\n const result = parseTransaction(transaction, receipt);\n\n // Return the strongly-typed result\n // TypeScript knows exactly what events are possible!\n return result;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Tests for BaseECIES protected methods and utilities
3
+ */
4
+ export {};
@@ -0,0 +1,8 @@
1
+ /**
2
+ * ECIES Compatibility Test Suite
3
+ *
4
+ * Verifies that our new ECIES implementation is 100% compatible with eccrypto.
5
+ * Uses pre-generated test vectors from eccrypto to ensure backward compatibility
6
+ * with existing encrypted data in the Vana network.
7
+ */
8
+ export {};
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Tests for ECIES constants and validation helpers
3
+ */
4
+ export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Native secp256k1 Parity Tests
3
+ *
4
+ * Critical tests to ensure native secp256k1 produces identical results
5
+ * to @noble/secp256k1, especially for ECDH operations.
6
+ */
7
+ export {};
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * These vectors ensure our ECIES implementation is compatible with eccrypto
7
7
  */
8
- declare const eccryptoTestVectors: ({
8
+ export declare const eccryptoTestVectors: ({
9
9
  name: string;
10
10
  privateKey: string;
11
11
  publicKey: string;
@@ -30,11 +30,9 @@ declare const eccryptoTestVectors: ({
30
30
  mac: string;
31
31
  };
32
32
  })[];
33
- declare const eccryptoFormat: {
33
+ export declare const eccryptoFormat: {
34
34
  ivLength: number;
35
35
  ephemPublicKeyLength: number;
36
36
  macLength: number;
37
37
  getFormatLength: (ciphertextLength: number) => number;
38
38
  };
39
-
40
- export { eccryptoFormat, eccryptoTestVectors };
@@ -24,6 +24,7 @@ module.exports = __toCommonJS(base_exports);
24
24
  var import_interface = require("./interface");
25
25
  var import_constants = require("./constants");
26
26
  var import_utils = require("./utils");
27
+ var import_viem = require("viem");
27
28
  class BaseECIESUint8 {
28
29
  // Cache for validated public keys to avoid repeated validation
29
30
  static validatedKeys = /* @__PURE__ */ new WeakMap();
@@ -114,7 +115,7 @@ class BaseECIESUint8 {
114
115
  );
115
116
  const iv = this.generateRandomBytes(import_constants.CIPHER.IV_LENGTH);
116
117
  const ciphertext = await this.aesEncrypt(encryptionKey, iv, message);
117
- const macData = (0, import_utils.concatBytes)(iv, ephemeralPublicKey, ciphertext);
118
+ const macData = (0, import_viem.concat)([iv, ephemeralPublicKey, ciphertext]);
118
119
  const mac = this.hmacSha256(macKey, macData);
119
120
  this.clearBuffer(ephemeralPrivateKey);
120
121
  this.clearBuffer(sharedSecret);
@@ -174,11 +175,11 @@ class BaseECIESUint8 {
174
175
  import_constants.KDF.MAC_KEY_OFFSET,
175
176
  import_constants.KDF.MAC_KEY_OFFSET + import_constants.KDF.MAC_KEY_LENGTH
176
177
  );
177
- const macData = (0, import_utils.concatBytes)(
178
+ const macData = (0, import_viem.concat)([
178
179
  encrypted.iv,
179
180
  encrypted.ephemPublicKey,
180
181
  encrypted.ciphertext
181
- );
182
+ ]);
182
183
  const expectedMac = this.hmacSha256(macKey, macData);
183
184
  if (!(0, import_utils.constantTimeEqual)(encrypted.mac, expectedMac)) {
184
185
  throw new import_interface.ECIESError("MAC verification failed", "MAC_MISMATCH");