@prb/effect-evm 1.0.0-beta.1 → 1.0.0-beta.10

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 (390) hide show
  1. package/DOCS.md +13 -0
  2. package/README.md +4 -0
  3. package/dist/abi/erc165.js.map +1 -1
  4. package/dist/abi/erc20-no-output.js.map +1 -1
  5. package/dist/abi/erc20.js.map +1 -1
  6. package/dist/abi/erc721.js.map +1 -1
  7. package/dist/abi/index.js.map +1 -1
  8. package/dist/balance/index.js.map +1 -1
  9. package/dist/balance/service.js.map +1 -1
  10. package/dist/balance/service.test.integration.d.ts +2 -0
  11. package/dist/balance/service.test.integration.d.ts.map +1 -0
  12. package/dist/balance/service.test.integration.js +289 -0
  13. package/dist/balance/service.test.integration.js.map +1 -0
  14. package/dist/balance/utils.js.map +1 -1
  15. package/dist/block/errors.js.map +1 -1
  16. package/dist/block/index.js.map +1 -1
  17. package/dist/block/service.js.map +1 -1
  18. package/dist/block/service.test.integration.d.ts +2 -0
  19. package/dist/block/service.test.integration.d.ts.map +1 -0
  20. package/dist/block/service.test.integration.js +190 -0
  21. package/dist/block/service.test.integration.js.map +1 -0
  22. package/dist/constants/index.d.ts +0 -4
  23. package/dist/constants/index.d.ts.map +1 -1
  24. package/dist/constants/index.js +1 -5
  25. package/dist/constants/index.js.map +1 -1
  26. package/dist/contract/cross-chain-reader.js.map +1 -1
  27. package/dist/contract/index.js.map +1 -1
  28. package/dist/contract/pipeline/index.js.map +1 -1
  29. package/dist/contract/pipeline/internal/core.d.ts +2 -2
  30. package/dist/contract/pipeline/internal/core.d.ts.map +1 -1
  31. package/dist/contract/pipeline/internal/core.js.map +1 -1
  32. package/dist/contract/pipeline/internal/helpers.js.map +1 -1
  33. package/dist/contract/pipeline/internal/nonce.js.map +1 -1
  34. package/dist/contract/pipeline/internal/prepare.js.map +1 -1
  35. package/dist/contract/pipeline/internal/receipt.d.ts +2 -2
  36. package/dist/contract/pipeline/internal/receipt.d.ts.map +1 -1
  37. package/dist/contract/pipeline/internal/receipt.js +1 -1
  38. package/dist/contract/pipeline/internal/receipt.js.map +1 -1
  39. package/dist/contract/pipeline/live.js.map +1 -1
  40. package/dist/contract/pipeline/service.d.ts +3 -3
  41. package/dist/contract/pipeline/service.d.ts.map +1 -1
  42. package/dist/contract/pipeline/service.js.map +1 -1
  43. package/dist/contract/pipeline/types.d.ts +2 -2
  44. package/dist/contract/pipeline/types.d.ts.map +1 -1
  45. package/dist/contract/pipeline/types.js.map +1 -1
  46. package/dist/contract/pipeline/write-and-track.d.ts.map +1 -1
  47. package/dist/contract/pipeline/write-and-track.js +5 -6
  48. package/dist/contract/pipeline/write-and-track.js.map +1 -1
  49. package/dist/contract/pipeline/write-and-wait.d.ts +1 -1
  50. package/dist/contract/pipeline/write-and-wait.d.ts.map +1 -1
  51. package/dist/contract/pipeline/write-and-wait.js.map +1 -1
  52. package/dist/contract/pipeline.js.map +1 -1
  53. package/dist/contract/reader.js.map +1 -1
  54. package/dist/contract/typed-contract.js.map +1 -1
  55. package/dist/contract/writer.js.map +1 -1
  56. package/dist/core/clients/index.js.map +1 -1
  57. package/dist/core/clients/public-client.js.map +1 -1
  58. package/dist/core/clients/wallet-client.js.map +1 -1
  59. package/dist/core/errors/client.js.map +1 -1
  60. package/dist/core/errors/contract.js.map +1 -1
  61. package/dist/core/errors/erc20.js.map +1 -1
  62. package/dist/core/errors/event.js.map +1 -1
  63. package/dist/core/errors/index.js.map +1 -1
  64. package/dist/core/errors/predicates.js.map +1 -1
  65. package/dist/core/errors/transaction.d.ts +7 -7
  66. package/dist/core/errors/transaction.d.ts.map +1 -1
  67. package/dist/core/errors/transaction.js +2 -2
  68. package/dist/core/errors/transaction.js.map +1 -1
  69. package/dist/core/errors/viem-mapper.d.ts +3 -3
  70. package/dist/core/errors/viem-mapper.d.ts.map +1 -1
  71. package/dist/core/errors/viem-mapper.js +14 -5
  72. package/dist/core/errors/viem-mapper.js.map +1 -1
  73. package/dist/core/index.js.map +1 -1
  74. package/dist/deploy/errors.js.map +1 -1
  75. package/dist/deploy/index.js.map +1 -1
  76. package/dist/deploy/service.d.ts +3 -3
  77. package/dist/deploy/service.d.ts.map +1 -1
  78. package/dist/deploy/service.js.map +1 -1
  79. package/dist/eip7702/erc7579.js.map +1 -1
  80. package/dist/eip7702/errors.d.ts +3 -3
  81. package/dist/eip7702/errors.d.ts.map +1 -1
  82. package/dist/eip7702/errors.js +1 -1
  83. package/dist/eip7702/errors.js.map +1 -1
  84. package/dist/eip7702/index.js.map +1 -1
  85. package/dist/eip7702/service.d.ts +8 -8
  86. package/dist/eip7702/service.d.ts.map +1 -1
  87. package/dist/eip7702/service.js +2 -2
  88. package/dist/eip7702/service.js.map +1 -1
  89. package/dist/ens/ens.d.ts.map +1 -1
  90. package/dist/ens/ens.js +6 -6
  91. package/dist/ens/ens.js.map +1 -1
  92. package/dist/ens/errors.js.map +1 -1
  93. package/dist/ens/index.js.map +1 -1
  94. package/dist/erc20/allowance/core.js.map +1 -1
  95. package/dist/erc20/allowance/index.js.map +1 -1
  96. package/dist/erc20/allowance/no-output.js.map +1 -1
  97. package/dist/erc20/allowance/types.js.map +1 -1
  98. package/dist/erc20/index.d.ts +1 -0
  99. package/dist/erc20/index.d.ts.map +1 -1
  100. package/dist/erc20/index.js +1 -0
  101. package/dist/erc20/index.js.map +1 -1
  102. package/dist/erc20/metadata.d.ts +16 -0
  103. package/dist/erc20/metadata.d.ts.map +1 -0
  104. package/dist/erc20/metadata.js +67 -0
  105. package/dist/erc20/metadata.js.map +1 -0
  106. package/dist/erc721/errors.js.map +1 -1
  107. package/dist/erc721/helpers.js.map +1 -1
  108. package/dist/erc721/index.js.map +1 -1
  109. package/dist/erc721/metadata.js.map +1 -1
  110. package/dist/erc721/service.js.map +1 -1
  111. package/dist/events/backfill.js.map +1 -1
  112. package/dist/events/backfill.test.integration.d.ts +2 -0
  113. package/dist/events/backfill.test.integration.d.ts.map +1 -0
  114. package/dist/events/backfill.test.integration.js +112 -0
  115. package/dist/events/backfill.test.integration.js.map +1 -0
  116. package/dist/events/cursor.js.map +1 -1
  117. package/dist/events/decoder.js.map +1 -1
  118. package/dist/events/index.js.map +1 -1
  119. package/dist/events/reliable-stream-simple.test.integration.d.ts +2 -0
  120. package/dist/events/reliable-stream-simple.test.integration.d.ts.map +1 -0
  121. package/dist/events/reliable-stream-simple.test.integration.js +22 -0
  122. package/dist/events/reliable-stream-simple.test.integration.js.map +1 -0
  123. package/dist/events/reliable-stream.js.map +1 -1
  124. package/dist/events/reliable-stream.test.integration.d.ts +2 -0
  125. package/dist/events/reliable-stream.test.integration.d.ts.map +1 -0
  126. package/dist/events/reliable-stream.test.integration.js +327 -0
  127. package/dist/events/reliable-stream.test.integration.js.map +1 -0
  128. package/dist/events/stream.js.map +1 -1
  129. package/dist/events/stream.test.integration.d.ts +2 -0
  130. package/dist/events/stream.test.integration.d.ts.map +1 -0
  131. package/dist/events/stream.test.integration.js +120 -0
  132. package/dist/events/stream.test.integration.js.map +1 -0
  133. package/dist/gas/errors.js.map +1 -1
  134. package/dist/gas/estimator.d.ts.map +1 -1
  135. package/dist/gas/estimator.js +75 -58
  136. package/dist/gas/estimator.js.map +1 -1
  137. package/dist/gas/index.js.map +1 -1
  138. package/dist/gas/service.d.ts.map +1 -1
  139. package/dist/gas/service.js +14 -2
  140. package/dist/gas/service.js.map +1 -1
  141. package/dist/gas/service.test.integration.d.ts +2 -0
  142. package/dist/gas/service.test.integration.d.ts.map +1 -0
  143. package/dist/gas/service.test.integration.js +152 -0
  144. package/dist/gas/service.test.integration.js.map +1 -0
  145. package/dist/index.js.map +1 -1
  146. package/dist/integrations/react-hooks/convenience/index.js.map +1 -1
  147. package/dist/integrations/react-hooks/internal/error.js.map +1 -1
  148. package/dist/integrations/react-hooks/internal/is-dev.js.map +1 -1
  149. package/dist/integrations/react-hooks/internal/runtime.js.map +1 -1
  150. package/dist/integrations/react-hooks/internal/scoped-run.js.map +1 -1
  151. package/dist/integrations/react-hooks/internal/stable.js.map +1 -1
  152. package/dist/integrations/react-hooks/primitives/use-effect-memo-factory.js.map +1 -1
  153. package/dist/integrations/react-hooks/primitives/use-effect.js.map +1 -1
  154. package/dist/integrations/react-hooks/primitives/use-fork-effect.js.map +1 -1
  155. package/dist/integrations/react-hooks/primitives/use-stream.js.map +1 -1
  156. package/dist/integrations/react-hooks/primitives.js.map +1 -1
  157. package/dist/integrations/react-hooks/provider.js.map +1 -1
  158. package/dist/integrations/react-hooks/wagmi/index.js.map +1 -1
  159. package/dist/integrations/react-hooks/wallet-provider-ref.js.map +1 -1
  160. package/dist/integrations/wagmi/index.js.map +1 -1
  161. package/dist/integrations/wagmi/layers.js.map +1 -1
  162. package/dist/internal/index.js.map +1 -1
  163. package/dist/internal/numbers.js.map +1 -1
  164. package/dist/internal/schedule.js.map +1 -1
  165. package/dist/internal/stream-adapters.js.map +1 -1
  166. package/dist/internal/viem-effect.js.map +1 -1
  167. package/dist/nonce/index.js.map +1 -1
  168. package/dist/nonce/manager.js.map +1 -1
  169. package/dist/nonce/service.js.map +1 -1
  170. package/dist/nonce/service.test.integration.d.ts +2 -0
  171. package/dist/nonce/service.test.integration.d.ts.map +1 -0
  172. package/dist/nonce/service.test.integration.js +141 -0
  173. package/dist/nonce/service.test.integration.js.map +1 -0
  174. package/dist/platform/browser/cursor-store/index.js.map +1 -1
  175. package/dist/platform/browser/cursor-store/local-storage.js.map +1 -1
  176. package/dist/platform/browser/index.js.map +1 -1
  177. package/dist/platform/browser/layers.js.map +1 -1
  178. package/dist/platform/browser/storage/errors.js.map +1 -1
  179. package/dist/platform/browser/storage/index.js.map +1 -1
  180. package/dist/platform/browser/storage/local-storage.js.map +1 -1
  181. package/dist/platform/browser/tx-persistence/index.js.map +1 -1
  182. package/dist/platform/browser/tx-persistence/persistence.js.map +1 -1
  183. package/dist/platform/browser/tx-store/errors.js.map +1 -1
  184. package/dist/platform/browser/tx-store/index.js.map +1 -1
  185. package/dist/platform/browser/tx-store/local-storage.js.map +1 -1
  186. package/dist/platform/browser/tx-store/store.js.map +1 -1
  187. package/dist/platform/browser/tx-store/types.js.map +1 -1
  188. package/dist/presets/index.js.map +1 -1
  189. package/dist/presets/layers.js.map +1 -1
  190. package/dist/presets/transports.js.map +1 -1
  191. package/dist/query/chain-head.js.map +1 -1
  192. package/dist/query/client.js.map +1 -1
  193. package/dist/query/client.test.integration.d.ts +2 -0
  194. package/dist/query/client.test.integration.d.ts.map +1 -0
  195. package/dist/query/client.test.integration.js +94 -0
  196. package/dist/query/client.test.integration.js.map +1 -0
  197. package/dist/query/contract-query.js.map +1 -1
  198. package/dist/query/contract-query.test.integration.d.ts +2 -0
  199. package/dist/query/contract-query.test.integration.d.ts.map +1 -0
  200. package/dist/query/contract-query.test.integration.js +133 -0
  201. package/dist/query/contract-query.test.integration.js.map +1 -0
  202. package/dist/query/index.js.map +1 -1
  203. package/dist/query/multicall-batcher.js.map +1 -1
  204. package/dist/react-hooks/index.d.ts +0 -2
  205. package/dist/react-hooks/index.d.ts.map +1 -1
  206. package/dist/react-hooks/index.js +0 -2
  207. package/dist/react-hooks/index.js.map +1 -1
  208. package/dist/react-hooks/wagmi/index.js.map +1 -1
  209. package/dist/rpc/cache.js.map +1 -1
  210. package/dist/rpc/circuit-breaker.js.map +1 -1
  211. package/dist/rpc/dedup.js.map +1 -1
  212. package/dist/rpc/index.js.map +1 -1
  213. package/dist/rpc/retry.js.map +1 -1
  214. package/dist/rpc/routemesh.js.map +1 -1
  215. package/dist/signature/errors.js.map +1 -1
  216. package/dist/signature/index.js.map +1 -1
  217. package/dist/signature/service.js.map +1 -1
  218. package/dist/signature/service.test.integration.d.ts +2 -0
  219. package/dist/signature/service.test.integration.d.ts.map +1 -0
  220. package/dist/signature/service.test.integration.js +179 -0
  221. package/dist/signature/service.test.integration.js.map +1 -0
  222. package/dist/signature/utils.js.map +1 -1
  223. package/dist/simulation/errors.js.map +1 -1
  224. package/dist/simulation/index.js.map +1 -1
  225. package/dist/simulation/service.js.map +1 -1
  226. package/dist/simulation/tenderly.js.map +1 -1
  227. package/dist/simulation/tenderly.test.integration.d.ts +2 -0
  228. package/dist/simulation/tenderly.test.integration.d.ts.map +1 -0
  229. package/dist/simulation/tenderly.test.integration.js +104 -0
  230. package/dist/simulation/tenderly.test.integration.js.map +1 -0
  231. package/dist/simulation/types.js.map +1 -1
  232. package/dist/subscriptions/block-subscription.js.map +1 -1
  233. package/dist/subscriptions/errors.js.map +1 -1
  234. package/dist/subscriptions/index.js.map +1 -1
  235. package/dist/subscriptions/log-subscription.js.map +1 -1
  236. package/dist/subscriptions/pending-tx.d.ts +1 -1
  237. package/dist/subscriptions/pending-tx.d.ts.map +1 -1
  238. package/dist/subscriptions/pending-tx.js +1 -1
  239. package/dist/subscriptions/pending-tx.js.map +1 -1
  240. package/dist/subscriptions/service.d.ts +2 -2
  241. package/dist/subscriptions/service.d.ts.map +1 -1
  242. package/dist/subscriptions/service.js +4 -4
  243. package/dist/subscriptions/service.js.map +1 -1
  244. package/dist/telemetry/index.js.map +1 -1
  245. package/dist/telemetry/logger.js.map +1 -1
  246. package/dist/telemetry/tracer.d.ts +2 -2
  247. package/dist/telemetry/tracer.js +2 -2
  248. package/dist/telemetry/tracer.js.map +1 -1
  249. package/dist/testing-kit/_fixtures/addresses.js.map +1 -1
  250. package/dist/testing-kit/_fixtures/receipts.js.map +1 -1
  251. package/dist/testing-kit/helpers.js.map +1 -1
  252. package/dist/testing-kit/index.js.map +1 -1
  253. package/dist/testing-kit/mock-balance-service.js.map +1 -1
  254. package/dist/testing-kit/mock-block-service.js.map +1 -1
  255. package/dist/testing-kit/mock-cross-chain-reader.js.map +1 -1
  256. package/dist/testing-kit/mock-deploy-service.js.map +1 -1
  257. package/dist/testing-kit/mock-erc721-service.js.map +1 -1
  258. package/dist/testing-kit/mock-gas-service.js.map +1 -1
  259. package/dist/testing-kit/mock-nonce-service.js.map +1 -1
  260. package/dist/testing-kit/mock-public-client.js.map +1 -1
  261. package/dist/testing-kit/mock-signature-service.js.map +1 -1
  262. package/dist/testing-kit/mock-simulation-service.js.map +1 -1
  263. package/dist/testing-kit/mock-subscription-service.d.ts +2 -2
  264. package/dist/testing-kit/mock-subscription-service.d.ts.map +1 -1
  265. package/dist/testing-kit/mock-subscription-service.js +5 -5
  266. package/dist/testing-kit/mock-subscription-service.js.map +1 -1
  267. package/dist/testing-kit/mock-transfer-service.d.ts +3 -3
  268. package/dist/testing-kit/mock-transfer-service.d.ts.map +1 -1
  269. package/dist/testing-kit/mock-transfer-service.js.map +1 -1
  270. package/dist/testing-kit/mock-wallet-client.js.map +1 -1
  271. package/dist/testing-kit/mock-wallet-provider.js.map +1 -1
  272. package/dist/testing-kit/test-layer.js.map +1 -1
  273. package/dist/transfer/index.js.map +1 -1
  274. package/dist/transfer/service.d.ts +8 -11
  275. package/dist/transfer/service.d.ts.map +1 -1
  276. package/dist/transfer/service.js +32 -13
  277. package/dist/transfer/service.js.map +1 -1
  278. package/dist/tx/fees.d.ts.map +1 -1
  279. package/dist/tx/fees.js +3 -0
  280. package/dist/tx/fees.js.map +1 -1
  281. package/dist/tx/index.js.map +1 -1
  282. package/dist/tx/manager.d.ts +3 -2
  283. package/dist/tx/manager.d.ts.map +1 -1
  284. package/dist/tx/manager.js +232 -216
  285. package/dist/tx/manager.js.map +1 -1
  286. package/dist/tx/manager.test.integration.d.ts +2 -0
  287. package/dist/tx/manager.test.integration.d.ts.map +1 -0
  288. package/dist/tx/manager.test.integration.js +177 -0
  289. package/dist/tx/manager.test.integration.js.map +1 -0
  290. package/dist/tx/policy.d.ts +1 -1
  291. package/dist/tx/policy.d.ts.map +1 -1
  292. package/dist/tx/policy.js.map +1 -1
  293. package/dist/tx/replacement.d.ts +3 -3
  294. package/dist/tx/replacement.d.ts.map +1 -1
  295. package/dist/tx/replacement.js +3 -3
  296. package/dist/tx/replacement.js.map +1 -1
  297. package/dist/tx/tracker.d.ts +6 -6
  298. package/dist/tx/tracker.d.ts.map +1 -1
  299. package/dist/tx/tracker.js +9 -9
  300. package/dist/tx/tracker.js.map +1 -1
  301. package/dist/types/abi.js.map +1 -1
  302. package/dist/types/index.js.map +1 -1
  303. package/dist/types/params.d.ts +1 -1
  304. package/dist/types/params.d.ts.map +1 -1
  305. package/dist/types/params.js.map +1 -1
  306. package/dist/types/tx-overrides.d.ts +1 -1
  307. package/dist/types/tx-overrides.d.ts.map +1 -1
  308. package/dist/types/tx-overrides.js.map +1 -1
  309. package/dist/wagmi/index.js.map +1 -1
  310. package/dist/wagmi/layers.js.map +1 -1
  311. package/dist/wallet/errors.d.ts +3 -3
  312. package/dist/wallet/errors.d.ts.map +1 -1
  313. package/dist/wallet/errors.js +1 -1
  314. package/dist/wallet/errors.js.map +1 -1
  315. package/dist/wallet/index.js.map +1 -1
  316. package/dist/wallet/lifecycle.js.map +1 -1
  317. package/dist/wallet/operations.d.ts +2 -2
  318. package/dist/wallet/operations.d.ts.map +1 -1
  319. package/dist/wallet/operations.js +2 -2
  320. package/dist/wallet/operations.js.map +1 -1
  321. package/dist/wallet/provider-ref.js.map +1 -1
  322. package/dist/wallet/service.d.ts +2 -2
  323. package/dist/wallet/service.d.ts.map +1 -1
  324. package/dist/wallet/service.js.map +1 -1
  325. package/dist/wallet/types.js.map +1 -1
  326. package/package.json +25 -14
  327. package/dist/react-hooks/use-is-safe-multisig.d.ts +0 -2
  328. package/dist/react-hooks/use-is-safe-multisig.d.ts.map +0 -1
  329. package/dist/react-hooks/use-is-safe-multisig.js +0 -44
  330. package/dist/react-hooks/use-is-safe-multisig.js.map +0 -1
  331. package/dist/react-hooks/use-safe-context.d.ts +0 -2
  332. package/dist/react-hooks/use-safe-context.d.ts.map +0 -1
  333. package/dist/react-hooks/use-safe-context.js +0 -41
  334. package/dist/react-hooks/use-safe-context.js.map +0 -1
  335. package/dist/safe/adapter.d.ts +0 -9
  336. package/dist/safe/adapter.d.ts.map +0 -1
  337. package/dist/safe/adapter.js +0 -13
  338. package/dist/safe/adapter.js.map +0 -1
  339. package/dist/safe/detection.d.ts +0 -26
  340. package/dist/safe/detection.d.ts.map +0 -1
  341. package/dist/safe/detection.js +0 -102
  342. package/dist/safe/detection.js.map +0 -1
  343. package/dist/safe/errors.d.ts +0 -79
  344. package/dist/safe/errors.d.ts.map +0 -1
  345. package/dist/safe/errors.js +0 -34
  346. package/dist/safe/errors.js.map +0 -1
  347. package/dist/safe/index.d.ts +0 -8
  348. package/dist/safe/index.d.ts.map +0 -1
  349. package/dist/safe/index.js +0 -6
  350. package/dist/safe/index.js.map +0 -1
  351. package/dist/safe/live.d.ts +0 -8
  352. package/dist/safe/live.d.ts.map +0 -1
  353. package/dist/safe/live.js +0 -250
  354. package/dist/safe/live.js.map +0 -1
  355. package/dist/safe/service.d.ts +0 -26
  356. package/dist/safe/service.d.ts.map +0 -1
  357. package/dist/safe/service.js +0 -4
  358. package/dist/safe/service.js.map +0 -1
  359. package/dist/safe/simulation/abis.d.ts +0 -73
  360. package/dist/safe/simulation/abis.d.ts.map +0 -1
  361. package/dist/safe/simulation/abis.js +0 -61
  362. package/dist/safe/simulation/abis.js.map +0 -1
  363. package/dist/safe/simulation/addresses.d.ts +0 -4
  364. package/dist/safe/simulation/addresses.d.ts.map +0 -1
  365. package/dist/safe/simulation/addresses.js +0 -40
  366. package/dist/safe/simulation/addresses.js.map +0 -1
  367. package/dist/safe/simulation/encoding.d.ts +0 -16
  368. package/dist/safe/simulation/encoding.d.ts.map +0 -1
  369. package/dist/safe/simulation/encoding.js +0 -36
  370. package/dist/safe/simulation/encoding.js.map +0 -1
  371. package/dist/safe/simulation/errors.d.ts +0 -56
  372. package/dist/safe/simulation/errors.d.ts.map +0 -1
  373. package/dist/safe/simulation/errors.js +0 -37
  374. package/dist/safe/simulation/errors.js.map +0 -1
  375. package/dist/safe/simulation/index.d.ts +0 -7
  376. package/dist/safe/simulation/index.d.ts.map +0 -1
  377. package/dist/safe/simulation/index.js +0 -6
  378. package/dist/safe/simulation/index.js.map +0 -1
  379. package/dist/safe/simulation/service.d.ts +0 -14
  380. package/dist/safe/simulation/service.d.ts.map +0 -1
  381. package/dist/safe/simulation/service.js +0 -140
  382. package/dist/safe/simulation/service.js.map +0 -1
  383. package/dist/safe/simulation/types.d.ts +0 -20
  384. package/dist/safe/simulation/types.d.ts.map +0 -1
  385. package/dist/safe/simulation/types.js +0 -2
  386. package/dist/safe/simulation/types.js.map +0 -1
  387. package/dist/safe/types.d.ts +0 -61
  388. package/dist/safe/types.d.ts.map +0 -1
  389. package/dist/safe/types.js +0 -2
  390. package/dist/safe/types.js.map +0 -1
@@ -0,0 +1,190 @@
1
+ import { describe, expect, it } from "@effect/vitest";
2
+ import { Cause, Effect, Exit, Fiber, TestClock } from "effect";
3
+ import { mainnet } from "viem/chains";
4
+ import { BlockNotFoundError, BlockService, BlockTimeoutError } from "../block/index.js";
5
+ import { ClientNotFoundError, TransportError } from "../core/index.js";
6
+ import { makeEffectEvmTestLayer } from "../testing-kit/index.js";
7
+ const DEFAULT_HASH = "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef";
8
+ const DEFAULT_BLOCK = {
9
+ baseFeePerGas: 30000000000n,
10
+ blobGasUsed: 0n,
11
+ difficulty: 0n,
12
+ excessBlobGas: 0n,
13
+ extraData: "0x",
14
+ gasLimit: 30000000n,
15
+ gasUsed: 12000000n,
16
+ hash: DEFAULT_HASH,
17
+ logsBloom: "0x00",
18
+ miner: "0x0000000000000000000000000000000000000000",
19
+ mixHash: DEFAULT_HASH,
20
+ nonce: "0x0000000000000000",
21
+ number: 1000n,
22
+ parentHash: DEFAULT_HASH,
23
+ receiptsRoot: DEFAULT_HASH,
24
+ sealFields: [],
25
+ sha3Uncles: DEFAULT_HASH,
26
+ size: 1024n,
27
+ stateRoot: DEFAULT_HASH,
28
+ timestamp: 1700000000n,
29
+ totalDifficulty: 0n,
30
+ transactions: [],
31
+ transactionsRoot: DEFAULT_HASH,
32
+ uncles: [],
33
+ };
34
+ describe("BlockService (Live)", () => {
35
+ const testLayer = makeEffectEvmTestLayer({
36
+ publicClient: {
37
+ getBlock: (params) => {
38
+ const p = params;
39
+ return Promise.resolve({
40
+ ...DEFAULT_BLOCK,
41
+ hash: p.blockHash ?? DEFAULT_BLOCK.hash,
42
+ number: p.blockNumber ?? DEFAULT_BLOCK.number,
43
+ });
44
+ },
45
+ getBlockNumber: () => Promise.resolve(1000n),
46
+ },
47
+ });
48
+ describe("getBlockNumber", () => {
49
+ it.effect("returns current block number", () => Effect.gen(function* () {
50
+ const service = yield* BlockService;
51
+ const result = yield* service.getBlockNumber({ chainId: mainnet.id });
52
+ expect(result).toBe(1000n);
53
+ }).pipe(Effect.provide(testLayer)));
54
+ it.effect("fails with ClientNotFoundError for unsupported chainId", () => Effect.gen(function* () {
55
+ const service = yield* BlockService;
56
+ const exit = yield* Effect.exit(service.getBlockNumber({ chainId: 999 }));
57
+ expect(Exit.isFailure(exit)).toBe(true);
58
+ if (Exit.isFailure(exit)) {
59
+ const error = Cause.failureOption(exit.cause);
60
+ if (error._tag === "Some") {
61
+ expect(error.value).toBeInstanceOf(ClientNotFoundError);
62
+ }
63
+ }
64
+ }).pipe(Effect.provide(testLayer)));
65
+ it.effect("fails with TransportError (not timeout) on RPC error", () => {
66
+ const failingLayer = makeEffectEvmTestLayer({
67
+ publicClient: {
68
+ getBlockNumber: () => Promise.reject(new Error("boom")),
69
+ },
70
+ });
71
+ return Effect.gen(function* () {
72
+ const service = yield* BlockService;
73
+ const exit = yield* service.getBlockNumber({ chainId: mainnet.id }).pipe(Effect.exit);
74
+ expect(Exit.isFailure(exit)).toBe(true);
75
+ if (Exit.isFailure(exit)) {
76
+ const error = Cause.failureOption(exit.cause);
77
+ expect(error._tag).toBe("Some");
78
+ if (error._tag === "Some") {
79
+ expect(error.value).toBeInstanceOf(TransportError);
80
+ }
81
+ }
82
+ }).pipe(Effect.provide(failingLayer));
83
+ });
84
+ });
85
+ describe("getBlock / getBlockByHash / getBlocks", () => {
86
+ it.effect("returns block by number", () => Effect.gen(function* () {
87
+ const service = yield* BlockService;
88
+ const result = yield* service.getBlock({
89
+ blockNumber: 123n,
90
+ chainId: mainnet.id,
91
+ });
92
+ expect(result.number).toBe(123n);
93
+ }).pipe(Effect.provide(testLayer)));
94
+ it.effect("returns block by tag", () => Effect.gen(function* () {
95
+ const service = yield* BlockService;
96
+ const result = yield* service.getBlock({
97
+ blockTag: "latest",
98
+ chainId: mainnet.id,
99
+ });
100
+ expect(result.hash).toBeDefined();
101
+ }).pipe(Effect.provide(testLayer)));
102
+ it.effect("returns block by hash", () => Effect.gen(function* () {
103
+ const service = yield* BlockService;
104
+ const result = yield* service.getBlockByHash({
105
+ chainId: mainnet.id,
106
+ hash: DEFAULT_HASH,
107
+ });
108
+ expect(result.hash).toBe(DEFAULT_HASH);
109
+ }).pipe(Effect.provide(testLayer)));
110
+ it.effect("returns range of blocks", () => Effect.gen(function* () {
111
+ const service = yield* BlockService;
112
+ const result = yield* service.getBlocks({
113
+ chainId: mainnet.id,
114
+ fromBlock: 10n,
115
+ toBlock: 12n,
116
+ });
117
+ expect(result.map((b) => b.number)).toEqual([10n, 11n, 12n]);
118
+ }).pipe(Effect.provide(testLayer)));
119
+ });
120
+ describe("waitForBlock", () => {
121
+ it.effect("times out with BlockTimeoutError (not misclassified)", () => {
122
+ const current = 0n;
123
+ const layer = makeEffectEvmTestLayer({
124
+ publicClient: {
125
+ getBlockNumber: () => Promise.resolve(current),
126
+ },
127
+ });
128
+ return Effect.gen(function* () {
129
+ const service = yield* BlockService;
130
+ const fiber = yield* Effect.fork(service.waitForBlock({
131
+ blockNumber: 10n,
132
+ chainId: mainnet.id,
133
+ timeout: 2500,
134
+ }));
135
+ yield* TestClock.adjust("3 seconds");
136
+ const exit = yield* Fiber.await(fiber);
137
+ expect(Exit.isFailure(exit)).toBe(true);
138
+ if (Exit.isFailure(exit)) {
139
+ const error = Cause.failureOption(exit.cause);
140
+ expect(error._tag).toBe("Some");
141
+ if (error._tag === "Some") {
142
+ expect(error.value).toBeInstanceOf(BlockTimeoutError);
143
+ }
144
+ }
145
+ }).pipe(Effect.provide(layer));
146
+ });
147
+ it.effect("is interruptible", () => {
148
+ const current = 0n;
149
+ const layer = makeEffectEvmTestLayer({
150
+ publicClient: {
151
+ getBlockNumber: () => Promise.resolve(current),
152
+ },
153
+ });
154
+ return Effect.gen(function* () {
155
+ const service = yield* BlockService;
156
+ const fiber = yield* Effect.fork(service.waitForBlock({
157
+ blockNumber: 10n,
158
+ chainId: mainnet.id,
159
+ timeout: 60_000,
160
+ }));
161
+ yield* Fiber.interrupt(fiber);
162
+ const exit = yield* Fiber.await(fiber);
163
+ expect(Exit.isInterrupted(exit)).toBe(true);
164
+ }).pipe(Effect.provide(layer));
165
+ });
166
+ it.effect("returns BlockNotFoundError when block fetch fails", () => {
167
+ const layer = makeEffectEvmTestLayer({
168
+ publicClient: {
169
+ getBlock: () => Promise.reject(new Error("missing")),
170
+ getBlockNumber: () => Promise.resolve(10n),
171
+ },
172
+ });
173
+ return Effect.gen(function* () {
174
+ const service = yield* BlockService;
175
+ const exit = yield* service
176
+ .waitForBlock({ blockNumber: 10n, chainId: mainnet.id })
177
+ .pipe(Effect.exit);
178
+ expect(Exit.isFailure(exit)).toBe(true);
179
+ if (Exit.isFailure(exit)) {
180
+ const error = Cause.failureOption(exit.cause);
181
+ expect(error._tag).toBe("Some");
182
+ if (error._tag === "Some") {
183
+ expect(error.value).toBeInstanceOf(BlockNotFoundError);
184
+ }
185
+ }
186
+ }).pipe(Effect.provide(layer));
187
+ });
188
+ });
189
+ });
190
+ //# sourceMappingURL=service.test.integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.test.integration.js","sourceRoot":"","sources":["../../src/block/service.test.integration.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from \"@effect/vitest\";\nimport { Cause, Effect, Exit, Fiber, TestClock } from \"effect\";\nimport type { Block, Hash } from \"viem\";\nimport { mainnet } from \"viem/chains\";\nimport { BlockNotFoundError, BlockService, BlockTimeoutError } from \"@/src/block/index.js\";\nimport { ClientNotFoundError, TransportError } from \"@/src/core/index.js\";\nimport { makeEffectEvmTestLayer } from \"@/src/testing-kit/index.js\";\n\nconst DEFAULT_HASH = \"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\" as Hash;\n\nconst DEFAULT_BLOCK: Block = {\n baseFeePerGas: 30000000000n,\n blobGasUsed: 0n,\n difficulty: 0n,\n excessBlobGas: 0n,\n extraData: \"0x\",\n gasLimit: 30000000n,\n gasUsed: 12000000n,\n hash: DEFAULT_HASH,\n logsBloom: \"0x00\",\n miner: \"0x0000000000000000000000000000000000000000\",\n mixHash: DEFAULT_HASH,\n nonce: \"0x0000000000000000\",\n number: 1000n,\n parentHash: DEFAULT_HASH,\n receiptsRoot: DEFAULT_HASH,\n sealFields: [],\n sha3Uncles: DEFAULT_HASH,\n size: 1024n,\n stateRoot: DEFAULT_HASH,\n timestamp: 1700000000n,\n totalDifficulty: 0n,\n transactions: [],\n transactionsRoot: DEFAULT_HASH,\n uncles: [],\n};\n\ndescribe(\"BlockService (Live)\", () => {\n const testLayer = makeEffectEvmTestLayer({\n publicClient: {\n getBlock: (params: unknown) => {\n const p = params as { blockNumber?: bigint; blockHash?: Hash };\n return Promise.resolve({\n ...DEFAULT_BLOCK,\n hash: p.blockHash ?? DEFAULT_BLOCK.hash,\n number: p.blockNumber ?? DEFAULT_BLOCK.number,\n });\n },\n getBlockNumber: () => Promise.resolve(1000n),\n },\n });\n\n describe(\"getBlockNumber\", () => {\n it.effect(\"returns current block number\", () =>\n Effect.gen(function* () {\n const service = yield* BlockService;\n const result = yield* service.getBlockNumber({ chainId: mainnet.id });\n\n expect(result).toBe(1000n);\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"fails with ClientNotFoundError for unsupported chainId\", () =>\n Effect.gen(function* () {\n const service = yield* BlockService;\n const exit = yield* Effect.exit(service.getBlockNumber({ chainId: 999 }));\n\n expect(Exit.isFailure(exit)).toBe(true);\n if (Exit.isFailure(exit)) {\n const error = Cause.failureOption(exit.cause);\n if (error._tag === \"Some\") {\n expect(error.value).toBeInstanceOf(ClientNotFoundError);\n }\n }\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"fails with TransportError (not timeout) on RPC error\", () => {\n const failingLayer = makeEffectEvmTestLayer({\n publicClient: {\n getBlockNumber: () => Promise.reject(new Error(\"boom\")),\n },\n });\n\n return Effect.gen(function* () {\n const service = yield* BlockService;\n const exit = yield* service.getBlockNumber({ chainId: mainnet.id }).pipe(Effect.exit);\n\n expect(Exit.isFailure(exit)).toBe(true);\n if (Exit.isFailure(exit)) {\n const error = Cause.failureOption(exit.cause);\n expect(error._tag).toBe(\"Some\");\n if (error._tag === \"Some\") {\n expect(error.value).toBeInstanceOf(TransportError);\n }\n }\n }).pipe(Effect.provide(failingLayer));\n });\n });\n\n describe(\"getBlock / getBlockByHash / getBlocks\", () => {\n it.effect(\"returns block by number\", () =>\n Effect.gen(function* () {\n const service = yield* BlockService;\n const result = yield* service.getBlock({\n blockNumber: 123n,\n chainId: mainnet.id,\n });\n\n expect(result.number).toBe(123n);\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"returns block by tag\", () =>\n Effect.gen(function* () {\n const service = yield* BlockService;\n const result = yield* service.getBlock({\n blockTag: \"latest\",\n chainId: mainnet.id,\n });\n\n expect(result.hash).toBeDefined();\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"returns block by hash\", () =>\n Effect.gen(function* () {\n const service = yield* BlockService;\n const result = yield* service.getBlockByHash({\n chainId: mainnet.id,\n hash: DEFAULT_HASH,\n });\n\n expect(result.hash).toBe(DEFAULT_HASH);\n }).pipe(Effect.provide(testLayer))\n );\n\n it.effect(\"returns range of blocks\", () =>\n Effect.gen(function* () {\n const service = yield* BlockService;\n const result = yield* service.getBlocks({\n chainId: mainnet.id,\n fromBlock: 10n,\n toBlock: 12n,\n });\n\n expect(result.map((b) => b.number)).toEqual([10n, 11n, 12n]);\n }).pipe(Effect.provide(testLayer))\n );\n });\n\n describe(\"waitForBlock\", () => {\n it.effect(\"times out with BlockTimeoutError (not misclassified)\", () => {\n const current = 0n;\n const layer = makeEffectEvmTestLayer({\n publicClient: {\n getBlockNumber: () => Promise.resolve(current),\n },\n });\n\n return Effect.gen(function* () {\n const service = yield* BlockService;\n const fiber = yield* Effect.fork(\n service.waitForBlock({\n blockNumber: 10n,\n chainId: mainnet.id,\n timeout: 2500,\n })\n );\n\n yield* TestClock.adjust(\"3 seconds\");\n\n const exit = yield* Fiber.await(fiber);\n expect(Exit.isFailure(exit)).toBe(true);\n if (Exit.isFailure(exit)) {\n const error = Cause.failureOption(exit.cause);\n expect(error._tag).toBe(\"Some\");\n if (error._tag === \"Some\") {\n expect(error.value).toBeInstanceOf(BlockTimeoutError);\n }\n }\n }).pipe(Effect.provide(layer));\n });\n\n it.effect(\"is interruptible\", () => {\n const current = 0n;\n const layer = makeEffectEvmTestLayer({\n publicClient: {\n getBlockNumber: () => Promise.resolve(current),\n },\n });\n\n return Effect.gen(function* () {\n const service = yield* BlockService;\n const fiber = yield* Effect.fork(\n service.waitForBlock({\n blockNumber: 10n,\n chainId: mainnet.id,\n timeout: 60_000,\n })\n );\n\n yield* Fiber.interrupt(fiber);\n const exit = yield* Fiber.await(fiber);\n expect(Exit.isInterrupted(exit)).toBe(true);\n }).pipe(Effect.provide(layer));\n });\n\n it.effect(\"returns BlockNotFoundError when block fetch fails\", () => {\n const layer = makeEffectEvmTestLayer({\n publicClient: {\n getBlock: () => Promise.reject(new Error(\"missing\")),\n getBlockNumber: () => Promise.resolve(10n),\n },\n });\n\n return Effect.gen(function* () {\n const service = yield* BlockService;\n const exit = yield* service\n .waitForBlock({ blockNumber: 10n, chainId: mainnet.id })\n .pipe(Effect.exit);\n\n expect(Exit.isFailure(exit)).toBe(true);\n if (Exit.isFailure(exit)) {\n const error = Cause.failureOption(exit.cause);\n expect(error._tag).toBe(\"Some\");\n if (error._tag === \"Some\") {\n expect(error.value).toBeInstanceOf(BlockNotFoundError);\n }\n }\n }).pipe(Effect.provide(layer));\n });\n });\n});\n"]}
@@ -9,8 +9,4 @@ export declare const DEFAULT_POLLING_INTERVAL: number;
9
9
  export declare const DEFAULT_RETRY_DELAY: number;
10
10
  export declare const DEFAULT_SUBSCRIPTION_BASE_DELAY: number;
11
11
  export declare const DEFAULT_CURSOR_FLUSH_DELAY = "250 millis";
12
- export declare const SAFE_POLL_INTERVAL: number;
13
- export declare const SAFE_EXECUTION_TIMEOUT: number;
14
- export declare const SAFE_SIGNATURE_POLL_INTERVAL: number;
15
- export declare const SAFE_SIGNATURE_TIMEOUT: number;
16
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAMhD,eAAO,MAAM,UAAU,SAAS,CAAC;AAOjC,eAAO,MAAM,iBAAiB,QAAkC,CAAC;AAGjE,eAAO,MAAM,uBAAuB,QAAiC,CAAC;AAGtE,eAAO,MAAM,uBAAuB,QAAkC,CAAC;AAGvE,eAAO,MAAM,mBAAmB,QAAkC,CAAC;AAGnE,eAAO,MAAM,0BAA0B,QAAkC,CAAC;AAG1E,eAAO,MAAM,wBAAwB,QAAiC,CAAC;AAGvE,eAAO,MAAM,mBAAmB,QAAkC,CAAC;AAGnE,eAAO,MAAM,+BAA+B,QAAkC,CAAC;AAG/E,eAAO,MAAM,0BAA0B,eAAe,CAAC;AAOvD,eAAO,MAAM,kBAAkB,QAAiC,CAAC;AAGjE,eAAO,MAAM,sBAAsB,QAAiC,CAAC;AAGrE,eAAO,MAAM,4BAA4B,QAAiC,CAAC;AAG3E,eAAO,MAAM,sBAAsB,QAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAMhD,eAAO,MAAM,UAAU,SAAS,CAAC;AAOjC,eAAO,MAAM,iBAAiB,QAAkC,CAAC;AAGjE,eAAO,MAAM,uBAAuB,QAAiC,CAAC;AAGtE,eAAO,MAAM,uBAAuB,QAAkC,CAAC;AAGvE,eAAO,MAAM,mBAAmB,QAAkC,CAAC;AAGnE,eAAO,MAAM,0BAA0B,QAAkC,CAAC;AAG1E,eAAO,MAAM,wBAAwB,QAAiC,CAAC;AAGvE,eAAO,MAAM,mBAAmB,QAAkC,CAAC;AAGnE,eAAO,MAAM,+BAA+B,QAAkC,CAAC;AAG/E,eAAO,MAAM,0BAA0B,eAAe,CAAC"}
@@ -4,14 +4,10 @@ export const MIN_TX_GAS = 21000n;
4
4
  export const DEFAULT_MAX_DELAY = Duration.toMillis("30 seconds");
5
5
  export const DEFAULT_RECEIPT_TIMEOUT = Duration.toMillis("2 minutes");
6
6
  export const DEFAULT_REQUEST_TIMEOUT = Duration.toMillis("10 seconds");
7
- export const DEFAULT_STUCK_TX_MS = Duration.toMillis("45 seconds");
7
+ export const DEFAULT_STUCK_TX_MS = Duration.toMillis("60 minutes");
8
8
  export const DEFAULT_BLOCK_WAIT_TIMEOUT = Duration.toMillis("60 seconds");
9
9
  export const DEFAULT_POLLING_INTERVAL = Duration.toMillis("4 seconds");
10
10
  export const DEFAULT_RETRY_DELAY = Duration.toMillis("150 millis");
11
11
  export const DEFAULT_SUBSCRIPTION_BASE_DELAY = Duration.toMillis("500 millis");
12
12
  export const DEFAULT_CURSOR_FLUSH_DELAY = "250 millis";
13
- export const SAFE_POLL_INTERVAL = Duration.toMillis("3 seconds");
14
- export const SAFE_EXECUTION_TIMEOUT = Duration.toMillis("5 minutes");
15
- export const SAFE_SIGNATURE_POLL_INTERVAL = Duration.toMillis("2 seconds");
16
- export const SAFE_SIGNATURE_TIMEOUT = Duration.toMillis("2 minutes");
17
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAOlC,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAMhD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AAOjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAGtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAG1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGnE,MAAM,CAAC,MAAM,+BAA+B,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAG/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC;AAOvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAGjE,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAGrE,MAAM,CAAC,MAAM,4BAA4B,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAG3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAOlC,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAMhD,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC;AAOjC,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAGtE,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGnE,MAAM,CAAC,MAAM,0BAA0B,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAG1E,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAGvE,MAAM,CAAC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAGnE,MAAM,CAAC,MAAM,+BAA+B,GAAG,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;AAG/E,MAAM,CAAC,MAAM,0BAA0B,GAAG,YAAY,CAAC","sourcesContent":["/**\n * Shared constants used across the codebase.\n */\n\nimport { Duration } from \"effect\";\n\n// =============================================================================\n// Gas Constants\n// =============================================================================\n\n/** Default multiplier for estimated gas limits (10% safety margin). */\nexport const DEFAULT_GAS_LIMIT_MULTIPLIER = 1.1;\n\n/**\n * Minimum gas required for a basic Ethereum transaction (21,000 gas units).\n * @see https://ethereum.stackexchange.com/q/34674/24693\n */\nexport const MIN_TX_GAS = 21000n;\n\n// =============================================================================\n// Timing Constants (milliseconds)\n// =============================================================================\n\n/** Default maximum delay for circuit breakers and subscriptions. */\nexport const DEFAULT_MAX_DELAY = Duration.toMillis(\"30 seconds\");\n\n/** Default timeout for waiting on a transaction receipt. */\nexport const DEFAULT_RECEIPT_TIMEOUT = Duration.toMillis(\"2 minutes\");\n\n/** Default timeout for RPC requests. */\nexport const DEFAULT_REQUEST_TIMEOUT = Duration.toMillis(\"10 seconds\");\n\n/** Default time before a transaction is considered stuck. */\nexport const DEFAULT_STUCK_TX_MS = Duration.toMillis(\"60 minutes\");\n\n/** Default timeout for waiting on a specific block. */\nexport const DEFAULT_BLOCK_WAIT_TIMEOUT = Duration.toMillis(\"60 seconds\");\n\n/** Default polling interval for transaction receipt and confirmation checks. */\nexport const DEFAULT_POLLING_INTERVAL = Duration.toMillis(\"4 seconds\");\n\n/** Default delay between RPC retries. */\nexport const DEFAULT_RETRY_DELAY = Duration.toMillis(\"150 millis\");\n\n/** Default base delay for subscription exponential backoff. */\nexport const DEFAULT_SUBSCRIPTION_BASE_DELAY = Duration.toMillis(\"500 millis\");\n\n/** Default debounce delay for cursor store flush operations. */\nexport const DEFAULT_CURSOR_FLUSH_DELAY = \"250 millis\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cross-chain-reader.js","sourceRoot":"","sources":["../../src/contract/cross-chain-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cross-chain-reader.js","sourceRoot":"","sources":["../../src/contract/cross-chain-reader.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context, Effect, Layer } from \"effect\";\nimport type { Abi, Address, ContractFunctionArgs } from \"viem\";\nimport type { ClientNotFoundError, ContractReadError, MulticallError } from \"@/src/core/index.js\";\nimport { SpanNames } from \"@/src/telemetry/index.js\";\nimport type {\n ContractFunctionName,\n ContractFunctionReturnType,\n MulticallCall,\n MulticallResult,\n ReadParams,\n} from \"@/src/types/index.js\";\nimport { ContractReader } from \"./reader.js\";\n\ntype ArgsField<TArgs> = {\n readonly args?: TArgs | undefined;\n} & (readonly [] extends TArgs ? unknown : { readonly args: TArgs });\n\nexport type CrossChainCall<\n TAbi extends Abi = Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\"> = ContractFunctionName<\n TAbi,\n \"pure\" | \"view\"\n >,\n> = {\n readonly abi: TAbi;\n readonly address: Address;\n readonly chainId: number;\n readonly functionName: TFunctionName;\n} & ArgsField<ContractFunctionArgs<TAbi, \"pure\" | \"view\", TFunctionName>>;\n\nexport type ReadSameParams<\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">,\n> = {\n readonly abi: TAbi;\n readonly address: Address;\n readonly chainIds: readonly number[];\n readonly functionName: TFunctionName;\n} & ArgsField<ContractFunctionArgs<TAbi, \"pure\" | \"view\", TFunctionName>>;\n\nexport type ChainMulticallBatch = {\n readonly chainId: number;\n readonly calls: readonly MulticallCall[];\n};\n\nexport type CrossChainReaderShape = {\n /**\n * Execute reads across multiple chains in parallel.\n * Groups calls by chainId internally for efficiency.\n */\n readonly readAll: <const TCalls extends readonly CrossChainCall[]>(\n calls: TCalls\n ) => Effect.Effect<Map<number, unknown[]>, ContractReadError | ClientNotFoundError>;\n\n /**\n * Execute the same read on multiple chains (e.g., check balance on all chains)\n */\n readonly readSame: <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">,\n >(\n params: ReadSameParams<TAbi, TFunctionName>\n ) => Effect.Effect<\n Map<number, ContractFunctionReturnType<TAbi, \"pure\" | \"view\", TFunctionName>>,\n ContractReadError | ClientNotFoundError\n >;\n\n /**\n * Execute multicall on each chain in parallel, then merge results\n */\n readonly multicallAll: <const TBatches extends readonly ChainMulticallBatch[]>(\n batches: TBatches\n ) => Effect.Effect<\n Map<number, readonly MulticallResult<unknown>[]>,\n MulticallError | ClientNotFoundError\n >;\n};\n\nexport class CrossChainReader extends Context.Tag(\"ew3/CrossChainReader\")<\n CrossChainReader,\n CrossChainReaderShape\n>() {}\n\n/**\n * Helper function to group items by a key\n */\nconst groupBy = <T, K extends string | number>(\n arr: readonly T[],\n keyFn: (item: T) => K\n): Map<K, T[]> => {\n const result = new Map<K, T[]>();\n for (const item of arr) {\n const key = keyFn(item);\n const group = result.get(key) ?? [];\n group.push(item);\n result.set(key, group);\n }\n return result;\n};\n\n/**\n * Live implementation of CrossChainReader service\n */\nexport const CrossChainReaderLive = Layer.effect(\n CrossChainReader,\n Effect.gen(function* () {\n const reader = yield* ContractReader;\n\n return CrossChainReader.of({\n multicallAll: <const TBatches extends readonly ChainMulticallBatch[]>(batches: TBatches) =>\n Effect.gen(function* () {\n // Execute multicalls for each chain in parallel\n const results = yield* Effect.all(\n batches.map((batch) =>\n reader.multicall(batch.chainId, batch.calls).pipe(\n Effect.map((result) => ({\n chainId: batch.chainId,\n result,\n }))\n )\n ),\n { concurrency: \"unbounded\" }\n );\n\n // Collect results into a Map by chainId\n const resultMap = new Map<number, readonly MulticallResult<unknown>[]>();\n for (const { chainId, result } of results) {\n resultMap.set(chainId, result);\n }\n\n return resultMap;\n }).pipe(\n Effect.withSpan(SpanNames.CROSS_CHAIN_MULTICALL_ALL, {\n attributes: {\n batchCount: batches.length,\n chainIds: batches.map((b) => b.chainId),\n },\n })\n ),\n\n readAll: <const TCalls extends readonly CrossChainCall[]>(calls: TCalls) =>\n Effect.gen(function* () {\n // Group calls by chainId\n const groupedCalls = groupBy(calls, (call) => call.chainId);\n\n // Execute reads for each chain in parallel\n const results = yield* Effect.all(\n Array.from(groupedCalls.entries()).map(([chainId, chainCalls]) =>\n Effect.all(\n chainCalls.map((call) => reader.read(call)),\n { concurrency: \"unbounded\" }\n ).pipe(\n Effect.map((chainResults) => ({\n chainId,\n results: chainResults,\n }))\n )\n ),\n { concurrency: \"unbounded\" }\n );\n\n // Collect results into a Map by chainId\n const resultMap = new Map<number, unknown[]>();\n for (const { chainId, results: chainResults } of results) {\n resultMap.set(chainId, chainResults);\n }\n\n return resultMap;\n }).pipe(\n Effect.withSpan(SpanNames.CROSS_CHAIN_READ_ALL, {\n attributes: {\n callCount: calls.length,\n chainIds: Array.from(new Set(calls.map((c) => c.chainId))),\n },\n })\n ),\n\n readSame: <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">,\n >(\n params: ReadSameParams<TAbi, TFunctionName>\n ) =>\n Effect.gen(function* () {\n // Execute the same read on each chain in parallel\n const results = yield* Effect.all(\n params.chainIds.map((chainId) =>\n reader\n .read({\n abi: params.abi,\n address: params.address,\n args: params.args,\n chainId,\n functionName: params.functionName,\n } as ReadParams<TAbi, TFunctionName>)\n .pipe(\n Effect.map((result) => ({\n chainId,\n result: result as ContractFunctionReturnType<\n TAbi,\n \"pure\" | \"view\",\n TFunctionName\n >,\n }))\n )\n ),\n { concurrency: \"unbounded\" }\n );\n\n // Collect results into a Map by chainId\n const resultMap = new Map<\n number,\n ContractFunctionReturnType<TAbi, \"pure\" | \"view\", TFunctionName>\n >();\n for (const { chainId, result } of results) {\n resultMap.set(chainId, result);\n }\n\n return resultMap;\n }).pipe(\n Effect.withSpan(SpanNames.CROSS_CHAIN_READ_SAME, {\n attributes: {\n address: params.address,\n chainCount: params.chainIds.length,\n chainIds: params.chainIds,\n functionName: params.functionName,\n },\n })\n ),\n });\n })\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contract/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC","sourcesContent":["export * from \"./cross-chain-reader.js\";\nexport * from \"./pipeline.js\";\nexport * from \"./reader.js\";\nexport * from \"./typed-contract.js\";\nexport * from \"./writer.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contract/pipeline/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contract/pipeline/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC","sourcesContent":["export * from \"./live.js\";\nexport * from \"./service.js\";\nexport * from \"./types.js\";\n"]}
@@ -2,7 +2,7 @@ import type { Scope } from "effect";
2
2
  import { Effect } from "effect";
3
3
  import type { Abi } from "viem";
4
4
  import type { ContractWriterShape } from "../../../contract/index.js";
5
- import type { ClientNotFoundError, ContractReadError, ContractWriteError, EventDecodeError, GasEstimationError, InsufficientFundsError, ReceiptTimeoutError, SimulationFailedError, TransactionFailedError, TransportError, UserRejectedError, WalletNotConnectedError, WrongNetworkError } from "../../../core/index.js";
5
+ import type { ClientNotFoundError, ContractReadError, ContractWriteError, EventDecodeError, GasEstimationError, InsufficientFundsError, ReceiptTimeoutError, SimulationFailedError, TransportError, TxFailedError, UserRejectedError, WalletNotConnectedError, WrongNetworkError } from "../../../core/index.js";
6
6
  import type { EventStreamShape } from "../../../events/index.js";
7
7
  import type { GasPriceUnavailableError, GasServiceShape } from "../../../gas/index.js";
8
8
  import type { NonceServiceShape } from "../../../nonce/index.js";
@@ -16,7 +16,7 @@ export type CorePipelineDeps = {
16
16
  readonly nonceService: NonceServiceShape;
17
17
  readonly gasService: GasServiceShape;
18
18
  };
19
- type CorePipelineError = SimulationFailedError | ContractReadError | GasEstimationError | ContractWriteError | InsufficientFundsError | UserRejectedError | GasPriceUnavailableError | TransactionFailedError | ReceiptTimeoutError | ClientNotFoundError | TransportError | WalletNotConnectedError | WrongNetworkError | EventDecodeError;
19
+ type CorePipelineError = SimulationFailedError | ContractReadError | GasEstimationError | ContractWriteError | InsufficientFundsError | UserRejectedError | GasPriceUnavailableError | TxFailedError | ReceiptTimeoutError | ClientNotFoundError | TransportError | WalletNotConnectedError | WrongNetworkError | EventDecodeError;
20
20
  export declare const runCorePipeline: <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, "nonpayable" | "payable">>(deps: CorePipelineDeps, params: WriteParams<TAbi, TFunctionName>, policy: TxPolicy, hooks?: PipelineHooks) => Effect.Effect<WriteAndTrackResult<TAbi>, CorePipelineError, Scope.Scope>;
21
21
  export {};
22
22
  //# sourceMappingURL=core.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,GAAG,EAA4B,MAAM,MAAM,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAQtE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC,CAAC;AAEF,KAAK,iBAAiB,GAClB,qBAAqB,GACrB,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,sBAAsB,GACtB,iBAAiB,GACjB,wBAAwB,GACxB,sBAAsB,GACtB,mBAAmB,GACnB,mBAAmB,GACnB,cAAc,GACd,uBAAuB,GACvB,iBAAiB,GACjB,gBAAgB,CAAC;AAcrB,eAAO,MAAM,eAAe,GAC1B,IAAI,SAAS,GAAG,EAChB,aAAa,SAAS,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC,EAE1E,MAAM,gBAAgB,EACtB,QAAQ,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,EACxC,QAAQ,QAAQ,EAChB,QAAO,aAAkB,KACxB,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAuFtE,CAAC"}
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,GAAG,EAA4B,MAAM,MAAM,CAAC;AAC1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAQtE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC,CAAC;AAEF,KAAK,iBAAiB,GAClB,qBAAqB,GACrB,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,sBAAsB,GACtB,iBAAiB,GACjB,wBAAwB,GACxB,aAAa,GACb,mBAAmB,GACnB,mBAAmB,GACnB,cAAc,GACd,uBAAuB,GACvB,iBAAiB,GACjB,gBAAgB,CAAC;AAcrB,eAAO,MAAM,eAAe,GAC1B,IAAI,SAAS,GAAG,EAChB,aAAa,SAAS,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC,EAE1E,MAAM,gBAAgB,EACtB,QAAQ,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,EACxC,QAAQ,QAAQ,EAChB,QAAO,aAAkB,KACxB,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,iBAAiB,EAAE,KAAK,CAAC,KAAK,CAuFtE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/core.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAsBhC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,mCAAmC,EAAE,MAAM,cAAc,CAAC;AAyCnE,MAAM,CAAC,MAAM,eAAe,GAAG,CAI7B,IAAsB,EACtB,MAAwC,EACxC,MAAgB,EAChB,QAAuB,EAAE,EACiD,EAAE,CAC5E,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAC1E,MAAM,YAAY,GAAG,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,EAAE,CAAC;IAGrD,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,UAAU,EAAE;QAC3D,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,YAAY;QACpB,aAAa,EAAE,MAAM,CAAC,SAAS;KAChC,CAAC,CAAC;IAGH,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,KAAK,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAC/D,MAAM,EACN,MAAM,EACN,aAAa,EACb,YAAY,CACb,CAAC;IAGF,MAAM,aAAa,GAAG,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IAC9C,MAAM,gBAAgB,GAAG,KAAK,CAAC,CAAC,oBAAoB,CAAC,YAAY,EAAE;QACjE,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,aAAa;KACd,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG;QACrB,GAAG,gBAAgB;QACnB,KAAK,EAAE,gBAAgB,CAAC,KAAK;KAC9B,CAAC;IAEF,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC;IAGD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,KAAK,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;IAC3E,KAAK,CAAC,CAAC,gBAAgB,CAAC,aAAa,CAAC;IAEtC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAGD,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC;IACxC,MAAM,OAAO,GAAuB,KAAK,CAAC,CAAC,mCAAmC,CAAC,SAAS,EAAE;QACxF,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,IAAI;QACJ,UAAU,EAAE,cAAc;YACxB,CAAC,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;YACxE,CAAC,CAAC,SAAS;QACb,MAAM,EAAE,YAAY;KACrB,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAGD,KAAK,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,gBAAgB,CAAC,KAAK;QAC7B,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;KACpC,CAAC,CAAC;IAGH,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,aAAa,CAC9C,OAAO,EACP,MAAM,CAAC,GAAG,CACX,CAAwC,CAAC;IAE1C,OAAO;QACL,MAAM;QACN,IAAI,EAAE,OAAO,CAAC,eAAuB;QACrC,OAAO;KACqB,CAAC;AACjC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/core.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Scope } from \"effect\";\nimport { Effect } from \"effect\";\nimport type { Abi, Hash, TransactionReceipt } from \"viem\";\nimport type { ContractWriterShape } from \"@/src/contract/index.js\";\nimport type {\n ClientNotFoundError,\n ContractReadError,\n ContractWriteError,\n EventDecodeError,\n GasEstimationError,\n InsufficientFundsError,\n ReceiptTimeoutError,\n SimulationFailedError,\n TransportError,\n TxFailedError,\n UserRejectedError,\n WalletNotConnectedError,\n WrongNetworkError,\n} from \"@/src/core/index.js\";\nimport type { EventStreamShape } from \"@/src/events/index.js\";\nimport type { GasPriceUnavailableError, GasServiceShape } from \"@/src/gas/index.js\";\nimport type { NonceServiceShape } from \"@/src/nonce/index.js\";\nimport type { TxManagerShape, TxPolicy } from \"@/src/tx/index.js\";\nimport { defaultPolicy } from \"@/src/tx/index.js\";\nimport type { ContractFunctionName, WriteParams } from \"@/src/types/index.js\";\nimport type { PipelineHooks, WriteAndTrackResult } from \"../types.js\";\nimport { confirmNonce, withNonceReservation } from \"./nonce.js\";\nimport { deriveBaseOverrides, simulateAndEstimate } from \"./prepare.js\";\nimport { waitForReceiptFollowingReplacements } from \"./receipt.js\";\n\n/**\n * Dependencies required by the core pipeline\n */\nexport type CorePipelineDeps = {\n readonly writer: ContractWriterShape;\n readonly txManager: TxManagerShape;\n readonly eventStream: EventStreamShape;\n readonly nonceService: NonceServiceShape;\n readonly gasService: GasServiceShape;\n};\n\ntype CorePipelineError =\n | SimulationFailedError\n | ContractReadError\n | GasEstimationError\n | ContractWriteError\n | InsufficientFundsError\n | UserRejectedError\n | GasPriceUnavailableError\n | TxFailedError\n | ReceiptTimeoutError\n | ClientNotFoundError\n | TransportError\n | WalletNotConnectedError\n | WrongNetworkError\n | EventDecodeError;\n\n/**\n * Run the core write pipeline with hooks for tracking.\n *\n * Steps:\n * 1. Derive base overrides (tx type + fees)\n * 2. Simulate transaction\n * 3. Estimate gas\n * 4. Reserve nonce\n * 5. Write transaction\n * 6. Wait for receipt (following replacements)\n * 7. Decode events\n */\nexport const runCorePipeline = <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"nonpayable\" | \"payable\">,\n>(\n deps: CorePipelineDeps,\n params: WriteParams<TAbi, TFunctionName>,\n policy: TxPolicy,\n hooks: PipelineHooks = {}\n): Effect.Effect<WriteAndTrackResult<TAbi>, CorePipelineError, Scope.Scope> =>\n Effect.gen(function* () {\n const { writer, txManager, eventStream, nonceService, gasService } = deps;\n const mergedPolicy = { ...defaultPolicy, ...policy };\n\n // Step 1: Derive base overrides\n const baseOverrides = yield* deriveBaseOverrides(gasService, {\n chainId: params.chainId,\n policy: mergedPolicy,\n userOverrides: params.overrides,\n });\n\n // Step 2 & 3: Simulate and estimate gas\n if (hooks.onSimulating) {\n yield* hooks.onSimulating();\n }\n\n const { finalGas, overridesWithGas } = yield* simulateAndEstimate(\n writer,\n params,\n baseOverrides,\n mergedPolicy\n );\n\n // Step 4: Reserve nonce\n const explicitNonce = params.overrides?.nonce;\n const nonceReservation = yield* withNonceReservation(nonceService, {\n account: params.account,\n chainId: params.chainId,\n explicitNonce,\n });\n\n const finalOverrides = {\n ...overridesWithGas,\n nonce: nonceReservation.nonce,\n };\n\n if (hooks.onEstimated) {\n yield* hooks.onEstimated(finalGas, nonceReservation.nonce);\n }\n\n // Step 5: Sign and write transaction\n if (hooks.onSigning) {\n yield* hooks.onSigning();\n }\n\n const hash = yield* writer.write({ ...params, overrides: finalOverrides });\n yield* nonceReservation.markSubmitted;\n\n if (hooks.onSubmitted) {\n yield* hooks.onSubmitted(hash);\n }\n\n // Step 6: Wait for receipt\n const onReplacedHook = hooks.onReplaced;\n const receipt: TransactionReceipt = yield* waitForReceiptFollowingReplacements(txManager, {\n chainId: params.chainId,\n hash,\n onReplaced: onReplacedHook\n ? (oldHash, newHash, reason) => onReplacedHook(oldHash, newHash, reason)\n : undefined,\n policy: mergedPolicy,\n });\n\n if (hooks.onMined) {\n yield* hooks.onMined(receipt);\n }\n\n // Confirm nonce after successful mining\n yield* confirmNonce(nonceService, {\n account: params.account,\n chainId: params.chainId,\n nonce: nonceReservation.nonce,\n reserved: nonceReservation.reserved,\n });\n\n // Step 7: Decode events\n const events = (yield* eventStream.decodeReceipt(\n receipt,\n params.abi\n )) as WriteAndTrackResult<TAbi>[\"events\"];\n\n return {\n events,\n hash: receipt.transactionHash as Hash,\n receipt,\n } as WriteAndTrackResult<TAbi>;\n });\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAKlE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAsB,EAAU,EAAE,CAC9D,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAMpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAW,EAAE,UAA8B,EAAU,EAAE;IAC7F,MAAM,CAAC,GAAG,UAAU,IAAI,4BAA4B,CAAC;IACrD,OAAO,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AACtE,CAAC,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAKlE,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAsB,EAAU,EAAE,CAC9D,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAMpD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAW,EAAE,UAA8B,EAAU,EAAE;IAC7F,MAAM,CAAC,GAAG,UAAU,IAAI,4BAA4B,CAAC;IACrD,OAAO,MAAM,CAAC,SAAS,CAAC,uBAAuB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AACtE,CAAC,CAAC","sourcesContent":["import { Option } from \"effect\";\nimport { DEFAULT_GAS_LIMIT_MULTIPLIER } from \"@/src/constants/index.js\";\nimport { multiplyBigintByDecimal } from \"@/src/internal/index.js\";\n\n/**\n * Convert nonce to bigint regardless of input type\n */\nexport const nonceToBigInt = (nonce: number | bigint): bigint =>\n typeof nonce === \"bigint\" ? nonce : BigInt(nonce);\n\n/**\n * Apply gas limit multiplier with safety bounds\n * Returns original gas if multiplier is invalid or would overflow\n */\nexport const applyGasLimitMultiplier = (gas: bigint, multiplier: number | undefined): bigint => {\n const m = multiplier ?? DEFAULT_GAS_LIMIT_MULTIPLIER;\n return Option.getOrElse(multiplyBigintByDecimal(gas, m), () => gas);\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"nonce.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/nonce.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAa7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,YAA+B,EAC/B,MAIC,EACyF,EAAE,CAC5F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC9C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAW,CAAC;QACnE,CAAC;QAED,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;YAChD,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QAEH,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAW,CAAC;IAC3D,CAAC,CAAC,EACF,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;YAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CACL,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC;QAC/C,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;KAC/B,CAAC;AACJ,CAAC,CAAC,CAAC;AAKL,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,YAA+B,EAC/B,MAKC,EACoB,EAAE,CACvB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;KACnC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"nonce.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/nonce.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAIrC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAa7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,YAA+B,EAC/B,MAIC,EACyF,EAAE,CAC5F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEjD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAC9C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAW,CAAC;QACnE,CAAC;QAED,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;YAChD,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAC;QAEH,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,IAAI,EAAW,CAAC;IAC3D,CAAC,CAAC,EACF,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CACtB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;YAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC,CAAC,CACL,CAAC;IAEF,OAAO;QACL,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC;QAC/C,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;KAC/B,CAAC;AACJ,CAAC,CAAC,CAAC;AAKL,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,YAA+B,EAC/B,MAKC,EACoB,EAAE,CACvB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,OAAO;IACT,CAAC;IAED,KAAK,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC;KACnC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import type { Scope } from \"effect\";\nimport { Effect, Ref } from \"effect\";\nimport type { Address } from \"viem\";\nimport type { ClientNotFoundError, TransportError } from \"@/src/core/index.js\";\nimport type { NonceServiceShape } from \"@/src/nonce/index.js\";\nimport { nonceToBigInt } from \"./helpers.js\";\n\nexport type NonceReservationResult = {\n readonly nonce: number | bigint;\n readonly reserved: boolean;\n readonly markSubmitted: Effect.Effect<void>;\n};\n\n/**\n * Reserve a nonce with proper cleanup semantics.\n * If explicitNonce is provided, no reservation is made.\n * Otherwise, reserves from NonceService and releases on scope exit if not submitted.\n */\nexport const withNonceReservation = (\n nonceService: NonceServiceShape,\n params: {\n account: Address;\n chainId: number;\n explicitNonce: number | bigint | undefined;\n }\n): Effect.Effect<NonceReservationResult, ClientNotFoundError | TransportError, Scope.Scope> =>\n Effect.gen(function* () {\n const nonceSubmittedRef = yield* Ref.make(false);\n\n const reservation = yield* Effect.acquireRelease(\n Effect.gen(function* () {\n if (params.explicitNonce !== undefined) {\n return { nonce: params.explicitNonce, reserved: false } as const;\n }\n\n const reservedNonce = yield* nonceService.reserve({\n address: params.account,\n chainId: params.chainId,\n });\n\n return { nonce: reservedNonce, reserved: true } as const;\n }),\n ({ nonce, reserved }) =>\n Effect.gen(function* () {\n if (!reserved) {\n return;\n }\n const submitted = yield* Ref.get(nonceSubmittedRef);\n if (submitted) {\n return;\n }\n\n yield* nonceService.release({\n address: params.account,\n chainId: params.chainId,\n nonce: nonceToBigInt(nonce),\n });\n })\n );\n\n return {\n markSubmitted: Ref.set(nonceSubmittedRef, true),\n nonce: reservation.nonce,\n reserved: reservation.reserved,\n };\n });\n\n/**\n * Confirm a nonce after successful transaction\n */\nexport const confirmNonce = (\n nonceService: NonceServiceShape,\n params: {\n account: Address;\n chainId: number;\n nonce: number | bigint;\n reserved: boolean;\n }\n): Effect.Effect<void> =>\n Effect.gen(function* () {\n if (!params.reserved) {\n return;\n }\n\n yield* nonceService.confirm({\n address: params.account,\n chainId: params.chainId,\n nonce: nonceToBigInt(params.nonce),\n });\n });\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAYhC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAOvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAA2B,EAC3B,MAIC,EACoF,EAAE,CACvF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CACnD;QACE,YAAY,CAAC;YACX,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEtD,kBAAkB,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;KACvD,EACD,EAAE,WAAW,EAAE,CAAC,EAAE,CACnB,CAAC;IAEF,OAAO;QACL,GAAG,MAAM,CAAC,aAAa;QACvB,GAAG,YAAY;QACf,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,IAAI,IAAI,WAAW;KAC/B,CAAC;AACrB,CAAC,CAAC,CAAC;AASL,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAIjC,MAA2B,EAC3B,MAAwC,EACxC,aAA4B,EAC5B,MAAgB,EAShB,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAElB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QAC7C,GAAG,MAAM;QACT,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC;IAGH,MAAM,UAAU,GAAG,uBAAuB,CAAC,YAAY,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAGpF,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC;IACxD,MAAM,QAAQ,GAAG,WAAW,IAAI,UAAU,CAAC;IAG3C,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEtF,OAAO;QACL,QAAQ;QACR,gBAAgB,EAAE;YAChB,GAAG,aAAa;YAChB,GAAG,EAAE,QAAQ;SACd;KACF,CAAC;AACJ,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAYhC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAOrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAOvD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,UAA2B,EAC3B,MAIC,EACoF,EAAE,CACvF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CACnD;QACE,YAAY,CAAC;YACX,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEtD,kBAAkB,CAAC;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;KACvD,EACD,EAAE,WAAW,EAAE,CAAC,EAAE,CACnB,CAAC;IAEF,OAAO;QACL,GAAG,MAAM,CAAC,aAAa;QACvB,GAAG,YAAY;QACf,IAAI,EAAE,MAAM,CAAC,aAAa,EAAE,IAAI,IAAI,WAAW;KAC/B,CAAC;AACrB,CAAC,CAAC,CAAC;AASL,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAIjC,MAA2B,EAC3B,MAAwC,EACxC,aAA4B,EAC5B,MAAgB,EAShB,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAElB,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;QAC7C,GAAG,MAAM;QACT,SAAS,EAAE,aAAa;KACzB,CAAC,CAAC;IAGH,MAAM,UAAU,GAAG,uBAAuB,CAAC,YAAY,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAGpF,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC;IACxD,MAAM,QAAQ,GAAG,WAAW,IAAI,UAAU,CAAC;IAG3C,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,GAAG,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEtF,OAAO;QACL,QAAQ;QACR,gBAAgB,EAAE;YAChB,GAAG,aAAa;YAChB,GAAG,EAAE,QAAQ;SACd;KACF,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { Effect } from \"effect\";\nimport type { Abi } from \"viem\";\nimport type { ContractWriterShape } from \"@/src/contract/index.js\";\nimport type {\n ClientNotFoundError,\n ContractReadError,\n GasEstimationError,\n InsufficientFundsError,\n SimulationFailedError,\n UserRejectedError,\n} from \"@/src/core/index.js\";\nimport type { GasPriceUnavailableError, GasServiceShape } from \"@/src/gas/index.js\";\nimport { GasService } from \"@/src/gas/index.js\";\nimport type { TxPolicy } from \"@/src/tx/index.js\";\nimport { deriveFeeOverrides, deriveTxType } from \"@/src/tx/index.js\";\nimport type {\n ContractFunctionName,\n FeeOverrides,\n TxOverrides,\n WriteParams,\n} from \"@/src/types/index.js\";\nimport { applyGasLimitMultiplier } from \"./helpers.js\";\n\nexport type BaseOverrides = TxOverrides & FeeOverrides;\n\n/**\n * Derive transaction type and fee overrides in parallel\n */\nexport const deriveBaseOverrides = (\n gasService: GasServiceShape,\n params: {\n chainId: number;\n policy: TxPolicy;\n userOverrides?: TxOverrides;\n }\n): Effect.Effect<BaseOverrides, GasPriceUnavailableError | ClientNotFoundError, never> =>\n Effect.gen(function* () {\n const [derivedType, feeOverrides] = yield* Effect.all(\n [\n deriveTxType({\n chainId: params.chainId,\n policy: params.policy,\n userOverrides: params.userOverrides,\n }).pipe(Effect.provideService(GasService, gasService)),\n\n deriveFeeOverrides({\n chainId: params.chainId,\n policy: params.policy,\n userOverrides: params.userOverrides,\n }).pipe(Effect.provideService(GasService, gasService)),\n ],\n { concurrency: 2 }\n );\n\n return {\n ...params.userOverrides,\n ...feeOverrides,\n type: params.userOverrides?.type ?? derivedType,\n } as BaseOverrides;\n });\n\n/**\n * Estimate gas and simulate transaction.\n *\n * Gas estimation is done BEFORE simulation to provide a reasonable gas limit.\n * Some RPC nodes default to max uint64 when no gas limit is provided, which\n * causes \"insufficient funds\" errors during the balance check.\n */\nexport const simulateAndEstimate = <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"nonpayable\" | \"payable\">,\n>(\n writer: ContractWriterShape,\n params: WriteParams<TAbi, TFunctionName>,\n baseOverrides: BaseOverrides,\n policy: TxPolicy\n): Effect.Effect<\n { finalGas: bigint; overridesWithGas: BaseOverrides & { gas: bigint } },\n | SimulationFailedError\n | ContractReadError\n | GasEstimationError\n | ClientNotFoundError\n | InsufficientFundsError\n | UserRejectedError\n> =>\n Effect.gen(function* () {\n // Estimate gas first to get a reasonable limit for simulation\n const estimatedGas = yield* writer.estimateGas({\n ...params,\n overrides: baseOverrides,\n });\n // Apply multiplier to add safety margin; this buffered value is used for\n // both simulation (balance check) and the final transaction.\n const derivedGas = applyGasLimitMultiplier(estimatedGas, policy.gasLimitMultiplier);\n\n // Use explicit gas if provided, otherwise use derived\n const explicitGas = params.overrides?.gas ?? params.gas;\n const finalGas = explicitGas ?? derivedGas;\n\n // Simulate with the gas limit to ensure proper balance checks\n yield* writer.simulate({ ...params, overrides: { ...baseOverrides, gas: finalGas } });\n\n return {\n finalGas,\n overridesWithGas: {\n ...baseOverrides,\n gas: finalGas,\n },\n };\n });\n"]}
@@ -1,6 +1,6 @@
1
1
  import { Effect } from "effect";
2
2
  import type { Hash, TransactionReceipt } from "viem";
3
- import type { ClientNotFoundError, ReceiptTimeoutError, TransactionFailedError } from "../../../core/index.js";
3
+ import type { ClientNotFoundError, ReceiptTimeoutError, TxFailedError } from "../../../core/index.js";
4
4
  import type { TxManagerShape, TxPolicy } from "../../../tx/index.js";
5
5
  export type OnReplacedCallback = (oldHash: Hash, newHash: Hash, reason: string) => Effect.Effect<void>;
6
6
  export declare const waitForReceiptFollowingReplacements: (txManager: TxManagerShape, params: {
@@ -8,5 +8,5 @@ export declare const waitForReceiptFollowingReplacements: (txManager: TxManagerS
8
8
  hash: Hash;
9
9
  policy: TxPolicy;
10
10
  onReplaced?: OnReplacedCallback;
11
- }) => Effect.Effect<TransactionReceipt, TransactionFailedError | ReceiptTimeoutError | ClientNotFoundError>;
11
+ }) => Effect.Effect<TransactionReceipt, TxFailedError | ReceiptTimeoutError | ClientNotFoundError>;
12
12
  //# sourceMappingURL=receipt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACrD,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAMzB,eAAO,MAAM,mCAAmC,GAC9C,WAAW,cAAc,EACzB,QAAQ;IACN,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,QAAQ,CAAC;IACjB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC,KACA,MAAM,CAAC,MAAM,CACd,kBAAkB,EAClB,sBAAsB,GAAG,mBAAmB,GAAG,mBAAmB,CA6BhE,CAAC"}
1
+ {"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElE,MAAM,MAAM,kBAAkB,GAAG,CAC/B,OAAO,EAAE,IAAI,EACb,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAMzB,eAAO,MAAM,mCAAmC,GAC9C,WAAW,cAAc,EACzB,QAAQ;IACN,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,QAAQ,CAAC;IACjB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC,KACA,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,aAAa,GAAG,mBAAmB,GAAG,mBAAmB,CA4B1F,CAAC"}
@@ -9,7 +9,7 @@ export const waitForReceiptFollowingReplacements = (txManager, params) => Effect
9
9
  return exit.right;
10
10
  }
11
11
  const error = exit.left;
12
- if (error._tag === "TransactionReplacedError") {
12
+ if (error._tag === "TxReplacedError") {
13
13
  const oldHash = error.oldHash;
14
14
  const newHash = error.newHash;
15
15
  if (params.onReplaced) {
@@ -1 +1 @@
1
- {"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAmBhC,MAAM,CAAC,MAAM,mCAAmC,GAAG,CACjD,SAAyB,EACzB,MAKC,EAID,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAE3B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,SAAS;aAC1B,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;aACvD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,IAAI,KAAK,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;YAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAe,CAAC;YACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAe,CAAC;YAEtC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3D,CAAC;YAED,QAAQ,GAAG,OAAO,CAAC;YACnB,SAAS;QACX,CAAC;QAED,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../../../src/contract/pipeline/internal/receipt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAehC,MAAM,CAAC,MAAM,mCAAmC,GAAG,CACjD,SAAyB,EACzB,MAKC,EAC6F,EAAE,CAChG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,IAAI,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAE3B,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,SAAS;aAC1B,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC;aACvD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAe,CAAC;YACtC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAe,CAAC;YAEtC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACtB,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3D,CAAC;YAED,QAAQ,GAAG,OAAO,CAAC;YACnB,SAAS;QACX,CAAC;QAED,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;AACH,CAAC,CAAC,CAAC","sourcesContent":["import { Effect } from \"effect\";\nimport type { Hash, TransactionReceipt } from \"viem\";\nimport type { ClientNotFoundError, ReceiptTimeoutError, TxFailedError } from \"@/src/core/index.js\";\nimport type { TxManagerShape, TxPolicy } from \"@/src/tx/index.js\";\n\nexport type OnReplacedCallback = (\n oldHash: Hash,\n newHash: Hash,\n reason: string\n) => Effect.Effect<void>;\n\n/**\n * Wait for receipt, following any transaction replacements.\n * The onReplaced callback is invoked each time a replacement is detected.\n */\nexport const waitForReceiptFollowingReplacements = (\n txManager: TxManagerShape,\n params: {\n chainId: number;\n hash: Hash;\n policy: TxPolicy;\n onReplaced?: OnReplacedCallback;\n }\n): Effect.Effect<TransactionReceipt, TxFailedError | ReceiptTimeoutError | ClientNotFoundError> =>\n Effect.gen(function* () {\n let waitHash = params.hash;\n\n while (true) {\n const exit = yield* txManager\n .waitForReceipt(params.chainId, waitHash, params.policy)\n .pipe(Effect.either);\n\n if (exit._tag === \"Right\") {\n return exit.right;\n }\n\n const error = exit.left;\n if (error._tag === \"TxReplacedError\") {\n const oldHash = error.oldHash as Hash;\n const newHash = error.newHash as Hash;\n\n if (params.onReplaced) {\n yield* params.onReplaced(oldHash, newHash, error.reason);\n }\n\n waitHash = newHash;\n continue;\n }\n\n return yield* Effect.fail(error);\n }\n });\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"live.js","sourceRoot":"","sources":["../../../src/contract/pipeline/live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,MAAM,CAC9C,gBAAgB,EAChB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;IACvC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC;IACzC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;IAC3C,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC;IACvD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IAErC,MAAM,iBAAiB,GAAG;QACxB,WAAW;QACX,UAAU;QACV,YAAY;QACZ,mBAAmB;QACnB,SAAS;QACT,aAAa;QACb,MAAM;KACP,CAAC;IAEF,MAAM,gBAAgB,GAAG;QACvB,WAAW;QACX,UAAU;QACV,YAAY;QACZ,SAAS;QACT,MAAM;KACP,CAAC;IAEF,OAAO,gBAAgB,CAAC,EAAE,CAAC;QACzB,aAAa,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;QACnD,YAAY,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;KACjD,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"live.js","sourceRoot":"","sources":["../../../src/contract/pipeline/live.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,MAAM,CAC9C,gBAAgB,EAChB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;IACvC,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC;IACzC,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,aAAa,CAAC;IAC3C,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC;IACvD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC;IAErC,MAAM,iBAAiB,GAAG;QACxB,WAAW;QACX,UAAU;QACV,YAAY;QACZ,mBAAmB;QACnB,SAAS;QACT,aAAa;QACb,MAAM;KACP,CAAC;IAEF,MAAM,gBAAgB,GAAG;QACvB,WAAW;QACX,UAAU;QACV,YAAY;QACZ,SAAS;QACT,MAAM;KACP,CAAC;IAEF,OAAO,gBAAgB,CAAC,EAAE,CAAC;QACzB,aAAa,EAAE,iBAAiB,CAAC,iBAAiB,CAAC;QACnD,YAAY,EAAE,gBAAgB,CAAC,gBAAgB,CAAC;KACjD,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC","sourcesContent":["import { Effect, Layer } from \"effect\";\nimport { ContractWriter } from \"@/src/contract/index.js\";\nimport { PublicClientService } from \"@/src/core/index.js\";\nimport { EventStream } from \"@/src/events/index.js\";\nimport { GasService } from \"@/src/gas/index.js\";\nimport { NonceService } from \"@/src/nonce/index.js\";\nimport { TxManager, TxReplacement } from \"@/src/tx/index.js\";\nimport { ContractPipeline } from \"./service.js\";\nimport { makeWriteAndTrack } from \"./write-and-track.js\";\nimport { makeWriteAndWait } from \"./write-and-wait.js\";\n\nexport const ContractPipelineLive = Layer.effect(\n ContractPipeline,\n Effect.gen(function* () {\n const writer = yield* ContractWriter;\n const txManager = yield* TxManager;\n const eventStream = yield* EventStream;\n const nonceService = yield* NonceService;\n const txReplacement = yield* TxReplacement;\n const publicClientService = yield* PublicClientService;\n const gasService = yield* GasService;\n\n const writeAndTrackDeps = {\n eventStream,\n gasService,\n nonceService,\n publicClientService,\n txManager,\n txReplacement,\n writer,\n };\n\n const writeAndWaitDeps = {\n eventStream,\n gasService,\n nonceService,\n txManager,\n writer,\n };\n\n return ContractPipeline.of({\n writeAndTrack: makeWriteAndTrack(writeAndTrackDeps),\n writeAndWait: makeWriteAndWait(writeAndWaitDeps),\n });\n })\n);\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { Effect, Scope, SubscriptionRef } from "effect";
2
2
  import { Context } from "effect";
3
3
  import type { Abi, Hash } from "viem";
4
- import type { ClientNotFoundError, TransactionFailedError, WalletNotConnectedError } from "../../core/index.js";
4
+ import type { ClientNotFoundError, TxFailedError, WalletNotConnectedError } from "../../core/index.js";
5
5
  import type { GasPriceUnavailableError } from "../../gas/index.js";
6
6
  import type { TxPolicy, TxState } from "../../tx/index.js";
7
7
  import type { ContractFunctionName } from "../../types/index.js";
@@ -10,8 +10,8 @@ export type ContractPipelineShape = {
10
10
  readonly writeAndTrack: <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, "nonpayable" | "payable">>(params: WriteAndTrackParams<TAbi, TFunctionName>) => Effect.Effect<{
11
11
  stateRef: SubscriptionRef.SubscriptionRef<TxState>;
12
12
  actions: {
13
- readonly speedup: (policy?: TxPolicy) => Effect.Effect<Hash, TransactionFailedError | WalletNotConnectedError | ClientNotFoundError | GasPriceUnavailableError | Error>;
14
- readonly cancel: (policy?: TxPolicy) => Effect.Effect<Hash, TransactionFailedError | WalletNotConnectedError | ClientNotFoundError | GasPriceUnavailableError | Error>;
13
+ readonly speedup: (policy?: TxPolicy) => Effect.Effect<Hash, TxFailedError | WalletNotConnectedError | ClientNotFoundError | GasPriceUnavailableError | Error>;
14
+ readonly cancel: (policy?: TxPolicy) => Effect.Effect<Hash, TxFailedError | WalletNotConnectedError | ClientNotFoundError | GasPriceUnavailableError | Error>;
15
15
  };
16
16
  result: Effect.Effect<WriteAndTrackResult<TAbi>, WriteAndTrackError>;
17
17
  }, never, Scope.Scope>;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/contract/pipeline/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE/F,MAAM,MAAM,qBAAqB,GAAG;IAKlC,QAAQ,CAAC,aAAa,EAAE,CACtB,IAAI,SAAS,GAAG,EAChB,aAAa,SAAS,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC,EAE1E,MAAM,EAAE,mBAAmB,CAAC,IAAI,EAAE,aAAa,CAAC,KAC7C,MAAM,CAAC,MAAM,CAChB;QACE,QAAQ,EAAE,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,EAAE;YACP,QAAQ,CAAC,OAAO,EAAE,CAChB,MAAM,CAAC,EAAE,QAAQ,KACd,MAAM,CAAC,MAAM,CAChB,IAAI,EACF,sBAAsB,GACtB,uBAAuB,GACvB,mBAAmB,GACnB,wBAAwB,GACxB,KAAK,CACR,CAAC;YACF,QAAQ,CAAC,MAAM,EAAE,CACf,MAAM,CAAC,EAAE,QAAQ,KACd,MAAM,CAAC,MAAM,CAChB,IAAI,EACF,sBAAsB,GACtB,uBAAuB,GACvB,mBAAmB,GACnB,wBAAwB,GACxB,KAAK,CACR,CAAC;SACH,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC;KACtE,EACD,KAAK,EACL,KAAK,CAAC,KAAK,CACZ,CAAC;IAMF,QAAQ,CAAC,YAAY,EAAE,CACrB,IAAI,SAAS,GAAG,EAChB,aAAa,SAAS,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC,EAE1E,MAAM,EAAE,mBAAmB,CAAC,IAAI,EAAE,aAAa,CAAC,KAC7C,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC;CACnE,CAAC;;AAEF,qBAAa,gBAAiB,SAAQ,qBAGnC;CAAG"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/contract/pipeline/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE/F,MAAM,MAAM,qBAAqB,GAAG;IAKlC,QAAQ,CAAC,aAAa,EAAE,CACtB,IAAI,SAAS,GAAG,EAChB,aAAa,SAAS,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC,EAE1E,MAAM,EAAE,mBAAmB,CAAC,IAAI,EAAE,aAAa,CAAC,KAC7C,MAAM,CAAC,MAAM,CAChB;QACE,QAAQ,EAAE,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,EAAE;YACP,QAAQ,CAAC,OAAO,EAAE,CAChB,MAAM,CAAC,EAAE,QAAQ,KACd,MAAM,CAAC,MAAM,CAChB,IAAI,EACF,aAAa,GACb,uBAAuB,GACvB,mBAAmB,GACnB,wBAAwB,GACxB,KAAK,CACR,CAAC;YACF,QAAQ,CAAC,MAAM,EAAE,CACf,MAAM,CAAC,EAAE,QAAQ,KACd,MAAM,CAAC,MAAM,CAChB,IAAI,EACF,aAAa,GACb,uBAAuB,GACvB,mBAAmB,GACnB,wBAAwB,GACxB,KAAK,CACR,CAAC;SACH,CAAC;QACF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC;KACtE,EACD,KAAK,EACL,KAAK,CAAC,KAAK,CACZ,CAAC;IAMF,QAAQ,CAAC,YAAY,EAAE,CACrB,IAAI,SAAS,GAAG,EAChB,aAAa,SAAS,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC,EAE1E,MAAM,EAAE,mBAAmB,CAAC,IAAI,EAAE,aAAa,CAAC,KAC7C,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC;CACnE,CAAC;;AAEF,qBAAa,gBAAiB,SAAQ,qBAGnC;CAAG"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/contract/pipeline/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAiEjC,MAAM,OAAO,gBAAiB,SAAQ,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAGtE;CAAG"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/contract/pipeline/service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAiEjC,MAAM,OAAO,gBAAiB,SAAQ,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAGtE;CAAG","sourcesContent":["import type { Effect, Scope, SubscriptionRef } from \"effect\";\nimport { Context } from \"effect\";\nimport type { Abi, Hash } from \"viem\";\nimport type {\n ClientNotFoundError,\n TxFailedError,\n WalletNotConnectedError,\n} from \"@/src/core/index.js\";\nimport type { GasPriceUnavailableError } from \"@/src/gas/index.js\";\nimport type { TxPolicy, TxState } from \"@/src/tx/index.js\";\nimport type { ContractFunctionName } from \"@/src/types/index.js\";\nimport type { WriteAndTrackError, WriteAndTrackParams, WriteAndTrackResult } from \"./types.js\";\n\nexport type ContractPipelineShape = {\n /**\n * Full write pipeline: simulate -> estimate -> write -> track -> decode events\n * Returns reactive state ref for UI updates\n */\n readonly writeAndTrack: <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"nonpayable\" | \"payable\">,\n >(\n params: WriteAndTrackParams<TAbi, TFunctionName>\n ) => Effect.Effect<\n {\n stateRef: SubscriptionRef.SubscriptionRef<TxState>;\n actions: {\n readonly speedup: (\n policy?: TxPolicy\n ) => Effect.Effect<\n Hash,\n | TxFailedError\n | WalletNotConnectedError\n | ClientNotFoundError\n | GasPriceUnavailableError\n | Error\n >;\n readonly cancel: (\n policy?: TxPolicy\n ) => Effect.Effect<\n Hash,\n | TxFailedError\n | WalletNotConnectedError\n | ClientNotFoundError\n | GasPriceUnavailableError\n | Error\n >;\n };\n result: Effect.Effect<WriteAndTrackResult<TAbi>, WriteAndTrackError>;\n },\n never,\n Scope.Scope\n >;\n\n /**\n * Simplified version that just waits for receipt\n * No reactive state, just returns final result\n */\n readonly writeAndWait: <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"nonpayable\" | \"payable\">,\n >(\n params: WriteAndTrackParams<TAbi, TFunctionName>\n ) => Effect.Effect<WriteAndTrackResult<TAbi>, WriteAndTrackError>;\n};\n\nexport class ContractPipeline extends Context.Tag(\"ew3/ContractPipeline\")<\n ContractPipeline,\n ContractPipelineShape\n>() {}\n"]}
@@ -1,6 +1,6 @@
1
1
  import type { Effect } from "effect";
2
2
  import type { Abi, Address, Hash, Hex, TransactionReceipt } from "viem";
3
- import type { ClientNotFoundError, ContractReadError, ContractWriteError, EventDecodeError, GasEstimationError, InsufficientFundsError, ReceiptTimeoutError, SimulationFailedError, TransactionFailedError, TransactionReplacedError, TransportError, UserRejectedError, WalletNotConnectedError, WrongNetworkError } from "../../core/index.js";
3
+ import type { ClientNotFoundError, ContractReadError, ContractWriteError, EventDecodeError, GasEstimationError, InsufficientFundsError, ReceiptTimeoutError, SimulationFailedError, TransportError, TxFailedError, TxReplacedError, UserRejectedError, WalletNotConnectedError, WrongNetworkError } from "../../core/index.js";
4
4
  import type { DecodedEvent } from "../../events/index.js";
5
5
  import type { GasPriceUnavailableError } from "../../gas/index.js";
6
6
  import type { TxPolicy, TxState } from "../../tx/index.js";
@@ -13,7 +13,7 @@ export type WriteAndTrackResult<TAbi extends Abi> = {
13
13
  receipt: TransactionReceipt;
14
14
  events: DecodedEvent<TAbi, ContractEventName<TAbi>>[];
15
15
  };
16
- export type WriteAndTrackError = SimulationFailedError | ContractReadError | GasEstimationError | ContractWriteError | InsufficientFundsError | UserRejectedError | GasPriceUnavailableError | TransactionFailedError | TransactionReplacedError | ReceiptTimeoutError | ClientNotFoundError | TransportError | WalletNotConnectedError | WrongNetworkError | EventDecodeError;
16
+ export type WriteAndTrackError = SimulationFailedError | ContractReadError | GasEstimationError | ContractWriteError | InsufficientFundsError | UserRejectedError | GasPriceUnavailableError | TxFailedError | TxReplacedError | ReceiptTimeoutError | ClientNotFoundError | TransportError | WalletNotConnectedError | WrongNetworkError | EventDecodeError;
17
17
  export type PipelineHooks = {
18
18
  readonly onSimulating?: () => Effect.Effect<void>;
19
19
  readonly onEstimated?: (gas: bigint, nonce: number | bigint) => Effect.Effect<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/contract/pipeline/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACxE,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,cAAc,EACd,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEjG,MAAM,MAAM,mBAAmB,CAC7B,IAAI,SAAS,GAAG,EAChB,aAAa,SAAS,oBAAoB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC,IACxE,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG;IACrC,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAAC,IAAI,SAAS,GAAG,IAAI;IAClD,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAC1B,qBAAqB,GACrB,iBAAiB,GACjB,kBAAkB,GAClB,kBAAkB,GAClB,sBAAsB,GACtB,iBAAiB,GACjB,wBAAwB,GACxB,sBAAsB,GACtB,wBAAwB,GACxB,mBAAmB,GACnB,mBAAmB,GACnB,cAAc,GACd,uBAAuB,GACvB,iBAAiB,GACjB,gBAAgB,CAAC;AAMrB,MAAM,MAAM,aAAa,GAAG;IAE1B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAElD,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEpF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE/C,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE3D,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE5F,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACzE,CAAC;AAKF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACnD,CAAC;AAKF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACzE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS;QAC7B,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,SAAS,GAAG,EAAE,CAAC;KAC7B,EAAE,CAAC;CACL,CAAC;AAKF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/contract/pipeline/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/contract/pipeline/types.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/contract/pipeline/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Effect } from \"effect\";\nimport type { Abi, Address, Hash, Hex, TransactionReceipt } from \"viem\";\nimport type {\n ClientNotFoundError,\n ContractReadError,\n ContractWriteError,\n EventDecodeError,\n GasEstimationError,\n InsufficientFundsError,\n ReceiptTimeoutError,\n SimulationFailedError,\n TransportError,\n TxFailedError,\n TxReplacedError,\n UserRejectedError,\n WalletNotConnectedError,\n WrongNetworkError,\n} from \"@/src/core/index.js\";\nimport type { DecodedEvent } from \"@/src/events/index.js\";\nimport type { GasPriceUnavailableError } from \"@/src/gas/index.js\";\nimport type { TxPolicy, TxState } from \"@/src/tx/index.js\";\nimport type { ContractEventName, ContractFunctionName, WriteParams } from \"@/src/types/index.js\";\n\nexport type WriteAndTrackParams<\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"nonpayable\" | \"payable\">,\n> = WriteParams<TAbi, TFunctionName> & {\n policy?: TxPolicy;\n};\n\nexport type WriteAndTrackResult<TAbi extends Abi> = {\n hash: Hash;\n receipt: TransactionReceipt;\n events: DecodedEvent<TAbi, ContractEventName<TAbi>>[];\n};\n\nexport type WriteAndTrackError =\n | SimulationFailedError\n | ContractReadError\n | GasEstimationError\n | ContractWriteError\n | InsufficientFundsError\n | UserRejectedError\n | GasPriceUnavailableError\n | TxFailedError\n | TxReplacedError\n | ReceiptTimeoutError\n | ClientNotFoundError\n | TransportError\n | WalletNotConnectedError\n | WrongNetworkError\n | EventDecodeError;\n\n/**\n * Hooks for core pipeline stages.\n * All hooks are optional and default to no-ops.\n */\nexport type PipelineHooks = {\n /** Called when simulation begins */\n readonly onSimulating?: () => Effect.Effect<void>;\n /** Called after gas estimation with the estimated values */\n readonly onEstimated?: (gas: bigint, nonce: number | bigint) => Effect.Effect<void>;\n /** Called when transaction signing begins */\n readonly onSigning?: () => Effect.Effect<void>;\n /** Called after transaction is submitted with the hash */\n readonly onSubmitted?: (hash: Hash) => Effect.Effect<void>;\n /** Called when a replacement transaction is detected */\n readonly onReplaced?: (oldHash: Hash, newHash: Hash, reason: string) => Effect.Effect<void>;\n /** Called when transaction is mined */\n readonly onMined?: (receipt: TransactionReceipt) => Effect.Effect<void>;\n};\n\n/**\n * Internal type for nonce reservation result\n */\nexport type NonceReservation = {\n readonly nonce: number | bigint;\n readonly reserved: boolean;\n readonly markSubmitted: () => Effect.Effect<void>;\n};\n\n/**\n * Internal type for prepared transaction overrides\n */\nexport type PreparedOverrides = {\n readonly type?: \"legacy\" | \"eip1559\" | \"eip2930\" | \"eip4844\" | \"eip7702\";\n readonly gas: bigint;\n readonly nonce: number | bigint;\n readonly gasPrice?: bigint;\n readonly maxFeePerGas?: bigint;\n readonly maxPriorityFeePerGas?: bigint;\n readonly accessList?: readonly {\n address: Address;\n storageKeys: readonly Hex[];\n }[];\n};\n\n/**\n * Result from the prepare phase\n */\nexport type PrepareResult = {\n readonly baseOverrides: PreparedOverrides;\n readonly finalGas: bigint;\n readonly txPreview: TxState[\"tx\"];\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"write-and-track.d.ts","sourceRoot":"","sources":["../../../src/contract/pipeline/write-and-track.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAsB,MAAM,QAAQ,CAAC;AACrE,OAAO,KAAK,EAAE,GAAG,EAAsB,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE/F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAIjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAK/F,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;IAC3C,QAAQ,CAAC,mBAAmB,EAAE,wBAAwB,CAAC;IACvD,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC,CAAC;AAKF,eAAO,MAAM,iBAAiB,GAAI,MAAM,iBAAiB,MAErD,IAAI,SAAS,GAAG,EAChB,aAAa;;kCA+SiB,QAAQ;mCAoCP,QAAQ;;;;uCAuCvC,CAAC"}
1
+ {"version":3,"file":"write-and-track.d.ts","sourceRoot":"","sources":["../../../src/contract/pipeline/write-and-track.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,MAAM,EAAsB,MAAM,QAAQ,CAAC;AACrE,OAAO,KAAK,EAAE,GAAG,EAAsB,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE/F,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAIjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAK/F,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACzC,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;IAC3C,QAAQ,CAAC,mBAAmB,EAAE,wBAAwB,CAAC;IACvD,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;CACtC,CAAC;AAKF,eAAO,MAAM,iBAAiB,GAAI,MAAM,iBAAiB,MAErD,IAAI,SAAS,GAAG,EAChB,aAAa;;kCA8SiB,QAAQ;mCAoCP,QAAQ;;;;uCAuCvC,CAAC"}