@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,280 +0,0 @@
1
- import { hasNonceSupport } from "../types/atomicStore";
2
- class DistributedNonceManager {
3
- store;
4
- publicClient;
5
- lockTTL;
6
- maxLockRetries;
7
- lockRetryDelay;
8
- constructor(config) {
9
- this.store = config.atomicStore;
10
- this.publicClient = config.publicClient;
11
- this.lockTTL = config.lockTTL ?? 5;
12
- this.maxLockRetries = config.maxLockRetries ?? 50;
13
- this.lockRetryDelay = config.lockRetryDelay ?? 100;
14
- }
15
- /**
16
- * Atomically assigns the next available nonce for an address.
17
- *
18
- * @remarks
19
- * This method uses two strategies depending on the atomic store capabilities:
20
- * 1. If the store provides atomicAssignNonce (store-specific optimization),
21
- * it uses that for maximum reliability and performance
22
- * 2. Otherwise, it falls back to the lock-based approach:
23
- * - Acquires a distributed lock to prevent race conditions
24
- * - Queries the blockchain for the current pending nonce
25
- * - Syncs the stored nonce if blockchain is ahead
26
- * - Atomically increments and returns the next nonce
27
- * - Releases the lock
28
- *
29
- * @param address - The address to assign a nonce for
30
- * @param chainId - The chain ID for the network
31
- * @returns The assigned nonce, or null if lock acquisition fails
32
- */
33
- async assignNonce(address, chainId) {
34
- const lastUsedKey = `nonce:${chainId}:${address}:lastUsed`;
35
- const lockKey = `nonce:${chainId}:${address}:lock`;
36
- if (hasNonceSupport(this.store)) {
37
- try {
38
- const pendingCount = await this.publicClient.getTransactionCount({
39
- address,
40
- blockTag: "pending"
41
- });
42
- const nonce = await this.store.atomicAssignNonce(
43
- lastUsedKey,
44
- pendingCount
45
- );
46
- console.log(
47
- `[NonceManager] Assigned nonce ${nonce} for ${address} on chain ${chainId} (using store optimization)`
48
- );
49
- return nonce;
50
- } catch (error) {
51
- console.error(
52
- "[NonceManager] Error during optimized nonce assignment:",
53
- error
54
- );
55
- throw error;
56
- }
57
- }
58
- let lockAcquired = false;
59
- let retries = 0;
60
- let acquiredLockId = null;
61
- while (!lockAcquired && retries < this.maxLockRetries) {
62
- acquiredLockId = await this.store.acquireLock(lockKey, this.lockTTL);
63
- lockAcquired = acquiredLockId !== null;
64
- if (lockAcquired && acquiredLockId) {
65
- try {
66
- const pendingCount = await this.publicClient.getTransactionCount({
67
- address,
68
- blockTag: "pending"
69
- });
70
- const blockchainPending = pendingCount === 0 ? -1 : pendingCount - 1;
71
- const currentLastUsedStr = await this.store.get(lastUsedKey);
72
- const currentLastUsed = currentLastUsedStr ? parseInt(currentLastUsedStr) : -1;
73
- if (blockchainPending > currentLastUsed) {
74
- await this.store.set(lastUsedKey, blockchainPending.toString());
75
- console.log(
76
- `[NonceManager] Synced nonce for ${address} on chain ${chainId}: ${currentLastUsed} -> ${blockchainPending}`
77
- );
78
- }
79
- const nextNonce = await this.store.incr(lastUsedKey);
80
- console.log(
81
- `[NonceManager] Assigned nonce ${nextNonce} for ${address} on chain ${chainId}`
82
- );
83
- if (this.store.setWithTTL) {
84
- const assignmentKey = `nonce:${chainId}:${address}:assignment:${nextNonce}`;
85
- const metadata = {
86
- nonce: nextNonce,
87
- assignedAt: Date.now(),
88
- address,
89
- chainId
90
- };
91
- await this.store.setWithTTL(
92
- assignmentKey,
93
- JSON.stringify(metadata),
94
- 3600
95
- );
96
- }
97
- return nextNonce;
98
- } catch (error) {
99
- console.error("[NonceManager] Error during nonce assignment:", error);
100
- throw error;
101
- } finally {
102
- await this.store.releaseLock(lockKey, acquiredLockId);
103
- }
104
- } else {
105
- retries++;
106
- if (retries < this.maxLockRetries) {
107
- const delay = Math.min(
108
- this.lockRetryDelay * Math.pow(1.5, retries - 1),
109
- 5e3
110
- // Cap at 5 seconds
111
- );
112
- await new Promise((resolve) => setTimeout(resolve, delay));
113
- }
114
- }
115
- }
116
- console.error(
117
- `[NonceManager] Failed to acquire lock for ${address} after ${this.maxLockRetries} attempts`
118
- );
119
- return null;
120
- }
121
- /**
122
- * Resets the nonce counter for an address.
123
- *
124
- * @remarks
125
- * Use with caution - should only be called when you're certain
126
- * no transactions are pending. This is useful for recovery from
127
- * stuck states.
128
- *
129
- * @param address - The address to reset nonce for
130
- * @param chainId - The chain ID for the network
131
- */
132
- async resetNonce(address, chainId) {
133
- const lastUsedKey = `nonce:${chainId}:${address}:lastUsed`;
134
- const lockKey = `nonce:${chainId}:${address}:lock`;
135
- const lockId = await this.acquireLockWithRetry(lockKey);
136
- if (!lockId) {
137
- throw new Error("Failed to acquire lock for nonce reset");
138
- }
139
- try {
140
- const confirmedCount = await this.publicClient.getTransactionCount({
141
- address,
142
- blockTag: "latest"
143
- });
144
- const resetValue = confirmedCount === 0 ? -1 : confirmedCount - 1;
145
- await this.store.set(lastUsedKey, resetValue.toString());
146
- console.log(
147
- `[NonceManager] Reset nonce for ${address} on chain ${chainId} to ${resetValue}`
148
- );
149
- } finally {
150
- await this.store.releaseLock(lockKey, lockId);
151
- }
152
- }
153
- /**
154
- * Gets the current nonce state for monitoring/debugging.
155
- *
156
- * @param address - The address to check
157
- * @param chainId - The chain ID for the network
158
- * @returns Current nonce state information
159
- */
160
- async getNonceState(address, chainId) {
161
- const lastUsedKey = `nonce:${chainId}:${address}:lastUsed`;
162
- const lastUsedStr = await this.store.get(lastUsedKey);
163
- const lastUsed = lastUsedStr ? parseInt(lastUsedStr) : -1;
164
- const [pendingCount, confirmedCount] = await Promise.all([
165
- this.publicClient.getTransactionCount({
166
- address,
167
- blockTag: "pending"
168
- }),
169
- this.publicClient.getTransactionCount({
170
- address,
171
- blockTag: "latest"
172
- })
173
- ]);
174
- return {
175
- lastUsed,
176
- blockchainPending: pendingCount === 0 ? -1 : pendingCount - 1,
177
- blockchainConfirmed: confirmedCount === 0 ? -1 : confirmedCount - 1
178
- };
179
- }
180
- /**
181
- * Helper to acquire lock with retries.
182
- *
183
- * @internal
184
- */
185
- async acquireLockWithRetry(lockKey) {
186
- let retries = 0;
187
- while (retries < this.maxLockRetries) {
188
- const lockId = await this.store.acquireLock(lockKey, this.lockTTL);
189
- if (lockId) {
190
- return lockId;
191
- }
192
- retries++;
193
- if (retries < this.maxLockRetries) {
194
- const delay = Math.min(
195
- this.lockRetryDelay * Math.pow(1.5, retries - 1),
196
- 5e3
197
- );
198
- await new Promise((resolve) => setTimeout(resolve, delay));
199
- }
200
- }
201
- return null;
202
- }
203
- /**
204
- * Burns a stuck nonce by sending a minimal self-transfer with higher gas.
205
- *
206
- * @remarks
207
- * This method implements Vana App's production nonce burning strategy.
208
- * It sends a zero-value transaction to the same address with elevated gas
209
- * to replace a stuck transaction and unblock the nonce queue.
210
- *
211
- * Ported from apps/web/app/api/relay/route.ts (Vana App production code)
212
- *
213
- * @param walletClient - The wallet client to send the burn transaction
214
- * @param nonceToBurn - The nonce to burn
215
- * @param address - The address whose nonce to burn
216
- * @param chainId - The chain ID for the network
217
- * @param gasMultiplier - Multiplier for gas prices (default: 1.5)
218
- * @returns The transaction hash of the burn transaction
219
- */
220
- async burnNonce(walletClient, nonceToBurn, address, chainId, gasMultiplier = 1.5) {
221
- try {
222
- const fees = await this.publicClient.estimateFeesPerGas();
223
- const bump = (x) => x * BigInt(Math.floor(gasMultiplier * 100)) / 100n;
224
- const newMaxFee = bump(fees.maxFeePerGas);
225
- const newMaxPriorityFee = bump(fees.maxPriorityFeePerGas);
226
- console.log(
227
- `[NonceManager] Burning stuck nonce ${nonceToBurn} with high gas price: maxFee ${newMaxFee}, maxPriorityFee ${newMaxPriorityFee}`
228
- );
229
- const burnTx = await walletClient.sendTransaction({
230
- account: walletClient.account,
231
- // WalletClient should have an account
232
- to: address,
233
- // Self-transfer
234
- value: 0n,
235
- nonce: nonceToBurn,
236
- gas: 21000n,
237
- // Minimal gas for transfer
238
- maxFeePerGas: newMaxFee,
239
- maxPriorityFeePerGas: newMaxPriorityFee,
240
- chain: {
241
- id: chainId,
242
- name: chainId === 14800 ? "Vana Moksha" : "Vana Mainnet",
243
- network: chainId === 14800 ? "moksha" : "mainnet",
244
- nativeCurrency: { name: "VANA", symbol: "VANA", decimals: 18 },
245
- rpcUrls: {
246
- default: {
247
- http: [
248
- chainId === 14800 ? "https://rpc.moksha.vana.org" : "https://rpc.vana.org"
249
- ]
250
- },
251
- public: {
252
- http: [
253
- chainId === 14800 ? "https://rpc.moksha.vana.org" : "https://rpc.vana.org"
254
- ]
255
- }
256
- }
257
- }
258
- });
259
- console.log(
260
- `[NonceManager] Burn nonce ${nonceToBurn} transaction sent: ${burnTx}`
261
- );
262
- return burnTx;
263
- } catch (error) {
264
- const errorMessage = error instanceof Error ? error.message : "Unknown error";
265
- if (errorMessage.includes("nonce too low") || errorMessage.includes("underpriced") || errorMessage.includes("already known")) {
266
- console.log(`[NonceManager] Nonce ${nonceToBurn} was already used`);
267
- } else {
268
- console.error(
269
- `[NonceManager] Error burning nonce ${nonceToBurn}:`,
270
- error
271
- );
272
- }
273
- throw error;
274
- }
275
- }
276
- }
277
- export {
278
- DistributedNonceManager
279
- };
280
- //# sourceMappingURL=nonceManager.js.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":"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","names":[]}
@@ -1,292 +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 pollingManager_exports = {};
20
- __export(pollingManager_exports, {
21
- PollingManager: () => PollingManager
22
- });
23
- module.exports = __toCommonJS(pollingManager_exports);
24
- var import_errors = require("../errors");
25
- const DEFAULT_POLLING_OPTIONS = {
26
- timeout: 3e5,
27
- // 5 minutes
28
- initialInterval: 1e3,
29
- // 1 second
30
- maxInterval: 1e4,
31
- // 10 seconds
32
- backoffMultiplier: 1.5,
33
- // 1s -> 1.5s -> 2.25s -> 3.375s -> 5s -> 7.5s -> 10s
34
- jitter: 0.2
35
- // 20% randomization
36
- };
37
- class PollingManager {
38
- constructor(relayerCallback) {
39
- this.relayerCallback = relayerCallback;
40
- }
41
- abortController;
42
- timeoutId;
43
- pollIntervalId;
44
- /**
45
- * Starts polling for an operation's status.
46
- *
47
- * @param operationId - The operation ID to poll for
48
- * @param options - Polling configuration and callbacks
49
- * @returns Promise that resolves when operation completes or fails
50
- * @throws TransactionPendingError if polling times out
51
- * @throws Error if operation fails or is cancelled
52
- */
53
- async startPolling(operationId, options = {}) {
54
- const context = {
55
- operationId,
56
- signal: options.signal,
57
- onStatusUpdate: options.onStatusUpdate,
58
- relayerCallback: this.relayerCallback,
59
- options: {
60
- ...DEFAULT_POLLING_OPTIONS,
61
- ...options
62
- }
63
- };
64
- this.abortController = new AbortController();
65
- if (context.signal) {
66
- context.signal.addEventListener("abort", () => {
67
- this.abortController?.abort();
68
- });
69
- }
70
- const timeoutPromise = this.createTimeoutPromise(context);
71
- const pollingPromise = this.poll(context);
72
- try {
73
- const result = await Promise.race([pollingPromise, timeoutPromise]);
74
- this.cleanup();
75
- return result;
76
- } catch (error) {
77
- this.cleanup();
78
- if (error instanceof Error && !error.message.includes("operationId")) {
79
- throw new import_errors.TransactionPendingError(
80
- operationId,
81
- error.message,
82
- this.getLastKnownStatus(context)
83
- );
84
- }
85
- throw error;
86
- }
87
- }
88
- /**
89
- * Main polling loop with exponential backoff.
90
- *
91
- * @internal
92
- */
93
- async poll(context) {
94
- let currentInterval = context.options.initialInterval;
95
- let lastStatus = null;
96
- let retryCount = 0;
97
- while (!this.abortController?.signal.aborted) {
98
- try {
99
- const response = await this.checkStatus(context);
100
- const status = this.mapResponseToStatus(response, context.operationId);
101
- if (this.hasStatusChanged(lastStatus, status)) {
102
- context.onStatusUpdate?.(status);
103
- lastStatus = status;
104
- }
105
- if (status.type === "confirmed") {
106
- return {
107
- hash: status.hash,
108
- receipt: status.receipt
109
- };
110
- }
111
- if (status.type === "failed") {
112
- throw new Error(status.error);
113
- }
114
- retryCount = 0;
115
- } catch (error) {
116
- if (this.isRetryableError(error)) {
117
- retryCount++;
118
- if (retryCount > 5) {
119
- const errorMessage = error instanceof Error ? error.message : String(error);
120
- throw new Error(
121
- `Failed to poll after ${retryCount} attempts: ${errorMessage}`
122
- );
123
- }
124
- } else {
125
- throw error;
126
- }
127
- }
128
- await this.wait(this.calculateNextInterval(currentInterval, context));
129
- currentInterval = Math.min(
130
- currentInterval * context.options.backoffMultiplier,
131
- context.options.maxInterval
132
- );
133
- }
134
- throw new Error("Polling cancelled");
135
- }
136
- /**
137
- * Checks the current status of an operation.
138
- *
139
- * @internal
140
- */
141
- async checkStatus(context) {
142
- const request = {
143
- type: "status_check",
144
- operationId: context.operationId
145
- };
146
- return await context.relayerCallback(request);
147
- }
148
- /**
149
- * Maps relayer response to operation status.
150
- *
151
- * @internal
152
- */
153
- mapResponseToStatus(response, operationId) {
154
- switch (response.type) {
155
- case "pending":
156
- return { type: "pending", operationId };
157
- case "submitted":
158
- return { type: "submitted", hash: response.hash };
159
- case "confirmed":
160
- return {
161
- type: "confirmed",
162
- hash: response.hash,
163
- receipt: response.receipt
164
- };
165
- case "error":
166
- return {
167
- type: "failed",
168
- error: response.error,
169
- operationId
170
- };
171
- case "direct":
172
- const result = response.result;
173
- if (result?.status === "queued") {
174
- return {
175
- type: "queued",
176
- position: result.position,
177
- estimatedWait: result.estimatedWait
178
- };
179
- }
180
- if (result?.status === "processing") {
181
- return { type: "processing" };
182
- }
183
- return { type: "pending", operationId };
184
- default:
185
- return { type: "pending", operationId };
186
- }
187
- }
188
- /**
189
- * Determines if status has changed meaningfully.
190
- *
191
- * @internal
192
- */
193
- hasStatusChanged(oldStatus, newStatus) {
194
- if (!oldStatus) return true;
195
- if (oldStatus.type !== newStatus.type) return true;
196
- if (oldStatus.type === "queued" && newStatus.type === "queued" && oldStatus.position !== newStatus.position) {
197
- return true;
198
- }
199
- return false;
200
- }
201
- /**
202
- * Calculates next polling interval with jitter.
203
- *
204
- * @internal
205
- */
206
- calculateNextInterval(baseInterval, context) {
207
- const jitterRange = baseInterval * context.options.jitter;
208
- const jitter = (Math.random() - 0.5) * 2 * jitterRange;
209
- return Math.max(0, baseInterval + jitter);
210
- }
211
- /**
212
- * Waits for specified duration or until aborted.
213
- *
214
- * @internal
215
- */
216
- async wait(ms) {
217
- return new Promise((resolve, reject) => {
218
- const timeoutId = setTimeout(resolve, ms);
219
- this.abortController?.signal.addEventListener("abort", () => {
220
- clearTimeout(timeoutId);
221
- reject(new Error("Polling cancelled"));
222
- });
223
- this.pollIntervalId = timeoutId;
224
- });
225
- }
226
- /**
227
- * Creates a timeout promise that rejects after configured duration.
228
- *
229
- * @internal
230
- */
231
- createTimeoutPromise(context) {
232
- return new Promise((_, reject) => {
233
- this.timeoutId = setTimeout(() => {
234
- reject(
235
- new import_errors.TransactionPendingError(
236
- context.operationId,
237
- `Polling timeout after ${context.options.timeout}ms`,
238
- this.getLastKnownStatus(context)
239
- )
240
- );
241
- }, context.options.timeout);
242
- });
243
- }
244
- /**
245
- * Determines if an error is retryable.
246
- *
247
- * @internal
248
- */
249
- isRetryableError(error) {
250
- if (!(error instanceof Error)) return false;
251
- const message = error.message.toLowerCase();
252
- if (message.includes("network") || message.includes("fetch") || message.includes("timeout") || message.includes("econnrefused") || message.includes("enotfound")) {
253
- return true;
254
- }
255
- if (message.includes("500") || message.includes("502") || message.includes("503") || message.includes("504")) {
256
- return true;
257
- }
258
- return false;
259
- }
260
- /**
261
- * Gets last known status for error reporting.
262
- *
263
- * @internal
264
- */
265
- getLastKnownStatus(context) {
266
- return { type: "pending", operationId: context.operationId };
267
- }
268
- /**
269
- * Cleans up resources.
270
- *
271
- * @internal
272
- */
273
- cleanup() {
274
- if (this.timeoutId) {
275
- clearTimeout(this.timeoutId);
276
- this.timeoutId = void 0;
277
- }
278
- if (this.pollIntervalId) {
279
- clearTimeout(this.pollIntervalId);
280
- this.pollIntervalId = void 0;
281
- }
282
- if (this.abortController) {
283
- this.abortController.abort();
284
- this.abortController = void 0;
285
- }
286
- }
287
- }
288
- // Annotate the CommonJS export names for ESM import in node:
289
- 0 && (module.exports = {
290
- PollingManager
291
- });
292
- //# sourceMappingURL=pollingManager.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/core/pollingManager.ts"],"sourcesContent":["/**\n * Internal polling manager for asynchronous relayer operations.\n *\n * @internal\n * @remarks\n * This module handles client-side polling for long-running relayer operations\n * with exponential backoff, jitter, and cancellation support.\n */\n\nimport type {\n UnifiedRelayerRequest,\n UnifiedRelayerResponse,\n} from \"../types/relayer\";\nimport type { OperationStatus } from \"../types/options\";\nimport type { Hash, TransactionReceipt } from \"viem\";\nimport { TransactionPendingError } from \"../errors\";\n\n/**\n * Configuration options for polling behavior.\n *\n * @internal\n */\nexport interface PollingOptions {\n /** Total timeout in milliseconds before giving up (default: 300000ms = 5 min) */\n timeout?: number;\n /** Initial polling interval in milliseconds (default: 1000ms) */\n initialInterval?: number;\n /** Maximum polling interval in milliseconds (default: 10000ms) */\n maxInterval?: number;\n /** Backoff multiplier for each retry (default: 1.5) */\n backoffMultiplier?: number;\n /** Jitter factor to prevent thundering herd (default: 0.2 = 20%) */\n jitter?: number;\n}\n\n/**\n * Context for a polling operation.\n *\n * @internal\n */\ninterface PollingContext {\n operationId: string;\n signal?: AbortSignal;\n onStatusUpdate?: (status: OperationStatus) => void;\n relayerCallback: (\n request: UnifiedRelayerRequest,\n ) => Promise<UnifiedRelayerResponse>;\n options: Required<PollingOptions>;\n}\n\n/**\n * Default polling configuration based on production load testing.\n *\n * @internal\n */\nconst DEFAULT_POLLING_OPTIONS: Required<PollingOptions> = {\n timeout: 300000, // 5 minutes\n initialInterval: 1000, // 1 second\n maxInterval: 10000, // 10 seconds\n backoffMultiplier: 1.5, // 1s -> 1.5s -> 2.25s -> 3.375s -> 5s -> 7.5s -> 10s\n jitter: 0.2, // 20% randomization\n};\n\n/**\n * Internal polling manager that handles asynchronous relayer operations.\n *\n * @internal\n * @remarks\n * This class implements exponential backoff with jitter to prevent server\n * overload while maintaining responsive status updates. It's designed to\n * be resilient to network failures and browser tab closures.\n */\nexport class PollingManager {\n private abortController?: AbortController;\n private timeoutId?: NodeJS.Timeout | number;\n private pollIntervalId?: NodeJS.Timeout | number;\n\n constructor(\n private readonly relayerCallback: (\n request: UnifiedRelayerRequest,\n ) => Promise<UnifiedRelayerResponse>,\n ) {}\n\n /**\n * Starts polling for an operation's status.\n *\n * @param operationId - The operation ID to poll for\n * @param options - Polling configuration and callbacks\n * @returns Promise that resolves when operation completes or fails\n * @throws TransactionPendingError if polling times out\n * @throws Error if operation fails or is cancelled\n */\n async startPolling(\n operationId: string,\n options: {\n signal?: AbortSignal;\n onStatusUpdate?: (status: OperationStatus) => void;\n } & Partial<PollingOptions> = {},\n ): Promise<{ hash: Hash; receipt?: TransactionReceipt }> {\n const context: PollingContext = {\n operationId,\n signal: options.signal,\n onStatusUpdate: options.onStatusUpdate,\n relayerCallback: this.relayerCallback,\n options: {\n ...DEFAULT_POLLING_OPTIONS,\n ...options,\n },\n };\n\n // Set up abort handling\n this.abortController = new AbortController();\n if (context.signal) {\n context.signal.addEventListener(\"abort\", () => {\n this.abortController?.abort();\n });\n }\n\n // Set up timeout\n const timeoutPromise = this.createTimeoutPromise(context);\n\n // Start polling\n const pollingPromise = this.poll(context);\n\n try {\n // Race between polling completion and timeout\n const result = await Promise.race([pollingPromise, timeoutPromise]);\n\n // Clean up\n this.cleanup();\n\n return result;\n } catch (error) {\n // Clean up on error\n this.cleanup();\n\n // Preserve operationId in error for recovery\n if (error instanceof Error && !error.message.includes(\"operationId\")) {\n throw new TransactionPendingError(\n operationId,\n error.message,\n this.getLastKnownStatus(context),\n );\n }\n\n throw error;\n }\n }\n\n /**\n * Main polling loop with exponential backoff.\n *\n * @internal\n */\n private async poll(\n context: PollingContext,\n ): Promise<{ hash: Hash; receipt?: TransactionReceipt }> {\n let currentInterval = context.options.initialInterval;\n let lastStatus: OperationStatus | null = null;\n let retryCount = 0;\n\n while (!this.abortController?.signal.aborted) {\n try {\n // Check operation status\n const response = await this.checkStatus(context);\n\n // Process response\n const status = this.mapResponseToStatus(response, context.operationId);\n\n // Notify if status changed\n if (this.hasStatusChanged(lastStatus, status)) {\n context.onStatusUpdate?.(status);\n lastStatus = status;\n }\n\n // Check for terminal states\n if (status.type === \"confirmed\") {\n return {\n hash: status.hash,\n receipt: status.receipt as TransactionReceipt | undefined,\n };\n }\n\n if (status.type === \"failed\") {\n throw new Error(status.error);\n }\n\n // Reset retry count on successful poll\n retryCount = 0;\n } catch (error) {\n // Network errors are retryable\n if (this.isRetryableError(error)) {\n retryCount++;\n if (retryCount > 5) {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n throw new Error(\n `Failed to poll after ${retryCount} attempts: ${errorMessage}`,\n );\n }\n } else {\n // Non-retryable errors should bubble up\n throw error;\n }\n }\n\n // Wait before next poll with exponential backoff\n await this.wait(this.calculateNextInterval(currentInterval, context));\n\n // Increase interval for next iteration\n currentInterval = Math.min(\n currentInterval * context.options.backoffMultiplier,\n context.options.maxInterval,\n );\n }\n\n // Aborted\n throw new Error(\"Polling cancelled\");\n }\n\n /**\n * Checks the current status of an operation.\n *\n * @internal\n */\n private async checkStatus(\n context: PollingContext,\n ): Promise<UnifiedRelayerResponse> {\n const request: UnifiedRelayerRequest = {\n type: \"status_check\",\n operationId: context.operationId,\n };\n\n return await context.relayerCallback(request);\n }\n\n /**\n * Maps relayer response to operation status.\n *\n * @internal\n */\n private mapResponseToStatus(\n response: UnifiedRelayerResponse,\n operationId: string,\n ): OperationStatus {\n switch (response.type) {\n case \"pending\":\n return { type: \"pending\", operationId };\n\n case \"submitted\":\n return { type: \"submitted\", hash: response.hash };\n\n case \"confirmed\":\n return {\n type: \"confirmed\",\n hash: response.hash,\n receipt: response.receipt,\n };\n\n case \"error\":\n return {\n type: \"failed\",\n error: response.error,\n operationId,\n };\n\n case \"direct\":\n // Direct responses during polling might include queue info\n const result = response.result as any;\n if (result?.status === \"queued\") {\n return {\n type: \"queued\",\n position: result.position,\n estimatedWait: result.estimatedWait,\n };\n }\n if (result?.status === \"processing\") {\n return { type: \"processing\" };\n }\n // Fallback\n return { type: \"pending\", operationId };\n\n default:\n return { type: \"pending\", operationId };\n }\n }\n\n /**\n * Determines if status has changed meaningfully.\n *\n * @internal\n */\n private hasStatusChanged(\n oldStatus: OperationStatus | null,\n newStatus: OperationStatus,\n ): boolean {\n if (!oldStatus) return true;\n\n // Check type change\n if (oldStatus.type !== newStatus.type) return true;\n\n // Check queue position change\n if (\n oldStatus.type === \"queued\" &&\n newStatus.type === \"queued\" &&\n oldStatus.position !== newStatus.position\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Calculates next polling interval with jitter.\n *\n * @internal\n */\n private calculateNextInterval(\n baseInterval: number,\n context: PollingContext,\n ): number {\n const jitterRange = baseInterval * context.options.jitter;\n const jitter = (Math.random() - 0.5) * 2 * jitterRange;\n return Math.max(0, baseInterval + jitter);\n }\n\n /**\n * Waits for specified duration or until aborted.\n *\n * @internal\n */\n private async wait(ms: number): Promise<void> {\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(resolve, ms);\n\n // Handle abort\n this.abortController?.signal.addEventListener(\"abort\", () => {\n clearTimeout(timeoutId);\n reject(new Error(\"Polling cancelled\"));\n });\n\n this.pollIntervalId = timeoutId as any;\n });\n }\n\n /**\n * Creates a timeout promise that rejects after configured duration.\n *\n * @internal\n */\n private createTimeoutPromise(context: PollingContext): Promise<never> {\n return new Promise((_, reject) => {\n this.timeoutId = setTimeout(() => {\n reject(\n new TransactionPendingError(\n context.operationId,\n `Polling timeout after ${context.options.timeout}ms`,\n this.getLastKnownStatus(context),\n ),\n );\n }, context.options.timeout) as any;\n });\n }\n\n /**\n * Determines if an error is retryable.\n *\n * @internal\n */\n private isRetryableError(error: unknown): boolean {\n if (!(error instanceof Error)) return false;\n\n const message = error.message.toLowerCase();\n\n // Network errors\n if (\n message.includes(\"network\") ||\n message.includes(\"fetch\") ||\n message.includes(\"timeout\") ||\n message.includes(\"econnrefused\") ||\n message.includes(\"enotfound\")\n ) {\n return true;\n }\n\n // Server errors (5xx)\n if (\n message.includes(\"500\") ||\n message.includes(\"502\") ||\n message.includes(\"503\") ||\n message.includes(\"504\")\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Gets last known status for error reporting.\n *\n * @internal\n */\n private getLastKnownStatus(\n context: PollingContext,\n ): OperationStatus | undefined {\n // In a real implementation, we'd track this\n return { type: \"pending\", operationId: context.operationId };\n }\n\n /**\n * Cleans up resources.\n *\n * @internal\n */\n private cleanup(): void {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId as any);\n this.timeoutId = undefined;\n }\n\n if (this.pollIntervalId) {\n clearTimeout(this.pollIntervalId as any);\n this.pollIntervalId = undefined;\n }\n\n if (this.abortController) {\n this.abortController.abort();\n this.abortController = undefined;\n }\n }\n}\n"],"mappings":"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","names":[]}