@prb/effect-evm 1.0.0-beta.5 → 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 (228) hide show
  1. package/dist/constants/index.d.ts +0 -4
  2. package/dist/constants/index.d.ts.map +1 -1
  3. package/dist/constants/index.js +0 -4
  4. package/dist/constants/index.js.map +1 -1
  5. package/dist/contract/pipeline/internal/core.d.ts +2 -2
  6. package/dist/contract/pipeline/internal/core.d.ts.map +1 -1
  7. package/dist/contract/pipeline/internal/core.js.map +1 -1
  8. package/dist/contract/pipeline/internal/receipt.d.ts +2 -2
  9. package/dist/contract/pipeline/internal/receipt.d.ts.map +1 -1
  10. package/dist/contract/pipeline/internal/receipt.js +1 -1
  11. package/dist/contract/pipeline/internal/receipt.js.map +1 -1
  12. package/dist/contract/pipeline/service.d.ts +3 -3
  13. package/dist/contract/pipeline/service.d.ts.map +1 -1
  14. package/dist/contract/pipeline/service.js.map +1 -1
  15. package/dist/contract/pipeline/types.d.ts +2 -2
  16. package/dist/contract/pipeline/types.d.ts.map +1 -1
  17. package/dist/contract/pipeline/types.js.map +1 -1
  18. package/dist/contract/pipeline/write-and-track.js +1 -1
  19. package/dist/contract/pipeline/write-and-track.js.map +1 -1
  20. package/dist/contract/pipeline/write-and-wait.d.ts +1 -1
  21. package/dist/contract/pipeline/write-and-wait.d.ts.map +1 -1
  22. package/dist/core/errors/transaction.d.ts +7 -7
  23. package/dist/core/errors/transaction.d.ts.map +1 -1
  24. package/dist/core/errors/transaction.js +2 -2
  25. package/dist/core/errors/transaction.js.map +1 -1
  26. package/dist/core/errors/viem-mapper.d.ts +3 -3
  27. package/dist/core/errors/viem-mapper.d.ts.map +1 -1
  28. package/dist/core/errors/viem-mapper.js +3 -3
  29. package/dist/core/errors/viem-mapper.js.map +1 -1
  30. package/dist/deploy/service.d.ts +3 -3
  31. package/dist/deploy/service.d.ts.map +1 -1
  32. package/dist/deploy/service.js.map +1 -1
  33. package/dist/eip7702/errors.d.ts +3 -3
  34. package/dist/eip7702/errors.d.ts.map +1 -1
  35. package/dist/eip7702/errors.js +1 -1
  36. package/dist/eip7702/errors.js.map +1 -1
  37. package/dist/eip7702/service.d.ts +8 -8
  38. package/dist/eip7702/service.d.ts.map +1 -1
  39. package/dist/eip7702/service.js +2 -2
  40. package/dist/eip7702/service.js.map +1 -1
  41. package/dist/react-hooks/index.d.ts +0 -4
  42. package/dist/react-hooks/index.d.ts.map +1 -1
  43. package/dist/react-hooks/index.js +0 -4
  44. package/dist/react-hooks/index.js.map +1 -1
  45. package/dist/subscriptions/pending-tx.d.ts +1 -1
  46. package/dist/subscriptions/pending-tx.d.ts.map +1 -1
  47. package/dist/subscriptions/pending-tx.js +1 -1
  48. package/dist/subscriptions/pending-tx.js.map +1 -1
  49. package/dist/subscriptions/service.d.ts +2 -2
  50. package/dist/subscriptions/service.d.ts.map +1 -1
  51. package/dist/subscriptions/service.js +4 -4
  52. package/dist/subscriptions/service.js.map +1 -1
  53. package/dist/testing-kit/mock-subscription-service.d.ts +2 -2
  54. package/dist/testing-kit/mock-subscription-service.d.ts.map +1 -1
  55. package/dist/testing-kit/mock-subscription-service.js +5 -5
  56. package/dist/testing-kit/mock-subscription-service.js.map +1 -1
  57. package/dist/testing-kit/mock-transfer-service.d.ts +3 -3
  58. package/dist/testing-kit/mock-transfer-service.d.ts.map +1 -1
  59. package/dist/testing-kit/mock-transfer-service.js.map +1 -1
  60. package/dist/transfer/service.d.ts +3 -3
  61. package/dist/transfer/service.d.ts.map +1 -1
  62. package/dist/transfer/service.js +3 -3
  63. package/dist/transfer/service.js.map +1 -1
  64. package/dist/tx/manager.d.ts +2 -2
  65. package/dist/tx/manager.d.ts.map +1 -1
  66. package/dist/tx/manager.js +5 -5
  67. package/dist/tx/manager.js.map +1 -1
  68. package/dist/tx/manager.test.integration.js +4 -4
  69. package/dist/tx/manager.test.integration.js.map +1 -1
  70. package/dist/tx/replacement.d.ts +3 -3
  71. package/dist/tx/replacement.d.ts.map +1 -1
  72. package/dist/tx/replacement.js +3 -3
  73. package/dist/tx/replacement.js.map +1 -1
  74. package/dist/tx/tracker.d.ts +6 -6
  75. package/dist/tx/tracker.d.ts.map +1 -1
  76. package/dist/tx/tracker.js +9 -9
  77. package/dist/tx/tracker.js.map +1 -1
  78. package/dist/types/params.d.ts +1 -1
  79. package/dist/types/params.d.ts.map +1 -1
  80. package/dist/types/params.js.map +1 -1
  81. package/dist/wallet/errors.d.ts +3 -3
  82. package/dist/wallet/errors.d.ts.map +1 -1
  83. package/dist/wallet/errors.js +1 -1
  84. package/dist/wallet/errors.js.map +1 -1
  85. package/dist/wallet/operations.d.ts +2 -2
  86. package/dist/wallet/operations.d.ts.map +1 -1
  87. package/dist/wallet/operations.js +2 -2
  88. package/dist/wallet/operations.js.map +1 -1
  89. package/dist/wallet/service.d.ts +2 -2
  90. package/dist/wallet/service.d.ts.map +1 -1
  91. package/dist/wallet/service.js.map +1 -1
  92. package/package.json +1 -6
  93. package/dist/react-hooks/safe-app-origins.d.ts +0 -8
  94. package/dist/react-hooks/safe-app-origins.d.ts.map +0 -1
  95. package/dist/react-hooks/safe-app-origins.js +0 -124
  96. package/dist/react-hooks/safe-app-origins.js.map +0 -1
  97. package/dist/react-hooks/use-is-host-safe-app.d.ts +0 -2
  98. package/dist/react-hooks/use-is-host-safe-app.d.ts.map +0 -1
  99. package/dist/react-hooks/use-is-host-safe-app.js +0 -16
  100. package/dist/react-hooks/use-is-host-safe-app.js.map +0 -1
  101. package/dist/react-hooks/use-is-safe-app-context.d.ts +0 -2
  102. package/dist/react-hooks/use-is-safe-app-context.d.ts.map +0 -1
  103. package/dist/react-hooks/use-is-safe-app-context.js +0 -41
  104. package/dist/react-hooks/use-is-safe-app-context.js.map +0 -1
  105. package/dist/react-hooks/use-is-safe-multisig-wallet.d.ts +0 -2
  106. package/dist/react-hooks/use-is-safe-multisig-wallet.d.ts.map +0 -1
  107. package/dist/react-hooks/use-is-safe-multisig-wallet.js +0 -24
  108. package/dist/react-hooks/use-is-safe-multisig-wallet.js.map +0 -1
  109. package/dist/safe/adapter.d.ts +0 -9
  110. package/dist/safe/adapter.d.ts.map +0 -1
  111. package/dist/safe/adapter.js +0 -13
  112. package/dist/safe/adapter.js.map +0 -1
  113. package/dist/safe/detection.d.ts +0 -26
  114. package/dist/safe/detection.d.ts.map +0 -1
  115. package/dist/safe/detection.js +0 -102
  116. package/dist/safe/detection.js.map +0 -1
  117. package/dist/safe/detection.test.integration.d.ts +0 -2
  118. package/dist/safe/detection.test.integration.d.ts.map +0 -1
  119. package/dist/safe/detection.test.integration.js +0 -92
  120. package/dist/safe/detection.test.integration.js.map +0 -1
  121. package/dist/safe/errors.d.ts +0 -79
  122. package/dist/safe/errors.d.ts.map +0 -1
  123. package/dist/safe/errors.js +0 -34
  124. package/dist/safe/errors.js.map +0 -1
  125. package/dist/safe/index.d.ts +0 -8
  126. package/dist/safe/index.d.ts.map +0 -1
  127. package/dist/safe/index.js +0 -6
  128. package/dist/safe/index.js.map +0 -1
  129. package/dist/safe/live.d.ts +0 -8
  130. package/dist/safe/live.d.ts.map +0 -1
  131. package/dist/safe/live.js +0 -250
  132. package/dist/safe/live.js.map +0 -1
  133. package/dist/safe/service.d.ts +0 -26
  134. package/dist/safe/service.d.ts.map +0 -1
  135. package/dist/safe/service.js +0 -4
  136. package/dist/safe/service.js.map +0 -1
  137. package/dist/safe/service.test.integration.d.ts +0 -2
  138. package/dist/safe/service.test.integration.d.ts.map +0 -1
  139. package/dist/safe/service.test.integration.js +0 -171
  140. package/dist/safe/service.test.integration.js.map +0 -1
  141. package/dist/safe/simulation/abis.d.ts +0 -73
  142. package/dist/safe/simulation/abis.d.ts.map +0 -1
  143. package/dist/safe/simulation/abis.js +0 -61
  144. package/dist/safe/simulation/abis.js.map +0 -1
  145. package/dist/safe/simulation/addresses.d.ts +0 -4
  146. package/dist/safe/simulation/addresses.d.ts.map +0 -1
  147. package/dist/safe/simulation/addresses.js +0 -54
  148. package/dist/safe/simulation/addresses.js.map +0 -1
  149. package/dist/safe/simulation/encoding.d.ts +0 -16
  150. package/dist/safe/simulation/encoding.d.ts.map +0 -1
  151. package/dist/safe/simulation/encoding.js +0 -36
  152. package/dist/safe/simulation/encoding.js.map +0 -1
  153. package/dist/safe/simulation/errors.d.ts +0 -56
  154. package/dist/safe/simulation/errors.d.ts.map +0 -1
  155. package/dist/safe/simulation/errors.js +0 -37
  156. package/dist/safe/simulation/errors.js.map +0 -1
  157. package/dist/safe/simulation/index.d.ts +0 -7
  158. package/dist/safe/simulation/index.d.ts.map +0 -1
  159. package/dist/safe/simulation/index.js +0 -6
  160. package/dist/safe/simulation/index.js.map +0 -1
  161. package/dist/safe/simulation/internal/calldata/calldata.d.ts +0 -5
  162. package/dist/safe/simulation/internal/calldata/calldata.d.ts.map +0 -1
  163. package/dist/safe/simulation/internal/calldata/calldata.js +0 -17
  164. package/dist/safe/simulation/internal/calldata/calldata.js.map +0 -1
  165. package/dist/safe/simulation/internal/calldata/index.d.ts +0 -2
  166. package/dist/safe/simulation/internal/calldata/index.d.ts.map +0 -1
  167. package/dist/safe/simulation/internal/calldata/index.js +0 -2
  168. package/dist/safe/simulation/internal/calldata/index.js.map +0 -1
  169. package/dist/safe/simulation/internal/contracts/contracts.d.ts +0 -5
  170. package/dist/safe/simulation/internal/contracts/contracts.d.ts.map +0 -1
  171. package/dist/safe/simulation/internal/contracts/contracts.js +0 -25
  172. package/dist/safe/simulation/internal/contracts/contracts.js.map +0 -1
  173. package/dist/safe/simulation/internal/contracts/index.d.ts +0 -2
  174. package/dist/safe/simulation/internal/contracts/index.d.ts.map +0 -1
  175. package/dist/safe/simulation/internal/contracts/index.js +0 -2
  176. package/dist/safe/simulation/internal/contracts/index.js.map +0 -1
  177. package/dist/safe/simulation/internal/evaluation/evaluation.d.ts +0 -6
  178. package/dist/safe/simulation/internal/evaluation/evaluation.d.ts.map +0 -1
  179. package/dist/safe/simulation/internal/evaluation/evaluation.js +0 -20
  180. package/dist/safe/simulation/internal/evaluation/evaluation.js.map +0 -1
  181. package/dist/safe/simulation/internal/evaluation/index.d.ts +0 -2
  182. package/dist/safe/simulation/internal/evaluation/index.d.ts.map +0 -1
  183. package/dist/safe/simulation/internal/evaluation/index.js +0 -2
  184. package/dist/safe/simulation/internal/evaluation/index.js.map +0 -1
  185. package/dist/safe/simulation/internal/execution/execution.d.ts +0 -9
  186. package/dist/safe/simulation/internal/execution/execution.d.ts.map +0 -1
  187. package/dist/safe/simulation/internal/execution/execution.js +0 -65
  188. package/dist/safe/simulation/internal/execution/execution.js.map +0 -1
  189. package/dist/safe/simulation/internal/execution/index.d.ts +0 -2
  190. package/dist/safe/simulation/internal/execution/index.d.ts.map +0 -1
  191. package/dist/safe/simulation/internal/execution/index.js +0 -2
  192. package/dist/safe/simulation/internal/execution/index.js.map +0 -1
  193. package/dist/safe/simulation/internal/limits/index.d.ts +0 -2
  194. package/dist/safe/simulation/internal/limits/index.d.ts.map +0 -1
  195. package/dist/safe/simulation/internal/limits/index.js +0 -2
  196. package/dist/safe/simulation/internal/limits/index.js.map +0 -1
  197. package/dist/safe/simulation/internal/limits/limits.d.ts +0 -5
  198. package/dist/safe/simulation/internal/limits/limits.d.ts.map +0 -1
  199. package/dist/safe/simulation/internal/limits/limits.js +0 -18
  200. package/dist/safe/simulation/internal/limits/limits.js.map +0 -1
  201. package/dist/safe/simulation/internal/types/index.d.ts +0 -2
  202. package/dist/safe/simulation/internal/types/index.d.ts.map +0 -1
  203. package/dist/safe/simulation/internal/types/index.js +0 -2
  204. package/dist/safe/simulation/internal/types/index.js.map +0 -1
  205. package/dist/safe/simulation/internal/types/types.d.ts +0 -11
  206. package/dist/safe/simulation/internal/types/types.d.ts.map +0 -1
  207. package/dist/safe/simulation/internal/types/types.js +0 -2
  208. package/dist/safe/simulation/internal/types/types.js.map +0 -1
  209. package/dist/safe/simulation/internal/validation/index.d.ts +0 -2
  210. package/dist/safe/simulation/internal/validation/index.d.ts.map +0 -1
  211. package/dist/safe/simulation/internal/validation/index.js +0 -2
  212. package/dist/safe/simulation/internal/validation/index.js.map +0 -1
  213. package/dist/safe/simulation/internal/validation/validation.d.ts +0 -5
  214. package/dist/safe/simulation/internal/validation/validation.d.ts.map +0 -1
  215. package/dist/safe/simulation/internal/validation/validation.js +0 -27
  216. package/dist/safe/simulation/internal/validation/validation.js.map +0 -1
  217. package/dist/safe/simulation/service.d.ts +0 -14
  218. package/dist/safe/simulation/service.d.ts.map +0 -1
  219. package/dist/safe/simulation/service.js +0 -25
  220. package/dist/safe/simulation/service.js.map +0 -1
  221. package/dist/safe/simulation/types.d.ts +0 -20
  222. package/dist/safe/simulation/types.d.ts.map +0 -1
  223. package/dist/safe/simulation/types.js +0 -2
  224. package/dist/safe/simulation/types.js.map +0 -1
  225. package/dist/safe/types.d.ts +0 -61
  226. package/dist/safe/types.d.ts.map +0 -1
  227. package/dist/safe/types.js +0 -2
  228. package/dist/safe/types.js.map +0 -1
@@ -2,8 +2,4 @@
2
2
  export { useEffectMemo, useEffectMemoFactory, useEffectOnce, useForkEffect, useStream, useStreamEffect, useStreamValue, useSubscriptionRef, useSubscriptionRefValue, } from "../integrations/react-hooks/primitives.js";
3
3
  export { EffectEvmLayerProvider, EffectEvmProvider, EffectEvmProviderSync, useEffectEvmLayer, useEffectEvmRuntime, } from "../integrations/react-hooks/provider.js";
4
4
  export { useWalletProviderRef } from "../integrations/react-hooks/wallet-provider-ref.js";
5
- export { DEFAULT_SAFE_APP_ORIGINS, extendSafeAppOrigins, getSafeAppOrigins, setSafeAppOrigins, } from "./safe-app-origins.js";
6
- export { useIsHostSafeApp } from "./use-is-host-safe-app.js";
7
- export { useIsSafeAppContext } from "./use-is-safe-app-context.js";
8
- export { useIsSafeMultisigWallet } from "./use-is-safe-multisig-wallet.js";
9
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react-hooks/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAOb,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,SAAS,EACT,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,8CAA8C,CAAC;AAKtD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC;AAC7F,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC","sourcesContent":["\"use client\";\n\nexport type {\n EffectMemoOptions,\n StreamState,\n UseEffectResult,\n} from \"@/src/integrations/react-hooks/primitives.js\";\nexport {\n useEffectMemo,\n useEffectMemoFactory,\n useEffectOnce,\n useForkEffect,\n useStream,\n useStreamEffect,\n useStreamValue,\n useSubscriptionRef,\n useSubscriptionRefValue,\n} from \"@/src/integrations/react-hooks/primitives.js\";\nexport type {\n EffectEvmLayerProviderProps,\n EffectEvmProviderProps,\n} from \"@/src/integrations/react-hooks/provider.js\";\nexport {\n EffectEvmLayerProvider,\n EffectEvmProvider,\n EffectEvmProviderSync,\n useEffectEvmLayer,\n useEffectEvmRuntime,\n} from \"@/src/integrations/react-hooks/provider.js\";\nexport type { WalletProviderRefActions } from \"@/src/integrations/react-hooks/wallet-provider-ref.js\";\nexport { useWalletProviderRef } from \"@/src/integrations/react-hooks/wallet-provider-ref.js\";\nexport {\n DEFAULT_SAFE_APP_ORIGINS,\n extendSafeAppOrigins,\n getSafeAppOrigins,\n setSafeAppOrigins,\n} from \"./safe-app-origins.js\";\nexport { useIsHostSafeApp } from \"./use-is-host-safe-app.js\";\nexport { useIsSafeAppContext } from \"./use-is-safe-app-context.js\";\nexport { useIsSafeMultisigWallet } from \"./use-is-safe-multisig-wallet.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react-hooks/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAOb,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,SAAS,EACT,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,8CAA8C,CAAC;AAKtD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC","sourcesContent":["\"use client\";\n\nexport type {\n EffectMemoOptions,\n StreamState,\n UseEffectResult,\n} from \"@/src/integrations/react-hooks/primitives.js\";\nexport {\n useEffectMemo,\n useEffectMemoFactory,\n useEffectOnce,\n useForkEffect,\n useStream,\n useStreamEffect,\n useStreamValue,\n useSubscriptionRef,\n useSubscriptionRefValue,\n} from \"@/src/integrations/react-hooks/primitives.js\";\nexport type {\n EffectEvmLayerProviderProps,\n EffectEvmProviderProps,\n} from \"@/src/integrations/react-hooks/provider.js\";\nexport {\n EffectEvmLayerProvider,\n EffectEvmProvider,\n EffectEvmProviderSync,\n useEffectEvmLayer,\n useEffectEvmRuntime,\n} from \"@/src/integrations/react-hooks/provider.js\";\nexport type { WalletProviderRefActions } from \"@/src/integrations/react-hooks/wallet-provider-ref.js\";\nexport { useWalletProviderRef } from \"@/src/integrations/react-hooks/wallet-provider-ref.js\";\n"]}
@@ -1,7 +1,7 @@
1
1
  import { Effect } from "effect";
2
2
  import type { PublicClientServiceShape } from "../core/index.js";
3
3
  import { SubscriptionDroppedError, SubscriptionNotSupportedError } from "./errors.js";
4
- export declare function watchPendingTransactions(publicClientService: PublicClientServiceShape, params: {
4
+ export declare function watchPendingTxs(publicClientService: PublicClientServiceShape, params: {
5
5
  chainId: number;
6
6
  pollingInterval?: number;
7
7
  }): Effect.Effect<import("effect/Stream").Stream<`0x${string}`, SubscriptionDroppedError, never>, import("../core/index.js").ClientNotFoundError | SubscriptionNotSupportedError, never>;
@@ -1 +1 @@
1
- {"version":3,"file":"pending-tx.d.ts","sourceRoot":"","sources":["../../src/subscriptions/pending-tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAGpE,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAEtF,wBAAgB,wBAAwB,CACtC,mBAAmB,EAAE,wBAAwB,EAC7C,MAAM,EAAE;IACN,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,2LA4CF"}
1
+ {"version":3,"file":"pending-tx.d.ts","sourceRoot":"","sources":["../../src/subscriptions/pending-tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAGpE,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAEtF,wBAAgB,eAAe,CAC7B,mBAAmB,EAAE,wBAAwB,EAC7C,MAAM,EAAE;IACN,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,2LA4CF"}
@@ -2,7 +2,7 @@ import { Effect } from "effect";
2
2
  import { fromWatchCallback } from "../internal/index.js";
3
3
  import { SpanNames } from "../telemetry/index.js";
4
4
  import { SubscriptionDroppedError, SubscriptionNotSupportedError } from "./errors.js";
5
- export function watchPendingTransactions(publicClientService, params) {
5
+ export function watchPendingTxs(publicClientService, params) {
6
6
  return Effect.gen(function* () {
7
7
  const client = yield* publicClientService.get(params.chainId);
8
8
  if (client.transport.type !== "webSocket") {
@@ -1 +1 @@
1
- {"version":3,"file":"pending-tx.js","sourceRoot":"","sources":["../../src/subscriptions/pending-tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAEtF,MAAM,UAAU,wBAAwB,CACtC,mBAA6C,EAC7C,MAGC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAG9D,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,6BAA6B,CAAC;gBAChC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,+DAA+D;gBACxE,gBAAgB,EAAE,qBAAqB;aACxC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,iBAAiB,CAAiC;YAC/D,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,IAAI,wBAAwB,CAAC;gBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,qDAAqD,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE;gBAChG,gBAAgB,EAAE,qBAAqB;aACxC,CAAC;YACJ,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CACZ,MAAM,CAAC,wBAAwB,CAAC;gBAC9B,OAAO,EAAE,EAAE,CAAC,OAAO;gBACnB,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE;oBACzB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;wBAC1B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;gBACD,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,CAAC;SACL,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,6BAA6B,EAAE;QACvD,UAAU,EAAE;YACV,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,eAAe,EAAE,MAAM,CAAC,eAAe;SACxC;KACF,CAAC,CACH,CAAC;AACJ,CAAC","sourcesContent":["import { Effect } from \"effect\";\nimport type { Hash } from \"viem\";\nimport type { PublicClientServiceShape } from \"@/src/core/index.js\";\nimport { fromWatchCallback } from \"@/src/internal/index.js\";\nimport { SpanNames } from \"@/src/telemetry/index.js\";\nimport { SubscriptionDroppedError, SubscriptionNotSupportedError } from \"./errors.js\";\n\nexport function watchPendingTransactions(\n publicClientService: PublicClientServiceShape,\n params: {\n chainId: number;\n pollingInterval?: number;\n }\n) {\n return Effect.gen(function* () {\n const client = yield* publicClientService.get(params.chainId);\n\n // Check if WebSocket is available - pending tx subscriptions typically require it\n if (client.transport.type !== \"webSocket\") {\n return yield* Effect.fail(\n new SubscriptionNotSupportedError({\n chainId: params.chainId,\n message: \"Pending transaction subscriptions require WebSocket transport\",\n subscriptionType: \"pendingTransactions\",\n })\n );\n }\n\n const stream = fromWatchCallback<Hash, SubscriptionDroppedError>({\n mapError: (error) =>\n new SubscriptionDroppedError({\n chainId: params.chainId,\n message: `Pending transaction subscription dropped on chain ${params.chainId}: ${String(error)}`,\n subscriptionType: \"pendingTransactions\",\n }),\n watch: (cb) =>\n client.watchPendingTransactions({\n onError: cb.onError,\n onTransactions: (hashes) => {\n for (const hash of hashes) {\n cb.onData(hash);\n }\n },\n pollingInterval: params.pollingInterval,\n }),\n });\n\n return stream;\n }).pipe(\n Effect.withSpan(SpanNames.SUBSCRIPTION_WATCH_PENDING_TX, {\n attributes: {\n chainId: params.chainId,\n pollingInterval: params.pollingInterval,\n },\n })\n );\n}\n"]}
1
+ {"version":3,"file":"pending-tx.js","sourceRoot":"","sources":["../../src/subscriptions/pending-tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,MAAM,aAAa,CAAC;AAEtF,MAAM,UAAU,eAAe,CAC7B,mBAA6C,EAC7C,MAGC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAG9D,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CACvB,IAAI,6BAA6B,CAAC;gBAChC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,+DAA+D;gBACxE,gBAAgB,EAAE,qBAAqB;aACxC,CAAC,CACH,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,iBAAiB,CAAiC;YAC/D,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,IAAI,wBAAwB,CAAC;gBAC3B,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,qDAAqD,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE;gBAChG,gBAAgB,EAAE,qBAAqB;aACxC,CAAC;YACJ,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CACZ,MAAM,CAAC,wBAAwB,CAAC;gBAC9B,OAAO,EAAE,EAAE,CAAC,OAAO;gBACnB,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE;oBACzB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;wBAC1B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;gBACD,eAAe,EAAE,MAAM,CAAC,eAAe;aACxC,CAAC;SACL,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,6BAA6B,EAAE;QACvD,UAAU,EAAE;YACV,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,eAAe,EAAE,MAAM,CAAC,eAAe;SACxC;KACF,CAAC,CACH,CAAC;AACJ,CAAC","sourcesContent":["import { Effect } from \"effect\";\nimport type { Hash } from \"viem\";\nimport type { PublicClientServiceShape } from \"@/src/core/index.js\";\nimport { fromWatchCallback } from \"@/src/internal/index.js\";\nimport { SpanNames } from \"@/src/telemetry/index.js\";\nimport { SubscriptionDroppedError, SubscriptionNotSupportedError } from \"./errors.js\";\n\nexport function watchPendingTxs(\n publicClientService: PublicClientServiceShape,\n params: {\n chainId: number;\n pollingInterval?: number;\n }\n) {\n return Effect.gen(function* () {\n const client = yield* publicClientService.get(params.chainId);\n\n // Check if WebSocket is available - pending tx subscriptions typically require it\n if (client.transport.type !== \"webSocket\") {\n return yield* Effect.fail(\n new SubscriptionNotSupportedError({\n chainId: params.chainId,\n message: \"Pending transaction subscriptions require WebSocket transport\",\n subscriptionType: \"pendingTransactions\",\n })\n );\n }\n\n const stream = fromWatchCallback<Hash, SubscriptionDroppedError>({\n mapError: (error) =>\n new SubscriptionDroppedError({\n chainId: params.chainId,\n message: `Pending transaction subscription dropped on chain ${params.chainId}: ${String(error)}`,\n subscriptionType: \"pendingTransactions\",\n }),\n watch: (cb) =>\n client.watchPendingTransactions({\n onError: cb.onError,\n onTransactions: (hashes) => {\n for (const hash of hashes) {\n cb.onData(hash);\n }\n },\n pollingInterval: params.pollingInterval,\n }),\n });\n\n return stream;\n }).pipe(\n Effect.withSpan(SpanNames.SUBSCRIPTION_WATCH_PENDING_TX, {\n attributes: {\n chainId: params.chainId,\n pollingInterval: params.pollingInterval,\n },\n })\n );\n}\n"]}
@@ -32,7 +32,7 @@ export type SubscriptionServiceShape = {
32
32
  topics?: (Hex | Hex[] | null)[];
33
33
  pollingInterval?: number;
34
34
  }) => Effect.Effect<Stream.Stream<Log, SubscriptionDroppedError>, ClientNotFoundError>;
35
- readonly watchPendingTransactions: (params: {
35
+ readonly watchPendingTxs: (params: {
36
36
  chainId: number;
37
37
  pollingInterval?: number;
38
38
  }) => Effect.Effect<Stream.Stream<Hash, SubscriptionDroppedError>, SubscriptionNotSupportedError | ClientNotFoundError>;
@@ -49,7 +49,7 @@ export type SubscriptionServiceShape = {
49
49
  pollingInterval?: number;
50
50
  retry?: SubscriptionRetryConfig;
51
51
  }) => Effect.Effect<RetryingSubscriptionStream<Log>, ClientNotFoundError>;
52
- readonly watchPendingTransactionsRetrying: (params: {
52
+ readonly watchPendingTxsRetrying: (params: {
53
53
  chainId: number;
54
54
  pollingInterval?: number;
55
55
  retry?: SubscriptionRetryConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/subscriptions/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/subscriptions/service.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { PublicClientService } from "../core/index.js";
4
4
  import { makeBackoffSchedule } from "../internal/index.js";
5
5
  import { watchBlocks } from "./block-subscription.js";
6
6
  import { watchLogs } from "./log-subscription.js";
7
- import { watchPendingTransactions } from "./pending-tx.js";
7
+ import { watchPendingTxs } from "./pending-tx.js";
8
8
  const makeSubscriptionRetrySchedule = (config) => makeBackoffSchedule({
9
9
  baseDelay: config?.baseDelay ?? DEFAULT_SUBSCRIPTION_BASE_DELAY,
10
10
  jitter: config?.jitter ?? true,
@@ -41,14 +41,14 @@ export const SubscriptionServiceLive = Layer.effect(SubscriptionService, Effect.
41
41
  const stream = (yield* watchLogs(publicClientService, watchParams)).pipe(Stream.onStart(SubscriptionRef.set(stateRef, { status: "connected" })), Stream.tapError((error) => SubscriptionRef.set(stateRef, { error, status: "retrying" })), Stream.retry(schedule), Stream.catchAll(() => neverStream()));
42
42
  return { stateRef, stream };
43
43
  }),
44
- watchPendingTransactions: (params) => watchPendingTransactions(publicClientService, params),
45
- watchPendingTransactionsRetrying: (params) => Effect.gen(function* () {
44
+ watchPendingTxs: (params) => watchPendingTxs(publicClientService, params),
45
+ watchPendingTxsRetrying: (params) => Effect.gen(function* () {
46
46
  const stateRef = yield* SubscriptionRef.make({
47
47
  status: "connecting",
48
48
  });
49
49
  const { retry, ...watchParams } = params;
50
50
  const schedule = makeSubscriptionRetrySchedule(retry);
51
- const stream = (yield* watchPendingTransactions(publicClientService, watchParams)).pipe(Stream.onStart(SubscriptionRef.set(stateRef, { status: "connected" })), Stream.tapError((error) => SubscriptionRef.set(stateRef, { error, status: "retrying" })), Stream.retry(schedule), Stream.catchAll(() => neverStream()));
51
+ const stream = (yield* watchPendingTxs(publicClientService, watchParams)).pipe(Stream.onStart(SubscriptionRef.set(stateRef, { status: "connected" })), Stream.tapError((error) => SubscriptionRef.set(stateRef, { error, status: "retrying" })), Stream.retry(schedule), Stream.catchAll(() => neverStream()));
52
52
  return { stateRef, stream };
53
53
  }),
54
54
  };
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/subscriptions/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context, Effect, Layer, Stream, SubscriptionRef } from \"effect\";\nimport type { Address, Block, Hash, Hex, Log } from \"viem\";\nimport { DEFAULT_MAX_DELAY, DEFAULT_SUBSCRIPTION_BASE_DELAY } from \"@/src/constants/index.js\";\nimport type { ClientNotFoundError } from \"@/src/core/index.js\";\nimport { PublicClientService } from \"@/src/core/index.js\";\nimport { makeBackoffSchedule } from \"@/src/internal/index.js\";\nimport { watchBlocks } from \"./block-subscription.js\";\nimport type { SubscriptionDroppedError, SubscriptionNotSupportedError } from \"./errors.js\";\nimport { watchLogs } from \"./log-subscription.js\";\nimport { watchPendingTransactions } from \"./pending-tx.js\";\n\nexport type SubscriptionRetryConfig = {\n /**\n * Base delay in milliseconds for exponential backoff (default: 500ms)\n */\n readonly baseDelay?: number;\n /**\n * Maximum delay in milliseconds between retries (default: 30s)\n */\n readonly maxDelay?: number;\n /**\n * Add jitter to retry delays (default: true)\n */\n readonly jitter?: boolean;\n};\n\nexport type SubscriptionConnectionState =\n | { status: \"connecting\" }\n | { status: \"connected\" }\n | { status: \"retrying\"; error: SubscriptionDroppedError };\n\nexport type RetryingSubscriptionStream<A> = {\n readonly stateRef: SubscriptionRef.SubscriptionRef<SubscriptionConnectionState>;\n readonly stream: Stream.Stream<A, never>;\n};\n\nconst makeSubscriptionRetrySchedule = (config?: SubscriptionRetryConfig) =>\n makeBackoffSchedule({\n baseDelay: config?.baseDelay ?? DEFAULT_SUBSCRIPTION_BASE_DELAY,\n jitter: config?.jitter ?? true,\n maxDelay: config?.maxDelay ?? DEFAULT_MAX_DELAY,\n maxRetries: Number.POSITIVE_INFINITY, // subscriptions retry forever\n });\n\nconst neverStream = <A>(): Stream.Stream<A, never> => Stream.async(() => Effect.never);\n\nexport type SubscriptionServiceShape = {\n readonly watchBlocks: (params: {\n chainId: number;\n includeTransactions?: boolean;\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<Block, SubscriptionDroppedError>, ClientNotFoundError>;\n\n readonly watchLogs: (params: {\n chainId: number;\n address?: Address | Address[];\n topics?: (Hex | Hex[] | null)[];\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<Log, SubscriptionDroppedError>, ClientNotFoundError>;\n\n readonly watchPendingTransactions: (params: {\n chainId: number;\n pollingInterval?: number;\n }) => Effect.Effect<\n Stream.Stream<Hash, SubscriptionDroppedError>,\n SubscriptionNotSupportedError | ClientNotFoundError\n >;\n\n readonly watchBlocksRetrying: (params: {\n chainId: number;\n includeTransactions?: boolean;\n pollingInterval?: number;\n retry?: SubscriptionRetryConfig;\n }) => Effect.Effect<RetryingSubscriptionStream<Block>, ClientNotFoundError>;\n\n readonly watchLogsRetrying: (params: {\n chainId: number;\n address?: Address | Address[];\n topics?: (Hex | Hex[] | null)[];\n pollingInterval?: number;\n retry?: SubscriptionRetryConfig;\n }) => Effect.Effect<RetryingSubscriptionStream<Log>, ClientNotFoundError>;\n\n readonly watchPendingTransactionsRetrying: (params: {\n chainId: number;\n pollingInterval?: number;\n retry?: SubscriptionRetryConfig;\n }) => Effect.Effect<\n RetryingSubscriptionStream<Hash>,\n SubscriptionNotSupportedError | ClientNotFoundError\n >;\n\n readonly hasWebSocket: (chainId: number) => Effect.Effect<boolean, ClientNotFoundError>;\n};\n\nexport class SubscriptionService extends Context.Tag(\"ew3/SubscriptionService\")<\n SubscriptionService,\n SubscriptionServiceShape\n>() {}\n\nexport const SubscriptionServiceLive = Layer.effect(\n SubscriptionService,\n Effect.gen(function* () {\n const publicClientService = yield* PublicClientService;\n\n return {\n hasWebSocket: (chainId) =>\n Effect.gen(function* () {\n const client = yield* publicClientService.get(chainId);\n // Check if transport is WebSocket-based\n return client.transport.type === \"webSocket\";\n }),\n watchBlocks: (params) => watchBlocks(publicClientService, params),\n\n watchBlocksRetrying: (params) =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<SubscriptionConnectionState>({\n status: \"connecting\",\n });\n\n const { retry, ...watchParams } = params;\n const schedule = makeSubscriptionRetrySchedule(retry);\n const stream = (yield* watchBlocks(publicClientService, watchParams)).pipe(\n Stream.onStart(SubscriptionRef.set(stateRef, { status: \"connected\" })),\n Stream.tapError((error) =>\n SubscriptionRef.set(stateRef, { error, status: \"retrying\" })\n ),\n Stream.retry(schedule),\n Stream.catchAll(() => neverStream<Block>())\n );\n\n return { stateRef, stream };\n }),\n\n watchLogs: (params) => watchLogs(publicClientService, params),\n\n watchLogsRetrying: (params) =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<SubscriptionConnectionState>({\n status: \"connecting\",\n });\n\n const { retry, ...watchParams } = params;\n const schedule = makeSubscriptionRetrySchedule(retry);\n const stream = (yield* watchLogs(publicClientService, watchParams)).pipe(\n Stream.onStart(SubscriptionRef.set(stateRef, { status: \"connected\" })),\n Stream.tapError((error) =>\n SubscriptionRef.set(stateRef, { error, status: \"retrying\" })\n ),\n Stream.retry(schedule),\n Stream.catchAll(() => neverStream<Log>())\n );\n\n return { stateRef, stream };\n }),\n\n watchPendingTransactions: (params) => watchPendingTransactions(publicClientService, params),\n\n watchPendingTransactionsRetrying: (params) =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<SubscriptionConnectionState>({\n status: \"connecting\",\n });\n\n const { retry, ...watchParams } = params;\n const schedule = makeSubscriptionRetrySchedule(retry);\n const stream = (yield* watchPendingTransactions(publicClientService, watchParams)).pipe(\n Stream.onStart(SubscriptionRef.set(stateRef, { status: \"connected\" })),\n Stream.tapError((error) =>\n SubscriptionRef.set(stateRef, { error, status: \"retrying\" })\n ),\n Stream.retry(schedule),\n Stream.catchAll(() => neverStream<Hash>())\n );\n\n return { stateRef, stream };\n }),\n };\n })\n);\n"]}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/subscriptions/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzE,OAAO,EAAE,iBAAiB,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAE9F,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AA2BlD,MAAM,6BAA6B,GAAG,CAAC,MAAgC,EAAE,EAAE,CACzE,mBAAmB,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,SAAS,IAAI,+BAA+B;IAC/D,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI;IAC9B,QAAQ,EAAE,MAAM,EAAE,QAAQ,IAAI,iBAAiB;IAC/C,UAAU,EAAE,MAAM,CAAC,iBAAiB;CACrC,CAAC,CAAC;AAEL,MAAM,WAAW,GAAG,GAA+B,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAmDvF,MAAM,OAAO,mBAAoB,SAAQ,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAG5E;CAAG;AAEN,MAAM,CAAC,MAAM,uBAAuB,GAAG,KAAK,CAAC,MAAM,CACjD,mBAAmB,EACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC;IAEvD,OAAO;QACL,YAAY,EAAE,CAAC,OAAO,EAAE,EAAE,CACxB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEvD,OAAO,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW,CAAC;QAC/C,CAAC,CAAC;QACJ,WAAW,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,WAAW,CAAC,mBAAmB,EAAE,MAAM,CAAC;QAEjE,mBAAmB,EAAE,CAAC,MAAM,EAAE,EAAE,CAC9B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAA8B;gBACxE,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;YAEH,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC;YACzC,MAAM,QAAQ,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CACxE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,EACtE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAC7D,EACD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EACtB,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,WAAW,EAAS,CAAC,CAC5C,CAAC;YAEF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC9B,CAAC,CAAC;QAEJ,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,mBAAmB,EAAE,MAAM,CAAC;QAE7D,iBAAiB,EAAE,CAAC,MAAM,EAAE,EAAE,CAC5B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAA8B;gBACxE,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;YAEH,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC;YACzC,MAAM,QAAQ,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CACtE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,EACtE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAC7D,EACD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EACtB,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,WAAW,EAAO,CAAC,CAC1C,CAAC;YAEF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC9B,CAAC,CAAC;QAEJ,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,mBAAmB,EAAE,MAAM,CAAC;QAEzE,uBAAuB,EAAE,CAAC,MAAM,EAAE,EAAE,CAClC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAA8B;gBACxE,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;YAEH,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC;YACzC,MAAM,QAAQ,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,CAC5E,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,EACtE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAC7D,EACD,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EACtB,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,WAAW,EAAQ,CAAC,CAC3C,CAAC;YAEF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC9B,CAAC,CAAC;KACL,CAAC;AACJ,CAAC,CAAC,CACH,CAAC","sourcesContent":["import { Context, Effect, Layer, Stream, SubscriptionRef } from \"effect\";\nimport type { Address, Block, Hash, Hex, Log } from \"viem\";\nimport { DEFAULT_MAX_DELAY, DEFAULT_SUBSCRIPTION_BASE_DELAY } from \"@/src/constants/index.js\";\nimport type { ClientNotFoundError } from \"@/src/core/index.js\";\nimport { PublicClientService } from \"@/src/core/index.js\";\nimport { makeBackoffSchedule } from \"@/src/internal/index.js\";\nimport { watchBlocks } from \"./block-subscription.js\";\nimport type { SubscriptionDroppedError, SubscriptionNotSupportedError } from \"./errors.js\";\nimport { watchLogs } from \"./log-subscription.js\";\nimport { watchPendingTxs } from \"./pending-tx.js\";\n\nexport type SubscriptionRetryConfig = {\n /**\n * Base delay in milliseconds for exponential backoff (default: 500ms)\n */\n readonly baseDelay?: number;\n /**\n * Maximum delay in milliseconds between retries (default: 30s)\n */\n readonly maxDelay?: number;\n /**\n * Add jitter to retry delays (default: true)\n */\n readonly jitter?: boolean;\n};\n\nexport type SubscriptionConnectionState =\n | { status: \"connecting\" }\n | { status: \"connected\" }\n | { status: \"retrying\"; error: SubscriptionDroppedError };\n\nexport type RetryingSubscriptionStream<A> = {\n readonly stateRef: SubscriptionRef.SubscriptionRef<SubscriptionConnectionState>;\n readonly stream: Stream.Stream<A, never>;\n};\n\nconst makeSubscriptionRetrySchedule = (config?: SubscriptionRetryConfig) =>\n makeBackoffSchedule({\n baseDelay: config?.baseDelay ?? DEFAULT_SUBSCRIPTION_BASE_DELAY,\n jitter: config?.jitter ?? true,\n maxDelay: config?.maxDelay ?? DEFAULT_MAX_DELAY,\n maxRetries: Number.POSITIVE_INFINITY, // subscriptions retry forever\n });\n\nconst neverStream = <A>(): Stream.Stream<A, never> => Stream.async(() => Effect.never);\n\nexport type SubscriptionServiceShape = {\n readonly watchBlocks: (params: {\n chainId: number;\n includeTransactions?: boolean;\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<Block, SubscriptionDroppedError>, ClientNotFoundError>;\n\n readonly watchLogs: (params: {\n chainId: number;\n address?: Address | Address[];\n topics?: (Hex | Hex[] | null)[];\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<Log, SubscriptionDroppedError>, ClientNotFoundError>;\n\n readonly watchPendingTxs: (params: {\n chainId: number;\n pollingInterval?: number;\n }) => Effect.Effect<\n Stream.Stream<Hash, SubscriptionDroppedError>,\n SubscriptionNotSupportedError | ClientNotFoundError\n >;\n\n readonly watchBlocksRetrying: (params: {\n chainId: number;\n includeTransactions?: boolean;\n pollingInterval?: number;\n retry?: SubscriptionRetryConfig;\n }) => Effect.Effect<RetryingSubscriptionStream<Block>, ClientNotFoundError>;\n\n readonly watchLogsRetrying: (params: {\n chainId: number;\n address?: Address | Address[];\n topics?: (Hex | Hex[] | null)[];\n pollingInterval?: number;\n retry?: SubscriptionRetryConfig;\n }) => Effect.Effect<RetryingSubscriptionStream<Log>, ClientNotFoundError>;\n\n readonly watchPendingTxsRetrying: (params: {\n chainId: number;\n pollingInterval?: number;\n retry?: SubscriptionRetryConfig;\n }) => Effect.Effect<\n RetryingSubscriptionStream<Hash>,\n SubscriptionNotSupportedError | ClientNotFoundError\n >;\n\n readonly hasWebSocket: (chainId: number) => Effect.Effect<boolean, ClientNotFoundError>;\n};\n\nexport class SubscriptionService extends Context.Tag(\"ew3/SubscriptionService\")<\n SubscriptionService,\n SubscriptionServiceShape\n>() {}\n\nexport const SubscriptionServiceLive = Layer.effect(\n SubscriptionService,\n Effect.gen(function* () {\n const publicClientService = yield* PublicClientService;\n\n return {\n hasWebSocket: (chainId) =>\n Effect.gen(function* () {\n const client = yield* publicClientService.get(chainId);\n // Check if transport is WebSocket-based\n return client.transport.type === \"webSocket\";\n }),\n watchBlocks: (params) => watchBlocks(publicClientService, params),\n\n watchBlocksRetrying: (params) =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<SubscriptionConnectionState>({\n status: \"connecting\",\n });\n\n const { retry, ...watchParams } = params;\n const schedule = makeSubscriptionRetrySchedule(retry);\n const stream = (yield* watchBlocks(publicClientService, watchParams)).pipe(\n Stream.onStart(SubscriptionRef.set(stateRef, { status: \"connected\" })),\n Stream.tapError((error) =>\n SubscriptionRef.set(stateRef, { error, status: \"retrying\" })\n ),\n Stream.retry(schedule),\n Stream.catchAll(() => neverStream<Block>())\n );\n\n return { stateRef, stream };\n }),\n\n watchLogs: (params) => watchLogs(publicClientService, params),\n\n watchLogsRetrying: (params) =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<SubscriptionConnectionState>({\n status: \"connecting\",\n });\n\n const { retry, ...watchParams } = params;\n const schedule = makeSubscriptionRetrySchedule(retry);\n const stream = (yield* watchLogs(publicClientService, watchParams)).pipe(\n Stream.onStart(SubscriptionRef.set(stateRef, { status: \"connected\" })),\n Stream.tapError((error) =>\n SubscriptionRef.set(stateRef, { error, status: \"retrying\" })\n ),\n Stream.retry(schedule),\n Stream.catchAll(() => neverStream<Log>())\n );\n\n return { stateRef, stream };\n }),\n\n watchPendingTxs: (params) => watchPendingTxs(publicClientService, params),\n\n watchPendingTxsRetrying: (params) =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<SubscriptionConnectionState>({\n status: \"connecting\",\n });\n\n const { retry, ...watchParams } = params;\n const schedule = makeSubscriptionRetrySchedule(retry);\n const stream = (yield* watchPendingTxs(publicClientService, watchParams)).pipe(\n Stream.onStart(SubscriptionRef.set(stateRef, { status: \"connected\" })),\n Stream.tapError((error) =>\n SubscriptionRef.set(stateRef, { error, status: \"retrying\" })\n ),\n Stream.retry(schedule),\n Stream.catchAll(() => neverStream<Hash>())\n );\n\n return { stateRef, stream };\n }),\n };\n })\n);\n"]}
@@ -15,7 +15,7 @@ export type MockSubscriptionServiceConfig = {
15
15
  topics?: (Hex | Hex[] | null)[];
16
16
  pollingInterval?: number;
17
17
  }) => Effect.Effect<Stream.Stream<Log, never>>;
18
- watchPendingTransactions?: (params: {
18
+ watchPendingTxs?: (params: {
19
19
  chainId: number;
20
20
  pollingInterval?: number;
21
21
  }) => Effect.Effect<Stream.Stream<Hash, never>>;
@@ -38,7 +38,7 @@ export type MockSubscriptionServiceConfig = {
38
38
  stateRef: SubscriptionRef.SubscriptionRef<SubscriptionConnectionState>;
39
39
  stream: Stream.Stream<Log, never>;
40
40
  }>;
41
- watchPendingTransactionsRetrying?: (params: {
41
+ watchPendingTxsRetrying?: (params: {
42
42
  chainId: number;
43
43
  pollingInterval?: number;
44
44
  retry?: SubscriptionRetryConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"mock-subscription-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-subscription-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock-subscription-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-subscription-service.ts"],"names":[],"mappings":"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"}
@@ -22,13 +22,13 @@ const defaultConfig = {
22
22
  const stream = yield* defaultConfig.watchLogs(watchParams);
23
23
  return { stateRef, stream };
24
24
  }),
25
- watchPendingTransactions: () => Effect.succeed(Stream.empty),
26
- watchPendingTransactionsRetrying: (params) => Effect.gen(function* () {
25
+ watchPendingTxs: () => Effect.succeed(Stream.empty),
26
+ watchPendingTxsRetrying: (params) => Effect.gen(function* () {
27
27
  const stateRef = yield* SubscriptionRef.make({
28
28
  status: "connected",
29
29
  });
30
30
  const { retry: _retry, ...watchParams } = params;
31
- const stream = yield* defaultConfig.watchPendingTransactions(watchParams);
31
+ const stream = yield* defaultConfig.watchPendingTxs(watchParams);
32
32
  return { stateRef, stream };
33
33
  }),
34
34
  };
@@ -43,7 +43,7 @@ export const makeMockSubscriptionServiceLayer = (config = {}, supportedChainId =
43
43
  watchBlocksRetrying: withChainIdCheck(supportedChainId, merged.watchBlocksRetrying),
44
44
  watchLogs: withChainIdCheck(supportedChainId, merged.watchLogs),
45
45
  watchLogsRetrying: withChainIdCheck(supportedChainId, merged.watchLogsRetrying),
46
- watchPendingTransactions: withChainIdCheck(supportedChainId, merged.watchPendingTransactions),
47
- watchPendingTransactionsRetrying: withChainIdCheck(supportedChainId, merged.watchPendingTransactionsRetrying),
46
+ watchPendingTxs: withChainIdCheck(supportedChainId, merged.watchPendingTxs),
47
+ watchPendingTxsRetrying: withChainIdCheck(supportedChainId, merged.watchPendingTxsRetrying),
48
48
  }));
49
49
  //# sourceMappingURL=mock-subscription-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mock-subscription-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-subscription-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Layer } from \"effect\";\nimport { Effect, Stream, SubscriptionRef } from \"effect\";\nimport type { Address, Block, Hash, Hex, Log } from \"viem\";\nimport { ClientNotFoundError } from \"@/src/core/index.js\";\nimport type {\n SubscriptionConnectionState,\n SubscriptionRetryConfig,\n} from \"@/src/subscriptions/index.js\";\nimport { SubscriptionService } from \"@/src/subscriptions/index.js\";\nimport { makeMockServiceLayer, withChainIdCheck } from \"./helpers.js\";\n\n/**\n * Configuration for the mock SubscriptionService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockSubscriptionServiceConfig = {\n watchBlocks?: (params: {\n chainId: number;\n includeTransactions?: boolean;\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<Block, never>>;\n\n watchLogs?: (params: {\n chainId: number;\n address?: Address | Address[];\n topics?: (Hex | Hex[] | null)[];\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<Log, never>>;\n\n watchPendingTransactions?: (params: {\n chainId: number;\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<Hash, never>>;\n\n watchBlocksRetrying?: (params: {\n chainId: number;\n includeTransactions?: boolean;\n pollingInterval?: number;\n retry?: SubscriptionRetryConfig;\n }) => Effect.Effect<{\n stateRef: SubscriptionRef.SubscriptionRef<SubscriptionConnectionState>;\n stream: Stream.Stream<Block, never>;\n }>;\n\n watchLogsRetrying?: (params: {\n chainId: number;\n address?: Address | Address[];\n topics?: (Hex | Hex[] | null)[];\n pollingInterval?: number;\n retry?: SubscriptionRetryConfig;\n }) => Effect.Effect<{\n stateRef: SubscriptionRef.SubscriptionRef<SubscriptionConnectionState>;\n stream: Stream.Stream<Log, never>;\n }>;\n\n watchPendingTransactionsRetrying?: (params: {\n chainId: number;\n pollingInterval?: number;\n retry?: SubscriptionRetryConfig;\n }) => Effect.Effect<{\n stateRef: SubscriptionRef.SubscriptionRef<SubscriptionConnectionState>;\n stream: Stream.Stream<Hash, never>;\n }>;\n\n hasWebSocket?: (chainId: number) => Effect.Effect<boolean>;\n};\n\nconst defaultConfig: Required<MockSubscriptionServiceConfig> = {\n hasWebSocket: () => Effect.succeed(false),\n watchBlocks: () => Effect.succeed(Stream.empty),\n watchBlocksRetrying: (params) =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<SubscriptionConnectionState>({\n status: \"connected\",\n });\n const { retry: _retry, ...watchParams } = params;\n const stream = yield* defaultConfig.watchBlocks(watchParams);\n return { stateRef, stream };\n }),\n watchLogs: () => Effect.succeed(Stream.empty),\n watchLogsRetrying: (params) =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<SubscriptionConnectionState>({\n status: \"connected\",\n });\n const { retry: _retry, ...watchParams } = params;\n const stream = yield* defaultConfig.watchLogs(watchParams);\n return { stateRef, stream };\n }),\n watchPendingTransactions: () => Effect.succeed(Stream.empty),\n watchPendingTransactionsRetrying: (params) =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<SubscriptionConnectionState>({\n status: \"connected\",\n });\n const { retry: _retry, ...watchParams } = params;\n const stream = yield* defaultConfig.watchPendingTransactions(watchParams);\n return { stateRef, stream };\n }),\n};\n\n/**\n * Creates a mock SubscriptionService layer for testing\n *\n * @param config - Optional configuration to override default mock behaviors\n * @param supportedChainId - The chainId this mock supports (default: 1 mainnet)\n *\n * @example\n * ```typescript\n * // Basic usage with defaults\n * const layer = makeMockSubscriptionServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockSubscriptionServiceLayer({\n * watchBlocks: () => Effect.succeed(Stream.make({ number: 1000n })),\n * hasWebSocket: () => Effect.succeed(true),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const subscriptions = yield* SubscriptionService;\n * const blockStream = yield* subscriptions.watchBlocks({ chainId: mainnet.id });\n * }).pipe(Effect.provide(layer));\n * ```\n */\nexport const makeMockSubscriptionServiceLayer = (\n config: MockSubscriptionServiceConfig = {},\n supportedChainId = 1\n): Layer.Layer<SubscriptionService> =>\n makeMockServiceLayer(SubscriptionService, defaultConfig, config, (merged) => ({\n // hasWebSocket takes chainId directly (not a params object), so we handle it separately\n hasWebSocket: (chainId) =>\n chainId === supportedChainId\n ? merged.hasWebSocket(chainId)\n : Effect.fail(\n new ClientNotFoundError({\n chainId,\n message: `No client configured for chain ID ${chainId}`,\n })\n ),\n\n // Methods that take params with chainId - use the helper\n watchBlocks: withChainIdCheck(supportedChainId, merged.watchBlocks),\n watchBlocksRetrying: withChainIdCheck(supportedChainId, merged.watchBlocksRetrying),\n watchLogs: withChainIdCheck(supportedChainId, merged.watchLogs),\n watchLogsRetrying: withChainIdCheck(supportedChainId, merged.watchLogsRetrying),\n watchPendingTransactions: withChainIdCheck(supportedChainId, merged.watchPendingTransactions),\n watchPendingTransactionsRetrying: withChainIdCheck(\n supportedChainId,\n merged.watchPendingTransactionsRetrying\n ),\n }));\n"]}
1
+ {"version":3,"file":"mock-subscription-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-subscription-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Layer } from \"effect\";\nimport { Effect, Stream, SubscriptionRef } from \"effect\";\nimport type { Address, Block, Hash, Hex, Log } from \"viem\";\nimport { ClientNotFoundError } from \"@/src/core/index.js\";\nimport type {\n SubscriptionConnectionState,\n SubscriptionRetryConfig,\n} from \"@/src/subscriptions/index.js\";\nimport { SubscriptionService } from \"@/src/subscriptions/index.js\";\nimport { makeMockServiceLayer, withChainIdCheck } from \"./helpers.js\";\n\n/**\n * Configuration for the mock SubscriptionService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockSubscriptionServiceConfig = {\n watchBlocks?: (params: {\n chainId: number;\n includeTransactions?: boolean;\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<Block, never>>;\n\n watchLogs?: (params: {\n chainId: number;\n address?: Address | Address[];\n topics?: (Hex | Hex[] | null)[];\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<Log, never>>;\n\n watchPendingTxs?: (params: {\n chainId: number;\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<Hash, never>>;\n\n watchBlocksRetrying?: (params: {\n chainId: number;\n includeTransactions?: boolean;\n pollingInterval?: number;\n retry?: SubscriptionRetryConfig;\n }) => Effect.Effect<{\n stateRef: SubscriptionRef.SubscriptionRef<SubscriptionConnectionState>;\n stream: Stream.Stream<Block, never>;\n }>;\n\n watchLogsRetrying?: (params: {\n chainId: number;\n address?: Address | Address[];\n topics?: (Hex | Hex[] | null)[];\n pollingInterval?: number;\n retry?: SubscriptionRetryConfig;\n }) => Effect.Effect<{\n stateRef: SubscriptionRef.SubscriptionRef<SubscriptionConnectionState>;\n stream: Stream.Stream<Log, never>;\n }>;\n\n watchPendingTxsRetrying?: (params: {\n chainId: number;\n pollingInterval?: number;\n retry?: SubscriptionRetryConfig;\n }) => Effect.Effect<{\n stateRef: SubscriptionRef.SubscriptionRef<SubscriptionConnectionState>;\n stream: Stream.Stream<Hash, never>;\n }>;\n\n hasWebSocket?: (chainId: number) => Effect.Effect<boolean>;\n};\n\nconst defaultConfig: Required<MockSubscriptionServiceConfig> = {\n hasWebSocket: () => Effect.succeed(false),\n watchBlocks: () => Effect.succeed(Stream.empty),\n watchBlocksRetrying: (params) =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<SubscriptionConnectionState>({\n status: \"connected\",\n });\n const { retry: _retry, ...watchParams } = params;\n const stream = yield* defaultConfig.watchBlocks(watchParams);\n return { stateRef, stream };\n }),\n watchLogs: () => Effect.succeed(Stream.empty),\n watchLogsRetrying: (params) =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<SubscriptionConnectionState>({\n status: \"connected\",\n });\n const { retry: _retry, ...watchParams } = params;\n const stream = yield* defaultConfig.watchLogs(watchParams);\n return { stateRef, stream };\n }),\n watchPendingTxs: () => Effect.succeed(Stream.empty),\n watchPendingTxsRetrying: (params) =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<SubscriptionConnectionState>({\n status: \"connected\",\n });\n const { retry: _retry, ...watchParams } = params;\n const stream = yield* defaultConfig.watchPendingTxs(watchParams);\n return { stateRef, stream };\n }),\n};\n\n/**\n * Creates a mock SubscriptionService layer for testing\n *\n * @param config - Optional configuration to override default mock behaviors\n * @param supportedChainId - The chainId this mock supports (default: 1 mainnet)\n *\n * @example\n * ```typescript\n * // Basic usage with defaults\n * const layer = makeMockSubscriptionServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockSubscriptionServiceLayer({\n * watchBlocks: () => Effect.succeed(Stream.make({ number: 1000n })),\n * hasWebSocket: () => Effect.succeed(true),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const subscriptions = yield* SubscriptionService;\n * const blockStream = yield* subscriptions.watchBlocks({ chainId: mainnet.id });\n * }).pipe(Effect.provide(layer));\n * ```\n */\nexport const makeMockSubscriptionServiceLayer = (\n config: MockSubscriptionServiceConfig = {},\n supportedChainId = 1\n): Layer.Layer<SubscriptionService> =>\n makeMockServiceLayer(SubscriptionService, defaultConfig, config, (merged) => ({\n // hasWebSocket takes chainId directly (not a params object), so we handle it separately\n hasWebSocket: (chainId) =>\n chainId === supportedChainId\n ? merged.hasWebSocket(chainId)\n : Effect.fail(\n new ClientNotFoundError({\n chainId,\n message: `No client configured for chain ID ${chainId}`,\n })\n ),\n\n // Methods that take params with chainId - use the helper\n watchBlocks: withChainIdCheck(supportedChainId, merged.watchBlocks),\n watchBlocksRetrying: withChainIdCheck(supportedChainId, merged.watchBlocksRetrying),\n watchLogs: withChainIdCheck(supportedChainId, merged.watchLogs),\n watchLogsRetrying: withChainIdCheck(supportedChainId, merged.watchLogsRetrying),\n watchPendingTxs: withChainIdCheck(supportedChainId, merged.watchPendingTxs),\n watchPendingTxsRetrying: withChainIdCheck(supportedChainId, merged.watchPendingTxsRetrying),\n }));\n"]}
@@ -1,7 +1,7 @@
1
1
  import type { Layer } from "effect";
2
2
  import { Effect } from "effect";
3
3
  import type { Address, Hash, TransactionReceipt } from "viem";
4
- import type { ClientNotFoundError, InsufficientFundsError, ReceiptTimeoutError, TransactionFailedError, UserRejectedError, WalletNotConnectedError, WrongNetworkError } from "../core/index.js";
4
+ import type { ClientNotFoundError, InsufficientFundsError, ReceiptTimeoutError, TxFailedError, UserRejectedError, WalletNotConnectedError, WrongNetworkError } from "../core/index.js";
5
5
  import type { TransferOverrides } from "../transfer/index.js";
6
6
  import { TransferService } from "../transfer/index.js";
7
7
  export type MockTransferServiceConfig = {
@@ -10,14 +10,14 @@ export type MockTransferServiceConfig = {
10
10
  to: Address;
11
11
  value: bigint;
12
12
  overrides?: TransferOverrides;
13
- }) => Effect.Effect<Hash, InsufficientFundsError | UserRejectedError | WalletNotConnectedError | WrongNetworkError | ClientNotFoundError | TransactionFailedError>;
13
+ }) => Effect.Effect<Hash, InsufficientFundsError | UserRejectedError | WalletNotConnectedError | WrongNetworkError | ClientNotFoundError | TxFailedError>;
14
14
  sendAndWait?: (params: {
15
15
  chainId: number;
16
16
  to: Address;
17
17
  value: bigint;
18
18
  confirmations?: number;
19
19
  overrides?: TransferOverrides;
20
- }) => Effect.Effect<TransactionReceipt, InsufficientFundsError | UserRejectedError | WalletNotConnectedError | WrongNetworkError | ClientNotFoundError | TransactionFailedError | ReceiptTimeoutError>;
20
+ }) => Effect.Effect<TransactionReceipt, InsufficientFundsError | UserRejectedError | WalletNotConnectedError | WrongNetworkError | ClientNotFoundError | TxFailedError | ReceiptTimeoutError>;
21
21
  estimateGas?: (params: {
22
22
  chainId: number;
23
23
  to: Address;
@@ -1 +1 @@
1
- {"version":3,"file":"mock-transfer-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-transfer-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAE9D,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAW1D,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,iBAAiB,CAAC;KAC/B,KAAK,MAAM,CAAC,MAAM,CACjB,IAAI,EACF,sBAAsB,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,sBAAsB,CACzB,CAAC;IAEF,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,iBAAiB,CAAC;KAC/B,KAAK,MAAM,CAAC,MAAM,CACjB,kBAAkB,EAChB,sBAAsB,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,sBAAsB,GACtB,mBAAmB,CACtB,CAAC;IAEF,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAClD,CAAC;AAsCF,eAAO,MAAM,4BAA4B,GACvC,SAAQ,yBAA8B,EACtC,yBAAoB,KACnB,KAAK,CAAC,KAAK,CAAC,eAAe,CAKzB,CAAC"}
1
+ {"version":3,"file":"mock-transfer-service.d.ts","sourceRoot":"","sources":["../../src/testing-kit/mock-transfer-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAE9D,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAW1D,MAAM,MAAM,yBAAyB,GAAG;IACtC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,iBAAiB,CAAC;KAC/B,KAAK,MAAM,CAAC,MAAM,CACjB,IAAI,EACF,sBAAsB,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,aAAa,CAChB,CAAC;IAEF,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,iBAAiB,CAAC;KAC/B,KAAK,MAAM,CAAC,MAAM,CACjB,kBAAkB,EAChB,sBAAsB,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,aAAa,GACb,mBAAmB,CACtB,CAAC;IAEF,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAClD,CAAC;AAsCF,eAAO,MAAM,4BAA4B,GACvC,SAAQ,yBAA8B,EACtC,yBAAoB,KACnB,KAAK,CAAC,KAAK,CAAC,eAAe,CAKzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-transfer-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-transfer-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAWtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAgDtE,MAAM,aAAa,GAAwC;IACzD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;IAC7C,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;IACxC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAkC,CAAC;CACtE,CAAC;AAgCF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,SAAoC,EAAE,EACtC,gBAAgB,GAAG,CAAC,EACU,EAAE,CAChC,oBAAoB,CAAC,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxE,WAAW,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC;IACnE,IAAI,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC;IACrD,WAAW,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC;CACpE,CAAC,CAAC,CAAC","sourcesContent":["import type { Layer } from \"effect\";\nimport { Effect } from \"effect\";\nimport type { Address, Hash, TransactionReceipt } from \"viem\";\nimport { MIN_TX_GAS } from \"@/src/constants/index.js\";\nimport type {\n ClientNotFoundError,\n InsufficientFundsError,\n ReceiptTimeoutError,\n TransactionFailedError,\n UserRejectedError,\n WalletNotConnectedError,\n WrongNetworkError,\n} from \"@/src/core/index.js\";\nimport type { TransferOverrides } from \"@/src/transfer/index.js\";\nimport { TransferService } from \"@/src/transfer/index.js\";\nimport { TEST_TX_HASH } from \"./_fixtures/addresses.js\";\nimport { TEST_RECEIPT } from \"./_fixtures/receipts.js\";\nimport { makeMockServiceLayer, withChainIdCheck } from \"./helpers.js\";\n\n/**\n * Configuration for the mock TransferService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockTransferServiceConfig = {\n send?: (params: {\n chainId: number;\n to: Address;\n value: bigint;\n overrides?: TransferOverrides;\n }) => Effect.Effect<\n Hash,\n | InsufficientFundsError\n | UserRejectedError\n | WalletNotConnectedError\n | WrongNetworkError\n | ClientNotFoundError\n | TransactionFailedError\n >;\n\n sendAndWait?: (params: {\n chainId: number;\n to: Address;\n value: bigint;\n confirmations?: number;\n overrides?: TransferOverrides;\n }) => Effect.Effect<\n TransactionReceipt,\n | InsufficientFundsError\n | UserRejectedError\n | WalletNotConnectedError\n | WrongNetworkError\n | ClientNotFoundError\n | TransactionFailedError\n | ReceiptTimeoutError\n >;\n\n estimateGas?: (params: {\n chainId: number;\n to: Address;\n value: bigint;\n }) => Effect.Effect<bigint, ClientNotFoundError>;\n};\n\nconst defaultConfig: Required<MockTransferServiceConfig> = {\n estimateGas: () => Effect.succeed(MIN_TX_GAS),\n send: () => Effect.succeed(TEST_TX_HASH),\n sendAndWait: () => Effect.succeed(TEST_RECEIPT as TransactionReceipt),\n};\n\n/**\n * Creates a mock TransferService layer for testing\n *\n * @param config - Optional configuration to override default mock behaviors\n * @param supportedChainId - The chainId this mock supports (default: 1 mainnet)\n *\n * @example\n * ```typescript\n * // Basic usage with defaults\n * const layer = makeMockTransferServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockTransferServiceLayer({\n * send: () => Effect.succeed(\"0x123...\"),\n * estimateGas: () => Effect.succeed(21000n),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const transferService = yield* TransferService;\n * const hash = yield* transferService.send({\n * chainId: mainnet.id,\n * to: \"0x...\",\n * value: 1000000000000000000n, // 1 ETH\n * });\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockTransferServiceLayer = (\n config: MockTransferServiceConfig = {},\n supportedChainId = 1\n): Layer.Layer<TransferService> =>\n makeMockServiceLayer(TransferService, defaultConfig, config, (merged) => ({\n estimateGas: withChainIdCheck(supportedChainId, merged.estimateGas),\n send: withChainIdCheck(supportedChainId, merged.send),\n sendAndWait: withChainIdCheck(supportedChainId, merged.sendAndWait),\n }));\n"]}
1
+ {"version":3,"file":"mock-transfer-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-transfer-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAWtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAgDtE,MAAM,aAAa,GAAwC;IACzD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;IAC7C,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;IACxC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAkC,CAAC;CACtE,CAAC;AAgCF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC1C,SAAoC,EAAE,EACtC,gBAAgB,GAAG,CAAC,EACU,EAAE,CAChC,oBAAoB,CAAC,eAAe,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACxE,WAAW,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC;IACnE,IAAI,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC;IACrD,WAAW,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC;CACpE,CAAC,CAAC,CAAC","sourcesContent":["import type { Layer } from \"effect\";\nimport { Effect } from \"effect\";\nimport type { Address, Hash, TransactionReceipt } from \"viem\";\nimport { MIN_TX_GAS } from \"@/src/constants/index.js\";\nimport type {\n ClientNotFoundError,\n InsufficientFundsError,\n ReceiptTimeoutError,\n TxFailedError,\n UserRejectedError,\n WalletNotConnectedError,\n WrongNetworkError,\n} from \"@/src/core/index.js\";\nimport type { TransferOverrides } from \"@/src/transfer/index.js\";\nimport { TransferService } from \"@/src/transfer/index.js\";\nimport { TEST_TX_HASH } from \"./_fixtures/addresses.js\";\nimport { TEST_RECEIPT } from \"./_fixtures/receipts.js\";\nimport { makeMockServiceLayer, withChainIdCheck } from \"./helpers.js\";\n\n/**\n * Configuration for the mock TransferService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockTransferServiceConfig = {\n send?: (params: {\n chainId: number;\n to: Address;\n value: bigint;\n overrides?: TransferOverrides;\n }) => Effect.Effect<\n Hash,\n | InsufficientFundsError\n | UserRejectedError\n | WalletNotConnectedError\n | WrongNetworkError\n | ClientNotFoundError\n | TxFailedError\n >;\n\n sendAndWait?: (params: {\n chainId: number;\n to: Address;\n value: bigint;\n confirmations?: number;\n overrides?: TransferOverrides;\n }) => Effect.Effect<\n TransactionReceipt,\n | InsufficientFundsError\n | UserRejectedError\n | WalletNotConnectedError\n | WrongNetworkError\n | ClientNotFoundError\n | TxFailedError\n | ReceiptTimeoutError\n >;\n\n estimateGas?: (params: {\n chainId: number;\n to: Address;\n value: bigint;\n }) => Effect.Effect<bigint, ClientNotFoundError>;\n};\n\nconst defaultConfig: Required<MockTransferServiceConfig> = {\n estimateGas: () => Effect.succeed(MIN_TX_GAS),\n send: () => Effect.succeed(TEST_TX_HASH),\n sendAndWait: () => Effect.succeed(TEST_RECEIPT as TransactionReceipt),\n};\n\n/**\n * Creates a mock TransferService layer for testing\n *\n * @param config - Optional configuration to override default mock behaviors\n * @param supportedChainId - The chainId this mock supports (default: 1 mainnet)\n *\n * @example\n * ```typescript\n * // Basic usage with defaults\n * const layer = makeMockTransferServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockTransferServiceLayer({\n * send: () => Effect.succeed(\"0x123...\"),\n * estimateGas: () => Effect.succeed(21000n),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const transferService = yield* TransferService;\n * const hash = yield* transferService.send({\n * chainId: mainnet.id,\n * to: \"0x...\",\n * value: 1000000000000000000n, // 1 ETH\n * });\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockTransferServiceLayer = (\n config: MockTransferServiceConfig = {},\n supportedChainId = 1\n): Layer.Layer<TransferService> =>\n makeMockServiceLayer(TransferService, defaultConfig, config, (merged) => ({\n estimateGas: withChainIdCheck(supportedChainId, merged.estimateGas),\n send: withChainIdCheck(supportedChainId, merged.send),\n sendAndWait: withChainIdCheck(supportedChainId, merged.sendAndWait),\n }));\n"]}
@@ -1,7 +1,7 @@
1
1
  import { Context, Effect, Layer } from "effect";
2
2
  import type { Address, Hash, TransactionReceipt } from "viem";
3
3
  import type { ClientNotFoundError, WrongNetworkError } from "../core/index.js";
4
- import { InsufficientFundsError, PublicClientService, ReceiptTimeoutError, TransactionFailedError, UserRejectedError, WalletClientService, WalletNotConnectedError } from "../core/index.js";
4
+ import { InsufficientFundsError, PublicClientService, ReceiptTimeoutError, TxFailedError, UserRejectedError, WalletClientService, WalletNotConnectedError } from "../core/index.js";
5
5
  export type TransferOverrides = {
6
6
  readonly gas?: bigint;
7
7
  readonly gasPrice?: bigint;
@@ -15,14 +15,14 @@ export type TransferServiceShape = {
15
15
  to: Address;
16
16
  value: bigint;
17
17
  overrides?: TransferOverrides;
18
- }) => Effect.Effect<Hash, InsufficientFundsError | UserRejectedError | WalletNotConnectedError | WrongNetworkError | ClientNotFoundError | TransactionFailedError>;
18
+ }) => Effect.Effect<Hash, InsufficientFundsError | UserRejectedError | WalletNotConnectedError | WrongNetworkError | ClientNotFoundError | TxFailedError>;
19
19
  readonly sendAndWait: (params: {
20
20
  chainId: number;
21
21
  to: Address;
22
22
  value: bigint;
23
23
  confirmations?: number;
24
24
  overrides?: TransferOverrides;
25
- }) => Effect.Effect<TransactionReceipt, InsufficientFundsError | UserRejectedError | WalletNotConnectedError | WrongNetworkError | ClientNotFoundError | TransactionFailedError | ReceiptTimeoutError>;
25
+ }) => Effect.Effect<TransactionReceipt, InsufficientFundsError | UserRejectedError | WalletNotConnectedError | WrongNetworkError | ClientNotFoundError | TxFailedError | ReceiptTimeoutError>;
26
26
  readonly estimateGas: (params: {
27
27
  chainId: number;
28
28
  to: Address;
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/transfer/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAgB,MAAM,MAAM,CAAC;AAE5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EACL,sBAAsB,EAGtB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,iBAAiB,CAAC;KAC/B,KAAK,MAAM,CAAC,MAAM,CACjB,IAAI,EACF,sBAAsB,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,sBAAsB,CACzB,CAAC;IAEF,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE;QAC7B,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,iBAAiB,CAAC;KAC/B,KAAK,MAAM,CAAC,MAAM,CACjB,kBAAkB,EAChB,sBAAsB,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,sBAAsB,GACtB,mBAAmB,CACtB,CAAC;IAEF,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE;QAC7B,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAClD,CAAC;;AAEF,qBAAa,eAAgB,SAAQ,oBAGlC;CAAG;AA8BN,eAAO,MAAM,mBAAmB,gFAmJ/B,CAAC"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/transfer/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAgB,MAAM,MAAM,CAAC;AAE5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EACL,sBAAsB,EAGtB,mBAAmB,EACnB,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,iBAAiB,CAAC;KAC/B,KAAK,MAAM,CAAC,MAAM,CACjB,IAAI,EACF,sBAAsB,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,aAAa,CAChB,CAAC;IAEF,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE;QAC7B,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,iBAAiB,CAAC;KAC/B,KAAK,MAAM,CAAC,MAAM,CACjB,kBAAkB,EAChB,sBAAsB,GACtB,iBAAiB,GACjB,uBAAuB,GACvB,iBAAiB,GACjB,mBAAmB,GACnB,aAAa,GACb,mBAAmB,CACtB,CAAC;IAEF,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE;QAC7B,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;KACf,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAClD,CAAC;;AAEF,qBAAa,eAAgB,SAAQ,oBAGlC;CAAG;AA8BN,eAAO,MAAM,mBAAmB,gFAmJ/B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { Context, Effect, Layer } from "effect";
2
2
  import { MIN_TX_GAS } from "../constants/index.js";
3
- import { InsufficientFundsError, isInsufficientFunds, isUserRejection, PublicClientService, ReceiptTimeoutError, TransactionFailedError, UserRejectedError, WalletClientService, WalletNotConnectedError, } from "../core/index.js";
3
+ import { InsufficientFundsError, isInsufficientFunds, isUserRejection, PublicClientService, ReceiptTimeoutError, TxFailedError, UserRejectedError, WalletClientService, WalletNotConnectedError, } from "../core/index.js";
4
4
  export class TransferService extends Context.Tag("ew3/TransferService")() {
5
5
  }
6
6
  const classifyTransferError = (error, to) => {
@@ -16,7 +16,7 @@ const classifyTransferError = (error, to) => {
16
16
  required: "0",
17
17
  });
18
18
  }
19
- return new TransactionFailedError({
19
+ return new TxFailedError({
20
20
  cause: error,
21
21
  hash: "0x",
22
22
  message: error instanceof Error ? error.message : `Failed to send transfer to ${to}`,
@@ -129,7 +129,7 @@ export const TransferServiceLive = Layer.effect(TransferService, Effect.gen(func
129
129
  timeout: 30_000,
130
130
  });
131
131
  }
132
- return new TransactionFailedError({
132
+ return new TxFailedError({
133
133
  cause: error,
134
134
  hash,
135
135
  message: `Failed to wait for transaction ${hash}`,
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/transfer/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context, Effect, Layer } from \"effect\";\nimport type { Address, Hash, TransactionReceipt, WalletClient } from \"viem\";\nimport { MIN_TX_GAS } from \"@/src/constants/index.js\";\nimport type { ClientNotFoundError, WrongNetworkError } from \"@/src/core/index.js\";\nimport {\n InsufficientFundsError,\n isInsufficientFunds,\n isUserRejection,\n PublicClientService,\n ReceiptTimeoutError,\n TransactionFailedError,\n UserRejectedError,\n WalletClientService,\n WalletNotConnectedError,\n} from \"@/src/core/index.js\";\n\nexport type TransferOverrides = {\n readonly gas?: bigint;\n readonly gasPrice?: bigint;\n readonly maxFeePerGas?: bigint;\n readonly maxPriorityFeePerGas?: bigint;\n readonly nonce?: number;\n};\n\nexport type TransferServiceShape = {\n readonly send: (params: {\n chainId: number;\n to: Address;\n value: bigint;\n overrides?: TransferOverrides;\n }) => Effect.Effect<\n Hash,\n | InsufficientFundsError\n | UserRejectedError\n | WalletNotConnectedError\n | WrongNetworkError\n | ClientNotFoundError\n | TransactionFailedError\n >;\n\n readonly sendAndWait: (params: {\n chainId: number;\n to: Address;\n value: bigint;\n confirmations?: number;\n overrides?: TransferOverrides;\n }) => Effect.Effect<\n TransactionReceipt,\n | InsufficientFundsError\n | UserRejectedError\n | WalletNotConnectedError\n | WrongNetworkError\n | ClientNotFoundError\n | TransactionFailedError\n | ReceiptTimeoutError\n >;\n\n readonly estimateGas: (params: {\n chainId: number;\n to: Address;\n value: bigint;\n }) => Effect.Effect<bigint, ClientNotFoundError>;\n};\n\nexport class TransferService extends Context.Tag(\"ew3/TransferService\")<\n TransferService,\n TransferServiceShape\n>() {}\n\n/**\n * Classify transfer errors into appropriate error types\n */\nconst classifyTransferError = (\n error: unknown,\n to: Address\n): InsufficientFundsError | UserRejectedError | TransactionFailedError => {\n if (isUserRejection(error)) {\n return new UserRejectedError({\n message: error instanceof Error ? error.message : \"User rejected the transaction\",\n });\n }\n\n if (isInsufficientFunds(error)) {\n return new InsufficientFundsError({\n available: \"0\",\n message: error instanceof Error ? error.message : \"Insufficient funds for transfer\",\n required: \"0\",\n });\n }\n\n return new TransactionFailedError({\n cause: error,\n hash: \"0x\",\n message: error instanceof Error ? error.message : `Failed to send transfer to ${to}`,\n });\n};\n\nexport const TransferServiceLive = Layer.effect(\n TransferService,\n Effect.gen(function* () {\n const walletClientService = yield* WalletClientService;\n const publicClientService = yield* PublicClientService;\n\n return TransferService.of({\n estimateGas: Effect.fn(\"TransferService.estimateGas\")(function* (params) {\n const publicClient = yield* publicClientService.get(params.chainId);\n\n // Try to estimate, fallback to standard transfer gas on failure\n return yield* Effect.tryPromise({\n catch: () => MIN_TX_GAS,\n try: () =>\n publicClient.estimateGas({\n to: params.to,\n value: params.value,\n }),\n }).pipe(Effect.catchAll(() => Effect.succeed(MIN_TX_GAS)));\n }),\n\n send: Effect.fn(\"TransferService.send\")(function* (params) {\n const walletClient = yield* walletClientService.get(params.chainId);\n const [account] = yield* Effect.tryPromise({\n catch: () =>\n new WalletNotConnectedError({\n chainId: params.chainId,\n message: \"No account found\",\n }),\n try: () => walletClient.getAddresses(),\n });\n\n if (!account) {\n return yield* Effect.fail(\n new WalletNotConnectedError({\n chainId: params.chainId,\n message: \"No account connected\",\n })\n );\n }\n\n // Determine if we should use legacy or EIP-1559 transaction type\n const useLegacy = params.overrides?.gasPrice !== undefined;\n\n return yield* Effect.tryPromise({\n catch: (error) => classifyTransferError(error, params.to),\n try: () =>\n useLegacy\n ? (walletClient as WalletClient).sendTransaction({\n account,\n chain: null,\n gas: params.overrides?.gas,\n gasPrice: params.overrides?.gasPrice,\n nonce: params.overrides?.nonce,\n to: params.to,\n type: \"legacy\",\n value: params.value,\n })\n : (walletClient as WalletClient).sendTransaction({\n account,\n chain: null,\n gas: params.overrides?.gas,\n maxFeePerGas: params.overrides?.maxFeePerGas,\n maxPriorityFeePerGas: params.overrides?.maxPriorityFeePerGas,\n nonce: params.overrides?.nonce,\n to: params.to,\n type: \"eip1559\",\n value: params.value,\n }),\n });\n }),\n\n sendAndWait: Effect.fn(\"TransferService.sendAndWait\")(function* (params) {\n const walletClient = yield* walletClientService.get(params.chainId);\n const publicClient = yield* publicClientService.get(params.chainId);\n const [account] = yield* Effect.tryPromise({\n catch: () =>\n new WalletNotConnectedError({\n chainId: params.chainId,\n message: \"No account found\",\n }),\n try: () => walletClient.getAddresses(),\n });\n\n if (!account) {\n return yield* Effect.fail(\n new WalletNotConnectedError({\n chainId: params.chainId,\n message: \"No account connected\",\n })\n );\n }\n\n // Determine if we should use legacy or EIP-1559 transaction type\n const useLegacy = params.overrides?.gasPrice !== undefined;\n\n const hash = yield* Effect.tryPromise({\n catch: (error) => classifyTransferError(error, params.to),\n try: () =>\n useLegacy\n ? (walletClient as WalletClient).sendTransaction({\n account,\n chain: null,\n gas: params.overrides?.gas,\n gasPrice: params.overrides?.gasPrice,\n nonce: params.overrides?.nonce,\n to: params.to,\n type: \"legacy\",\n value: params.value,\n })\n : (walletClient as WalletClient).sendTransaction({\n account,\n chain: null,\n gas: params.overrides?.gas,\n maxFeePerGas: params.overrides?.maxFeePerGas,\n maxPriorityFeePerGas: params.overrides?.maxPriorityFeePerGas,\n nonce: params.overrides?.nonce,\n to: params.to,\n type: \"eip1559\",\n value: params.value,\n }),\n });\n\n return yield* Effect.tryPromise({\n catch: (error) => {\n if (error instanceof Error && error.message.includes(\"timeout\")) {\n return new ReceiptTimeoutError({\n hash,\n message: `Transaction receipt timeout for ${hash}`,\n timeout: 30_000,\n });\n }\n return new TransactionFailedError({\n cause: error,\n hash,\n message: `Failed to wait for transaction ${hash}`,\n });\n },\n try: () =>\n publicClient.waitForTransactionReceipt({\n confirmations: params.confirmations,\n hash,\n }),\n });\n }),\n });\n })\n);\n"]}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/transfer/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context, Effect, Layer } from \"effect\";\nimport type { Address, Hash, TransactionReceipt, WalletClient } from \"viem\";\nimport { MIN_TX_GAS } from \"@/src/constants/index.js\";\nimport type { ClientNotFoundError, WrongNetworkError } from \"@/src/core/index.js\";\nimport {\n InsufficientFundsError,\n isInsufficientFunds,\n isUserRejection,\n PublicClientService,\n ReceiptTimeoutError,\n TxFailedError,\n UserRejectedError,\n WalletClientService,\n WalletNotConnectedError,\n} from \"@/src/core/index.js\";\n\nexport type TransferOverrides = {\n readonly gas?: bigint;\n readonly gasPrice?: bigint;\n readonly maxFeePerGas?: bigint;\n readonly maxPriorityFeePerGas?: bigint;\n readonly nonce?: number;\n};\n\nexport type TransferServiceShape = {\n readonly send: (params: {\n chainId: number;\n to: Address;\n value: bigint;\n overrides?: TransferOverrides;\n }) => Effect.Effect<\n Hash,\n | InsufficientFundsError\n | UserRejectedError\n | WalletNotConnectedError\n | WrongNetworkError\n | ClientNotFoundError\n | TxFailedError\n >;\n\n readonly sendAndWait: (params: {\n chainId: number;\n to: Address;\n value: bigint;\n confirmations?: number;\n overrides?: TransferOverrides;\n }) => Effect.Effect<\n TransactionReceipt,\n | InsufficientFundsError\n | UserRejectedError\n | WalletNotConnectedError\n | WrongNetworkError\n | ClientNotFoundError\n | TxFailedError\n | ReceiptTimeoutError\n >;\n\n readonly estimateGas: (params: {\n chainId: number;\n to: Address;\n value: bigint;\n }) => Effect.Effect<bigint, ClientNotFoundError>;\n};\n\nexport class TransferService extends Context.Tag(\"ew3/TransferService\")<\n TransferService,\n TransferServiceShape\n>() {}\n\n/**\n * Classify transfer errors into appropriate error types\n */\nconst classifyTransferError = (\n error: unknown,\n to: Address\n): InsufficientFundsError | UserRejectedError | TxFailedError => {\n if (isUserRejection(error)) {\n return new UserRejectedError({\n message: error instanceof Error ? error.message : \"User rejected the transaction\",\n });\n }\n\n if (isInsufficientFunds(error)) {\n return new InsufficientFundsError({\n available: \"0\",\n message: error instanceof Error ? error.message : \"Insufficient funds for transfer\",\n required: \"0\",\n });\n }\n\n return new TxFailedError({\n cause: error,\n hash: \"0x\",\n message: error instanceof Error ? error.message : `Failed to send transfer to ${to}`,\n });\n};\n\nexport const TransferServiceLive = Layer.effect(\n TransferService,\n Effect.gen(function* () {\n const walletClientService = yield* WalletClientService;\n const publicClientService = yield* PublicClientService;\n\n return TransferService.of({\n estimateGas: Effect.fn(\"TransferService.estimateGas\")(function* (params) {\n const publicClient = yield* publicClientService.get(params.chainId);\n\n // Try to estimate, fallback to standard transfer gas on failure\n return yield* Effect.tryPromise({\n catch: () => MIN_TX_GAS,\n try: () =>\n publicClient.estimateGas({\n to: params.to,\n value: params.value,\n }),\n }).pipe(Effect.catchAll(() => Effect.succeed(MIN_TX_GAS)));\n }),\n\n send: Effect.fn(\"TransferService.send\")(function* (params) {\n const walletClient = yield* walletClientService.get(params.chainId);\n const [account] = yield* Effect.tryPromise({\n catch: () =>\n new WalletNotConnectedError({\n chainId: params.chainId,\n message: \"No account found\",\n }),\n try: () => walletClient.getAddresses(),\n });\n\n if (!account) {\n return yield* Effect.fail(\n new WalletNotConnectedError({\n chainId: params.chainId,\n message: \"No account connected\",\n })\n );\n }\n\n // Determine if we should use legacy or EIP-1559 transaction type\n const useLegacy = params.overrides?.gasPrice !== undefined;\n\n return yield* Effect.tryPromise({\n catch: (error) => classifyTransferError(error, params.to),\n try: () =>\n useLegacy\n ? (walletClient as WalletClient).sendTransaction({\n account,\n chain: null,\n gas: params.overrides?.gas,\n gasPrice: params.overrides?.gasPrice,\n nonce: params.overrides?.nonce,\n to: params.to,\n type: \"legacy\",\n value: params.value,\n })\n : (walletClient as WalletClient).sendTransaction({\n account,\n chain: null,\n gas: params.overrides?.gas,\n maxFeePerGas: params.overrides?.maxFeePerGas,\n maxPriorityFeePerGas: params.overrides?.maxPriorityFeePerGas,\n nonce: params.overrides?.nonce,\n to: params.to,\n type: \"eip1559\",\n value: params.value,\n }),\n });\n }),\n\n sendAndWait: Effect.fn(\"TransferService.sendAndWait\")(function* (params) {\n const walletClient = yield* walletClientService.get(params.chainId);\n const publicClient = yield* publicClientService.get(params.chainId);\n const [account] = yield* Effect.tryPromise({\n catch: () =>\n new WalletNotConnectedError({\n chainId: params.chainId,\n message: \"No account found\",\n }),\n try: () => walletClient.getAddresses(),\n });\n\n if (!account) {\n return yield* Effect.fail(\n new WalletNotConnectedError({\n chainId: params.chainId,\n message: \"No account connected\",\n })\n );\n }\n\n // Determine if we should use legacy or EIP-1559 transaction type\n const useLegacy = params.overrides?.gasPrice !== undefined;\n\n const hash = yield* Effect.tryPromise({\n catch: (error) => classifyTransferError(error, params.to),\n try: () =>\n useLegacy\n ? (walletClient as WalletClient).sendTransaction({\n account,\n chain: null,\n gas: params.overrides?.gas,\n gasPrice: params.overrides?.gasPrice,\n nonce: params.overrides?.nonce,\n to: params.to,\n type: \"legacy\",\n value: params.value,\n })\n : (walletClient as WalletClient).sendTransaction({\n account,\n chain: null,\n gas: params.overrides?.gas,\n maxFeePerGas: params.overrides?.maxFeePerGas,\n maxPriorityFeePerGas: params.overrides?.maxPriorityFeePerGas,\n nonce: params.overrides?.nonce,\n to: params.to,\n type: \"eip1559\",\n value: params.value,\n }),\n });\n\n return yield* Effect.tryPromise({\n catch: (error) => {\n if (error instanceof Error && error.message.includes(\"timeout\")) {\n return new ReceiptTimeoutError({\n hash,\n message: `Transaction receipt timeout for ${hash}`,\n timeout: 30_000,\n });\n }\n return new TxFailedError({\n cause: error,\n hash,\n message: `Failed to wait for transaction ${hash}`,\n });\n },\n try: () =>\n publicClient.waitForTransactionReceipt({\n confirmations: params.confirmations,\n hash,\n }),\n });\n }),\n });\n })\n);\n"]}
@@ -2,13 +2,13 @@ import type { Scope, SubscriptionRef } from "effect";
2
2
  import { Context, Effect, Layer } from "effect";
3
3
  import type { Hash, TransactionReceipt } from "viem";
4
4
  import type { ClientNotFoundError } from "../core/index.js";
5
- import { PublicClientService, ReceiptTimeoutError, TransactionFailedError, TransactionReplacedError, TransportError } from "../core/index.js";
5
+ import { PublicClientService, ReceiptTimeoutError, TransportError, TxFailedError, TxReplacedError } from "../core/index.js";
6
6
  import type { TxPolicy } from "./policy.js";
7
7
  import { TxReplacement } from "./replacement.js";
8
8
  import type { TxState } from "./tracker.js";
9
9
  export type TxManagerShape = {
10
10
  readonly track: (chainId: number, hash: Hash, policy?: TxPolicy) => Effect.Effect<SubscriptionRef.SubscriptionRef<TxState>, ClientNotFoundError, Scope.Scope>;
11
- readonly waitForReceipt: (chainId: number, hash: Hash, timeoutOrPolicy?: number | TxPolicy) => Effect.Effect<TransactionReceipt, TransactionFailedError | ReceiptTimeoutError | TransactionReplacedError | ClientNotFoundError>;
11
+ readonly waitForReceipt: (chainId: number, hash: Hash, timeoutOrPolicy?: number | TxPolicy) => Effect.Effect<TransactionReceipt, TxFailedError | ReceiptTimeoutError | TxReplacedError | ClientNotFoundError>;
12
12
  readonly getConfirmations: (chainId: number, params: {
13
13
  hash: Hash;
14
14
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/tx/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAS,OAAO,EAAE,MAAM,EAAS,KAAK,EAAe,MAAM,QAAQ,CAAC;AAC3E,OAAO,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAGrD,OAAO,KAAK,EAAE,mBAAmB,EAAgC,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,MAAM,cAAc,GAAG;IAI3B,QAAQ,CAAC,KAAK,EAAE,CACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,QAAQ,KACd,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAK/F,QAAQ,CAAC,cAAc,EAAE,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,IAAI,EACV,eAAe,CAAC,EAAE,MAAM,GAAG,QAAQ,KAChC,MAAM,CAAC,MAAM,CAChB,kBAAkB,EAClB,sBAAsB,GAAG,mBAAmB,GAAG,wBAAwB,GAAG,mBAAmB,CAC9F,CAAC;IAKF,QAAQ,CAAC,gBAAgB,EAAE,CACzB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,kBAAkB,EAAE,kBAAkB,CAAA;KAAE,KAChE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,cAAc,CAAC,CAAC;CAClE,CAAC;;AAEF,qBAAa,SAAU,SAAQ,cAAyD;CAAG;AAE3F,eAAO,MAAM,aAAa,oEAoTzB,CAAC"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/tx/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAS,OAAO,EAAE,MAAM,EAAS,KAAK,EAAe,MAAM,QAAQ,CAAC;AAC3E,OAAO,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAGrD,OAAO,KAAK,EAAE,mBAAmB,EAAuB,MAAM,qBAAqB,CAAC;AACpF,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,MAAM,cAAc,GAAG;IAI3B,QAAQ,CAAC,KAAK,EAAE,CACd,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,QAAQ,KACd,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAK/F,QAAQ,CAAC,cAAc,EAAE,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,IAAI,EACV,eAAe,CAAC,EAAE,MAAM,GAAG,QAAQ,KAChC,MAAM,CAAC,MAAM,CAChB,kBAAkB,EAClB,aAAa,GAAG,mBAAmB,GAAG,eAAe,GAAG,mBAAmB,CAC5E,CAAC;IAKF,QAAQ,CAAC,gBAAgB,EAAE,CACzB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE;QAAE,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,kBAAkB,EAAE,kBAAkB,CAAA;KAAE,KAChE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,GAAG,cAAc,CAAC,CAAC;CAClE,CAAC;;AAEF,qBAAa,SAAU,SAAQ,cAAyD;CAAG;AAE3F,eAAO,MAAM,aAAa,oEAoTzB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { Clock, Context, Effect, Fiber, Layer, Ref, Stream } from "effect";
2
2
  import { WaitForTransactionReceiptTimeoutError } from "viem";
3
3
  import { DEFAULT_RECEIPT_TIMEOUT, DEFAULT_STUCK_TX_MS } from "../constants/index.js";
4
- import { PublicClientService, ReceiptTimeoutError, TransactionFailedError, TransactionReplacedError, TransportError, } from "../core/index.js";
4
+ import { PublicClientService, ReceiptTimeoutError, TransportError, TxFailedError, TxReplacedError, } from "../core/index.js";
5
5
  import { SpanNames } from "../telemetry/index.js";
6
6
  import { defaultPolicy } from "./policy.js";
7
7
  import { TxReplacement } from "./replacement.js";
@@ -138,7 +138,7 @@ export const TxManagerLive = Layer.effect(TxManager, Effect.gen(function* () {
138
138
  })
139
139
  : cause;
140
140
  yield* tracker.set({
141
- error: new TransactionFailedError({
141
+ error: new TxFailedError({
142
142
  cause: failure,
143
143
  hash,
144
144
  message: failure instanceof Error ? failure.message : String(failure),
@@ -181,7 +181,7 @@ export const TxManagerLive = Layer.effect(TxManager, Effect.gen(function* () {
181
181
  const pollingInterval = policy?.pollingInterval ?? defaultPolicy.pollingInterval;
182
182
  return yield* Effect.tryPromise({
183
183
  catch: (cause) => {
184
- if (cause instanceof TransactionReplacedError) {
184
+ if (cause instanceof TxReplacedError) {
185
185
  return cause;
186
186
  }
187
187
  if (cause instanceof WaitForTransactionReceiptTimeoutError) {
@@ -198,7 +198,7 @@ export const TxManagerLive = Layer.effect(TxManager, Effect.gen(function* () {
198
198
  timeout,
199
199
  });
200
200
  }
201
- return new TransactionFailedError({
201
+ return new TxFailedError({
202
202
  cause,
203
203
  hash,
204
204
  message: `Failed to get receipt for ${hash}`,
@@ -218,7 +218,7 @@ export const TxManagerLive = Layer.effect(TxManager, Effect.gen(function* () {
218
218
  timeout,
219
219
  });
220
220
  if (replacement && replacement.newHash !== hash) {
221
- throw new TransactionReplacedError({
221
+ throw new TxReplacedError({
222
222
  message: `Transaction ${hash} was ${replacement.reason} with ${replacement.newHash}`,
223
223
  newHash: replacement.newHash,
224
224
  oldHash: hash,