@opendatalabs/vana-sdk 0.1.0-alpha.eebb656 → 0.1.0-alpha.ef15099

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 (545) hide show
  1. package/README.md +67 -351
  2. package/dist/browser.cjs.map +1 -1
  3. package/dist/browser.d.ts +33 -1
  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 +2 -0
  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 +30 -1
  12. package/dist/chains/index.js.map +1 -1
  13. package/dist/client/enhancedResponse.cjs +164 -0
  14. package/dist/client/enhancedResponse.cjs.map +1 -0
  15. package/dist/client/enhancedResponse.d.ts +120 -0
  16. package/dist/client/enhancedResponse.js +138 -0
  17. package/dist/client/enhancedResponse.js.map +1 -0
  18. package/dist/config/chains.cjs.map +1 -1
  19. package/dist/config/chains.d.ts +99 -0
  20. package/dist/config/chains.js.map +1 -1
  21. package/dist/config/contracts.config.cjs +400 -0
  22. package/dist/config/contracts.config.cjs.map +1 -0
  23. package/dist/config/contracts.config.d.ts +84 -0
  24. package/dist/config/contracts.config.js +375 -0
  25. package/dist/config/contracts.config.js.map +1 -0
  26. package/dist/config/default-services.cjs +60 -0
  27. package/dist/config/default-services.cjs.map +1 -0
  28. package/dist/config/default-services.d.ts +46 -0
  29. package/dist/config/default-services.js +33 -0
  30. package/dist/config/default-services.js.map +1 -0
  31. package/dist/config/default-services.test.d.ts +1 -0
  32. package/dist/contracts/contractController.cjs +1 -1
  33. package/dist/contracts/contractController.cjs.map +1 -1
  34. package/dist/contracts/contractController.d.ts +66 -10
  35. package/dist/contracts/contractController.js +1 -1
  36. package/dist/contracts/contractController.js.map +1 -1
  37. package/dist/controllers/__tests__/data-consistency-integration.test.d.ts +7 -0
  38. package/dist/controllers/__tests__/operations.processQueue.test.d.ts +1 -0
  39. package/dist/controllers/accessSettlement.cjs +289 -0
  40. package/dist/controllers/accessSettlement.cjs.map +1 -0
  41. package/dist/controllers/accessSettlement.d.ts +157 -0
  42. package/dist/controllers/accessSettlement.js +265 -0
  43. package/dist/controllers/accessSettlement.js.map +1 -0
  44. package/dist/controllers/accessSettlement.test.d.ts +1 -0
  45. package/dist/controllers/base.cjs +116 -0
  46. package/dist/controllers/base.cjs.map +1 -0
  47. package/dist/controllers/base.d.ts +94 -0
  48. package/dist/controllers/base.js +92 -0
  49. package/dist/controllers/base.js.map +1 -0
  50. package/dist/controllers/data.cjs +634 -352
  51. package/dist/controllers/data.cjs.map +1 -1
  52. package/dist/controllers/data.d.ts +348 -213
  53. package/dist/controllers/data.js +647 -355
  54. package/dist/controllers/data.js.map +1 -1
  55. package/dist/controllers/operations.cjs +430 -0
  56. package/dist/controllers/operations.cjs.map +1 -0
  57. package/dist/controllers/operations.d.ts +229 -0
  58. package/dist/controllers/operations.js +406 -0
  59. package/dist/controllers/operations.js.map +1 -0
  60. package/dist/controllers/permissions.cjs +943 -443
  61. package/dist/controllers/permissions.cjs.map +1 -1
  62. package/dist/controllers/permissions.d.ts +201 -120
  63. package/dist/controllers/permissions.js +943 -443
  64. package/dist/controllers/permissions.js.map +1 -1
  65. package/dist/controllers/protocol.cjs +14 -10
  66. package/dist/controllers/protocol.cjs.map +1 -1
  67. package/dist/controllers/protocol.d.ts +30 -31
  68. package/dist/controllers/protocol.js +14 -10
  69. package/dist/controllers/protocol.js.map +1 -1
  70. package/dist/controllers/runtimePermissions.cjs +272 -0
  71. package/dist/controllers/runtimePermissions.cjs.map +1 -0
  72. package/dist/controllers/runtimePermissions.d.ts +152 -0
  73. package/dist/controllers/runtimePermissions.js +251 -0
  74. package/dist/controllers/runtimePermissions.js.map +1 -0
  75. package/dist/controllers/runtimePermissions.test.d.ts +1 -0
  76. package/dist/controllers/schemas.cjs +113 -43
  77. package/dist/controllers/schemas.cjs.map +1 -1
  78. package/dist/controllers/schemas.d.ts +90 -43
  79. package/dist/controllers/schemas.js +113 -43
  80. package/dist/controllers/schemas.js.map +1 -1
  81. package/dist/controllers/server.cjs +276 -60
  82. package/dist/controllers/server.cjs.map +1 -1
  83. package/dist/controllers/server.d.ts +159 -54
  84. package/dist/controllers/server.js +276 -60
  85. package/dist/controllers/server.js.map +1 -1
  86. package/dist/core/__tests__/health.test.d.ts +1 -0
  87. package/dist/core/__tests__/inMemoryNonceManager.test.d.ts +1 -0
  88. package/dist/core/__tests__/nonceManager.test.d.ts +1 -0
  89. package/dist/core/__tests__/pollingManager.test.d.ts +4 -0
  90. package/dist/core/apiClient.cjs +53 -3
  91. package/dist/core/apiClient.cjs.map +1 -1
  92. package/dist/core/apiClient.d.ts +132 -7
  93. package/dist/core/apiClient.js +53 -3
  94. package/dist/core/apiClient.js.map +1 -1
  95. package/dist/core/generics.cjs +30 -3
  96. package/dist/core/generics.cjs.map +1 -1
  97. package/dist/core/generics.d.ts +95 -6
  98. package/dist/core/generics.js +30 -3
  99. package/dist/core/generics.js.map +1 -1
  100. package/dist/core/health.cjs +289 -0
  101. package/dist/core/health.cjs.map +1 -0
  102. package/dist/core/health.d.ts +143 -0
  103. package/dist/core/health.js +265 -0
  104. package/dist/core/health.js.map +1 -0
  105. package/dist/core/inMemoryNonceManager.cjs +138 -0
  106. package/dist/core/inMemoryNonceManager.cjs.map +1 -0
  107. package/dist/core/inMemoryNonceManager.d.ts +69 -0
  108. package/dist/core/inMemoryNonceManager.js +114 -0
  109. package/dist/core/inMemoryNonceManager.js.map +1 -0
  110. package/dist/core/nonceManager.cjs +304 -0
  111. package/dist/core/nonceManager.cjs.map +1 -0
  112. package/dist/core/nonceManager.d.ts +116 -0
  113. package/dist/core/nonceManager.js +280 -0
  114. package/dist/core/nonceManager.js.map +1 -0
  115. package/dist/core/pollingManager.cjs +292 -0
  116. package/dist/core/pollingManager.cjs.map +1 -0
  117. package/dist/core/pollingManager.d.ts +120 -0
  118. package/dist/core/pollingManager.js +268 -0
  119. package/dist/core/pollingManager.js.map +1 -0
  120. package/dist/core.cjs +164 -36
  121. package/dist/core.cjs.map +1 -1
  122. package/dist/core.d.ts +69 -10
  123. package/dist/core.js +167 -37
  124. package/dist/core.js.map +1 -1
  125. package/dist/crypto/ecies/__tests__/constants.test.d.ts +1 -1
  126. package/dist/crypto/ecies/__tests__/interface.test.d.ts +1 -0
  127. package/dist/crypto/ecies/__tests__/serialization.test.d.ts +8 -0
  128. package/dist/crypto/ecies/__tests__/utils.test.d.ts +1 -0
  129. package/dist/crypto/ecies/base.cjs +59 -23
  130. package/dist/crypto/ecies/base.cjs.map +1 -1
  131. package/dist/crypto/ecies/base.js +59 -23
  132. package/dist/crypto/ecies/base.js.map +1 -1
  133. package/dist/crypto/ecies/constants.cjs +2 -10
  134. package/dist/crypto/ecies/constants.cjs.map +1 -1
  135. package/dist/crypto/ecies/constants.d.ts +0 -9
  136. package/dist/crypto/ecies/constants.js +1 -8
  137. package/dist/crypto/ecies/constants.js.map +1 -1
  138. package/dist/crypto/ecies/interface.cjs +19 -2
  139. package/dist/crypto/ecies/interface.cjs.map +1 -1
  140. package/dist/crypto/ecies/interface.js +19 -2
  141. package/dist/crypto/ecies/interface.js.map +1 -1
  142. package/dist/errors.cjs +45 -0
  143. package/dist/errors.cjs.map +1 -1
  144. package/dist/errors.d.ts +104 -0
  145. package/dist/errors.js +43 -0
  146. package/dist/errors.js.map +1 -1
  147. package/dist/generated/abi/AccessSettlementImplementation.cjs +635 -0
  148. package/dist/generated/abi/AccessSettlementImplementation.cjs.map +1 -0
  149. package/dist/generated/abi/AccessSettlementImplementation.d.ts +468 -0
  150. package/dist/generated/abi/AccessSettlementImplementation.js +611 -0
  151. package/dist/generated/abi/AccessSettlementImplementation.js.map +1 -0
  152. package/dist/generated/abi/AttestationPolicyImplementation.cjs +614 -0
  153. package/dist/generated/abi/AttestationPolicyImplementation.cjs.map +1 -0
  154. package/dist/generated/abi/AttestationPolicyImplementation.d.ts +449 -0
  155. package/dist/generated/abi/AttestationPolicyImplementation.js +590 -0
  156. package/dist/generated/abi/AttestationPolicyImplementation.js.map +1 -0
  157. package/dist/generated/abi/ComputeEngineImplementation.cjs.map +1 -1
  158. package/dist/generated/abi/ComputeEngineImplementation.js.map +1 -1
  159. package/dist/generated/abi/{DLPTreasuryImplementation.cjs → ComputeEngineTreasuryImplementation.cjs} +16 -92
  160. package/dist/generated/abi/ComputeEngineTreasuryImplementation.cjs.map +1 -0
  161. package/dist/generated/abi/{DLPTreasuryImplementation.d.ts → ComputeEngineTreasuryImplementation.d.ts} +9 -67
  162. package/dist/generated/abi/{DLPTreasuryImplementation.js → ComputeEngineTreasuryImplementation.js} +12 -88
  163. package/dist/generated/abi/ComputeEngineTreasuryImplementation.js.map +1 -0
  164. package/dist/generated/abi/ComputeInstructionRegistryImplementation.cjs.map +1 -1
  165. package/dist/generated/abi/ComputeInstructionRegistryImplementation.js.map +1 -1
  166. package/dist/generated/abi/DATFactoryImplementation.cjs.map +1 -1
  167. package/dist/generated/abi/DATFactoryImplementation.js.map +1 -1
  168. package/dist/generated/abi/DATImplementation.cjs.map +1 -1
  169. package/dist/generated/abi/DATImplementation.js.map +1 -1
  170. package/dist/generated/abi/DATPausableImplementation.cjs.map +1 -1
  171. package/dist/generated/abi/DATPausableImplementation.js.map +1 -1
  172. package/dist/generated/abi/DATVotesImplementation.cjs.map +1 -1
  173. package/dist/generated/abi/DATVotesImplementation.js.map +1 -1
  174. package/dist/generated/abi/DLPPerformanceImplementation.cjs +42 -0
  175. package/dist/generated/abi/DLPPerformanceImplementation.cjs.map +1 -1
  176. package/dist/generated/abi/DLPPerformanceImplementation.d.ts +32 -0
  177. package/dist/generated/abi/DLPPerformanceImplementation.js +42 -0
  178. package/dist/generated/abi/DLPPerformanceImplementation.js.map +1 -1
  179. package/dist/generated/abi/DLPRegistryImplementation.cjs +5 -5
  180. package/dist/generated/abi/DLPRegistryImplementation.cjs.map +1 -1
  181. package/dist/generated/abi/DLPRegistryImplementation.d.ts +4 -4
  182. package/dist/generated/abi/DLPRegistryImplementation.js +5 -5
  183. package/dist/generated/abi/DLPRegistryImplementation.js.map +1 -1
  184. package/dist/generated/abi/DLPRegistryTreasuryImplementation.cjs.map +1 -1
  185. package/dist/generated/abi/DLPRegistryTreasuryImplementation.js.map +1 -1
  186. package/dist/generated/abi/DLPRewardDeployerImplementation.cjs +166 -2
  187. package/dist/generated/abi/DLPRewardDeployerImplementation.cjs.map +1 -1
  188. package/dist/generated/abi/DLPRewardDeployerImplementation.d.ts +129 -2
  189. package/dist/generated/abi/DLPRewardDeployerImplementation.js +166 -2
  190. package/dist/generated/abi/DLPRewardDeployerImplementation.js.map +1 -1
  191. package/dist/generated/abi/DLPRewardSwapImplementation.cjs.map +1 -1
  192. package/dist/generated/abi/DLPRewardSwapImplementation.js.map +1 -1
  193. package/dist/generated/abi/DataLiquidityPoolImplementation.cjs +282 -100
  194. package/dist/generated/abi/DataLiquidityPoolImplementation.cjs.map +1 -1
  195. package/dist/generated/abi/DataLiquidityPoolImplementation.d.ts +218 -79
  196. package/dist/generated/abi/DataLiquidityPoolImplementation.js +281 -99
  197. package/dist/generated/abi/DataLiquidityPoolImplementation.js.map +1 -1
  198. package/dist/generated/abi/DataPortabilityGranteesImplementation.cjs +167 -19
  199. package/dist/generated/abi/DataPortabilityGranteesImplementation.cjs.map +1 -1
  200. package/dist/generated/abi/DataPortabilityGranteesImplementation.d.ts +127 -14
  201. package/dist/generated/abi/DataPortabilityGranteesImplementation.js +167 -19
  202. package/dist/generated/abi/DataPortabilityGranteesImplementation.js.map +1 -1
  203. package/dist/generated/abi/DataPortabilityPermissionsImplementation.cjs +0 -19
  204. package/dist/generated/abi/DataPortabilityPermissionsImplementation.cjs.map +1 -1
  205. package/dist/generated/abi/DataPortabilityPermissionsImplementation.d.ts +0 -14
  206. package/dist/generated/abi/DataPortabilityPermissionsImplementation.js +0 -19
  207. package/dist/generated/abi/DataPortabilityPermissionsImplementation.js.map +1 -1
  208. package/dist/generated/abi/DataPortabilityServersImplementation.cjs +0 -19
  209. package/dist/generated/abi/DataPortabilityServersImplementation.cjs.map +1 -1
  210. package/dist/generated/abi/DataPortabilityServersImplementation.d.ts +0 -14
  211. package/dist/generated/abi/DataPortabilityServersImplementation.js +0 -19
  212. package/dist/generated/abi/DataPortabilityServersImplementation.js.map +1 -1
  213. package/dist/generated/abi/DataRefinerRegistryImplementation.cjs.map +1 -1
  214. package/dist/generated/abi/DataRefinerRegistryImplementation.js.map +1 -1
  215. package/dist/generated/abi/DataRegistryImplementation.cjs +0 -13
  216. package/dist/generated/abi/DataRegistryImplementation.cjs.map +1 -1
  217. package/dist/generated/abi/DataRegistryImplementation.d.ts +0 -10
  218. package/dist/generated/abi/DataRegistryImplementation.js +0 -13
  219. package/dist/generated/abi/DataRegistryImplementation.js.map +1 -1
  220. package/dist/generated/abi/DatasetRegistryImplementation.cjs +751 -0
  221. package/dist/generated/abi/DatasetRegistryImplementation.cjs.map +1 -0
  222. package/dist/generated/abi/DatasetRegistryImplementation.d.ts +557 -0
  223. package/dist/generated/abi/DatasetRegistryImplementation.js +727 -0
  224. package/dist/generated/abi/DatasetRegistryImplementation.js.map +1 -0
  225. package/dist/generated/abi/ProtocolConfigImplementation.cjs +578 -0
  226. package/dist/generated/abi/ProtocolConfigImplementation.cjs.map +1 -0
  227. package/dist/generated/abi/ProtocolConfigImplementation.d.ts +423 -0
  228. package/dist/generated/abi/ProtocolConfigImplementation.js +554 -0
  229. package/dist/generated/abi/ProtocolConfigImplementation.js.map +1 -0
  230. package/dist/generated/abi/QueryEngineImplementation.cjs.map +1 -1
  231. package/dist/generated/abi/QueryEngineImplementation.js.map +1 -1
  232. package/dist/generated/abi/SwapHelperImplementation.cjs +0 -43
  233. package/dist/generated/abi/SwapHelperImplementation.cjs.map +1 -1
  234. package/dist/generated/abi/SwapHelperImplementation.d.ts +0 -35
  235. package/dist/generated/abi/SwapHelperImplementation.js +0 -43
  236. package/dist/generated/abi/SwapHelperImplementation.js.map +1 -1
  237. package/dist/generated/abi/TeePoolDedicatedGpuImplementation.cjs.map +1 -1
  238. package/dist/generated/abi/TeePoolDedicatedGpuImplementation.js.map +1 -1
  239. package/dist/generated/abi/TeePoolDedicatedStandardImplementation.cjs.map +1 -1
  240. package/dist/generated/abi/TeePoolDedicatedStandardImplementation.js.map +1 -1
  241. package/dist/generated/abi/TeePoolEphemeralStandardImplementation.cjs.map +1 -1
  242. package/dist/generated/abi/TeePoolEphemeralStandardImplementation.js.map +1 -1
  243. package/dist/generated/abi/TeePoolPersistentGpuImplementation.cjs.map +1 -1
  244. package/dist/generated/abi/TeePoolPersistentGpuImplementation.js.map +1 -1
  245. package/dist/generated/abi/TeePoolPersistentStandardImplementation.cjs.map +1 -1
  246. package/dist/generated/abi/TeePoolPersistentStandardImplementation.js.map +1 -1
  247. package/dist/generated/abi/TeePoolPhalaImplementation.cjs.map +1 -1
  248. package/dist/generated/abi/TeePoolPhalaImplementation.js.map +1 -1
  249. package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.cjs +1251 -0
  250. package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.cjs.map +1 -0
  251. package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.d.ts +948 -0
  252. package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.js +1227 -0
  253. package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.js.map +1 -0
  254. package/dist/generated/abi/UniswapV3QuoterV2Implementation.cjs +297 -0
  255. package/dist/generated/abi/UniswapV3QuoterV2Implementation.cjs.map +1 -0
  256. package/dist/generated/abi/UniswapV3QuoterV2Implementation.d.ts +206 -0
  257. package/dist/generated/abi/UniswapV3QuoterV2Implementation.js +273 -0
  258. package/dist/generated/abi/UniswapV3QuoterV2Implementation.js.map +1 -0
  259. package/dist/generated/abi/VanaEpochImplementation.cjs +195 -0
  260. package/dist/generated/abi/VanaEpochImplementation.cjs.map +1 -1
  261. package/dist/generated/abi/VanaEpochImplementation.d.ts +151 -0
  262. package/dist/generated/abi/VanaEpochImplementation.js +195 -0
  263. package/dist/generated/abi/VanaEpochImplementation.js.map +1 -1
  264. package/dist/generated/abi/VanaPoolEntityImplementation.cjs +22 -65
  265. package/dist/generated/abi/VanaPoolEntityImplementation.cjs.map +1 -1
  266. package/dist/generated/abi/VanaPoolEntityImplementation.d.ts +17 -51
  267. package/dist/generated/abi/VanaPoolEntityImplementation.js +22 -65
  268. package/dist/generated/abi/VanaPoolEntityImplementation.js.map +1 -1
  269. package/dist/generated/abi/VanaPoolStakingImplementation.cjs +113 -1
  270. package/dist/generated/abi/VanaPoolStakingImplementation.cjs.map +1 -1
  271. package/dist/generated/abi/VanaPoolStakingImplementation.d.ts +85 -1
  272. package/dist/generated/abi/VanaPoolStakingImplementation.js +113 -1
  273. package/dist/generated/abi/VanaPoolStakingImplementation.js.map +1 -1
  274. package/dist/generated/abi/VanaPoolTreasuryImplementation.cjs.map +1 -1
  275. package/dist/generated/abi/VanaPoolTreasuryImplementation.js.map +1 -1
  276. package/dist/generated/abi/VanaRuntimePermissionsImplementation.cjs +759 -0
  277. package/dist/generated/abi/VanaRuntimePermissionsImplementation.cjs.map +1 -0
  278. package/dist/generated/abi/VanaRuntimePermissionsImplementation.d.ts +563 -0
  279. package/dist/generated/abi/VanaRuntimePermissionsImplementation.js +735 -0
  280. package/dist/generated/abi/VanaRuntimePermissionsImplementation.js.map +1 -0
  281. package/dist/generated/abi/VanaRuntimeServersImplementation.cjs +820 -0
  282. package/dist/generated/abi/VanaRuntimeServersImplementation.cjs.map +1 -0
  283. package/dist/generated/abi/VanaRuntimeServersImplementation.d.ts +609 -0
  284. package/dist/generated/abi/VanaRuntimeServersImplementation.js +796 -0
  285. package/dist/generated/abi/VanaRuntimeServersImplementation.js.map +1 -0
  286. package/dist/generated/abi/VanaTreasuryImplementation.cjs +536 -0
  287. package/dist/generated/abi/VanaTreasuryImplementation.cjs.map +1 -0
  288. package/dist/generated/abi/VanaTreasuryImplementation.d.ts +393 -0
  289. package/dist/generated/abi/VanaTreasuryImplementation.js +512 -0
  290. package/dist/generated/abi/VanaTreasuryImplementation.js.map +1 -0
  291. package/dist/generated/abi/WVANAImplementation.cjs +339 -0
  292. package/dist/generated/abi/WVANAImplementation.cjs.map +1 -0
  293. package/dist/generated/abi/WVANAImplementation.d.ts +244 -0
  294. package/dist/generated/abi/WVANAImplementation.js +315 -0
  295. package/dist/generated/abi/WVANAImplementation.js.map +1 -0
  296. package/dist/generated/abi/index.cjs +79 -47
  297. package/dist/generated/abi/index.cjs.map +1 -1
  298. package/dist/generated/abi/index.d.ts +15783 -10449
  299. package/dist/generated/abi/index.js +65 -43
  300. package/dist/generated/abi/index.js.map +1 -1
  301. package/dist/{config → generated}/addresses.cjs +174 -75
  302. package/dist/generated/addresses.cjs.map +1 -0
  303. package/dist/{config → generated}/addresses.d.ts +174 -165
  304. package/dist/{config → generated}/addresses.js +174 -75
  305. package/dist/generated/addresses.js.map +1 -0
  306. package/dist/generated/event-types.cjs.map +1 -1
  307. package/dist/generated/event-types.d.ts +482 -399
  308. package/dist/generated/eventRegistry.cjs +2601 -724
  309. package/dist/generated/eventRegistry.cjs.map +1 -1
  310. package/dist/generated/eventRegistry.d.ts +2 -2
  311. package/dist/generated/eventRegistry.js +2601 -724
  312. package/dist/generated/eventRegistry.js.map +1 -1
  313. package/dist/generated/server/server-exports.cjs +22 -0
  314. package/dist/generated/server/server-exports.cjs.map +1 -1
  315. package/dist/generated/server/server-exports.d.ts +31 -11
  316. package/dist/generated/server/server-exports.js +17 -0
  317. package/dist/generated/server/server-exports.js.map +1 -1
  318. package/dist/generated/server/server.cjs.map +1 -1
  319. package/dist/generated/server/server.d.ts +771 -402
  320. package/dist/generated/subgraph.cjs +797 -32
  321. package/dist/generated/subgraph.cjs.map +1 -1
  322. package/dist/generated/subgraph.d.ts +135 -0
  323. package/dist/generated/subgraph.js +792 -32
  324. package/dist/generated/subgraph.js.map +1 -1
  325. package/dist/index.browser.d.ts +6 -1
  326. package/dist/index.browser.js +26 -1
  327. package/dist/index.browser.js.map +1 -1
  328. package/dist/index.cjs.map +1 -1
  329. package/dist/index.js.map +1 -1
  330. package/dist/index.node.cjs +47 -4
  331. package/dist/index.node.cjs.map +1 -1
  332. package/dist/index.node.d.ts +60 -14
  333. package/dist/index.node.js +42 -3
  334. package/dist/index.node.js.map +1 -1
  335. package/dist/lib/__tests__/redisAtomicStore.test.d.ts +1 -0
  336. package/dist/lib/redisAtomicStore.cjs +201 -0
  337. package/dist/lib/redisAtomicStore.cjs.map +1 -0
  338. package/dist/lib/redisAtomicStore.d.ts +120 -0
  339. package/dist/lib/redisAtomicStore.js +177 -0
  340. package/dist/lib/redisAtomicStore.js.map +1 -0
  341. package/dist/node.cjs.map +1 -1
  342. package/dist/node.d.ts +39 -1
  343. package/dist/node.js.map +1 -1
  344. package/dist/platform/browser.cjs +160 -2
  345. package/dist/platform/browser.cjs.map +1 -1
  346. package/dist/platform/browser.d.ts +232 -12
  347. package/dist/platform/browser.js +160 -2
  348. package/dist/platform/browser.js.map +1 -1
  349. package/dist/platform/interface.cjs.map +1 -1
  350. package/dist/platform/interface.d.ts +283 -90
  351. package/dist/platform/node.cjs +163 -2
  352. package/dist/platform/node.cjs.map +1 -1
  353. package/dist/platform/node.d.ts +69 -6
  354. package/dist/platform/node.js +163 -2
  355. package/dist/platform/node.js.map +1 -1
  356. package/dist/server/relayerHandler.cjs +452 -0
  357. package/dist/server/relayerHandler.cjs.map +1 -0
  358. package/dist/server/relayerHandler.d.ts +69 -0
  359. package/dist/server/relayerHandler.js +428 -0
  360. package/dist/server/relayerHandler.js.map +1 -0
  361. package/dist/storage/index.cjs +3 -0
  362. package/dist/storage/index.cjs.map +1 -1
  363. package/dist/storage/index.d.ts +1 -0
  364. package/dist/storage/index.js +2 -0
  365. package/dist/storage/index.js.map +1 -1
  366. package/dist/storage/manager.cjs +108 -25
  367. package/dist/storage/manager.cjs.map +1 -1
  368. package/dist/storage/manager.d.ts +119 -25
  369. package/dist/storage/manager.js +108 -25
  370. package/dist/storage/manager.js.map +1 -1
  371. package/dist/storage/providers/callback-storage.cjs +86 -15
  372. package/dist/storage/providers/callback-storage.cjs.map +1 -1
  373. package/dist/storage/providers/callback-storage.d.ts +109 -20
  374. package/dist/storage/providers/callback-storage.js +86 -15
  375. package/dist/storage/providers/callback-storage.js.map +1 -1
  376. package/dist/storage/providers/dropbox.cjs +237 -0
  377. package/dist/storage/providers/dropbox.cjs.map +1 -0
  378. package/dist/storage/providers/dropbox.d.ts +39 -0
  379. package/dist/storage/providers/dropbox.js +215 -0
  380. package/dist/storage/providers/dropbox.js.map +1 -0
  381. package/dist/storage/providers/dropbox.test.d.ts +1 -0
  382. package/dist/storage/providers/pinata.cjs.map +1 -1
  383. package/dist/storage/providers/pinata.d.ts +12 -14
  384. package/dist/storage/providers/pinata.js.map +1 -1
  385. package/dist/tests/data-upload-owner-validation.test.d.ts +1 -0
  386. package/dist/tests/factories/mockFactory.d.ts +6 -6
  387. package/dist/tests/fakes/FakeWaitForTransactionEvents.d.ts +2 -2
  388. package/dist/tests/permissions-revoke-relayer.test.d.ts +1 -0
  389. package/dist/tests/permissions-transaction-options.test.d.ts +1 -0
  390. package/dist/tests/read-only-mode.test.d.ts +1 -0
  391. package/dist/tests/relayer-integration.test.d.ts +1 -0
  392. package/dist/tests/relayer-unified.test.d.ts +1 -0
  393. package/dist/tests/server-relayer-handler.test.d.ts +1 -0
  394. package/dist/types/accessSettlement.cjs +17 -0
  395. package/dist/types/accessSettlement.cjs.map +1 -0
  396. package/dist/types/accessSettlement.d.ts +66 -0
  397. package/dist/types/accessSettlement.js +1 -0
  398. package/dist/types/accessSettlement.js.map +1 -0
  399. package/dist/types/atomicStore.cjs +31 -0
  400. package/dist/types/atomicStore.cjs.map +1 -0
  401. package/dist/types/atomicStore.d.ts +236 -0
  402. package/dist/types/atomicStore.js +7 -0
  403. package/dist/types/atomicStore.js.map +1 -0
  404. package/dist/types/blockchain.cjs.map +1 -1
  405. package/dist/types/blockchain.d.ts +39 -11
  406. package/dist/types/chains.cjs.map +1 -1
  407. package/dist/types/chains.d.ts +74 -7
  408. package/dist/types/chains.js.map +1 -1
  409. package/dist/types/config.cjs +10 -0
  410. package/dist/types/config.cjs.map +1 -1
  411. package/dist/types/config.d.ts +217 -220
  412. package/dist/types/config.js +8 -0
  413. package/dist/types/config.js.map +1 -1
  414. package/dist/types/contracts.cjs.map +1 -1
  415. package/dist/types/contracts.d.ts +71 -7
  416. package/dist/types/controller-context.cjs.map +1 -1
  417. package/dist/types/controller-context.d.ts +12 -6
  418. package/dist/types/data.cjs.map +1 -1
  419. package/dist/types/data.d.ts +82 -10
  420. package/dist/types/generics.cjs.map +1 -1
  421. package/dist/types/generics.d.ts +81 -10
  422. package/dist/types/index.cjs +4 -0
  423. package/dist/types/index.cjs.map +1 -1
  424. package/dist/types/index.d.ts +36 -6
  425. package/dist/types/index.js +9 -1
  426. package/dist/types/index.js.map +1 -1
  427. package/dist/types/operationStore.cjs +17 -0
  428. package/dist/types/operationStore.cjs.map +1 -0
  429. package/dist/types/operationStore.d.ts +171 -0
  430. package/dist/types/operationStore.js +1 -0
  431. package/dist/types/operationStore.js.map +1 -0
  432. package/dist/types/operations.cjs +3 -15
  433. package/dist/types/operations.cjs.map +1 -1
  434. package/dist/types/operations.d.ts +131 -39
  435. package/dist/types/operations.js +2 -13
  436. package/dist/types/operations.js.map +1 -1
  437. package/dist/types/options.cjs +17 -0
  438. package/dist/types/options.cjs.map +1 -0
  439. package/dist/types/options.d.ts +308 -0
  440. package/dist/types/options.js +1 -0
  441. package/dist/types/options.js.map +1 -0
  442. package/dist/types/permissions.cjs.map +1 -1
  443. package/dist/types/permissions.d.ts +19 -20
  444. package/dist/types/personal.cjs.map +1 -1
  445. package/dist/types/personal.d.ts +150 -14
  446. package/dist/types/relayer.cjs.map +1 -1
  447. package/dist/types/relayer.d.ts +307 -35
  448. package/dist/types/runtimePermissions.cjs +17 -0
  449. package/dist/types/runtimePermissions.cjs.map +1 -0
  450. package/dist/types/runtimePermissions.d.ts +122 -0
  451. package/dist/types/runtimePermissions.js +1 -0
  452. package/dist/types/runtimePermissions.js.map +1 -0
  453. package/dist/types/storage.cjs.map +1 -1
  454. package/dist/types/storage.d.ts +9 -21
  455. package/dist/types/storage.js.map +1 -1
  456. package/dist/types/utils.cjs.map +1 -1
  457. package/dist/types/utils.d.ts +0 -45
  458. package/dist/utils/__tests__/chainQuery.test.d.ts +1 -0
  459. package/dist/utils/__tests__/subgraphConsistency.test.d.ts +4 -0
  460. package/dist/utils/__tests__/subgraphPagination.test.d.ts +4 -0
  461. package/dist/utils/blockchain/registry.cjs +3 -3
  462. package/dist/utils/blockchain/registry.cjs.map +1 -1
  463. package/dist/utils/blockchain/registry.d.ts +1 -1
  464. package/dist/utils/blockchain/registry.js +3 -3
  465. package/dist/utils/blockchain/registry.js.map +1 -1
  466. package/dist/utils/chainQuery.cjs +107 -0
  467. package/dist/utils/chainQuery.cjs.map +1 -0
  468. package/dist/utils/chainQuery.d.ts +31 -0
  469. package/dist/utils/chainQuery.js +82 -0
  470. package/dist/utils/chainQuery.js.map +1 -0
  471. package/dist/utils/grantFiles.cjs +4 -1
  472. package/dist/utils/grantFiles.cjs.map +1 -1
  473. package/dist/utils/grantFiles.d.ts +10 -20
  474. package/dist/utils/grantFiles.js +4 -1
  475. package/dist/utils/grantFiles.js.map +1 -1
  476. package/dist/utils/grantValidation.cjs.map +1 -1
  477. package/dist/utils/grantValidation.d.ts +95 -16
  478. package/dist/utils/grantValidation.js.map +1 -1
  479. package/dist/utils/grants.cjs.map +1 -1
  480. package/dist/utils/grants.d.ts +93 -12
  481. package/dist/utils/grants.js.map +1 -1
  482. package/dist/utils/ipfs.cjs +2 -4
  483. package/dist/utils/ipfs.cjs.map +1 -1
  484. package/dist/utils/ipfs.d.ts +1 -1
  485. package/dist/utils/ipfs.js +2 -4
  486. package/dist/utils/ipfs.js.map +1 -1
  487. package/dist/utils/lazy-import.cjs.map +1 -1
  488. package/dist/utils/lazy-import.d.ts +32 -7
  489. package/dist/utils/lazy-import.js.map +1 -1
  490. package/dist/utils/multicall.cjs +1 -1
  491. package/dist/utils/multicall.cjs.map +1 -1
  492. package/dist/utils/multicall.js +1 -1
  493. package/dist/utils/multicall.js.map +1 -1
  494. package/dist/utils/runtimeGrantFiles.cjs +84 -0
  495. package/dist/utils/runtimeGrantFiles.cjs.map +1 -0
  496. package/dist/utils/runtimeGrantFiles.d.ts +66 -0
  497. package/dist/utils/runtimeGrantFiles.js +58 -0
  498. package/dist/utils/runtimeGrantFiles.js.map +1 -0
  499. package/dist/utils/signatureCache.cjs +8 -2
  500. package/dist/utils/signatureCache.cjs.map +1 -1
  501. package/dist/utils/signatureCache.d.ts +49 -8
  502. package/dist/utils/signatureCache.js +8 -2
  503. package/dist/utils/signatureCache.js.map +1 -1
  504. package/dist/utils/subgraphConsistency.cjs +184 -0
  505. package/dist/utils/subgraphConsistency.cjs.map +1 -0
  506. package/dist/utils/subgraphConsistency.d.ts +65 -0
  507. package/dist/utils/subgraphConsistency.js +155 -0
  508. package/dist/utils/subgraphConsistency.js.map +1 -0
  509. package/dist/utils/subgraphMetaCache.cjs +101 -0
  510. package/dist/utils/subgraphMetaCache.cjs.map +1 -0
  511. package/dist/utils/subgraphMetaCache.d.ts +56 -0
  512. package/dist/utils/subgraphMetaCache.js +76 -0
  513. package/dist/utils/subgraphMetaCache.js.map +1 -0
  514. package/dist/utils/subgraphPagination.cjs +104 -0
  515. package/dist/utils/subgraphPagination.cjs.map +1 -0
  516. package/dist/utils/subgraphPagination.d.ts +78 -0
  517. package/dist/utils/subgraphPagination.js +78 -0
  518. package/dist/utils/subgraphPagination.js.map +1 -0
  519. package/dist/utils/transactionHelpers.cjs.map +1 -1
  520. package/dist/utils/transactionHelpers.d.ts +12 -12
  521. package/dist/utils/transactionHelpers.js.map +1 -1
  522. package/dist/utils/typedDataConverter.cjs.map +1 -1
  523. package/dist/utils/typedDataConverter.d.ts +39 -3
  524. package/dist/utils/typedDataConverter.js.map +1 -1
  525. package/dist/utils/urlResolver.cjs +7 -0
  526. package/dist/utils/urlResolver.cjs.map +1 -1
  527. package/dist/utils/urlResolver.d.ts +22 -4
  528. package/dist/utils/urlResolver.js +7 -0
  529. package/dist/utils/urlResolver.js.map +1 -1
  530. package/dist/utils/wallet.cjs +63 -0
  531. package/dist/utils/wallet.cjs.map +1 -0
  532. package/dist/utils/wallet.d.ts +94 -0
  533. package/dist/utils/wallet.js +37 -0
  534. package/dist/utils/wallet.js.map +1 -0
  535. package/package.json +7 -2
  536. package/dist/config/addresses.cjs.map +0 -1
  537. package/dist/config/addresses.js.map +0 -1
  538. package/dist/generated/abi/DLPTreasuryImplementation.cjs.map +0 -1
  539. package/dist/generated/abi/DLPTreasuryImplementation.js.map +0 -1
  540. package/dist/server/handler.cjs +0 -101
  541. package/dist/server/handler.cjs.map +0 -1
  542. package/dist/server/handler.d.ts +0 -87
  543. package/dist/server/handler.js +0 -77
  544. package/dist/server/handler.js.map +0 -1
  545. /package/dist/{tests/server-handler.test.d.ts → client/__tests__/enhancedResponse.test.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/types/runtimePermissions.ts"],"sourcesContent":["import type { Address, Hash } from \"viem\";\n\n/**\n * Parameters for creating a runtime permission grant\n *\n * @remarks\n * Defines access permissions for data consumers to execute operations on datasets\n * via Vana Runtime. Similar to GrantPermissionParams but for VanaRuntimePermissions contract.\n *\n * @category Runtime Permissions\n * @example\n * ```typescript\n * const params: RuntimePermissionParams = {\n * datasetId: 123n,\n * grantee: \"0x...\",\n * task: \"vanaorg/vana-task-demo:latest\",\n * operation: \"aggregate_keywords\",\n * pricing: { price_per_file_vana: 0.1 }\n * };\n * ```\n */\nexport interface RuntimePermissionParams {\n /** Dataset ID that this permission applies to */\n datasetId: bigint;\n\n /** Address of the data consumer (grantee) */\n grantee: Address;\n\n /** Task identifier (e.g., \"thinker/task:v1\") */\n task: string;\n\n /** Operation name (e.g., \"train\", \"aggregate_keywords\") */\n operation: string;\n\n /** Pricing configuration */\n pricing: {\n /** Price per file in VANA */\n price_per_file_vana: number;\n /** Optional minimum price in VANA */\n minimum_price_vana?: number;\n /** Optional maximum price in VANA */\n maximum_price_vana?: number;\n };\n\n /** Operation parameters and constraints */\n parameters?: Record<string, unknown>;\n\n /** Optional: Pre-uploaded grant URL (IPFS) */\n grantUrl?: string;\n}\n\n/**\n * Grant file structure for runtime permissions\n *\n * @remarks\n * Stored on IPFS and referenced on-chain via the grant field.\n * Similar to GrantFile but includes task identifier and pricing configuration.\n *\n * @category Runtime Permissions\n * @example\n * ```typescript\n * const grantFile: RuntimeGrantFile = {\n * grantee: \"0x...\",\n * task: \"thinker/task:v1\",\n * operation: \"aggregate_keywords\",\n * pricing: { price_per_file_vana: 0.1 },\n * parameters: {}\n * };\n * ```\n */\nexport interface RuntimeGrantFile {\n /** Address of the data consumer (grantee) */\n grantee: Address;\n\n /** Task identifier (e.g., \"thinker/task:v1\") */\n task: string;\n\n /** Operation name (e.g., \"aggregate_keywords\") */\n operation: string;\n\n /** Pricing configuration */\n pricing: {\n /** Price per file in VANA */\n price_per_file_vana: number;\n /** Optional minimum price in VANA */\n minimum_price_vana?: number;\n /** Optional maximum price in VANA */\n maximum_price_vana?: number;\n };\n\n /** Operation parameters and constraints */\n parameters?: Record<string, unknown>;\n}\n\n/**\n * On-chain permission structure\n *\n * @remarks\n * Returned by VanaRuntimePermissions contract methods.\n * The grant field contains an IPFS hash referencing the detailed RuntimeGrantFile.\n *\n * @category Runtime Permissions\n */\nexport interface RuntimePermission {\n /** Unique permission identifier */\n id: bigint;\n\n /** Dataset this permission applies to */\n datasetId: bigint;\n\n /** Grantee identifier (consumer ID) */\n granteeId: bigint;\n\n /** IPFS hash of the grant file */\n grant: string;\n\n /** Nonce for replay protection */\n nonce: bigint;\n\n /** Block number when permission becomes active */\n startBlock: bigint;\n\n /** Block number when permission expires */\n endBlock: bigint;\n}\n\n/**\n * Result from creating a permission\n *\n * @remarks\n * Contains the permission ID, transaction hash, and grant URL for reference.\n *\n * @category Runtime Permissions\n */\nexport interface RuntimePermissionResult {\n /** On-chain permission ID */\n permissionId: bigint;\n\n /** Transaction hash */\n hash: Hash;\n\n /** IPFS URL of the grant file */\n grantUrl: string;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -0,0 +1,122 @@
1
+ import type { Address, Hash } from "viem";
2
+ /**
3
+ * Parameters for creating a runtime permission grant
4
+ *
5
+ * @remarks
6
+ * Defines access permissions for data consumers to execute operations on datasets
7
+ * via Vana Runtime. Similar to GrantPermissionParams but for VanaRuntimePermissions contract.
8
+ *
9
+ * @category Runtime Permissions
10
+ * @example
11
+ * ```typescript
12
+ * const params: RuntimePermissionParams = {
13
+ * datasetId: 123n,
14
+ * grantee: "0x...",
15
+ * task: "vanaorg/vana-task-demo:latest",
16
+ * operation: "aggregate_keywords",
17
+ * pricing: { price_per_file_vana: 0.1 }
18
+ * };
19
+ * ```
20
+ */
21
+ export interface RuntimePermissionParams {
22
+ /** Dataset ID that this permission applies to */
23
+ datasetId: bigint;
24
+ /** Address of the data consumer (grantee) */
25
+ grantee: Address;
26
+ /** Task identifier (e.g., "thinker/task:v1") */
27
+ task: string;
28
+ /** Operation name (e.g., "train", "aggregate_keywords") */
29
+ operation: string;
30
+ /** Pricing configuration */
31
+ pricing: {
32
+ /** Price per file in VANA */
33
+ price_per_file_vana: number;
34
+ /** Optional minimum price in VANA */
35
+ minimum_price_vana?: number;
36
+ /** Optional maximum price in VANA */
37
+ maximum_price_vana?: number;
38
+ };
39
+ /** Operation parameters and constraints */
40
+ parameters?: Record<string, unknown>;
41
+ /** Optional: Pre-uploaded grant URL (IPFS) */
42
+ grantUrl?: string;
43
+ }
44
+ /**
45
+ * Grant file structure for runtime permissions
46
+ *
47
+ * @remarks
48
+ * Stored on IPFS and referenced on-chain via the grant field.
49
+ * Similar to GrantFile but includes task identifier and pricing configuration.
50
+ *
51
+ * @category Runtime Permissions
52
+ * @example
53
+ * ```typescript
54
+ * const grantFile: RuntimeGrantFile = {
55
+ * grantee: "0x...",
56
+ * task: "thinker/task:v1",
57
+ * operation: "aggregate_keywords",
58
+ * pricing: { price_per_file_vana: 0.1 },
59
+ * parameters: {}
60
+ * };
61
+ * ```
62
+ */
63
+ export interface RuntimeGrantFile {
64
+ /** Address of the data consumer (grantee) */
65
+ grantee: Address;
66
+ /** Task identifier (e.g., "thinker/task:v1") */
67
+ task: string;
68
+ /** Operation name (e.g., "aggregate_keywords") */
69
+ operation: string;
70
+ /** Pricing configuration */
71
+ pricing: {
72
+ /** Price per file in VANA */
73
+ price_per_file_vana: number;
74
+ /** Optional minimum price in VANA */
75
+ minimum_price_vana?: number;
76
+ /** Optional maximum price in VANA */
77
+ maximum_price_vana?: number;
78
+ };
79
+ /** Operation parameters and constraints */
80
+ parameters?: Record<string, unknown>;
81
+ }
82
+ /**
83
+ * On-chain permission structure
84
+ *
85
+ * @remarks
86
+ * Returned by VanaRuntimePermissions contract methods.
87
+ * The grant field contains an IPFS hash referencing the detailed RuntimeGrantFile.
88
+ *
89
+ * @category Runtime Permissions
90
+ */
91
+ export interface RuntimePermission {
92
+ /** Unique permission identifier */
93
+ id: bigint;
94
+ /** Dataset this permission applies to */
95
+ datasetId: bigint;
96
+ /** Grantee identifier (consumer ID) */
97
+ granteeId: bigint;
98
+ /** IPFS hash of the grant file */
99
+ grant: string;
100
+ /** Nonce for replay protection */
101
+ nonce: bigint;
102
+ /** Block number when permission becomes active */
103
+ startBlock: bigint;
104
+ /** Block number when permission expires */
105
+ endBlock: bigint;
106
+ }
107
+ /**
108
+ * Result from creating a permission
109
+ *
110
+ * @remarks
111
+ * Contains the permission ID, transaction hash, and grant URL for reference.
112
+ *
113
+ * @category Runtime Permissions
114
+ */
115
+ export interface RuntimePermissionResult {
116
+ /** On-chain permission ID */
117
+ permissionId: bigint;
118
+ /** Transaction hash */
119
+ hash: Hash;
120
+ /** IPFS URL of the grant file */
121
+ grantUrl: string;
122
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=runtimePermissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/storage.ts"],"sourcesContent":["/**\n * Interface for storage providers that handle file upload, download, and management operations.\n *\n * Storage providers abstract different storage backends (IPFS, Google Drive, Pinata, etc.)\n * behind a common interface. The SDK uses these providers to store encrypted user data\n * and permission grants in a decentralized manner.\n *\n * @category Storage\n * @example\n * ```typescript\n * // Implement a custom storage provider\n * class MyStorageProvider implements StorageProvider {\n * async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n * // Custom upload logic\n * return { url: 'https://my-storage.com/file.dat', size: file.size };\n * }\n *\n * async download(url: string): Promise<Blob> {\n * // Custom download logic\n * const response = await fetch(url);\n * return response.blob();\n * }\n *\n * async list(options?: StorageListOptions): Promise<StorageFile[]> {\n * // Return list of files\n * return [];\n * }\n *\n * async delete(url: string): Promise<void> {\n * // Delete file implementation\n * }\n * }\n * ```\n */\nexport interface StorageProvider {\n /**\n * Upload a file to the storage provider\n *\n * @param file - The file to upload\n * @param filename - Optional custom filename\n * @returns Promise with storage URL and metadata\n */\n upload(file: Blob, filename?: string): Promise<StorageUploadResult>;\n\n /**\n * Download a file from the storage provider\n *\n * @param url - The storage URL\n * @returns Promise with file blob\n */\n download(url: string): Promise<Blob>;\n\n /**\n * List files from the storage provider\n *\n * @param options - Optional filtering and pagination\n * @returns Promise with file list\n */\n list(options?: StorageListOptions): Promise<StorageFile[]>;\n\n /**\n * Delete a file from the storage provider\n *\n * @param url - The storage URL\n * @returns Promise with success status\n */\n delete(url: string): Promise<boolean>;\n\n /**\n * Get provider-specific configuration\n *\n * @returns Provider configuration object\n */\n getConfig(): StorageProviderConfig;\n}\n\nexport interface StorageUploadResult {\n /** Public URL to access the file */\n url: string;\n /** File size in bytes */\n size: number;\n /** Content type/MIME type */\n contentType: string;\n /** Provider-specific metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface StorageFile {\n /** File identifier */\n id: string;\n /** File name */\n name: string;\n /** Public URL to access the file */\n url: string;\n /** File size in bytes */\n size: number;\n /** Content type/MIME type */\n contentType: string;\n /** Upload timestamp */\n createdAt: Date;\n /** Provider-specific metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface StorageListOptions {\n /** Maximum number of files to return */\n limit?: number;\n /** Pagination cursor/offset */\n offset?: string | number;\n /** Filter by file name pattern */\n namePattern?: string;\n /** Filter by content type */\n contentType?: string;\n}\n\nexport interface StorageProviderConfig {\n /** Provider name */\n name: string;\n /** Provider type */\n type: string;\n /** Whether authentication is required */\n requiresAuth: boolean;\n /** Supported features */\n features: {\n upload: boolean;\n download: boolean;\n list: boolean;\n delete: boolean;\n };\n}\n\nexport class StorageError extends Error {\n public readonly code: string;\n public readonly provider: string;\n // The 'cause' property is now inherited from the base Error class\n\n constructor(\n message: string,\n code: string,\n provider: string,\n options?: { cause?: Error },\n ) {\n // Pass the options object with 'cause' to the super constructor\n super(message, options);\n this.name = \"StorageError\";\n this.code = code;\n this.provider = provider;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmIO,MAAM,qBAAqB,MAAM;AAAA,EACtB;AAAA,EACA;AAAA;AAAA,EAGhB,YACE,SACA,MACA,UACA,SACA;AAEA,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,WAAW;AAAA,EAClB;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/types/storage.ts"],"sourcesContent":["/**\n * Defines interface for storage provider implementations.\n *\n * @remarks\n * Abstracts storage backends (IPFS, Google Drive, Pinata) behind\n * common interface for encrypted file operations.\n *\n * @category Storage\n * @example\n * ```typescript\n * class MyStorage implements StorageProvider {\n * async upload(file: Blob): Promise<StorageUploadResult> {\n * const url = await uploadToService(file);\n * return { url, size: file.size, contentType: file.type };\n * }\n *\n * async download(url: string): Promise<Blob> {\n * return fetch(url).then(r => r.blob());\n * }\n * }\n * ```\n */\nexport interface StorageProvider {\n /**\n * Upload a file to the storage provider\n *\n * @param file - The file to upload\n * @param filename - Optional custom filename\n * @returns Promise with storage URL and metadata\n */\n upload(file: Blob, filename?: string): Promise<StorageUploadResult>;\n\n /**\n * Download a file from the storage provider\n *\n * @param url - The storage URL\n * @returns Promise with file blob\n */\n download(url: string): Promise<Blob>;\n\n /**\n * List files from the storage provider\n *\n * @param options - Optional filtering and pagination\n * @returns Promise with file list\n */\n list(options?: StorageListOptions): Promise<StorageFile[]>;\n\n /**\n * Delete a file from the storage provider\n *\n * @param url - The storage URL\n * @returns Promise with success status\n */\n delete(url: string): Promise<boolean>;\n\n /**\n * Get provider-specific configuration\n *\n * @returns Provider configuration object\n */\n getConfig(): StorageProviderConfig;\n}\n\nexport interface StorageUploadResult {\n /** Public URL to access the file */\n url: string;\n /** File size in bytes */\n size: number;\n /** Content type/MIME type */\n contentType: string;\n /** Provider-specific metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface StorageFile {\n /** File identifier */\n id: string;\n /** File name */\n name: string;\n /** Public URL to access the file */\n url: string;\n /** File size in bytes */\n size: number;\n /** Content type/MIME type */\n contentType: string;\n /** Upload timestamp */\n createdAt: Date;\n /** Provider-specific metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface StorageListOptions {\n /** Maximum number of files to return */\n limit?: number;\n /** Pagination cursor/offset */\n offset?: string | number;\n /** Filter by file name pattern */\n namePattern?: string;\n /** Filter by content type */\n contentType?: string;\n}\n\nexport interface StorageProviderConfig {\n /** Provider name */\n name: string;\n /** Provider type */\n type: string;\n /** Whether authentication is required */\n requiresAuth: boolean;\n /** Supported features */\n features: {\n upload: boolean;\n download: boolean;\n list: boolean;\n delete: boolean;\n };\n}\n\nexport class StorageError extends Error {\n public readonly code: string;\n public readonly provider: string;\n // The 'cause' property is now inherited from the base Error class\n\n constructor(\n message: string,\n code: string,\n provider: string,\n options?: { cause?: Error },\n ) {\n // Pass the options object with 'cause' to the super constructor\n super(message, options);\n this.name = \"StorageError\";\n this.code = code;\n this.provider = provider;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuHO,MAAM,qBAAqB,MAAM;AAAA,EACtB;AAAA,EACA;AAAA;AAAA,EAGhB,YACE,SACA,MACA,UACA,SACA;AAEA,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,WAAW;AAAA,EAClB;AACF;","names":[]}
@@ -1,33 +1,21 @@
1
1
  /**
2
- * Interface for storage providers that handle file upload, download, and management operations.
2
+ * Defines interface for storage provider implementations.
3
3
  *
4
- * Storage providers abstract different storage backends (IPFS, Google Drive, Pinata, etc.)
5
- * behind a common interface. The SDK uses these providers to store encrypted user data
6
- * and permission grants in a decentralized manner.
4
+ * @remarks
5
+ * Abstracts storage backends (IPFS, Google Drive, Pinata) behind
6
+ * common interface for encrypted file operations.
7
7
  *
8
8
  * @category Storage
9
9
  * @example
10
10
  * ```typescript
11
- * // Implement a custom storage provider
12
- * class MyStorageProvider implements StorageProvider {
13
- * async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {
14
- * // Custom upload logic
15
- * return { url: 'https://my-storage.com/file.dat', size: file.size };
11
+ * class MyStorage implements StorageProvider {
12
+ * async upload(file: Blob): Promise<StorageUploadResult> {
13
+ * const url = await uploadToService(file);
14
+ * return { url, size: file.size, contentType: file.type };
16
15
  * }
17
16
  *
18
17
  * async download(url: string): Promise<Blob> {
19
- * // Custom download logic
20
- * const response = await fetch(url);
21
- * return response.blob();
22
- * }
23
- *
24
- * async list(options?: StorageListOptions): Promise<StorageFile[]> {
25
- * // Return list of files
26
- * return [];
27
- * }
28
- *
29
- * async delete(url: string): Promise<void> {
30
- * // Delete file implementation
18
+ * return fetch(url).then(r => r.blob());
31
19
  * }
32
20
  * }
33
21
  * ```
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/storage.ts"],"sourcesContent":["/**\n * Interface for storage providers that handle file upload, download, and management operations.\n *\n * Storage providers abstract different storage backends (IPFS, Google Drive, Pinata, etc.)\n * behind a common interface. The SDK uses these providers to store encrypted user data\n * and permission grants in a decentralized manner.\n *\n * @category Storage\n * @example\n * ```typescript\n * // Implement a custom storage provider\n * class MyStorageProvider implements StorageProvider {\n * async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n * // Custom upload logic\n * return { url: 'https://my-storage.com/file.dat', size: file.size };\n * }\n *\n * async download(url: string): Promise<Blob> {\n * // Custom download logic\n * const response = await fetch(url);\n * return response.blob();\n * }\n *\n * async list(options?: StorageListOptions): Promise<StorageFile[]> {\n * // Return list of files\n * return [];\n * }\n *\n * async delete(url: string): Promise<void> {\n * // Delete file implementation\n * }\n * }\n * ```\n */\nexport interface StorageProvider {\n /**\n * Upload a file to the storage provider\n *\n * @param file - The file to upload\n * @param filename - Optional custom filename\n * @returns Promise with storage URL and metadata\n */\n upload(file: Blob, filename?: string): Promise<StorageUploadResult>;\n\n /**\n * Download a file from the storage provider\n *\n * @param url - The storage URL\n * @returns Promise with file blob\n */\n download(url: string): Promise<Blob>;\n\n /**\n * List files from the storage provider\n *\n * @param options - Optional filtering and pagination\n * @returns Promise with file list\n */\n list(options?: StorageListOptions): Promise<StorageFile[]>;\n\n /**\n * Delete a file from the storage provider\n *\n * @param url - The storage URL\n * @returns Promise with success status\n */\n delete(url: string): Promise<boolean>;\n\n /**\n * Get provider-specific configuration\n *\n * @returns Provider configuration object\n */\n getConfig(): StorageProviderConfig;\n}\n\nexport interface StorageUploadResult {\n /** Public URL to access the file */\n url: string;\n /** File size in bytes */\n size: number;\n /** Content type/MIME type */\n contentType: string;\n /** Provider-specific metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface StorageFile {\n /** File identifier */\n id: string;\n /** File name */\n name: string;\n /** Public URL to access the file */\n url: string;\n /** File size in bytes */\n size: number;\n /** Content type/MIME type */\n contentType: string;\n /** Upload timestamp */\n createdAt: Date;\n /** Provider-specific metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface StorageListOptions {\n /** Maximum number of files to return */\n limit?: number;\n /** Pagination cursor/offset */\n offset?: string | number;\n /** Filter by file name pattern */\n namePattern?: string;\n /** Filter by content type */\n contentType?: string;\n}\n\nexport interface StorageProviderConfig {\n /** Provider name */\n name: string;\n /** Provider type */\n type: string;\n /** Whether authentication is required */\n requiresAuth: boolean;\n /** Supported features */\n features: {\n upload: boolean;\n download: boolean;\n list: boolean;\n delete: boolean;\n };\n}\n\nexport class StorageError extends Error {\n public readonly code: string;\n public readonly provider: string;\n // The 'cause' property is now inherited from the base Error class\n\n constructor(\n message: string,\n code: string,\n provider: string,\n options?: { cause?: Error },\n ) {\n // Pass the options object with 'cause' to the super constructor\n super(message, options);\n this.name = \"StorageError\";\n this.code = code;\n this.provider = provider;\n }\n}\n"],"mappings":"AAmIO,MAAM,qBAAqB,MAAM;AAAA,EACtB;AAAA,EACA;AAAA;AAAA,EAGhB,YACE,SACA,MACA,UACA,SACA;AAEA,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,WAAW;AAAA,EAClB;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/types/storage.ts"],"sourcesContent":["/**\n * Defines interface for storage provider implementations.\n *\n * @remarks\n * Abstracts storage backends (IPFS, Google Drive, Pinata) behind\n * common interface for encrypted file operations.\n *\n * @category Storage\n * @example\n * ```typescript\n * class MyStorage implements StorageProvider {\n * async upload(file: Blob): Promise<StorageUploadResult> {\n * const url = await uploadToService(file);\n * return { url, size: file.size, contentType: file.type };\n * }\n *\n * async download(url: string): Promise<Blob> {\n * return fetch(url).then(r => r.blob());\n * }\n * }\n * ```\n */\nexport interface StorageProvider {\n /**\n * Upload a file to the storage provider\n *\n * @param file - The file to upload\n * @param filename - Optional custom filename\n * @returns Promise with storage URL and metadata\n */\n upload(file: Blob, filename?: string): Promise<StorageUploadResult>;\n\n /**\n * Download a file from the storage provider\n *\n * @param url - The storage URL\n * @returns Promise with file blob\n */\n download(url: string): Promise<Blob>;\n\n /**\n * List files from the storage provider\n *\n * @param options - Optional filtering and pagination\n * @returns Promise with file list\n */\n list(options?: StorageListOptions): Promise<StorageFile[]>;\n\n /**\n * Delete a file from the storage provider\n *\n * @param url - The storage URL\n * @returns Promise with success status\n */\n delete(url: string): Promise<boolean>;\n\n /**\n * Get provider-specific configuration\n *\n * @returns Provider configuration object\n */\n getConfig(): StorageProviderConfig;\n}\n\nexport interface StorageUploadResult {\n /** Public URL to access the file */\n url: string;\n /** File size in bytes */\n size: number;\n /** Content type/MIME type */\n contentType: string;\n /** Provider-specific metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface StorageFile {\n /** File identifier */\n id: string;\n /** File name */\n name: string;\n /** Public URL to access the file */\n url: string;\n /** File size in bytes */\n size: number;\n /** Content type/MIME type */\n contentType: string;\n /** Upload timestamp */\n createdAt: Date;\n /** Provider-specific metadata */\n metadata?: Record<string, unknown>;\n}\n\nexport interface StorageListOptions {\n /** Maximum number of files to return */\n limit?: number;\n /** Pagination cursor/offset */\n offset?: string | number;\n /** Filter by file name pattern */\n namePattern?: string;\n /** Filter by content type */\n contentType?: string;\n}\n\nexport interface StorageProviderConfig {\n /** Provider name */\n name: string;\n /** Provider type */\n type: string;\n /** Whether authentication is required */\n requiresAuth: boolean;\n /** Supported features */\n features: {\n upload: boolean;\n download: boolean;\n list: boolean;\n delete: boolean;\n };\n}\n\nexport class StorageError extends Error {\n public readonly code: string;\n public readonly provider: string;\n // The 'cause' property is now inherited from the base Error class\n\n constructor(\n message: string,\n code: string,\n provider: string,\n options?: { cause?: Error },\n ) {\n // Pass the options object with 'cause' to the super constructor\n super(message, options);\n this.name = \"StorageError\";\n this.code = code;\n this.provider = provider;\n }\n}\n"],"mappings":"AAuHO,MAAM,qBAAqB,MAAM;AAAA,EACtB;AAAA,EACA;AAAA;AAAA,EAGhB,YACE,SACA,MACA,UACA,SACA;AAEA,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AACZ,SAAK,OAAO;AACZ,SAAK,WAAW;AAAA,EAClB;AACF;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/utils.ts"],"sourcesContent":["import type { Address, Hash } from \"viem\";\n\n/**\n * Makes all properties in T optional except for those in K\n *\n * @remarks\n * This utility type is useful when you want to create a variant of an interface\n * where most properties are optional, but specific properties remain required.\n * Commonly used for update operations where only certain fields must be provided.\n *\n * @example\n * ```typescript\n * interface User {\n * id: string;\n * name: string;\n * email: string;\n * age: number;\n * }\n *\n * // Only 'id' is required, all other properties are optional\n * type UserUpdate = PartialExcept<User, 'id'>;\n *\n * const update: UserUpdate = {\n * id: '123', // Required\n * name: 'John' // Optional\n * // email and age are also optional\n * };\n * ```\n * @category Reference\n */\nexport type PartialExcept<T, K extends keyof T> = Partial<T> & Pick<T, K>;\n\n/**\n * Makes all properties in T required except for those in K\n *\n * @remarks\n * This utility type is useful when you want to create a variant of an interface\n * where most properties are required, but specific properties remain optional.\n * Commonly used for creation operations where most fields are mandatory.\n *\n * @example\n * ```typescript\n * interface Config {\n * apiUrl: string;\n * timeout?: number;\n * retries?: number;\n * debug?: boolean;\n * }\n *\n * // All properties required except 'debug'\n * type StrictConfig = RequiredExcept<Config, 'debug'>;\n *\n * const config: StrictConfig = {\n * apiUrl: 'https://api.vana.com', // Required\n * timeout: 5000, // Required (was optional, now required)\n * retries: 3, // Required (was optional, now required)\n * // debug remains optional\n * };\n * ```\n * @category Reference\n */\nexport type RequiredExcept<T, K extends keyof T> = Required<T> &\n Partial<Pick<T, K>>;\n\n/**\n * Extracts the return type of a promise\n *\n * @remarks\n * This utility type unwraps the type contained within a Promise.\n * If the type is not a Promise, it returns the type unchanged.\n * Note: TypeScript 4.5+ includes a built-in Awaited type with similar functionality.\n *\n * @example\n * ```typescript\n * type AsyncString = Promise<string>;\n * type SyncString = string;\n *\n * // Extracts 'string' from Promise<string>\n * type Result1 = Awaited<AsyncString>; // string\n *\n * // Returns 'string' unchanged since it's not a Promise\n * type Result2 = Awaited<SyncString>; // string\n *\n * // Practical usage with async functions\n * async function fetchUser(): Promise<{ id: string; name: string }> {\n * // ...\n * }\n *\n * type User = Awaited<ReturnType<typeof fetchUser>>; // { id: string; name: string }\n * ```\n * @category Reference\n */\nexport type Awaited<T> = T extends Promise<infer U> ? U : T;\n\n/**\n * Creates a type that accepts either T or a Promise<T>\n *\n * @remarks\n * This utility type is useful for functions that can work with both\n * synchronous and asynchronous values. It allows flexible APIs that\n * can accept immediate values or promises that resolve to those values.\n *\n * @example\n * ```typescript\n * // Function that accepts either a value or a promise of that value\n * async function processData(data: MaybePromise<string>): Promise<string> {\n * // await works on both promises and regular values\n * const resolved = await data;\n * return resolved.toUpperCase();\n * }\n *\n * // Both calls are valid:\n * processData('hello'); // Synchronous value\n * processData(Promise.resolve('world')); // Asynchronous value\n *\n * // Common use case in SDK callbacks\n * interface StorageProvider {\n * // Provider can implement sync or async file reading\n * read(path: string): MaybePromise<Buffer>;\n * }\n * ```\n * @category Reference\n */\nexport type MaybePromise<T> = T | Promise<T>;\n\n/**\n * Creates a type that accepts either T or an array of T\n *\n * @remarks\n * This utility type is useful for functions that can accept either a single\n * value or an array of values, providing a more flexible API. The implementation\n * can normalize the input to always work with arrays internally.\n *\n * @example\n * ```typescript\n * // Function that accepts either a single ID or multiple IDs\n * function deleteItems(ids: MaybeArray<string>): void {\n * // Normalize to array\n * const idArray = Array.isArray(ids) ? ids : [ids];\n * idArray.forEach(id => console.log(`Deleting ${id}`));\n * }\n *\n * // Both calls are valid:\n * deleteItems('item-1'); // Single item\n * deleteItems(['item-1', 'item-2', 'item-3']); // Multiple items\n *\n * // Common use case in permissions\n * interface GrantPermissionsParams {\n * permissions: MaybeArray<Permission>;\n * }\n * ```\n * @category Reference\n */\nexport type MaybeArray<T> = T | T[];\n\n/**\n * Pagination parameters for controlling result set size and navigation.\n *\n * Used across SDK methods that return lists of items to control how many items\n * are returned and to navigate through large result sets efficiently.\n *\n * @category Reference\n * @example\n * ```typescript\n * const pagination: PaginationParams = {\n * limit: 20, // Return 20 items\n * offset: 40, // Skip first 40 items (page 3)\n * cursor: 'eyJpZCI6MTIzfQ==' // Or use cursor-based pagination\n * };\n *\n * const files = await vana.data.getUserFiles({\n * owner: userAddress,\n * pagination\n * });\n * ```\n */\nexport interface PaginationParams {\n /** Maximum number of items to return */\n limit?: number;\n /** Number of items to skip */\n offset?: number;\n /** Cursor for cursor-based pagination */\n cursor?: string;\n}\n\n/**\n * Pagination result containing items and metadata for navigating large datasets.\n *\n * @remarks\n * This interface standardizes paginated responses across the SDK, providing\n * consistent metadata for implementing pagination UI components and handling\n * multi-page data fetching. Supports both offset-based and cursor-based pagination.\n *\n * @example\n * ```typescript\n * // Fetching paginated user files\n * async function getAllUserFiles(userAddress: string): Promise<File[]> {\n * const allFiles: File[] = [];\n * let cursor: string | undefined;\n *\n * do {\n * const result: PaginationResult<File> = await vana.data.getUserFiles({\n * owner: userAddress,\n * pagination: { limit: 50, cursor }\n * });\n *\n * allFiles.push(...result.items);\n * cursor = result.nextCursor;\n *\n * console.log(`Fetched ${result.count} of ${result.total} files`);\n * } while (result.hasMore);\n *\n * return allFiles;\n * }\n * ```\n * @category Reference\n */\nexport interface PaginationResult<T> {\n /** Array of items */\n items: T[];\n /** Total number of items available */\n total: number;\n /** Number of items returned */\n count: number;\n /** Whether there are more items available */\n hasMore: boolean;\n /** Cursor for next page */\n nextCursor?: string;\n}\n\n/**\n * Block range parameters for filtering blockchain events and transactions.\n *\n * @remarks\n * Used to specify a range of blocks when querying blockchain data.\n * Both parameters are optional - omitting fromBlock starts from genesis,\n * omitting toBlock goes to the latest block. Be cautious with large ranges\n * as they may result in heavy RPC loads or timeouts.\n *\n * @example\n * ```typescript\n * // Get events from the last 1000 blocks\n * const currentBlock = await vana.protocol.getBlockNumber();\n * const events = await vana.protocol.getEvents({\n * blockRange: {\n * fromBlock: currentBlock - 1000n,\n * toBlock: currentBlock\n * }\n * });\n *\n * // Get all historical events (use with caution)\n * const allEvents = await vana.protocol.getEvents({\n * blockRange: {\n * fromBlock: 0n\n * // toBlock omitted = up to latest\n * }\n * });\n * ```\n * @category Reference\n */\nexport interface BlockRange {\n /** Starting block number */\n fromBlock?: bigint;\n /** Ending block number */\n toBlock?: bigint;\n}\n\n/**\n * Transaction options for customizing blockchain transaction parameters.\n *\n * @remarks\n * Provides fine-grained control over transaction execution. Supports both\n * legacy (gasPrice) and EIP-1559 (maxFeePerGas) transaction types. When\n * not specified, the SDK will use appropriate defaults based on network\n * conditions. Use these options to optimize for speed or cost.\n *\n * @example\n * ```typescript\n * // High priority transaction with EIP-1559 pricing\n * await vana.permissions.grant(params, {\n * maxFeePerGas: 100n * 10n ** 9n, // 100 gwei\n * maxPriorityFeePerGas: 2n * 10n ** 9n, // 2 gwei tip\n * });\n *\n * // Legacy transaction with specific gas limit\n * await vana.data.registerFile(params, {\n * gasLimit: 500000n,\n * gasPrice: 50n * 10n ** 9n // 50 gwei\n * });\n *\n * // Send ETH with the transaction\n * await vana.protocol.execute(params, {\n * value: 10n ** 18n, // 1 ETH\n * gasLimit: 21000n\n * });\n * ```\n * @category Reference\n */\nexport interface TransactionOptions {\n /** Gas limit */\n gasLimit?: bigint;\n /** Gas price */\n gasPrice?: bigint;\n /** Max fee per gas (EIP-1559) */\n maxFeePerGas?: bigint;\n /** Max priority fee per gas (EIP-1559) */\n maxPriorityFeePerGas?: bigint;\n /** Nonce */\n nonce?: number;\n /** Value to send with transaction */\n value?: bigint;\n}\n\n/**\n * Transaction receipt with additional metadata for tracking transaction results.\n *\n * @remarks\n * Provides comprehensive information about executed transactions including\n * gas usage, success status, and emitted events. Use the logs array to\n * decode events emitted by smart contracts during transaction execution.\n * The receipt is available after a transaction is mined and included in a block.\n *\n * @example\n * ```typescript\n * // Execute transaction and wait for receipt\n * const receipt = await vana.permissions.grant({\n * grantee: '0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36',\n * dataId: 123\n * });\n *\n * // Check transaction success\n * if (receipt.status === 'success') {\n * console.log(`Gas used: ${receipt.gasUsed}`);\n * console.log(`Block: ${receipt.blockNumber}`);\n *\n * // Decode events from logs\n * receipt.logs.forEach(log => {\n * if (log.topics[0] === PERMISSION_GRANTED_TOPIC) {\n * console.log('Permission granted event detected');\n * }\n * });\n * } else {\n * console.error('Transaction reverted');\n * }\n * ```\n * @category Reference\n */\nexport interface TransactionReceipt {\n /** Transaction hash */\n transactionHash: Hash;\n /** Block number */\n blockNumber: bigint;\n /** Block hash */\n blockHash: Hash;\n /** Gas used */\n gasUsed: bigint;\n /** Transaction status */\n status: \"success\" | \"reverted\";\n /** Contract address if contract deployment */\n contractAddress?: Address;\n /** Event logs */\n logs: Array<{\n address: Address;\n topics: Hash[];\n data: string;\n }>;\n}\n\n/**\n * Response wrapper for API results providing consistent error handling.\n *\n * @remarks\n * Standardizes API responses across the SDK, making it easy to handle\n * both successful and failed requests. The generic type parameter T\n * represents the expected data type for successful responses. Check\n * the success flag before accessing data to ensure type safety.\n *\n * @example\n * ```typescript\n * // Handling API responses\n * async function fetchUserData(userId: string): Promise<User | null> {\n * const response: ApiResponse<User> = await api.getUser(userId);\n *\n * if (response.success) {\n * console.log('User fetched:', response.data.name);\n * // Access metadata if available\n * if (response.metadata?.cached) {\n * console.log('Data was cached');\n * }\n * return response.data;\n * } else {\n * console.error('Failed to fetch user:', response.error);\n * return null;\n * }\n * }\n *\n * // Type-safe error handling\n * interface UserData {\n * id: string;\n * name: string;\n * }\n *\n * const result: ApiResponse<UserData> = await api.call('/users/123');\n * if (result.success) {\n * // TypeScript knows result.data is UserData here\n * console.log(result.data.name);\n * }\n * ```\n * @category Reference\n */\nexport interface ApiResponse<T> {\n /** Response data */\n data: T;\n /** Success status */\n success: boolean;\n /** Error message if not successful */\n error?: string;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Retry configuration for handling transient failures with exponential backoff.\n *\n * @remarks\n * Configures automatic retry behavior for operations that may fail due to\n * temporary issues like network problems or rate limits. Supports exponential\n * backoff to avoid overwhelming services. The shouldRetry function allows\n * custom logic to determine which errors warrant a retry attempt.\n *\n * @example\n * ```typescript\n * // Simple retry configuration\n * const basicRetry: RetryConfig = {\n * attempts: 3,\n * delay: 1000 // 1 second between retries\n * };\n *\n * // Exponential backoff configuration\n * const exponentialRetry: RetryConfig = {\n * attempts: 5,\n * delay: 1000,\n * backoffMultiplier: 2, // Double delay each time\n * maxDelay: 30000, // Cap at 30 seconds\n * shouldRetry: (error) => {\n * // Only retry network and timeout errors\n * return error.name === 'NetworkError' ||\n * error.message.includes('timeout');\n * }\n * };\n *\n * // Usage with SDK\n * const vana = new Vana({\n * retryConfig: exponentialRetry\n * });\n * ```\n * @category Reference\n */\nexport interface RetryConfig {\n /** Number of retry attempts */\n attempts: number;\n /** Delay between retries in milliseconds */\n delay: number;\n /** Backoff multiplier */\n backoffMultiplier?: number;\n /** Maximum delay in milliseconds */\n maxDelay?: number;\n /** Function to determine if error should be retried */\n shouldRetry?: (error: Error) => boolean;\n}\n\n/**\n * Cache configuration for optimizing repeated data fetches.\n *\n * @remarks\n * Configures in-memory caching behavior to reduce redundant API calls and\n * improve performance. The cache automatically evicts expired entries based\n * on TTL and removes least-recently-used items when maxSize is reached.\n * Use appropriate TTL values based on your data freshness requirements.\n *\n * @example\n * ```typescript\n * // Short-lived cache for frequently changing data\n * const userCache: CacheConfig = {\n * ttl: 60000, // 1 minute\n * maxSize: 100, // Store up to 100 users\n * prefix: 'user:' // Cache keys like 'user:123'\n * };\n *\n * // Long-lived cache for stable data\n * const schemaCache: CacheConfig = {\n * ttl: 3600000, // 1 hour\n * maxSize: 1000, // Store up to 1000 schemas\n * prefix: 'schema:'\n * };\n *\n * // Disable caching by setting TTL to 0\n * const noCache: CacheConfig = {\n * ttl: 0 // No caching\n * };\n * ```\n * @category Reference\n */\nexport interface CacheConfig {\n /** Cache TTL in milliseconds */\n ttl: number;\n /** Maximum cache size */\n maxSize?: number;\n /** Cache key prefix */\n prefix?: string;\n}\n\n/**\n * Validation result for data integrity checks and schema validation.\n *\n * @remarks\n * Provides detailed feedback about validation outcomes, distinguishing between\n * errors (which prevent processing) and warnings (which indicate potential issues).\n * Used throughout the SDK for validating permissions, file formats, schemas,\n * and API parameters before operations.\n *\n * @example\n * ```typescript\n * // Validating user input\n * function validateFileUpload(file: File): ValidationResult {\n * const errors: string[] = [];\n * const warnings: string[] = [];\n *\n * // Check file size\n * if (file.size > 100 * 1024 * 1024) {\n * errors.push('File size exceeds 100MB limit');\n * } else if (file.size > 50 * 1024 * 1024) {\n * warnings.push('Large file may take time to upload');\n * }\n *\n * // Check file type\n * if (!file.type.startsWith('image/')) {\n * errors.push('Only image files are allowed');\n * }\n *\n * return {\n * valid: errors.length === 0,\n * errors,\n * warnings\n * };\n * }\n *\n * // Using validation result\n * const result = validateFileUpload(file);\n * if (!result.valid) {\n * console.error('Validation failed:', result.errors.join(', '));\n * } else {\n * if (result.warnings.length > 0) {\n * console.warn('Warnings:', result.warnings.join(', '));\n * }\n * // Proceed with upload\n * }\n * ```\n * @category Reference\n */\nexport interface ValidationResult {\n /** Whether validation passed */\n valid: boolean;\n /** Validation errors */\n errors: string[];\n /** Validation warnings */\n warnings: string[];\n}\n\n/**\n * Status information for health checks and service monitoring.\n *\n * @remarks\n * Used to report the health status of various SDK components including\n * storage providers, RPC connections, and personal servers. The details\n * field can contain provider-specific information for debugging.\n * Timestamps use Unix epoch milliseconds.\n *\n * @example\n * ```typescript\n * // Checking storage provider health\n * const status: StatusInfo = await storage.getStatus();\n *\n * if (!status.healthy) {\n * console.error(`Storage unhealthy: ${status.message}`);\n * // Check how long the issue has persisted\n * const downtime = Date.now() - status.lastCheck;\n * if (downtime > 300000) { // 5 minutes\n * // Switch to backup provider\n * }\n * }\n *\n * // Detailed status with custom fields\n * const serverStatus: StatusInfo = {\n * healthy: true,\n * message: 'All systems operational',\n * lastCheck: Date.now(),\n * details: {\n * uptime: 3600000, // 1 hour\n * requestsServed: 1234,\n * avgResponseTime: 145, // ms\n * activeConnections: 23\n * }\n * };\n * ```\n * @category Reference\n */\nexport interface StatusInfo {\n /** Whether the service is healthy */\n healthy: boolean;\n /** Status message */\n message?: string;\n /** Last check timestamp */\n lastCheck: number;\n /** Additional status details */\n details?: Record<string, unknown>;\n}\n\n/**\n * Rate limit information for API throttling and quota management.\n *\n * @remarks\n * Provides visibility into rate limiting status to help applications\n * implement appropriate backoff strategies. Rate limits protect services\n * from overload and ensure fair resource usage. Use this information\n * to pace requests and avoid hitting limits.\n *\n * @example\n * ```typescript\n * // Check rate limit before making requests\n * const rateLimit: RateLimitInfo = await api.getRateLimit();\n *\n * console.log(`Requests: ${rateLimit.requests}/${rateLimit.limit}`);\n * console.log(`Resets in: ${rateLimit.resetTime} seconds`);\n *\n * // Implement backoff if approaching limit\n * if (rateLimit.requests >= rateLimit.limit * 0.9) {\n * console.warn('Approaching rate limit, slowing down');\n * await new Promise(resolve =>\n * setTimeout(resolve, rateLimit.resetTime * 1000)\n * );\n * }\n *\n * // Calculate requests per second allowed\n * const rps = rateLimit.limit / rateLimit.window;\n * console.log(`Max ${rps} requests per second allowed`);\n * ```\n * @category Reference\n */\nexport interface RateLimitInfo {\n /** Current request count */\n requests: number;\n /** Maximum requests allowed */\n limit: number;\n /** Time window in seconds */\n window: number;\n /** Time until reset in seconds */\n resetTime: number;\n}\n\n/**\n * File upload progress tracking for user feedback and monitoring.\n *\n * @remarks\n * Provides real-time progress information during file uploads, enabling\n * applications to show progress bars and estimated completion times.\n * The speed calculation is typically based on a rolling average to\n * smooth out network fluctuations.\n *\n * @example\n * ```typescript\n * // Upload with progress tracking\n * await vana.data.upload(file, {\n * onProgress: (progress: UploadProgress) => {\n * // Update progress bar\n * progressBar.style.width = `${progress.percentage}%`;\n *\n * // Show upload speed\n * const speedMBps = (progress.speed / 1024 / 1024).toFixed(2);\n * speedDisplay.textContent = `${speedMBps} MB/s`;\n *\n * // Show time remaining\n * const minutes = Math.floor(progress.estimatedTimeRemaining / 60);\n * const seconds = progress.estimatedTimeRemaining % 60;\n * timeDisplay.textContent = `${minutes}:${seconds.toString().padStart(2, '0')}`;\n *\n * // Log progress milestones\n * if (progress.percentage === 25 ||\n * progress.percentage === 50 ||\n * progress.percentage === 75) {\n * console.log(`Upload ${progress.percentage}% complete`);\n * }\n * }\n * });\n * ```\n * @category Reference\n */\nexport interface UploadProgress {\n /** Bytes uploaded */\n loaded: number;\n /** Total bytes to upload */\n total: number;\n /** Upload percentage (0-100) */\n percentage: number;\n /** Upload speed in bytes per second */\n speed: number;\n /** Estimated time remaining in seconds */\n estimatedTimeRemaining: number;\n}\n\n/**\n * Network information for blockchain connectivity and monitoring.\n *\n * @remarks\n * Provides comprehensive details about the connected blockchain network,\n * including configuration URLs and real-time status. Use this information\n * to verify network connectivity, display network details to users, and\n * construct explorer links for transactions.\n *\n * @example\n * ```typescript\n * // Get current network info\n * const network: NetworkInfo = await vana.protocol.getNetworkInfo();\n *\n * console.log(`Connected to: ${network.chainName} (ID: ${network.chainId})`);\n * console.log(`Current block: ${network.currentBlock}`);\n *\n * // Check network health\n * if (network.status !== 'healthy') {\n * console.warn(`Network ${network.status}: consider switching RPC`);\n * }\n *\n * // Generate explorer link for transaction\n * function getExplorerLink(txHash: string): string {\n * if (!network.explorerUrl) {\n * return `Transaction: ${txHash}`;\n * }\n * return `${network.explorerUrl}/tx/${txHash}`;\n * }\n *\n * // Verify expected network\n * const EXPECTED_CHAIN_ID = 1337; // Vana testnet\n * if (network.chainId !== EXPECTED_CHAIN_ID) {\n * throw new Error(`Wrong network! Expected ${EXPECTED_CHAIN_ID}, got ${network.chainId}`);\n * }\n * ```\n * @category Reference\n */\nexport interface NetworkInfo {\n /** Chain ID */\n chainId: number;\n /** Chain name */\n chainName: string;\n /** RPC URL */\n rpcUrl: string;\n /** Block explorer URL */\n explorerUrl?: string;\n /** Current block number */\n currentBlock: bigint;\n /** Network status */\n status: \"healthy\" | \"degraded\" | \"down\";\n}\n\n/**\n * Gas estimate information for transaction cost prediction.\n *\n * @remarks\n * Provides detailed gas pricing estimates to help users understand transaction\n * costs before execution. Supports both legacy (gasPrice) and EIP-1559\n * (maxFeePerGas) pricing models. The estimatedCost is calculated based on\n * current network conditions and may vary by the time of actual execution.\n *\n * @example\n * ```typescript\n * // Get gas estimate before transaction\n * const estimate: GasEstimate = await vana.permissions.estimateGas({\n * grantee: '0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36',\n * dataId: 123\n * });\n *\n * // Convert to human-readable format\n * const costInEth = Number(estimate.estimatedCost) / 1e18;\n * console.log(`Estimated cost: ${costInEth.toFixed(6)} ETH`);\n *\n * // Check if user has sufficient balance\n * const balance = await vana.protocol.getBalance(userAddress);\n * if (balance < estimate.estimatedCost) {\n * throw new Error(`Insufficient balance. Need ${costInEth} ETH`);\n * }\n *\n * // Use estimate for transaction with buffer\n * await vana.permissions.grant(params, {\n * gasLimit: estimate.gasLimit * 110n / 100n, // 10% buffer\n * maxFeePerGas: estimate.maxFeePerGas,\n * maxPriorityFeePerGas: estimate.maxPriorityFeePerGas\n * });\n * ```\n * @category Reference\n */\nexport interface GasEstimate {\n /** Gas limit */\n gasLimit: bigint;\n /** Gas price */\n gasPrice: bigint;\n /** Max fee per gas */\n maxFeePerGas?: bigint;\n /** Max priority fee per gas */\n maxPriorityFeePerGas?: bigint;\n /** Estimated cost in wei */\n estimatedCost: bigint;\n}\n\n/**\n * Time range parameters for filtering operations by time period.\n *\n * Used in various SDK methods to specify date/time ranges for queries,\n * analytics, and data filtering operations. Times are specified as Unix timestamps.\n *\n * @category Reference\n * @example\n * ```typescript\n * const lastWeek: TimeRange = {\n * from: Date.now() - (7 * 24 * 60 * 60 * 1000), // 7 days ago\n * to: Date.now()\n * };\n *\n * const permissions = await vana.permissions.getUserPermissions({\n * timeRange: lastWeek\n * });\n * ```\n */\nexport interface TimeRange {\n /** Start time (Unix timestamp) */\n from?: number;\n /** End time (Unix timestamp) */\n to?: number;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../src/types/utils.ts"],"sourcesContent":["import type { Address, Hash } from \"viem\";\n\n/**\n * Makes all properties in T optional except for those in K\n *\n * @remarks\n * This utility type is useful when you want to create a variant of an interface\n * where most properties are optional, but specific properties remain required.\n * Commonly used for update operations where only certain fields must be provided.\n *\n * @example\n * ```typescript\n * interface User {\n * id: string;\n * name: string;\n * email: string;\n * age: number;\n * }\n *\n * // Only 'id' is required, all other properties are optional\n * type UserUpdate = PartialExcept<User, 'id'>;\n *\n * const update: UserUpdate = {\n * id: '123', // Required\n * name: 'John' // Optional\n * // email and age are also optional\n * };\n * ```\n * @category Reference\n */\nexport type PartialExcept<T, K extends keyof T> = Partial<T> & Pick<T, K>;\n\n/**\n * Makes all properties in T required except for those in K\n *\n * @remarks\n * This utility type is useful when you want to create a variant of an interface\n * where most properties are required, but specific properties remain optional.\n * Commonly used for creation operations where most fields are mandatory.\n *\n * @example\n * ```typescript\n * interface Config {\n * apiUrl: string;\n * timeout?: number;\n * retries?: number;\n * debug?: boolean;\n * }\n *\n * // All properties required except 'debug'\n * type StrictConfig = RequiredExcept<Config, 'debug'>;\n *\n * const config: StrictConfig = {\n * apiUrl: 'https://api.vana.com', // Required\n * timeout: 5000, // Required (was optional, now required)\n * retries: 3, // Required (was optional, now required)\n * // debug remains optional\n * };\n * ```\n * @category Reference\n */\nexport type RequiredExcept<T, K extends keyof T> = Required<T> &\n Partial<Pick<T, K>>;\n\n/**\n * Extracts the return type of a promise\n *\n * @remarks\n * This utility type unwraps the type contained within a Promise.\n * If the type is not a Promise, it returns the type unchanged.\n * Note: TypeScript 4.5+ includes a built-in Awaited type with similar functionality.\n *\n * @example\n * ```typescript\n * type AsyncString = Promise<string>;\n * type SyncString = string;\n *\n * // Extracts 'string' from Promise<string>\n * type Result1 = Awaited<AsyncString>; // string\n *\n * // Returns 'string' unchanged since it's not a Promise\n * type Result2 = Awaited<SyncString>; // string\n *\n * // Practical usage with async functions\n * async function fetchUser(): Promise<{ id: string; name: string }> {\n * // ...\n * }\n *\n * type User = Awaited<ReturnType<typeof fetchUser>>; // { id: string; name: string }\n * ```\n * @category Reference\n */\nexport type Awaited<T> = T extends Promise<infer U> ? U : T;\n\n/**\n * Creates a type that accepts either T or a Promise<T>\n *\n * @remarks\n * This utility type is useful for functions that can work with both\n * synchronous and asynchronous values. It allows flexible APIs that\n * can accept immediate values or promises that resolve to those values.\n *\n * @example\n * ```typescript\n * // Function that accepts either a value or a promise of that value\n * async function processData(data: MaybePromise<string>): Promise<string> {\n * // await works on both promises and regular values\n * const resolved = await data;\n * return resolved.toUpperCase();\n * }\n *\n * // Both calls are valid:\n * processData('hello'); // Synchronous value\n * processData(Promise.resolve('world')); // Asynchronous value\n *\n * // Common use case in SDK callbacks\n * interface StorageProvider {\n * // Provider can implement sync or async file reading\n * read(path: string): MaybePromise<Buffer>;\n * }\n * ```\n * @category Reference\n */\nexport type MaybePromise<T> = T | Promise<T>;\n\n/**\n * Creates a type that accepts either T or an array of T\n *\n * @remarks\n * This utility type is useful for functions that can accept either a single\n * value or an array of values, providing a more flexible API. The implementation\n * can normalize the input to always work with arrays internally.\n *\n * @example\n * ```typescript\n * // Function that accepts either a single ID or multiple IDs\n * function deleteItems(ids: MaybeArray<string>): void {\n * // Normalize to array\n * const idArray = Array.isArray(ids) ? ids : [ids];\n * idArray.forEach(id => console.log(`Deleting ${id}`));\n * }\n *\n * // Both calls are valid:\n * deleteItems('item-1'); // Single item\n * deleteItems(['item-1', 'item-2', 'item-3']); // Multiple items\n *\n * // Common use case in permissions\n * interface GrantPermissionsParams {\n * permissions: MaybeArray<Permission>;\n * }\n * ```\n * @category Reference\n */\nexport type MaybeArray<T> = T | T[];\n\n/**\n * Pagination parameters for controlling result set size and navigation.\n *\n * Used across SDK methods that return lists of items to control how many items\n * are returned and to navigate through large result sets efficiently.\n *\n * @category Reference\n * @example\n * ```typescript\n * const pagination: PaginationParams = {\n * limit: 20, // Return 20 items\n * offset: 40, // Skip first 40 items (page 3)\n * cursor: 'eyJpZCI6MTIzfQ==' // Or use cursor-based pagination\n * };\n *\n * const files = await vana.data.getUserFiles({\n * owner: userAddress,\n * pagination\n * });\n * ```\n */\nexport interface PaginationParams {\n /** Maximum number of items to return */\n limit?: number;\n /** Number of items to skip */\n offset?: number;\n /** Cursor for cursor-based pagination */\n cursor?: string;\n}\n\n/**\n * Pagination result containing items and metadata for navigating large datasets.\n *\n * @remarks\n * This interface standardizes paginated responses across the SDK, providing\n * consistent metadata for implementing pagination UI components and handling\n * multi-page data fetching. Supports both offset-based and cursor-based pagination.\n *\n * @example\n * ```typescript\n * // Fetching paginated user files\n * async function getAllUserFiles(userAddress: string): Promise<File[]> {\n * const allFiles: File[] = [];\n * let cursor: string | undefined;\n *\n * do {\n * const result: PaginationResult<File> = await vana.data.getUserFiles({\n * owner: userAddress,\n * pagination: { limit: 50, cursor }\n * });\n *\n * allFiles.push(...result.items);\n * cursor = result.nextCursor;\n *\n * console.log(`Fetched ${result.count} of ${result.total} files`);\n * } while (result.hasMore);\n *\n * return allFiles;\n * }\n * ```\n * @category Reference\n */\nexport interface PaginationResult<T> {\n /** Array of items */\n items: T[];\n /** Total number of items available */\n total: number;\n /** Number of items returned */\n count: number;\n /** Whether there are more items available */\n hasMore: boolean;\n /** Cursor for next page */\n nextCursor?: string;\n}\n\n/**\n * Block range parameters for filtering blockchain events and transactions.\n *\n * @remarks\n * Used to specify a range of blocks when querying blockchain data.\n * Both parameters are optional - omitting fromBlock starts from genesis,\n * omitting toBlock goes to the latest block. Be cautious with large ranges\n * as they may result in heavy RPC loads or timeouts.\n *\n * @example\n * ```typescript\n * // Get events from the last 1000 blocks\n * const currentBlock = await vana.protocol.getBlockNumber();\n * const events = await vana.protocol.getEvents({\n * blockRange: {\n * fromBlock: currentBlock - 1000n,\n * toBlock: currentBlock\n * }\n * });\n *\n * // Get all historical events (use with caution)\n * const allEvents = await vana.protocol.getEvents({\n * blockRange: {\n * fromBlock: 0n\n * // toBlock omitted = up to latest\n * }\n * });\n * ```\n * @category Reference\n */\nexport interface BlockRange {\n /** Starting block number */\n fromBlock?: bigint;\n /** Ending block number */\n toBlock?: bigint;\n}\n\n/**\n * Transaction receipt with additional metadata for tracking transaction results.\n *\n * @remarks\n * Provides comprehensive information about executed transactions including\n * gas usage, success status, and emitted events. Use the logs array to\n * decode events emitted by smart contracts during transaction execution.\n * The receipt is available after a transaction is mined and included in a block.\n *\n * @example\n * ```typescript\n * // Execute transaction and wait for receipt\n * const receipt = await vana.permissions.grant({\n * grantee: '0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36',\n * dataId: 123\n * });\n *\n * // Check transaction success\n * if (receipt.status === 'success') {\n * console.log(`Gas used: ${receipt.gasUsed}`);\n * console.log(`Block: ${receipt.blockNumber}`);\n *\n * // Decode events from logs\n * receipt.logs.forEach(log => {\n * if (log.topics[0] === PERMISSION_GRANTED_TOPIC) {\n * console.log('Permission granted event detected');\n * }\n * });\n * } else {\n * console.error('Transaction reverted');\n * }\n * ```\n * @category Reference\n */\nexport interface TransactionReceipt {\n /** Transaction hash */\n transactionHash: Hash;\n /** Block number */\n blockNumber: bigint;\n /** Block hash */\n blockHash: Hash;\n /** Gas used */\n gasUsed: bigint;\n /** Transaction status */\n status: \"success\" | \"reverted\";\n /** Contract address if contract deployment */\n contractAddress?: Address;\n /** Event logs */\n logs: Array<{\n address: Address;\n topics: Hash[];\n data: string;\n }>;\n}\n\n/**\n * Response wrapper for API results providing consistent error handling.\n *\n * @remarks\n * Standardizes API responses across the SDK, making it easy to handle\n * both successful and failed requests. The generic type parameter T\n * represents the expected data type for successful responses. Check\n * the success flag before accessing data to ensure type safety.\n *\n * @example\n * ```typescript\n * // Handling API responses\n * async function fetchUserData(userId: string): Promise<User | null> {\n * const response: ApiResponse<User> = await api.getUser(userId);\n *\n * if (response.success) {\n * console.log('User fetched:', response.data.name);\n * // Access metadata if available\n * if (response.metadata?.cached) {\n * console.log('Data was cached');\n * }\n * return response.data;\n * } else {\n * console.error('Failed to fetch user:', response.error);\n * return null;\n * }\n * }\n *\n * // Type-safe error handling\n * interface UserData {\n * id: string;\n * name: string;\n * }\n *\n * const result: ApiResponse<UserData> = await api.call('/users/123');\n * if (result.success) {\n * // TypeScript knows result.data is UserData here\n * console.log(result.data.name);\n * }\n * ```\n * @category Reference\n */\nexport interface ApiResponse<T> {\n /** Response data */\n data: T;\n /** Success status */\n success: boolean;\n /** Error message if not successful */\n error?: string;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Retry configuration for handling transient failures with exponential backoff.\n *\n * @remarks\n * Configures automatic retry behavior for operations that may fail due to\n * temporary issues like network problems or rate limits. Supports exponential\n * backoff to avoid overwhelming services. The shouldRetry function allows\n * custom logic to determine which errors warrant a retry attempt.\n *\n * @example\n * ```typescript\n * // Simple retry configuration\n * const basicRetry: RetryConfig = {\n * attempts: 3,\n * delay: 1000 // 1 second between retries\n * };\n *\n * // Exponential backoff configuration\n * const exponentialRetry: RetryConfig = {\n * attempts: 5,\n * delay: 1000,\n * backoffMultiplier: 2, // Double delay each time\n * maxDelay: 30000, // Cap at 30 seconds\n * shouldRetry: (error) => {\n * // Only retry network and timeout errors\n * return error.name === 'NetworkError' ||\n * error.message.includes('timeout');\n * }\n * };\n *\n * // Usage with SDK\n * const vana = new Vana({\n * retryConfig: exponentialRetry\n * });\n * ```\n * @category Reference\n */\nexport interface RetryConfig {\n /** Number of retry attempts */\n attempts: number;\n /** Delay between retries in milliseconds */\n delay: number;\n /** Backoff multiplier */\n backoffMultiplier?: number;\n /** Maximum delay in milliseconds */\n maxDelay?: number;\n /** Function to determine if error should be retried */\n shouldRetry?: (error: Error) => boolean;\n}\n\n/**\n * Cache configuration for optimizing repeated data fetches.\n *\n * @remarks\n * Configures in-memory caching behavior to reduce redundant API calls and\n * improve performance. The cache automatically evicts expired entries based\n * on TTL and removes least-recently-used items when maxSize is reached.\n * Use appropriate TTL values based on your data freshness requirements.\n *\n * @example\n * ```typescript\n * // Short-lived cache for frequently changing data\n * const userCache: CacheConfig = {\n * ttl: 60000, // 1 minute\n * maxSize: 100, // Store up to 100 users\n * prefix: 'user:' // Cache keys like 'user:123'\n * };\n *\n * // Long-lived cache for stable data\n * const schemaCache: CacheConfig = {\n * ttl: 3600000, // 1 hour\n * maxSize: 1000, // Store up to 1000 schemas\n * prefix: 'schema:'\n * };\n *\n * // Disable caching by setting TTL to 0\n * const noCache: CacheConfig = {\n * ttl: 0 // No caching\n * };\n * ```\n * @category Reference\n */\nexport interface CacheConfig {\n /** Cache TTL in milliseconds */\n ttl: number;\n /** Maximum cache size */\n maxSize?: number;\n /** Cache key prefix */\n prefix?: string;\n}\n\n/**\n * Validation result for data integrity checks and schema validation.\n *\n * @remarks\n * Provides detailed feedback about validation outcomes, distinguishing between\n * errors (which prevent processing) and warnings (which indicate potential issues).\n * Used throughout the SDK for validating permissions, file formats, schemas,\n * and API parameters before operations.\n *\n * @example\n * ```typescript\n * // Validating user input\n * function validateFileUpload(file: File): ValidationResult {\n * const errors: string[] = [];\n * const warnings: string[] = [];\n *\n * // Check file size\n * if (file.size > 100 * 1024 * 1024) {\n * errors.push('File size exceeds 100MB limit');\n * } else if (file.size > 50 * 1024 * 1024) {\n * warnings.push('Large file may take time to upload');\n * }\n *\n * // Check file type\n * if (!file.type.startsWith('image/')) {\n * errors.push('Only image files are allowed');\n * }\n *\n * return {\n * valid: errors.length === 0,\n * errors,\n * warnings\n * };\n * }\n *\n * // Using validation result\n * const result = validateFileUpload(file);\n * if (!result.valid) {\n * console.error('Validation failed:', result.errors.join(', '));\n * } else {\n * if (result.warnings.length > 0) {\n * console.warn('Warnings:', result.warnings.join(', '));\n * }\n * // Proceed with upload\n * }\n * ```\n * @category Reference\n */\nexport interface ValidationResult {\n /** Whether validation passed */\n valid: boolean;\n /** Validation errors */\n errors: string[];\n /** Validation warnings */\n warnings: string[];\n}\n\n/**\n * Status information for health checks and service monitoring.\n *\n * @remarks\n * Used to report the health status of various SDK components including\n * storage providers, RPC connections, and personal servers. The details\n * field can contain provider-specific information for debugging.\n * Timestamps use Unix epoch milliseconds.\n *\n * @example\n * ```typescript\n * // Checking storage provider health\n * const status: StatusInfo = await storage.getStatus();\n *\n * if (!status.healthy) {\n * console.error(`Storage unhealthy: ${status.message}`);\n * // Check how long the issue has persisted\n * const downtime = Date.now() - status.lastCheck;\n * if (downtime > 300000) { // 5 minutes\n * // Switch to backup provider\n * }\n * }\n *\n * // Detailed status with custom fields\n * const serverStatus: StatusInfo = {\n * healthy: true,\n * message: 'All systems operational',\n * lastCheck: Date.now(),\n * details: {\n * uptime: 3600000, // 1 hour\n * requestsServed: 1234,\n * avgResponseTime: 145, // ms\n * activeConnections: 23\n * }\n * };\n * ```\n * @category Reference\n */\nexport interface StatusInfo {\n /** Whether the service is healthy */\n healthy: boolean;\n /** Status message */\n message?: string;\n /** Last check timestamp */\n lastCheck: number;\n /** Additional status details */\n details?: Record<string, unknown>;\n}\n\n/**\n * Rate limit information for API throttling and quota management.\n *\n * @remarks\n * Provides visibility into rate limiting status to help applications\n * implement appropriate backoff strategies. Rate limits protect services\n * from overload and ensure fair resource usage. Use this information\n * to pace requests and avoid hitting limits.\n *\n * @example\n * ```typescript\n * // Check rate limit before making requests\n * const rateLimit: RateLimitInfo = await api.getRateLimit();\n *\n * console.log(`Requests: ${rateLimit.requests}/${rateLimit.limit}`);\n * console.log(`Resets in: ${rateLimit.resetTime} seconds`);\n *\n * // Implement backoff if approaching limit\n * if (rateLimit.requests >= rateLimit.limit * 0.9) {\n * console.warn('Approaching rate limit, slowing down');\n * await new Promise(resolve =>\n * setTimeout(resolve, rateLimit.resetTime * 1000)\n * );\n * }\n *\n * // Calculate requests per second allowed\n * const rps = rateLimit.limit / rateLimit.window;\n * console.log(`Max ${rps} requests per second allowed`);\n * ```\n * @category Reference\n */\nexport interface RateLimitInfo {\n /** Current request count */\n requests: number;\n /** Maximum requests allowed */\n limit: number;\n /** Time window in seconds */\n window: number;\n /** Time until reset in seconds */\n resetTime: number;\n}\n\n/**\n * File upload progress tracking for user feedback and monitoring.\n *\n * @remarks\n * Provides real-time progress information during file uploads, enabling\n * applications to show progress bars and estimated completion times.\n * The speed calculation is typically based on a rolling average to\n * smooth out network fluctuations.\n *\n * @example\n * ```typescript\n * // Upload with progress tracking\n * await vana.data.upload(file, {\n * onProgress: (progress: UploadProgress) => {\n * // Update progress bar\n * progressBar.style.width = `${progress.percentage}%`;\n *\n * // Show upload speed\n * const speedMBps = (progress.speed / 1024 / 1024).toFixed(2);\n * speedDisplay.textContent = `${speedMBps} MB/s`;\n *\n * // Show time remaining\n * const minutes = Math.floor(progress.estimatedTimeRemaining / 60);\n * const seconds = progress.estimatedTimeRemaining % 60;\n * timeDisplay.textContent = `${minutes}:${seconds.toString().padStart(2, '0')}`;\n *\n * // Log progress milestones\n * if (progress.percentage === 25 ||\n * progress.percentage === 50 ||\n * progress.percentage === 75) {\n * console.log(`Upload ${progress.percentage}% complete`);\n * }\n * }\n * });\n * ```\n * @category Reference\n */\nexport interface UploadProgress {\n /** Bytes uploaded */\n loaded: number;\n /** Total bytes to upload */\n total: number;\n /** Upload percentage (0-100) */\n percentage: number;\n /** Upload speed in bytes per second */\n speed: number;\n /** Estimated time remaining in seconds */\n estimatedTimeRemaining: number;\n}\n\n/**\n * Network information for blockchain connectivity and monitoring.\n *\n * @remarks\n * Provides comprehensive details about the connected blockchain network,\n * including configuration URLs and real-time status. Use this information\n * to verify network connectivity, display network details to users, and\n * construct explorer links for transactions.\n *\n * @example\n * ```typescript\n * // Get current network info\n * const network: NetworkInfo = await vana.protocol.getNetworkInfo();\n *\n * console.log(`Connected to: ${network.chainName} (ID: ${network.chainId})`);\n * console.log(`Current block: ${network.currentBlock}`);\n *\n * // Check network health\n * if (network.status !== 'healthy') {\n * console.warn(`Network ${network.status}: consider switching RPC`);\n * }\n *\n * // Generate explorer link for transaction\n * function getExplorerLink(txHash: string): string {\n * if (!network.explorerUrl) {\n * return `Transaction: ${txHash}`;\n * }\n * return `${network.explorerUrl}/tx/${txHash}`;\n * }\n *\n * // Verify expected network\n * const EXPECTED_CHAIN_ID = 1337; // Vana testnet\n * if (network.chainId !== EXPECTED_CHAIN_ID) {\n * throw new Error(`Wrong network! Expected ${EXPECTED_CHAIN_ID}, got ${network.chainId}`);\n * }\n * ```\n * @category Reference\n */\nexport interface NetworkInfo {\n /** Chain ID */\n chainId: number;\n /** Chain name */\n chainName: string;\n /** RPC URL */\n rpcUrl: string;\n /** Block explorer URL */\n explorerUrl?: string;\n /** Current block number */\n currentBlock: bigint;\n /** Network status */\n status: \"healthy\" | \"degraded\" | \"down\";\n}\n\n/**\n * Gas estimate information for transaction cost prediction.\n *\n * @remarks\n * Provides detailed gas pricing estimates to help users understand transaction\n * costs before execution. Supports both legacy (gasPrice) and EIP-1559\n * (maxFeePerGas) pricing models. The estimatedCost is calculated based on\n * current network conditions and may vary by the time of actual execution.\n *\n * @example\n * ```typescript\n * // Get gas estimate before transaction\n * const estimate: GasEstimate = await vana.permissions.estimateGas({\n * grantee: '0x742d35Cc6558Fd4D9e9E0E888F0462ef6919Bd36',\n * dataId: 123\n * });\n *\n * // Convert to human-readable format\n * const costInEth = Number(estimate.estimatedCost) / 1e18;\n * console.log(`Estimated cost: ${costInEth.toFixed(6)} ETH`);\n *\n * // Check if user has sufficient balance\n * const balance = await vana.protocol.getBalance(userAddress);\n * if (balance < estimate.estimatedCost) {\n * throw new Error(`Insufficient balance. Need ${costInEth} ETH`);\n * }\n *\n * // Use estimate for transaction with buffer\n * await vana.permissions.grant(params, {\n * gasLimit: estimate.gasLimit * 110n / 100n, // 10% buffer\n * maxFeePerGas: estimate.maxFeePerGas,\n * maxPriorityFeePerGas: estimate.maxPriorityFeePerGas\n * });\n * ```\n * @category Reference\n */\nexport interface GasEstimate {\n /** Gas limit */\n gasLimit: bigint;\n /** Gas price */\n gasPrice: bigint;\n /** Max fee per gas */\n maxFeePerGas?: bigint;\n /** Max priority fee per gas */\n maxPriorityFeePerGas?: bigint;\n /** Estimated cost in wei */\n estimatedCost: bigint;\n}\n\n/**\n * Time range parameters for filtering operations by time period.\n *\n * Used in various SDK methods to specify date/time ranges for queries,\n * analytics, and data filtering operations. Times are specified as Unix timestamps.\n *\n * @category Reference\n * @example\n * ```typescript\n * const lastWeek: TimeRange = {\n * from: Date.now() - (7 * 24 * 60 * 60 * 1000), // 7 days ago\n * to: Date.now()\n * };\n *\n * const permissions = await vana.permissions.getUserPermissions({\n * timeRange: lastWeek\n * });\n * ```\n */\nexport interface TimeRange {\n /** Start time (Unix timestamp) */\n from?: number;\n /** End time (Unix timestamp) */\n to?: number;\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -255,51 +255,6 @@ export interface BlockRange {
255
255
  /** Ending block number */
256
256
  toBlock?: bigint;
257
257
  }
258
- /**
259
- * Transaction options for customizing blockchain transaction parameters.
260
- *
261
- * @remarks
262
- * Provides fine-grained control over transaction execution. Supports both
263
- * legacy (gasPrice) and EIP-1559 (maxFeePerGas) transaction types. When
264
- * not specified, the SDK will use appropriate defaults based on network
265
- * conditions. Use these options to optimize for speed or cost.
266
- *
267
- * @example
268
- * ```typescript
269
- * // High priority transaction with EIP-1559 pricing
270
- * await vana.permissions.grant(params, {
271
- * maxFeePerGas: 100n * 10n ** 9n, // 100 gwei
272
- * maxPriorityFeePerGas: 2n * 10n ** 9n, // 2 gwei tip
273
- * });
274
- *
275
- * // Legacy transaction with specific gas limit
276
- * await vana.data.registerFile(params, {
277
- * gasLimit: 500000n,
278
- * gasPrice: 50n * 10n ** 9n // 50 gwei
279
- * });
280
- *
281
- * // Send ETH with the transaction
282
- * await vana.protocol.execute(params, {
283
- * value: 10n ** 18n, // 1 ETH
284
- * gasLimit: 21000n
285
- * });
286
- * ```
287
- * @category Reference
288
- */
289
- export interface TransactionOptions {
290
- /** Gas limit */
291
- gasLimit?: bigint;
292
- /** Gas price */
293
- gasPrice?: bigint;
294
- /** Max fee per gas (EIP-1559) */
295
- maxFeePerGas?: bigint;
296
- /** Max priority fee per gas (EIP-1559) */
297
- maxPriorityFeePerGas?: bigint;
298
- /** Nonce */
299
- nonce?: number;
300
- /** Value to send with transaction */
301
- value?: bigint;
302
- }
303
258
  /**
304
259
  * Transaction receipt with additional metadata for tracking transaction results.
305
260
  *
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @file Tests for subgraph consistency utilities
3
+ */
4
+ export {};
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @file Tests for subgraph pagination utilities
3
+ */
4
+ export {};
@@ -23,10 +23,10 @@ __export(registry_exports, {
23
23
  });
24
24
  module.exports = __toCommonJS(registry_exports);
25
25
  var import_viem = require("viem");
26
- var import_addresses = require("../../config/addresses");
26
+ var import_addresses = require("../../generated/addresses");
27
27
  var import_abi = require("../../generated/abi");
28
28
  async function fetchSchemaFromChain(context, schemaId) {
29
- const chainId = context.walletClient.chain?.id;
29
+ const chainId = context.walletClient?.chain?.id ?? context.publicClient.chain?.id;
30
30
  if (!chainId) {
31
31
  throw new Error("Chain ID not available");
32
32
  }
@@ -56,7 +56,7 @@ async function fetchSchemaFromChain(context, schemaId) {
56
56
  };
57
57
  }
58
58
  async function fetchSchemaCountFromChain(context) {
59
- const chainId = context.walletClient.chain?.id;
59
+ const chainId = context.walletClient?.chain?.id ?? context.publicClient.chain?.id;
60
60
  if (!chainId) {
61
61
  throw new Error("Chain ID not available");
62
62
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/blockchain/registry.ts"],"sourcesContent":["import { getContract } from \"viem\";\nimport type { PublicClient, WalletClient } from \"viem\";\nimport { getContractAddress } from \"../../config/addresses\";\nimport { getAbi } from \"../../generated/abi\";\nimport type { SchemaMetadata } from \"../../types/index\";\n\n/**\n * Shared context for blockchain operations.\n * Only includes the minimal required fields to avoid coupling.\n */\ninterface BlockchainContext {\n walletClient: WalletClient;\n publicClient: PublicClient;\n}\n\n/**\n * Contract data structure returned by the blockchain.\n *\n * @internal\n */\ninterface SchemaContractData {\n name: string;\n dialect: string;\n definitionUrl: string;\n}\n\n/**\n * Fetches schema metadata from the blockchain by its ID.\n *\n * @param context - The blockchain context containing wallet and public clients\n * @param schemaId - The ID of the schema to fetch\n * @returns The schema metadata with id, name, dialect, and definitionUrl\n * @throws Error if chain ID is not available, schema not found, or data is incomplete\n *\n * @internal\n */\nexport async function fetchSchemaFromChain(\n context: BlockchainContext,\n schemaId: number,\n): Promise<SchemaMetadata> {\n const chainId = context.walletClient.chain?.id;\n if (!chainId) {\n throw new Error(\"Chain ID not available\");\n }\n\n const dataRefinerRegistryAddress = getContractAddress(\n chainId,\n \"DataRefinerRegistry\",\n );\n const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n const dataRefinerRegistry = getContract({\n address: dataRefinerRegistryAddress,\n abi: dataRefinerRegistryAbi,\n client: context.publicClient,\n });\n\n const schemaData = await dataRefinerRegistry.read.schemas([BigInt(schemaId)]);\n\n if (!schemaData) {\n throw new Error(`Schema with ID ${schemaId} not found`);\n }\n\n // TODO(TYPES): Contract read returns unknown type from viem library.\n // Future improvement: Create typed contract interface when viem adds support\n // or implement a contract type generator from ABI definitions.\n const schemaObj = schemaData as unknown as SchemaContractData;\n\n if (!schemaObj.name || !schemaObj.dialect || !schemaObj.definitionUrl) {\n throw new Error(\"Incomplete schema data\");\n }\n\n return {\n id: schemaId,\n name: schemaObj.name,\n dialect: schemaObj.dialect as \"json\" | \"sqlite\",\n definitionUrl: schemaObj.definitionUrl,\n };\n}\n\n/**\n * Fetches the total count of schemas from the blockchain.\n *\n * @param context - The blockchain context containing wallet and public clients\n * @returns The total number of schemas\n * @throws Error if chain ID is not available or operation fails\n *\n * @internal\n */\nexport async function fetchSchemaCountFromChain(\n context: BlockchainContext,\n): Promise<number> {\n const chainId = context.walletClient.chain?.id;\n if (!chainId) {\n throw new Error(\"Chain ID not available\");\n }\n\n const dataRefinerRegistryAddress = getContractAddress(\n chainId,\n \"DataRefinerRegistry\",\n );\n const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n const dataRefinerRegistry = getContract({\n address: dataRefinerRegistryAddress,\n abi: dataRefinerRegistryAbi,\n client: context.publicClient,\n });\n\n const count = await dataRefinerRegistry.read.schemasCount();\n return Number(count);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA4B;AAE5B,uBAAmC;AACnC,iBAAuB;AAiCvB,eAAsB,qBACpB,SACA,UACyB;AACzB,QAAM,UAAU,QAAQ,aAAa,OAAO;AAC5C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,QAAM,iCAA6B;AAAA,IACjC;AAAA,IACA;AAAA,EACF;AACA,QAAM,6BAAyB,mBAAO,qBAAqB;AAE3D,QAAM,0BAAsB,yBAAY;AAAA,IACtC,SAAS;AAAA,IACT,KAAK;AAAA,IACL,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,QAAM,aAAa,MAAM,oBAAoB,KAAK,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAE5E,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,kBAAkB,QAAQ,YAAY;AAAA,EACxD;AAKA,QAAM,YAAY;AAElB,MAAI,CAAC,UAAU,QAAQ,CAAC,UAAU,WAAW,CAAC,UAAU,eAAe;AACrE,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM,UAAU;AAAA,IAChB,SAAS,UAAU;AAAA,IACnB,eAAe,UAAU;AAAA,EAC3B;AACF;AAWA,eAAsB,0BACpB,SACiB;AACjB,QAAM,UAAU,QAAQ,aAAa,OAAO;AAC5C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,QAAM,iCAA6B;AAAA,IACjC;AAAA,IACA;AAAA,EACF;AACA,QAAM,6BAAyB,mBAAO,qBAAqB;AAE3D,QAAM,0BAAsB,yBAAY;AAAA,IACtC,SAAS;AAAA,IACT,KAAK;AAAA,IACL,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,QAAM,QAAQ,MAAM,oBAAoB,KAAK,aAAa;AAC1D,SAAO,OAAO,KAAK;AACrB;","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/blockchain/registry.ts"],"sourcesContent":["import { getContract } from \"viem\";\nimport type { PublicClient, WalletClient } from \"viem\";\nimport { getContractAddress } from \"../../generated/addresses\";\nimport { getAbi } from \"../../generated/abi\";\nimport type { SchemaMetadata } from \"../../types/index\";\n\n/**\n * Shared context for blockchain operations.\n * Only includes the minimal required fields to avoid coupling.\n */\ninterface BlockchainContext {\n walletClient?: WalletClient;\n publicClient: PublicClient;\n}\n\n/**\n * Contract data structure returned by the blockchain.\n *\n * @internal\n */\ninterface SchemaContractData {\n name: string;\n dialect: string;\n definitionUrl: string;\n}\n\n/**\n * Fetches schema metadata from the blockchain by its ID.\n *\n * @param context - The blockchain context containing wallet and public clients\n * @param schemaId - The ID of the schema to fetch\n * @returns The schema metadata with id, name, dialect, and definitionUrl\n * @throws Error if chain ID is not available, schema not found, or data is incomplete\n *\n * @internal\n */\nexport async function fetchSchemaFromChain(\n context: BlockchainContext,\n schemaId: number,\n): Promise<SchemaMetadata> {\n const chainId =\n context.walletClient?.chain?.id ?? context.publicClient.chain?.id;\n if (!chainId) {\n throw new Error(\"Chain ID not available\");\n }\n\n const dataRefinerRegistryAddress = getContractAddress(\n chainId,\n \"DataRefinerRegistry\",\n );\n const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n const dataRefinerRegistry = getContract({\n address: dataRefinerRegistryAddress,\n abi: dataRefinerRegistryAbi,\n client: context.publicClient,\n });\n\n const schemaData = await dataRefinerRegistry.read.schemas([BigInt(schemaId)]);\n\n if (!schemaData) {\n throw new Error(`Schema with ID ${schemaId} not found`);\n }\n\n // TODO(TYPES): Contract read returns unknown type from viem library.\n // Future improvement: Create typed contract interface when viem adds support\n // or implement a contract type generator from ABI definitions.\n const schemaObj = schemaData as unknown as SchemaContractData;\n\n if (!schemaObj.name || !schemaObj.dialect || !schemaObj.definitionUrl) {\n throw new Error(\"Incomplete schema data\");\n }\n\n return {\n id: schemaId,\n name: schemaObj.name,\n dialect: schemaObj.dialect as \"json\" | \"sqlite\",\n definitionUrl: schemaObj.definitionUrl,\n };\n}\n\n/**\n * Fetches the total count of schemas from the blockchain.\n *\n * @param context - The blockchain context containing wallet and public clients\n * @returns The total number of schemas\n * @throws Error if chain ID is not available or operation fails\n *\n * @internal\n */\nexport async function fetchSchemaCountFromChain(\n context: BlockchainContext,\n): Promise<number> {\n const chainId =\n context.walletClient?.chain?.id ?? context.publicClient.chain?.id;\n if (!chainId) {\n throw new Error(\"Chain ID not available\");\n }\n\n const dataRefinerRegistryAddress = getContractAddress(\n chainId,\n \"DataRefinerRegistry\",\n );\n const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n const dataRefinerRegistry = getContract({\n address: dataRefinerRegistryAddress,\n abi: dataRefinerRegistryAbi,\n client: context.publicClient,\n });\n\n const count = await dataRefinerRegistry.read.schemasCount();\n return Number(count);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA4B;AAE5B,uBAAmC;AACnC,iBAAuB;AAiCvB,eAAsB,qBACpB,SACA,UACyB;AACzB,QAAM,UACJ,QAAQ,cAAc,OAAO,MAAM,QAAQ,aAAa,OAAO;AACjE,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,QAAM,iCAA6B;AAAA,IACjC;AAAA,IACA;AAAA,EACF;AACA,QAAM,6BAAyB,mBAAO,qBAAqB;AAE3D,QAAM,0BAAsB,yBAAY;AAAA,IACtC,SAAS;AAAA,IACT,KAAK;AAAA,IACL,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,QAAM,aAAa,MAAM,oBAAoB,KAAK,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAE5E,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,kBAAkB,QAAQ,YAAY;AAAA,EACxD;AAKA,QAAM,YAAY;AAElB,MAAI,CAAC,UAAU,QAAQ,CAAC,UAAU,WAAW,CAAC,UAAU,eAAe;AACrE,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM,UAAU;AAAA,IAChB,SAAS,UAAU;AAAA,IACnB,eAAe,UAAU;AAAA,EAC3B;AACF;AAWA,eAAsB,0BACpB,SACiB;AACjB,QAAM,UACJ,QAAQ,cAAc,OAAO,MAAM,QAAQ,aAAa,OAAO;AACjE,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,QAAM,iCAA6B;AAAA,IACjC;AAAA,IACA;AAAA,EACF;AACA,QAAM,6BAAyB,mBAAO,qBAAqB;AAE3D,QAAM,0BAAsB,yBAAY;AAAA,IACtC,SAAS;AAAA,IACT,KAAK;AAAA,IACL,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,QAAM,QAAQ,MAAM,oBAAoB,KAAK,aAAa;AAC1D,SAAO,OAAO,KAAK;AACrB;","names":[]}
@@ -5,7 +5,7 @@ import type { SchemaMetadata } from "../../types/index";
5
5
  * Only includes the minimal required fields to avoid coupling.
6
6
  */
7
7
  interface BlockchainContext {
8
- walletClient: WalletClient;
8
+ walletClient?: WalletClient;
9
9
  publicClient: PublicClient;
10
10
  }
11
11
  /**
@@ -1,8 +1,8 @@
1
1
  import { getContract } from "viem";
2
- import { getContractAddress } from "../../config/addresses";
2
+ import { getContractAddress } from "../../generated/addresses";
3
3
  import { getAbi } from "../../generated/abi";
4
4
  async function fetchSchemaFromChain(context, schemaId) {
5
- const chainId = context.walletClient.chain?.id;
5
+ const chainId = context.walletClient?.chain?.id ?? context.publicClient.chain?.id;
6
6
  if (!chainId) {
7
7
  throw new Error("Chain ID not available");
8
8
  }
@@ -32,7 +32,7 @@ async function fetchSchemaFromChain(context, schemaId) {
32
32
  };
33
33
  }
34
34
  async function fetchSchemaCountFromChain(context) {
35
- const chainId = context.walletClient.chain?.id;
35
+ const chainId = context.walletClient?.chain?.id ?? context.publicClient.chain?.id;
36
36
  if (!chainId) {
37
37
  throw new Error("Chain ID not available");
38
38
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/blockchain/registry.ts"],"sourcesContent":["import { getContract } from \"viem\";\nimport type { PublicClient, WalletClient } from \"viem\";\nimport { getContractAddress } from \"../../config/addresses\";\nimport { getAbi } from \"../../generated/abi\";\nimport type { SchemaMetadata } from \"../../types/index\";\n\n/**\n * Shared context for blockchain operations.\n * Only includes the minimal required fields to avoid coupling.\n */\ninterface BlockchainContext {\n walletClient: WalletClient;\n publicClient: PublicClient;\n}\n\n/**\n * Contract data structure returned by the blockchain.\n *\n * @internal\n */\ninterface SchemaContractData {\n name: string;\n dialect: string;\n definitionUrl: string;\n}\n\n/**\n * Fetches schema metadata from the blockchain by its ID.\n *\n * @param context - The blockchain context containing wallet and public clients\n * @param schemaId - The ID of the schema to fetch\n * @returns The schema metadata with id, name, dialect, and definitionUrl\n * @throws Error if chain ID is not available, schema not found, or data is incomplete\n *\n * @internal\n */\nexport async function fetchSchemaFromChain(\n context: BlockchainContext,\n schemaId: number,\n): Promise<SchemaMetadata> {\n const chainId = context.walletClient.chain?.id;\n if (!chainId) {\n throw new Error(\"Chain ID not available\");\n }\n\n const dataRefinerRegistryAddress = getContractAddress(\n chainId,\n \"DataRefinerRegistry\",\n );\n const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n const dataRefinerRegistry = getContract({\n address: dataRefinerRegistryAddress,\n abi: dataRefinerRegistryAbi,\n client: context.publicClient,\n });\n\n const schemaData = await dataRefinerRegistry.read.schemas([BigInt(schemaId)]);\n\n if (!schemaData) {\n throw new Error(`Schema with ID ${schemaId} not found`);\n }\n\n // TODO(TYPES): Contract read returns unknown type from viem library.\n // Future improvement: Create typed contract interface when viem adds support\n // or implement a contract type generator from ABI definitions.\n const schemaObj = schemaData as unknown as SchemaContractData;\n\n if (!schemaObj.name || !schemaObj.dialect || !schemaObj.definitionUrl) {\n throw new Error(\"Incomplete schema data\");\n }\n\n return {\n id: schemaId,\n name: schemaObj.name,\n dialect: schemaObj.dialect as \"json\" | \"sqlite\",\n definitionUrl: schemaObj.definitionUrl,\n };\n}\n\n/**\n * Fetches the total count of schemas from the blockchain.\n *\n * @param context - The blockchain context containing wallet and public clients\n * @returns The total number of schemas\n * @throws Error if chain ID is not available or operation fails\n *\n * @internal\n */\nexport async function fetchSchemaCountFromChain(\n context: BlockchainContext,\n): Promise<number> {\n const chainId = context.walletClient.chain?.id;\n if (!chainId) {\n throw new Error(\"Chain ID not available\");\n }\n\n const dataRefinerRegistryAddress = getContractAddress(\n chainId,\n \"DataRefinerRegistry\",\n );\n const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n const dataRefinerRegistry = getContract({\n address: dataRefinerRegistryAddress,\n abi: dataRefinerRegistryAbi,\n client: context.publicClient,\n });\n\n const count = await dataRefinerRegistry.read.schemasCount();\n return Number(count);\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAE5B,SAAS,0BAA0B;AACnC,SAAS,cAAc;AAiCvB,eAAsB,qBACpB,SACA,UACyB;AACzB,QAAM,UAAU,QAAQ,aAAa,OAAO;AAC5C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,QAAM,6BAA6B;AAAA,IACjC;AAAA,IACA;AAAA,EACF;AACA,QAAM,yBAAyB,OAAO,qBAAqB;AAE3D,QAAM,sBAAsB,YAAY;AAAA,IACtC,SAAS;AAAA,IACT,KAAK;AAAA,IACL,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,QAAM,aAAa,MAAM,oBAAoB,KAAK,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAE5E,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,kBAAkB,QAAQ,YAAY;AAAA,EACxD;AAKA,QAAM,YAAY;AAElB,MAAI,CAAC,UAAU,QAAQ,CAAC,UAAU,WAAW,CAAC,UAAU,eAAe;AACrE,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM,UAAU;AAAA,IAChB,SAAS,UAAU;AAAA,IACnB,eAAe,UAAU;AAAA,EAC3B;AACF;AAWA,eAAsB,0BACpB,SACiB;AACjB,QAAM,UAAU,QAAQ,aAAa,OAAO;AAC5C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,QAAM,6BAA6B;AAAA,IACjC;AAAA,IACA;AAAA,EACF;AACA,QAAM,yBAAyB,OAAO,qBAAqB;AAE3D,QAAM,sBAAsB,YAAY;AAAA,IACtC,SAAS;AAAA,IACT,KAAK;AAAA,IACL,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,QAAM,QAAQ,MAAM,oBAAoB,KAAK,aAAa;AAC1D,SAAO,OAAO,KAAK;AACrB;","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/blockchain/registry.ts"],"sourcesContent":["import { getContract } from \"viem\";\nimport type { PublicClient, WalletClient } from \"viem\";\nimport { getContractAddress } from \"../../generated/addresses\";\nimport { getAbi } from \"../../generated/abi\";\nimport type { SchemaMetadata } from \"../../types/index\";\n\n/**\n * Shared context for blockchain operations.\n * Only includes the minimal required fields to avoid coupling.\n */\ninterface BlockchainContext {\n walletClient?: WalletClient;\n publicClient: PublicClient;\n}\n\n/**\n * Contract data structure returned by the blockchain.\n *\n * @internal\n */\ninterface SchemaContractData {\n name: string;\n dialect: string;\n definitionUrl: string;\n}\n\n/**\n * Fetches schema metadata from the blockchain by its ID.\n *\n * @param context - The blockchain context containing wallet and public clients\n * @param schemaId - The ID of the schema to fetch\n * @returns The schema metadata with id, name, dialect, and definitionUrl\n * @throws Error if chain ID is not available, schema not found, or data is incomplete\n *\n * @internal\n */\nexport async function fetchSchemaFromChain(\n context: BlockchainContext,\n schemaId: number,\n): Promise<SchemaMetadata> {\n const chainId =\n context.walletClient?.chain?.id ?? context.publicClient.chain?.id;\n if (!chainId) {\n throw new Error(\"Chain ID not available\");\n }\n\n const dataRefinerRegistryAddress = getContractAddress(\n chainId,\n \"DataRefinerRegistry\",\n );\n const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n const dataRefinerRegistry = getContract({\n address: dataRefinerRegistryAddress,\n abi: dataRefinerRegistryAbi,\n client: context.publicClient,\n });\n\n const schemaData = await dataRefinerRegistry.read.schemas([BigInt(schemaId)]);\n\n if (!schemaData) {\n throw new Error(`Schema with ID ${schemaId} not found`);\n }\n\n // TODO(TYPES): Contract read returns unknown type from viem library.\n // Future improvement: Create typed contract interface when viem adds support\n // or implement a contract type generator from ABI definitions.\n const schemaObj = schemaData as unknown as SchemaContractData;\n\n if (!schemaObj.name || !schemaObj.dialect || !schemaObj.definitionUrl) {\n throw new Error(\"Incomplete schema data\");\n }\n\n return {\n id: schemaId,\n name: schemaObj.name,\n dialect: schemaObj.dialect as \"json\" | \"sqlite\",\n definitionUrl: schemaObj.definitionUrl,\n };\n}\n\n/**\n * Fetches the total count of schemas from the blockchain.\n *\n * @param context - The blockchain context containing wallet and public clients\n * @returns The total number of schemas\n * @throws Error if chain ID is not available or operation fails\n *\n * @internal\n */\nexport async function fetchSchemaCountFromChain(\n context: BlockchainContext,\n): Promise<number> {\n const chainId =\n context.walletClient?.chain?.id ?? context.publicClient.chain?.id;\n if (!chainId) {\n throw new Error(\"Chain ID not available\");\n }\n\n const dataRefinerRegistryAddress = getContractAddress(\n chainId,\n \"DataRefinerRegistry\",\n );\n const dataRefinerRegistryAbi = getAbi(\"DataRefinerRegistry\");\n\n const dataRefinerRegistry = getContract({\n address: dataRefinerRegistryAddress,\n abi: dataRefinerRegistryAbi,\n client: context.publicClient,\n });\n\n const count = await dataRefinerRegistry.read.schemasCount();\n return Number(count);\n}\n"],"mappings":"AAAA,SAAS,mBAAmB;AAE5B,SAAS,0BAA0B;AACnC,SAAS,cAAc;AAiCvB,eAAsB,qBACpB,SACA,UACyB;AACzB,QAAM,UACJ,QAAQ,cAAc,OAAO,MAAM,QAAQ,aAAa,OAAO;AACjE,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,QAAM,6BAA6B;AAAA,IACjC;AAAA,IACA;AAAA,EACF;AACA,QAAM,yBAAyB,OAAO,qBAAqB;AAE3D,QAAM,sBAAsB,YAAY;AAAA,IACtC,SAAS;AAAA,IACT,KAAK;AAAA,IACL,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,QAAM,aAAa,MAAM,oBAAoB,KAAK,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAE5E,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,kBAAkB,QAAQ,YAAY;AAAA,EACxD;AAKA,QAAM,YAAY;AAElB,MAAI,CAAC,UAAU,QAAQ,CAAC,UAAU,WAAW,CAAC,UAAU,eAAe;AACrE,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM,UAAU;AAAA,IAChB,SAAS,UAAU;AAAA,IACnB,eAAe,UAAU;AAAA,EAC3B;AACF;AAWA,eAAsB,0BACpB,SACiB;AACjB,QAAM,UACJ,QAAQ,cAAc,OAAO,MAAM,QAAQ,aAAa,OAAO;AACjE,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AAEA,QAAM,6BAA6B;AAAA,IACjC;AAAA,IACA;AAAA,EACF;AACA,QAAM,yBAAyB,OAAO,qBAAqB;AAE3D,QAAM,sBAAsB,YAAY;AAAA,IACtC,SAAS;AAAA,IACT,KAAK;AAAA,IACL,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,QAAM,QAAQ,MAAM,oBAAoB,KAAK,aAAa;AAC1D,SAAO,OAAO,KAAK;AACrB;","names":[]}