@prb/effect-evm 1.0.0-beta.4 → 1.0.0-beta.6

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 (233) hide show
  1. package/DOCS.md +13 -0
  2. package/README.md +1 -0
  3. package/dist/constants/index.d.ts +0 -4
  4. package/dist/constants/index.d.ts.map +1 -1
  5. package/dist/constants/index.js +0 -4
  6. package/dist/constants/index.js.map +1 -1
  7. package/dist/contract/pipeline/internal/core.d.ts +2 -2
  8. package/dist/contract/pipeline/internal/core.d.ts.map +1 -1
  9. package/dist/contract/pipeline/internal/core.js.map +1 -1
  10. package/dist/contract/pipeline/internal/receipt.d.ts +2 -2
  11. package/dist/contract/pipeline/internal/receipt.d.ts.map +1 -1
  12. package/dist/contract/pipeline/internal/receipt.js +1 -1
  13. package/dist/contract/pipeline/internal/receipt.js.map +1 -1
  14. package/dist/contract/pipeline/service.d.ts +3 -3
  15. package/dist/contract/pipeline/service.d.ts.map +1 -1
  16. package/dist/contract/pipeline/service.js.map +1 -1
  17. package/dist/contract/pipeline/types.d.ts +2 -2
  18. package/dist/contract/pipeline/types.d.ts.map +1 -1
  19. package/dist/contract/pipeline/types.js.map +1 -1
  20. package/dist/contract/pipeline/write-and-track.js +1 -1
  21. package/dist/contract/pipeline/write-and-track.js.map +1 -1
  22. package/dist/contract/pipeline/write-and-wait.d.ts +1 -1
  23. package/dist/contract/pipeline/write-and-wait.d.ts.map +1 -1
  24. package/dist/core/errors/transaction.d.ts +7 -7
  25. package/dist/core/errors/transaction.d.ts.map +1 -1
  26. package/dist/core/errors/transaction.js +2 -2
  27. package/dist/core/errors/transaction.js.map +1 -1
  28. package/dist/core/errors/viem-mapper.d.ts +3 -3
  29. package/dist/core/errors/viem-mapper.d.ts.map +1 -1
  30. package/dist/core/errors/viem-mapper.js +3 -3
  31. package/dist/core/errors/viem-mapper.js.map +1 -1
  32. package/dist/deploy/service.d.ts +3 -3
  33. package/dist/deploy/service.d.ts.map +1 -1
  34. package/dist/deploy/service.js.map +1 -1
  35. package/dist/eip7702/errors.d.ts +3 -3
  36. package/dist/eip7702/errors.d.ts.map +1 -1
  37. package/dist/eip7702/errors.js +1 -1
  38. package/dist/eip7702/errors.js.map +1 -1
  39. package/dist/eip7702/service.d.ts +8 -8
  40. package/dist/eip7702/service.d.ts.map +1 -1
  41. package/dist/eip7702/service.js +2 -2
  42. package/dist/eip7702/service.js.map +1 -1
  43. package/dist/react-hooks/index.d.ts +0 -4
  44. package/dist/react-hooks/index.d.ts.map +1 -1
  45. package/dist/react-hooks/index.js +0 -4
  46. package/dist/react-hooks/index.js.map +1 -1
  47. package/dist/subscriptions/pending-tx.d.ts +1 -1
  48. package/dist/subscriptions/pending-tx.d.ts.map +1 -1
  49. package/dist/subscriptions/pending-tx.js +1 -1
  50. package/dist/subscriptions/pending-tx.js.map +1 -1
  51. package/dist/subscriptions/service.d.ts +2 -2
  52. package/dist/subscriptions/service.d.ts.map +1 -1
  53. package/dist/subscriptions/service.js +4 -4
  54. package/dist/subscriptions/service.js.map +1 -1
  55. package/dist/telemetry/tracer.d.ts +2 -2
  56. package/dist/telemetry/tracer.js +2 -2
  57. package/dist/telemetry/tracer.js.map +1 -1
  58. package/dist/testing-kit/mock-subscription-service.d.ts +2 -2
  59. package/dist/testing-kit/mock-subscription-service.d.ts.map +1 -1
  60. package/dist/testing-kit/mock-subscription-service.js +5 -5
  61. package/dist/testing-kit/mock-subscription-service.js.map +1 -1
  62. package/dist/testing-kit/mock-transfer-service.d.ts +3 -3
  63. package/dist/testing-kit/mock-transfer-service.d.ts.map +1 -1
  64. package/dist/testing-kit/mock-transfer-service.js.map +1 -1
  65. package/dist/transfer/service.d.ts +3 -3
  66. package/dist/transfer/service.d.ts.map +1 -1
  67. package/dist/transfer/service.js +3 -3
  68. package/dist/transfer/service.js.map +1 -1
  69. package/dist/tx/manager.d.ts +2 -2
  70. package/dist/tx/manager.d.ts.map +1 -1
  71. package/dist/tx/manager.js +5 -5
  72. package/dist/tx/manager.js.map +1 -1
  73. package/dist/tx/manager.test.integration.js +4 -4
  74. package/dist/tx/manager.test.integration.js.map +1 -1
  75. package/dist/tx/replacement.d.ts +3 -3
  76. package/dist/tx/replacement.d.ts.map +1 -1
  77. package/dist/tx/replacement.js +3 -3
  78. package/dist/tx/replacement.js.map +1 -1
  79. package/dist/tx/tracker.d.ts +6 -6
  80. package/dist/tx/tracker.d.ts.map +1 -1
  81. package/dist/tx/tracker.js +9 -9
  82. package/dist/tx/tracker.js.map +1 -1
  83. package/dist/types/params.d.ts +1 -1
  84. package/dist/types/params.d.ts.map +1 -1
  85. package/dist/types/params.js.map +1 -1
  86. package/dist/wallet/errors.d.ts +3 -3
  87. package/dist/wallet/errors.d.ts.map +1 -1
  88. package/dist/wallet/errors.js +1 -1
  89. package/dist/wallet/errors.js.map +1 -1
  90. package/dist/wallet/operations.d.ts +2 -2
  91. package/dist/wallet/operations.d.ts.map +1 -1
  92. package/dist/wallet/operations.js +2 -2
  93. package/dist/wallet/operations.js.map +1 -1
  94. package/dist/wallet/service.d.ts +2 -2
  95. package/dist/wallet/service.d.ts.map +1 -1
  96. package/dist/wallet/service.js.map +1 -1
  97. package/package.json +1 -6
  98. package/dist/react-hooks/safe-origins.d.ts +0 -8
  99. package/dist/react-hooks/safe-origins.d.ts.map +0 -1
  100. package/dist/react-hooks/safe-origins.js +0 -124
  101. package/dist/react-hooks/safe-origins.js.map +0 -1
  102. package/dist/react-hooks/use-is-host-safe-multisig.d.ts +0 -2
  103. package/dist/react-hooks/use-is-host-safe-multisig.d.ts.map +0 -1
  104. package/dist/react-hooks/use-is-host-safe-multisig.js +0 -16
  105. package/dist/react-hooks/use-is-host-safe-multisig.js.map +0 -1
  106. package/dist/react-hooks/use-is-wallet-safe-multisig.d.ts +0 -2
  107. package/dist/react-hooks/use-is-wallet-safe-multisig.d.ts.map +0 -1
  108. package/dist/react-hooks/use-is-wallet-safe-multisig.js +0 -24
  109. package/dist/react-hooks/use-is-wallet-safe-multisig.js.map +0 -1
  110. package/dist/react-hooks/use-safe-context.d.ts +0 -2
  111. package/dist/react-hooks/use-safe-context.d.ts.map +0 -1
  112. package/dist/react-hooks/use-safe-context.js +0 -41
  113. package/dist/react-hooks/use-safe-context.js.map +0 -1
  114. package/dist/safe/adapter.d.ts +0 -9
  115. package/dist/safe/adapter.d.ts.map +0 -1
  116. package/dist/safe/adapter.js +0 -13
  117. package/dist/safe/adapter.js.map +0 -1
  118. package/dist/safe/detection.d.ts +0 -26
  119. package/dist/safe/detection.d.ts.map +0 -1
  120. package/dist/safe/detection.js +0 -102
  121. package/dist/safe/detection.js.map +0 -1
  122. package/dist/safe/detection.test.integration.d.ts +0 -2
  123. package/dist/safe/detection.test.integration.d.ts.map +0 -1
  124. package/dist/safe/detection.test.integration.js +0 -92
  125. package/dist/safe/detection.test.integration.js.map +0 -1
  126. package/dist/safe/errors.d.ts +0 -79
  127. package/dist/safe/errors.d.ts.map +0 -1
  128. package/dist/safe/errors.js +0 -34
  129. package/dist/safe/errors.js.map +0 -1
  130. package/dist/safe/index.d.ts +0 -8
  131. package/dist/safe/index.d.ts.map +0 -1
  132. package/dist/safe/index.js +0 -6
  133. package/dist/safe/index.js.map +0 -1
  134. package/dist/safe/live.d.ts +0 -8
  135. package/dist/safe/live.d.ts.map +0 -1
  136. package/dist/safe/live.js +0 -250
  137. package/dist/safe/live.js.map +0 -1
  138. package/dist/safe/service.d.ts +0 -26
  139. package/dist/safe/service.d.ts.map +0 -1
  140. package/dist/safe/service.js +0 -4
  141. package/dist/safe/service.js.map +0 -1
  142. package/dist/safe/service.test.integration.d.ts +0 -2
  143. package/dist/safe/service.test.integration.d.ts.map +0 -1
  144. package/dist/safe/service.test.integration.js +0 -173
  145. package/dist/safe/service.test.integration.js.map +0 -1
  146. package/dist/safe/simulation/abis.d.ts +0 -73
  147. package/dist/safe/simulation/abis.d.ts.map +0 -1
  148. package/dist/safe/simulation/abis.js +0 -61
  149. package/dist/safe/simulation/abis.js.map +0 -1
  150. package/dist/safe/simulation/addresses.d.ts +0 -4
  151. package/dist/safe/simulation/addresses.d.ts.map +0 -1
  152. package/dist/safe/simulation/addresses.js +0 -54
  153. package/dist/safe/simulation/addresses.js.map +0 -1
  154. package/dist/safe/simulation/encoding.d.ts +0 -16
  155. package/dist/safe/simulation/encoding.d.ts.map +0 -1
  156. package/dist/safe/simulation/encoding.js +0 -36
  157. package/dist/safe/simulation/encoding.js.map +0 -1
  158. package/dist/safe/simulation/errors.d.ts +0 -56
  159. package/dist/safe/simulation/errors.d.ts.map +0 -1
  160. package/dist/safe/simulation/errors.js +0 -37
  161. package/dist/safe/simulation/errors.js.map +0 -1
  162. package/dist/safe/simulation/index.d.ts +0 -7
  163. package/dist/safe/simulation/index.d.ts.map +0 -1
  164. package/dist/safe/simulation/index.js +0 -6
  165. package/dist/safe/simulation/index.js.map +0 -1
  166. package/dist/safe/simulation/internal/calldata/calldata.d.ts +0 -5
  167. package/dist/safe/simulation/internal/calldata/calldata.d.ts.map +0 -1
  168. package/dist/safe/simulation/internal/calldata/calldata.js +0 -17
  169. package/dist/safe/simulation/internal/calldata/calldata.js.map +0 -1
  170. package/dist/safe/simulation/internal/calldata/index.d.ts +0 -2
  171. package/dist/safe/simulation/internal/calldata/index.d.ts.map +0 -1
  172. package/dist/safe/simulation/internal/calldata/index.js +0 -2
  173. package/dist/safe/simulation/internal/calldata/index.js.map +0 -1
  174. package/dist/safe/simulation/internal/contracts/contracts.d.ts +0 -5
  175. package/dist/safe/simulation/internal/contracts/contracts.d.ts.map +0 -1
  176. package/dist/safe/simulation/internal/contracts/contracts.js +0 -25
  177. package/dist/safe/simulation/internal/contracts/contracts.js.map +0 -1
  178. package/dist/safe/simulation/internal/contracts/index.d.ts +0 -2
  179. package/dist/safe/simulation/internal/contracts/index.d.ts.map +0 -1
  180. package/dist/safe/simulation/internal/contracts/index.js +0 -2
  181. package/dist/safe/simulation/internal/contracts/index.js.map +0 -1
  182. package/dist/safe/simulation/internal/evaluation/evaluation.d.ts +0 -6
  183. package/dist/safe/simulation/internal/evaluation/evaluation.d.ts.map +0 -1
  184. package/dist/safe/simulation/internal/evaluation/evaluation.js +0 -20
  185. package/dist/safe/simulation/internal/evaluation/evaluation.js.map +0 -1
  186. package/dist/safe/simulation/internal/evaluation/index.d.ts +0 -2
  187. package/dist/safe/simulation/internal/evaluation/index.d.ts.map +0 -1
  188. package/dist/safe/simulation/internal/evaluation/index.js +0 -2
  189. package/dist/safe/simulation/internal/evaluation/index.js.map +0 -1
  190. package/dist/safe/simulation/internal/execution/execution.d.ts +0 -9
  191. package/dist/safe/simulation/internal/execution/execution.d.ts.map +0 -1
  192. package/dist/safe/simulation/internal/execution/execution.js +0 -65
  193. package/dist/safe/simulation/internal/execution/execution.js.map +0 -1
  194. package/dist/safe/simulation/internal/execution/index.d.ts +0 -2
  195. package/dist/safe/simulation/internal/execution/index.d.ts.map +0 -1
  196. package/dist/safe/simulation/internal/execution/index.js +0 -2
  197. package/dist/safe/simulation/internal/execution/index.js.map +0 -1
  198. package/dist/safe/simulation/internal/limits/index.d.ts +0 -2
  199. package/dist/safe/simulation/internal/limits/index.d.ts.map +0 -1
  200. package/dist/safe/simulation/internal/limits/index.js +0 -2
  201. package/dist/safe/simulation/internal/limits/index.js.map +0 -1
  202. package/dist/safe/simulation/internal/limits/limits.d.ts +0 -5
  203. package/dist/safe/simulation/internal/limits/limits.d.ts.map +0 -1
  204. package/dist/safe/simulation/internal/limits/limits.js +0 -18
  205. package/dist/safe/simulation/internal/limits/limits.js.map +0 -1
  206. package/dist/safe/simulation/internal/types/index.d.ts +0 -2
  207. package/dist/safe/simulation/internal/types/index.d.ts.map +0 -1
  208. package/dist/safe/simulation/internal/types/index.js +0 -2
  209. package/dist/safe/simulation/internal/types/index.js.map +0 -1
  210. package/dist/safe/simulation/internal/types/types.d.ts +0 -11
  211. package/dist/safe/simulation/internal/types/types.d.ts.map +0 -1
  212. package/dist/safe/simulation/internal/types/types.js +0 -2
  213. package/dist/safe/simulation/internal/types/types.js.map +0 -1
  214. package/dist/safe/simulation/internal/validation/index.d.ts +0 -2
  215. package/dist/safe/simulation/internal/validation/index.d.ts.map +0 -1
  216. package/dist/safe/simulation/internal/validation/index.js +0 -2
  217. package/dist/safe/simulation/internal/validation/index.js.map +0 -1
  218. package/dist/safe/simulation/internal/validation/validation.d.ts +0 -5
  219. package/dist/safe/simulation/internal/validation/validation.d.ts.map +0 -1
  220. package/dist/safe/simulation/internal/validation/validation.js +0 -27
  221. package/dist/safe/simulation/internal/validation/validation.js.map +0 -1
  222. package/dist/safe/simulation/service.d.ts +0 -14
  223. package/dist/safe/simulation/service.d.ts.map +0 -1
  224. package/dist/safe/simulation/service.js +0 -25
  225. package/dist/safe/simulation/service.js.map +0 -1
  226. package/dist/safe/simulation/types.d.ts +0 -20
  227. package/dist/safe/simulation/types.d.ts.map +0 -1
  228. package/dist/safe/simulation/types.js +0 -2
  229. package/dist/safe/simulation/types.js.map +0 -1
  230. package/dist/safe/types.d.ts +0 -61
  231. package/dist/safe/types.d.ts.map +0 -1
  232. package/dist/safe/types.js +0 -2
  233. package/dist/safe/types.js.map +0 -1
package/DOCS.md CHANGED
@@ -229,6 +229,19 @@ function App() {
229
229
  }
230
230
  ```
231
231
 
232
+ ### Safe App vs Safe multisig
233
+
234
+ Use Safe App hooks to detect the host iframe context, and Safe multisig hooks to detect the connected wallet.
235
+
236
+ - Safe App context (SDK): `useIsSafeAppContext`
237
+ - Safe App host (SDK + origin): `useIsHostSafeApp`
238
+ - Safe multisig wallet (SDK + connector + host): `useIsSafeMultisigWallet`
239
+
240
+ Safe App origin utilities let you control the allowed host list:
241
+
242
+ - `DEFAULT_SAFE_APP_ORIGINS`
243
+ - `getSafeAppOrigins`, `setSafeAppOrigins`, `extendSafeAppOrigins`, `subscribeSafeAppOrigins`
244
+
232
245
  ### Primitive hooks
233
246
 
234
247
  Low-level hooks for running Effects and Streams in React:
package/README.md CHANGED
@@ -60,6 +60,7 @@ Effect.runPromise(program.pipe(Effect.provide(EvmLayer)));
60
60
  - **Subscriptions** — `SubscriptionService` (blocks/logs/pending tx)
61
61
  - **EIP-7702** — Delegation and atomic batching for EOAs
62
62
  - **React hooks** — `effect-evm/react-hooks` (primitives + convenience hooks)
63
+ - **Safe App + Safe multisig** — `useIsSafeAppContext`, `useIsHostSafeApp`, `useIsSafeMultisigWallet`
63
64
  - **Wagmi integration** — `effect-evm/wagmi` (build layers from wagmi config)
64
65
  - **Browser persistence** — `browser` namespace (localStorage-backed stores)
65
66
  - **Testing** — `effect-evm/testing-kit` (mocks + `makeEffectEvmTestLayer`)
@@ -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"}
@@ -10,8 +10,4 @@ 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","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(\"45 seconds\");\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\n// =============================================================================\n// Safe Apps Constants\n// =============================================================================\n\n/** Default poll interval for Safe gateway status checks. */\nexport const SAFE_POLL_INTERVAL = Duration.toMillis(\"3 seconds\");\n\n/** Default timeout for Safe transaction execution. */\nexport const SAFE_EXECUTION_TIMEOUT = Duration.toMillis(\"5 minutes\");\n\n/** Default poll interval for off-chain signature checks. */\nexport const SAFE_SIGNATURE_POLL_INTERVAL = Duration.toMillis(\"2 seconds\");\n\n/** Default timeout for off-chain signature availability. */\nexport const SAFE_SIGNATURE_TIMEOUT = Duration.toMillis(\"2 minutes\");\n"]}
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(\"45 seconds\");\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"]}
@@ -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":"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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 TransactionFailedError,\n TransportError,\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 | TransactionFailedError\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
+ {"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,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","sourcesContent":["import { Effect } from \"effect\";\nimport type { Hash, TransactionReceipt } from \"viem\";\nimport type {\n ClientNotFoundError,\n ReceiptTimeoutError,\n TransactionFailedError,\n} 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<\n TransactionReceipt,\n TransactionFailedError | ReceiptTimeoutError | ClientNotFoundError\n> =>\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 === \"TransactionReplacedError\") {\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
+ {"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,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","sourcesContent":["import type { Effect, Scope, SubscriptionRef } from \"effect\";\nimport { Context } from \"effect\";\nimport type { Abi, Hash } from \"viem\";\nimport type {\n ClientNotFoundError,\n TransactionFailedError,\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 | TransactionFailedError\n | WalletNotConnectedError\n | ClientNotFoundError\n | GasPriceUnavailableError\n | Error\n >;\n readonly cancel: (\n policy?: TxPolicy\n ) => Effect.Effect<\n Hash,\n | TransactionFailedError\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
+ {"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":"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"}
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":"","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 TransactionFailedError,\n TransactionReplacedError,\n TransportError,\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 | TransactionFailedError\n | TransactionReplacedError\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
+ {"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"]}
@@ -156,7 +156,7 @@ export const makeWriteAndTrack = (deps) => Effect.fn("ContractPipeline.writeAndT
156
156
  return exit.right;
157
157
  }
158
158
  const error = exit.left;
159
- if (error._tag === "TransactionReplacedError") {
159
+ if (error._tag === "TxReplacedError") {
160
160
  const newHash = error.newHash;
161
161
  const now = yield* Clock.currentTimeMillis;
162
162
  yield* Ref.set(currentHashRef, newHash);
@@ -1 +1 @@
1
- {"version":3,"file":"write-and-track.js","sourceRoot":"","sources":["../../../src/contract/pipeline/write-and-track.ts"],"names":[],"mappings":"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","sourcesContent":["import { Clock, Deferred, Effect, Fiber, Ref, Stream } from \"effect\";\nimport type { Abi, Hash, PublicClient } from \"viem\";\nimport { DEFAULT_STUCK_TX_MS } from \"@/src/constants/index.js\";\nimport type { ContractWriterShape } from \"@/src/contract/index.js\";\nimport type { PublicClientServiceShape } from \"@/src/core/index.js\";\nimport type { EventStreamShape } from \"@/src/events/index.js\";\nimport type { GasServiceShape } from \"@/src/gas/index.js\";\nimport type { NonceServiceShape } from \"@/src/nonce/index.js\";\nimport type { TxManagerShape, TxPolicy, TxReplacementShape, TxState } from \"@/src/tx/index.js\";\nimport { defaultPolicy, makeTxTracker } from \"@/src/tx/index.js\";\nimport type { ContractFunctionName } from \"@/src/types/index.js\";\nimport { applyGasLimitMultiplier, nonceToBigInt } from \"./internal/helpers.js\";\nimport { withNonceReservation } from \"./internal/nonce.js\";\nimport { deriveBaseOverrides } from \"./internal/prepare.js\";\nimport type { WriteAndTrackError, WriteAndTrackParams, WriteAndTrackResult } from \"./types.js\";\n\n/**\n * Dependencies required by writeAndTrack\n */\nexport type WriteAndTrackDeps = {\n readonly writer: ContractWriterShape;\n readonly txManager: TxManagerShape;\n readonly eventStream: EventStreamShape;\n readonly nonceService: NonceServiceShape;\n readonly txReplacement: TxReplacementShape;\n readonly publicClientService: PublicClientServiceShape;\n readonly gasService: GasServiceShape;\n};\n\n/**\n * Create the writeAndTrack implementation with full tracking orchestration\n */\nexport const makeWriteAndTrack = (deps: WriteAndTrackDeps) =>\n Effect.fn(\"ContractPipeline.writeAndTrack\")(function* <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"nonpayable\" | \"payable\">,\n >(params: WriteAndTrackParams<TAbi, TFunctionName>) {\n const {\n writer,\n txManager,\n eventStream,\n nonceService,\n txReplacement,\n publicClientService,\n gasService,\n } = deps;\n\n const tracker = yield* makeTxTracker;\n const policy = params.policy ?? defaultPolicy;\n const currentHashRef = yield* Ref.make<Hash | null>(null);\n const blocksElapsedRef = yield* Ref.make(0);\n const startedAtMsRef = yield* Ref.make(0);\n const autoAttemptsRef = yield* Ref.make(0);\n const autoReplacingRef = yield* Ref.make(false);\n\n const resultDeferred = yield* Deferred.make<WriteAndTrackResult<TAbi>, WriteAndTrackError>();\n\n const run = Effect.gen(function* () {\n // Step 1: Derive base overrides\n const baseOverrides = yield* deriveBaseOverrides(gasService, {\n chainId: params.chainId,\n policy,\n userOverrides: params.overrides,\n });\n\n // Step 2: Estimate gas first to provide a reasonable limit for simulation.\n // Some RPC nodes default to max uint64 when no gas limit is provided,\n // causing \"insufficient funds\" errors during the balance check.\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 const explicitGas = params.overrides?.gas ?? params.gas;\n const finalGas = explicitGas ?? derivedGas;\n\n // Step 3: Simulate with the gas limit to ensure proper balance checks\n yield* tracker.set({ status: \"simulating\" });\n yield* writer.simulate({ ...params, overrides: { ...baseOverrides, gas: finalGas } });\n const explicitNonce = params.overrides?.nonce;\n\n // Step 4: Reserve nonce\n const nonceReservation = yield* withNonceReservation(nonceService, {\n account: params.account,\n chainId: params.chainId,\n explicitNonce,\n });\n\n const nonce = nonceReservation.nonce;\n\n const overridesWithGasAndNonce = {\n ...baseOverrides,\n gas: finalGas,\n nonce,\n };\n\n yield* tracker.set({\n gas: finalGas,\n status: \"estimated\",\n tx: {\n accessList: overridesWithGasAndNonce.accessList,\n gas: finalGas,\n gasPrice: overridesWithGasAndNonce.gasPrice,\n maxFeePerGas: overridesWithGasAndNonce.maxFeePerGas,\n maxPriorityFeePerGas: overridesWithGasAndNonce.maxPriorityFeePerGas,\n nonce,\n type: overridesWithGasAndNonce.type,\n },\n });\n\n // Step 5: Signing\n yield* tracker.update((prev) => ({ status: \"signing\", tx: prev.tx }) as TxState);\n\n // Step 6: Write transaction\n const hash = yield* writer.write({\n ...params,\n overrides: overridesWithGasAndNonce,\n });\n yield* nonceReservation.markSubmitted;\n yield* Ref.set(currentHashRef, hash);\n yield* Ref.set(blocksElapsedRef, 0);\n yield* Ref.set(autoAttemptsRef, 0);\n yield* Ref.set(autoReplacingRef, false);\n yield* Ref.set(startedAtMsRef, yield* Clock.currentTimeMillis);\n yield* tracker.update((prev) => ({ hash, status: \"submitted\", tx: prev.tx }) as TxState);\n\n // Set up block watcher for pending state updates\n const publicClient: PublicClient = yield* publicClientService.get(params.chainId);\n const replacementStrategy =\n policy.replacement?.strategy ?? policy.replacementStrategy ?? \"none\";\n const stuckBlocks = policy.replacement?.stuckBlocks ?? 3;\n const stuckMs = policy.replacement?.stuckMs ?? DEFAULT_STUCK_TX_MS;\n const maxAttempts = policy.replacement?.maxAttempts ?? 1;\n\n const updatePendingState = (currentHash: Hash) =>\n Effect.gen(function* () {\n const blocksElapsed = yield* Ref.modify(blocksElapsedRef, (n) => [n + 1, n + 1] as const);\n\n yield* tracker.update((prev) => {\n if (prev.status === \"mined\" || prev.status === \"failed\") {\n return prev;\n }\n return {\n confirmations: blocksElapsed,\n hash: currentHash,\n status: \"pending\",\n tx: prev.tx,\n } as TxState;\n });\n\n return blocksElapsed;\n });\n\n const performAutoReplacement = (currentHash: Hash, now: number) =>\n Ref.set(autoReplacingRef, true).pipe(\n Effect.zipRight(\n (replacementStrategy === \"cancel\"\n ? txReplacement.cancel(params.chainId, currentHash, policy)\n : txReplacement.speedup(params.chainId, currentHash, policy)\n ).pipe(\n Effect.either,\n Effect.ensuring(Ref.set(autoReplacingRef, false)),\n Effect.flatMap((replaced) => {\n if (replaced._tag === \"Left\") {\n return Effect.void;\n }\n\n const newHash = replaced.right;\n return Effect.all([\n Ref.set(currentHashRef, newHash),\n Ref.set(blocksElapsedRef, 0),\n Ref.set(startedAtMsRef, now),\n Ref.update(autoAttemptsRef, (n) => n + 1),\n tracker.update(\n (prev) =>\n ({\n newHash,\n oldHash: currentHash,\n reason: replacementStrategy === \"cancel\" ? \"cancelled\" : \"repriced\",\n status: \"replaced\",\n tx: prev.tx,\n }) as TxState\n ),\n tracker.update(\n (prev) =>\n ({\n hash: newHash,\n status: \"submitted\",\n tx: prev.tx,\n }) as TxState\n ),\n ]).pipe(Effect.asVoid);\n })\n )\n )\n );\n\n const autoReplaceIfStuck = (currentHash: Hash, blocksElapsed: number) => {\n if (replacementStrategy === \"none\") {\n return Effect.void;\n }\n\n return Effect.all({\n alreadyReplacing: Ref.get(autoReplacingRef),\n attempts: Ref.get(autoAttemptsRef),\n now: Clock.currentTimeMillis,\n startedAt: Ref.get(startedAtMsRef),\n }).pipe(\n Effect.flatMap(({ alreadyReplacing, attempts, now, startedAt }) => {\n const elapsed = startedAt > 0 ? now - startedAt : 0;\n const stuck = blocksElapsed >= stuckBlocks || elapsed >= stuckMs;\n const allowed = attempts < maxAttempts && !alreadyReplacing;\n return stuck && allowed ? performAutoReplacement(currentHash, now) : Effect.void;\n })\n );\n };\n\n const onPendingBlock = Effect.gen(function* () {\n const currentHash = yield* Ref.get(currentHashRef);\n if (!currentHash) {\n return;\n }\n\n const blocksElapsed = yield* updatePendingState(currentHash);\n yield* autoReplaceIfStuck(currentHash, blocksElapsed);\n });\n\n const pendingFiber = yield* Stream.runForEach(\n Stream.async<bigint, unknown>((emit) => {\n const unwatch = publicClient.watchBlockNumber({\n onBlockNumber: (blockNumber: bigint) => emit.single(blockNumber),\n onError: (error) => emit.fail(error as unknown),\n pollingInterval: policy.pollingInterval,\n });\n\n return Effect.sync(() => {\n unwatch();\n });\n }),\n () => onPendingBlock\n ).pipe(Effect.forkScoped);\n\n // Step 7: Wait for receipt (follow replacements)\n const receipt = yield* Effect.gen(function* () {\n let waitHash = hash;\n\n while (true) {\n const exit = yield* txManager\n .waitForReceipt(params.chainId, waitHash, 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 === \"TransactionReplacedError\") {\n const newHash = error.newHash as Hash;\n const now = yield* Clock.currentTimeMillis;\n\n yield* Ref.set(currentHashRef, newHash);\n yield* Ref.set(blocksElapsedRef, 0);\n yield* Ref.set(startedAtMsRef, now);\n yield* tracker.update(\n (prev) =>\n ({\n newHash,\n oldHash: error.oldHash as Hash,\n reason: error.reason,\n status: \"replaced\",\n tx: prev.tx,\n }) as TxState\n );\n yield* tracker.update(\n (prev) =>\n ({\n hash: newHash,\n status: \"submitted\",\n tx: prev.tx,\n }) as TxState\n );\n\n waitHash = newHash;\n continue;\n }\n\n return yield* Effect.fail(error);\n }\n }).pipe(Effect.ensuring(Fiber.interrupt(pendingFiber)));\n\n // Step 8: Update to mined state\n yield* tracker.update(\n (prev) =>\n ({\n effectiveGasPrice: receipt.effectiveGasPrice,\n hash: receipt.transactionHash as Hash,\n receipt,\n status: \"mined\",\n tx: prev.tx,\n }) as TxState\n );\n\n if (nonceReservation.reserved) {\n yield* nonceService.confirm({\n address: params.account,\n chainId: params.chainId,\n nonce: nonceToBigInt(nonceReservation.nonce),\n });\n }\n\n // Step 9: 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\n yield* run.pipe(\n Effect.either,\n Effect.flatMap((either) =>\n either._tag === \"Right\"\n ? Deferred.succeed(resultDeferred, either.right)\n : Deferred.fail(resultDeferred, either.left)\n ),\n Effect.forkScoped\n );\n\n return {\n actions: {\n cancel: (overridePolicy?: TxPolicy) =>\n Effect.gen(function* () {\n const currentHash = yield* Ref.get(currentHashRef);\n if (!currentHash) {\n return yield* Effect.fail(new Error(\"Transaction not yet submitted\"));\n }\n\n const nextPolicy = overridePolicy ?? policy;\n const newHash = yield* txReplacement.cancel(params.chainId, currentHash, nextPolicy);\n const now = yield* Clock.currentTimeMillis;\n\n yield* Ref.set(currentHashRef, newHash);\n yield* Ref.set(blocksElapsedRef, 0);\n yield* Ref.set(startedAtMsRef, now);\n yield* tracker.update(\n (prev) =>\n ({\n newHash,\n oldHash: currentHash,\n reason: \"cancelled\",\n status: \"replaced\",\n tx: prev.tx,\n }) as TxState\n );\n yield* tracker.update(\n (prev) =>\n ({\n hash: newHash,\n status: \"submitted\",\n tx: prev.tx,\n }) as TxState\n );\n\n return newHash;\n }),\n\n speedup: (overridePolicy?: TxPolicy) =>\n Effect.gen(function* () {\n const currentHash = yield* Ref.get(currentHashRef);\n if (!currentHash) {\n return yield* Effect.fail(new Error(\"Transaction not yet submitted\"));\n }\n\n const nextPolicy = overridePolicy ?? policy;\n const newHash = yield* txReplacement.speedup(params.chainId, currentHash, nextPolicy);\n const now = yield* Clock.currentTimeMillis;\n\n yield* Ref.set(currentHashRef, newHash);\n yield* Ref.set(blocksElapsedRef, 0);\n yield* Ref.set(startedAtMsRef, now);\n yield* tracker.update(\n (prev) =>\n ({\n newHash,\n oldHash: currentHash,\n reason: \"repriced\",\n status: \"replaced\",\n tx: prev.tx,\n }) as TxState\n );\n yield* tracker.update(\n (prev) =>\n ({\n hash: newHash,\n status: \"submitted\",\n tx: prev.tx,\n }) as TxState\n );\n\n return newHash;\n }),\n },\n result: Deferred.await(resultDeferred),\n stateRef: tracker.ref,\n };\n });\n"]}
1
+ {"version":3,"file":"write-and-track.js","sourceRoot":"","sources":["../../../src/contract/pipeline/write-and-track.ts"],"names":[],"mappings":"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","sourcesContent":["import { Clock, Deferred, Effect, Fiber, Ref, Stream } from \"effect\";\nimport type { Abi, Hash, PublicClient } from \"viem\";\nimport { DEFAULT_STUCK_TX_MS } from \"@/src/constants/index.js\";\nimport type { ContractWriterShape } from \"@/src/contract/index.js\";\nimport type { PublicClientServiceShape } from \"@/src/core/index.js\";\nimport type { EventStreamShape } from \"@/src/events/index.js\";\nimport type { GasServiceShape } from \"@/src/gas/index.js\";\nimport type { NonceServiceShape } from \"@/src/nonce/index.js\";\nimport type { TxManagerShape, TxPolicy, TxReplacementShape, TxState } from \"@/src/tx/index.js\";\nimport { defaultPolicy, makeTxTracker } from \"@/src/tx/index.js\";\nimport type { ContractFunctionName } from \"@/src/types/index.js\";\nimport { applyGasLimitMultiplier, nonceToBigInt } from \"./internal/helpers.js\";\nimport { withNonceReservation } from \"./internal/nonce.js\";\nimport { deriveBaseOverrides } from \"./internal/prepare.js\";\nimport type { WriteAndTrackError, WriteAndTrackParams, WriteAndTrackResult } from \"./types.js\";\n\n/**\n * Dependencies required by writeAndTrack\n */\nexport type WriteAndTrackDeps = {\n readonly writer: ContractWriterShape;\n readonly txManager: TxManagerShape;\n readonly eventStream: EventStreamShape;\n readonly nonceService: NonceServiceShape;\n readonly txReplacement: TxReplacementShape;\n readonly publicClientService: PublicClientServiceShape;\n readonly gasService: GasServiceShape;\n};\n\n/**\n * Create the writeAndTrack implementation with full tracking orchestration\n */\nexport const makeWriteAndTrack = (deps: WriteAndTrackDeps) =>\n Effect.fn(\"ContractPipeline.writeAndTrack\")(function* <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"nonpayable\" | \"payable\">,\n >(params: WriteAndTrackParams<TAbi, TFunctionName>) {\n const {\n writer,\n txManager,\n eventStream,\n nonceService,\n txReplacement,\n publicClientService,\n gasService,\n } = deps;\n\n const tracker = yield* makeTxTracker;\n const policy = params.policy ?? defaultPolicy;\n const currentHashRef = yield* Ref.make<Hash | null>(null);\n const blocksElapsedRef = yield* Ref.make(0);\n const startedAtMsRef = yield* Ref.make(0);\n const autoAttemptsRef = yield* Ref.make(0);\n const autoReplacingRef = yield* Ref.make(false);\n\n const resultDeferred = yield* Deferred.make<WriteAndTrackResult<TAbi>, WriteAndTrackError>();\n\n const run = Effect.gen(function* () {\n // Step 1: Derive base overrides\n const baseOverrides = yield* deriveBaseOverrides(gasService, {\n chainId: params.chainId,\n policy,\n userOverrides: params.overrides,\n });\n\n // Step 2: Estimate gas first to provide a reasonable limit for simulation.\n // Some RPC nodes default to max uint64 when no gas limit is provided,\n // causing \"insufficient funds\" errors during the balance check.\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 const explicitGas = params.overrides?.gas ?? params.gas;\n const finalGas = explicitGas ?? derivedGas;\n\n // Step 3: Simulate with the gas limit to ensure proper balance checks\n yield* tracker.set({ status: \"simulating\" });\n yield* writer.simulate({ ...params, overrides: { ...baseOverrides, gas: finalGas } });\n const explicitNonce = params.overrides?.nonce;\n\n // Step 4: Reserve nonce\n const nonceReservation = yield* withNonceReservation(nonceService, {\n account: params.account,\n chainId: params.chainId,\n explicitNonce,\n });\n\n const nonce = nonceReservation.nonce;\n\n const overridesWithGasAndNonce = {\n ...baseOverrides,\n gas: finalGas,\n nonce,\n };\n\n yield* tracker.set({\n gas: finalGas,\n status: \"estimated\",\n tx: {\n accessList: overridesWithGasAndNonce.accessList,\n gas: finalGas,\n gasPrice: overridesWithGasAndNonce.gasPrice,\n maxFeePerGas: overridesWithGasAndNonce.maxFeePerGas,\n maxPriorityFeePerGas: overridesWithGasAndNonce.maxPriorityFeePerGas,\n nonce,\n type: overridesWithGasAndNonce.type,\n },\n });\n\n // Step 5: Signing\n yield* tracker.update((prev) => ({ status: \"signing\", tx: prev.tx }) as TxState);\n\n // Step 6: Write transaction\n const hash = yield* writer.write({\n ...params,\n overrides: overridesWithGasAndNonce,\n });\n yield* nonceReservation.markSubmitted;\n yield* Ref.set(currentHashRef, hash);\n yield* Ref.set(blocksElapsedRef, 0);\n yield* Ref.set(autoAttemptsRef, 0);\n yield* Ref.set(autoReplacingRef, false);\n yield* Ref.set(startedAtMsRef, yield* Clock.currentTimeMillis);\n yield* tracker.update((prev) => ({ hash, status: \"submitted\", tx: prev.tx }) as TxState);\n\n // Set up block watcher for pending state updates\n const publicClient: PublicClient = yield* publicClientService.get(params.chainId);\n const replacementStrategy =\n policy.replacement?.strategy ?? policy.replacementStrategy ?? \"none\";\n const stuckBlocks = policy.replacement?.stuckBlocks ?? 3;\n const stuckMs = policy.replacement?.stuckMs ?? DEFAULT_STUCK_TX_MS;\n const maxAttempts = policy.replacement?.maxAttempts ?? 1;\n\n const updatePendingState = (currentHash: Hash) =>\n Effect.gen(function* () {\n const blocksElapsed = yield* Ref.modify(blocksElapsedRef, (n) => [n + 1, n + 1] as const);\n\n yield* tracker.update((prev) => {\n if (prev.status === \"mined\" || prev.status === \"failed\") {\n return prev;\n }\n return {\n confirmations: blocksElapsed,\n hash: currentHash,\n status: \"pending\",\n tx: prev.tx,\n } as TxState;\n });\n\n return blocksElapsed;\n });\n\n const performAutoReplacement = (currentHash: Hash, now: number) =>\n Ref.set(autoReplacingRef, true).pipe(\n Effect.zipRight(\n (replacementStrategy === \"cancel\"\n ? txReplacement.cancel(params.chainId, currentHash, policy)\n : txReplacement.speedup(params.chainId, currentHash, policy)\n ).pipe(\n Effect.either,\n Effect.ensuring(Ref.set(autoReplacingRef, false)),\n Effect.flatMap((replaced) => {\n if (replaced._tag === \"Left\") {\n return Effect.void;\n }\n\n const newHash = replaced.right;\n return Effect.all([\n Ref.set(currentHashRef, newHash),\n Ref.set(blocksElapsedRef, 0),\n Ref.set(startedAtMsRef, now),\n Ref.update(autoAttemptsRef, (n) => n + 1),\n tracker.update(\n (prev) =>\n ({\n newHash,\n oldHash: currentHash,\n reason: replacementStrategy === \"cancel\" ? \"cancelled\" : \"repriced\",\n status: \"replaced\",\n tx: prev.tx,\n }) as TxState\n ),\n tracker.update(\n (prev) =>\n ({\n hash: newHash,\n status: \"submitted\",\n tx: prev.tx,\n }) as TxState\n ),\n ]).pipe(Effect.asVoid);\n })\n )\n )\n );\n\n const autoReplaceIfStuck = (currentHash: Hash, blocksElapsed: number) => {\n if (replacementStrategy === \"none\") {\n return Effect.void;\n }\n\n return Effect.all({\n alreadyReplacing: Ref.get(autoReplacingRef),\n attempts: Ref.get(autoAttemptsRef),\n now: Clock.currentTimeMillis,\n startedAt: Ref.get(startedAtMsRef),\n }).pipe(\n Effect.flatMap(({ alreadyReplacing, attempts, now, startedAt }) => {\n const elapsed = startedAt > 0 ? now - startedAt : 0;\n const stuck = blocksElapsed >= stuckBlocks || elapsed >= stuckMs;\n const allowed = attempts < maxAttempts && !alreadyReplacing;\n return stuck && allowed ? performAutoReplacement(currentHash, now) : Effect.void;\n })\n );\n };\n\n const onPendingBlock = Effect.gen(function* () {\n const currentHash = yield* Ref.get(currentHashRef);\n if (!currentHash) {\n return;\n }\n\n const blocksElapsed = yield* updatePendingState(currentHash);\n yield* autoReplaceIfStuck(currentHash, blocksElapsed);\n });\n\n const pendingFiber = yield* Stream.runForEach(\n Stream.async<bigint, unknown>((emit) => {\n const unwatch = publicClient.watchBlockNumber({\n onBlockNumber: (blockNumber: bigint) => emit.single(blockNumber),\n onError: (error) => emit.fail(error as unknown),\n pollingInterval: policy.pollingInterval,\n });\n\n return Effect.sync(() => {\n unwatch();\n });\n }),\n () => onPendingBlock\n ).pipe(Effect.forkScoped);\n\n // Step 7: Wait for receipt (follow replacements)\n const receipt = yield* Effect.gen(function* () {\n let waitHash = hash;\n\n while (true) {\n const exit = yield* txManager\n .waitForReceipt(params.chainId, waitHash, 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 newHash = error.newHash as Hash;\n const now = yield* Clock.currentTimeMillis;\n\n yield* Ref.set(currentHashRef, newHash);\n yield* Ref.set(blocksElapsedRef, 0);\n yield* Ref.set(startedAtMsRef, now);\n yield* tracker.update(\n (prev) =>\n ({\n newHash,\n oldHash: error.oldHash as Hash,\n reason: error.reason,\n status: \"replaced\",\n tx: prev.tx,\n }) as TxState\n );\n yield* tracker.update(\n (prev) =>\n ({\n hash: newHash,\n status: \"submitted\",\n tx: prev.tx,\n }) as TxState\n );\n\n waitHash = newHash;\n continue;\n }\n\n return yield* Effect.fail(error);\n }\n }).pipe(Effect.ensuring(Fiber.interrupt(pendingFiber)));\n\n // Step 8: Update to mined state\n yield* tracker.update(\n (prev) =>\n ({\n effectiveGasPrice: receipt.effectiveGasPrice,\n hash: receipt.transactionHash as Hash,\n receipt,\n status: \"mined\",\n tx: prev.tx,\n }) as TxState\n );\n\n if (nonceReservation.reserved) {\n yield* nonceService.confirm({\n address: params.account,\n chainId: params.chainId,\n nonce: nonceToBigInt(nonceReservation.nonce),\n });\n }\n\n // Step 9: 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\n yield* run.pipe(\n Effect.either,\n Effect.flatMap((either) =>\n either._tag === \"Right\"\n ? Deferred.succeed(resultDeferred, either.right)\n : Deferred.fail(resultDeferred, either.left)\n ),\n Effect.forkScoped\n );\n\n return {\n actions: {\n cancel: (overridePolicy?: TxPolicy) =>\n Effect.gen(function* () {\n const currentHash = yield* Ref.get(currentHashRef);\n if (!currentHash) {\n return yield* Effect.fail(new Error(\"Transaction not yet submitted\"));\n }\n\n const nextPolicy = overridePolicy ?? policy;\n const newHash = yield* txReplacement.cancel(params.chainId, currentHash, nextPolicy);\n const now = yield* Clock.currentTimeMillis;\n\n yield* Ref.set(currentHashRef, newHash);\n yield* Ref.set(blocksElapsedRef, 0);\n yield* Ref.set(startedAtMsRef, now);\n yield* tracker.update(\n (prev) =>\n ({\n newHash,\n oldHash: currentHash,\n reason: \"cancelled\",\n status: \"replaced\",\n tx: prev.tx,\n }) as TxState\n );\n yield* tracker.update(\n (prev) =>\n ({\n hash: newHash,\n status: \"submitted\",\n tx: prev.tx,\n }) as TxState\n );\n\n return newHash;\n }),\n\n speedup: (overridePolicy?: TxPolicy) =>\n Effect.gen(function* () {\n const currentHash = yield* Ref.get(currentHashRef);\n if (!currentHash) {\n return yield* Effect.fail(new Error(\"Transaction not yet submitted\"));\n }\n\n const nextPolicy = overridePolicy ?? policy;\n const newHash = yield* txReplacement.speedup(params.chainId, currentHash, nextPolicy);\n const now = yield* Clock.currentTimeMillis;\n\n yield* Ref.set(currentHashRef, newHash);\n yield* Ref.set(blocksElapsedRef, 0);\n yield* Ref.set(startedAtMsRef, now);\n yield* tracker.update(\n (prev) =>\n ({\n newHash,\n oldHash: currentHash,\n reason: \"repriced\",\n status: \"replaced\",\n tx: prev.tx,\n }) as TxState\n );\n yield* tracker.update(\n (prev) =>\n ({\n hash: newHash,\n status: \"submitted\",\n tx: prev.tx,\n }) as TxState\n );\n\n return newHash;\n }),\n },\n result: Deferred.await(resultDeferred),\n stateRef: tracker.ref,\n };\n });\n"]}
@@ -3,5 +3,5 @@ import type { Abi } from "viem";
3
3
  import type { ContractFunctionName } from "../../types/index.js";
4
4
  import type { CorePipelineDeps } from "./internal/core.js";
5
5
  import type { WriteAndTrackParams } from "./types.js";
6
- export declare const makeWriteAndWait: (deps: CorePipelineDeps) => <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, "nonpayable" | "payable">>(params: WriteAndTrackParams<TAbi, TFunctionName>) => Effect.Effect<import("./types.js").WriteAndTrackResult<TAbi>, import("../../index.js").ClientNotFoundError | import("../../index.js").WalletNotConnectedError | import("../../index.js").WrongNetworkError | import("../../index.js").TransportError | import("../../index.js").ContractReadError | import("../../index.js").SimulationFailedError | import("../../index.js").GasEstimationError | import("../../index.js").ContractWriteError | import("../../index.js").EventDecodeError | import("../../index.js").UserRejectedError | import("../../index.js").TransactionFailedError | import("../../index.js").ReceiptTimeoutError | import("../../index.js").InsufficientFundsError | import("../../index.js").GasPriceUnavailableError, never>;
6
+ export declare const makeWriteAndWait: (deps: CorePipelineDeps) => <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, "nonpayable" | "payable">>(params: WriteAndTrackParams<TAbi, TFunctionName>) => Effect.Effect<import("./types.js").WriteAndTrackResult<TAbi>, import("../../index.js").ClientNotFoundError | import("../../index.js").WalletNotConnectedError | import("../../index.js").WrongNetworkError | import("../../index.js").TransportError | import("../../index.js").ContractReadError | import("../../index.js").SimulationFailedError | import("../../index.js").GasEstimationError | import("../../index.js").ContractWriteError | import("../../index.js").EventDecodeError | import("../../index.js").UserRejectedError | import("../../index.js").TxFailedError | import("../../index.js").ReceiptTimeoutError | import("../../index.js").InsufficientFundsError | import("../../index.js").GasPriceUnavailableError, never>;
7
7
  //# sourceMappingURL=write-and-wait.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"write-and-wait.d.ts","sourceRoot":"","sources":["../../../src/contract/pipeline/write-and-wait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAKtD,eAAO,MAAM,gBAAgB,GAAI,MAAM,gBAAgB,MAEnD,IAAI,SAAS,GAAG,EAChB,aAAa,00BAGb,CAAC"}
1
+ {"version":3,"file":"write-and-wait.d.ts","sourceRoot":"","sources":["../../../src/contract/pipeline/write-and-wait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAKtD,eAAO,MAAM,gBAAgB,GAAI,MAAM,gBAAgB,MAEnD,IAAI,SAAS,GAAG,EAChB,aAAa,i0BAGb,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { Effect, Schema } from "effect";
2
- export type TransactionReplacementReason = "cancelled" | "replaced" | "repriced";
2
+ export type TxReplacementReason = "cancelled" | "replaced" | "repriced";
3
3
  declare const UserRejectedError_base: Schema.TaggedErrorClass<UserRejectedError, "UserRejectedError", {
4
4
  readonly _tag: Schema.tag<"UserRejectedError">;
5
5
  } & {
@@ -7,24 +7,24 @@ declare const UserRejectedError_base: Schema.TaggedErrorClass<UserRejectedError,
7
7
  }>;
8
8
  export declare class UserRejectedError extends UserRejectedError_base {
9
9
  }
10
- declare const TransactionFailedError_base: Schema.TaggedErrorClass<TransactionFailedError, "TransactionFailedError", {
11
- readonly _tag: Schema.tag<"TransactionFailedError">;
10
+ declare const TxFailedError_base: Schema.TaggedErrorClass<TxFailedError, "TxFailedError", {
11
+ readonly _tag: Schema.tag<"TxFailedError">;
12
12
  } & {
13
13
  cause: Schema.optional<typeof Schema.Unknown>;
14
14
  hash: typeof Schema.String;
15
15
  message: typeof Schema.String;
16
16
  }>;
17
- export declare class TransactionFailedError extends TransactionFailedError_base {
17
+ export declare class TxFailedError extends TxFailedError_base {
18
18
  }
19
- declare const TransactionReplacedError_base: Schema.TaggedErrorClass<TransactionReplacedError, "TransactionReplacedError", {
20
- readonly _tag: Schema.tag<"TransactionReplacedError">;
19
+ declare const TxReplacedError_base: Schema.TaggedErrorClass<TxReplacedError, "TxReplacedError", {
20
+ readonly _tag: Schema.tag<"TxReplacedError">;
21
21
  } & {
22
22
  message: typeof Schema.String;
23
23
  newHash: typeof Schema.String;
24
24
  oldHash: typeof Schema.String;
25
25
  reason: Schema.Literal<["cancelled", "replaced", "repriced"]>;
26
26
  }>;
27
- export declare class TransactionReplacedError extends TransactionReplacedError_base {
27
+ export declare class TxReplacedError extends TxReplacedError_base {
28
28
  }
29
29
  declare const ReceiptTimeoutError_base: Schema.TaggedErrorClass<ReceiptTimeoutError, "ReceiptTimeoutError", {
30
30
  readonly _tag: Schema.tag<"ReceiptTimeoutError">;
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/core/errors/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAK/C,MAAM,MAAM,4BAA4B,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;;;;;;AAEjF,qBAAa,iBAAkB,SAAQ,sBAKtC;CAAG;;;;;;;;AAEJ,qBAAa,sBAAuB,SAAQ,2BAO3C;CAAG;;;;;;;;;AAEJ,qBAAa,wBAAyB,SAAQ,6BAQ7C;CAAG;;;;;;;;AAEJ,qBAAa,mBAAoB,SAAQ,wBAOxC;CAAG;;;;;;;;AAEJ,qBAAa,sBAAuB,SAAQ,2BAO3C;CAAG;AAKJ,eAAO,MAAM,yBAAyB,gDAAwD,CAAC;AA+G/F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE3D;AAMD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEjE;AAkED,eAAO,MAAM,kBAAkB,EAAE;IAC/B,CAAC,EAAE,EACD,QAAQ,EAAE,EAAE,GACX,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACV,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,QAAQ,EAAE,EAAE,GACX,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;CAY5D,CAAC;AAcF,eAAO,MAAM,sBAAsB,EAAE;IACnC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EACT,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAClC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAClC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAYtE,CAAC"}
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/core/errors/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAK/C,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;;;;;;AAExE,qBAAa,iBAAkB,SAAQ,sBAKtC;CAAG;;;;;;;;AAEJ,qBAAa,aAAc,SAAQ,kBAIjC;CAAG;;;;;;;;;AAEL,qBAAa,eAAgB,SAAQ,oBAKnC;CAAG;;;;;;;;AAEL,qBAAa,mBAAoB,SAAQ,wBAOxC;CAAG;;;;;;;;AAEJ,qBAAa,sBAAuB,SAAQ,2BAO3C;CAAG;AAKJ,eAAO,MAAM,yBAAyB,gDAAwD,CAAC;AA+G/F,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE3D;AAMD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEjE;AAkED,eAAO,MAAM,kBAAkB,EAAE;IAC/B,CAAC,EAAE,EACD,QAAQ,EAAE,EAAE,GACX,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EACV,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,QAAQ,EAAE,EAAE,GACX,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;CAY5D,CAAC;AAcF,eAAO,MAAM,sBAAsB,EAAE;IACnC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EACT,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAClC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACvE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAClC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;CAYtE,CAAC"}
@@ -5,13 +5,13 @@ export class UserRejectedError extends Schema.TaggedError()("UserRejectedError",
5
5
  message: Schema.String,
6
6
  }) {
7
7
  }
8
- export class TransactionFailedError extends Schema.TaggedError()("TransactionFailedError", {
8
+ export class TxFailedError extends Schema.TaggedError()("TxFailedError", {
9
9
  cause: Schema.optional(Schema.Unknown),
10
10
  hash: Schema.String,
11
11
  message: Schema.String,
12
12
  }) {
13
13
  }
14
- export class TransactionReplacedError extends Schema.TaggedError()("TransactionReplacedError", {
14
+ export class TxReplacedError extends Schema.TaggedError()("TxReplacedError", {
15
15
  message: Schema.String,
16
16
  newHash: Schema.String,
17
17
  oldHash: Schema.String,