@opendatalabs/vana-sdk 2.3.0 → 3.0.1-canary.b068ac6

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 (631) 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/ecies/node.cjs +6 -6
  48. package/dist/crypto/ecies/node.cjs.map +1 -1
  49. package/dist/crypto/ecies/node.js +1 -1
  50. package/dist/crypto/ecies/node.js.map +1 -1
  51. package/dist/crypto/envelope/openpgp.cjs +59 -0
  52. package/dist/crypto/envelope/openpgp.cjs.map +1 -0
  53. package/dist/crypto/envelope/openpgp.d.ts +28 -0
  54. package/dist/crypto/envelope/openpgp.js +24 -0
  55. package/dist/crypto/envelope/openpgp.js.map +1 -0
  56. package/dist/crypto/keys/derive.cjs +65 -0
  57. package/dist/crypto/keys/derive.cjs.map +1 -0
  58. package/dist/crypto/keys/derive.d.ts +45 -0
  59. package/dist/crypto/keys/derive.js +38 -0
  60. package/dist/crypto/keys/derive.js.map +1 -0
  61. package/dist/errors.cjs +10 -0
  62. package/dist/errors.cjs.map +1 -1
  63. package/dist/errors.js +10 -0
  64. package/dist/errors.js.map +1 -1
  65. package/dist/generated/abi/index.cjs +2 -37
  66. package/dist/generated/abi/index.cjs.map +1 -1
  67. package/dist/generated/abi/index.d.ts +2683 -9296
  68. package/dist/generated/abi/index.js +2 -29
  69. package/dist/generated/abi/index.js.map +1 -1
  70. package/dist/generated/addresses.cjs +5 -107
  71. package/dist/generated/addresses.cjs.map +1 -1
  72. package/dist/generated/addresses.d.ts +5 -99
  73. package/dist/generated/addresses.js +5 -105
  74. package/dist/generated/addresses.js.map +1 -1
  75. package/dist/index.browser.d.ts +24 -140
  76. package/dist/index.browser.js +32258 -114
  77. package/dist/index.browser.js.map +7 -1
  78. package/dist/index.node.cjs +32980 -160
  79. package/dist/index.node.cjs.map +7 -1
  80. package/dist/index.node.d.ts +23 -210
  81. package/dist/index.node.js +32884 -133
  82. package/dist/index.node.js.map +7 -1
  83. package/dist/platform/node.cjs +2 -2
  84. package/dist/platform/node.cjs.map +1 -1
  85. package/dist/platform/node.js +1 -1
  86. package/dist/platform/node.js.map +1 -1
  87. package/dist/protocol/data-file.cjs +56 -0
  88. package/dist/protocol/data-file.cjs.map +1 -0
  89. package/dist/protocol/data-file.d.ts +20 -0
  90. package/dist/protocol/data-file.js +30 -0
  91. package/dist/protocol/data-file.js.map +1 -0
  92. package/dist/protocol/eip712.cjs +123 -0
  93. package/dist/protocol/eip712.cjs.map +1 -0
  94. package/dist/protocol/eip712.d.ts +117 -0
  95. package/dist/protocol/eip712.js +90 -0
  96. package/dist/protocol/eip712.js.map +1 -0
  97. package/dist/protocol/gateway.cjs +226 -0
  98. package/dist/protocol/gateway.cjs.map +1 -0
  99. package/dist/protocol/gateway.d.ts +120 -0
  100. package/dist/protocol/gateway.js +202 -0
  101. package/dist/protocol/gateway.js.map +1 -0
  102. package/dist/protocol/grants.cjs +146 -0
  103. package/dist/protocol/grants.cjs.map +1 -0
  104. package/dist/protocol/grants.d.ts +31 -0
  105. package/dist/protocol/grants.js +123 -0
  106. package/dist/protocol/grants.js.map +1 -0
  107. package/dist/protocol/scopes.cjs +78 -0
  108. package/dist/protocol/scopes.cjs.map +1 -0
  109. package/dist/protocol/scopes.d.ts +13 -0
  110. package/dist/protocol/scopes.js +50 -0
  111. package/dist/protocol/scopes.js.map +1 -0
  112. package/dist/{types/atomicStore.cjs → storage/default.cjs} +9 -8
  113. package/dist/storage/default.cjs.map +1 -0
  114. package/dist/storage/default.d.ts +4 -0
  115. package/dist/storage/default.js +8 -0
  116. package/dist/storage/default.js.map +1 -0
  117. package/dist/storage/index.cjs +11 -2
  118. package/dist/storage/index.cjs.map +1 -1
  119. package/dist/storage/index.d.ts +9 -0
  120. package/dist/storage/index.js +7 -1
  121. package/dist/storage/index.js.map +1 -1
  122. package/dist/storage/providers/callback-storage.cjs +1 -0
  123. package/dist/storage/providers/callback-storage.cjs.map +1 -1
  124. package/dist/storage/providers/callback-storage.js +1 -0
  125. package/dist/storage/providers/callback-storage.js.map +1 -1
  126. package/dist/storage/providers/dropbox.cjs +1 -0
  127. package/dist/storage/providers/dropbox.cjs.map +1 -1
  128. package/dist/storage/providers/dropbox.js +1 -0
  129. package/dist/storage/providers/dropbox.js.map +1 -1
  130. package/dist/storage/providers/google-drive.cjs +1 -0
  131. package/dist/storage/providers/google-drive.cjs.map +1 -1
  132. package/dist/storage/providers/google-drive.js +1 -0
  133. package/dist/storage/providers/google-drive.js.map +1 -1
  134. package/dist/storage/providers/ipfs.cjs +1 -0
  135. package/dist/storage/providers/ipfs.cjs.map +1 -1
  136. package/dist/storage/providers/ipfs.js +1 -0
  137. package/dist/storage/providers/ipfs.js.map +1 -1
  138. package/dist/storage/providers/pinata.cjs +1 -0
  139. package/dist/storage/providers/pinata.cjs.map +1 -1
  140. package/dist/storage/providers/pinata.js +1 -0
  141. package/dist/storage/providers/pinata.js.map +1 -1
  142. package/dist/storage/providers/r2.cjs +376 -0
  143. package/dist/storage/providers/r2.cjs.map +1 -0
  144. package/dist/storage/providers/r2.d.ts +91 -0
  145. package/dist/storage/providers/r2.js +354 -0
  146. package/dist/storage/providers/r2.js.map +1 -0
  147. package/dist/storage/providers/vana-storage.cjs +251 -0
  148. package/dist/storage/providers/vana-storage.cjs.map +1 -0
  149. package/dist/storage/providers/vana-storage.d.ts +100 -0
  150. package/dist/storage/providers/vana-storage.js +231 -0
  151. package/dist/storage/providers/vana-storage.js.map +1 -0
  152. package/dist/types/config.cjs +0 -34
  153. package/dist/types/config.cjs.map +1 -1
  154. package/dist/types/config.d.ts +1 -607
  155. package/dist/types/config.js +0 -22
  156. package/dist/types/config.js.map +1 -1
  157. package/dist/types/contracts.cjs.map +1 -1
  158. package/dist/types/contracts.d.ts +1 -1
  159. package/dist/types/index.cjs +2 -33
  160. package/dist/types/index.cjs.map +1 -1
  161. package/dist/types/index.d.ts +2 -33
  162. package/dist/types/index.js +1 -35
  163. package/dist/types/index.js.map +1 -1
  164. package/dist/types/ps-errors.cjs +91 -0
  165. package/dist/types/ps-errors.cjs.map +1 -0
  166. package/dist/types/ps-errors.d.ts +26 -0
  167. package/dist/types/ps-errors.js +66 -0
  168. package/dist/types/ps-errors.js.map +1 -0
  169. package/dist/types.cjs.map +1 -1
  170. package/dist/types.d.ts +0 -29
  171. package/dist/types.js.map +1 -1
  172. package/package.json +8 -25
  173. package/dist/client/enhancedResponse.cjs +0 -164
  174. package/dist/client/enhancedResponse.cjs.map +0 -1
  175. package/dist/client/enhancedResponse.d.ts +0 -120
  176. package/dist/client/enhancedResponse.js +0 -138
  177. package/dist/client/enhancedResponse.js.map +0 -1
  178. package/dist/controllers/__tests__/data-consistency-integration.test.d.ts +0 -7
  179. package/dist/controllers/base.cjs +0 -116
  180. package/dist/controllers/base.cjs.map +0 -1
  181. package/dist/controllers/base.d.ts +0 -94
  182. package/dist/controllers/base.js +0 -92
  183. package/dist/controllers/base.js.map +0 -1
  184. package/dist/controllers/data.cjs +0 -2633
  185. package/dist/controllers/data.cjs.map +0 -1
  186. package/dist/controllers/data.d.ts +0 -1067
  187. package/dist/controllers/data.js +0 -2626
  188. package/dist/controllers/data.js.map +0 -1
  189. package/dist/controllers/operations.cjs +0 -430
  190. package/dist/controllers/operations.cjs.map +0 -1
  191. package/dist/controllers/operations.d.ts +0 -229
  192. package/dist/controllers/operations.js +0 -406
  193. package/dist/controllers/operations.js.map +0 -1
  194. package/dist/controllers/permissions.cjs +0 -4368
  195. package/dist/controllers/permissions.cjs.map +0 -1
  196. package/dist/controllers/permissions.d.ts +0 -1411
  197. package/dist/controllers/permissions.js +0 -4344
  198. package/dist/controllers/permissions.js.map +0 -1
  199. package/dist/controllers/protocol.cjs +0 -183
  200. package/dist/controllers/protocol.cjs.map +0 -1
  201. package/dist/controllers/protocol.d.ts +0 -138
  202. package/dist/controllers/protocol.js +0 -163
  203. package/dist/controllers/protocol.js.map +0 -1
  204. package/dist/controllers/schemas.cjs +0 -678
  205. package/dist/controllers/schemas.cjs.map +0 -1
  206. package/dist/controllers/schemas.d.ts +0 -293
  207. package/dist/controllers/schemas.js +0 -654
  208. package/dist/controllers/schemas.js.map +0 -1
  209. package/dist/controllers/server.cjs +0 -643
  210. package/dist/controllers/server.cjs.map +0 -1
  211. package/dist/controllers/server.d.ts +0 -322
  212. package/dist/controllers/server.js +0 -624
  213. package/dist/controllers/server.js.map +0 -1
  214. package/dist/controllers/staking.cjs +0 -626
  215. package/dist/controllers/staking.cjs.map +0 -1
  216. package/dist/controllers/staking.d.ts +0 -457
  217. package/dist/controllers/staking.js +0 -602
  218. package/dist/controllers/staking.js.map +0 -1
  219. package/dist/core/__tests__/pollingManager.test.d.ts +0 -4
  220. package/dist/core/apiClient.cjs +0 -378
  221. package/dist/core/apiClient.cjs.map +0 -1
  222. package/dist/core/apiClient.d.ts +0 -286
  223. package/dist/core/apiClient.js +0 -359
  224. package/dist/core/apiClient.js.map +0 -1
  225. package/dist/core/generics.cjs +0 -417
  226. package/dist/core/generics.cjs.map +0 -1
  227. package/dist/core/generics.d.ts +0 -205
  228. package/dist/core/generics.js +0 -386
  229. package/dist/core/generics.js.map +0 -1
  230. package/dist/core/health.cjs +0 -289
  231. package/dist/core/health.cjs.map +0 -1
  232. package/dist/core/health.d.ts +0 -143
  233. package/dist/core/health.js +0 -265
  234. package/dist/core/health.js.map +0 -1
  235. package/dist/core/inMemoryNonceManager.cjs +0 -138
  236. package/dist/core/inMemoryNonceManager.cjs.map +0 -1
  237. package/dist/core/inMemoryNonceManager.d.ts +0 -69
  238. package/dist/core/inMemoryNonceManager.js +0 -114
  239. package/dist/core/inMemoryNonceManager.js.map +0 -1
  240. package/dist/core/nonceManager.cjs +0 -304
  241. package/dist/core/nonceManager.cjs.map +0 -1
  242. package/dist/core/nonceManager.d.ts +0 -116
  243. package/dist/core/nonceManager.js +0 -280
  244. package/dist/core/nonceManager.js.map +0 -1
  245. package/dist/core/pollingManager.cjs +0 -292
  246. package/dist/core/pollingManager.cjs.map +0 -1
  247. package/dist/core/pollingManager.d.ts +0 -120
  248. package/dist/core/pollingManager.js +0 -268
  249. package/dist/core/pollingManager.js.map +0 -1
  250. package/dist/core.cjs +0 -781
  251. package/dist/core.cjs.map +0 -1
  252. package/dist/core.d.ts +0 -496
  253. package/dist/core.js +0 -756
  254. package/dist/core.js.map +0 -1
  255. package/dist/diagnostics.cjs +0 -37
  256. package/dist/diagnostics.cjs.map +0 -1
  257. package/dist/diagnostics.d.ts +0 -24
  258. package/dist/diagnostics.js +0 -13
  259. package/dist/diagnostics.js.map +0 -1
  260. package/dist/generated/abi/DLPPerformanceImplementation.cjs +0 -1202
  261. package/dist/generated/abi/DLPPerformanceImplementation.cjs.map +0 -1
  262. package/dist/generated/abi/DLPPerformanceImplementation.d.ts +0 -914
  263. package/dist/generated/abi/DLPPerformanceImplementation.js +0 -1178
  264. package/dist/generated/abi/DLPPerformanceImplementation.js.map +0 -1
  265. package/dist/generated/abi/DLPRewardDeployerImplementation.cjs +0 -1112
  266. package/dist/generated/abi/DLPRewardDeployerImplementation.cjs.map +0 -1
  267. package/dist/generated/abi/DLPRewardDeployerImplementation.d.ts +0 -840
  268. package/dist/generated/abi/DLPRewardDeployerImplementation.js +0 -1088
  269. package/dist/generated/abi/DLPRewardDeployerImplementation.js.map +0 -1
  270. package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.cjs +0 -612
  271. package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.cjs.map +0 -1
  272. package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.d.ts +0 -451
  273. package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.js +0 -588
  274. package/dist/generated/abi/DLPRewardDeployerTreasuryImplementation.js.map +0 -1
  275. package/dist/generated/abi/DLPRewardSwapImplementation.cjs +0 -939
  276. package/dist/generated/abi/DLPRewardSwapImplementation.cjs.map +0 -1
  277. package/dist/generated/abi/DLPRewardSwapImplementation.d.ts +0 -705
  278. package/dist/generated/abi/DLPRewardSwapImplementation.js +0 -915
  279. package/dist/generated/abi/DLPRewardSwapImplementation.js.map +0 -1
  280. package/dist/generated/abi/DLPRootImplementation.cjs +0 -1644
  281. package/dist/generated/abi/DLPRootImplementation.cjs.map +0 -1
  282. package/dist/generated/abi/DLPRootImplementation.d.ts +0 -1246
  283. package/dist/generated/abi/DLPRootImplementation.js +0 -1620
  284. package/dist/generated/abi/DLPRootImplementation.js.map +0 -1
  285. package/dist/generated/abi/DataLiquidityPoolImplementation.cjs +0 -985
  286. package/dist/generated/abi/DataLiquidityPoolImplementation.cjs.map +0 -1
  287. package/dist/generated/abi/DataLiquidityPoolImplementation.d.ts +0 -735
  288. package/dist/generated/abi/DataLiquidityPoolImplementation.js +0 -961
  289. package/dist/generated/abi/DataLiquidityPoolImplementation.js.map +0 -1
  290. package/dist/generated/abi/SwapHelperImplementation.cjs +0 -976
  291. package/dist/generated/abi/SwapHelperImplementation.cjs.map +0 -1
  292. package/dist/generated/abi/SwapHelperImplementation.d.ts +0 -728
  293. package/dist/generated/abi/SwapHelperImplementation.js +0 -952
  294. package/dist/generated/abi/SwapHelperImplementation.js.map +0 -1
  295. package/dist/generated/abi/TeePoolImplementation.cjs +0 -1313
  296. package/dist/generated/abi/TeePoolImplementation.cjs.map +0 -1
  297. package/dist/generated/abi/TeePoolImplementation.d.ts +0 -992
  298. package/dist/generated/abi/TeePoolImplementation.js +0 -1289
  299. package/dist/generated/abi/TeePoolImplementation.js.map +0 -1
  300. package/dist/generated/event-types.cjs +0 -17
  301. package/dist/generated/event-types.cjs.map +0 -1
  302. package/dist/generated/event-types.d.ts +0 -816
  303. package/dist/generated/event-types.js +0 -1
  304. package/dist/generated/event-types.js.map +0 -1
  305. package/dist/generated/eventRegistry.cjs +0 -4512
  306. package/dist/generated/eventRegistry.cjs.map +0 -1
  307. package/dist/generated/eventRegistry.d.ts +0 -14
  308. package/dist/generated/eventRegistry.js +0 -4487
  309. package/dist/generated/eventRegistry.js.map +0 -1
  310. package/dist/generated/server/server-exports.cjs +0 -45
  311. package/dist/generated/server/server-exports.cjs.map +0 -1
  312. package/dist/generated/server/server-exports.d.ts +0 -36
  313. package/dist/generated/server/server-exports.js +0 -19
  314. package/dist/generated/server/server-exports.js.map +0 -1
  315. package/dist/generated/server/server.cjs +0 -17
  316. package/dist/generated/server/server.cjs.map +0 -1
  317. package/dist/generated/server/server.d.ts +0 -907
  318. package/dist/generated/server/server.js +0 -1
  319. package/dist/generated/server/server.js.map +0 -1
  320. package/dist/generated/subgraph.cjs +0 -1440
  321. package/dist/generated/subgraph.cjs.map +0 -1
  322. package/dist/generated/subgraph.d.ts +0 -6113
  323. package/dist/generated/subgraph.js +0 -1404
  324. package/dist/generated/subgraph.js.map +0 -1
  325. package/dist/lib/__tests__/redisAtomicStore.test.d.ts +0 -1
  326. package/dist/lib/redisAtomicStore.cjs +0 -201
  327. package/dist/lib/redisAtomicStore.cjs.map +0 -1
  328. package/dist/lib/redisAtomicStore.d.ts +0 -120
  329. package/dist/lib/redisAtomicStore.js +0 -177
  330. package/dist/lib/redisAtomicStore.js.map +0 -1
  331. package/dist/server/relayerHandler.cjs +0 -452
  332. package/dist/server/relayerHandler.cjs.map +0 -1
  333. package/dist/server/relayerHandler.d.ts +0 -69
  334. package/dist/server/relayerHandler.js +0 -428
  335. package/dist/server/relayerHandler.js.map +0 -1
  336. package/dist/tests/abi.test.d.ts +0 -1
  337. package/dist/tests/chains-definitions.test.d.ts +0 -1
  338. package/dist/tests/core-encryption.test.d.ts +0 -1
  339. package/dist/tests/core-extended.test.d.ts +0 -1
  340. package/dist/tests/core-generics-coverage.test.d.ts +0 -1
  341. package/dist/tests/coverage-boost.test.d.ts +0 -1
  342. package/dist/tests/crypto-cross-platform-compatibility.test.d.ts +0 -1
  343. package/dist/tests/data-addfile-permissions-schema.test.d.ts +0 -1
  344. package/dist/tests/data-additional-methods.test.d.ts +0 -1
  345. package/dist/tests/data-controller-edge-cases.test.d.ts +0 -1
  346. package/dist/tests/data-ipfs-gateways.test.d.ts +0 -1
  347. package/dist/tests/data-relayer.test.d.ts +0 -1
  348. package/dist/tests/data-schema-validation.test.d.ts +0 -1
  349. package/dist/tests/data-simple-methods.test.d.ts +0 -1
  350. package/dist/tests/data-upload-owner-validation.test.d.ts +0 -1
  351. package/dist/tests/data.test.d.ts +0 -1
  352. package/dist/tests/demo-integration.test.d.ts +0 -1
  353. package/dist/tests/demo-trusted-server-integration.test.d.ts +0 -1
  354. package/dist/tests/download-relayer.test.d.ts +0 -1
  355. package/dist/tests/dual-mode-permissions.test.d.ts +0 -1
  356. package/dist/tests/dual-mode-trusted-servers.test.d.ts +0 -1
  357. package/dist/tests/encryption-correct-implementation.test.d.ts +0 -1
  358. package/dist/tests/encryption-coverage.test.d.ts +0 -1
  359. package/dist/tests/encryption-edge-cases.test.d.ts +0 -1
  360. package/dist/tests/encryption-utils-updated.test.d.ts +0 -1
  361. package/dist/tests/errors-coverage.test.d.ts +0 -1
  362. package/dist/tests/factories/mockFactory.d.ts +0 -316
  363. package/dist/tests/fakes/FakeStorageManager.d.ts +0 -200
  364. package/dist/tests/fakes/FakeStorageManager.test.d.ts +0 -1
  365. package/dist/tests/fakes/FakeWaitForTransactionEvents.d.ts +0 -170
  366. package/dist/tests/fakes/FakeWaitForTransactionEvents.test.d.ts +0 -1
  367. package/dist/tests/fakes/fake-pgp-port.d.ts +0 -13
  368. package/dist/tests/grantValidation-edge-cases.test.d.ts +0 -1
  369. package/dist/tests/grantValidation-unreachable-branch.test.d.ts +0 -1
  370. package/dist/tests/helper-methods.test.d.ts +0 -1
  371. package/dist/tests/helpers/typedMocks.d.ts +0 -64
  372. package/dist/tests/index-browser.test.d.ts +0 -1
  373. package/dist/tests/index-node.test.d.ts +0 -1
  374. package/dist/tests/index.test.d.ts +0 -1
  375. package/dist/tests/mocks/platformAdapter.d.ts +0 -12
  376. package/dist/tests/new-permissions-methods.test.d.ts +0 -1
  377. package/dist/tests/no-buffer-browser.test.d.ts +0 -1
  378. package/dist/tests/permissions-grantee.test.d.ts +0 -1
  379. package/dist/tests/permissions-revoke-relayer.test.d.ts +0 -1
  380. package/dist/tests/permissions-schema-validation.test.d.ts +0 -1
  381. package/dist/tests/permissions-server-files.test.d.ts +0 -1
  382. package/dist/tests/permissions-transaction-options.test.d.ts +0 -1
  383. package/dist/tests/permissions-trust-servers.test.d.ts +0 -1
  384. package/dist/tests/permissions.test.d.ts +0 -1
  385. package/dist/tests/personal.test.d.ts +0 -1
  386. package/dist/tests/platform-browser.test.d.ts +0 -1
  387. package/dist/tests/platform-crypto-expanded.test.d.ts +0 -1
  388. package/dist/tests/platform-crypto.test.d.ts +0 -1
  389. package/dist/tests/platform-index.test.d.ts +0 -1
  390. package/dist/tests/platform-node.test.d.ts +0 -1
  391. package/dist/tests/platform-shared-utils.test.d.ts +0 -1
  392. package/dist/tests/platform-updated.test.d.ts +0 -1
  393. package/dist/tests/protocol-additional-methods.test.d.ts +0 -1
  394. package/dist/tests/protocol.test.d.ts +0 -1
  395. package/dist/tests/read-only-mode.test.d.ts +0 -1
  396. package/dist/tests/relayer-integration.test.d.ts +0 -1
  397. package/dist/tests/relayer-unified.test.d.ts +0 -1
  398. package/dist/tests/schemas.test.d.ts +0 -1
  399. package/dist/tests/server-relayer-handler.test.d.ts +0 -1
  400. package/dist/tests/signatureFormatter.test.d.ts +0 -1
  401. package/dist/tests/staking.test.d.ts +0 -1
  402. package/dist/tests/trusted-server-queries.test.d.ts +0 -1
  403. package/dist/tests/typedDataConverter.test.d.ts +0 -1
  404. package/dist/tests/types-contracts.test.d.ts +0 -1
  405. package/dist/tests/types-data.test.d.ts +0 -1
  406. package/dist/tests/types-external-apis.test.d.ts +0 -1
  407. package/dist/tests/types-generics.test.d.ts +0 -1
  408. package/dist/tests/types-permissions.test.d.ts +0 -1
  409. package/dist/tests/types-upload-params.test.d.ts +0 -1
  410. package/dist/tests/types.test.d.ts +0 -1
  411. package/dist/tests/utils-formatters.test.d.ts +0 -1
  412. package/dist/tests/utils-grantFiles-edge-cases.test.d.ts +0 -1
  413. package/dist/tests/utils-grantFiles-validation.test.d.ts +0 -1
  414. package/dist/tests/utils-grantFiles.test.d.ts +0 -1
  415. package/dist/tests/utils-grantValidation-consolidated.test.d.ts +0 -1
  416. package/dist/tests/utils-grants.test.d.ts +0 -1
  417. package/dist/tests/utils-ipfs-additional.test.d.ts +0 -1
  418. package/dist/tests/utils-ipfs.test.d.ts +0 -4
  419. package/dist/tests/utils-schemaValidation.test.d.ts +0 -1
  420. package/dist/tests/vana.test.d.ts +0 -1
  421. package/dist/tests/wallet-crypto-compatibility.test.d.ts +0 -1
  422. package/dist/types/atomicStore.cjs.map +0 -1
  423. package/dist/types/atomicStore.d.ts +0 -236
  424. package/dist/types/atomicStore.js +0 -7
  425. package/dist/types/atomicStore.js.map +0 -1
  426. package/dist/types/blockchain.cjs +0 -17
  427. package/dist/types/blockchain.cjs.map +0 -1
  428. package/dist/types/blockchain.d.ts +0 -85
  429. package/dist/types/blockchain.js +0 -1
  430. package/dist/types/blockchain.js.map +0 -1
  431. package/dist/types/controller-context.cjs +0 -17
  432. package/dist/types/controller-context.cjs.map +0 -1
  433. package/dist/types/controller-context.d.ts +0 -68
  434. package/dist/types/controller-context.js +0 -1
  435. package/dist/types/controller-context.js.map +0 -1
  436. package/dist/types/data.cjs +0 -17
  437. package/dist/types/data.cjs.map +0 -1
  438. package/dist/types/data.d.ts +0 -763
  439. package/dist/types/data.js +0 -1
  440. package/dist/types/data.js.map +0 -1
  441. package/dist/types/external-apis.cjs +0 -61
  442. package/dist/types/external-apis.cjs.map +0 -1
  443. package/dist/types/external-apis.d.ts +0 -184
  444. package/dist/types/external-apis.js +0 -34
  445. package/dist/types/external-apis.js.map +0 -1
  446. package/dist/types/generics.cjs +0 -17
  447. package/dist/types/generics.cjs.map +0 -1
  448. package/dist/types/generics.d.ts +0 -518
  449. package/dist/types/generics.js +0 -1
  450. package/dist/types/generics.js.map +0 -1
  451. package/dist/types/operationStore.cjs +0 -17
  452. package/dist/types/operationStore.cjs.map +0 -1
  453. package/dist/types/operationStore.d.ts +0 -171
  454. package/dist/types/operationStore.js +0 -1
  455. package/dist/types/operationStore.js.map +0 -1
  456. package/dist/types/operations.cjs +0 -53
  457. package/dist/types/operations.cjs.map +0 -1
  458. package/dist/types/operations.d.ts +0 -204
  459. package/dist/types/operations.js +0 -26
  460. package/dist/types/operations.js.map +0 -1
  461. package/dist/types/options.cjs +0 -17
  462. package/dist/types/options.cjs.map +0 -1
  463. package/dist/types/options.d.ts +0 -308
  464. package/dist/types/options.js +0 -1
  465. package/dist/types/options.js.map +0 -1
  466. package/dist/types/permissions.cjs +0 -17
  467. package/dist/types/permissions.cjs.map +0 -1
  468. package/dist/types/permissions.d.ts +0 -955
  469. package/dist/types/permissions.js +0 -1
  470. package/dist/types/permissions.js.map +0 -1
  471. package/dist/types/personal.cjs +0 -17
  472. package/dist/types/personal.cjs.map +0 -1
  473. package/dist/types/personal.d.ts +0 -174
  474. package/dist/types/personal.js +0 -1
  475. package/dist/types/personal.js.map +0 -1
  476. package/dist/types/relayer.cjs +0 -17
  477. package/dist/types/relayer.cjs.map +0 -1
  478. package/dist/types/relayer.d.ts +0 -552
  479. package/dist/types/relayer.js +0 -1
  480. package/dist/types/relayer.js.map +0 -1
  481. package/dist/types/transactionResults.cjs +0 -17
  482. package/dist/types/transactionResults.cjs.map +0 -1
  483. package/dist/types/transactionResults.d.ts +0 -193
  484. package/dist/types/transactionResults.js +0 -1
  485. package/dist/types/transactionResults.js.map +0 -1
  486. package/dist/types/utils.cjs +0 -17
  487. package/dist/types/utils.cjs.map +0 -1
  488. package/dist/types/utils.d.ts +0 -771
  489. package/dist/types/utils.js +0 -1
  490. package/dist/types/utils.js.map +0 -1
  491. package/dist/utils/__tests__/chainQuery.test.d.ts +0 -1
  492. package/dist/utils/__tests__/parseTransaction.test.d.ts +0 -1
  493. package/dist/utils/__tests__/pojo-serialization.test.d.ts +0 -1
  494. package/dist/utils/__tests__/signatureCache.test.d.ts +0 -1
  495. package/dist/utils/__tests__/subgraphConsistency.test.d.ts +0 -4
  496. package/dist/utils/__tests__/subgraphPagination.test.d.ts +0 -4
  497. package/dist/utils/__tests__/transaction-edge-cases.test.d.ts +0 -1
  498. package/dist/utils/__tests__/transactionHelpers.test.d.ts +0 -1
  499. package/dist/utils/__tests__/urlResolver.test.d.ts +0 -4
  500. package/dist/utils/blockchain/registry.cjs +0 -81
  501. package/dist/utils/blockchain/registry.cjs.map +0 -1
  502. package/dist/utils/blockchain/registry.d.ts +0 -32
  503. package/dist/utils/blockchain/registry.js +0 -56
  504. package/dist/utils/blockchain/registry.js.map +0 -1
  505. package/dist/utils/blockchain/registry.test.d.ts +0 -1
  506. package/dist/utils/chainQuery.cjs +0 -107
  507. package/dist/utils/chainQuery.cjs.map +0 -1
  508. package/dist/utils/chainQuery.d.ts +0 -31
  509. package/dist/utils/chainQuery.js +0 -82
  510. package/dist/utils/chainQuery.js.map +0 -1
  511. package/dist/utils/download.cjs +0 -69
  512. package/dist/utils/download.cjs.map +0 -1
  513. package/dist/utils/download.d.ts +0 -40
  514. package/dist/utils/download.js +0 -45
  515. package/dist/utils/download.js.map +0 -1
  516. package/dist/utils/encryption.cjs +0 -176
  517. package/dist/utils/encryption.cjs.map +0 -1
  518. package/dist/utils/encryption.d.ts +0 -271
  519. package/dist/utils/encryption.js +0 -142
  520. package/dist/utils/encryption.js.map +0 -1
  521. package/dist/utils/formatters.cjs +0 -55
  522. package/dist/utils/formatters.cjs.map +0 -1
  523. package/dist/utils/formatters.d.ts +0 -118
  524. package/dist/utils/formatters.js +0 -28
  525. package/dist/utils/formatters.js.map +0 -1
  526. package/dist/utils/grantFiles.cjs +0 -181
  527. package/dist/utils/grantFiles.cjs.map +0 -1
  528. package/dist/utils/grantFiles.d.ts +0 -172
  529. package/dist/utils/grantFiles.js +0 -143
  530. package/dist/utils/grantFiles.js.map +0 -1
  531. package/dist/utils/grantValidation.cjs +0 -243
  532. package/dist/utils/grantValidation.cjs.map +0 -1
  533. package/dist/utils/grantValidation.d.ts +0 -226
  534. package/dist/utils/grantValidation.js +0 -201
  535. package/dist/utils/grantValidation.js.map +0 -1
  536. package/dist/utils/grants.cjs +0 -108
  537. package/dist/utils/grants.cjs.map +0 -1
  538. package/dist/utils/grants.d.ts +0 -148
  539. package/dist/utils/grants.js +0 -82
  540. package/dist/utils/grants.js.map +0 -1
  541. package/dist/utils/ipfs.cjs +0 -128
  542. package/dist/utils/ipfs.cjs.map +0 -1
  543. package/dist/utils/ipfs.d.ts +0 -88
  544. package/dist/utils/ipfs.js +0 -97
  545. package/dist/utils/ipfs.js.map +0 -1
  546. package/dist/utils/multicall.cjs +0 -233
  547. package/dist/utils/multicall.cjs.map +0 -1
  548. package/dist/utils/multicall.d.ts +0 -126
  549. package/dist/utils/multicall.js +0 -208
  550. package/dist/utils/multicall.js.map +0 -1
  551. package/dist/utils/parseTransactionPojo.cjs +0 -87
  552. package/dist/utils/parseTransactionPojo.cjs.map +0 -1
  553. package/dist/utils/parseTransactionPojo.d.ts +0 -31
  554. package/dist/utils/parseTransactionPojo.js +0 -63
  555. package/dist/utils/parseTransactionPojo.js.map +0 -1
  556. package/dist/utils/schemaValidation.cjs +0 -258
  557. package/dist/utils/schemaValidation.cjs.map +0 -1
  558. package/dist/utils/schemaValidation.d.ts +0 -168
  559. package/dist/utils/schemaValidation.js +0 -219
  560. package/dist/utils/schemaValidation.js.map +0 -1
  561. package/dist/utils/signatureCache.cjs +0 -192
  562. package/dist/utils/signatureCache.cjs.map +0 -1
  563. package/dist/utils/signatureCache.d.ts +0 -172
  564. package/dist/utils/signatureCache.js +0 -167
  565. package/dist/utils/signatureCache.js.map +0 -1
  566. package/dist/utils/signatureFormatter.cjs +0 -42
  567. package/dist/utils/signatureFormatter.cjs.map +0 -1
  568. package/dist/utils/signatureFormatter.d.ts +0 -36
  569. package/dist/utils/signatureFormatter.js +0 -18
  570. package/dist/utils/signatureFormatter.js.map +0 -1
  571. package/dist/utils/subgraphConsistency.cjs +0 -184
  572. package/dist/utils/subgraphConsistency.cjs.map +0 -1
  573. package/dist/utils/subgraphConsistency.d.ts +0 -65
  574. package/dist/utils/subgraphConsistency.js +0 -155
  575. package/dist/utils/subgraphConsistency.js.map +0 -1
  576. package/dist/utils/subgraphMetaCache.cjs +0 -101
  577. package/dist/utils/subgraphMetaCache.cjs.map +0 -1
  578. package/dist/utils/subgraphMetaCache.d.ts +0 -56
  579. package/dist/utils/subgraphMetaCache.js +0 -76
  580. package/dist/utils/subgraphMetaCache.js.map +0 -1
  581. package/dist/utils/subgraphPagination.cjs +0 -104
  582. package/dist/utils/subgraphPagination.cjs.map +0 -1
  583. package/dist/utils/subgraphPagination.d.ts +0 -78
  584. package/dist/utils/subgraphPagination.js +0 -78
  585. package/dist/utils/subgraphPagination.js.map +0 -1
  586. package/dist/utils/tests/multicall.test.d.ts +0 -1
  587. package/dist/utils/transactionHelpers.cjs +0 -54
  588. package/dist/utils/transactionHelpers.cjs.map +0 -1
  589. package/dist/utils/transactionHelpers.d.ts +0 -80
  590. package/dist/utils/transactionHelpers.js +0 -29
  591. package/dist/utils/transactionHelpers.js.map +0 -1
  592. package/dist/utils/typeGuards.cjs +0 -109
  593. package/dist/utils/typeGuards.cjs.map +0 -1
  594. package/dist/utils/typeGuards.d.ts +0 -138
  595. package/dist/utils/typeGuards.js +0 -74
  596. package/dist/utils/typeGuards.js.map +0 -1
  597. package/dist/utils/typedDataConverter.cjs +0 -43
  598. package/dist/utils/typedDataConverter.cjs.map +0 -1
  599. package/dist/utils/typedDataConverter.d.ts +0 -46
  600. package/dist/utils/typedDataConverter.js +0 -19
  601. package/dist/utils/typedDataConverter.js.map +0 -1
  602. package/dist/utils/urlResolver.cjs +0 -62
  603. package/dist/utils/urlResolver.cjs.map +0 -1
  604. package/dist/utils/urlResolver.d.ts +0 -56
  605. package/dist/utils/urlResolver.js +0 -37
  606. package/dist/utils/urlResolver.js.map +0 -1
  607. package/dist/utils/wallet.cjs +0 -63
  608. package/dist/utils/wallet.cjs.map +0 -1
  609. package/dist/utils/wallet.d.ts +0 -94
  610. package/dist/utils/wallet.js +0 -37
  611. package/dist/utils/wallet.js.map +0 -1
  612. package/dist/utils/withEvents.cjs +0 -44
  613. package/dist/utils/withEvents.cjs.map +0 -1
  614. package/dist/utils/withEvents.d.ts +0 -56
  615. package/dist/utils/withEvents.js +0 -18
  616. package/dist/utils/withEvents.js.map +0 -1
  617. /package/dist/{__tests__/waitForTransactionEvents.test.d.ts → auth/pkce.test.d.ts} +0 -0
  618. /package/dist/{client/__tests__/enhancedResponse.test.d.ts → auth/token-store.test.d.ts} +0 -0
  619. /package/dist/{controllers/__tests__/operations.processQueue.test.d.ts → auth/web3-signed.test.d.ts} +0 -0
  620. /package/dist/{controllers/__tests__/schemas-edge-cases.test.d.ts → crypto/envelope/openpgp.test.d.ts} +0 -0
  621. /package/dist/{controllers/data-error-handling.test.d.ts → crypto/keys/derive.test.d.ts} +0 -0
  622. /package/dist/{tests/errors.test.d.ts → errors.test.d.ts} +0 -0
  623. /package/dist/{controllers/server-additional.test.d.ts → protocol/data-file.test.d.ts} +0 -0
  624. /package/dist/{core/__tests__/health.test.d.ts → protocol/eip712.test.d.ts} +0 -0
  625. /package/dist/{core/__tests__/inMemoryNonceManager.test.d.ts → protocol/gateway.test.d.ts} +0 -0
  626. /package/dist/{core/__tests__/nonceManager.test.d.ts → protocol/grants.test.d.ts} +0 -0
  627. /package/dist/{core/core.test.d.ts → protocol/scopes.test.d.ts} +0 -0
  628. /package/dist/{core/tests/apiClient.test.d.ts → storage/tests/defaultStorage.test.d.ts} +0 -0
  629. /package/dist/{core/tests/client.test.d.ts → storage/tests/r2Storage.test.d.ts} +0 -0
  630. /package/dist/{core/tests/generics.test.d.ts → storage/tests/vanaStorage.test.d.ts} +0 -0
  631. /package/dist/{diagnostics.test.d.ts → types/ps-errors.test.d.ts} +0 -0
@@ -1,304 +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 nonceManager_exports = {};
20
- __export(nonceManager_exports, {
21
- DistributedNonceManager: () => DistributedNonceManager
22
- });
23
- module.exports = __toCommonJS(nonceManager_exports);
24
- var import_atomicStore = require("../types/atomicStore");
25
- class DistributedNonceManager {
26
- store;
27
- publicClient;
28
- lockTTL;
29
- maxLockRetries;
30
- lockRetryDelay;
31
- constructor(config) {
32
- this.store = config.atomicStore;
33
- this.publicClient = config.publicClient;
34
- this.lockTTL = config.lockTTL ?? 5;
35
- this.maxLockRetries = config.maxLockRetries ?? 50;
36
- this.lockRetryDelay = config.lockRetryDelay ?? 100;
37
- }
38
- /**
39
- * Atomically assigns the next available nonce for an address.
40
- *
41
- * @remarks
42
- * This method uses two strategies depending on the atomic store capabilities:
43
- * 1. If the store provides atomicAssignNonce (store-specific optimization),
44
- * it uses that for maximum reliability and performance
45
- * 2. Otherwise, it falls back to the lock-based approach:
46
- * - Acquires a distributed lock to prevent race conditions
47
- * - Queries the blockchain for the current pending nonce
48
- * - Syncs the stored nonce if blockchain is ahead
49
- * - Atomically increments and returns the next nonce
50
- * - Releases the lock
51
- *
52
- * @param address - The address to assign a nonce for
53
- * @param chainId - The chain ID for the network
54
- * @returns The assigned nonce, or null if lock acquisition fails
55
- */
56
- async assignNonce(address, chainId) {
57
- const lastUsedKey = `nonce:${chainId}:${address}:lastUsed`;
58
- const lockKey = `nonce:${chainId}:${address}:lock`;
59
- if ((0, import_atomicStore.hasNonceSupport)(this.store)) {
60
- try {
61
- const pendingCount = await this.publicClient.getTransactionCount({
62
- address,
63
- blockTag: "pending"
64
- });
65
- const nonce = await this.store.atomicAssignNonce(
66
- lastUsedKey,
67
- pendingCount
68
- );
69
- console.log(
70
- `[NonceManager] Assigned nonce ${nonce} for ${address} on chain ${chainId} (using store optimization)`
71
- );
72
- return nonce;
73
- } catch (error) {
74
- console.error(
75
- "[NonceManager] Error during optimized nonce assignment:",
76
- error
77
- );
78
- throw error;
79
- }
80
- }
81
- let lockAcquired = false;
82
- let retries = 0;
83
- let acquiredLockId = null;
84
- while (!lockAcquired && retries < this.maxLockRetries) {
85
- acquiredLockId = await this.store.acquireLock(lockKey, this.lockTTL);
86
- lockAcquired = acquiredLockId !== null;
87
- if (lockAcquired && acquiredLockId) {
88
- try {
89
- const pendingCount = await this.publicClient.getTransactionCount({
90
- address,
91
- blockTag: "pending"
92
- });
93
- const blockchainPending = pendingCount === 0 ? -1 : pendingCount - 1;
94
- const currentLastUsedStr = await this.store.get(lastUsedKey);
95
- const currentLastUsed = currentLastUsedStr ? parseInt(currentLastUsedStr) : -1;
96
- if (blockchainPending > currentLastUsed) {
97
- await this.store.set(lastUsedKey, blockchainPending.toString());
98
- console.log(
99
- `[NonceManager] Synced nonce for ${address} on chain ${chainId}: ${currentLastUsed} -> ${blockchainPending}`
100
- );
101
- }
102
- const nextNonce = await this.store.incr(lastUsedKey);
103
- console.log(
104
- `[NonceManager] Assigned nonce ${nextNonce} for ${address} on chain ${chainId}`
105
- );
106
- if (this.store.setWithTTL) {
107
- const assignmentKey = `nonce:${chainId}:${address}:assignment:${nextNonce}`;
108
- const metadata = {
109
- nonce: nextNonce,
110
- assignedAt: Date.now(),
111
- address,
112
- chainId
113
- };
114
- await this.store.setWithTTL(
115
- assignmentKey,
116
- JSON.stringify(metadata),
117
- 3600
118
- );
119
- }
120
- return nextNonce;
121
- } catch (error) {
122
- console.error("[NonceManager] Error during nonce assignment:", error);
123
- throw error;
124
- } finally {
125
- await this.store.releaseLock(lockKey, acquiredLockId);
126
- }
127
- } else {
128
- retries++;
129
- if (retries < this.maxLockRetries) {
130
- const delay = Math.min(
131
- this.lockRetryDelay * Math.pow(1.5, retries - 1),
132
- 5e3
133
- // Cap at 5 seconds
134
- );
135
- await new Promise((resolve) => setTimeout(resolve, delay));
136
- }
137
- }
138
- }
139
- console.error(
140
- `[NonceManager] Failed to acquire lock for ${address} after ${this.maxLockRetries} attempts`
141
- );
142
- return null;
143
- }
144
- /**
145
- * Resets the nonce counter for an address.
146
- *
147
- * @remarks
148
- * Use with caution - should only be called when you're certain
149
- * no transactions are pending. This is useful for recovery from
150
- * stuck states.
151
- *
152
- * @param address - The address to reset nonce for
153
- * @param chainId - The chain ID for the network
154
- */
155
- async resetNonce(address, chainId) {
156
- const lastUsedKey = `nonce:${chainId}:${address}:lastUsed`;
157
- const lockKey = `nonce:${chainId}:${address}:lock`;
158
- const lockId = await this.acquireLockWithRetry(lockKey);
159
- if (!lockId) {
160
- throw new Error("Failed to acquire lock for nonce reset");
161
- }
162
- try {
163
- const confirmedCount = await this.publicClient.getTransactionCount({
164
- address,
165
- blockTag: "latest"
166
- });
167
- const resetValue = confirmedCount === 0 ? -1 : confirmedCount - 1;
168
- await this.store.set(lastUsedKey, resetValue.toString());
169
- console.log(
170
- `[NonceManager] Reset nonce for ${address} on chain ${chainId} to ${resetValue}`
171
- );
172
- } finally {
173
- await this.store.releaseLock(lockKey, lockId);
174
- }
175
- }
176
- /**
177
- * Gets the current nonce state for monitoring/debugging.
178
- *
179
- * @param address - The address to check
180
- * @param chainId - The chain ID for the network
181
- * @returns Current nonce state information
182
- */
183
- async getNonceState(address, chainId) {
184
- const lastUsedKey = `nonce:${chainId}:${address}:lastUsed`;
185
- const lastUsedStr = await this.store.get(lastUsedKey);
186
- const lastUsed = lastUsedStr ? parseInt(lastUsedStr) : -1;
187
- const [pendingCount, confirmedCount] = await Promise.all([
188
- this.publicClient.getTransactionCount({
189
- address,
190
- blockTag: "pending"
191
- }),
192
- this.publicClient.getTransactionCount({
193
- address,
194
- blockTag: "latest"
195
- })
196
- ]);
197
- return {
198
- lastUsed,
199
- blockchainPending: pendingCount === 0 ? -1 : pendingCount - 1,
200
- blockchainConfirmed: confirmedCount === 0 ? -1 : confirmedCount - 1
201
- };
202
- }
203
- /**
204
- * Helper to acquire lock with retries.
205
- *
206
- * @internal
207
- */
208
- async acquireLockWithRetry(lockKey) {
209
- let retries = 0;
210
- while (retries < this.maxLockRetries) {
211
- const lockId = await this.store.acquireLock(lockKey, this.lockTTL);
212
- if (lockId) {
213
- return lockId;
214
- }
215
- retries++;
216
- if (retries < this.maxLockRetries) {
217
- const delay = Math.min(
218
- this.lockRetryDelay * Math.pow(1.5, retries - 1),
219
- 5e3
220
- );
221
- await new Promise((resolve) => setTimeout(resolve, delay));
222
- }
223
- }
224
- return null;
225
- }
226
- /**
227
- * Burns a stuck nonce by sending a minimal self-transfer with higher gas.
228
- *
229
- * @remarks
230
- * This method implements Vana App's production nonce burning strategy.
231
- * It sends a zero-value transaction to the same address with elevated gas
232
- * to replace a stuck transaction and unblock the nonce queue.
233
- *
234
- * Ported from apps/web/app/api/relay/route.ts (Vana App production code)
235
- *
236
- * @param walletClient - The wallet client to send the burn transaction
237
- * @param nonceToBurn - The nonce to burn
238
- * @param address - The address whose nonce to burn
239
- * @param chainId - The chain ID for the network
240
- * @param gasMultiplier - Multiplier for gas prices (default: 1.5)
241
- * @returns The transaction hash of the burn transaction
242
- */
243
- async burnNonce(walletClient, nonceToBurn, address, chainId, gasMultiplier = 1.5) {
244
- try {
245
- const fees = await this.publicClient.estimateFeesPerGas();
246
- const bump = (x) => x * BigInt(Math.floor(gasMultiplier * 100)) / 100n;
247
- const newMaxFee = bump(fees.maxFeePerGas);
248
- const newMaxPriorityFee = bump(fees.maxPriorityFeePerGas);
249
- console.log(
250
- `[NonceManager] Burning stuck nonce ${nonceToBurn} with high gas price: maxFee ${newMaxFee}, maxPriorityFee ${newMaxPriorityFee}`
251
- );
252
- const burnTx = await walletClient.sendTransaction({
253
- account: walletClient.account,
254
- // WalletClient should have an account
255
- to: address,
256
- // Self-transfer
257
- value: 0n,
258
- nonce: nonceToBurn,
259
- gas: 21000n,
260
- // Minimal gas for transfer
261
- maxFeePerGas: newMaxFee,
262
- maxPriorityFeePerGas: newMaxPriorityFee,
263
- chain: {
264
- id: chainId,
265
- name: chainId === 14800 ? "Vana Moksha" : "Vana Mainnet",
266
- network: chainId === 14800 ? "moksha" : "mainnet",
267
- nativeCurrency: { name: "VANA", symbol: "VANA", decimals: 18 },
268
- rpcUrls: {
269
- default: {
270
- http: [
271
- chainId === 14800 ? "https://rpc.moksha.vana.org" : "https://rpc.vana.org"
272
- ]
273
- },
274
- public: {
275
- http: [
276
- chainId === 14800 ? "https://rpc.moksha.vana.org" : "https://rpc.vana.org"
277
- ]
278
- }
279
- }
280
- }
281
- });
282
- console.log(
283
- `[NonceManager] Burn nonce ${nonceToBurn} transaction sent: ${burnTx}`
284
- );
285
- return burnTx;
286
- } catch (error) {
287
- const errorMessage = error instanceof Error ? error.message : "Unknown error";
288
- if (errorMessage.includes("nonce too low") || errorMessage.includes("underpriced") || errorMessage.includes("already known")) {
289
- console.log(`[NonceManager] Nonce ${nonceToBurn} was already used`);
290
- } else {
291
- console.error(
292
- `[NonceManager] Error burning nonce ${nonceToBurn}:`,
293
- error
294
- );
295
- }
296
- throw error;
297
- }
298
- }
299
- }
300
- // Annotate the CommonJS export names for ESM import in node:
301
- 0 && (module.exports = {
302
- DistributedNonceManager
303
- });
304
- //# sourceMappingURL=nonceManager.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/core/nonceManager.ts"],"sourcesContent":["/**\n * Internal distributed nonce manager for atomic transaction nonce assignment.\n *\n * @internal\n * @module\n */\n\nimport type { PublicClient, WalletClient, Address, Hash } from \"viem\";\nimport type { IAtomicStore } from \"../types/atomicStore\";\nimport { hasNonceSupport } from \"../types/atomicStore\";\n\n/**\n * Configuration for the distributed nonce manager.\n *\n * @internal\n */\nexport interface NonceManagerConfig {\n /** Atomic store for distributed coordination */\n atomicStore: IAtomicStore;\n /** Public client for blockchain queries */\n publicClient: PublicClient;\n /** TTL for nonce locks in seconds (default: 5) */\n lockTTL?: number;\n /** Maximum retries to acquire lock (default: 50) */\n maxLockRetries?: number;\n /** Delay between lock retries in milliseconds (default: 100) */\n lockRetryDelay?: number;\n}\n\n/**\n * Internal nonce manager that coordinates distributed nonce assignment.\n *\n * @internal\n * @remarks\n * This class implements sophisticated logic for atomic nonce assignment\n * in distributed environments. It uses the provided IAtomicStore to\n * coordinate between multiple instances and prevent nonce conflicts.\n *\n * Key features:\n * - Store-specific optimizations when available (e.g., Redis Lua scripts)\n * - Fallback to distributed locking for generic stores\n * - Syncing with blockchain pending count\n * - Nonce gap prevention\n * - Nonce burning capability for stuck transactions\n */\nexport class DistributedNonceManager {\n private readonly store: IAtomicStore;\n private readonly publicClient: PublicClient;\n private readonly lockTTL: number;\n private readonly maxLockRetries: number;\n private readonly lockRetryDelay: number;\n\n constructor(config: NonceManagerConfig) {\n this.store = config.atomicStore;\n this.publicClient = config.publicClient;\n this.lockTTL = config.lockTTL ?? 5;\n this.maxLockRetries = config.maxLockRetries ?? 50;\n this.lockRetryDelay = config.lockRetryDelay ?? 100;\n }\n\n /**\n * Atomically assigns the next available nonce for an address.\n *\n * @remarks\n * This method uses two strategies depending on the atomic store capabilities:\n * 1. If the store provides atomicAssignNonce (store-specific optimization),\n * it uses that for maximum reliability and performance\n * 2. Otherwise, it falls back to the lock-based approach:\n * - Acquires a distributed lock to prevent race conditions\n * - Queries the blockchain for the current pending nonce\n * - Syncs the stored nonce if blockchain is ahead\n * - Atomically increments and returns the next nonce\n * - Releases the lock\n *\n * @param address - The address to assign a nonce for\n * @param chainId - The chain ID for the network\n * @returns The assigned nonce, or null if lock acquisition fails\n */\n async assignNonce(address: Address, chainId: number): Promise<number | null> {\n const lastUsedKey = `nonce:${chainId}:${address}:lastUsed`;\n const lockKey = `nonce:${chainId}:${address}:lock`;\n\n // Check if the store provides an optimized atomic nonce assignment\n if (hasNonceSupport(this.store)) {\n try {\n // Get pending transaction count from blockchain\n const pendingCount = await this.publicClient.getTransactionCount({\n address,\n blockTag: \"pending\",\n });\n\n // Use store-specific optimized implementation (e.g., Redis Lua script)\n const nonce = await this.store.atomicAssignNonce(\n lastUsedKey,\n pendingCount,\n );\n\n console.log(\n `[NonceManager] Assigned nonce ${nonce} for ${address} on chain ${chainId} (using store optimization)`,\n );\n\n return nonce;\n } catch (error) {\n console.error(\n \"[NonceManager] Error during optimized nonce assignment:\",\n error,\n );\n throw error;\n }\n }\n\n // Try to acquire lock with retries\n let lockAcquired = false;\n let retries = 0;\n let acquiredLockId: string | null = null;\n\n while (!lockAcquired && retries < this.maxLockRetries) {\n // Try to acquire the lock\n acquiredLockId = await this.store.acquireLock(lockKey, this.lockTTL);\n lockAcquired = acquiredLockId !== null;\n\n if (lockAcquired && acquiredLockId) {\n try {\n // Get pending transaction count from blockchain\n const pendingCount = await this.publicClient.getTransactionCount({\n address,\n blockTag: \"pending\",\n });\n\n // Calculate the pending nonce (0-indexed)\n // If no transactions, start at 0\n const blockchainPending = pendingCount === 0 ? -1 : pendingCount - 1;\n\n // Get current lastUsed from store\n const currentLastUsedStr = await this.store.get(lastUsedKey);\n const currentLastUsed = currentLastUsedStr\n ? parseInt(currentLastUsedStr)\n : -1;\n\n // Sync lastUsed with blockchain if blockchain is ahead\n // This handles cases where transactions were sent outside this system\n if (blockchainPending > currentLastUsed) {\n await this.store.set(lastUsedKey, blockchainPending.toString());\n console.log(\n `[NonceManager] Synced nonce for ${address} on chain ${chainId}: ${currentLastUsed} -> ${blockchainPending}`,\n );\n }\n\n // Atomically increment and get next nonce\n const nextNonce = await this.store.incr(lastUsedKey);\n\n console.log(\n `[NonceManager] Assigned nonce ${nextNonce} for ${address} on chain ${chainId}`,\n );\n\n // Store assignment metadata for debugging (optional TTL)\n if (this.store.setWithTTL) {\n const assignmentKey = `nonce:${chainId}:${address}:assignment:${nextNonce}`;\n const metadata = {\n nonce: nextNonce,\n assignedAt: Date.now(),\n address,\n chainId,\n };\n // Store for 1 hour for debugging\n await this.store.setWithTTL(\n assignmentKey,\n JSON.stringify(metadata),\n 3600,\n );\n }\n\n return nextNonce;\n } catch (error) {\n console.error(\"[NonceManager] Error during nonce assignment:\", error);\n throw error;\n } finally {\n // Always release the lock\n await this.store.releaseLock(lockKey, acquiredLockId);\n }\n } else {\n // Failed to acquire lock, wait and retry with exponential backoff\n retries++;\n if (retries < this.maxLockRetries) {\n const delay = Math.min(\n this.lockRetryDelay * Math.pow(1.5, retries - 1),\n 5000, // Cap at 5 seconds\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n console.error(\n `[NonceManager] Failed to acquire lock for ${address} after ${this.maxLockRetries} attempts`,\n );\n return null;\n }\n\n /**\n * Resets the nonce counter for an address.\n *\n * @remarks\n * Use with caution - should only be called when you're certain\n * no transactions are pending. This is useful for recovery from\n * stuck states.\n *\n * @param address - The address to reset nonce for\n * @param chainId - The chain ID for the network\n */\n async resetNonce(address: Address, chainId: number): Promise<void> {\n const lastUsedKey = `nonce:${chainId}:${address}:lastUsed`;\n const lockKey = `nonce:${chainId}:${address}:lock`;\n\n // Acquire lock before resetting\n const lockId = await this.acquireLockWithRetry(lockKey);\n if (!lockId) {\n throw new Error(\"Failed to acquire lock for nonce reset\");\n }\n\n try {\n // Get confirmed transaction count from blockchain\n const confirmedCount = await this.publicClient.getTransactionCount({\n address,\n blockTag: \"latest\",\n });\n\n // Reset to blockchain state (confirmed count - 1 since we're 0-indexed)\n const resetValue = confirmedCount === 0 ? -1 : confirmedCount - 1;\n await this.store.set(lastUsedKey, resetValue.toString());\n\n console.log(\n `[NonceManager] Reset nonce for ${address} on chain ${chainId} to ${resetValue}`,\n );\n } finally {\n await this.store.releaseLock(lockKey, lockId);\n }\n }\n\n /**\n * Gets the current nonce state for monitoring/debugging.\n *\n * @param address - The address to check\n * @param chainId - The chain ID for the network\n * @returns Current nonce state information\n */\n async getNonceState(\n address: Address,\n chainId: number,\n ): Promise<{\n lastUsed: number;\n blockchainPending: number;\n blockchainConfirmed: number;\n }> {\n const lastUsedKey = `nonce:${chainId}:${address}:lastUsed`;\n\n // Get stored state\n const lastUsedStr = await this.store.get(lastUsedKey);\n const lastUsed = lastUsedStr ? parseInt(lastUsedStr) : -1;\n\n // Get blockchain state\n const [pendingCount, confirmedCount] = await Promise.all([\n this.publicClient.getTransactionCount({\n address,\n blockTag: \"pending\",\n }),\n this.publicClient.getTransactionCount({\n address,\n blockTag: \"latest\",\n }),\n ]);\n\n return {\n lastUsed,\n blockchainPending: pendingCount === 0 ? -1 : pendingCount - 1,\n blockchainConfirmed: confirmedCount === 0 ? -1 : confirmedCount - 1,\n };\n }\n\n /**\n * Helper to acquire lock with retries.\n *\n * @internal\n */\n private async acquireLockWithRetry(lockKey: string): Promise<string | null> {\n let retries = 0;\n\n while (retries < this.maxLockRetries) {\n const lockId = await this.store.acquireLock(lockKey, this.lockTTL);\n\n if (lockId) {\n return lockId;\n }\n\n retries++;\n if (retries < this.maxLockRetries) {\n const delay = Math.min(\n this.lockRetryDelay * Math.pow(1.5, retries - 1),\n 5000,\n );\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n\n return null;\n }\n\n /**\n * Burns a stuck nonce by sending a minimal self-transfer with higher gas.\n *\n * @remarks\n * This method implements Vana App's production nonce burning strategy.\n * It sends a zero-value transaction to the same address with elevated gas\n * to replace a stuck transaction and unblock the nonce queue.\n *\n * Ported from apps/web/app/api/relay/route.ts (Vana App production code)\n *\n * @param walletClient - The wallet client to send the burn transaction\n * @param nonceToBurn - The nonce to burn\n * @param address - The address whose nonce to burn\n * @param chainId - The chain ID for the network\n * @param gasMultiplier - Multiplier for gas prices (default: 1.5)\n * @returns The transaction hash of the burn transaction\n */\n async burnNonce(\n walletClient: WalletClient,\n nonceToBurn: number,\n address: Address,\n chainId: number,\n gasMultiplier: number = 1.5,\n ): Promise<Hash> {\n try {\n // Get current gas prices\n const fees = await this.publicClient.estimateFeesPerGas();\n\n // Bump gas prices by multiplier (Vana App's exact formula)\n const bump = (x: bigint) =>\n (x * BigInt(Math.floor(gasMultiplier * 100))) / 100n;\n\n const newMaxFee = bump(fees.maxFeePerGas);\n const newMaxPriorityFee = bump(fees.maxPriorityFeePerGas);\n\n console.log(\n `[NonceManager] Burning stuck nonce ${nonceToBurn} with high gas price: maxFee ${newMaxFee}, maxPriorityFee ${newMaxPriorityFee}`,\n );\n\n // Send minimal self-transfer to burn the nonce\n const burnTx = await walletClient.sendTransaction({\n account: walletClient.account!, // WalletClient should have an account\n to: address, // Self-transfer\n value: 0n,\n nonce: nonceToBurn,\n gas: 21000n, // Minimal gas for transfer\n maxFeePerGas: newMaxFee,\n maxPriorityFeePerGas: newMaxPriorityFee,\n chain: {\n id: chainId,\n name: chainId === 14800 ? \"Vana Moksha\" : \"Vana Mainnet\",\n network: chainId === 14800 ? \"moksha\" : \"mainnet\",\n nativeCurrency: { name: \"VANA\", symbol: \"VANA\", decimals: 18 },\n rpcUrls: {\n default: {\n http: [\n chainId === 14800\n ? \"https://rpc.moksha.vana.org\"\n : \"https://rpc.vana.org\",\n ],\n },\n public: {\n http: [\n chainId === 14800\n ? \"https://rpc.moksha.vana.org\"\n : \"https://rpc.vana.org\",\n ],\n },\n },\n },\n });\n\n console.log(\n `[NonceManager] Burn nonce ${nonceToBurn} transaction sent: ${burnTx}`,\n );\n\n return burnTx;\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error\";\n\n // Check for common errors that indicate nonce was already used\n if (\n errorMessage.includes(\"nonce too low\") ||\n errorMessage.includes(\"underpriced\") ||\n errorMessage.includes(\"already known\")\n ) {\n console.log(`[NonceManager] Nonce ${nonceToBurn} was already used`);\n } else {\n console.error(\n `[NonceManager] Error burning nonce ${nonceToBurn}:`,\n error,\n );\n }\n\n throw error;\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,yBAAgC;AAoCzB,MAAM,wBAAwB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YAAY,QAA4B;AACtC,SAAK,QAAQ,OAAO;AACpB,SAAK,eAAe,OAAO;AAC3B,SAAK,UAAU,OAAO,WAAW;AACjC,SAAK,iBAAiB,OAAO,kBAAkB;AAC/C,SAAK,iBAAiB,OAAO,kBAAkB;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAM,YAAY,SAAkB,SAAyC;AAC3E,UAAM,cAAc,SAAS,OAAO,IAAI,OAAO;AAC/C,UAAM,UAAU,SAAS,OAAO,IAAI,OAAO;AAG3C,YAAI,oCAAgB,KAAK,KAAK,GAAG;AAC/B,UAAI;AAEF,cAAM,eAAe,MAAM,KAAK,aAAa,oBAAoB;AAAA,UAC/D;AAAA,UACA,UAAU;AAAA,QACZ,CAAC;AAGD,cAAM,QAAQ,MAAM,KAAK,MAAM;AAAA,UAC7B;AAAA,UACA;AAAA,QACF;AAEA,gBAAQ;AAAA,UACN,iCAAiC,KAAK,QAAQ,OAAO,aAAa,OAAO;AAAA,QAC3E;AAEA,eAAO;AAAA,MACT,SAAS,OAAO;AACd,gBAAQ;AAAA,UACN;AAAA,UACA;AAAA,QACF;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAGA,QAAI,eAAe;AACnB,QAAI,UAAU;AACd,QAAI,iBAAgC;AAEpC,WAAO,CAAC,gBAAgB,UAAU,KAAK,gBAAgB;AAErD,uBAAiB,MAAM,KAAK,MAAM,YAAY,SAAS,KAAK,OAAO;AACnE,qBAAe,mBAAmB;AAElC,UAAI,gBAAgB,gBAAgB;AAClC,YAAI;AAEF,gBAAM,eAAe,MAAM,KAAK,aAAa,oBAAoB;AAAA,YAC/D;AAAA,YACA,UAAU;AAAA,UACZ,CAAC;AAID,gBAAM,oBAAoB,iBAAiB,IAAI,KAAK,eAAe;AAGnE,gBAAM,qBAAqB,MAAM,KAAK,MAAM,IAAI,WAAW;AAC3D,gBAAM,kBAAkB,qBACpB,SAAS,kBAAkB,IAC3B;AAIJ,cAAI,oBAAoB,iBAAiB;AACvC,kBAAM,KAAK,MAAM,IAAI,aAAa,kBAAkB,SAAS,CAAC;AAC9D,oBAAQ;AAAA,cACN,mCAAmC,OAAO,aAAa,OAAO,KAAK,eAAe,OAAO,iBAAiB;AAAA,YAC5G;AAAA,UACF;AAGA,gBAAM,YAAY,MAAM,KAAK,MAAM,KAAK,WAAW;AAEnD,kBAAQ;AAAA,YACN,iCAAiC,SAAS,QAAQ,OAAO,aAAa,OAAO;AAAA,UAC/E;AAGA,cAAI,KAAK,MAAM,YAAY;AACzB,kBAAM,gBAAgB,SAAS,OAAO,IAAI,OAAO,eAAe,SAAS;AACzE,kBAAM,WAAW;AAAA,cACf,OAAO;AAAA,cACP,YAAY,KAAK,IAAI;AAAA,cACrB;AAAA,cACA;AAAA,YACF;AAEA,kBAAM,KAAK,MAAM;AAAA,cACf;AAAA,cACA,KAAK,UAAU,QAAQ;AAAA,cACvB;AAAA,YACF;AAAA,UACF;AAEA,iBAAO;AAAA,QACT,SAAS,OAAO;AACd,kBAAQ,MAAM,iDAAiD,KAAK;AACpE,gBAAM;AAAA,QACR,UAAE;AAEA,gBAAM,KAAK,MAAM,YAAY,SAAS,cAAc;AAAA,QACtD;AAAA,MACF,OAAO;AAEL;AACA,YAAI,UAAU,KAAK,gBAAgB;AACjC,gBAAM,QAAQ,KAAK;AAAA,YACjB,KAAK,iBAAiB,KAAK,IAAI,KAAK,UAAU,CAAC;AAAA,YAC/C;AAAA;AAAA,UACF;AACA,gBAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,KAAK,CAAC;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAEA,YAAQ;AAAA,MACN,6CAA6C,OAAO,UAAU,KAAK,cAAc;AAAA,IACnF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,WAAW,SAAkB,SAAgC;AACjE,UAAM,cAAc,SAAS,OAAO,IAAI,OAAO;AAC/C,UAAM,UAAU,SAAS,OAAO,IAAI,OAAO;AAG3C,UAAM,SAAS,MAAM,KAAK,qBAAqB,OAAO;AACtD,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAEA,QAAI;AAEF,YAAM,iBAAiB,MAAM,KAAK,aAAa,oBAAoB;AAAA,QACjE;AAAA,QACA,UAAU;AAAA,MACZ,CAAC;AAGD,YAAM,aAAa,mBAAmB,IAAI,KAAK,iBAAiB;AAChE,YAAM,KAAK,MAAM,IAAI,aAAa,WAAW,SAAS,CAAC;AAEvD,cAAQ;AAAA,QACN,kCAAkC,OAAO,aAAa,OAAO,OAAO,UAAU;AAAA,MAChF;AAAA,IACF,UAAE;AACA,YAAM,KAAK,MAAM,YAAY,SAAS,MAAM;AAAA,IAC9C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,cACJ,SACA,SAKC;AACD,UAAM,cAAc,SAAS,OAAO,IAAI,OAAO;AAG/C,UAAM,cAAc,MAAM,KAAK,MAAM,IAAI,WAAW;AACpD,UAAM,WAAW,cAAc,SAAS,WAAW,IAAI;AAGvD,UAAM,CAAC,cAAc,cAAc,IAAI,MAAM,QAAQ,IAAI;AAAA,MACvD,KAAK,aAAa,oBAAoB;AAAA,QACpC;AAAA,QACA,UAAU;AAAA,MACZ,CAAC;AAAA,MACD,KAAK,aAAa,oBAAoB;AAAA,QACpC;AAAA,QACA,UAAU;AAAA,MACZ,CAAC;AAAA,IACH,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA,mBAAmB,iBAAiB,IAAI,KAAK,eAAe;AAAA,MAC5D,qBAAqB,mBAAmB,IAAI,KAAK,iBAAiB;AAAA,IACpE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAc,qBAAqB,SAAyC;AAC1E,QAAI,UAAU;AAEd,WAAO,UAAU,KAAK,gBAAgB;AACpC,YAAM,SAAS,MAAM,KAAK,MAAM,YAAY,SAAS,KAAK,OAAO;AAEjE,UAAI,QAAQ;AACV,eAAO;AAAA,MACT;AAEA;AACA,UAAI,UAAU,KAAK,gBAAgB;AACjC,cAAM,QAAQ,KAAK;AAAA,UACjB,KAAK,iBAAiB,KAAK,IAAI,KAAK,UAAU,CAAC;AAAA,UAC/C;AAAA,QACF;AACA,cAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,KAAK,CAAC;AAAA,MAC3D;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,MAAM,UACJ,cACA,aACA,SACA,SACA,gBAAwB,KACT;AACf,QAAI;AAEF,YAAM,OAAO,MAAM,KAAK,aAAa,mBAAmB;AAGxD,YAAM,OAAO,CAAC,MACX,IAAI,OAAO,KAAK,MAAM,gBAAgB,GAAG,CAAC,IAAK;AAElD,YAAM,YAAY,KAAK,KAAK,YAAY;AACxC,YAAM,oBAAoB,KAAK,KAAK,oBAAoB;AAExD,cAAQ;AAAA,QACN,sCAAsC,WAAW,gCAAgC,SAAS,oBAAoB,iBAAiB;AAAA,MACjI;AAGA,YAAM,SAAS,MAAM,aAAa,gBAAgB;AAAA,QAChD,SAAS,aAAa;AAAA;AAAA,QACtB,IAAI;AAAA;AAAA,QACJ,OAAO;AAAA,QACP,OAAO;AAAA,QACP,KAAK;AAAA;AAAA,QACL,cAAc;AAAA,QACd,sBAAsB;AAAA,QACtB,OAAO;AAAA,UACL,IAAI;AAAA,UACJ,MAAM,YAAY,QAAQ,gBAAgB;AAAA,UAC1C,SAAS,YAAY,QAAQ,WAAW;AAAA,UACxC,gBAAgB,EAAE,MAAM,QAAQ,QAAQ,QAAQ,UAAU,GAAG;AAAA,UAC7D,SAAS;AAAA,YACP,SAAS;AAAA,cACP,MAAM;AAAA,gBACJ,YAAY,QACR,gCACA;AAAA,cACN;AAAA,YACF;AAAA,YACA,QAAQ;AAAA,cACN,MAAM;AAAA,gBACJ,YAAY,QACR,gCACA;AAAA,cACN;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAC;AAED,cAAQ;AAAA,QACN,6BAA6B,WAAW,sBAAsB,MAAM;AAAA,MACtE;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,eACJ,iBAAiB,QAAQ,MAAM,UAAU;AAG3C,UACE,aAAa,SAAS,eAAe,KACrC,aAAa,SAAS,aAAa,KACnC,aAAa,SAAS,eAAe,GACrC;AACA,gBAAQ,IAAI,wBAAwB,WAAW,mBAAmB;AAAA,MACpE,OAAO;AACL,gBAAQ;AAAA,UACN,sCAAsC,WAAW;AAAA,UACjD;AAAA,QACF;AAAA,MACF;AAEA,YAAM;AAAA,IACR;AAAA,EACF;AACF;","names":[]}
@@ -1,116 +0,0 @@
1
- /**
2
- * Internal distributed nonce manager for atomic transaction nonce assignment.
3
- *
4
- * @internal
5
- * @module
6
- */
7
- import type { PublicClient, WalletClient, Address, Hash } from "viem";
8
- import type { IAtomicStore } from "../types/atomicStore";
9
- /**
10
- * Configuration for the distributed nonce manager.
11
- *
12
- * @internal
13
- */
14
- export interface NonceManagerConfig {
15
- /** Atomic store for distributed coordination */
16
- atomicStore: IAtomicStore;
17
- /** Public client for blockchain queries */
18
- publicClient: PublicClient;
19
- /** TTL for nonce locks in seconds (default: 5) */
20
- lockTTL?: number;
21
- /** Maximum retries to acquire lock (default: 50) */
22
- maxLockRetries?: number;
23
- /** Delay between lock retries in milliseconds (default: 100) */
24
- lockRetryDelay?: number;
25
- }
26
- /**
27
- * Internal nonce manager that coordinates distributed nonce assignment.
28
- *
29
- * @internal
30
- * @remarks
31
- * This class implements sophisticated logic for atomic nonce assignment
32
- * in distributed environments. It uses the provided IAtomicStore to
33
- * coordinate between multiple instances and prevent nonce conflicts.
34
- *
35
- * Key features:
36
- * - Store-specific optimizations when available (e.g., Redis Lua scripts)
37
- * - Fallback to distributed locking for generic stores
38
- * - Syncing with blockchain pending count
39
- * - Nonce gap prevention
40
- * - Nonce burning capability for stuck transactions
41
- */
42
- export declare class DistributedNonceManager {
43
- private readonly store;
44
- private readonly publicClient;
45
- private readonly lockTTL;
46
- private readonly maxLockRetries;
47
- private readonly lockRetryDelay;
48
- constructor(config: NonceManagerConfig);
49
- /**
50
- * Atomically assigns the next available nonce for an address.
51
- *
52
- * @remarks
53
- * This method uses two strategies depending on the atomic store capabilities:
54
- * 1. If the store provides atomicAssignNonce (store-specific optimization),
55
- * it uses that for maximum reliability and performance
56
- * 2. Otherwise, it falls back to the lock-based approach:
57
- * - Acquires a distributed lock to prevent race conditions
58
- * - Queries the blockchain for the current pending nonce
59
- * - Syncs the stored nonce if blockchain is ahead
60
- * - Atomically increments and returns the next nonce
61
- * - Releases the lock
62
- *
63
- * @param address - The address to assign a nonce for
64
- * @param chainId - The chain ID for the network
65
- * @returns The assigned nonce, or null if lock acquisition fails
66
- */
67
- assignNonce(address: Address, chainId: number): Promise<number | null>;
68
- /**
69
- * Resets the nonce counter for an address.
70
- *
71
- * @remarks
72
- * Use with caution - should only be called when you're certain
73
- * no transactions are pending. This is useful for recovery from
74
- * stuck states.
75
- *
76
- * @param address - The address to reset nonce for
77
- * @param chainId - The chain ID for the network
78
- */
79
- resetNonce(address: Address, chainId: number): Promise<void>;
80
- /**
81
- * Gets the current nonce state for monitoring/debugging.
82
- *
83
- * @param address - The address to check
84
- * @param chainId - The chain ID for the network
85
- * @returns Current nonce state information
86
- */
87
- getNonceState(address: Address, chainId: number): Promise<{
88
- lastUsed: number;
89
- blockchainPending: number;
90
- blockchainConfirmed: number;
91
- }>;
92
- /**
93
- * Helper to acquire lock with retries.
94
- *
95
- * @internal
96
- */
97
- private acquireLockWithRetry;
98
- /**
99
- * Burns a stuck nonce by sending a minimal self-transfer with higher gas.
100
- *
101
- * @remarks
102
- * This method implements Vana App's production nonce burning strategy.
103
- * It sends a zero-value transaction to the same address with elevated gas
104
- * to replace a stuck transaction and unblock the nonce queue.
105
- *
106
- * Ported from apps/web/app/api/relay/route.ts (Vana App production code)
107
- *
108
- * @param walletClient - The wallet client to send the burn transaction
109
- * @param nonceToBurn - The nonce to burn
110
- * @param address - The address whose nonce to burn
111
- * @param chainId - The chain ID for the network
112
- * @param gasMultiplier - Multiplier for gas prices (default: 1.5)
113
- * @returns The transaction hash of the burn transaction
114
- */
115
- burnNonce(walletClient: WalletClient, nonceToBurn: number, address: Address, chainId: number, gasMultiplier?: number): Promise<Hash>;
116
- }