@opendatalabs/vana-sdk 2.3.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (623) hide show
  1. package/README.md +76 -92
  2. package/dist/auth/errors.cjs +54 -0
  3. package/dist/auth/errors.cjs.map +1 -0
  4. package/dist/auth/errors.d.ts +26 -0
  5. package/dist/auth/errors.js +28 -0
  6. package/dist/auth/errors.js.map +1 -0
  7. package/dist/auth/pkce.cjs +100 -0
  8. package/dist/auth/pkce.cjs.map +1 -0
  9. package/dist/auth/pkce.d.ts +55 -0
  10. package/dist/auth/pkce.js +71 -0
  11. package/dist/auth/pkce.js.map +1 -0
  12. package/dist/auth/token-store.cjs +59 -0
  13. package/dist/auth/token-store.cjs.map +1 -0
  14. package/dist/auth/token-store.d.ts +61 -0
  15. package/dist/auth/token-store.js +35 -0
  16. package/dist/auth/token-store.js.map +1 -0
  17. package/dist/auth/web3-signed-builder.cjs +70 -0
  18. package/dist/auth/web3-signed-builder.cjs.map +1 -0
  19. package/dist/auth/web3-signed-builder.d.ts +47 -0
  20. package/dist/auth/web3-signed-builder.js +45 -0
  21. package/dist/auth/web3-signed-builder.js.map +1 -0
  22. package/dist/auth/web3-signed.cjs +150 -0
  23. package/dist/auth/web3-signed.cjs.map +1 -0
  24. package/dist/auth/web3-signed.d.ts +59 -0
  25. package/dist/auth/web3-signed.js +129 -0
  26. package/dist/auth/web3-signed.js.map +1 -0
  27. package/dist/chains/definitions.cjs +2 -6
  28. package/dist/chains/definitions.cjs.map +1 -1
  29. package/dist/chains/definitions.d.ts +1 -7
  30. package/dist/chains/definitions.js +2 -6
  31. package/dist/chains/definitions.js.map +1 -1
  32. package/dist/config/chains.d.ts +18 -0
  33. package/dist/config/contracts.config.cjs +7 -95
  34. package/dist/config/contracts.config.cjs.map +1 -1
  35. package/dist/config/contracts.config.d.ts +0 -54
  36. package/dist/config/contracts.config.js +6 -93
  37. package/dist/config/contracts.config.js.map +1 -1
  38. package/dist/config/default-services.cjs +0 -10
  39. package/dist/config/default-services.cjs.map +1 -1
  40. package/dist/config/default-services.d.ts +1 -20
  41. package/dist/config/default-services.js +0 -9
  42. package/dist/config/default-services.js.map +1 -1
  43. package/dist/crypto/ecies/interface.cjs +2 -0
  44. package/dist/crypto/ecies/interface.cjs.map +1 -1
  45. package/dist/crypto/ecies/interface.js +2 -0
  46. package/dist/crypto/ecies/interface.js.map +1 -1
  47. package/dist/crypto/envelope/openpgp.cjs +59 -0
  48. package/dist/crypto/envelope/openpgp.cjs.map +1 -0
  49. package/dist/crypto/envelope/openpgp.d.ts +28 -0
  50. package/dist/crypto/envelope/openpgp.js +24 -0
  51. package/dist/crypto/envelope/openpgp.js.map +1 -0
  52. package/dist/crypto/keys/derive.cjs +65 -0
  53. package/dist/crypto/keys/derive.cjs.map +1 -0
  54. package/dist/crypto/keys/derive.d.ts +45 -0
  55. package/dist/crypto/keys/derive.js +38 -0
  56. package/dist/crypto/keys/derive.js.map +1 -0
  57. package/dist/errors.cjs +10 -0
  58. package/dist/errors.cjs.map +1 -1
  59. package/dist/errors.js +10 -0
  60. package/dist/errors.js.map +1 -1
  61. package/dist/generated/abi/index.cjs +2 -37
  62. package/dist/generated/abi/index.cjs.map +1 -1
  63. package/dist/generated/abi/index.d.ts +2683 -9296
  64. package/dist/generated/abi/index.js +2 -29
  65. package/dist/generated/abi/index.js.map +1 -1
  66. package/dist/generated/addresses.cjs +5 -107
  67. package/dist/generated/addresses.cjs.map +1 -1
  68. package/dist/generated/addresses.d.ts +5 -99
  69. package/dist/generated/addresses.js +5 -105
  70. package/dist/generated/addresses.js.map +1 -1
  71. package/dist/index.browser.d.ts +24 -140
  72. package/dist/index.browser.js +32258 -114
  73. package/dist/index.browser.js.map +7 -1
  74. package/dist/index.node.cjs +32980 -160
  75. package/dist/index.node.cjs.map +7 -1
  76. package/dist/index.node.d.ts +23 -210
  77. package/dist/index.node.js +32884 -133
  78. package/dist/index.node.js.map +7 -1
  79. package/dist/protocol/data-file.cjs +56 -0
  80. package/dist/protocol/data-file.cjs.map +1 -0
  81. package/dist/protocol/data-file.d.ts +20 -0
  82. package/dist/protocol/data-file.js +30 -0
  83. package/dist/protocol/data-file.js.map +1 -0
  84. package/dist/protocol/eip712.cjs +123 -0
  85. package/dist/protocol/eip712.cjs.map +1 -0
  86. package/dist/protocol/eip712.d.ts +117 -0
  87. package/dist/protocol/eip712.js +90 -0
  88. package/dist/protocol/eip712.js.map +1 -0
  89. package/dist/protocol/gateway.cjs +226 -0
  90. package/dist/protocol/gateway.cjs.map +1 -0
  91. package/dist/protocol/gateway.d.ts +120 -0
  92. package/dist/protocol/gateway.js +202 -0
  93. package/dist/protocol/gateway.js.map +1 -0
  94. package/dist/protocol/grants.cjs +146 -0
  95. package/dist/protocol/grants.cjs.map +1 -0
  96. package/dist/protocol/grants.d.ts +31 -0
  97. package/dist/protocol/grants.js +123 -0
  98. package/dist/protocol/grants.js.map +1 -0
  99. package/dist/protocol/scopes.cjs +78 -0
  100. package/dist/protocol/scopes.cjs.map +1 -0
  101. package/dist/protocol/scopes.d.ts +13 -0
  102. package/dist/protocol/scopes.js +50 -0
  103. package/dist/protocol/scopes.js.map +1 -0
  104. package/dist/{types/atomicStore.cjs → storage/default.cjs} +9 -8
  105. package/dist/storage/default.cjs.map +1 -0
  106. package/dist/storage/default.d.ts +4 -0
  107. package/dist/storage/default.js +8 -0
  108. package/dist/storage/default.js.map +1 -0
  109. package/dist/storage/index.cjs +11 -2
  110. package/dist/storage/index.cjs.map +1 -1
  111. package/dist/storage/index.d.ts +9 -0
  112. package/dist/storage/index.js +7 -1
  113. package/dist/storage/index.js.map +1 -1
  114. package/dist/storage/providers/callback-storage.cjs +1 -0
  115. package/dist/storage/providers/callback-storage.cjs.map +1 -1
  116. package/dist/storage/providers/callback-storage.js +1 -0
  117. package/dist/storage/providers/callback-storage.js.map +1 -1
  118. package/dist/storage/providers/dropbox.cjs +1 -0
  119. package/dist/storage/providers/dropbox.cjs.map +1 -1
  120. package/dist/storage/providers/dropbox.js +1 -0
  121. package/dist/storage/providers/dropbox.js.map +1 -1
  122. package/dist/storage/providers/google-drive.cjs +1 -0
  123. package/dist/storage/providers/google-drive.cjs.map +1 -1
  124. package/dist/storage/providers/google-drive.js +1 -0
  125. package/dist/storage/providers/google-drive.js.map +1 -1
  126. package/dist/storage/providers/ipfs.cjs +1 -0
  127. package/dist/storage/providers/ipfs.cjs.map +1 -1
  128. package/dist/storage/providers/ipfs.js +1 -0
  129. package/dist/storage/providers/ipfs.js.map +1 -1
  130. package/dist/storage/providers/pinata.cjs +1 -0
  131. package/dist/storage/providers/pinata.cjs.map +1 -1
  132. package/dist/storage/providers/pinata.js +1 -0
  133. package/dist/storage/providers/pinata.js.map +1 -1
  134. package/dist/storage/providers/r2.cjs +376 -0
  135. package/dist/storage/providers/r2.cjs.map +1 -0
  136. package/dist/storage/providers/r2.d.ts +91 -0
  137. package/dist/storage/providers/r2.js +354 -0
  138. package/dist/storage/providers/r2.js.map +1 -0
  139. package/dist/storage/providers/vana-storage.cjs +251 -0
  140. package/dist/storage/providers/vana-storage.cjs.map +1 -0
  141. package/dist/storage/providers/vana-storage.d.ts +100 -0
  142. package/dist/storage/providers/vana-storage.js +231 -0
  143. package/dist/storage/providers/vana-storage.js.map +1 -0
  144. package/dist/types/config.cjs +0 -34
  145. package/dist/types/config.cjs.map +1 -1
  146. package/dist/types/config.d.ts +1 -607
  147. package/dist/types/config.js +0 -22
  148. package/dist/types/config.js.map +1 -1
  149. package/dist/types/contracts.cjs.map +1 -1
  150. package/dist/types/contracts.d.ts +1 -1
  151. package/dist/types/index.cjs +2 -33
  152. package/dist/types/index.cjs.map +1 -1
  153. package/dist/types/index.d.ts +2 -33
  154. package/dist/types/index.js +1 -35
  155. package/dist/types/index.js.map +1 -1
  156. package/dist/types/ps-errors.cjs +91 -0
  157. package/dist/types/ps-errors.cjs.map +1 -0
  158. package/dist/types/ps-errors.d.ts +26 -0
  159. package/dist/types/ps-errors.js +66 -0
  160. package/dist/types/ps-errors.js.map +1 -0
  161. package/dist/types.cjs.map +1 -1
  162. package/dist/types.d.ts +0 -29
  163. package/dist/types.js.map +1 -1
  164. package/package.json +7 -25
  165. package/dist/client/enhancedResponse.cjs +0 -164
  166. package/dist/client/enhancedResponse.cjs.map +0 -1
  167. package/dist/client/enhancedResponse.d.ts +0 -120
  168. package/dist/client/enhancedResponse.js +0 -138
  169. package/dist/client/enhancedResponse.js.map +0 -1
  170. package/dist/controllers/__tests__/data-consistency-integration.test.d.ts +0 -7
  171. package/dist/controllers/base.cjs +0 -116
  172. package/dist/controllers/base.cjs.map +0 -1
  173. package/dist/controllers/base.d.ts +0 -94
  174. package/dist/controllers/base.js +0 -92
  175. package/dist/controllers/base.js.map +0 -1
  176. package/dist/controllers/data.cjs +0 -2633
  177. package/dist/controllers/data.cjs.map +0 -1
  178. package/dist/controllers/data.d.ts +0 -1067
  179. package/dist/controllers/data.js +0 -2626
  180. package/dist/controllers/data.js.map +0 -1
  181. package/dist/controllers/operations.cjs +0 -430
  182. package/dist/controllers/operations.cjs.map +0 -1
  183. package/dist/controllers/operations.d.ts +0 -229
  184. package/dist/controllers/operations.js +0 -406
  185. package/dist/controllers/operations.js.map +0 -1
  186. package/dist/controllers/permissions.cjs +0 -4368
  187. package/dist/controllers/permissions.cjs.map +0 -1
  188. package/dist/controllers/permissions.d.ts +0 -1411
  189. package/dist/controllers/permissions.js +0 -4344
  190. package/dist/controllers/permissions.js.map +0 -1
  191. package/dist/controllers/protocol.cjs +0 -183
  192. package/dist/controllers/protocol.cjs.map +0 -1
  193. package/dist/controllers/protocol.d.ts +0 -138
  194. package/dist/controllers/protocol.js +0 -163
  195. package/dist/controllers/protocol.js.map +0 -1
  196. package/dist/controllers/schemas.cjs +0 -678
  197. package/dist/controllers/schemas.cjs.map +0 -1
  198. package/dist/controllers/schemas.d.ts +0 -293
  199. package/dist/controllers/schemas.js +0 -654
  200. package/dist/controllers/schemas.js.map +0 -1
  201. package/dist/controllers/server.cjs +0 -643
  202. package/dist/controllers/server.cjs.map +0 -1
  203. package/dist/controllers/server.d.ts +0 -322
  204. package/dist/controllers/server.js +0 -624
  205. package/dist/controllers/server.js.map +0 -1
  206. package/dist/controllers/staking.cjs +0 -626
  207. package/dist/controllers/staking.cjs.map +0 -1
  208. package/dist/controllers/staking.d.ts +0 -457
  209. package/dist/controllers/staking.js +0 -602
  210. package/dist/controllers/staking.js.map +0 -1
  211. package/dist/core/__tests__/pollingManager.test.d.ts +0 -4
  212. package/dist/core/apiClient.cjs +0 -378
  213. package/dist/core/apiClient.cjs.map +0 -1
  214. package/dist/core/apiClient.d.ts +0 -286
  215. package/dist/core/apiClient.js +0 -359
  216. package/dist/core/apiClient.js.map +0 -1
  217. package/dist/core/generics.cjs +0 -417
  218. package/dist/core/generics.cjs.map +0 -1
  219. package/dist/core/generics.d.ts +0 -205
  220. package/dist/core/generics.js +0 -386
  221. package/dist/core/generics.js.map +0 -1
  222. package/dist/core/health.cjs +0 -289
  223. package/dist/core/health.cjs.map +0 -1
  224. package/dist/core/health.d.ts +0 -143
  225. package/dist/core/health.js +0 -265
  226. package/dist/core/health.js.map +0 -1
  227. package/dist/core/inMemoryNonceManager.cjs +0 -138
  228. package/dist/core/inMemoryNonceManager.cjs.map +0 -1
  229. package/dist/core/inMemoryNonceManager.d.ts +0 -69
  230. package/dist/core/inMemoryNonceManager.js +0 -114
  231. package/dist/core/inMemoryNonceManager.js.map +0 -1
  232. package/dist/core/nonceManager.cjs +0 -304
  233. package/dist/core/nonceManager.cjs.map +0 -1
  234. package/dist/core/nonceManager.d.ts +0 -116
  235. package/dist/core/nonceManager.js +0 -280
  236. package/dist/core/nonceManager.js.map +0 -1
  237. package/dist/core/pollingManager.cjs +0 -292
  238. package/dist/core/pollingManager.cjs.map +0 -1
  239. package/dist/core/pollingManager.d.ts +0 -120
  240. package/dist/core/pollingManager.js +0 -268
  241. package/dist/core/pollingManager.js.map +0 -1
  242. package/dist/core.cjs +0 -781
  243. package/dist/core.cjs.map +0 -1
  244. package/dist/core.d.ts +0 -496
  245. package/dist/core.js +0 -756
  246. package/dist/core.js.map +0 -1
  247. package/dist/diagnostics.cjs +0 -37
  248. package/dist/diagnostics.cjs.map +0 -1
  249. package/dist/diagnostics.d.ts +0 -24
  250. package/dist/diagnostics.js +0 -13
  251. package/dist/diagnostics.js.map +0 -1
  252. package/dist/generated/abi/DLPPerformanceImplementation.cjs +0 -1202
  253. package/dist/generated/abi/DLPPerformanceImplementation.cjs.map +0 -1
  254. package/dist/generated/abi/DLPPerformanceImplementation.d.ts +0 -914
  255. package/dist/generated/abi/DLPPerformanceImplementation.js +0 -1178
  256. package/dist/generated/abi/DLPPerformanceImplementation.js.map +0 -1
  257. package/dist/generated/abi/DLPRewardDeployerImplementation.cjs +0 -1112
  258. package/dist/generated/abi/DLPRewardDeployerImplementation.cjs.map +0 -1
  259. package/dist/generated/abi/DLPRewardDeployerImplementation.d.ts +0 -840
  260. package/dist/generated/abi/DLPRewardDeployerImplementation.js +0 -1088
  261. package/dist/generated/abi/DLPRewardDeployerImplementation.js.map +0 -1
  262. package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.cjs +0 -612
  263. package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.cjs.map +0 -1
  264. package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.d.ts +0 -451
  265. package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.js +0 -588
  266. package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.js.map +0 -1
  267. package/dist/generated/abi/DLPRewardSwapImplementation.cjs +0 -939
  268. package/dist/generated/abi/DLPRewardSwapImplementation.cjs.map +0 -1
  269. package/dist/generated/abi/DLPRewardSwapImplementation.d.ts +0 -705
  270. package/dist/generated/abi/DLPRewardSwapImplementation.js +0 -915
  271. package/dist/generated/abi/DLPRewardSwapImplementation.js.map +0 -1
  272. package/dist/generated/abi/DLPRootImplementation.cjs +0 -1644
  273. package/dist/generated/abi/DLPRootImplementation.cjs.map +0 -1
  274. package/dist/generated/abi/DLPRootImplementation.d.ts +0 -1246
  275. package/dist/generated/abi/DLPRootImplementation.js +0 -1620
  276. package/dist/generated/abi/DLPRootImplementation.js.map +0 -1
  277. package/dist/generated/abi/DataLiquidityPoolImplementation.cjs +0 -985
  278. package/dist/generated/abi/DataLiquidityPoolImplementation.cjs.map +0 -1
  279. package/dist/generated/abi/DataLiquidityPoolImplementation.d.ts +0 -735
  280. package/dist/generated/abi/DataLiquidityPoolImplementation.js +0 -961
  281. package/dist/generated/abi/DataLiquidityPoolImplementation.js.map +0 -1
  282. package/dist/generated/abi/SwapHelperImplementation.cjs +0 -976
  283. package/dist/generated/abi/SwapHelperImplementation.cjs.map +0 -1
  284. package/dist/generated/abi/SwapHelperImplementation.d.ts +0 -728
  285. package/dist/generated/abi/SwapHelperImplementation.js +0 -952
  286. package/dist/generated/abi/SwapHelperImplementation.js.map +0 -1
  287. package/dist/generated/abi/TeePoolImplementation.cjs +0 -1313
  288. package/dist/generated/abi/TeePoolImplementation.cjs.map +0 -1
  289. package/dist/generated/abi/TeePoolImplementation.d.ts +0 -992
  290. package/dist/generated/abi/TeePoolImplementation.js +0 -1289
  291. package/dist/generated/abi/TeePoolImplementation.js.map +0 -1
  292. package/dist/generated/event-types.cjs +0 -17
  293. package/dist/generated/event-types.cjs.map +0 -1
  294. package/dist/generated/event-types.d.ts +0 -816
  295. package/dist/generated/event-types.js +0 -1
  296. package/dist/generated/event-types.js.map +0 -1
  297. package/dist/generated/eventRegistry.cjs +0 -4512
  298. package/dist/generated/eventRegistry.cjs.map +0 -1
  299. package/dist/generated/eventRegistry.d.ts +0 -14
  300. package/dist/generated/eventRegistry.js +0 -4487
  301. package/dist/generated/eventRegistry.js.map +0 -1
  302. package/dist/generated/server/server-exports.cjs +0 -45
  303. package/dist/generated/server/server-exports.cjs.map +0 -1
  304. package/dist/generated/server/server-exports.d.ts +0 -36
  305. package/dist/generated/server/server-exports.js +0 -19
  306. package/dist/generated/server/server-exports.js.map +0 -1
  307. package/dist/generated/server/server.cjs +0 -17
  308. package/dist/generated/server/server.cjs.map +0 -1
  309. package/dist/generated/server/server.d.ts +0 -907
  310. package/dist/generated/server/server.js +0 -1
  311. package/dist/generated/server/server.js.map +0 -1
  312. package/dist/generated/subgraph.cjs +0 -1440
  313. package/dist/generated/subgraph.cjs.map +0 -1
  314. package/dist/generated/subgraph.d.ts +0 -6113
  315. package/dist/generated/subgraph.js +0 -1404
  316. package/dist/generated/subgraph.js.map +0 -1
  317. package/dist/lib/__tests__/redisAtomicStore.test.d.ts +0 -1
  318. package/dist/lib/redisAtomicStore.cjs +0 -201
  319. package/dist/lib/redisAtomicStore.cjs.map +0 -1
  320. package/dist/lib/redisAtomicStore.d.ts +0 -120
  321. package/dist/lib/redisAtomicStore.js +0 -177
  322. package/dist/lib/redisAtomicStore.js.map +0 -1
  323. package/dist/server/relayerHandler.cjs +0 -452
  324. package/dist/server/relayerHandler.cjs.map +0 -1
  325. package/dist/server/relayerHandler.d.ts +0 -69
  326. package/dist/server/relayerHandler.js +0 -428
  327. package/dist/server/relayerHandler.js.map +0 -1
  328. package/dist/tests/abi.test.d.ts +0 -1
  329. package/dist/tests/chains-definitions.test.d.ts +0 -1
  330. package/dist/tests/core-encryption.test.d.ts +0 -1
  331. package/dist/tests/core-extended.test.d.ts +0 -1
  332. package/dist/tests/core-generics-coverage.test.d.ts +0 -1
  333. package/dist/tests/coverage-boost.test.d.ts +0 -1
  334. package/dist/tests/crypto-cross-platform-compatibility.test.d.ts +0 -1
  335. package/dist/tests/data-addfile-permissions-schema.test.d.ts +0 -1
  336. package/dist/tests/data-additional-methods.test.d.ts +0 -1
  337. package/dist/tests/data-controller-edge-cases.test.d.ts +0 -1
  338. package/dist/tests/data-ipfs-gateways.test.d.ts +0 -1
  339. package/dist/tests/data-relayer.test.d.ts +0 -1
  340. package/dist/tests/data-schema-validation.test.d.ts +0 -1
  341. package/dist/tests/data-simple-methods.test.d.ts +0 -1
  342. package/dist/tests/data-upload-owner-validation.test.d.ts +0 -1
  343. package/dist/tests/data.test.d.ts +0 -1
  344. package/dist/tests/demo-integration.test.d.ts +0 -1
  345. package/dist/tests/demo-trusted-server-integration.test.d.ts +0 -1
  346. package/dist/tests/download-relayer.test.d.ts +0 -1
  347. package/dist/tests/dual-mode-permissions.test.d.ts +0 -1
  348. package/dist/tests/dual-mode-trusted-servers.test.d.ts +0 -1
  349. package/dist/tests/encryption-correct-implementation.test.d.ts +0 -1
  350. package/dist/tests/encryption-coverage.test.d.ts +0 -1
  351. package/dist/tests/encryption-edge-cases.test.d.ts +0 -1
  352. package/dist/tests/encryption-utils-updated.test.d.ts +0 -1
  353. package/dist/tests/errors-coverage.test.d.ts +0 -1
  354. package/dist/tests/factories/mockFactory.d.ts +0 -316
  355. package/dist/tests/fakes/FakeStorageManager.d.ts +0 -200
  356. package/dist/tests/fakes/FakeStorageManager.test.d.ts +0 -1
  357. package/dist/tests/fakes/FakeWaitForTransactionEvents.d.ts +0 -170
  358. package/dist/tests/fakes/FakeWaitForTransactionEvents.test.d.ts +0 -1
  359. package/dist/tests/fakes/fake-pgp-port.d.ts +0 -13
  360. package/dist/tests/grantValidation-edge-cases.test.d.ts +0 -1
  361. package/dist/tests/grantValidation-unreachable-branch.test.d.ts +0 -1
  362. package/dist/tests/helper-methods.test.d.ts +0 -1
  363. package/dist/tests/helpers/typedMocks.d.ts +0 -64
  364. package/dist/tests/index-browser.test.d.ts +0 -1
  365. package/dist/tests/index-node.test.d.ts +0 -1
  366. package/dist/tests/index.test.d.ts +0 -1
  367. package/dist/tests/mocks/platformAdapter.d.ts +0 -12
  368. package/dist/tests/new-permissions-methods.test.d.ts +0 -1
  369. package/dist/tests/no-buffer-browser.test.d.ts +0 -1
  370. package/dist/tests/permissions-grantee.test.d.ts +0 -1
  371. package/dist/tests/permissions-revoke-relayer.test.d.ts +0 -1
  372. package/dist/tests/permissions-schema-validation.test.d.ts +0 -1
  373. package/dist/tests/permissions-server-files.test.d.ts +0 -1
  374. package/dist/tests/permissions-transaction-options.test.d.ts +0 -1
  375. package/dist/tests/permissions-trust-servers.test.d.ts +0 -1
  376. package/dist/tests/permissions.test.d.ts +0 -1
  377. package/dist/tests/personal.test.d.ts +0 -1
  378. package/dist/tests/platform-browser.test.d.ts +0 -1
  379. package/dist/tests/platform-crypto-expanded.test.d.ts +0 -1
  380. package/dist/tests/platform-crypto.test.d.ts +0 -1
  381. package/dist/tests/platform-index.test.d.ts +0 -1
  382. package/dist/tests/platform-node.test.d.ts +0 -1
  383. package/dist/tests/platform-shared-utils.test.d.ts +0 -1
  384. package/dist/tests/platform-updated.test.d.ts +0 -1
  385. package/dist/tests/protocol-additional-methods.test.d.ts +0 -1
  386. package/dist/tests/protocol.test.d.ts +0 -1
  387. package/dist/tests/read-only-mode.test.d.ts +0 -1
  388. package/dist/tests/relayer-integration.test.d.ts +0 -1
  389. package/dist/tests/relayer-unified.test.d.ts +0 -1
  390. package/dist/tests/schemas.test.d.ts +0 -1
  391. package/dist/tests/server-relayer-handler.test.d.ts +0 -1
  392. package/dist/tests/signatureFormatter.test.d.ts +0 -1
  393. package/dist/tests/staking.test.d.ts +0 -1
  394. package/dist/tests/trusted-server-queries.test.d.ts +0 -1
  395. package/dist/tests/typedDataConverter.test.d.ts +0 -1
  396. package/dist/tests/types-contracts.test.d.ts +0 -1
  397. package/dist/tests/types-data.test.d.ts +0 -1
  398. package/dist/tests/types-external-apis.test.d.ts +0 -1
  399. package/dist/tests/types-generics.test.d.ts +0 -1
  400. package/dist/tests/types-permissions.test.d.ts +0 -1
  401. package/dist/tests/types-upload-params.test.d.ts +0 -1
  402. package/dist/tests/types.test.d.ts +0 -1
  403. package/dist/tests/utils-formatters.test.d.ts +0 -1
  404. package/dist/tests/utils-grantFiles-edge-cases.test.d.ts +0 -1
  405. package/dist/tests/utils-grantFiles-validation.test.d.ts +0 -1
  406. package/dist/tests/utils-grantFiles.test.d.ts +0 -1
  407. package/dist/tests/utils-grantValidation-consolidated.test.d.ts +0 -1
  408. package/dist/tests/utils-grants.test.d.ts +0 -1
  409. package/dist/tests/utils-ipfs-additional.test.d.ts +0 -1
  410. package/dist/tests/utils-ipfs.test.d.ts +0 -4
  411. package/dist/tests/utils-schemaValidation.test.d.ts +0 -1
  412. package/dist/tests/vana.test.d.ts +0 -1
  413. package/dist/tests/wallet-crypto-compatibility.test.d.ts +0 -1
  414. package/dist/types/atomicStore.cjs.map +0 -1
  415. package/dist/types/atomicStore.d.ts +0 -236
  416. package/dist/types/atomicStore.js +0 -7
  417. package/dist/types/atomicStore.js.map +0 -1
  418. package/dist/types/blockchain.cjs +0 -17
  419. package/dist/types/blockchain.cjs.map +0 -1
  420. package/dist/types/blockchain.d.ts +0 -85
  421. package/dist/types/blockchain.js +0 -1
  422. package/dist/types/blockchain.js.map +0 -1
  423. package/dist/types/controller-context.cjs +0 -17
  424. package/dist/types/controller-context.cjs.map +0 -1
  425. package/dist/types/controller-context.d.ts +0 -68
  426. package/dist/types/controller-context.js +0 -1
  427. package/dist/types/controller-context.js.map +0 -1
  428. package/dist/types/data.cjs +0 -17
  429. package/dist/types/data.cjs.map +0 -1
  430. package/dist/types/data.d.ts +0 -763
  431. package/dist/types/data.js +0 -1
  432. package/dist/types/data.js.map +0 -1
  433. package/dist/types/external-apis.cjs +0 -61
  434. package/dist/types/external-apis.cjs.map +0 -1
  435. package/dist/types/external-apis.d.ts +0 -184
  436. package/dist/types/external-apis.js +0 -34
  437. package/dist/types/external-apis.js.map +0 -1
  438. package/dist/types/generics.cjs +0 -17
  439. package/dist/types/generics.cjs.map +0 -1
  440. package/dist/types/generics.d.ts +0 -518
  441. package/dist/types/generics.js +0 -1
  442. package/dist/types/generics.js.map +0 -1
  443. package/dist/types/operationStore.cjs +0 -17
  444. package/dist/types/operationStore.cjs.map +0 -1
  445. package/dist/types/operationStore.d.ts +0 -171
  446. package/dist/types/operationStore.js +0 -1
  447. package/dist/types/operationStore.js.map +0 -1
  448. package/dist/types/operations.cjs +0 -53
  449. package/dist/types/operations.cjs.map +0 -1
  450. package/dist/types/operations.d.ts +0 -204
  451. package/dist/types/operations.js +0 -26
  452. package/dist/types/operations.js.map +0 -1
  453. package/dist/types/options.cjs +0 -17
  454. package/dist/types/options.cjs.map +0 -1
  455. package/dist/types/options.d.ts +0 -308
  456. package/dist/types/options.js +0 -1
  457. package/dist/types/options.js.map +0 -1
  458. package/dist/types/permissions.cjs +0 -17
  459. package/dist/types/permissions.cjs.map +0 -1
  460. package/dist/types/permissions.d.ts +0 -955
  461. package/dist/types/permissions.js +0 -1
  462. package/dist/types/permissions.js.map +0 -1
  463. package/dist/types/personal.cjs +0 -17
  464. package/dist/types/personal.cjs.map +0 -1
  465. package/dist/types/personal.d.ts +0 -174
  466. package/dist/types/personal.js +0 -1
  467. package/dist/types/personal.js.map +0 -1
  468. package/dist/types/relayer.cjs +0 -17
  469. package/dist/types/relayer.cjs.map +0 -1
  470. package/dist/types/relayer.d.ts +0 -552
  471. package/dist/types/relayer.js +0 -1
  472. package/dist/types/relayer.js.map +0 -1
  473. package/dist/types/transactionResults.cjs +0 -17
  474. package/dist/types/transactionResults.cjs.map +0 -1
  475. package/dist/types/transactionResults.d.ts +0 -193
  476. package/dist/types/transactionResults.js +0 -1
  477. package/dist/types/transactionResults.js.map +0 -1
  478. package/dist/types/utils.cjs +0 -17
  479. package/dist/types/utils.cjs.map +0 -1
  480. package/dist/types/utils.d.ts +0 -771
  481. package/dist/types/utils.js +0 -1
  482. package/dist/types/utils.js.map +0 -1
  483. package/dist/utils/__tests__/chainQuery.test.d.ts +0 -1
  484. package/dist/utils/__tests__/parseTransaction.test.d.ts +0 -1
  485. package/dist/utils/__tests__/pojo-serialization.test.d.ts +0 -1
  486. package/dist/utils/__tests__/signatureCache.test.d.ts +0 -1
  487. package/dist/utils/__tests__/subgraphConsistency.test.d.ts +0 -4
  488. package/dist/utils/__tests__/subgraphPagination.test.d.ts +0 -4
  489. package/dist/utils/__tests__/transaction-edge-cases.test.d.ts +0 -1
  490. package/dist/utils/__tests__/transactionHelpers.test.d.ts +0 -1
  491. package/dist/utils/__tests__/urlResolver.test.d.ts +0 -4
  492. package/dist/utils/blockchain/registry.cjs +0 -81
  493. package/dist/utils/blockchain/registry.cjs.map +0 -1
  494. package/dist/utils/blockchain/registry.d.ts +0 -32
  495. package/dist/utils/blockchain/registry.js +0 -56
  496. package/dist/utils/blockchain/registry.js.map +0 -1
  497. package/dist/utils/blockchain/registry.test.d.ts +0 -1
  498. package/dist/utils/chainQuery.cjs +0 -107
  499. package/dist/utils/chainQuery.cjs.map +0 -1
  500. package/dist/utils/chainQuery.d.ts +0 -31
  501. package/dist/utils/chainQuery.js +0 -82
  502. package/dist/utils/chainQuery.js.map +0 -1
  503. package/dist/utils/download.cjs +0 -69
  504. package/dist/utils/download.cjs.map +0 -1
  505. package/dist/utils/download.d.ts +0 -40
  506. package/dist/utils/download.js +0 -45
  507. package/dist/utils/download.js.map +0 -1
  508. package/dist/utils/encryption.cjs +0 -176
  509. package/dist/utils/encryption.cjs.map +0 -1
  510. package/dist/utils/encryption.d.ts +0 -271
  511. package/dist/utils/encryption.js +0 -142
  512. package/dist/utils/encryption.js.map +0 -1
  513. package/dist/utils/formatters.cjs +0 -55
  514. package/dist/utils/formatters.cjs.map +0 -1
  515. package/dist/utils/formatters.d.ts +0 -118
  516. package/dist/utils/formatters.js +0 -28
  517. package/dist/utils/formatters.js.map +0 -1
  518. package/dist/utils/grantFiles.cjs +0 -181
  519. package/dist/utils/grantFiles.cjs.map +0 -1
  520. package/dist/utils/grantFiles.d.ts +0 -172
  521. package/dist/utils/grantFiles.js +0 -143
  522. package/dist/utils/grantFiles.js.map +0 -1
  523. package/dist/utils/grantValidation.cjs +0 -243
  524. package/dist/utils/grantValidation.cjs.map +0 -1
  525. package/dist/utils/grantValidation.d.ts +0 -226
  526. package/dist/utils/grantValidation.js +0 -201
  527. package/dist/utils/grantValidation.js.map +0 -1
  528. package/dist/utils/grants.cjs +0 -108
  529. package/dist/utils/grants.cjs.map +0 -1
  530. package/dist/utils/grants.d.ts +0 -148
  531. package/dist/utils/grants.js +0 -82
  532. package/dist/utils/grants.js.map +0 -1
  533. package/dist/utils/ipfs.cjs +0 -128
  534. package/dist/utils/ipfs.cjs.map +0 -1
  535. package/dist/utils/ipfs.d.ts +0 -88
  536. package/dist/utils/ipfs.js +0 -97
  537. package/dist/utils/ipfs.js.map +0 -1
  538. package/dist/utils/multicall.cjs +0 -233
  539. package/dist/utils/multicall.cjs.map +0 -1
  540. package/dist/utils/multicall.d.ts +0 -126
  541. package/dist/utils/multicall.js +0 -208
  542. package/dist/utils/multicall.js.map +0 -1
  543. package/dist/utils/parseTransactionPojo.cjs +0 -87
  544. package/dist/utils/parseTransactionPojo.cjs.map +0 -1
  545. package/dist/utils/parseTransactionPojo.d.ts +0 -31
  546. package/dist/utils/parseTransactionPojo.js +0 -63
  547. package/dist/utils/parseTransactionPojo.js.map +0 -1
  548. package/dist/utils/schemaValidation.cjs +0 -258
  549. package/dist/utils/schemaValidation.cjs.map +0 -1
  550. package/dist/utils/schemaValidation.d.ts +0 -168
  551. package/dist/utils/schemaValidation.js +0 -219
  552. package/dist/utils/schemaValidation.js.map +0 -1
  553. package/dist/utils/signatureCache.cjs +0 -192
  554. package/dist/utils/signatureCache.cjs.map +0 -1
  555. package/dist/utils/signatureCache.d.ts +0 -172
  556. package/dist/utils/signatureCache.js +0 -167
  557. package/dist/utils/signatureCache.js.map +0 -1
  558. package/dist/utils/signatureFormatter.cjs +0 -42
  559. package/dist/utils/signatureFormatter.cjs.map +0 -1
  560. package/dist/utils/signatureFormatter.d.ts +0 -36
  561. package/dist/utils/signatureFormatter.js +0 -18
  562. package/dist/utils/signatureFormatter.js.map +0 -1
  563. package/dist/utils/subgraphConsistency.cjs +0 -184
  564. package/dist/utils/subgraphConsistency.cjs.map +0 -1
  565. package/dist/utils/subgraphConsistency.d.ts +0 -65
  566. package/dist/utils/subgraphConsistency.js +0 -155
  567. package/dist/utils/subgraphConsistency.js.map +0 -1
  568. package/dist/utils/subgraphMetaCache.cjs +0 -101
  569. package/dist/utils/subgraphMetaCache.cjs.map +0 -1
  570. package/dist/utils/subgraphMetaCache.d.ts +0 -56
  571. package/dist/utils/subgraphMetaCache.js +0 -76
  572. package/dist/utils/subgraphMetaCache.js.map +0 -1
  573. package/dist/utils/subgraphPagination.cjs +0 -104
  574. package/dist/utils/subgraphPagination.cjs.map +0 -1
  575. package/dist/utils/subgraphPagination.d.ts +0 -78
  576. package/dist/utils/subgraphPagination.js +0 -78
  577. package/dist/utils/subgraphPagination.js.map +0 -1
  578. package/dist/utils/tests/multicall.test.d.ts +0 -1
  579. package/dist/utils/transactionHelpers.cjs +0 -54
  580. package/dist/utils/transactionHelpers.cjs.map +0 -1
  581. package/dist/utils/transactionHelpers.d.ts +0 -80
  582. package/dist/utils/transactionHelpers.js +0 -29
  583. package/dist/utils/transactionHelpers.js.map +0 -1
  584. package/dist/utils/typeGuards.cjs +0 -109
  585. package/dist/utils/typeGuards.cjs.map +0 -1
  586. package/dist/utils/typeGuards.d.ts +0 -138
  587. package/dist/utils/typeGuards.js +0 -74
  588. package/dist/utils/typeGuards.js.map +0 -1
  589. package/dist/utils/typedDataConverter.cjs +0 -43
  590. package/dist/utils/typedDataConverter.cjs.map +0 -1
  591. package/dist/utils/typedDataConverter.d.ts +0 -46
  592. package/dist/utils/typedDataConverter.js +0 -19
  593. package/dist/utils/typedDataConverter.js.map +0 -1
  594. package/dist/utils/urlResolver.cjs +0 -62
  595. package/dist/utils/urlResolver.cjs.map +0 -1
  596. package/dist/utils/urlResolver.d.ts +0 -56
  597. package/dist/utils/urlResolver.js +0 -37
  598. package/dist/utils/urlResolver.js.map +0 -1
  599. package/dist/utils/wallet.cjs +0 -63
  600. package/dist/utils/wallet.cjs.map +0 -1
  601. package/dist/utils/wallet.d.ts +0 -94
  602. package/dist/utils/wallet.js +0 -37
  603. package/dist/utils/wallet.js.map +0 -1
  604. package/dist/utils/withEvents.cjs +0 -44
  605. package/dist/utils/withEvents.cjs.map +0 -1
  606. package/dist/utils/withEvents.d.ts +0 -56
  607. package/dist/utils/withEvents.js +0 -18
  608. package/dist/utils/withEvents.js.map +0 -1
  609. /package/dist/{__tests__/waitForTransactionEvents.test.d.ts → auth/pkce.test.d.ts} +0 -0
  610. /package/dist/{client/__tests__/enhancedResponse.test.d.ts → auth/token-store.test.d.ts} +0 -0
  611. /package/dist/{controllers/__tests__/operations.processQueue.test.d.ts → auth/web3-signed.test.d.ts} +0 -0
  612. /package/dist/{controllers/__tests__/schemas-edge-cases.test.d.ts → crypto/envelope/openpgp.test.d.ts} +0 -0
  613. /package/dist/{controllers/data-error-handling.test.d.ts → crypto/keys/derive.test.d.ts} +0 -0
  614. /package/dist/{tests/errors.test.d.ts → errors.test.d.ts} +0 -0
  615. /package/dist/{controllers/server-additional.test.d.ts → protocol/data-file.test.d.ts} +0 -0
  616. /package/dist/{core/__tests__/health.test.d.ts → protocol/eip712.test.d.ts} +0 -0
  617. /package/dist/{core/__tests__/inMemoryNonceManager.test.d.ts → protocol/gateway.test.d.ts} +0 -0
  618. /package/dist/{core/__tests__/nonceManager.test.d.ts → protocol/grants.test.d.ts} +0 -0
  619. /package/dist/{core/core.test.d.ts → protocol/scopes.test.d.ts} +0 -0
  620. /package/dist/{core/tests/apiClient.test.d.ts → storage/tests/defaultStorage.test.d.ts} +0 -0
  621. /package/dist/{core/tests/client.test.d.ts → storage/tests/r2Storage.test.d.ts} +0 -0
  622. /package/dist/{core/tests/generics.test.d.ts → storage/tests/vanaStorage.test.d.ts} +0 -0
  623. /package/dist/{diagnostics.test.d.ts → types/ps-errors.test.d.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/controllers/staking.ts"],"sourcesContent":["/**\n * Provides staking functionality for the VanaPool protocol.\n *\n * @remarks\n * This controller handles interactions with VanaPool staking contracts,\n * allowing users to query staking information such as total VANA staked,\n * entity information, and staker positions.\n *\n * @category Controllers\n * @module StakingController\n */\n\nimport type { ControllerContext } from \"../types/controller-context\";\nimport type { TransactionOptions } from \"../types/operations\";\nimport { BaseController } from \"./base\";\nimport { getContract, parseEther } from \"viem\";\nimport type { Address, Hash } from \"viem\";\nimport { getContractAddress } from \"../generated/addresses\";\nimport { getAbi } from \"../generated/abi\";\nimport { BlockchainError } from \"../errors\";\n\n/**\n * Information about a staking entity in the VanaPool protocol.\n */\nexport interface EntityInfo {\n entityId: bigint;\n ownerAddress: Address;\n status: number;\n name: string;\n maxAPY: bigint;\n lockedRewardPool: bigint;\n activeRewardPool: bigint;\n totalShares: bigint;\n lastUpdateTimestamp: bigint;\n totalDistributedRewards: bigint;\n}\n\n/**\n * Information about a staker's position in an entity.\n */\nexport interface StakerEntityInfo {\n shares: bigint;\n costBasis: bigint;\n rewardEligibilityTimestamp: bigint;\n realizedRewards: bigint;\n vestedRewards: bigint;\n}\n\n/**\n * Comprehensive staking summary for a staker in an entity.\n */\nexport interface StakerEntitySummary {\n /** Number of shares owned by the staker */\n shares: bigint;\n /** Cost basis - the original VANA amount staked */\n costBasis: bigint;\n /** Current value of the staker's shares in VANA */\n currentValue: bigint;\n /** Timestamp when rewards become eligible */\n rewardEligibilityTimestamp: bigint;\n /** Remaining bonding time in seconds (0 if bonding period has passed) */\n remainingBondingTime: bigint;\n /** Whether the staker is still in the bonding period */\n isInBondingPeriod: boolean;\n /** Vested rewards that can be claimed without penalty */\n vestedRewards: bigint;\n /** Unvested rewards (pending interest = currentValue - costBasis) */\n unvestedRewards: bigint;\n /** Realized/withdrawn rewards (already claimed) */\n realizedRewards: bigint;\n /** Total earned rewards (includes vested, unvested, and realized) */\n earnedRewards: bigint;\n}\n\n/**\n * Controller for VanaPool staking operations.\n *\n * @remarks\n * Provides methods to query staking information from the VanaPool contracts.\n * This includes total VANA staked across the protocol, entity information,\n * and individual staker positions.\n *\n * @example\n * ```typescript\n * // Get total VANA staked in the protocol\n * const totalStaked = await vana.staking.getTotalVanaStaked();\n * console.log(`Total staked: ${totalStaked} wei`);\n *\n * // Get entity information\n * const entity = await vana.staking.getEntity(1n);\n * console.log(`Entity name: ${entity.name}`);\n * ```\n *\n * @category Controllers\n */\nexport class StakingController extends BaseController {\n constructor(context: ControllerContext) {\n super(context);\n }\n\n /**\n * Gets the chain ID from context.\n */\n private getChainId(): number {\n const chainId =\n this.context.walletClient?.chain?.id ??\n this.context.publicClient.chain?.id;\n if (!chainId) {\n throw new Error(\"Chain ID not available\");\n }\n return chainId;\n }\n\n /**\n * Gets the VanaPoolEntity contract instance.\n */\n private getEntityContract() {\n const chainId = this.getChainId();\n return getContract({\n address: getContractAddress(chainId, \"VanaPoolEntity\"),\n abi: getAbi(\"VanaPoolEntity\"),\n client: this.context.publicClient,\n });\n }\n\n /**\n * Gets the VanaPoolStaking contract instance.\n */\n private getStakingContract() {\n const chainId = this.getChainId();\n return getContract({\n address: getContractAddress(chainId, \"VanaPoolStaking\"),\n abi: getAbi(\"VanaPoolStaking\"),\n client: this.context.publicClient,\n });\n }\n\n /**\n * Gets the total amount of VANA staked in the VanaPool protocol or a specific entity.\n *\n * @remarks\n * When called without an entityId, this retrieves the sum of activeRewardPool\n * across all active entities in the VanaPool protocol.\n * When called with an entityId, this returns the activeRewardPool for that specific entity.\n * The value is returned in wei (10^18 = 1 VANA).\n *\n * @param entityId - Optional entity ID to get staked amount for a specific entity\n * @returns The total amount of VANA staked in wei\n *\n * @example\n * ```typescript\n * // Get total staked across all entities\n * const totalStaked = await vana.staking.getTotalVanaStaked();\n * console.log(`Total staked: ${Number(totalStaked) / 1e18} VANA`);\n *\n * // Get staked amount for a specific entity\n * const entityStaked = await vana.staking.getTotalVanaStaked(1n);\n * console.log(`Entity 1 staked: ${Number(entityStaked) / 1e18} VANA`);\n * ```\n */\n async getTotalVanaStaked(entityId?: bigint): Promise<bigint> {\n const entityContract = this.getEntityContract();\n\n // If entityId is provided, return the activeRewardPool for that specific entity\n if (entityId !== undefined) {\n const entity = await entityContract.read.entities([entityId]);\n return entity.activeRewardPool;\n }\n\n // Otherwise, sum up the activeRewardPool from all active entities\n const activeEntityIds = await entityContract.read.activeEntitiesValues();\n\n let totalStaked = 0n;\n for (const id of activeEntityIds) {\n const entity = await entityContract.read.entities([id]);\n totalStaked += entity.activeRewardPool;\n }\n\n return totalStaked;\n }\n\n /**\n * Gets information about a specific staking entity.\n *\n * @param entityId - The ID of the entity to query\n * @returns The entity information including name, APY, shares, and reward pools\n *\n * @example\n * ```typescript\n * const entity = await vana.staking.getEntity(1n);\n * console.log(`Entity: ${entity.name}`);\n * console.log(`Total shares: ${entity.totalShares}`);\n * console.log(`Max APY: ${Number(entity.maxAPY) / 100}%`);\n * ```\n */\n async getEntity(entityId: bigint): Promise<EntityInfo> {\n const entityContract = this.getEntityContract();\n\n const result = await entityContract.read.entities([entityId]);\n\n return {\n entityId: result.entityId,\n ownerAddress: result.ownerAddress as Address,\n status: result.status,\n name: result.name,\n maxAPY: result.maxAPY,\n lockedRewardPool: result.lockedRewardPool,\n activeRewardPool: result.activeRewardPool,\n totalShares: result.totalShares,\n lastUpdateTimestamp: result.lastUpdateTimestamp,\n totalDistributedRewards: result.totalDistributedRewards,\n };\n }\n\n /**\n * Gets the total number of staking entities in the protocol.\n *\n * @returns The count of entities\n *\n * @example\n * ```typescript\n * const count = await vana.staking.getEntitiesCount();\n * console.log(`Total entities: ${count}`);\n * ```\n */\n async getEntitiesCount(): Promise<bigint> {\n const entityContract = this.getEntityContract();\n return entityContract.read.entitiesCount();\n }\n\n /**\n * Gets the IDs of all active staking entities.\n *\n * @returns Array of active entity IDs\n *\n * @example\n * ```typescript\n * const activeIds = await vana.staking.getActiveEntities();\n * console.log(`Active entities: ${activeIds.join(', ')}`);\n * ```\n */\n async getActiveEntities(): Promise<readonly bigint[]> {\n const entityContract = this.getEntityContract();\n return entityContract.read.activeEntitiesValues();\n }\n\n /**\n * Gets a staker's position in a specific entity.\n *\n * @param staker - The address of the staker\n * @param entityId - The ID of the entity\n * @returns The staker's position information\n *\n * @example\n * ```typescript\n * const position = await vana.staking.getStakerPosition(\n * '0x742d35...',\n * 1n\n * );\n * console.log(`Shares: ${position.shares}`);\n * console.log(`Rewards: ${position.realizedRewards}`);\n * ```\n */\n async getStakerPosition(\n staker: Address,\n entityId: bigint,\n ): Promise<StakerEntityInfo> {\n const stakingContract = this.getStakingContract();\n\n const result = await stakingContract.read.stakerEntities([\n staker,\n entityId,\n ]);\n\n return {\n shares: result.shares,\n costBasis: result.costBasis,\n rewardEligibilityTimestamp: result.rewardEligibilityTimestamp,\n realizedRewards: result.realizedRewards,\n vestedRewards: result.vestedRewards,\n };\n }\n\n /**\n * Gets the earned rewards for a staker in an entity.\n *\n * @param staker - The address of the staker\n * @param entityId - The ID of the entity\n * @returns The earned rewards amount in wei\n *\n * @example\n * ```typescript\n * const rewards = await vana.staking.getEarnedRewards(\n * '0x742d35...',\n * 1n\n * );\n * console.log(`Earned: ${Number(rewards) / 1e18} VANA`);\n * ```\n */\n async getEarnedRewards(staker: Address, entityId: bigint): Promise<bigint> {\n const stakingContract = this.getStakingContract();\n return stakingContract.read.getEarnedRewards([staker, entityId]);\n }\n\n /**\n * Gets the minimum stake amount required to stake.\n *\n * @returns The minimum stake amount in wei\n *\n * @example\n * ```typescript\n * const minStake = await vana.staking.getMinStakeAmount();\n * console.log(`Minimum stake: ${Number(minStake) / 1e18} VANA`);\n * ```\n */\n async getMinStakeAmount(): Promise<bigint> {\n const stakingContract = this.getStakingContract();\n return stakingContract.read.minStakeAmount();\n }\n\n /**\n * Gets the count of active stakers in the protocol.\n *\n * @returns The number of active stakers\n *\n * @example\n * ```typescript\n * const count = await vana.staking.getActiveStakersCount();\n * console.log(`Active stakers: ${count}`);\n * ```\n */\n async getActiveStakersCount(): Promise<bigint> {\n const stakingContract = this.getStakingContract();\n return stakingContract.read.activeStakersListCount();\n }\n\n /**\n * Gets the bonding period for staking.\n *\n * @returns The bonding period in seconds\n *\n * @example\n * ```typescript\n * const bondingPeriod = await vana.staking.getBondingPeriod();\n * console.log(`Bonding period: ${bondingPeriod / 86400n} days`);\n * ```\n */\n async getBondingPeriod(): Promise<bigint> {\n const stakingContract = this.getStakingContract();\n return stakingContract.read.bondingPeriod();\n }\n\n /**\n * Gets the total distributed rewards for a specific entity from the contract.\n *\n * @remarks\n * This reads the `totalDistributedRewards` field from the entity's on-chain state.\n * This value represents the sum of all rewards that have been processed\n * (moved from lockedRewardPool to activeRewardPool) minus any forfeited\n * rewards that were returned.\n *\n * @param entityId - The ID of the entity to query\n * @returns The total distributed rewards in wei\n *\n * @example\n * ```typescript\n * const totalRewards = await vana.staking.getTotalDistributedRewards(1n);\n * const totalRewardsVana = Number(totalRewards) / 1e18;\n * console.log(`Total distributed rewards: ${totalRewardsVana.toLocaleString()} VANA`);\n * ```\n */\n async getTotalDistributedRewards(entityId: bigint): Promise<bigint> {\n const entityContract = this.getEntityContract();\n const result = await entityContract.read.entities([entityId]);\n return result.totalDistributedRewards;\n }\n\n /**\n * Gets a comprehensive staking summary for a staker in an entity.\n *\n * @remarks\n * This method aggregates all relevant staking information for a staker in a single call,\n * including staked amount, current value, bonding status, and all reward types.\n *\n * Reward breakdown:\n * - `earnedRewards` = pendingInterest + vestedRewards + realizedRewards\n * - `pendingInterest` = currentValue - costBasis (unvested appreciation)\n * - `vestedRewards` = rewards that have vested but not yet withdrawn\n * - `realizedRewards` = rewards already withdrawn during unstakes\n *\n * @param staker - The address of the staker\n * @param entityId - The ID of the entity\n * @returns A comprehensive summary of the staker's position\n *\n * @example\n * ```typescript\n * const summary = await vana.staking.getStakerSummary('0x742d35...', 1n);\n * console.log(`Total staked: ${Number(summary.totalStaked) / 1e18} VANA`);\n * console.log(`Current value: ${Number(summary.currentValue) / 1e18} VANA`);\n * console.log(`In bonding period: ${summary.isInBondingPeriod}`);\n * console.log(`Remaining bonding time: ${Number(summary.remainingBondingTime) / 86400} days`);\n * console.log(`Vested rewards: ${Number(summary.vestedRewards) / 1e18} VANA`);\n * console.log(`Unvested rewards: ${Number(summary.unvestedRewards) / 1e18} VANA`);\n * console.log(`Realized rewards: ${Number(summary.realizedRewards) / 1e18} VANA`);\n * console.log(`Total earned: ${Number(summary.earnedRewards) / 1e18} VANA`);\n * ```\n */\n async getStakerSummary(\n staker: Address,\n entityId: bigint,\n ): Promise<StakerEntitySummary> {\n const chainId = this.getChainId();\n const stakingAddress = getContractAddress(chainId, \"VanaPoolStaking\");\n const entityAddress = getContractAddress(chainId, \"VanaPoolEntity\");\n const stakingAbi = getAbi(\"VanaPoolStaking\");\n const entityAbi = getAbi(\"VanaPoolEntity\");\n\n // Get latest block first to ensure all reads are from the same block\n const block = await this.context.publicClient.getBlock();\n const blockNumber = block.number;\n\n // Batch all contract reads into a single multicall RPC request at the same block\n const multicallResults = await this.context.publicClient.multicall({\n contracts: [\n {\n address: stakingAddress,\n abi: stakingAbi,\n functionName: \"stakerEntities\",\n args: [staker, entityId],\n },\n {\n address: stakingAddress,\n abi: stakingAbi,\n functionName: \"getEarnedRewards\",\n args: [staker, entityId],\n },\n {\n address: entityAddress,\n abi: entityAbi,\n functionName: \"entityShareToVana\",\n args: [entityId],\n },\n ],\n blockNumber,\n });\n\n const [positionResult, earnedRewardsResult, shareToVanaResult] =\n multicallResults;\n\n if (\n positionResult.status === \"failure\" ||\n earnedRewardsResult.status === \"failure\" ||\n shareToVanaResult.status === \"failure\"\n ) {\n throw new BlockchainError(\n \"Failed to fetch staker summary: one or more contract calls failed\",\n );\n }\n\n const position = positionResult.result as {\n shares: bigint;\n costBasis: bigint;\n rewardEligibilityTimestamp: bigint;\n realizedRewards: bigint;\n vestedRewards: bigint;\n };\n const earnedRewards = earnedRewardsResult.result as bigint;\n const shareToVana = shareToVanaResult.result as bigint;\n const currentTimestamp = block.timestamp;\n\n // Calculate remaining bonding time\n const eligibilityTimestamp = position.rewardEligibilityTimestamp;\n const remainingBondingTime =\n eligibilityTimestamp > currentTimestamp\n ? eligibilityTimestamp - currentTimestamp\n : 0n;\n const isInBondingPeriod = remainingBondingTime > 0n;\n\n // Calculate current value of shares\n // entityShareToVana returns the VANA value of 1 share (scaled by 1e18)\n const currentValue = (position.shares * shareToVana) / 10n ** 18n;\n\n // Calculate pending interest (unvested rewards)\n // pendingInterest = currentValue - costBasis (if positive)\n const unvestedRewards =\n currentValue > position.costBasis\n ? currentValue - position.costBasis\n : 0n;\n\n return {\n shares: position.shares,\n costBasis: position.costBasis,\n currentValue,\n rewardEligibilityTimestamp: eligibilityTimestamp,\n remainingBondingTime,\n isInBondingPeriod,\n vestedRewards: position.vestedRewards,\n unvestedRewards,\n realizedRewards: position.realizedRewards,\n earnedRewards,\n };\n }\n\n /**\n * Stakes VANA to an entity in the VanaPool protocol.\n *\n * @remarks\n * This method stakes native VANA tokens to a specified entity. The staker will receive\n * shares in proportion to their stake amount. A bonding period applies during which\n * rewards cannot be fully claimed without penalty.\n *\n * Requires a wallet client to be configured in the Vana constructor.\n *\n * @param params - The staking parameters\n * @param params.entityId - The ID of the entity to stake to\n * @param params.amount - The amount of VANA to stake (in wei, or as a string like \"1.5\" for 1.5 VANA)\n * @param params.recipient - Optional recipient address for the shares (defaults to the sender)\n * @param params.minShares - Optional minimum shares to receive (slippage protection, defaults to 0)\n * @returns The transaction hash\n * @throws {BlockchainError} When wallet client is not configured\n *\n * @example\n * ```typescript\n * // Stake 100 VANA to entity 1\n * const txHash = await vana.staking.stake({\n * entityId: 1n,\n * amount: \"100\", // 100 VANA\n * });\n * console.log(`Staked! Transaction: ${txHash}`);\n *\n * // Stake with slippage protection\n * const txHash2 = await vana.staking.stake({\n * entityId: 1n,\n * amount: parseEther(\"50\"), // 50 VANA in wei\n * minShares: parseEther(\"49\"), // Expect at least 49 shares\n * });\n * ```\n */\n async stake(\n params: {\n entityId: bigint;\n amount: bigint | string;\n recipient?: Address;\n minShares?: bigint;\n },\n options?: TransactionOptions,\n ): Promise<Hash> {\n this.assertWallet();\n\n const chainId = this.getChainId();\n const stakingAddress = getContractAddress(chainId, \"VanaPoolStaking\");\n const stakingAbi = getAbi(\"VanaPoolStaking\");\n\n // Convert amount to bigint if it's a string (e.g., \"1.5\" -> 1.5 VANA in wei)\n const amountWei =\n typeof params.amount === \"string\"\n ? parseEther(params.amount)\n : params.amount;\n\n // Get account with fallback to userAddress\n const account =\n this.context.walletClient.account ?? this.context.userAddress;\n const accountAddress =\n typeof account === \"string\" ? account : account.address;\n\n // Default recipient to the sender's address\n const recipient = params.recipient ?? accountAddress;\n\n // Default minShares to 0 (no slippage protection)\n const minShares = params.minShares ?? 0n;\n\n const txHash = await this.context.walletClient.writeContract({\n address: stakingAddress,\n abi: stakingAbi,\n functionName: \"stake\",\n args: [params.entityId, recipient, minShares],\n value: amountWei,\n account,\n chain: this.context.walletClient.chain,\n ...this.spreadTransactionOptions(options),\n });\n\n return txHash;\n }\n\n /**\n * Gets the maximum amount of VANA that can be unstaked in a single transaction.\n *\n * @remarks\n * This calls the contract's getMaxUnstakeAmount which returns the minimum of:\n * 1. The withdrawable VANA (costBasis if in bonding period, shareValue if eligible)\n * 2. The entity's activeRewardPool (what the entity has available)\n * 3. The treasury balance (what can be paid out)\n *\n * The limiting factor indicates what's constraining the unstake:\n * - 0 = user shares/costBasis\n * - 1 = activeRewardPool\n * - 2 = treasury\n *\n * @param staker - The address of the staker\n * @param entityId - The ID of the entity\n * @returns Object containing maxVana, maxShares, limitingFactor, and isInBondingPeriod\n *\n * @example\n * ```typescript\n * const result = await vana.staking.getMaxUnstakeAmount('0x742d35...', 1n);\n * console.log(`Max unstake: ${Number(result.maxVana) / 1e18} VANA`);\n * console.log(`Max shares: ${result.maxShares}`);\n * console.log(`In bonding period: ${result.isInBondingPeriod}`);\n * ```\n */\n async getMaxUnstakeAmount(\n staker: Address,\n entityId: bigint,\n ): Promise<{\n maxVana: bigint;\n maxShares: bigint;\n limitingFactor: number;\n isInBondingPeriod: boolean;\n }> {\n const stakingContract = this.getStakingContract();\n\n const result = await stakingContract.read.getMaxUnstakeAmount([\n staker,\n entityId,\n ]);\n\n return {\n maxVana: result[0],\n maxShares: result[1],\n limitingFactor: Number(result[2]),\n isInBondingPeriod: result[3],\n };\n }\n\n /**\n * Computes the new bonding period end timestamp after adding stake.\n *\n * @remarks\n * When a staker adds more stake to an existing position, the reward eligibility timestamp\n * is recalculated as a weighted average of the existing and new positions. This function\n * allows you to preview what the new eligibility timestamp would be without executing\n * the stake transaction.\n *\n * The formula used (matching the contract):\n * ```\n * newEligibility = (existingShares * existingEligibility + newShares * newEligibility) / totalShares\n * ```\n *\n * Where `newEligibility` for the incoming stake is `currentTimestamp + bondingPeriod`.\n *\n * @param params - The parameters for computing the new bonding period\n * @param params.staker - The address of the staker\n * @param params.entityId - The ID of the entity\n * @param params.stakeAmount - The amount of VANA to stake (in wei)\n * @returns Object containing the new eligibility timestamp and related info\n *\n * @example\n * ```typescript\n * // Preview bonding period after staking 100 VANA\n * const preview = await vana.staking.computeNewBondingPeriod({\n * staker: '0x742d35...',\n * entityId: 1n,\n * stakeAmount: parseEther(\"100\"),\n * });\n * console.log(`New eligibility: ${new Date(Number(preview.newEligibilityTimestamp) * 1000)}`);\n * console.log(`Remaining bonding time: ${Number(preview.newRemainingBondingTime) / 86400} days`);\n * ```\n */\n async computeNewBondingPeriod(params: {\n staker: Address;\n entityId: bigint;\n stakeAmount: bigint;\n }): Promise<{\n /** The new reward eligibility timestamp after staking */\n newEligibilityTimestamp: bigint;\n /** Remaining bonding time in seconds after staking */\n newRemainingBondingTime: bigint;\n /** Current eligibility timestamp (before staking) */\n currentEligibilityTimestamp: bigint;\n /** Current remaining bonding time (before staking) */\n currentRemainingBondingTime: bigint;\n /** Current shares held by staker */\n currentShares: bigint;\n /** Estimated new shares to be received */\n estimatedNewShares: bigint;\n /** Total shares after staking */\n totalSharesAfter: bigint;\n /** The bonding period duration in seconds */\n bondingPeriodDuration: bigint;\n /** Current block timestamp used for calculation */\n currentTimestamp: bigint;\n }> {\n const chainId = this.getChainId();\n const stakingAddress = getContractAddress(chainId, \"VanaPoolStaking\");\n const entityAddress = getContractAddress(chainId, \"VanaPoolEntity\");\n const stakingAbi = getAbi(\"VanaPoolStaking\");\n const entityAbi = getAbi(\"VanaPoolEntity\");\n\n // Get latest block first to ensure all reads are from the same block\n const block = await this.context.publicClient.getBlock();\n const blockNumber = block.number;\n const currentTimestamp = block.timestamp;\n\n // Batch all contract reads into a single multicall RPC request at the same block\n const multicallResults = await this.context.publicClient.multicall({\n contracts: [\n {\n address: stakingAddress,\n abi: stakingAbi,\n functionName: \"stakerEntities\",\n args: [params.staker, params.entityId],\n },\n {\n address: stakingAddress,\n abi: stakingAbi,\n functionName: \"bondingPeriod\",\n args: [],\n },\n {\n address: entityAddress,\n abi: entityAbi,\n functionName: \"vanaToEntityShare\",\n args: [params.entityId],\n },\n ],\n blockNumber,\n });\n\n const [positionResult, bondingPeriodResult, vanaToShareResult] =\n multicallResults;\n\n if (\n positionResult.status === \"failure\" ||\n bondingPeriodResult.status === \"failure\" ||\n vanaToShareResult.status === \"failure\"\n ) {\n throw new BlockchainError(\n \"Failed to compute new bonding period: one or more contract calls failed\",\n );\n }\n\n const position = positionResult.result as {\n shares: bigint;\n costBasis: bigint;\n rewardEligibilityTimestamp: bigint;\n realizedRewards: bigint;\n vestedRewards: bigint;\n };\n const bondingPeriodDuration = bondingPeriodResult.result as bigint;\n const vanaToShare = vanaToShareResult.result as bigint;\n\n const currentShares = position.shares;\n const currentEligibilityTimestamp = position.rewardEligibilityTimestamp;\n\n // Calculate current remaining bonding time\n const currentRemainingBondingTime =\n currentEligibilityTimestamp > currentTimestamp\n ? currentEligibilityTimestamp - currentTimestamp\n : 0n;\n\n // Estimate new shares: newShares = (stakeAmount * vanaToShare) / 1e18\n const estimatedNewShares = (params.stakeAmount * vanaToShare) / 10n ** 18n;\n\n // Calculate new eligibility timestamp using weighted average formula\n // newEligibility = (existingShares * existingEligibility + newShares * (currentTime + bondingPeriod)) / totalShares\n const totalSharesAfter = currentShares + estimatedNewShares;\n const newStakeEligibility = currentTimestamp + bondingPeriodDuration;\n\n let newEligibilityTimestamp: bigint;\n if (currentShares === 0n) {\n // First stake: eligibility is simply current time + bonding period\n newEligibilityTimestamp = newStakeEligibility;\n } else {\n // Weighted average of existing and new positions\n newEligibilityTimestamp =\n (currentShares * currentEligibilityTimestamp +\n estimatedNewShares * newStakeEligibility) /\n totalSharesAfter;\n }\n\n // Calculate new remaining bonding time\n const newRemainingBondingTime =\n newEligibilityTimestamp > currentTimestamp\n ? newEligibilityTimestamp - currentTimestamp\n : 0n;\n\n return {\n newEligibilityTimestamp,\n newRemainingBondingTime,\n currentEligibilityTimestamp,\n currentRemainingBondingTime,\n currentShares,\n estimatedNewShares,\n totalSharesAfter,\n bondingPeriodDuration,\n currentTimestamp,\n };\n }\n\n /**\n * Unstakes VANA from an entity in the VanaPool protocol.\n *\n * @remarks\n * This method unstakes native VANA tokens from a specified entity. The amount\n * that can be unstaked depends on whether the staker is in the bonding period:\n *\n * - **During bonding period**: Only cost basis can be withdrawn; rewards are forfeited\n * - **After bonding period**: Full current value (cost basis + rewards) can be withdrawn\n *\n * Use `getMaxUnstakeAmount` to determine the maximum amount that can be unstaked.\n *\n * Requires a wallet client to be configured in the Vana constructor.\n *\n * @param params - The unstaking parameters\n * @param params.entityId - The ID of the entity to unstake from\n * @param params.amount - The amount of VANA to unstake (in wei, or as a string like \"1.5\" for 1.5 VANA)\n * @param params.maxShares - Maximum shares to burn for slippage protection (defaults to 0, no protection)\n * @returns The transaction hash\n * @throws {BlockchainError} When wallet client is not configured\n *\n * @example\n * ```typescript\n * // Get max unstake amount first\n * const maxUnstake = await vana.staking.getMaxUnstakeAmount(address, 1n);\n *\n * // Unstake the maximum amount with slippage protection\n * const txHash = await vana.staking.unstake({\n * entityId: 1n,\n * amount: maxUnstake.maxVana,\n * maxShares: maxUnstake.maxShares,\n * });\n * console.log(`Unstaked! Transaction: ${txHash}`);\n * ```\n */\n async unstake(\n params: {\n entityId: bigint;\n amount: bigint | string;\n maxShares?: bigint;\n },\n options?: TransactionOptions,\n ): Promise<Hash> {\n this.assertWallet();\n\n const chainId = this.getChainId();\n const stakingAddress = getContractAddress(chainId, \"VanaPoolStaking\");\n const stakingAbi = getAbi(\"VanaPoolStaking\");\n\n // Convert amount to bigint if it's a string (e.g., \"1.5\" -> 1.5 VANA in wei)\n const amountWei =\n typeof params.amount === \"string\"\n ? parseEther(params.amount)\n : params.amount;\n\n // Default maxShares to 0 (no slippage protection)\n const maxShares = params.maxShares ?? 0n;\n\n // Get account with fallback to userAddress\n const account =\n this.context.walletClient.account ?? this.context.userAddress;\n\n const txHash = await this.context.walletClient.writeContract({\n address: stakingAddress,\n abi: stakingAbi,\n functionName: \"unstakeVana\",\n args: [params.entityId, amountWei, maxShares],\n account,\n chain: this.context.walletClient.chain,\n ...this.spreadTransactionOptions(options),\n });\n\n return txHash;\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,4 +0,0 @@
1
- /**
2
- * @file Tests for the internal PollingManager class
3
- */
4
- export {};
@@ -1,378 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var apiClient_exports = {};
20
- __export(apiClient_exports, {
21
- ApiClient: () => ApiClient
22
- });
23
- module.exports = __toCommonJS(apiClient_exports);
24
- var import_generics = require("./generics");
25
- class ApiClient {
26
- config;
27
- middleware;
28
- rateLimiter;
29
- circuitBreaker;
30
- constructor(config = {}) {
31
- this.config = {
32
- baseUrl: config.baseUrl ?? "",
33
- headers: config.headers ?? {},
34
- timeout: config.timeout ?? 3e4,
35
- retry: config.retry ?? {
36
- maxAttempts: 3,
37
- baseDelay: 1e3,
38
- backoffMultiplier: 2,
39
- shouldRetry: (error) => error.message.includes("network")
40
- },
41
- rateLimit: config.rateLimit ?? {
42
- requestsPerWindow: 100,
43
- windowMs: 6e4
44
- },
45
- circuitBreaker: config.circuitBreaker ?? {
46
- failureThreshold: 5,
47
- recoveryTimeout: 6e4,
48
- halfOpenMaxAttempts: 3
49
- }
50
- };
51
- this.middleware = new import_generics.MiddlewarePipeline();
52
- this.rateLimiter = new import_generics.RateLimiter(this.config.rateLimit);
53
- this.circuitBreaker = new import_generics.CircuitBreaker(this.config.circuitBreaker);
54
- }
55
- /**
56
- * Adds middleware to the request processing pipeline.
57
- *
58
- * @remarks
59
- * Middleware functions execute in order of registration and can transform
60
- * requests, responses, or implement cross-cutting concerns like logging,
61
- * authentication, or caching.
62
- *
63
- * @param middleware - The middleware function to add to the pipeline
64
- *
65
- * @example
66
- * ```typescript
67
- * // Add authentication middleware
68
- * client.use(async (req, next) => {
69
- * req.options.headers = {
70
- * ...req.options.headers,
71
- * 'Authorization': `Bearer ${getToken()}`
72
- * };
73
- * return next(req);
74
- * });
75
- *
76
- * // Add response caching
77
- * client.use(async (req, next) => {
78
- * const cached = cache.get(req.params.url);
79
- * if (cached) return cached;
80
- *
81
- * const res = await next(req);
82
- * if (res.status === 'success') {
83
- * cache.set(req.params.url, res);
84
- * }
85
- * return res;
86
- * });
87
- * ```
88
- */
89
- use(middleware) {
90
- this.middleware.use(middleware);
91
- }
92
- /**
93
- * Executes an HTTP request with full resilience features.
94
- *
95
- * @remarks
96
- * This is the core request method that applies all configured resilience
97
- * patterns including retry, rate limiting, and circuit breaking. It processes
98
- * the request through the middleware pipeline before execution.
99
- *
100
- * @param url - The URL to make the request to.
101
- * Can be relative (uses baseUrl) or absolute.
102
- * @param options - Request options including method, headers, body, etc.
103
- * @returns Promise resolving to the response data
104
- *
105
- * @throws {Error} When request fails after all retry attempts.
106
- * Check error message for details.
107
- * @throws {Error} When circuit breaker is open.
108
- * Wait for recovery timeout before retrying.
109
- *
110
- * @example
111
- * ```typescript
112
- * const response = await client.request('/api/data', {
113
- * method: 'POST',
114
- * headers: { 'Content-Type': 'application/json' },
115
- * params: { name: 'John', age: 30 },
116
- * timeout: 5000
117
- * });
118
- * ```
119
- */
120
- async request(url, options = {}) {
121
- const fullUrl = this.buildUrl(url);
122
- const requestOptions = this.buildRequestOptions(options);
123
- const request = {
124
- params: {
125
- url: fullUrl,
126
- options: requestOptions
127
- },
128
- options: requestOptions
129
- };
130
- if (!options.skipRateLimit && this.rateLimiter) {
131
- await this.rateLimiter.waitForSlot();
132
- }
133
- if (this.circuitBreaker) {
134
- return this.circuitBreaker.execute(
135
- () => this.executeRequest(request)
136
- );
137
- }
138
- return this.executeRequest(request);
139
- }
140
- /**
141
- * Make a GET request
142
- *
143
- * @param url - The URL to make the GET request to
144
- * @param options - Request options (excluding method)
145
- * @returns Promise resolving to the response data
146
- */
147
- async get(url, options = {}) {
148
- return this.request(url, { ...options, method: "GET" });
149
- }
150
- /**
151
- * Make a POST request
152
- *
153
- * @param url - The URL to make the POST request to
154
- * @param data - The data to send in the request body
155
- * @param options - Request options (excluding method)
156
- * @returns Promise resolving to the response data
157
- */
158
- async post(url, data, options = {}) {
159
- return this.request(url, {
160
- ...options,
161
- method: "POST",
162
- headers: {
163
- "Content-Type": "application/json",
164
- ...options.headers
165
- },
166
- params: data
167
- });
168
- }
169
- /**
170
- * Make a PUT request
171
- *
172
- * @param url - The URL to make the PUT request to
173
- * @param data - The data to send in the request body
174
- * @param options - Request options (excluding method)
175
- * @returns Promise resolving to the response data
176
- */
177
- async put(url, data, options = {}) {
178
- return this.request(url, {
179
- ...options,
180
- method: "PUT",
181
- headers: {
182
- "Content-Type": "application/json",
183
- ...options.headers
184
- },
185
- params: data
186
- });
187
- }
188
- /**
189
- * Make a DELETE request
190
- *
191
- * @param url - The URL to make the DELETE request to
192
- * @param options - Request options (excluding method)
193
- * @returns Promise resolving to the response data
194
- */
195
- async delete(url, options = {}) {
196
- return this.request(url, { ...options, method: "DELETE" });
197
- }
198
- /**
199
- * Make a PATCH request
200
- *
201
- * @param url - The URL to make the PATCH request to
202
- * @param data - The data to send in the request body
203
- * @param options - Request options (excluding method)
204
- * @returns Promise resolving to the response data
205
- */
206
- async patch(url, data, options = {}) {
207
- return this.request(url, {
208
- ...options,
209
- method: "PATCH",
210
- headers: {
211
- "Content-Type": "application/json",
212
- ...options.headers
213
- },
214
- params: data
215
- });
216
- }
217
- /**
218
- * Execute the actual HTTP request with middleware and retry
219
- *
220
- * @param request - The generic request object containing URL and options
221
- * @returns Promise resolving to the generic response with data
222
- */
223
- async executeRequest(request) {
224
- const executeWithRetry = async () => {
225
- try {
226
- const processedRequest = await this.middleware.processRequest(request);
227
- const response = await this.makeHttpRequest(
228
- processedRequest.params.url,
229
- processedRequest.params.options
230
- );
231
- const processedResponse = await this.middleware.processResponse(response);
232
- return processedResponse;
233
- } catch (error) {
234
- const handledResponse = await this.middleware.handleError(error, request);
235
- if (handledResponse) {
236
- return handledResponse;
237
- }
238
- throw error;
239
- }
240
- };
241
- if (!request.params.options.skipRetry) {
242
- return import_generics.RetryUtility.withRetry(executeWithRetry, this.config.retry);
243
- }
244
- return executeWithRetry();
245
- }
246
- /**
247
- * Make the actual HTTP request using fetch API
248
- *
249
- * @param url - The URL to make the request to
250
- * @param options - The request options including method, headers, body, etc.
251
- * @returns Promise resolving to the generic response with data
252
- */
253
- async makeHttpRequest(url, options) {
254
- const controller = new AbortController();
255
- const timeoutId = setTimeout(() => {
256
- controller.abort();
257
- }, options.timeout ?? this.config.timeout);
258
- try {
259
- const response = await fetch(url, {
260
- method: options.method ?? "GET",
261
- headers: {
262
- ...this.config.headers,
263
- ...options.headers
264
- },
265
- signal: controller.signal,
266
- // Add body for POST/PUT/PATCH requests
267
- ...options.method && ["POST", "PUT", "PATCH"].includes(options.method) && {
268
- body: JSON.stringify(options.params)
269
- }
270
- });
271
- clearTimeout(timeoutId);
272
- const responseData = await response.json();
273
- const data = responseData;
274
- if (!response.ok) {
275
- return {
276
- data: null,
277
- success: false,
278
- error: {
279
- code: response.status.toString(),
280
- message: data.message ?? response.statusText,
281
- details: data
282
- }
283
- };
284
- }
285
- return {
286
- data: responseData,
287
- success: true,
288
- meta: {
289
- status: response.status,
290
- statusText: response.statusText,
291
- headers: Object.fromEntries(response.headers.entries())
292
- }
293
- };
294
- } catch (error) {
295
- clearTimeout(timeoutId);
296
- if (error instanceof Error && error.name === "AbortError") {
297
- return {
298
- data: null,
299
- success: false,
300
- error: {
301
- code: "TIMEOUT",
302
- message: "Request timeout",
303
- details: error
304
- }
305
- };
306
- }
307
- return {
308
- data: null,
309
- success: false,
310
- error: {
311
- code: "NETWORK_ERROR",
312
- message: error instanceof Error ? error.message : "Unknown error",
313
- details: error
314
- }
315
- };
316
- }
317
- }
318
- /**
319
- * Build the full URL
320
- *
321
- * @param url - The URL or path to build the full URL from
322
- * @returns The complete URL string
323
- */
324
- buildUrl(url) {
325
- if (url.startsWith("http")) {
326
- return url;
327
- }
328
- const baseUrl = this.config.baseUrl.endsWith("/") ? this.config.baseUrl.slice(0, -1) : this.config.baseUrl;
329
- const path = url.startsWith("/") ? url : `/${url}`;
330
- return `${baseUrl}${path}`;
331
- }
332
- /**
333
- * Build request options with defaults
334
- *
335
- * @param options - The request options to merge with defaults
336
- * @returns The merged request options with defaults applied
337
- */
338
- buildRequestOptions(options) {
339
- return {
340
- method: "GET",
341
- headers: {},
342
- timeout: this.config.timeout,
343
- ...options
344
- };
345
- }
346
- /**
347
- * Get client statistics
348
- *
349
- * @returns Object containing client statistics and performance metrics
350
- */
351
- getStats() {
352
- return {
353
- rateLimiter: this.rateLimiter ? {
354
- remaining: this.rateLimiter.getRemainingRequests(),
355
- resetTime: this.rateLimiter.getResetTime()
356
- } : null,
357
- circuitBreaker: this.circuitBreaker ? {
358
- state: this.circuitBreaker.getState(),
359
- failures: this.circuitBreaker.getFailures()
360
- } : null,
361
- middleware: {
362
- count: this.middleware.getMiddleware().length
363
- }
364
- };
365
- }
366
- /**
367
- * Reset client state
368
- */
369
- reset() {
370
- this.circuitBreaker?.reset();
371
- this.middleware.clear();
372
- }
373
- }
374
- // Annotate the CommonJS export names for ESM import in node:
375
- 0 && (module.exports = {
376
- ApiClient
377
- });
378
- //# sourceMappingURL=apiClient.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/core/apiClient.ts"],"sourcesContent":["/**\n * Provides a generic HTTP client with enterprise-grade resilience features.\n *\n * @remarks\n * This module implements a robust API client with automatic retry, rate limiting,\n * circuit breaker pattern, and middleware support. It's used internally by the SDK\n * for all HTTP operations and can be extended for custom API integrations.\n *\n * **Architecture:**\n * - Middleware pipeline for request/response transformation\n * - Exponential backoff retry with configurable policies\n * - Token bucket rate limiting to prevent API throttling\n * - Circuit breaker to fail fast when services are down\n *\n * @category Networking\n * @module apiClient\n */\n\nimport type {\n GenericRequest,\n GenericResponse,\n RetryConfig,\n RateLimiterConfig,\n Middleware,\n} from \"../types/generics\";\nimport {\n RetryUtility,\n RateLimiter,\n MiddlewarePipeline,\n CircuitBreaker,\n} from \"./generics\";\n\n/**\n * Configures the API client's behavior and resilience features.\n *\n * @remarks\n * Provides fine-grained control over HTTP client behavior including\n * retry strategies, rate limiting, and circuit breaker thresholds.\n *\n * @category Networking\n */\nexport interface ApiClientConfig {\n /** Base URL for all requests */\n baseUrl?: string;\n /** Default headers */\n headers?: Record<string, string>;\n /** Request timeout in milliseconds */\n timeout?: number;\n /** Retry configuration */\n retry?: RetryConfig;\n /** Rate limiting configuration */\n rateLimit?: RateLimiterConfig;\n /** Circuit breaker configuration */\n circuitBreaker?: {\n failureThreshold: number;\n recoveryTimeout: number;\n halfOpenMaxAttempts?: number;\n };\n}\n\n/**\n * Represents supported HTTP methods for API operations.\n *\n * @category Networking\n */\nexport type HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n\n/**\n * Configures individual HTTP request behavior.\n *\n * @remarks\n * Allows per-request overrides of client defaults including headers,\n * timeout, and resilience features. Use to customize specific requests\n * without affecting global configuration.\n *\n * @category Networking\n */\nexport interface RequestOptions {\n /** HTTP method */\n method?: HttpMethod;\n /** Request headers */\n headers?: Record<string, string>;\n /** Query parameters */\n params?: Record<string, unknown>;\n /** Request timeout */\n timeout?: number;\n /** Skip retry for this request */\n skipRetry?: boolean;\n /** Skip rate limiting for this request */\n skipRateLimit?: boolean;\n}\n\n/**\n * Provides resilient HTTP client functionality with enterprise features.\n *\n * @remarks\n * This client implements multiple resilience patterns to ensure reliable\n * API communication even under adverse conditions. It automatically handles\n * transient failures, rate limits, and service outages while providing\n * hooks for custom behavior through middleware.\n *\n * **Features:**\n * - Automatic retry with exponential backoff\n * - Rate limiting to prevent API throttling\n * - Circuit breaker for fast failure detection\n * - Middleware pipeline for request/response transformation\n * - Configurable timeouts and headers\n *\n * @example\n * ```typescript\n * // Create client with custom configuration\n * const client = new ApiClient({\n * baseUrl: 'https://api.example.com',\n * headers: { 'API-Key': 'secret' },\n * retry: {\n * maxAttempts: 5,\n * baseDelay: 2000\n * },\n * rateLimit: {\n * requestsPerWindow: 50,\n * windowMs: 60000\n * }\n * });\n *\n * // Add logging middleware\n * client.use(async (req, next) => {\n * console.log(`Request: ${req.params.url}`);\n * const res = await next(req);\n * console.log(`Response: ${res.status}`);\n * return res;\n * });\n *\n * // Make resilient API calls\n * const data = await client.get('/users');\n * ```\n *\n * @category Networking\n */\nexport class ApiClient {\n private readonly config: Required<ApiClientConfig>;\n private readonly middleware: MiddlewarePipeline;\n private readonly rateLimiter?: RateLimiter;\n private readonly circuitBreaker?: CircuitBreaker;\n\n constructor(config: ApiClientConfig = {}) {\n this.config = {\n baseUrl: config.baseUrl ?? \"\",\n headers: config.headers ?? {},\n timeout: config.timeout ?? 30000,\n retry: config.retry ?? {\n maxAttempts: 3,\n baseDelay: 1000,\n backoffMultiplier: 2,\n shouldRetry: (error) => error.message.includes(\"network\"),\n },\n rateLimit: config.rateLimit ?? {\n requestsPerWindow: 100,\n windowMs: 60000,\n },\n circuitBreaker: config.circuitBreaker ?? {\n failureThreshold: 5,\n recoveryTimeout: 60000,\n halfOpenMaxAttempts: 3,\n },\n };\n\n this.middleware = new MiddlewarePipeline();\n this.rateLimiter = new RateLimiter(this.config.rateLimit);\n this.circuitBreaker = new CircuitBreaker(this.config.circuitBreaker);\n }\n\n /**\n * Adds middleware to the request processing pipeline.\n *\n * @remarks\n * Middleware functions execute in order of registration and can transform\n * requests, responses, or implement cross-cutting concerns like logging,\n * authentication, or caching.\n *\n * @param middleware - The middleware function to add to the pipeline\n *\n * @example\n * ```typescript\n * // Add authentication middleware\n * client.use(async (req, next) => {\n * req.options.headers = {\n * ...req.options.headers,\n * 'Authorization': `Bearer ${getToken()}`\n * };\n * return next(req);\n * });\n *\n * // Add response caching\n * client.use(async (req, next) => {\n * const cached = cache.get(req.params.url);\n * if (cached) return cached;\n *\n * const res = await next(req);\n * if (res.status === 'success') {\n * cache.set(req.params.url, res);\n * }\n * return res;\n * });\n * ```\n */\n use(middleware: Middleware): void {\n this.middleware.use(middleware);\n }\n\n /**\n * Executes an HTTP request with full resilience features.\n *\n * @remarks\n * This is the core request method that applies all configured resilience\n * patterns including retry, rate limiting, and circuit breaking. It processes\n * the request through the middleware pipeline before execution.\n *\n * @param url - The URL to make the request to.\n * Can be relative (uses baseUrl) or absolute.\n * @param options - Request options including method, headers, body, etc.\n * @returns Promise resolving to the response data\n *\n * @throws {Error} When request fails after all retry attempts.\n * Check error message for details.\n * @throws {Error} When circuit breaker is open.\n * Wait for recovery timeout before retrying.\n *\n * @example\n * ```typescript\n * const response = await client.request('/api/data', {\n * method: 'POST',\n * headers: { 'Content-Type': 'application/json' },\n * params: { name: 'John', age: 30 },\n * timeout: 5000\n * });\n * ```\n */\n async request<TData = unknown>(\n url: string,\n options: RequestOptions = {},\n ): Promise<GenericResponse<TData>> {\n const fullUrl = this.buildUrl(url);\n const requestOptions = this.buildRequestOptions(options);\n\n const request: GenericRequest<{\n url: string;\n options: RequestOptions;\n }> = {\n params: {\n url: fullUrl,\n options: requestOptions,\n },\n options: requestOptions,\n };\n\n // Apply rate limiting\n if (!options.skipRateLimit && this.rateLimiter) {\n await this.rateLimiter.waitForSlot();\n }\n\n // Execute with circuit breaker\n if (this.circuitBreaker) {\n return this.circuitBreaker.execute(() =>\n this.executeRequest<TData>(request),\n );\n }\n\n return this.executeRequest<TData>(request);\n }\n\n /**\n * Make a GET request\n *\n * @param url - The URL to make the GET request to\n * @param options - Request options (excluding method)\n * @returns Promise resolving to the response data\n */\n async get<TData = unknown>(\n url: string,\n options: Omit<RequestOptions, \"method\"> = {},\n ): Promise<GenericResponse<TData>> {\n return this.request<TData>(url, { ...options, method: \"GET\" });\n }\n\n /**\n * Make a POST request\n *\n * @param url - The URL to make the POST request to\n * @param data - The data to send in the request body\n * @param options - Request options (excluding method)\n * @returns Promise resolving to the response data\n */\n async post<TData = unknown>(\n url: string,\n data?: unknown,\n options: Omit<RequestOptions, \"method\"> = {},\n ): Promise<GenericResponse<TData>> {\n return this.request<TData>(url, {\n ...options,\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n params: data as Record<string, unknown>,\n });\n }\n\n /**\n * Make a PUT request\n *\n * @param url - The URL to make the PUT request to\n * @param data - The data to send in the request body\n * @param options - Request options (excluding method)\n * @returns Promise resolving to the response data\n */\n async put<TData = unknown>(\n url: string,\n data?: unknown,\n options: Omit<RequestOptions, \"method\"> = {},\n ): Promise<GenericResponse<TData>> {\n return this.request<TData>(url, {\n ...options,\n method: \"PUT\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n params: data as Record<string, unknown>,\n });\n }\n\n /**\n * Make a DELETE request\n *\n * @param url - The URL to make the DELETE request to\n * @param options - Request options (excluding method)\n * @returns Promise resolving to the response data\n */\n async delete<TData = unknown>(\n url: string,\n options: Omit<RequestOptions, \"method\"> = {},\n ): Promise<GenericResponse<TData>> {\n return this.request<TData>(url, { ...options, method: \"DELETE\" });\n }\n\n /**\n * Make a PATCH request\n *\n * @param url - The URL to make the PATCH request to\n * @param data - The data to send in the request body\n * @param options - Request options (excluding method)\n * @returns Promise resolving to the response data\n */\n async patch<TData = unknown>(\n url: string,\n data?: unknown,\n options: Omit<RequestOptions, \"method\"> = {},\n ): Promise<GenericResponse<TData>> {\n return this.request<TData>(url, {\n ...options,\n method: \"PATCH\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...options.headers,\n },\n params: data as Record<string, unknown>,\n });\n }\n\n /**\n * Execute the actual HTTP request with middleware and retry\n *\n * @param request - The generic request object containing URL and options\n * @returns Promise resolving to the generic response with data\n */\n private async executeRequest<TData>(\n request: GenericRequest<{ url: string; options: RequestOptions }>,\n ): Promise<GenericResponse<TData>> {\n const executeWithRetry = async (): Promise<GenericResponse<TData>> => {\n try {\n // Process request through middleware\n const processedRequest = await this.middleware.processRequest(request);\n\n // Make the actual HTTP request\n const response = await this.makeHttpRequest<TData>(\n (\n processedRequest as GenericRequest<{\n url: string;\n options: RequestOptions;\n }>\n ).params.url,\n (\n processedRequest as GenericRequest<{\n url: string;\n options: RequestOptions;\n }>\n ).params.options,\n );\n\n // Process response through middleware\n const processedResponse =\n await this.middleware.processResponse(response);\n\n return processedResponse;\n } catch (error) {\n // Try to handle error with middleware\n const handledResponse = await this.middleware.handleError<\n typeof request,\n GenericResponse<TData>\n >(error as Error, request);\n\n if (handledResponse) {\n return handledResponse;\n }\n\n throw error;\n }\n };\n\n // Apply retry logic if not skipped\n if (!request.params.options.skipRetry) {\n return RetryUtility.withRetry(executeWithRetry, this.config.retry);\n }\n\n return executeWithRetry();\n }\n\n /**\n * Make the actual HTTP request using fetch API\n *\n * @param url - The URL to make the request to\n * @param options - The request options including method, headers, body, etc.\n * @returns Promise resolving to the generic response with data\n */\n private async makeHttpRequest<TData>(\n url: string,\n options: RequestOptions,\n ): Promise<GenericResponse<TData>> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => {\n controller.abort();\n }, options.timeout ?? this.config.timeout);\n\n try {\n const response = await fetch(url, {\n method: options.method ?? \"GET\",\n headers: {\n ...this.config.headers,\n ...options.headers,\n },\n signal: controller.signal,\n // Add body for POST/PUT/PATCH requests\n ...(options.method &&\n [\"POST\", \"PUT\", \"PATCH\"].includes(options.method) && {\n body: JSON.stringify(options.params),\n }),\n });\n\n clearTimeout(timeoutId);\n\n const responseData: unknown = await response.json();\n const data = responseData as { message?: string; [key: string]: unknown };\n\n if (!response.ok) {\n return {\n data: null as unknown as TData,\n success: false,\n error: {\n code: response.status.toString(),\n message: data.message ?? response.statusText,\n details: data,\n },\n };\n }\n\n return {\n data: responseData as TData,\n success: true,\n meta: {\n status: response.status,\n statusText: response.statusText,\n headers: Object.fromEntries(response.headers.entries()),\n },\n };\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error && error.name === \"AbortError\") {\n return {\n data: null as unknown as TData,\n success: false,\n error: {\n code: \"TIMEOUT\",\n message: \"Request timeout\",\n details: error,\n },\n };\n }\n\n return {\n data: null as unknown as TData,\n success: false,\n error: {\n code: \"NETWORK_ERROR\",\n message: error instanceof Error ? error.message : \"Unknown error\",\n details: error,\n },\n };\n }\n }\n\n /**\n * Build the full URL\n *\n * @param url - The URL or path to build the full URL from\n * @returns The complete URL string\n */\n private buildUrl(url: string): string {\n if (url.startsWith(\"http\")) {\n return url;\n }\n\n const baseUrl = this.config.baseUrl.endsWith(\"/\")\n ? this.config.baseUrl.slice(0, -1)\n : this.config.baseUrl;\n const path = url.startsWith(\"/\") ? url : `/${url}`;\n\n return `${baseUrl}${path}`;\n }\n\n /**\n * Build request options with defaults\n *\n * @param options - The request options to merge with defaults\n * @returns The merged request options with defaults applied\n */\n private buildRequestOptions(options: RequestOptions): RequestOptions {\n return {\n method: \"GET\",\n headers: {},\n timeout: this.config.timeout,\n ...options,\n };\n }\n\n /**\n * Get client statistics\n *\n * @returns Object containing client statistics and performance metrics\n */\n getStats() {\n return {\n rateLimiter: this.rateLimiter\n ? {\n remaining: this.rateLimiter.getRemainingRequests(),\n resetTime: this.rateLimiter.getResetTime(),\n }\n : null,\n circuitBreaker: this.circuitBreaker\n ? {\n state: this.circuitBreaker.getState(),\n failures: this.circuitBreaker.getFailures(),\n }\n : null,\n middleware: {\n count: this.middleware.getMiddleware().length,\n },\n };\n }\n\n /**\n * Reset client state\n */\n reset(): void {\n this.circuitBreaker?.reset();\n this.middleware.clear();\n }\n}\n"],"mappings":"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","names":[]}