@opendatalabs/vana-sdk 0.1.0-alpha.9b6ddbc → 0.1.0-alpha.9bbda27

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 (432) hide show
  1. package/README.md +67 -351
  2. package/dist/client/__tests__/enhancedResponse.test.d.ts +1 -0
  3. package/dist/client/enhancedResponse.cjs +164 -0
  4. package/dist/client/enhancedResponse.cjs.map +1 -0
  5. package/dist/client/enhancedResponse.d.ts +120 -0
  6. package/dist/client/enhancedResponse.js +138 -0
  7. package/dist/client/enhancedResponse.js.map +1 -0
  8. package/dist/config/contracts.config.cjs +403 -0
  9. package/dist/config/contracts.config.cjs.map +1 -0
  10. package/dist/config/contracts.config.d.ts +84 -0
  11. package/dist/config/contracts.config.js +378 -0
  12. package/dist/config/contracts.config.js.map +1 -0
  13. package/dist/contracts/contractController.cjs +1 -1
  14. package/dist/contracts/contractController.cjs.map +1 -1
  15. package/dist/contracts/contractController.js +1 -1
  16. package/dist/contracts/contractController.js.map +1 -1
  17. package/dist/controllers/__tests__/data-consistency-integration.test.d.ts +7 -0
  18. package/dist/controllers/__tests__/operations.processQueue.test.d.ts +1 -0
  19. package/dist/controllers/accessSettlement.cjs +289 -0
  20. package/dist/controllers/accessSettlement.cjs.map +1 -0
  21. package/dist/controllers/accessSettlement.d.ts +157 -0
  22. package/dist/controllers/accessSettlement.js +265 -0
  23. package/dist/controllers/accessSettlement.js.map +1 -0
  24. package/dist/controllers/accessSettlement.test.d.ts +1 -0
  25. package/dist/controllers/base.cjs +33 -0
  26. package/dist/controllers/base.cjs.map +1 -1
  27. package/dist/controllers/base.d.ts +10 -0
  28. package/dist/controllers/base.js +33 -0
  29. package/dist/controllers/base.js.map +1 -1
  30. package/dist/controllers/data.cjs +279 -160
  31. package/dist/controllers/data.cjs.map +1 -1
  32. package/dist/controllers/data.d.ts +34 -19
  33. package/dist/controllers/data.js +292 -163
  34. package/dist/controllers/data.js.map +1 -1
  35. package/dist/controllers/dataset.cjs +357 -0
  36. package/dist/controllers/dataset.cjs.map +1 -0
  37. package/dist/controllers/dataset.d.ts +178 -0
  38. package/dist/controllers/dataset.js +333 -0
  39. package/dist/controllers/dataset.js.map +1 -0
  40. package/dist/controllers/dataset.test.d.ts +1 -0
  41. package/dist/controllers/operations.cjs +430 -0
  42. package/dist/controllers/operations.cjs.map +1 -0
  43. package/dist/controllers/operations.d.ts +229 -0
  44. package/dist/controllers/operations.js +406 -0
  45. package/dist/controllers/operations.js.map +1 -0
  46. package/dist/controllers/permissions.cjs +606 -214
  47. package/dist/controllers/permissions.cjs.map +1 -1
  48. package/dist/controllers/permissions.d.ts +141 -34
  49. package/dist/controllers/permissions.js +606 -214
  50. package/dist/controllers/permissions.js.map +1 -1
  51. package/dist/controllers/runtimePermissions.cjs +285 -0
  52. package/dist/controllers/runtimePermissions.cjs.map +1 -0
  53. package/dist/controllers/runtimePermissions.d.ts +152 -0
  54. package/dist/controllers/runtimePermissions.js +264 -0
  55. package/dist/controllers/runtimePermissions.js.map +1 -0
  56. package/dist/controllers/runtimePermissions.test.d.ts +1 -0
  57. package/dist/controllers/schemas.cjs +82 -5
  58. package/dist/controllers/schemas.cjs.map +1 -1
  59. package/dist/controllers/schemas.d.ts +41 -0
  60. package/dist/controllers/schemas.js +82 -5
  61. package/dist/controllers/schemas.js.map +1 -1
  62. package/dist/controllers/server.cjs +184 -49
  63. package/dist/controllers/server.cjs.map +1 -1
  64. package/dist/controllers/server.d.ts +74 -13
  65. package/dist/controllers/server.js +184 -49
  66. package/dist/controllers/server.js.map +1 -1
  67. package/dist/core/__tests__/health.test.d.ts +1 -0
  68. package/dist/core/__tests__/inMemoryNonceManager.test.d.ts +1 -0
  69. package/dist/core/__tests__/nonceManager.test.d.ts +1 -0
  70. package/dist/core/__tests__/pollingManager.test.d.ts +4 -0
  71. package/dist/core/health.cjs +289 -0
  72. package/dist/core/health.cjs.map +1 -0
  73. package/dist/core/health.d.ts +143 -0
  74. package/dist/core/health.js +265 -0
  75. package/dist/core/health.js.map +1 -0
  76. package/dist/core/inMemoryNonceManager.cjs +138 -0
  77. package/dist/core/inMemoryNonceManager.cjs.map +1 -0
  78. package/dist/core/inMemoryNonceManager.d.ts +69 -0
  79. package/dist/core/inMemoryNonceManager.js +114 -0
  80. package/dist/core/inMemoryNonceManager.js.map +1 -0
  81. package/dist/core/nonceManager.cjs +304 -0
  82. package/dist/core/nonceManager.cjs.map +1 -0
  83. package/dist/core/nonceManager.d.ts +116 -0
  84. package/dist/core/nonceManager.js +280 -0
  85. package/dist/core/nonceManager.js.map +1 -0
  86. package/dist/core/pollingManager.cjs +292 -0
  87. package/dist/core/pollingManager.cjs.map +1 -0
  88. package/dist/core/pollingManager.d.ts +120 -0
  89. package/dist/core/pollingManager.js +268 -0
  90. package/dist/core/pollingManager.js.map +1 -0
  91. package/dist/core.cjs +67 -1
  92. package/dist/core.cjs.map +1 -1
  93. package/dist/core.d.ts +63 -3
  94. package/dist/core.js +67 -1
  95. package/dist/core.js.map +1 -1
  96. package/dist/crypto/ecies/__tests__/constants.test.d.ts +1 -1
  97. package/dist/crypto/ecies/__tests__/interface.test.d.ts +1 -0
  98. package/dist/crypto/ecies/__tests__/serialization.test.d.ts +8 -0
  99. package/dist/crypto/ecies/__tests__/utils.test.d.ts +1 -0
  100. package/dist/crypto/ecies/base.cjs +59 -23
  101. package/dist/crypto/ecies/base.cjs.map +1 -1
  102. package/dist/crypto/ecies/base.js +59 -23
  103. package/dist/crypto/ecies/base.js.map +1 -1
  104. package/dist/crypto/ecies/constants.cjs +2 -10
  105. package/dist/crypto/ecies/constants.cjs.map +1 -1
  106. package/dist/crypto/ecies/constants.d.ts +0 -9
  107. package/dist/crypto/ecies/constants.js +1 -8
  108. package/dist/crypto/ecies/constants.js.map +1 -1
  109. package/dist/crypto/ecies/index.cjs.map +1 -1
  110. package/dist/crypto/ecies/index.d.ts +10 -2
  111. package/dist/crypto/ecies/index.js.map +1 -1
  112. package/dist/crypto/ecies/interface.cjs +19 -2
  113. package/dist/crypto/ecies/interface.cjs.map +1 -1
  114. package/dist/crypto/ecies/interface.js +19 -2
  115. package/dist/crypto/ecies/interface.js.map +1 -1
  116. package/dist/errors.cjs +29 -0
  117. package/dist/errors.cjs.map +1 -1
  118. package/dist/errors.d.ts +64 -0
  119. package/dist/errors.js +28 -0
  120. package/dist/errors.js.map +1 -1
  121. package/dist/generated/abi/AccessSettlementImplementation.cjs +635 -0
  122. package/dist/generated/abi/AccessSettlementImplementation.cjs.map +1 -0
  123. package/dist/generated/abi/AccessSettlementImplementation.d.ts +468 -0
  124. package/dist/generated/abi/AccessSettlementImplementation.js +611 -0
  125. package/dist/generated/abi/AccessSettlementImplementation.js.map +1 -0
  126. package/dist/generated/abi/AttestationPolicyImplementation.cjs +614 -0
  127. package/dist/generated/abi/AttestationPolicyImplementation.cjs.map +1 -0
  128. package/dist/generated/abi/AttestationPolicyImplementation.d.ts +449 -0
  129. package/dist/generated/abi/AttestationPolicyImplementation.js +590 -0
  130. package/dist/generated/abi/AttestationPolicyImplementation.js.map +1 -0
  131. package/dist/generated/abi/ComputeEngineImplementation.cjs.map +1 -1
  132. package/dist/generated/abi/ComputeEngineImplementation.js.map +1 -1
  133. package/dist/generated/abi/{DLPTreasuryImplementation.cjs → ComputeEngineTreasuryImplementation.cjs} +16 -92
  134. package/dist/generated/abi/ComputeEngineTreasuryImplementation.cjs.map +1 -0
  135. package/dist/generated/abi/{DLPTreasuryImplementation.d.ts → ComputeEngineTreasuryImplementation.d.ts} +9 -67
  136. package/dist/generated/abi/{DLPTreasuryImplementation.js → ComputeEngineTreasuryImplementation.js} +12 -88
  137. package/dist/generated/abi/ComputeEngineTreasuryImplementation.js.map +1 -0
  138. package/dist/generated/abi/ComputeInstructionRegistryImplementation.cjs.map +1 -1
  139. package/dist/generated/abi/ComputeInstructionRegistryImplementation.js.map +1 -1
  140. package/dist/generated/abi/DATFactoryImplementation.cjs.map +1 -1
  141. package/dist/generated/abi/DATFactoryImplementation.js.map +1 -1
  142. package/dist/generated/abi/DATImplementation.cjs.map +1 -1
  143. package/dist/generated/abi/DATImplementation.js.map +1 -1
  144. package/dist/generated/abi/DATPausableImplementation.cjs.map +1 -1
  145. package/dist/generated/abi/DATPausableImplementation.js.map +1 -1
  146. package/dist/generated/abi/DATVotesImplementation.cjs.map +1 -1
  147. package/dist/generated/abi/DATVotesImplementation.js.map +1 -1
  148. package/dist/generated/abi/DLPPerformanceImplementation.cjs +42 -0
  149. package/dist/generated/abi/DLPPerformanceImplementation.cjs.map +1 -1
  150. package/dist/generated/abi/DLPPerformanceImplementation.d.ts +32 -0
  151. package/dist/generated/abi/DLPPerformanceImplementation.js +42 -0
  152. package/dist/generated/abi/DLPPerformanceImplementation.js.map +1 -1
  153. package/dist/generated/abi/DLPRegistryImplementation.cjs +5 -5
  154. package/dist/generated/abi/DLPRegistryImplementation.cjs.map +1 -1
  155. package/dist/generated/abi/DLPRegistryImplementation.d.ts +4 -4
  156. package/dist/generated/abi/DLPRegistryImplementation.js +5 -5
  157. package/dist/generated/abi/DLPRegistryImplementation.js.map +1 -1
  158. package/dist/generated/abi/DLPRegistryTreasuryImplementation.cjs.map +1 -1
  159. package/dist/generated/abi/DLPRegistryTreasuryImplementation.js.map +1 -1
  160. package/dist/generated/abi/DLPRewardDeployerImplementation.cjs +166 -2
  161. package/dist/generated/abi/DLPRewardDeployerImplementation.cjs.map +1 -1
  162. package/dist/generated/abi/DLPRewardDeployerImplementation.d.ts +129 -2
  163. package/dist/generated/abi/DLPRewardDeployerImplementation.js +166 -2
  164. package/dist/generated/abi/DLPRewardDeployerImplementation.js.map +1 -1
  165. package/dist/generated/abi/DLPRewardSwapImplementation.cjs.map +1 -1
  166. package/dist/generated/abi/DLPRewardSwapImplementation.js.map +1 -1
  167. package/dist/generated/abi/DataLiquidityPoolImplementation.cjs +282 -100
  168. package/dist/generated/abi/DataLiquidityPoolImplementation.cjs.map +1 -1
  169. package/dist/generated/abi/DataLiquidityPoolImplementation.d.ts +218 -79
  170. package/dist/generated/abi/DataLiquidityPoolImplementation.js +281 -99
  171. package/dist/generated/abi/DataLiquidityPoolImplementation.js.map +1 -1
  172. package/dist/generated/abi/DataPortabilityGranteesImplementation.cjs +167 -19
  173. package/dist/generated/abi/DataPortabilityGranteesImplementation.cjs.map +1 -1
  174. package/dist/generated/abi/DataPortabilityGranteesImplementation.d.ts +127 -14
  175. package/dist/generated/abi/DataPortabilityGranteesImplementation.js +167 -19
  176. package/dist/generated/abi/DataPortabilityGranteesImplementation.js.map +1 -1
  177. package/dist/generated/abi/DataPortabilityPermissionsImplementation.cjs +0 -19
  178. package/dist/generated/abi/DataPortabilityPermissionsImplementation.cjs.map +1 -1
  179. package/dist/generated/abi/DataPortabilityPermissionsImplementation.d.ts +0 -14
  180. package/dist/generated/abi/DataPortabilityPermissionsImplementation.js +0 -19
  181. package/dist/generated/abi/DataPortabilityPermissionsImplementation.js.map +1 -1
  182. package/dist/generated/abi/DataPortabilityServersImplementation.cjs +0 -19
  183. package/dist/generated/abi/DataPortabilityServersImplementation.cjs.map +1 -1
  184. package/dist/generated/abi/DataPortabilityServersImplementation.d.ts +0 -14
  185. package/dist/generated/abi/DataPortabilityServersImplementation.js +0 -19
  186. package/dist/generated/abi/DataPortabilityServersImplementation.js.map +1 -1
  187. package/dist/generated/abi/DataRefinerRegistryImplementation.cjs.map +1 -1
  188. package/dist/generated/abi/DataRefinerRegistryImplementation.js.map +1 -1
  189. package/dist/generated/abi/DataRegistryImplementation.cjs +0 -13
  190. package/dist/generated/abi/DataRegistryImplementation.cjs.map +1 -1
  191. package/dist/generated/abi/DataRegistryImplementation.d.ts +0 -10
  192. package/dist/generated/abi/DataRegistryImplementation.js +0 -13
  193. package/dist/generated/abi/DataRegistryImplementation.js.map +1 -1
  194. package/dist/generated/abi/DatasetRegistryImplementation.cjs +751 -0
  195. package/dist/generated/abi/DatasetRegistryImplementation.cjs.map +1 -0
  196. package/dist/generated/abi/DatasetRegistryImplementation.d.ts +557 -0
  197. package/dist/generated/abi/DatasetRegistryImplementation.js +727 -0
  198. package/dist/generated/abi/DatasetRegistryImplementation.js.map +1 -0
  199. package/dist/generated/abi/ProtocolConfigImplementation.cjs +578 -0
  200. package/dist/generated/abi/ProtocolConfigImplementation.cjs.map +1 -0
  201. package/dist/generated/abi/ProtocolConfigImplementation.d.ts +423 -0
  202. package/dist/generated/abi/ProtocolConfigImplementation.js +554 -0
  203. package/dist/generated/abi/ProtocolConfigImplementation.js.map +1 -0
  204. package/dist/generated/abi/QueryEngineImplementation.cjs.map +1 -1
  205. package/dist/generated/abi/QueryEngineImplementation.js.map +1 -1
  206. package/dist/generated/abi/SwapHelperImplementation.cjs +0 -43
  207. package/dist/generated/abi/SwapHelperImplementation.cjs.map +1 -1
  208. package/dist/generated/abi/SwapHelperImplementation.d.ts +0 -35
  209. package/dist/generated/abi/SwapHelperImplementation.js +0 -43
  210. package/dist/generated/abi/SwapHelperImplementation.js.map +1 -1
  211. package/dist/generated/abi/TeePoolDedicatedGpuImplementation.cjs.map +1 -1
  212. package/dist/generated/abi/TeePoolDedicatedGpuImplementation.js.map +1 -1
  213. package/dist/generated/abi/TeePoolDedicatedStandardImplementation.cjs.map +1 -1
  214. package/dist/generated/abi/TeePoolDedicatedStandardImplementation.js.map +1 -1
  215. package/dist/generated/abi/TeePoolEphemeralStandardImplementation.cjs.map +1 -1
  216. package/dist/generated/abi/TeePoolEphemeralStandardImplementation.js.map +1 -1
  217. package/dist/generated/abi/TeePoolPersistentGpuImplementation.cjs.map +1 -1
  218. package/dist/generated/abi/TeePoolPersistentGpuImplementation.js.map +1 -1
  219. package/dist/generated/abi/TeePoolPersistentStandardImplementation.cjs.map +1 -1
  220. package/dist/generated/abi/TeePoolPersistentStandardImplementation.js.map +1 -1
  221. package/dist/generated/abi/TeePoolPhalaImplementation.cjs.map +1 -1
  222. package/dist/generated/abi/TeePoolPhalaImplementation.js.map +1 -1
  223. package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.cjs +1251 -0
  224. package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.cjs.map +1 -0
  225. package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.d.ts +948 -0
  226. package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.js +1227 -0
  227. package/dist/generated/abi/UniswapV3NonfungiblePositionManagerImplementation.js.map +1 -0
  228. package/dist/generated/abi/UniswapV3QuoterV2Implementation.cjs +297 -0
  229. package/dist/generated/abi/UniswapV3QuoterV2Implementation.cjs.map +1 -0
  230. package/dist/generated/abi/UniswapV3QuoterV2Implementation.d.ts +206 -0
  231. package/dist/generated/abi/UniswapV3QuoterV2Implementation.js +273 -0
  232. package/dist/generated/abi/UniswapV3QuoterV2Implementation.js.map +1 -0
  233. package/dist/generated/abi/VanaEpochImplementation.cjs +195 -0
  234. package/dist/generated/abi/VanaEpochImplementation.cjs.map +1 -1
  235. package/dist/generated/abi/VanaEpochImplementation.d.ts +151 -0
  236. package/dist/generated/abi/VanaEpochImplementation.js +195 -0
  237. package/dist/generated/abi/VanaEpochImplementation.js.map +1 -1
  238. package/dist/generated/abi/VanaPoolEntityImplementation.cjs +22 -65
  239. package/dist/generated/abi/VanaPoolEntityImplementation.cjs.map +1 -1
  240. package/dist/generated/abi/VanaPoolEntityImplementation.d.ts +17 -51
  241. package/dist/generated/abi/VanaPoolEntityImplementation.js +22 -65
  242. package/dist/generated/abi/VanaPoolEntityImplementation.js.map +1 -1
  243. package/dist/generated/abi/VanaPoolStakingImplementation.cjs +113 -1
  244. package/dist/generated/abi/VanaPoolStakingImplementation.cjs.map +1 -1
  245. package/dist/generated/abi/VanaPoolStakingImplementation.d.ts +85 -1
  246. package/dist/generated/abi/VanaPoolStakingImplementation.js +113 -1
  247. package/dist/generated/abi/VanaPoolStakingImplementation.js.map +1 -1
  248. package/dist/generated/abi/VanaPoolTreasuryImplementation.cjs.map +1 -1
  249. package/dist/generated/abi/VanaPoolTreasuryImplementation.js.map +1 -1
  250. package/dist/generated/abi/VanaRuntimePermissionsImplementation.cjs +759 -0
  251. package/dist/generated/abi/VanaRuntimePermissionsImplementation.cjs.map +1 -0
  252. package/dist/generated/abi/VanaRuntimePermissionsImplementation.d.ts +563 -0
  253. package/dist/generated/abi/VanaRuntimePermissionsImplementation.js +735 -0
  254. package/dist/generated/abi/VanaRuntimePermissionsImplementation.js.map +1 -0
  255. package/dist/generated/abi/VanaRuntimeServersImplementation.cjs +820 -0
  256. package/dist/generated/abi/VanaRuntimeServersImplementation.cjs.map +1 -0
  257. package/dist/generated/abi/VanaRuntimeServersImplementation.d.ts +609 -0
  258. package/dist/generated/abi/VanaRuntimeServersImplementation.js +796 -0
  259. package/dist/generated/abi/VanaRuntimeServersImplementation.js.map +1 -0
  260. package/dist/generated/abi/VanaTreasuryImplementation.cjs +536 -0
  261. package/dist/generated/abi/VanaTreasuryImplementation.cjs.map +1 -0
  262. package/dist/generated/abi/VanaTreasuryImplementation.d.ts +393 -0
  263. package/dist/generated/abi/VanaTreasuryImplementation.js +512 -0
  264. package/dist/generated/abi/VanaTreasuryImplementation.js.map +1 -0
  265. package/dist/generated/abi/WVANAImplementation.cjs +339 -0
  266. package/dist/generated/abi/WVANAImplementation.cjs.map +1 -0
  267. package/dist/generated/abi/WVANAImplementation.d.ts +244 -0
  268. package/dist/generated/abi/WVANAImplementation.js +315 -0
  269. package/dist/generated/abi/WVANAImplementation.js.map +1 -0
  270. package/dist/generated/abi/index.cjs +79 -47
  271. package/dist/generated/abi/index.cjs.map +1 -1
  272. package/dist/generated/abi/index.d.ts +15783 -10449
  273. package/dist/generated/abi/index.js +65 -43
  274. package/dist/generated/abi/index.js.map +1 -1
  275. package/dist/{config → generated}/addresses.cjs +174 -75
  276. package/dist/generated/addresses.cjs.map +1 -0
  277. package/dist/{config → generated}/addresses.d.ts +174 -165
  278. package/dist/{config → generated}/addresses.js +174 -75
  279. package/dist/generated/addresses.js.map +1 -0
  280. package/dist/generated/event-types.cjs.map +1 -1
  281. package/dist/generated/event-types.d.ts +482 -399
  282. package/dist/generated/eventRegistry.cjs +2601 -724
  283. package/dist/generated/eventRegistry.cjs.map +1 -1
  284. package/dist/generated/eventRegistry.d.ts +2 -2
  285. package/dist/generated/eventRegistry.js +2601 -724
  286. package/dist/generated/eventRegistry.js.map +1 -1
  287. package/dist/generated/server/server-exports.cjs +22 -0
  288. package/dist/generated/server/server-exports.cjs.map +1 -1
  289. package/dist/generated/server/server-exports.d.ts +31 -11
  290. package/dist/generated/server/server-exports.js +17 -0
  291. package/dist/generated/server/server-exports.js.map +1 -1
  292. package/dist/generated/server/server.cjs.map +1 -1
  293. package/dist/generated/server/server.d.ts +771 -402
  294. package/dist/generated/subgraph.cjs +797 -32
  295. package/dist/generated/subgraph.cjs.map +1 -1
  296. package/dist/generated/subgraph.d.ts +135 -0
  297. package/dist/generated/subgraph.js +792 -32
  298. package/dist/generated/subgraph.js.map +1 -1
  299. package/dist/index.browser.d.ts +7 -1
  300. package/dist/index.browser.js +26 -1
  301. package/dist/index.browser.js.map +1 -1
  302. package/dist/index.node.cjs +47 -1
  303. package/dist/index.node.cjs.map +1 -1
  304. package/dist/index.node.d.ts +55 -6
  305. package/dist/index.node.js +43 -2
  306. package/dist/index.node.js.map +1 -1
  307. package/dist/lib/__tests__/redisAtomicStore.test.d.ts +1 -0
  308. package/dist/lib/redisAtomicStore.cjs +201 -0
  309. package/dist/lib/redisAtomicStore.cjs.map +1 -0
  310. package/dist/lib/redisAtomicStore.d.ts +120 -0
  311. package/dist/lib/redisAtomicStore.js +177 -0
  312. package/dist/lib/redisAtomicStore.js.map +1 -0
  313. package/dist/server/relayerHandler.cjs +313 -75
  314. package/dist/server/relayerHandler.cjs.map +1 -1
  315. package/dist/server/relayerHandler.d.ts +35 -2
  316. package/dist/server/relayerHandler.js +313 -75
  317. package/dist/server/relayerHandler.js.map +1 -1
  318. package/dist/storage/index.cjs +3 -0
  319. package/dist/storage/index.cjs.map +1 -1
  320. package/dist/storage/index.d.ts +1 -0
  321. package/dist/storage/index.js +2 -0
  322. package/dist/storage/index.js.map +1 -1
  323. package/dist/storage/providers/dropbox.cjs +237 -0
  324. package/dist/storage/providers/dropbox.cjs.map +1 -0
  325. package/dist/storage/providers/dropbox.d.ts +39 -0
  326. package/dist/storage/providers/dropbox.js +215 -0
  327. package/dist/storage/providers/dropbox.js.map +1 -0
  328. package/dist/storage/providers/dropbox.test.d.ts +1 -0
  329. package/dist/tests/data-upload-owner-validation.test.d.ts +1 -0
  330. package/dist/types/accessSettlement.cjs +17 -0
  331. package/dist/types/accessSettlement.cjs.map +1 -0
  332. package/dist/types/accessSettlement.d.ts +66 -0
  333. package/dist/types/accessSettlement.js +1 -0
  334. package/dist/types/accessSettlement.js.map +1 -0
  335. package/dist/types/atomicStore.cjs +31 -0
  336. package/dist/types/atomicStore.cjs.map +1 -0
  337. package/dist/types/atomicStore.d.ts +236 -0
  338. package/dist/types/atomicStore.js +7 -0
  339. package/dist/types/atomicStore.js.map +1 -0
  340. package/dist/types/config.cjs.map +1 -1
  341. package/dist/types/config.d.ts +32 -0
  342. package/dist/types/config.js.map +1 -1
  343. package/dist/types/controller-context.cjs.map +1 -1
  344. package/dist/types/controller-context.d.ts +4 -1
  345. package/dist/types/data.cjs.map +1 -1
  346. package/dist/types/data.d.ts +7 -4
  347. package/dist/types/dataset.cjs +17 -0
  348. package/dist/types/dataset.cjs.map +1 -0
  349. package/dist/types/dataset.d.ts +51 -0
  350. package/dist/types/dataset.js +1 -0
  351. package/dist/types/dataset.js.map +1 -0
  352. package/dist/types/generics.cjs.map +1 -1
  353. package/dist/types/generics.d.ts +1 -1
  354. package/dist/types/index.cjs.map +1 -1
  355. package/dist/types/index.d.ts +7 -2
  356. package/dist/types/index.js.map +1 -1
  357. package/dist/types/operationStore.cjs +17 -0
  358. package/dist/types/operationStore.cjs.map +1 -0
  359. package/dist/types/operationStore.d.ts +171 -0
  360. package/dist/types/operationStore.js +1 -0
  361. package/dist/types/operationStore.js.map +1 -0
  362. package/dist/types/operations.cjs +3 -15
  363. package/dist/types/operations.cjs.map +1 -1
  364. package/dist/types/operations.d.ts +8 -52
  365. package/dist/types/operations.js +2 -13
  366. package/dist/types/operations.js.map +1 -1
  367. package/dist/types/options.cjs +17 -0
  368. package/dist/types/options.cjs.map +1 -0
  369. package/dist/types/options.d.ts +308 -0
  370. package/dist/types/options.js +1 -0
  371. package/dist/types/options.js.map +1 -0
  372. package/dist/types/permissions.cjs.map +1 -1
  373. package/dist/types/permissions.d.ts +4 -0
  374. package/dist/types/relayer.cjs.map +1 -1
  375. package/dist/types/relayer.d.ts +55 -10
  376. package/dist/types/runtimePermissions.cjs +17 -0
  377. package/dist/types/runtimePermissions.cjs.map +1 -0
  378. package/dist/types/runtimePermissions.d.ts +122 -0
  379. package/dist/types/runtimePermissions.js +1 -0
  380. package/dist/types/runtimePermissions.js.map +1 -0
  381. package/dist/types/utils.cjs.map +1 -1
  382. package/dist/types/utils.d.ts +0 -49
  383. package/dist/utils/__tests__/chainQuery.test.d.ts +1 -0
  384. package/dist/utils/__tests__/subgraphConsistency.test.d.ts +4 -0
  385. package/dist/utils/__tests__/subgraphPagination.test.d.ts +4 -0
  386. package/dist/utils/blockchain/registry.cjs +1 -1
  387. package/dist/utils/blockchain/registry.cjs.map +1 -1
  388. package/dist/utils/blockchain/registry.js +1 -1
  389. package/dist/utils/blockchain/registry.js.map +1 -1
  390. package/dist/utils/chainQuery.cjs +107 -0
  391. package/dist/utils/chainQuery.cjs.map +1 -0
  392. package/dist/utils/chainQuery.d.ts +31 -0
  393. package/dist/utils/chainQuery.js +82 -0
  394. package/dist/utils/chainQuery.js.map +1 -0
  395. package/dist/utils/grantFiles.cjs +4 -1
  396. package/dist/utils/grantFiles.cjs.map +1 -1
  397. package/dist/utils/grantFiles.js +4 -1
  398. package/dist/utils/grantFiles.js.map +1 -1
  399. package/dist/utils/ipfs.cjs +1 -3
  400. package/dist/utils/ipfs.cjs.map +1 -1
  401. package/dist/utils/ipfs.d.ts +4 -4
  402. package/dist/utils/ipfs.js +1 -3
  403. package/dist/utils/ipfs.js.map +1 -1
  404. package/dist/utils/multicall.cjs +1 -1
  405. package/dist/utils/multicall.cjs.map +1 -1
  406. package/dist/utils/multicall.js +1 -1
  407. package/dist/utils/multicall.js.map +1 -1
  408. package/dist/utils/runtimeGrantFiles.cjs +84 -0
  409. package/dist/utils/runtimeGrantFiles.cjs.map +1 -0
  410. package/dist/utils/runtimeGrantFiles.d.ts +66 -0
  411. package/dist/utils/runtimeGrantFiles.js +58 -0
  412. package/dist/utils/runtimeGrantFiles.js.map +1 -0
  413. package/dist/utils/subgraphConsistency.cjs +184 -0
  414. package/dist/utils/subgraphConsistency.cjs.map +1 -0
  415. package/dist/utils/subgraphConsistency.d.ts +65 -0
  416. package/dist/utils/subgraphConsistency.js +155 -0
  417. package/dist/utils/subgraphConsistency.js.map +1 -0
  418. package/dist/utils/subgraphMetaCache.cjs +101 -0
  419. package/dist/utils/subgraphMetaCache.cjs.map +1 -0
  420. package/dist/utils/subgraphMetaCache.d.ts +56 -0
  421. package/dist/utils/subgraphMetaCache.js +76 -0
  422. package/dist/utils/subgraphMetaCache.js.map +1 -0
  423. package/dist/utils/subgraphPagination.cjs +104 -0
  424. package/dist/utils/subgraphPagination.cjs.map +1 -0
  425. package/dist/utils/subgraphPagination.d.ts +78 -0
  426. package/dist/utils/subgraphPagination.js +78 -0
  427. package/dist/utils/subgraphPagination.js.map +1 -0
  428. package/package.json +7 -2
  429. package/dist/config/addresses.cjs.map +0 -1
  430. package/dist/config/addresses.js.map +0 -1
  431. package/dist/generated/abi/DLPTreasuryImplementation.cjs.map +0 -1
  432. package/dist/generated/abi/DLPTreasuryImplementation.js.map +0 -1
@@ -0,0 +1,265 @@
1
+ import { getContract } from "viem";
2
+ import { BaseController } from "./base";
3
+ import { BlockchainError } from "../errors";
4
+ import { getContractAddress } from "../generated/addresses";
5
+ import { getAbi } from "../generated/abi";
6
+ class AccessSettlementController extends BaseController {
7
+ /**
8
+ * Get invoice details for an operation
9
+ *
10
+ * @remarks
11
+ * Retrieves the payment invoice created by the runtime after an operation completes.
12
+ * The invoice contains the final price, payment token, and settlement status.
13
+ *
14
+ * @param operationId - Operation identifier (from runtime API)
15
+ * @returns Invoice details including price and settlement status
16
+ * @throws {BlockchainError} When invoice retrieval fails
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const invoice = await sdk.accessSettlement.getOperationInvoice("op_abc123");
21
+ * console.log(`Price: ${invoice.price} wei`);
22
+ * console.log(`Issuer: ${invoice.issuer}`);
23
+ * console.log(`Settled: ${invoice.isSettled}`);
24
+ *
25
+ * // Convert price to VANA for display
26
+ * const priceInVana = Number(invoice.price) / 10**18;
27
+ * console.log(`Price: ${priceInVana} VANA`);
28
+ * ```
29
+ */
30
+ async getOperationInvoice(operationId) {
31
+ try {
32
+ const chainId = await this.context.publicClient.getChainId();
33
+ const contractAddress = getContractAddress(chainId, "AccessSettlement");
34
+ const abi = getAbi("AccessSettlement");
35
+ const contract = getContract({
36
+ address: contractAddress,
37
+ abi,
38
+ client: this.context.publicClient
39
+ });
40
+ const operationIdBytes = this.stringToBytes(operationId);
41
+ const result = await contract.read.getOperationInvoice([
42
+ operationIdBytes
43
+ ]);
44
+ const invoice = result;
45
+ return {
46
+ issuer: invoice.issuer ?? invoice[0],
47
+ grantee: invoice.grantee ?? invoice[1],
48
+ price: invoice.price ?? invoice[2],
49
+ tokenAddress: invoice.tokenAddress ?? invoice[3],
50
+ isSettled: invoice.isSettled !== void 0 ? invoice.isSettled : invoice[4]
51
+ };
52
+ } catch (error) {
53
+ if (error instanceof Error) {
54
+ throw new BlockchainError(
55
+ `Failed to get operation invoice: ${error.message}`,
56
+ error
57
+ );
58
+ }
59
+ throw new BlockchainError(
60
+ "Failed to get operation invoice with unknown error"
61
+ );
62
+ }
63
+ }
64
+ /**
65
+ * Check if an operation's payment has been settled
66
+ *
67
+ * @remarks
68
+ * Quick check to determine if payment has been completed for an operation.
69
+ * Returns true if settlePaymentWithNative() or settlePaymentWithToken() was called.
70
+ *
71
+ * @param operationId - Operation identifier
72
+ * @returns Whether the payment has been settled
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * const isSettled = await sdk.accessSettlement.isOperationSettled("op_123");
77
+ * if (isSettled) {
78
+ * console.log("Payment already settled, artifacts should be available");
79
+ * } else {
80
+ * console.log("Payment pending");
81
+ * }
82
+ * ```
83
+ */
84
+ async isOperationSettled(operationId) {
85
+ try {
86
+ const chainId = await this.context.publicClient.getChainId();
87
+ const contractAddress = getContractAddress(chainId, "AccessSettlement");
88
+ const abi = getAbi("AccessSettlement");
89
+ const contract = getContract({
90
+ address: contractAddress,
91
+ abi,
92
+ client: this.context.publicClient
93
+ });
94
+ const operationIdBytes = this.stringToBytes(operationId);
95
+ return await contract.read.isOperationSettled([
96
+ operationIdBytes
97
+ ]);
98
+ } catch (error) {
99
+ if (error instanceof Error) {
100
+ throw new BlockchainError(
101
+ `Failed to check settlement status: ${error.message}`,
102
+ error
103
+ );
104
+ }
105
+ throw new BlockchainError(
106
+ "Failed to check settlement status with unknown error"
107
+ );
108
+ }
109
+ }
110
+ /**
111
+ * Settle payment for an operation using native VANA
112
+ *
113
+ * @remarks
114
+ * Pays for a completed operation using native VANA tokens. The amount must match
115
+ * the invoice price exactly. Upon successful payment:
116
+ * - Funds are transferred to the issuer (dataset owner)
117
+ * - PaymentSettled event is emitted
118
+ * - Runtime unlocks operation artifacts for download
119
+ *
120
+ * IMPORTANT: You must send the exact value specified in the invoice.
121
+ * Check the invoice first using getOperationInvoice().
122
+ *
123
+ * @param operationId - Operation identifier to settle payment for
124
+ * @param value - Amount to pay in wei (must match invoice.price)
125
+ * @returns Transaction hash and operation ID
126
+ * @throws {BlockchainError} When payment settlement fails
127
+ * @throws {Error} When wallet is not configured (read-only mode)
128
+ *
129
+ * @example
130
+ * ```typescript
131
+ * // Get invoice to find the exact price
132
+ * const invoice = await sdk.accessSettlement.getOperationInvoice("op_123");
133
+ *
134
+ * // Settle with native VANA
135
+ * const result = await sdk.accessSettlement.settlePaymentWithNative(
136
+ * "op_123",
137
+ * invoice.price // Must match exactly
138
+ * );
139
+ *
140
+ * // Wait for confirmation
141
+ * await sdk.waitForTransactionReceipt(result.hash);
142
+ * console.log("Payment confirmed, artifacts now available");
143
+ * ```
144
+ */
145
+ async settlePaymentWithNative(operationId, value) {
146
+ this.assertWallet();
147
+ try {
148
+ const chainId = await this.context.publicClient.getChainId();
149
+ const contractAddress = getContractAddress(chainId, "AccessSettlement");
150
+ const abi = getAbi("AccessSettlement");
151
+ const operationIdBytes = this.stringToBytes(operationId);
152
+ const account = this.context.walletClient?.account ?? this.context.userAddress;
153
+ const hash = await this.context.walletClient.writeContract({
154
+ address: contractAddress,
155
+ abi,
156
+ functionName: "settlePaymentWithNative",
157
+ args: [operationIdBytes],
158
+ value,
159
+ account,
160
+ chain: this.context.walletClient?.chain ?? null
161
+ });
162
+ return {
163
+ hash,
164
+ operationId
165
+ };
166
+ } catch (error) {
167
+ if (error instanceof Error) {
168
+ throw new BlockchainError(
169
+ `Failed to settle payment with native VANA: ${error.message}`,
170
+ error
171
+ );
172
+ }
173
+ throw new BlockchainError(
174
+ "Failed to settle payment with native VANA with unknown error"
175
+ );
176
+ }
177
+ }
178
+ /**
179
+ * Settle payment for an operation using an ERC20 token
180
+ *
181
+ * @remarks
182
+ * Pays for a completed operation using an ERC20 token. Before calling this method:
183
+ * 1. Check the invoice to get tokenAddress and price
184
+ * 2. Approve the AccessSettlement contract to spend the token amount
185
+ * 3. Call this method to complete the payment
186
+ *
187
+ * The token address and amount must match the invoice exactly.
188
+ *
189
+ * @param operationId - Operation identifier to settle payment for
190
+ * @param tokenAddress - ERC20 token contract address (must match invoice)
191
+ * @returns Transaction hash and operation ID
192
+ * @throws {BlockchainError} When payment settlement fails
193
+ * @throws {Error} When wallet is not configured (read-only mode)
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * // Get invoice
198
+ * const invoice = await sdk.accessSettlement.getOperationInvoice("op_123");
199
+ *
200
+ * // Approve token spending (if not already approved)
201
+ * const tokenContract = sdk.protocol.createContract("ERC20" as const);
202
+ * await tokenContract.write.approve([
203
+ * accessSettlementAddress,
204
+ * invoice.price
205
+ * ]);
206
+ *
207
+ * // Settle with token
208
+ * const result = await sdk.accessSettlement.settlePaymentWithToken(
209
+ * "op_123",
210
+ * invoice.tokenAddress
211
+ * );
212
+ *
213
+ * await sdk.waitForTransactionReceipt(result.hash);
214
+ * ```
215
+ */
216
+ async settlePaymentWithToken(operationId, tokenAddress) {
217
+ this.assertWallet();
218
+ try {
219
+ const chainId = await this.context.publicClient.getChainId();
220
+ const contractAddress = getContractAddress(chainId, "AccessSettlement");
221
+ const abi = getAbi("AccessSettlement");
222
+ const operationIdBytes = this.stringToBytes(operationId);
223
+ const account = this.context.walletClient?.account ?? this.context.userAddress;
224
+ const hash = await this.context.walletClient.writeContract({
225
+ address: contractAddress,
226
+ abi,
227
+ functionName: "settlePaymentWithToken",
228
+ args: [operationIdBytes, tokenAddress],
229
+ account,
230
+ chain: this.context.walletClient?.chain ?? null
231
+ });
232
+ return {
233
+ hash,
234
+ operationId
235
+ };
236
+ } catch (error) {
237
+ if (error instanceof Error) {
238
+ throw new BlockchainError(
239
+ `Failed to settle payment with token: ${error.message}`,
240
+ error
241
+ );
242
+ }
243
+ throw new BlockchainError(
244
+ "Failed to settle payment with token with unknown error"
245
+ );
246
+ }
247
+ }
248
+ /**
249
+ * Helper method to convert operation ID string to bytes
250
+ * @internal
251
+ */
252
+ stringToBytes(str) {
253
+ if (str.startsWith("0x")) {
254
+ return str;
255
+ }
256
+ const encoder = new TextEncoder();
257
+ const bytes = encoder.encode(str);
258
+ const hexString = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
259
+ return `0x${hexString}`;
260
+ }
261
+ }
262
+ export {
263
+ AccessSettlementController
264
+ };
265
+ //# sourceMappingURL=accessSettlement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/controllers/accessSettlement.ts"],"sourcesContent":["import { getContract } from \"viem\";\nimport { BaseController } from \"./base\";\nimport type {\n OperationInvoice,\n PaymentSettlementResult,\n} from \"../types/accessSettlement\";\nimport { BlockchainError } from \"../errors\";\nimport { getContractAddress } from \"../generated/addresses\";\nimport { getAbi } from \"../generated/abi\";\n\n/**\n * Controller for AccessSettlement contract\n *\n * @remarks\n * Manages payment settlement for runtime operations. Allows data consumers\n * to pay for completed operations using native VANA or ERC20 tokens.\n *\n * The AccessSettlement contract acts as an escrow system:\n * 1. Runtime completes an operation and logs the final price\n * 2. Consumer calls settlePaymentWithNative() or settlePaymentWithToken()\n * 3. Funds are transferred to the issuer (dataset owner)\n * 4. Runtime unlocks the operation artifacts for download\n *\n * @category Controllers\n * @example\n * ```typescript\n * // Consumer pays for a completed operation\n * const invoice = await sdk.accessSettlement.getOperationInvoice(\"op_123\");\n *\n * if (!invoice.isSettled) {\n * const result = await sdk.accessSettlement.settlePaymentWithNative(\n * \"op_123\",\n * invoice.price\n * );\n * console.log(`Payment settled: ${result.hash}`);\n * }\n * ```\n */\nexport class AccessSettlementController extends BaseController {\n /**\n * Get invoice details for an operation\n *\n * @remarks\n * Retrieves the payment invoice created by the runtime after an operation completes.\n * The invoice contains the final price, payment token, and settlement status.\n *\n * @param operationId - Operation identifier (from runtime API)\n * @returns Invoice details including price and settlement status\n * @throws {BlockchainError} When invoice retrieval fails\n *\n * @example\n * ```typescript\n * const invoice = await sdk.accessSettlement.getOperationInvoice(\"op_abc123\");\n * console.log(`Price: ${invoice.price} wei`);\n * console.log(`Issuer: ${invoice.issuer}`);\n * console.log(`Settled: ${invoice.isSettled}`);\n *\n * // Convert price to VANA for display\n * const priceInVana = Number(invoice.price) / 10**18;\n * console.log(`Price: ${priceInVana} VANA`);\n * ```\n */\n async getOperationInvoice(operationId: string): Promise<OperationInvoice> {\n try {\n const chainId = await this.context.publicClient.getChainId();\n const contractAddress = getContractAddress(chainId, \"AccessSettlement\");\n const abi = getAbi(\"AccessSettlement\");\n\n const contract = getContract({\n address: contractAddress,\n abi,\n client: this.context.publicClient,\n });\n\n // Convert operationId string to bytes\n const operationIdBytes = this.stringToBytes(operationId);\n\n const result = await contract.read.getOperationInvoice([\n operationIdBytes,\n ]);\n\n // Parse tuple result into OperationInvoice object\n // The contract returns a struct which viem converts to an array-like object\n const invoice = result as any;\n return {\n issuer: invoice.issuer ?? invoice[0],\n grantee: invoice.grantee ?? invoice[1],\n price: invoice.price ?? invoice[2],\n tokenAddress: invoice.tokenAddress ?? invoice[3],\n isSettled:\n invoice.isSettled !== undefined ? invoice.isSettled : invoice[4],\n } as OperationInvoice;\n } catch (error) {\n if (error instanceof Error) {\n throw new BlockchainError(\n `Failed to get operation invoice: ${error.message}`,\n error,\n );\n }\n throw new BlockchainError(\n \"Failed to get operation invoice with unknown error\",\n );\n }\n }\n\n /**\n * Check if an operation's payment has been settled\n *\n * @remarks\n * Quick check to determine if payment has been completed for an operation.\n * Returns true if settlePaymentWithNative() or settlePaymentWithToken() was called.\n *\n * @param operationId - Operation identifier\n * @returns Whether the payment has been settled\n *\n * @example\n * ```typescript\n * const isSettled = await sdk.accessSettlement.isOperationSettled(\"op_123\");\n * if (isSettled) {\n * console.log(\"Payment already settled, artifacts should be available\");\n * } else {\n * console.log(\"Payment pending\");\n * }\n * ```\n */\n async isOperationSettled(operationId: string): Promise<boolean> {\n try {\n const chainId = await this.context.publicClient.getChainId();\n const contractAddress = getContractAddress(chainId, \"AccessSettlement\");\n const abi = getAbi(\"AccessSettlement\");\n\n const contract = getContract({\n address: contractAddress,\n abi,\n client: this.context.publicClient,\n });\n\n const operationIdBytes = this.stringToBytes(operationId);\n\n return (await contract.read.isOperationSettled([\n operationIdBytes,\n ])) as boolean;\n } catch (error) {\n if (error instanceof Error) {\n throw new BlockchainError(\n `Failed to check settlement status: ${error.message}`,\n error,\n );\n }\n throw new BlockchainError(\n \"Failed to check settlement status with unknown error\",\n );\n }\n }\n\n /**\n * Settle payment for an operation using native VANA\n *\n * @remarks\n * Pays for a completed operation using native VANA tokens. The amount must match\n * the invoice price exactly. Upon successful payment:\n * - Funds are transferred to the issuer (dataset owner)\n * - PaymentSettled event is emitted\n * - Runtime unlocks operation artifacts for download\n *\n * IMPORTANT: You must send the exact value specified in the invoice.\n * Check the invoice first using getOperationInvoice().\n *\n * @param operationId - Operation identifier to settle payment for\n * @param value - Amount to pay in wei (must match invoice.price)\n * @returns Transaction hash and operation ID\n * @throws {BlockchainError} When payment settlement fails\n * @throws {Error} When wallet is not configured (read-only mode)\n *\n * @example\n * ```typescript\n * // Get invoice to find the exact price\n * const invoice = await sdk.accessSettlement.getOperationInvoice(\"op_123\");\n *\n * // Settle with native VANA\n * const result = await sdk.accessSettlement.settlePaymentWithNative(\n * \"op_123\",\n * invoice.price // Must match exactly\n * );\n *\n * // Wait for confirmation\n * await sdk.waitForTransactionReceipt(result.hash);\n * console.log(\"Payment confirmed, artifacts now available\");\n * ```\n */\n async settlePaymentWithNative(\n operationId: string,\n value: bigint,\n ): Promise<PaymentSettlementResult> {\n this.assertWallet();\n\n try {\n const chainId = await this.context.publicClient.getChainId();\n const contractAddress = getContractAddress(chainId, \"AccessSettlement\");\n const abi = getAbi(\"AccessSettlement\");\n\n const operationIdBytes = this.stringToBytes(operationId);\n\n const account =\n this.context.walletClient?.account ?? this.context.userAddress;\n\n const hash = await this.context.walletClient.writeContract({\n address: contractAddress,\n abi,\n functionName: \"settlePaymentWithNative\",\n args: [operationIdBytes],\n value,\n account,\n chain: this.context.walletClient?.chain ?? null,\n });\n\n return {\n hash,\n operationId,\n };\n } catch (error) {\n if (error instanceof Error) {\n throw new BlockchainError(\n `Failed to settle payment with native VANA: ${error.message}`,\n error,\n );\n }\n throw new BlockchainError(\n \"Failed to settle payment with native VANA with unknown error\",\n );\n }\n }\n\n /**\n * Settle payment for an operation using an ERC20 token\n *\n * @remarks\n * Pays for a completed operation using an ERC20 token. Before calling this method:\n * 1. Check the invoice to get tokenAddress and price\n * 2. Approve the AccessSettlement contract to spend the token amount\n * 3. Call this method to complete the payment\n *\n * The token address and amount must match the invoice exactly.\n *\n * @param operationId - Operation identifier to settle payment for\n * @param tokenAddress - ERC20 token contract address (must match invoice)\n * @returns Transaction hash and operation ID\n * @throws {BlockchainError} When payment settlement fails\n * @throws {Error} When wallet is not configured (read-only mode)\n *\n * @example\n * ```typescript\n * // Get invoice\n * const invoice = await sdk.accessSettlement.getOperationInvoice(\"op_123\");\n *\n * // Approve token spending (if not already approved)\n * const tokenContract = sdk.protocol.createContract(\"ERC20\" as const);\n * await tokenContract.write.approve([\n * accessSettlementAddress,\n * invoice.price\n * ]);\n *\n * // Settle with token\n * const result = await sdk.accessSettlement.settlePaymentWithToken(\n * \"op_123\",\n * invoice.tokenAddress\n * );\n *\n * await sdk.waitForTransactionReceipt(result.hash);\n * ```\n */\n async settlePaymentWithToken(\n operationId: string,\n tokenAddress: `0x${string}`,\n ): Promise<PaymentSettlementResult> {\n this.assertWallet();\n\n try {\n const chainId = await this.context.publicClient.getChainId();\n const contractAddress = getContractAddress(chainId, \"AccessSettlement\");\n const abi = getAbi(\"AccessSettlement\");\n\n const operationIdBytes = this.stringToBytes(operationId);\n\n const account =\n this.context.walletClient?.account ?? this.context.userAddress;\n\n const hash = await this.context.walletClient.writeContract({\n address: contractAddress,\n abi,\n functionName: \"settlePaymentWithToken\",\n args: [operationIdBytes, tokenAddress],\n account,\n chain: this.context.walletClient?.chain ?? null,\n });\n\n return {\n hash,\n operationId,\n };\n } catch (error) {\n if (error instanceof Error) {\n throw new BlockchainError(\n `Failed to settle payment with token: ${error.message}`,\n error,\n );\n }\n throw new BlockchainError(\n \"Failed to settle payment with token with unknown error\",\n );\n }\n }\n\n /**\n * Helper method to convert operation ID string to bytes\n * @internal\n */\n private stringToBytes(str: string): `0x${string}` {\n // If already hex string, return as-is\n if (str.startsWith(\"0x\")) {\n return str as `0x${string}`;\n }\n\n // Convert string to hex bytes\n const encoder = new TextEncoder();\n const bytes = encoder.encode(str);\n const hexString = Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n\n return `0x${hexString}` as `0x${string}`;\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1 @@
1
+ export {};
@@ -75,6 +75,39 @@ class BaseController {
75
75
  );
76
76
  }
77
77
  }
78
+ /**
79
+ * Helper to safely spread transaction options for viem compatibility.
80
+ * Handles EIP-1559 vs legacy gas pricing correctly.
81
+ *
82
+ * @param options - Transaction options to spread
83
+ * @returns Properly formatted options for viem
84
+ * @internal
85
+ */
86
+ spreadTransactionOptions(options) {
87
+ if (!options) return {};
88
+ const baseOptions = {
89
+ ...options.nonce !== void 0 && { nonce: options.nonce },
90
+ ...options.gas !== void 0 && { gas: options.gas }
91
+ };
92
+ if (options.maxFeePerGas !== void 0 || options.maxPriorityFeePerGas !== void 0) {
93
+ return {
94
+ ...baseOptions,
95
+ ...options.maxFeePerGas !== void 0 && {
96
+ maxFeePerGas: options.maxFeePerGas
97
+ },
98
+ ...options.maxPriorityFeePerGas !== void 0 && {
99
+ maxPriorityFeePerGas: options.maxPriorityFeePerGas
100
+ }
101
+ };
102
+ }
103
+ if (options.gasPrice !== void 0) {
104
+ return {
105
+ ...baseOptions,
106
+ gasPrice: options.gasPrice
107
+ };
108
+ }
109
+ return baseOptions;
110
+ }
78
111
  }
79
112
  // Annotate the CommonJS export names for ESM import in node:
80
113
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/controllers/base.ts"],"sourcesContent":["/**\n * Base controller class providing common functionality for all controllers.\n *\n * @remarks\n * This abstract class establishes the foundation for all Vana SDK controllers,\n * providing shared utilities like wallet validation and context management.\n * All controllers should extend this base class to ensure consistency and\n * shared behavior across the SDK.\n *\n * The class follows the Single Responsibility Principle by handling only\n * the core controller concerns while leaving specific functionality to\n * implementing classes.\n *\n * @category Controllers\n */\n\nimport type { WalletClient } from \"viem\";\nimport type { ControllerContext } from \"../types/controller-context\";\nimport { ReadOnlyError } from \"../errors\";\n\n/**\n * Abstract base controller that all Vana SDK controllers extend.\n *\n * @remarks\n * Provides common functionality and patterns used across all controllers,\n * including wallet validation and context management. This ensures\n * consistency and reduces code duplication throughout the SDK.\n *\n * Key features:\n * - Wallet client validation with TypeScript assertion signatures\n * - Consistent error handling for read-only scenarios\n * - Shared context management patterns\n * - Type-safe wallet operations\n *\n * @example\n * ```typescript\n * class MyController extends BaseController {\n * async performWalletOperation() {\n * this.assertWallet(); // Ensures wallet is available\n * // Now this.context.walletClient is guaranteed to be available\n * const address = await this.context.walletClient.getAddresses();\n * return address[0];\n * }\n * }\n * ```\n */\nexport abstract class BaseController {\n /**\n * Creates a new controller instance with the provided context.\n *\n * @param context - The controller context containing clients and configuration\n */\n constructor(protected readonly context: ControllerContext) {}\n\n /**\n * Asserts that a wallet client with an account is available for operations requiring signing.\n *\n * @remarks\n * This method uses TypeScript assertion signatures to narrow the type of\n * `this.context` to guarantee that `walletClient` with an account is available\n * after the call succeeds. This provides compile-time safety for wallet operations\n * while enabling clear error messages for read-only scenarios.\n *\n * The assertion signature ensures that after calling this method,\n * TypeScript knows that `this.context.walletClient` is definitely available\n * with a configured account.\n *\n * @throws {ReadOnlyError} When no wallet client is configured\n * @throws {Error} When wallet client exists but no account is configured\n *\n * @example\n * ```typescript\n * async performWalletOperation() {\n * this.assertWallet(); // Type assertion + runtime check\n *\n * // TypeScript now knows walletClient and account are available\n * const account = this.context.walletClient.account;\n * const address = typeof account === 'string' ? account : account.address;\n * }\n * ```\n */\n protected assertWallet(): asserts this is {\n context: ControllerContext & { walletClient: WalletClient };\n } {\n if (!this.context.walletClient) {\n // Get the calling method name from the stack trace for better error messages\n const stack = new Error().stack;\n const callingMethod =\n stack?.split(\"\\n\")[2]?.match(/at \\w+\\.(\\w+)/)?.[1] ?? \"this operation\";\n\n throw new ReadOnlyError(\n callingMethod,\n \"Initialize the SDK with a walletClient to perform this operation\",\n );\n }\n\n if (!this.context.walletClient.account) {\n // Get the calling method name from the stack trace for better error messages\n const stack = new Error().stack;\n const callingMethod =\n stack?.split(\"\\n\")[2]?.match(/at \\w+\\.(\\w+)/)?.[1] ?? \"this operation\";\n\n throw new Error(\n `No wallet account connected. Cannot perform ${callingMethod} without an account.`,\n );\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA,oBAA8B;AA4BvB,MAAe,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnC,YAA+B,SAA4B;AAA5B;AAAA,EAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BlD,eAER;AACA,QAAI,CAAC,KAAK,QAAQ,cAAc;AAE9B,YAAM,QAAQ,IAAI,MAAM,EAAE;AAC1B,YAAM,gBACJ,OAAO,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,eAAe,IAAI,CAAC,KAAK;AAExD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,QAAQ,aAAa,SAAS;AAEtC,YAAM,QAAQ,IAAI,MAAM,EAAE;AAC1B,YAAM,gBACJ,OAAO,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,eAAe,IAAI,CAAC,KAAK;AAExD,YAAM,IAAI;AAAA,QACR,+CAA+C,aAAa;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/controllers/base.ts"],"sourcesContent":["/**\n * Base controller class providing common functionality for all controllers.\n *\n * @remarks\n * This abstract class establishes the foundation for all Vana SDK controllers,\n * providing shared utilities like wallet validation and context management.\n * All controllers should extend this base class to ensure consistency and\n * shared behavior across the SDK.\n *\n * The class follows the Single Responsibility Principle by handling only\n * the core controller concerns while leaving specific functionality to\n * implementing classes.\n *\n * @category Controllers\n */\n\nimport type { WalletClient } from \"viem\";\nimport type { ControllerContext } from \"../types/controller-context\";\nimport type { TransactionOptions } from \"../types/operations\";\nimport { ReadOnlyError } from \"../errors\";\n\n/**\n * Abstract base controller that all Vana SDK controllers extend.\n *\n * @remarks\n * Provides common functionality and patterns used across all controllers,\n * including wallet validation and context management. This ensures\n * consistency and reduces code duplication throughout the SDK.\n *\n * Key features:\n * - Wallet client validation with TypeScript assertion signatures\n * - Consistent error handling for read-only scenarios\n * - Shared context management patterns\n * - Type-safe wallet operations\n *\n * @example\n * ```typescript\n * class MyController extends BaseController {\n * async performWalletOperation() {\n * this.assertWallet(); // Ensures wallet is available\n * // Now this.context.walletClient is guaranteed to be available\n * const address = await this.context.walletClient.getAddresses();\n * return address[0];\n * }\n * }\n * ```\n */\nexport abstract class BaseController {\n /**\n * Creates a new controller instance with the provided context.\n *\n * @param context - The controller context containing clients and configuration\n */\n constructor(protected readonly context: ControllerContext) {}\n\n /**\n * Asserts that a wallet client with an account is available for operations requiring signing.\n *\n * @remarks\n * This method uses TypeScript assertion signatures to narrow the type of\n * `this.context` to guarantee that `walletClient` with an account is available\n * after the call succeeds. This provides compile-time safety for wallet operations\n * while enabling clear error messages for read-only scenarios.\n *\n * The assertion signature ensures that after calling this method,\n * TypeScript knows that `this.context.walletClient` is definitely available\n * with a configured account.\n *\n * @throws {ReadOnlyError} When no wallet client is configured\n * @throws {Error} When wallet client exists but no account is configured\n *\n * @example\n * ```typescript\n * async performWalletOperation() {\n * this.assertWallet(); // Type assertion + runtime check\n *\n * // TypeScript now knows walletClient and account are available\n * const account = this.context.walletClient.account;\n * const address = typeof account === 'string' ? account : account.address;\n * }\n * ```\n */\n protected assertWallet(): asserts this is {\n context: ControllerContext & { walletClient: WalletClient };\n } {\n if (!this.context.walletClient) {\n // Get the calling method name from the stack trace for better error messages\n const stack = new Error().stack;\n const callingMethod =\n stack?.split(\"\\n\")[2]?.match(/at \\w+\\.(\\w+)/)?.[1] ?? \"this operation\";\n\n throw new ReadOnlyError(\n callingMethod,\n \"Initialize the SDK with a walletClient to perform this operation\",\n );\n }\n\n if (!this.context.walletClient.account) {\n // Get the calling method name from the stack trace for better error messages\n const stack = new Error().stack;\n const callingMethod =\n stack?.split(\"\\n\")[2]?.match(/at \\w+\\.(\\w+)/)?.[1] ?? \"this operation\";\n\n throw new Error(\n `No wallet account connected. Cannot perform ${callingMethod} without an account.`,\n );\n }\n }\n\n /**\n * Helper to safely spread transaction options for viem compatibility.\n * Handles EIP-1559 vs legacy gas pricing correctly.\n *\n * @param options - Transaction options to spread\n * @returns Properly formatted options for viem\n * @internal\n */\n protected spreadTransactionOptions(options?: TransactionOptions) {\n if (!options) return {};\n\n const baseOptions: any = {\n ...(options.nonce !== undefined && { nonce: options.nonce }),\n ...(options.gas !== undefined && { gas: options.gas }),\n };\n\n // EIP-1559 and legacy gasPrice are mutually exclusive in viem\n // If EIP-1559 params are provided, use them and exclude gasPrice\n if (\n options.maxFeePerGas !== undefined ||\n options.maxPriorityFeePerGas !== undefined\n ) {\n return {\n ...baseOptions,\n ...(options.maxFeePerGas !== undefined && {\n maxFeePerGas: options.maxFeePerGas,\n }),\n ...(options.maxPriorityFeePerGas !== undefined && {\n maxPriorityFeePerGas: options.maxPriorityFeePerGas,\n }),\n };\n }\n\n // Otherwise, use legacy gasPrice if provided\n if (options.gasPrice !== undefined) {\n return {\n ...baseOptions,\n gasPrice: options.gasPrice,\n };\n }\n\n return baseOptions;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA,oBAA8B;AA4BvB,MAAe,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnC,YAA+B,SAA4B;AAA5B;AAAA,EAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BlD,eAER;AACA,QAAI,CAAC,KAAK,QAAQ,cAAc;AAE9B,YAAM,QAAQ,IAAI,MAAM,EAAE;AAC1B,YAAM,gBACJ,OAAO,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,eAAe,IAAI,CAAC,KAAK;AAExD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,QAAQ,aAAa,SAAS;AAEtC,YAAM,QAAQ,IAAI,MAAM,EAAE;AAC1B,YAAM,gBACJ,OAAO,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,eAAe,IAAI,CAAC,KAAK;AAExD,YAAM,IAAI;AAAA,QACR,+CAA+C,aAAa;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUU,yBAAyB,SAA8B;AAC/D,QAAI,CAAC,QAAS,QAAO,CAAC;AAEtB,UAAM,cAAmB;AAAA,MACvB,GAAI,QAAQ,UAAU,UAAa,EAAE,OAAO,QAAQ,MAAM;AAAA,MAC1D,GAAI,QAAQ,QAAQ,UAAa,EAAE,KAAK,QAAQ,IAAI;AAAA,IACtD;AAIA,QACE,QAAQ,iBAAiB,UACzB,QAAQ,yBAAyB,QACjC;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAI,QAAQ,iBAAiB,UAAa;AAAA,UACxC,cAAc,QAAQ;AAAA,QACxB;AAAA,QACA,GAAI,QAAQ,yBAAyB,UAAa;AAAA,UAChD,sBAAsB,QAAQ;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAGA,QAAI,QAAQ,aAAa,QAAW;AAClC,aAAO;AAAA,QACL,GAAG;AAAA,QACH,UAAU,QAAQ;AAAA,MACpB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -15,6 +15,7 @@
15
15
  */
16
16
  import type { WalletClient } from "viem";
17
17
  import type { ControllerContext } from "../types/controller-context";
18
+ import type { TransactionOptions } from "../types/operations";
18
19
  /**
19
20
  * Abstract base controller that all Vana SDK controllers extend.
20
21
  *
@@ -81,4 +82,13 @@ export declare abstract class BaseController {
81
82
  walletClient: WalletClient;
82
83
  };
83
84
  };
85
+ /**
86
+ * Helper to safely spread transaction options for viem compatibility.
87
+ * Handles EIP-1559 vs legacy gas pricing correctly.
88
+ *
89
+ * @param options - Transaction options to spread
90
+ * @returns Properly formatted options for viem
91
+ * @internal
92
+ */
93
+ protected spreadTransactionOptions(options?: TransactionOptions): any;
84
94
  }
@@ -52,6 +52,39 @@ class BaseController {
52
52
  );
53
53
  }
54
54
  }
55
+ /**
56
+ * Helper to safely spread transaction options for viem compatibility.
57
+ * Handles EIP-1559 vs legacy gas pricing correctly.
58
+ *
59
+ * @param options - Transaction options to spread
60
+ * @returns Properly formatted options for viem
61
+ * @internal
62
+ */
63
+ spreadTransactionOptions(options) {
64
+ if (!options) return {};
65
+ const baseOptions = {
66
+ ...options.nonce !== void 0 && { nonce: options.nonce },
67
+ ...options.gas !== void 0 && { gas: options.gas }
68
+ };
69
+ if (options.maxFeePerGas !== void 0 || options.maxPriorityFeePerGas !== void 0) {
70
+ return {
71
+ ...baseOptions,
72
+ ...options.maxFeePerGas !== void 0 && {
73
+ maxFeePerGas: options.maxFeePerGas
74
+ },
75
+ ...options.maxPriorityFeePerGas !== void 0 && {
76
+ maxPriorityFeePerGas: options.maxPriorityFeePerGas
77
+ }
78
+ };
79
+ }
80
+ if (options.gasPrice !== void 0) {
81
+ return {
82
+ ...baseOptions,
83
+ gasPrice: options.gasPrice
84
+ };
85
+ }
86
+ return baseOptions;
87
+ }
55
88
  }
56
89
  export {
57
90
  BaseController
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/controllers/base.ts"],"sourcesContent":["/**\n * Base controller class providing common functionality for all controllers.\n *\n * @remarks\n * This abstract class establishes the foundation for all Vana SDK controllers,\n * providing shared utilities like wallet validation and context management.\n * All controllers should extend this base class to ensure consistency and\n * shared behavior across the SDK.\n *\n * The class follows the Single Responsibility Principle by handling only\n * the core controller concerns while leaving specific functionality to\n * implementing classes.\n *\n * @category Controllers\n */\n\nimport type { WalletClient } from \"viem\";\nimport type { ControllerContext } from \"../types/controller-context\";\nimport { ReadOnlyError } from \"../errors\";\n\n/**\n * Abstract base controller that all Vana SDK controllers extend.\n *\n * @remarks\n * Provides common functionality and patterns used across all controllers,\n * including wallet validation and context management. This ensures\n * consistency and reduces code duplication throughout the SDK.\n *\n * Key features:\n * - Wallet client validation with TypeScript assertion signatures\n * - Consistent error handling for read-only scenarios\n * - Shared context management patterns\n * - Type-safe wallet operations\n *\n * @example\n * ```typescript\n * class MyController extends BaseController {\n * async performWalletOperation() {\n * this.assertWallet(); // Ensures wallet is available\n * // Now this.context.walletClient is guaranteed to be available\n * const address = await this.context.walletClient.getAddresses();\n * return address[0];\n * }\n * }\n * ```\n */\nexport abstract class BaseController {\n /**\n * Creates a new controller instance with the provided context.\n *\n * @param context - The controller context containing clients and configuration\n */\n constructor(protected readonly context: ControllerContext) {}\n\n /**\n * Asserts that a wallet client with an account is available for operations requiring signing.\n *\n * @remarks\n * This method uses TypeScript assertion signatures to narrow the type of\n * `this.context` to guarantee that `walletClient` with an account is available\n * after the call succeeds. This provides compile-time safety for wallet operations\n * while enabling clear error messages for read-only scenarios.\n *\n * The assertion signature ensures that after calling this method,\n * TypeScript knows that `this.context.walletClient` is definitely available\n * with a configured account.\n *\n * @throws {ReadOnlyError} When no wallet client is configured\n * @throws {Error} When wallet client exists but no account is configured\n *\n * @example\n * ```typescript\n * async performWalletOperation() {\n * this.assertWallet(); // Type assertion + runtime check\n *\n * // TypeScript now knows walletClient and account are available\n * const account = this.context.walletClient.account;\n * const address = typeof account === 'string' ? account : account.address;\n * }\n * ```\n */\n protected assertWallet(): asserts this is {\n context: ControllerContext & { walletClient: WalletClient };\n } {\n if (!this.context.walletClient) {\n // Get the calling method name from the stack trace for better error messages\n const stack = new Error().stack;\n const callingMethod =\n stack?.split(\"\\n\")[2]?.match(/at \\w+\\.(\\w+)/)?.[1] ?? \"this operation\";\n\n throw new ReadOnlyError(\n callingMethod,\n \"Initialize the SDK with a walletClient to perform this operation\",\n );\n }\n\n if (!this.context.walletClient.account) {\n // Get the calling method name from the stack trace for better error messages\n const stack = new Error().stack;\n const callingMethod =\n stack?.split(\"\\n\")[2]?.match(/at \\w+\\.(\\w+)/)?.[1] ?? \"this operation\";\n\n throw new Error(\n `No wallet account connected. Cannot perform ${callingMethod} without an account.`,\n );\n }\n }\n}\n"],"mappings":"AAkBA,SAAS,qBAAqB;AA4BvB,MAAe,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnC,YAA+B,SAA4B;AAA5B;AAAA,EAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BlD,eAER;AACA,QAAI,CAAC,KAAK,QAAQ,cAAc;AAE9B,YAAM,QAAQ,IAAI,MAAM,EAAE;AAC1B,YAAM,gBACJ,OAAO,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,eAAe,IAAI,CAAC,KAAK;AAExD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,QAAQ,aAAa,SAAS;AAEtC,YAAM,QAAQ,IAAI,MAAM,EAAE;AAC1B,YAAM,gBACJ,OAAO,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,eAAe,IAAI,CAAC,KAAK;AAExD,YAAM,IAAI;AAAA,QACR,+CAA+C,aAAa;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../src/controllers/base.ts"],"sourcesContent":["/**\n * Base controller class providing common functionality for all controllers.\n *\n * @remarks\n * This abstract class establishes the foundation for all Vana SDK controllers,\n * providing shared utilities like wallet validation and context management.\n * All controllers should extend this base class to ensure consistency and\n * shared behavior across the SDK.\n *\n * The class follows the Single Responsibility Principle by handling only\n * the core controller concerns while leaving specific functionality to\n * implementing classes.\n *\n * @category Controllers\n */\n\nimport type { WalletClient } from \"viem\";\nimport type { ControllerContext } from \"../types/controller-context\";\nimport type { TransactionOptions } from \"../types/operations\";\nimport { ReadOnlyError } from \"../errors\";\n\n/**\n * Abstract base controller that all Vana SDK controllers extend.\n *\n * @remarks\n * Provides common functionality and patterns used across all controllers,\n * including wallet validation and context management. This ensures\n * consistency and reduces code duplication throughout the SDK.\n *\n * Key features:\n * - Wallet client validation with TypeScript assertion signatures\n * - Consistent error handling for read-only scenarios\n * - Shared context management patterns\n * - Type-safe wallet operations\n *\n * @example\n * ```typescript\n * class MyController extends BaseController {\n * async performWalletOperation() {\n * this.assertWallet(); // Ensures wallet is available\n * // Now this.context.walletClient is guaranteed to be available\n * const address = await this.context.walletClient.getAddresses();\n * return address[0];\n * }\n * }\n * ```\n */\nexport abstract class BaseController {\n /**\n * Creates a new controller instance with the provided context.\n *\n * @param context - The controller context containing clients and configuration\n */\n constructor(protected readonly context: ControllerContext) {}\n\n /**\n * Asserts that a wallet client with an account is available for operations requiring signing.\n *\n * @remarks\n * This method uses TypeScript assertion signatures to narrow the type of\n * `this.context` to guarantee that `walletClient` with an account is available\n * after the call succeeds. This provides compile-time safety for wallet operations\n * while enabling clear error messages for read-only scenarios.\n *\n * The assertion signature ensures that after calling this method,\n * TypeScript knows that `this.context.walletClient` is definitely available\n * with a configured account.\n *\n * @throws {ReadOnlyError} When no wallet client is configured\n * @throws {Error} When wallet client exists but no account is configured\n *\n * @example\n * ```typescript\n * async performWalletOperation() {\n * this.assertWallet(); // Type assertion + runtime check\n *\n * // TypeScript now knows walletClient and account are available\n * const account = this.context.walletClient.account;\n * const address = typeof account === 'string' ? account : account.address;\n * }\n * ```\n */\n protected assertWallet(): asserts this is {\n context: ControllerContext & { walletClient: WalletClient };\n } {\n if (!this.context.walletClient) {\n // Get the calling method name from the stack trace for better error messages\n const stack = new Error().stack;\n const callingMethod =\n stack?.split(\"\\n\")[2]?.match(/at \\w+\\.(\\w+)/)?.[1] ?? \"this operation\";\n\n throw new ReadOnlyError(\n callingMethod,\n \"Initialize the SDK with a walletClient to perform this operation\",\n );\n }\n\n if (!this.context.walletClient.account) {\n // Get the calling method name from the stack trace for better error messages\n const stack = new Error().stack;\n const callingMethod =\n stack?.split(\"\\n\")[2]?.match(/at \\w+\\.(\\w+)/)?.[1] ?? \"this operation\";\n\n throw new Error(\n `No wallet account connected. Cannot perform ${callingMethod} without an account.`,\n );\n }\n }\n\n /**\n * Helper to safely spread transaction options for viem compatibility.\n * Handles EIP-1559 vs legacy gas pricing correctly.\n *\n * @param options - Transaction options to spread\n * @returns Properly formatted options for viem\n * @internal\n */\n protected spreadTransactionOptions(options?: TransactionOptions) {\n if (!options) return {};\n\n const baseOptions: any = {\n ...(options.nonce !== undefined && { nonce: options.nonce }),\n ...(options.gas !== undefined && { gas: options.gas }),\n };\n\n // EIP-1559 and legacy gasPrice are mutually exclusive in viem\n // If EIP-1559 params are provided, use them and exclude gasPrice\n if (\n options.maxFeePerGas !== undefined ||\n options.maxPriorityFeePerGas !== undefined\n ) {\n return {\n ...baseOptions,\n ...(options.maxFeePerGas !== undefined && {\n maxFeePerGas: options.maxFeePerGas,\n }),\n ...(options.maxPriorityFeePerGas !== undefined && {\n maxPriorityFeePerGas: options.maxPriorityFeePerGas,\n }),\n };\n }\n\n // Otherwise, use legacy gasPrice if provided\n if (options.gasPrice !== undefined) {\n return {\n ...baseOptions,\n gasPrice: options.gasPrice,\n };\n }\n\n return baseOptions;\n }\n}\n"],"mappings":"AAmBA,SAAS,qBAAqB;AA4BvB,MAAe,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnC,YAA+B,SAA4B;AAA5B;AAAA,EAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BlD,eAER;AACA,QAAI,CAAC,KAAK,QAAQ,cAAc;AAE9B,YAAM,QAAQ,IAAI,MAAM,EAAE;AAC1B,YAAM,gBACJ,OAAO,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,eAAe,IAAI,CAAC,KAAK;AAExD,YAAM,IAAI;AAAA,QACR;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,QAAQ,aAAa,SAAS;AAEtC,YAAM,QAAQ,IAAI,MAAM,EAAE;AAC1B,YAAM,gBACJ,OAAO,MAAM,IAAI,EAAE,CAAC,GAAG,MAAM,eAAe,IAAI,CAAC,KAAK;AAExD,YAAM,IAAI;AAAA,QACR,+CAA+C,aAAa;AAAA,MAC9D;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUU,yBAAyB,SAA8B;AAC/D,QAAI,CAAC,QAAS,QAAO,CAAC;AAEtB,UAAM,cAAmB;AAAA,MACvB,GAAI,QAAQ,UAAU,UAAa,EAAE,OAAO,QAAQ,MAAM;AAAA,MAC1D,GAAI,QAAQ,QAAQ,UAAa,EAAE,KAAK,QAAQ,IAAI;AAAA,IACtD;AAIA,QACE,QAAQ,iBAAiB,UACzB,QAAQ,yBAAyB,QACjC;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAI,QAAQ,iBAAiB,UAAa;AAAA,UACxC,cAAc,QAAQ;AAAA,QACxB;AAAA,QACA,GAAI,QAAQ,yBAAyB,UAAa;AAAA,UAChD,sBAAsB,QAAQ;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAGA,QAAI,QAAQ,aAAa,QAAW;AAClC,aAAO;AAAA,QACL,GAAG;AAAA,QACH,UAAU,QAAQ;AAAA,MACpB;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}