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

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 (276) hide show
  1. package/dist/abi/erc165.js.map +1 -1
  2. package/dist/abi/erc20-no-output.js.map +1 -1
  3. package/dist/abi/erc20.js.map +1 -1
  4. package/dist/abi/erc721.js.map +1 -1
  5. package/dist/abi/index.js.map +1 -1
  6. package/dist/balance/index.js.map +1 -1
  7. package/dist/balance/service.js.map +1 -1
  8. package/dist/balance/service.test.integration.d.ts +2 -0
  9. package/dist/balance/service.test.integration.d.ts.map +1 -0
  10. package/dist/balance/service.test.integration.js +289 -0
  11. package/dist/balance/service.test.integration.js.map +1 -0
  12. package/dist/balance/utils.js.map +1 -1
  13. package/dist/block/errors.js.map +1 -1
  14. package/dist/block/index.js.map +1 -1
  15. package/dist/block/service.js.map +1 -1
  16. package/dist/block/service.test.integration.d.ts +2 -0
  17. package/dist/block/service.test.integration.d.ts.map +1 -0
  18. package/dist/block/service.test.integration.js +190 -0
  19. package/dist/block/service.test.integration.js.map +1 -0
  20. package/dist/constants/index.js.map +1 -1
  21. package/dist/contract/cross-chain-reader.js.map +1 -1
  22. package/dist/contract/index.js.map +1 -1
  23. package/dist/contract/pipeline/index.js.map +1 -1
  24. package/dist/contract/pipeline/internal/core.js.map +1 -1
  25. package/dist/contract/pipeline/internal/helpers.js.map +1 -1
  26. package/dist/contract/pipeline/internal/nonce.js.map +1 -1
  27. package/dist/contract/pipeline/internal/prepare.js.map +1 -1
  28. package/dist/contract/pipeline/internal/receipt.js.map +1 -1
  29. package/dist/contract/pipeline/live.js.map +1 -1
  30. package/dist/contract/pipeline/service.js.map +1 -1
  31. package/dist/contract/pipeline/types.js.map +1 -1
  32. package/dist/contract/pipeline/write-and-track.js.map +1 -1
  33. package/dist/contract/pipeline/write-and-wait.js.map +1 -1
  34. package/dist/contract/pipeline.js.map +1 -1
  35. package/dist/contract/reader.js.map +1 -1
  36. package/dist/contract/typed-contract.js.map +1 -1
  37. package/dist/contract/writer.js.map +1 -1
  38. package/dist/core/clients/index.js.map +1 -1
  39. package/dist/core/clients/public-client.js.map +1 -1
  40. package/dist/core/clients/wallet-client.js.map +1 -1
  41. package/dist/core/errors/client.js.map +1 -1
  42. package/dist/core/errors/contract.js.map +1 -1
  43. package/dist/core/errors/erc20.js.map +1 -1
  44. package/dist/core/errors/event.js.map +1 -1
  45. package/dist/core/errors/index.js.map +1 -1
  46. package/dist/core/errors/predicates.js.map +1 -1
  47. package/dist/core/errors/transaction.js.map +1 -1
  48. package/dist/core/errors/viem-mapper.d.ts.map +1 -1
  49. package/dist/core/errors/viem-mapper.js +11 -2
  50. package/dist/core/errors/viem-mapper.js.map +1 -1
  51. package/dist/core/index.js.map +1 -1
  52. package/dist/deploy/errors.js.map +1 -1
  53. package/dist/deploy/index.js.map +1 -1
  54. package/dist/deploy/service.js.map +1 -1
  55. package/dist/eip7702/erc7579.js.map +1 -1
  56. package/dist/eip7702/errors.js.map +1 -1
  57. package/dist/eip7702/index.js.map +1 -1
  58. package/dist/eip7702/service.js.map +1 -1
  59. package/dist/ens/ens.js.map +1 -1
  60. package/dist/ens/errors.js.map +1 -1
  61. package/dist/ens/index.js.map +1 -1
  62. package/dist/erc20/allowance/core.js.map +1 -1
  63. package/dist/erc20/allowance/index.js.map +1 -1
  64. package/dist/erc20/allowance/no-output.js.map +1 -1
  65. package/dist/erc20/allowance/types.js.map +1 -1
  66. package/dist/erc20/index.d.ts +1 -0
  67. package/dist/erc20/index.d.ts.map +1 -1
  68. package/dist/erc20/index.js +1 -0
  69. package/dist/erc20/index.js.map +1 -1
  70. package/dist/erc20/metadata.d.ts +16 -0
  71. package/dist/erc20/metadata.d.ts.map +1 -0
  72. package/dist/erc20/metadata.js +67 -0
  73. package/dist/erc20/metadata.js.map +1 -0
  74. package/dist/erc721/errors.js.map +1 -1
  75. package/dist/erc721/helpers.js.map +1 -1
  76. package/dist/erc721/index.js.map +1 -1
  77. package/dist/erc721/metadata.js.map +1 -1
  78. package/dist/erc721/service.js.map +1 -1
  79. package/dist/events/backfill.js.map +1 -1
  80. package/dist/events/backfill.test.integration.d.ts +2 -0
  81. package/dist/events/backfill.test.integration.d.ts.map +1 -0
  82. package/dist/events/backfill.test.integration.js +112 -0
  83. package/dist/events/backfill.test.integration.js.map +1 -0
  84. package/dist/events/cursor.js.map +1 -1
  85. package/dist/events/decoder.js.map +1 -1
  86. package/dist/events/index.js.map +1 -1
  87. package/dist/events/reliable-stream-simple.test.integration.d.ts +2 -0
  88. package/dist/events/reliable-stream-simple.test.integration.d.ts.map +1 -0
  89. package/dist/events/reliable-stream-simple.test.integration.js +22 -0
  90. package/dist/events/reliable-stream-simple.test.integration.js.map +1 -0
  91. package/dist/events/reliable-stream.js.map +1 -1
  92. package/dist/events/reliable-stream.test.integration.d.ts +2 -0
  93. package/dist/events/reliable-stream.test.integration.d.ts.map +1 -0
  94. package/dist/events/reliable-stream.test.integration.js +327 -0
  95. package/dist/events/reliable-stream.test.integration.js.map +1 -0
  96. package/dist/events/stream.js.map +1 -1
  97. package/dist/events/stream.test.integration.d.ts +2 -0
  98. package/dist/events/stream.test.integration.d.ts.map +1 -0
  99. package/dist/events/stream.test.integration.js +120 -0
  100. package/dist/events/stream.test.integration.js.map +1 -0
  101. package/dist/gas/errors.js.map +1 -1
  102. package/dist/gas/estimator.js.map +1 -1
  103. package/dist/gas/index.js.map +1 -1
  104. package/dist/gas/service.js.map +1 -1
  105. package/dist/gas/service.test.integration.d.ts +2 -0
  106. package/dist/gas/service.test.integration.d.ts.map +1 -0
  107. package/dist/gas/service.test.integration.js +128 -0
  108. package/dist/gas/service.test.integration.js.map +1 -0
  109. package/dist/index.js.map +1 -1
  110. package/dist/integrations/react-hooks/convenience/index.js.map +1 -1
  111. package/dist/integrations/react-hooks/internal/error.js.map +1 -1
  112. package/dist/integrations/react-hooks/internal/is-dev.js.map +1 -1
  113. package/dist/integrations/react-hooks/internal/runtime.js.map +1 -1
  114. package/dist/integrations/react-hooks/internal/scoped-run.js.map +1 -1
  115. package/dist/integrations/react-hooks/internal/stable.js.map +1 -1
  116. package/dist/integrations/react-hooks/primitives/use-effect-memo-factory.js.map +1 -1
  117. package/dist/integrations/react-hooks/primitives/use-effect.js.map +1 -1
  118. package/dist/integrations/react-hooks/primitives/use-fork-effect.js.map +1 -1
  119. package/dist/integrations/react-hooks/primitives/use-stream.js.map +1 -1
  120. package/dist/integrations/react-hooks/primitives.js.map +1 -1
  121. package/dist/integrations/react-hooks/provider.js.map +1 -1
  122. package/dist/integrations/react-hooks/wagmi/index.js.map +1 -1
  123. package/dist/integrations/react-hooks/wallet-provider-ref.js.map +1 -1
  124. package/dist/integrations/wagmi/index.js.map +1 -1
  125. package/dist/integrations/wagmi/layers.js.map +1 -1
  126. package/dist/internal/index.js.map +1 -1
  127. package/dist/internal/numbers.js.map +1 -1
  128. package/dist/internal/schedule.js.map +1 -1
  129. package/dist/internal/stream-adapters.js.map +1 -1
  130. package/dist/internal/viem-effect.js.map +1 -1
  131. package/dist/nonce/index.js.map +1 -1
  132. package/dist/nonce/manager.js.map +1 -1
  133. package/dist/nonce/service.js.map +1 -1
  134. package/dist/nonce/service.test.integration.d.ts +2 -0
  135. package/dist/nonce/service.test.integration.d.ts.map +1 -0
  136. package/dist/nonce/service.test.integration.js +141 -0
  137. package/dist/nonce/service.test.integration.js.map +1 -0
  138. package/dist/platform/browser/cursor-store/index.js.map +1 -1
  139. package/dist/platform/browser/cursor-store/local-storage.js.map +1 -1
  140. package/dist/platform/browser/index.js.map +1 -1
  141. package/dist/platform/browser/layers.js.map +1 -1
  142. package/dist/platform/browser/storage/errors.js.map +1 -1
  143. package/dist/platform/browser/storage/index.js.map +1 -1
  144. package/dist/platform/browser/storage/local-storage.js.map +1 -1
  145. package/dist/platform/browser/tx-persistence/index.js.map +1 -1
  146. package/dist/platform/browser/tx-persistence/persistence.js.map +1 -1
  147. package/dist/platform/browser/tx-store/errors.js.map +1 -1
  148. package/dist/platform/browser/tx-store/index.js.map +1 -1
  149. package/dist/platform/browser/tx-store/local-storage.js.map +1 -1
  150. package/dist/platform/browser/tx-store/store.js.map +1 -1
  151. package/dist/platform/browser/tx-store/types.js.map +1 -1
  152. package/dist/presets/index.js.map +1 -1
  153. package/dist/presets/layers.js.map +1 -1
  154. package/dist/presets/transports.js.map +1 -1
  155. package/dist/query/chain-head.js.map +1 -1
  156. package/dist/query/client.js.map +1 -1
  157. package/dist/query/client.test.integration.d.ts +2 -0
  158. package/dist/query/client.test.integration.d.ts.map +1 -0
  159. package/dist/query/client.test.integration.js +94 -0
  160. package/dist/query/client.test.integration.js.map +1 -0
  161. package/dist/query/contract-query.js.map +1 -1
  162. package/dist/query/contract-query.test.integration.d.ts +2 -0
  163. package/dist/query/contract-query.test.integration.d.ts.map +1 -0
  164. package/dist/query/contract-query.test.integration.js +133 -0
  165. package/dist/query/contract-query.test.integration.js.map +1 -0
  166. package/dist/query/index.js.map +1 -1
  167. package/dist/query/multicall-batcher.js.map +1 -1
  168. package/dist/react-hooks/index.js.map +1 -1
  169. package/dist/react-hooks/use-is-safe-multisig.js.map +1 -1
  170. package/dist/react-hooks/use-safe-context.js.map +1 -1
  171. package/dist/react-hooks/wagmi/index.js.map +1 -1
  172. package/dist/rpc/cache.js.map +1 -1
  173. package/dist/rpc/circuit-breaker.js.map +1 -1
  174. package/dist/rpc/dedup.js.map +1 -1
  175. package/dist/rpc/index.js.map +1 -1
  176. package/dist/rpc/retry.js.map +1 -1
  177. package/dist/rpc/routemesh.js.map +1 -1
  178. package/dist/safe/adapter.js.map +1 -1
  179. package/dist/safe/detection.js.map +1 -1
  180. package/dist/safe/detection.test.integration.d.ts +2 -0
  181. package/dist/safe/detection.test.integration.d.ts.map +1 -0
  182. package/dist/safe/detection.test.integration.js +92 -0
  183. package/dist/safe/detection.test.integration.js.map +1 -0
  184. package/dist/safe/errors.js.map +1 -1
  185. package/dist/safe/index.js.map +1 -1
  186. package/dist/safe/live.js.map +1 -1
  187. package/dist/safe/service.js.map +1 -1
  188. package/dist/safe/service.test.integration.d.ts +2 -0
  189. package/dist/safe/service.test.integration.d.ts.map +1 -0
  190. package/dist/safe/service.test.integration.js +173 -0
  191. package/dist/safe/service.test.integration.js.map +1 -0
  192. package/dist/safe/simulation/abis.js.map +1 -1
  193. package/dist/safe/simulation/addresses.js.map +1 -1
  194. package/dist/safe/simulation/encoding.js.map +1 -1
  195. package/dist/safe/simulation/errors.d.ts +3 -3
  196. package/dist/safe/simulation/errors.js +1 -1
  197. package/dist/safe/simulation/errors.js.map +1 -1
  198. package/dist/safe/simulation/index.d.ts +1 -1
  199. package/dist/safe/simulation/index.js +1 -1
  200. package/dist/safe/simulation/index.js.map +1 -1
  201. package/dist/safe/simulation/service.d.ts +2 -2
  202. package/dist/safe/simulation/service.js +2 -2
  203. package/dist/safe/simulation/service.js.map +1 -1
  204. package/dist/safe/simulation/types.js.map +1 -1
  205. package/dist/safe/types.js.map +1 -1
  206. package/dist/signature/errors.js.map +1 -1
  207. package/dist/signature/index.js.map +1 -1
  208. package/dist/signature/service.js.map +1 -1
  209. package/dist/signature/service.test.integration.d.ts +2 -0
  210. package/dist/signature/service.test.integration.d.ts.map +1 -0
  211. package/dist/signature/service.test.integration.js +179 -0
  212. package/dist/signature/service.test.integration.js.map +1 -0
  213. package/dist/signature/utils.js.map +1 -1
  214. package/dist/simulation/errors.js.map +1 -1
  215. package/dist/simulation/index.js.map +1 -1
  216. package/dist/simulation/service.js.map +1 -1
  217. package/dist/simulation/tenderly.js.map +1 -1
  218. package/dist/simulation/tenderly.test.integration.d.ts +2 -0
  219. package/dist/simulation/tenderly.test.integration.d.ts.map +1 -0
  220. package/dist/simulation/tenderly.test.integration.js +104 -0
  221. package/dist/simulation/tenderly.test.integration.js.map +1 -0
  222. package/dist/simulation/types.js.map +1 -1
  223. package/dist/subscriptions/block-subscription.js.map +1 -1
  224. package/dist/subscriptions/errors.js.map +1 -1
  225. package/dist/subscriptions/index.js.map +1 -1
  226. package/dist/subscriptions/log-subscription.js.map +1 -1
  227. package/dist/subscriptions/pending-tx.js.map +1 -1
  228. package/dist/subscriptions/service.js.map +1 -1
  229. package/dist/telemetry/index.js.map +1 -1
  230. package/dist/telemetry/logger.js.map +1 -1
  231. package/dist/telemetry/tracer.js.map +1 -1
  232. package/dist/testing-kit/_fixtures/addresses.js.map +1 -1
  233. package/dist/testing-kit/_fixtures/receipts.js.map +1 -1
  234. package/dist/testing-kit/helpers.js.map +1 -1
  235. package/dist/testing-kit/index.js.map +1 -1
  236. package/dist/testing-kit/mock-balance-service.js.map +1 -1
  237. package/dist/testing-kit/mock-block-service.js.map +1 -1
  238. package/dist/testing-kit/mock-cross-chain-reader.js.map +1 -1
  239. package/dist/testing-kit/mock-deploy-service.js.map +1 -1
  240. package/dist/testing-kit/mock-erc721-service.js.map +1 -1
  241. package/dist/testing-kit/mock-gas-service.js.map +1 -1
  242. package/dist/testing-kit/mock-nonce-service.js.map +1 -1
  243. package/dist/testing-kit/mock-public-client.js.map +1 -1
  244. package/dist/testing-kit/mock-signature-service.js.map +1 -1
  245. package/dist/testing-kit/mock-simulation-service.js.map +1 -1
  246. package/dist/testing-kit/mock-subscription-service.js.map +1 -1
  247. package/dist/testing-kit/mock-transfer-service.js.map +1 -1
  248. package/dist/testing-kit/mock-wallet-client.js.map +1 -1
  249. package/dist/testing-kit/mock-wallet-provider.js.map +1 -1
  250. package/dist/testing-kit/test-layer.js.map +1 -1
  251. package/dist/transfer/index.js.map +1 -1
  252. package/dist/transfer/service.js.map +1 -1
  253. package/dist/tx/fees.js.map +1 -1
  254. package/dist/tx/index.js.map +1 -1
  255. package/dist/tx/manager.js.map +1 -1
  256. package/dist/tx/manager.test.integration.d.ts +2 -0
  257. package/dist/tx/manager.test.integration.d.ts.map +1 -0
  258. package/dist/tx/manager.test.integration.js +157 -0
  259. package/dist/tx/manager.test.integration.js.map +1 -0
  260. package/dist/tx/policy.js.map +1 -1
  261. package/dist/tx/replacement.js.map +1 -1
  262. package/dist/tx/tracker.js.map +1 -1
  263. package/dist/types/abi.js.map +1 -1
  264. package/dist/types/index.js.map +1 -1
  265. package/dist/types/params.js.map +1 -1
  266. package/dist/types/tx-overrides.js.map +1 -1
  267. package/dist/wagmi/index.js.map +1 -1
  268. package/dist/wagmi/layers.js.map +1 -1
  269. package/dist/wallet/errors.js.map +1 -1
  270. package/dist/wallet/index.js.map +1 -1
  271. package/dist/wallet/lifecycle.js.map +1 -1
  272. package/dist/wallet/operations.js.map +1 -1
  273. package/dist/wallet/provider-ref.js.map +1 -1
  274. package/dist/wallet/service.js.map +1 -1
  275. package/dist/wallet/types.js.map +1 -1
  276. package/package.json +25 -9
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/subscriptions/service.ts"],"names":[],"mappings":"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"}
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 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC","sourcesContent":["export * from \"./logger.js\";\nexport * from \"./tracer.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/telemetry/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAI/B,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAKhC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAgE,EAAE,EAAE,CACjG,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAIhC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAA6C,EAAE,EAAE,CACxE,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/telemetry/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAI/B,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAKhC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAgE,EAAE,EAAE,CACjG,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;AAEnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAIhC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAA6C,EAAE,EAAE,CACxE,MAAM,CAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC","sourcesContent":["import { Effect } from \"effect\";\n\n/**\n * Log levels for different operations\n */\nexport const logContractRead = (params: {\n address: string;\n functionName: string;\n chainId: number;\n}) => Effect.logDebug(\"Contract read\", params);\n\nexport const logContractWrite = (params: {\n address: string;\n functionName: string;\n chainId: number;\n hash?: string;\n}) => Effect.logInfo(\"Contract write\", params);\n\nexport const logTxLifecycle = (params: { hash: string; status: string; confirmations?: number }) =>\n Effect.logDebug(\"Transaction lifecycle\", params);\n\nexport const logEventReceived = (params: {\n eventName: string;\n address: string;\n blockNumber: bigint;\n}) => Effect.logDebug(\"Event received\", params);\n\nexport const logError = (params: { operation: string; error: unknown }) =>\n Effect.logError(\"Operation failed\", params);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/telemetry/tracer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../src/telemetry/tracer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\n\n/**\n * Wrap an effect with a span for tracing\n */\nexport const withSpan =\n (name: string, attributes?: Record<string, unknown>) =>\n <A, E, R>(effect: Effect.Effect<A, E, R>): Effect.Effect<A, E, R> =>\n Effect.withSpan(name, { attributes })(effect);\n\n/**\n * Common span names for RPC operations\n */\nexport const SpanNames = {\n BALANCE_CHECK: \"ew3.balance.check\",\n BALANCE_CHECK_TOKEN: \"ew3.balance.checkToken\",\n BALANCE_GET: \"ew3.balance.get\",\n BALANCE_GET_TOKEN: \"ew3.balance.getToken\",\n BALANCE_GET_TOKEN_BATCH: \"ew3.balance.getTokenBatch\",\n BALANCE_WATCH: \"ew3.balance.watch\",\n BALANCE_WATCH_TOKEN: \"ew3.balance.watchToken\",\n BLOCK_GET: \"ew3.block.get\",\n BLOCK_GET_BY_HASH: \"ew3.block.getByHash\",\n BLOCK_GET_NUMBER: \"ew3.block.getNumber\",\n BLOCK_GET_RANGE: \"ew3.block.getRange\",\n BLOCK_GET_TIMESTAMP: \"ew3.block.getTimestamp\",\n BLOCK_WAIT: \"ew3.block.wait\",\n BLOCK_WATCH: \"ew3.block.watch\",\n CONTRACT_ESTIMATE_GAS: \"ew3.contract.estimateGas\",\n CONTRACT_READ: \"ew3.contract.read\",\n CONTRACT_SIMULATE: \"ew3.contract.simulate\",\n CONTRACT_WRITE: \"ew3.contract.write\",\n CROSS_CHAIN_MULTICALL_ALL: \"ew3.crossChain.multicallAll\",\n CROSS_CHAIN_READ_ALL: \"ew3.crossChain.readAll\",\n CROSS_CHAIN_READ_SAME: \"ew3.crossChain.readSame\",\n DEPLOY_COMPUTE_ADDRESS: \"ew3.deploy.computeAddress\",\n DEPLOY_CONTRACT: \"ew3.deploy.contract\",\n DEPLOY_VERIFY: \"ew3.deploy.verify\",\n ENS_GET_ADDRESS: \"ew3.ens.getAddress\",\n ENS_GET_AVATAR: \"ew3.ens.getAvatar\",\n ENS_GET_NAME: \"ew3.ens.getName\",\n ENS_GET_RESOLVER: \"ew3.ens.getResolver\",\n ENS_GET_TEXT: \"ew3.ens.getText\",\n ERC721_APPROVE: \"ew3.erc721.approve\",\n ERC721_BALANCE_OF: \"ew3.erc721.balanceOf\",\n ERC721_FETCH_METADATA: \"ew3.erc721.fetchMetadata\",\n ERC721_GET_APPROVED: \"ew3.erc721.getApproved\",\n ERC721_IS_APPROVED_FOR_ALL: \"ew3.erc721.isApprovedForAll\",\n ERC721_NAME: \"ew3.erc721.name\",\n ERC721_OWNER_OF: \"ew3.erc721.ownerOf\",\n ERC721_SAFE_TRANSFER_FROM: \"ew3.erc721.safeTransferFrom\",\n ERC721_SET_APPROVAL_FOR_ALL: \"ew3.erc721.setApprovalForAll\",\n ERC721_SYMBOL: \"ew3.erc721.symbol\",\n ERC721_TOKEN_URI: \"ew3.erc721.tokenURI\",\n ERC721_TOTAL_SUPPLY: \"ew3.erc721.totalSupply\",\n ERC721_TRANSFER_FROM: \"ew3.erc721.transferFrom\",\n EVENT_BACKFILL: \"ew3.event.backfill\",\n EVENT_WATCH: \"ew3.event.watch\",\n GAS_ESTIMATE_FEES: \"ew3.gas.estimateFees\",\n GAS_ESTIMATE_GAS: \"ew3.gas.estimateGas\",\n GAS_GET_ALL_ESTIMATES: \"ew3.gas.getAllEstimates\",\n GAS_GET_BASE_FEE: \"ew3.gas.getBaseFee\",\n GAS_GET_MAX_PRIORITY_FEE: \"ew3.gas.getMaxPriorityFee\",\n GAS_SUPPORTS_EIP1559: \"ew3.gas.supportsEip1559\",\n MULTICALL: \"ew3.contract.multicall\",\n NONCE_CONFIRM: \"ew3.nonce.confirm\",\n NONCE_GET_CONFIRMED_COUNT: \"ew3.nonce.getConfirmedCount\",\n NONCE_GET_GAPS: \"ew3.nonce.getGaps\",\n NONCE_GET_NEXT: \"ew3.nonce.getNext\",\n NONCE_GET_PENDING_COUNT: \"ew3.nonce.getPendingCount\",\n NONCE_RELEASE: \"ew3.nonce.release\",\n NONCE_RESERVE: \"ew3.nonce.reserve\",\n NONCE_SYNC: \"ew3.nonce.sync\",\n SAFE_ENABLE_OFFCHAIN: \"ew3.safe.enableOffchainSigning\",\n\n // Safe Apps\n SAFE_GET_INFO: \"ew3.safe.getInfo\",\n SAFE_GET_OFFCHAIN_SIG: \"ew3.safe.getOffchainSignature\",\n SAFE_GET_TX: \"ew3.safe.getTransaction\",\n SAFE_POLL_OFFCHAIN_SIG: \"ew3.safe.pollOffchainSignature\",\n SAFE_SEND_TXS: \"ew3.safe.sendTransactions\",\n SAFE_SIGN_TYPED_DATA: \"ew3.safe.signTypedData\",\n SAFE_WAIT_RECEIPT: \"ew3.safe.waitForReceipt\",\n SIGNATURE_HASH_MESSAGE: \"ew3.signature.hashMessage\",\n SIGNATURE_HASH_TYPED_DATA: \"ew3.signature.hashTypedData\",\n SIGNATURE_JOIN: \"ew3.signature.join\",\n SIGNATURE_RECOVER_ADDRESS: \"ew3.signature.recoverAddress\",\n SIGNATURE_RECOVER_TYPED_DATA_ADDRESS: \"ew3.signature.recoverTypedDataAddress\",\n SIGNATURE_SPLIT: \"ew3.signature.split\",\n SIGNATURE_VERIFY_MESSAGE: \"ew3.signature.verifyMessage\",\n SIGNATURE_VERIFY_TYPED_DATA: \"ew3.signature.verifyTypedData\",\n SIMULATION_SIMULATE: \"ew3.simulation.simulate\",\n SIMULATION_SIMULATE_BUNDLE: \"ew3.simulation.simulateBundle\",\n SUBSCRIPTION_WATCH_BLOCKS: \"ew3.subscription.watchBlocks\",\n SUBSCRIPTION_WATCH_LOGS: \"ew3.subscription.watchLogs\",\n SUBSCRIPTION_WATCH_PENDING_TX: \"ew3.subscription.watchPendingTx\",\n TRANSFER_ESTIMATE: \"ew3.transfer.estimateGas\",\n TRANSFER_SEND: \"ew3.transfer.send\",\n TRANSFER_SEND_AND_WAIT: \"ew3.transfer.sendAndWait\",\n TX_GET_CONFIRMATIONS: \"ew3.tx.getConfirmations\",\n TX_TRACK: \"ew3.tx.track\",\n TX_WAIT: \"ew3.tx.wait\",\n WALLET_CONNECT: \"ew3.wallet.connect\",\n WALLET_SIGN_MESSAGE: \"ew3.wallet.signMessage\",\n WALLET_SIGN_TYPED_DATA: \"ew3.wallet.signTypedData\",\n} as const;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"addresses.js","sourceRoot":"","sources":["../../../src/testing-kit/_fixtures/addresses.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,4CAAqD,CAAC;AAClF,MAAM,CAAC,MAAM,cAAc,GAAG,4CAAqD,CAAC;AACpF,MAAM,CAAC,MAAM,YAAY,GACvB,oEAA6E,CAAC;AAChF,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC"}
1
+ {"version":3,"file":"addresses.js","sourceRoot":"","sources":["../../../src/testing-kit/_fixtures/addresses.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,4CAAqD,CAAC;AAClF,MAAM,CAAC,MAAM,cAAc,GAAG,4CAAqD,CAAC;AACpF,MAAM,CAAC,MAAM,YAAY,GACvB,oEAA6E,CAAC;AAChF,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,gBAAgB,GAAG,WAAW,CAAC","sourcesContent":["/**\n * Test addresses and constants for effect-evm test suite\n */\n\nimport { mainnet } from \"viem/chains\";\n\nexport const TEST_ADDRESS = \"0x1234567890123456789012345678901234567890\" as const;\nexport const TEST_ADDRESS_2 = \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\" as const;\nexport const TEST_TX_HASH =\n \"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\" as const;\nexport const TEST_CHAIN_ID = mainnet.id;\nexport const UNKNOWN_CHAIN_ID = 123_456_789;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"receipts.js","sourceRoot":"","sources":["../../../src/testing-kit/_fixtures/receipts.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS,EAAE,oEAAoE;IAC/E,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,IAAI;IACrB,iBAAiB,EAAE,MAAM;IACzB,iBAAiB,EAAE,WAAW;IAC9B,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,EAAE;IACR,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,SAAS;IACjB,EAAE,EAAE,YAAY;IAChB,eAAe,EAAE,YAAY;IAC7B,gBAAgB,EAAE,CAAC;IACnB,IAAI,EAAE,SAAS;CACsB,CAAC;AAaxC,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,YAAyC,EAAE,EACvB,EAAE,CAAC,CAAC;IACxB,GAAG,YAAY;IACf,GAAG,SAAS;CACb,CAAC,CAAC"}
1
+ {"version":3,"file":"receipts.js","sourceRoot":"","sources":["../../../src/testing-kit/_fixtures/receipts.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,SAAS,EAAE,oEAAoE;IAC/E,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,IAAI;IACrB,iBAAiB,EAAE,MAAM;IACzB,iBAAiB,EAAE,WAAW;IAC9B,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,MAAM;IACf,IAAI,EAAE,EAAE;IACR,SAAS,EAAE,MAAM;IACjB,MAAM,EAAE,SAAS;IACjB,EAAE,EAAE,YAAY;IAChB,eAAe,EAAE,YAAY;IAC7B,gBAAgB,EAAE,CAAC;IACnB,IAAI,EAAE,SAAS;CACsB,CAAC;AAaxC,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,YAAyC,EAAE,EACvB,EAAE,CAAC,CAAC;IACxB,GAAG,YAAY;IACf,GAAG,SAAS;CACb,CAAC,CAAC","sourcesContent":["/**\n * Transaction receipt fixtures for effect-evm test suite\n */\n\nimport type { TransactionReceipt } from \"viem\";\nimport { TEST_ADDRESS, TEST_TX_HASH } from \"./addresses.js\";\n\nexport const TEST_RECEIPT = {\n blockHash: \"0x1234567890123456789012345678901234567890123456789012345678901234\",\n blockNumber: 1000n,\n contractAddress: null,\n cumulativeGasUsed: 50000n,\n effectiveGasPrice: 1000000000n,\n from: TEST_ADDRESS,\n gasUsed: 50000n,\n logs: [],\n logsBloom: \"0x00\",\n status: \"success\",\n to: TEST_ADDRESS,\n transactionHash: TEST_TX_HASH,\n transactionIndex: 0,\n type: \"eip1559\",\n} as const satisfies TransactionReceipt;\n\n/**\n * Factory function to create test receipts with custom overrides\n *\n * @param overrides - Partial TransactionReceipt properties to override defaults\n * @returns A complete TransactionReceipt for testing\n *\n * @example\n * ```typescript\n * const receipt = makeTestReceipt({ status: \"reverted\", gasUsed: 100000n });\n * ```\n */\nexport const makeTestReceipt = (\n overrides: Partial<TransactionReceipt> = {}\n): TransactionReceipt => ({\n ...TEST_RECEIPT,\n ...overrides,\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/testing-kit/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/testing-kit/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Test assertion helpers for effect-evm\n *\n * Provides type-safe utilities for asserting on Effect types in tests.\n */\n\nimport type { Context } from \"effect\";\nimport { Cause, Effect, Either, Exit, Layer, Option } from \"effect\";\nimport { expect } from \"vitest\";\nimport { ClientNotFoundError, WalletNotConnectedError } from \"@/src/core/index.js\";\n\n/**\n * Assert an Exit is a failure with a specific tagged error\n *\n * @param exit - The Exit to assert on\n * @param expectedTag - The expected error tag\n *\n * @example\n * ```typescript\n * const exit = yield* Effect.exit(someEffect);\n * expectTaggedFailure(exit, \"ClientNotFoundError\");\n * ```\n */\nexport const expectTaggedFailure = <E extends { _tag: string }>(\n exit: Exit.Exit<unknown, E>,\n expectedTag: E[\"_tag\"]\n): void => {\n expect(Exit.isFailure(exit)).toBe(true);\n if (Exit.isFailure(exit)) {\n const error = Cause.failureOption(exit.cause);\n expect(Option.isSome(error)).toBe(true);\n if (Option.isSome(error)) {\n expect((error.value as { _tag: string })._tag).toBe(expectedTag);\n }\n }\n};\n\n/**\n * Type-safe assertion for Either.Left - returns the left value for further assertions\n *\n * @param either - The Either to assert on\n * @returns The left value for further assertions\n * @throws Error if Either is Right\n *\n * @example\n * ```typescript\n * const result = Either.left(new Error(\"boom\"));\n * const error = assertLeft(result);\n * expect(error.message).toBe(\"boom\");\n * ```\n */\nexport const assertLeft = <L, R>(either: Either.Either<R, L>): L => {\n expect(Either.isLeft(either)).toBe(true);\n if (!Either.isLeft(either)) {\n throw new Error(\"Expected Left\");\n }\n return either.left;\n};\n\n/**\n * Type-safe assertion for Either.Right - returns the right value for further assertions\n *\n * @param either - The Either to assert on\n * @returns The right value for further assertions\n * @throws Error if Either is Left\n *\n * @example\n * ```typescript\n * const result = Either.right(42);\n * const value = assertRight(result);\n * expect(value).toBe(42);\n * ```\n */\nexport const assertRight = <L, R>(either: Either.Either<R, L>): R => {\n expect(Either.isRight(either)).toBe(true);\n if (!Either.isRight(either)) {\n throw new Error(\"Expected Right\");\n }\n return either.right;\n};\n\n/**\n * Creates a chainId-gated getter for mock services.\n * Returns the value if chainId matches, otherwise fails with ClientNotFoundError.\n *\n * @param supportedChainId - The chainId this mock supports\n * @param getValue - Function that returns the value when chainId matches\n * @returns A function that takes a chainId and returns an Effect\n *\n * @example\n * ```typescript\n * const mockClient = { chain: { id: 1 }, ... };\n * const get = makeChainIdGetter(1, () => mockClient);\n * // get(1) => Effect.succeed(mockClient)\n * // get(2) => Effect.fail(ClientNotFoundError)\n * ```\n */\nexport const makeChainIdGetter =\n <A>(supportedChainId: number, getValue: () => A) =>\n (chainId: number) =>\n chainId === supportedChainId\n ? Effect.succeed(getValue())\n : Effect.fail(\n new ClientNotFoundError({\n chainId,\n message: `No client configured for chain ID ${chainId}`,\n })\n );\n\n/**\n * Generic chain validation helper that accepts a custom error factory.\n * This is the base implementation used by withChainIdCheck and withWalletChainIdCheck.\n *\n * @param supportedChainId - The chainId this mock supports\n * @param errorFactory - Function to create the error when chainId doesn't match\n * @param fn - Function to call if chainId matches\n * @returns A wrapped function that validates chainId first\n *\n * @example\n * ```typescript\n * const withCustomCheck = <P extends { chainId: number }, A, E>(\n * supportedChainId: number,\n * fn: (params: P) => Effect.Effect<A, E>\n * ) => withChainCheck(supportedChainId, (chainId) => new CustomError({ chainId }), fn);\n * ```\n */\nexport const withChainCheck =\n <P extends { chainId: number }, A, E, Err>(\n supportedChainId: number,\n errorFactory: (chainId: number, message: string) => Err,\n fn: (params: P) => Effect.Effect<A, E>\n ): ((params: P) => Effect.Effect<A, E | Err>) =>\n (params) =>\n params.chainId === supportedChainId\n ? fn(params)\n : Effect.fail(\n errorFactory(\n params.chainId,\n `Chain ${params.chainId} not supported. Only chain ${supportedChainId} is configured.`\n )\n );\n\n/**\n * Wraps a function that takes params with chainId to validate chain support first.\n * If chainId matches, calls the function; otherwise fails with ClientNotFoundError.\n *\n * @param supportedChainId - The chainId this mock supports\n * @param fn - Function to call if chainId matches\n * @returns A wrapped function that validates chainId first\n *\n * @example\n * ```typescript\n * const getBlock = (params: { chainId: number }) => Effect.succeed(mockBlock);\n * const wrapped = withChainIdCheck(1, getBlock);\n * // wrapped({ chainId: 1 }) => Effect.succeed(mockBlock)\n * // wrapped({ chainId: 2 }) => Effect.fail(ClientNotFoundError)\n * ```\n */\nexport const withChainIdCheck = <P extends { chainId: number }, A, E>(\n supportedChainId: number,\n fn: (params: P) => Effect.Effect<A, E>\n): ((params: P) => Effect.Effect<A, E | ClientNotFoundError>) =>\n withChainCheck(\n supportedChainId,\n (chainId) =>\n new ClientNotFoundError({\n chainId,\n message: `No client configured for chain ID ${chainId}`,\n }),\n fn\n );\n\n/**\n * Creates a chainId-gated getter for mock wallet services.\n * Returns the value if chainId matches, otherwise fails with WalletNotConnectedError.\n *\n * @param supportedChainId - The chainId this mock supports\n * @param getValue - Function that returns the value when chainId matches\n * @returns A function that takes a chainId and returns an Effect\n *\n * @example\n * ```typescript\n * const mockWallet = { account: { address: \"0x...\" }, ... };\n * const get = makeWalletChainIdGetter(1, () => mockWallet);\n * // get(1) => Effect.succeed(mockWallet)\n * // get(2) => Effect.fail(WalletNotConnectedError)\n * ```\n */\nexport const makeWalletChainIdGetter =\n <A>(supportedChainId: number, getValue: () => A) =>\n (chainId: number) =>\n chainId === supportedChainId\n ? Effect.succeed(getValue())\n : Effect.fail(\n new WalletNotConnectedError({\n chainId,\n message: `No wallet client connected for chain ID ${chainId}`,\n })\n );\n\n/**\n * Wraps a function that takes params with chainId to validate wallet chain support first.\n * If chainId matches, calls the function; otherwise fails with WalletNotConnectedError.\n *\n * @param supportedChainId - The chainId this mock wallet supports\n * @param fn - Function to call if chainId matches\n * @returns A wrapped function that validates chainId first\n *\n * @example\n * ```typescript\n * const writeContract = (params: { chainId: number, ... }) => Effect.succeed(mockHash);\n * const wrapped = withWalletChainIdCheck(1, writeContract);\n * // wrapped({ chainId: 1, ... }) => Effect.succeed(mockHash)\n * // wrapped({ chainId: 2, ... }) => Effect.fail(WalletNotConnectedError)\n * ```\n */\nexport const withWalletChainIdCheck = <P extends { chainId: number }, A, E>(\n supportedChainId: number,\n fn: (params: P) => Effect.Effect<A, E>\n): ((params: P) => Effect.Effect<A, E | WalletNotConnectedError>) =>\n withChainCheck(\n supportedChainId,\n (chainId) =>\n new WalletNotConnectedError({\n chainId,\n message: `No wallet client connected for chain ID ${chainId}`,\n }),\n fn\n );\n\n/**\n * Generic factory for creating mock service layers.\n * Eliminates boilerplate by abstracting the common pattern of:\n * 1. Merging default config with overrides\n * 2. Mapping merged config to service shape\n * 3. Creating a Layer.succeed\n *\n * @param ServiceTag - The Effect Context.Tag for the service\n * @param defaults - Default configuration object\n * @param config - Partial configuration to override defaults\n * @param mapToShape - Function that maps merged config to the service shape\n * @returns A Layer providing the service\n *\n * @example\n * ```typescript\n * // In a mock service file:\n * export const makeMockGasServiceLayer = (\n * config: MockGasServiceConfig = {},\n * supportedChainId = 1\n * ): Layer.Layer<GasService> => {\n * const defaults = {\n * estimateFees: () => Effect.succeed(DEFAULT_FEE_ESTIMATE),\n * getBaseFee: () => Effect.succeed(30000000000n),\n * // ... other defaults\n * };\n *\n * return makeMockServiceLayer(\n * GasService,\n * defaults,\n * config,\n * (merged) => ({\n * estimateFees: withChainIdCheck(supportedChainId, merged.estimateFees),\n * getBaseFee: withChainIdCheck(supportedChainId, merged.getBaseFee),\n * // ... other methods\n * })\n * );\n * };\n * ```\n */\nexport const makeMockServiceLayer = <I, S, C extends Record<string, unknown>>(\n ServiceTag: Context.Tag<I, S>,\n defaults: C,\n config: Partial<C>,\n mapToShape: (merged: C) => S\n): Layer.Layer<I> => {\n const merged = { ...defaults, ...config } as C;\n const serviceShape = mapToShape(merged);\n return Layer.succeed(ServiceTag, ServiceTag.of(serviceShape));\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing-kit/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,YAAY,EACZ,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGxE,OAAO,EACL,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAE7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAE9E,OAAO,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAElF,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing-kit/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EACL,YAAY,EACZ,cAAc,EACd,aAAa,EACb,YAAY,EACZ,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGxE,OAAO,EACL,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAExE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAE7E,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAGpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAE9E,OAAO,EAAE,gCAAgC,EAAE,MAAM,gCAAgC,CAAC;AAElF,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAE1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["/**\n * Testing Kit for effect-evm\n *\n * This module exports mock builders and test utilities for downstream\n * consumers to easily test code that depends on effect-evm services.\n *\n * @example\n * ```typescript\n * import { makeEffectEvmTestLayer } from \"effect-evm/testing-kit\";\n *\n * const testLayer = makeEffectEvmTestLayer({\n * publicClient: {\n * readContract: async () => 1000n,\n * },\n * });\n * ```\n */\n\n// Fixtures\nexport {\n TEST_ADDRESS,\n TEST_ADDRESS_2,\n TEST_CHAIN_ID,\n TEST_TX_HASH,\n UNKNOWN_CHAIN_ID,\n} from \"./_fixtures/addresses.js\";\nexport { makeTestReceipt, TEST_RECEIPT } from \"./_fixtures/receipts.js\";\n\n// Test helpers\nexport {\n assertLeft,\n assertRight,\n expectTaggedFailure,\n makeChainIdGetter,\n makeWalletChainIdGetter,\n withChainIdCheck,\n withWalletChainIdCheck,\n} from \"./helpers.js\";\n\nexport type { MockBalanceServiceConfig } from \"./mock-balance-service.js\";\nexport { makeMockBalanceServiceLayer } from \"./mock-balance-service.js\";\nexport type { MockBlockServiceConfig } from \"./mock-block-service.js\";\nexport { makeMockBlockServiceLayer } from \"./mock-block-service.js\";\nexport type { MockCrossChainReaderConfig } from \"./mock-cross-chain-reader.js\";\nexport { makeMockCrossChainReaderLayer } from \"./mock-cross-chain-reader.js\";\nexport type { MockDeployServiceConfig } from \"./mock-deploy-service.js\";\nexport { makeMockDeployServiceLayer } from \"./mock-deploy-service.js\";\nexport type { MockErc721ServiceConfig } from \"./mock-erc721-service.js\";\nexport { makeMockErc721ServiceLayer } from \"./mock-erc721-service.js\";\nexport type { MockGasServiceConfig } from \"./mock-gas-service.js\";\nexport { makeMockGasServiceLayer } from \"./mock-gas-service.js\";\nexport type { MockNonceServiceConfig } from \"./mock-nonce-service.js\";\nexport { makeMockNonceServiceLayer } from \"./mock-nonce-service.js\";\n// Mock layer builders\nexport type { MockPublicClientConfig } from \"./mock-public-client.js\";\nexport { makeMockPublicClientLayer } from \"./mock-public-client.js\";\nexport type { MockSignatureServiceConfig } from \"./mock-signature-service.js\";\nexport { makeMockSignatureServiceLayer } from \"./mock-signature-service.js\";\nexport type { MockSimulationServiceConfig } from \"./mock-simulation-service.js\";\nexport { makeMockSimulationServiceLayer } from \"./mock-simulation-service.js\";\nexport type { MockSubscriptionServiceConfig } from \"./mock-subscription-service.js\";\nexport { makeMockSubscriptionServiceLayer } from \"./mock-subscription-service.js\";\nexport type { MockTransferServiceConfig } from \"./mock-transfer-service.js\";\nexport { makeMockTransferServiceLayer } from \"./mock-transfer-service.js\";\nexport type { MockWalletClientConfig } from \"./mock-wallet-client.js\";\nexport { makeMockWalletClientLayer } from \"./mock-wallet-client.js\";\nexport type { MockWalletProviderConfig } from \"./mock-wallet-provider.js\";\nexport { makeMockWalletProvider } from \"./mock-wallet-provider.js\";\n// Test layer composer\nexport type { TestLayerConfig } from \"./test-layer.js\";\nexport { makeEffectEvmTestLayer } from \"./test-layer.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-balance-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-balance-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGxC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAOxD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAsDtE,MAAM,aAAa,GAAuC;IACxD,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;IACtD,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;IAClD,gBAAgB,EAAE,CAAC,MAAqC,EAAE,EAAE,CAC1D,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO;QACP,OAAO,EAAE,WAAW;QACpB,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,MAAM;KACf,CAAC,CAAC,CACJ;IACH,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,yBAAyB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IACrD,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACrE,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;CAClE,CAAC;AA+BF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,SAAmC,EAAE,EACrC,gBAAgB,GAAG,CAAC,EACS,EAAE,CAC/B,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvE,UAAU,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC;IACjE,eAAe,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,eAAe,CAAC;IAC3E,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;IAC7E,oBAAoB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,oBAAoB,CAAC;IACrF,yBAAyB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,yBAAyB,CAAC;IAC/F,YAAY,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC;IACrE,iBAAiB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,CAAC;CAChF,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"mock-balance-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-balance-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGxC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAOxD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAsDtE,MAAM,aAAa,GAAuC;IACxD,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;IACtD,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;IAClD,gBAAgB,EAAE,CAAC,MAAqC,EAAE,EAAE,CAC1D,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO;QACP,OAAO,EAAE,WAAW;QACpB,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,MAAM;KACf,CAAC,CAAC,CACJ;IACH,oBAAoB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,yBAAyB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IACrD,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACrE,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;CAClE,CAAC;AA+BF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,SAAmC,EAAE,EACrC,gBAAgB,GAAG,CAAC,EACS,EAAE,CAC/B,oBAAoB,CAAC,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACvE,UAAU,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC;IACjE,eAAe,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,eAAe,CAAC;IAC3E,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;IAC7E,oBAAoB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,oBAAoB,CAAC;IACrF,yBAAyB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,yBAAyB,CAAC;IAC/F,YAAY,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC;IACrE,iBAAiB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,CAAC;CAChF,CAAC,CAAC,CAAC","sourcesContent":["import type { Layer } from \"effect\";\nimport { Effect, Stream } from \"effect\";\nimport type { Address } from \"viem\";\nimport type { TokenBalance } from \"@/src/balance/index.js\";\nimport { BalanceService } from \"@/src/balance/index.js\";\nimport type {\n ClientNotFoundError,\n ContractReadError,\n MulticallError,\n TransportError,\n} from \"@/src/core/index.js\";\nimport { makeMockServiceLayer, withChainIdCheck } from \"./helpers.js\";\n\n/**\n * Configuration for the mock BalanceService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockBalanceServiceConfig = {\n getBalance?: (params: {\n chainId: number;\n address: Address;\n blockTag?: \"latest\" | \"pending\";\n }) => Effect.Effect<bigint, ClientNotFoundError | TransportError>;\n\n getTokenBalance?: (params: {\n chainId: number;\n address: Address;\n tokenAddress: Address;\n }) => Effect.Effect<bigint, ContractReadError | ClientNotFoundError>;\n\n getTokenBalances?: (params: {\n chainId: number;\n address: Address;\n tokenAddresses: Address[];\n }) => Effect.Effect<TokenBalance[], ClientNotFoundError | MulticallError>;\n\n watchBalance?: (params: {\n chainId: number;\n address: Address;\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<bigint, unknown>, ClientNotFoundError>;\n\n watchTokenBalance?: (params: {\n chainId: number;\n address: Address;\n tokenAddress: Address;\n pollingInterval?: number;\n }) => Effect.Effect<Stream.Stream<bigint, unknown>, ClientNotFoundError>;\n\n hasSufficientBalance?: (params: {\n chainId: number;\n address: Address;\n required: bigint;\n }) => Effect.Effect<boolean, ClientNotFoundError | TransportError>;\n\n hasSufficientTokenBalance?: (params: {\n chainId: number;\n address: Address;\n tokenAddress: Address;\n required: bigint;\n }) => Effect.Effect<boolean, ContractReadError | ClientNotFoundError>;\n};\n\nconst defaultConfig: Required<MockBalanceServiceConfig> = {\n getBalance: () => Effect.succeed(1000000000000000000n), // 1 ETH\n getTokenBalance: () => Effect.succeed(1000000000n), // typical token balance\n getTokenBalances: (params: { tokenAddresses: Address[] }) =>\n Effect.succeed(\n params.tokenAddresses.map((address) => ({\n address,\n balance: 1000000000n,\n decimals: 18,\n name: \"Mock Token\",\n symbol: \"MOCK\",\n }))\n ),\n hasSufficientBalance: () => Effect.succeed(true),\n hasSufficientTokenBalance: () => Effect.succeed(true),\n watchBalance: () => Effect.succeed(Stream.make(1000000000000000000n)),\n watchTokenBalance: () => Effect.succeed(Stream.make(1000000000n)),\n};\n\n/**\n * Creates a mock BalanceService 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 = makeMockBalanceServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockBalanceServiceLayer({\n * getBalance: () => Effect.succeed(5000000000000000000n), // 5 ETH\n * getTokenBalance: () => Effect.succeed(1000000000000n),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const balanceService = yield* BalanceService;\n * const balance = yield* balanceService.getBalance({\n * chainId: mainnet.id,\n * address: \"0x...\",\n * });\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockBalanceServiceLayer = (\n config: MockBalanceServiceConfig = {},\n supportedChainId = 1\n): Layer.Layer<BalanceService> =>\n makeMockServiceLayer(BalanceService, defaultConfig, config, (merged) => ({\n getBalance: withChainIdCheck(supportedChainId, merged.getBalance),\n getTokenBalance: withChainIdCheck(supportedChainId, merged.getTokenBalance),\n getTokenBalances: withChainIdCheck(supportedChainId, merged.getTokenBalances),\n hasSufficientBalance: withChainIdCheck(supportedChainId, merged.hasSufficientBalance),\n hasSufficientTokenBalance: withChainIdCheck(supportedChainId, merged.hasSufficientTokenBalance),\n watchBalance: withChainIdCheck(supportedChainId, merged.watchBalance),\n watchTokenBalance: withChainIdCheck(supportedChainId, merged.watchTokenBalance),\n }));\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-block-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-block-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock-block-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-block-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Layer } from \"effect\";\nimport { Effect, Stream } from \"effect\";\nimport type { Block, Hash } from \"viem\";\nimport type { BlockNotFoundError, BlockTimeoutError } from \"@/src/block/index.js\";\nimport { BlockService } from \"@/src/block/index.js\";\nimport type { ClientNotFoundError, TransportError } from \"@/src/core/index.js\";\nimport { makeMockServiceLayer, withChainIdCheck } from \"./helpers.js\";\n\nconst DEFAULT_HASH = \"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\" as Hash;\n\nconst DEFAULT_BLOCK: Block = {\n baseFeePerGas: 30000000000n,\n blobGasUsed: 0n,\n difficulty: 0n,\n excessBlobGas: 0n,\n extraData: \"0x\",\n gasLimit: 30000000n,\n gasUsed: 12000000n,\n hash: DEFAULT_HASH,\n logsBloom: \"0x00\",\n miner: \"0x0000000000000000000000000000000000000000\",\n mixHash: DEFAULT_HASH,\n nonce: \"0x0000000000000000\",\n number: 1000n,\n parentHash: DEFAULT_HASH,\n receiptsRoot: DEFAULT_HASH,\n sealFields: [],\n sha3Uncles: DEFAULT_HASH,\n size: 1024n,\n stateRoot: DEFAULT_HASH,\n timestamp: 1700000000n,\n totalDifficulty: 0n,\n transactions: [],\n transactionsRoot: DEFAULT_HASH,\n uncles: [],\n};\n\n/**\n * Configuration for the mock BlockService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockBlockServiceConfig = {\n getBlock?: (params: {\n chainId: number;\n blockNumber?: bigint;\n blockTag?: \"latest\" | \"pending\" | \"earliest\" | \"safe\" | \"finalized\";\n includeTransactions?: boolean;\n }) => Effect.Effect<Block, BlockNotFoundError | ClientNotFoundError>;\n\n getBlockByHash?: (params: {\n chainId: number;\n hash: Hash;\n includeTransactions?: boolean;\n }) => Effect.Effect<Block, BlockNotFoundError | ClientNotFoundError>;\n\n getBlockNumber?: (params: {\n chainId: number;\n }) => Effect.Effect<bigint, ClientNotFoundError | TransportError>;\n\n watchBlocks?: (params: {\n chainId: number;\n pollingInterval?: number;\n includeTransactions?: boolean;\n }) => Effect.Effect<Stream.Stream<Block, unknown>, ClientNotFoundError>;\n\n waitForBlock?: (params: {\n chainId: number;\n blockNumber: bigint;\n timeout?: number;\n }) => Effect.Effect<\n Block,\n BlockNotFoundError | BlockTimeoutError | ClientNotFoundError | TransportError\n >;\n\n getBlocks?: (params: {\n chainId: number;\n fromBlock: bigint;\n toBlock: bigint;\n includeTransactions?: boolean;\n }) => Effect.Effect<Block[], ClientNotFoundError | BlockNotFoundError>;\n\n getBlockTimestamp?: (params: {\n chainId: number;\n blockNumber?: bigint;\n }) => Effect.Effect<bigint, ClientNotFoundError | BlockNotFoundError>;\n};\n\nconst defaultConfig: Required<MockBlockServiceConfig> = {\n getBlock: () => Effect.succeed(DEFAULT_BLOCK),\n getBlockByHash: () => Effect.succeed(DEFAULT_BLOCK),\n getBlockNumber: () => Effect.succeed(1000n),\n getBlocks: (params: { fromBlock: bigint; toBlock: bigint }) => {\n const count = Number(params.toBlock - params.fromBlock) + 1;\n return Effect.succeed(\n Array.from({ length: count }, (_, i) => ({\n ...DEFAULT_BLOCK,\n number: params.fromBlock + BigInt(i),\n }))\n );\n },\n getBlockTimestamp: () => Effect.succeed(1700000000n),\n waitForBlock: () => Effect.succeed(DEFAULT_BLOCK),\n watchBlocks: () => Effect.succeed(Stream.make(DEFAULT_BLOCK)),\n};\n\n/**\n * Creates a mock BlockService 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 = makeMockBlockServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockBlockServiceLayer({\n * getBlockNumber: () => Effect.succeed(2000n),\n * getBlock: () => Effect.succeed({ ...customBlock }),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const blockService = yield* BlockService;\n * const blockNumber = yield* blockService.getBlockNumber({ chainId: mainnet.id });\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockBlockServiceLayer = (\n config: MockBlockServiceConfig = {},\n supportedChainId = 1\n): Layer.Layer<BlockService> =>\n makeMockServiceLayer(BlockService, defaultConfig, config, (merged) => ({\n getBlock: withChainIdCheck(supportedChainId, merged.getBlock),\n getBlockByHash: withChainIdCheck(supportedChainId, merged.getBlockByHash),\n getBlockNumber: withChainIdCheck(supportedChainId, merged.getBlockNumber),\n getBlocks: withChainIdCheck(supportedChainId, merged.getBlocks),\n getBlockTimestamp: withChainIdCheck(supportedChainId, merged.getBlockTimestamp),\n waitForBlock: withChainIdCheck(supportedChainId, merged.waitForBlock),\n watchBlocks: withChainIdCheck(supportedChainId, merged.watchBlocks),\n }));\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-cross-chain-reader.js","sourceRoot":"","sources":["../../src/testing-kit/mock-cross-chain-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock-cross-chain-reader.js","sourceRoot":"","sources":["../../src/testing-kit/mock-cross-chain-reader.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect, Layer } from \"effect\";\nimport type {\n ChainMulticallBatch,\n CrossChainCall,\n CrossChainReader,\n CrossChainReaderShape,\n ReadSameParams,\n} from \"@/src/contract/index.js\";\nimport { CrossChainReader as CrossChainReaderTag } from \"@/src/contract/index.js\";\nimport type { ClientNotFoundError, ContractReadError, MulticallError } from \"@/src/core/index.js\";\nimport { ClientNotFoundError as ClientNotFoundErrorClass } from \"@/src/core/index.js\";\nimport type {\n Abi,\n ContractFunctionName,\n ContractFunctionReturnType,\n MulticallResult,\n} from \"@/src/types/index.js\";\n\n/**\n * Configuration for the mock CrossChainReader\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockCrossChainReaderConfig = {\n readAll?: <const TCalls extends readonly CrossChainCall[]>(\n calls: TCalls\n ) => Effect.Effect<Map<number, unknown[]>, ContractReadError | ClientNotFoundError>;\n\n readSame?: <TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">>(\n params: ReadSameParams<TAbi, TFunctionName>\n ) => Effect.Effect<\n Map<number, ContractFunctionReturnType<TAbi, \"pure\" | \"view\", TFunctionName>>,\n ContractReadError | ClientNotFoundError\n >;\n\n multicallAll?: <const TBatches extends readonly ChainMulticallBatch[]>(\n batches: TBatches\n ) => Effect.Effect<\n Map<number, readonly MulticallResult<unknown>[]>,\n MulticallError | ClientNotFoundError\n >;\n};\n\n/**\n * Creates a mock CrossChainReader layer for testing\n *\n * @param config - Optional configuration to override default mock behaviors\n * @param supportedChainIds - The chainIds this mock supports (default: [1])\n *\n * @example\n * ```typescript\n * // Basic usage with defaults\n * const layer = makeMockCrossChainReaderLayer();\n *\n * // Override specific methods\n * const layer = makeMockCrossChainReaderLayer({\n * readSame: (params) => {\n * const resultMap = new Map();\n * for (const chainId of params.chainIds) {\n * resultMap.set(chainId, 1000n);\n * }\n * return Effect.succeed(resultMap);\n * },\n * }, [1, 137, 42161]);\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const crossChainReader = yield* CrossChainReader;\n * const results = yield* crossChainReader.readSame({\n * chainIds: [1, 137],\n * address: tokenAddr,\n * abi: ERC20_ABI,\n * functionName: \"balanceOf\",\n * args: [userAddr],\n * });\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockCrossChainReaderLayer = (\n config: MockCrossChainReaderConfig = {},\n supportedChainIds: readonly number[] = [1]\n): Layer.Layer<CrossChainReader> => {\n const readAll =\n config.readAll ??\n (<const TCalls extends readonly CrossChainCall[]>(calls: TCalls) => {\n const resultMap = new Map<number, unknown[]>();\n const chainIds = new Set(calls.map((c) => c.chainId));\n\n for (const chainId of chainIds) {\n if (!supportedChainIds.includes(chainId)) {\n return Effect.fail(\n new ClientNotFoundErrorClass({\n chainId,\n message: `No client configured for chain ID ${chainId}`,\n })\n );\n }\n }\n\n for (const chainId of chainIds) {\n const chainCalls = calls.filter((c) => c.chainId === chainId);\n resultMap.set(\n chainId,\n chainCalls.map(() => 0n)\n );\n }\n\n return Effect.succeed(resultMap);\n });\n\n const readSame =\n config.readSame ??\n (<TAbi extends Abi, TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">>(\n params: ReadSameParams<TAbi, TFunctionName>\n ) => {\n const resultMap = new Map<\n number,\n ContractFunctionReturnType<TAbi, \"pure\" | \"view\", TFunctionName>\n >();\n\n for (const chainId of params.chainIds) {\n if (!supportedChainIds.includes(chainId)) {\n return Effect.fail(\n new ClientNotFoundErrorClass({\n chainId,\n message: `No client configured for chain ID ${chainId}`,\n })\n );\n }\n }\n\n for (const chainId of params.chainIds) {\n resultMap.set(\n chainId,\n 0n as ContractFunctionReturnType<TAbi, \"pure\" | \"view\", TFunctionName>\n );\n }\n\n return Effect.succeed(resultMap);\n });\n\n const multicallAll =\n config.multicallAll ??\n (<const TBatches extends readonly ChainMulticallBatch[]>(batches: TBatches) => {\n const resultMap = new Map<number, readonly MulticallResult<unknown>[]>();\n\n for (const batch of batches) {\n if (!supportedChainIds.includes(batch.chainId)) {\n return Effect.fail(\n new ClientNotFoundErrorClass({\n chainId: batch.chainId,\n message: `No client configured for chain ID ${batch.chainId}`,\n })\n );\n }\n }\n\n for (const batch of batches) {\n resultMap.set(\n batch.chainId,\n batch.calls.map(() => ({\n result: 0n,\n status: \"success\" as const,\n }))\n );\n }\n\n return Effect.succeed(resultMap);\n });\n\n const mockCrossChainReader: CrossChainReaderShape = {\n multicallAll,\n readAll,\n readSame,\n };\n\n return Layer.succeed(CrossChainReaderTag, CrossChainReaderTag.of(mockCrossChainReader));\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-deploy-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-deploy-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAiDtE,MAAM,eAAe,GAAG,4CAAuD,CAAC;AAChF,MAAM,YAAY,GAAG,oEAA4E,CAAC;AAClG,MAAM,gBAAgB,GACpB,wEAA+E,CAAC;AAElF,MAAM,eAAe,GAAuB;IAC1C,SAAS,EAAE,YAAY;IACvB,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,eAAe;IAChC,iBAAiB,EAAE,UAAU;IAC7B,iBAAiB,EAAE,WAAW;IAC9B,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,EAAE;IACR,SAAS,EAAE,MAAiB;IAC5B,MAAM,EAAE,SAAS;IACjB,EAAE,EAAE,IAAI;IACR,eAAe,EAAE,YAAY;IAC7B,gBAAgB,EAAE,CAAC;IACnB,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF,MAAM,aAAa,GAAsC;IACvD,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;IACrD,MAAM,EAAE,GAAG,EAAE,CACX,MAAM,CAAC,OAAO,CAAC;QACb,OAAO,EAAE,eAAe;QACxB,gBAAgB,EAAE,gBAAgB;QAClC,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,eAAe;KACzB,CAAC;IACJ,cAAc,EAAE,GAAG,EAAE,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;YAC5B,OAAO,EAAE,eAAe;YACxB,gBAAgB,EAAE,gBAAgB;YAClC,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC,CAAC;IACJ,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5C,sBAAsB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;CACnD,CAAC;AA8BF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,SAAkC,EAAE,EACpC,gBAAgB,GAAG,CAAC,EACQ,EAAE,CAC9B,oBAAoB,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtE,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;IAEzD,MAAM,EAAE,gBAAgB,CACtB,gBAAgB,EAChB,MAAM,CAAC,MAAM,CAC6B;IAE5C,cAAc,EAAE,gBAAgB,CAC9B,gBAAgB,EAChB,MAAM,CAAC,cAAc,CAC6B;IACpD,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;IAC7E,sBAAsB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,sBAAsB,CAAC;CAC1F,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"mock-deploy-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-deploy-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAiDtE,MAAM,eAAe,GAAG,4CAAuD,CAAC;AAChF,MAAM,YAAY,GAAG,oEAA4E,CAAC;AAClG,MAAM,gBAAgB,GACpB,wEAA+E,CAAC;AAElF,MAAM,eAAe,GAAuB;IAC1C,SAAS,EAAE,YAAY;IACvB,WAAW,EAAE,KAAK;IAClB,eAAe,EAAE,eAAe;IAChC,iBAAiB,EAAE,UAAU;IAC7B,iBAAiB,EAAE,WAAW;IAC9B,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,EAAE;IACR,SAAS,EAAE,MAAiB;IAC5B,MAAM,EAAE,SAAS;IACjB,EAAE,EAAE,IAAI;IACR,eAAe,EAAE,YAAY;IAC7B,gBAAgB,EAAE,CAAC;IACnB,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF,MAAM,aAAa,GAAsC;IACvD,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;IACrD,MAAM,EAAE,GAAG,EAAE,CACX,MAAM,CAAC,OAAO,CAAC;QACb,OAAO,EAAE,eAAe;QACxB,gBAAgB,EAAE,gBAAgB;QAClC,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,eAAe;KACzB,CAAC;IACJ,cAAc,EAAE,GAAG,EAAE,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,eAAe,CAAC,IAAI,CAAU,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;YAC5B,OAAO,EAAE,eAAe;YACxB,gBAAgB,EAAE,gBAAgB;YAClC,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,eAAe;SACzB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC,CAAC;IACJ,gBAAgB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAC5C,sBAAsB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;CACnD,CAAC;AA8BF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,SAAkC,EAAE,EACpC,gBAAgB,GAAG,CAAC,EACQ,EAAE,CAC9B,oBAAoB,CAAC,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtE,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC;IAEzD,MAAM,EAAE,gBAAgB,CACtB,gBAAgB,EAChB,MAAM,CAAC,MAAM,CAC6B;IAE5C,cAAc,EAAE,gBAAgB,CAC9B,gBAAgB,EAChB,MAAM,CAAC,cAAc,CAC6B;IACpD,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;IAC7E,sBAAsB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,sBAAsB,CAAC;CAC1F,CAAC,CAAC,CAAC","sourcesContent":["import type { Layer } from \"effect\";\nimport { Effect, SubscriptionRef } from \"effect\";\nimport type { Abi, Address, ContractConstructorArgs, Hash, Hex, TransactionReceipt } from \"viem\";\nimport { MIN_TX_GAS } from \"@/src/constants/index.js\";\nimport type { DeployResult, DeployServiceShape } from \"@/src/deploy/index.js\";\nimport { DeployService } from \"@/src/deploy/index.js\";\nimport type { TxState } from \"@/src/tx/index.js\";\nimport { makeMockServiceLayer, withChainIdCheck } from \"./helpers.js\";\n\ntype DeployArgsField<TAbi extends Abi> =\n readonly [] extends ContractConstructorArgs<TAbi>\n ? { args?: ContractConstructorArgs<TAbi> | undefined }\n : { args: ContractConstructorArgs<TAbi> };\n\n/**\n * Configuration for the mock DeployService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockDeployServiceConfig = {\n deploy?: <TAbi extends Abi>(\n params: {\n chainId: number;\n abi: TAbi;\n bytecode: Hex;\n value?: bigint;\n account?: Address;\n gas?: bigint;\n } & DeployArgsField<TAbi>\n ) => Effect.Effect<DeployResult>;\n\n deployAndTrack?: <TAbi extends Abi>(\n params: {\n chainId: number;\n abi: TAbi;\n bytecode: Hex;\n value?: bigint;\n account?: Address;\n } & DeployArgsField<TAbi>\n ) => Effect.Effect<{\n stateRef: SubscriptionRef.SubscriptionRef<TxState>;\n result: Effect.Effect<DeployResult>;\n }>;\n\n computeAddress?: (params: { from: Address; nonce: bigint }) => Effect.Effect<Address>;\n\n verifyDeployment?: (params: { chainId: number; address: Address }) => Effect.Effect<boolean>;\n\n verifyDeploymentStrict?: (params: {\n chainId: number;\n address: Address;\n expectedBytecode: Hex;\n }) => Effect.Effect<boolean>;\n};\n\nconst DEFAULT_ADDRESS = \"0x1234567890123456789012345678901234567890\" as Address;\nconst DEFAULT_HASH = \"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\" as Hash;\nconst DEFAULT_BYTECODE =\n \"0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063\" as Hex;\n\nconst DEFAULT_RECEIPT: TransactionReceipt = {\n blockHash: DEFAULT_HASH,\n blockNumber: 1000n,\n contractAddress: DEFAULT_ADDRESS,\n cumulativeGasUsed: MIN_TX_GAS,\n effectiveGasPrice: 1000000000n,\n from: DEFAULT_ADDRESS,\n gasUsed: MIN_TX_GAS,\n logs: [],\n logsBloom: \"0x00\" as Address,\n status: \"success\",\n to: null,\n transactionHash: DEFAULT_HASH,\n transactionIndex: 0,\n type: \"eip1559\",\n};\n\nconst defaultConfig: Required<MockDeployServiceConfig> = {\n computeAddress: () => Effect.succeed(DEFAULT_ADDRESS),\n deploy: () =>\n Effect.succeed({\n address: DEFAULT_ADDRESS,\n deployedBytecode: DEFAULT_BYTECODE,\n hash: DEFAULT_HASH,\n receipt: DEFAULT_RECEIPT,\n }),\n deployAndTrack: () =>\n Effect.gen(function* () {\n const stateRef = yield* SubscriptionRef.make<TxState>({ status: \"idle\" });\n const result = Effect.succeed({\n address: DEFAULT_ADDRESS,\n deployedBytecode: DEFAULT_BYTECODE,\n hash: DEFAULT_HASH,\n receipt: DEFAULT_RECEIPT,\n });\n return { result, stateRef };\n }),\n verifyDeployment: () => Effect.succeed(true),\n verifyDeploymentStrict: () => Effect.succeed(true),\n};\n\n/**\n * Creates a mock DeployService 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 = makeMockDeployServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockDeployServiceLayer({\n * deploy: () => Effect.succeed({\n * hash: \"0x...\",\n * address: \"0x...\",\n * receipt: { ... },\n * deployedBytecode: \"0x...\",\n * }),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const deployService = yield* DeployService;\n * const result = yield* deployService.deploy({ ... });\n * }).pipe(Effect.provide(layer));\n * ```\n */\nexport const makeMockDeployServiceLayer = (\n config: MockDeployServiceConfig = {},\n supportedChainId = 1\n): Layer.Layer<DeployService> =>\n makeMockServiceLayer(DeployService, defaultConfig, config, (merged) => ({\n computeAddress: (params) => merged.computeAddress(params),\n // Cast to widen error type from ClientNotFoundError to full DeployService errors\n deploy: withChainIdCheck(\n supportedChainId,\n merged.deploy\n ) as unknown as DeployServiceShape[\"deploy\"],\n // For deployAndTrack, cast the whole function to match the shape\n deployAndTrack: withChainIdCheck(\n supportedChainId,\n merged.deployAndTrack\n ) as unknown as DeployServiceShape[\"deployAndTrack\"],\n verifyDeployment: withChainIdCheck(supportedChainId, merged.verifyDeployment),\n verifyDeploymentStrict: withChainIdCheck(supportedChainId, merged.verifyDeploymentStrict),\n }));\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-erc721-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-erc721-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock-erc721-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-erc721-service.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Layer } from \"effect\";\nimport { Effect } from \"effect\";\nimport type { Address, Hash, Hex } from \"viem\";\nimport type { Erc721ServiceShape, NftMetadata } from \"@/src/erc721/index.js\";\nimport { Erc721Service } from \"@/src/erc721/index.js\";\nimport { makeMockServiceLayer, withChainIdCheck, withWalletChainIdCheck } from \"./helpers.js\";\n\n/**\n * Configuration for the mock Erc721Service\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockErc721ServiceConfig = {\n // Read methods\n ownerOf?: (params: {\n address: Address;\n chainId: number;\n tokenId: bigint;\n }) => Effect.Effect<Address>;\n balanceOf?: (params: {\n address: Address;\n chainId: number;\n owner: Address;\n }) => Effect.Effect<bigint>;\n getApproved?: (params: {\n address: Address;\n chainId: number;\n tokenId: bigint;\n }) => Effect.Effect<Address>;\n isApprovedForAll?: (params: {\n address: Address;\n chainId: number;\n operator: Address;\n owner: Address;\n }) => Effect.Effect<boolean>;\n tokenURI?: (params: {\n address: Address;\n chainId: number;\n tokenId: bigint;\n }) => Effect.Effect<string>;\n fetchMetadata?: (params: {\n address: Address;\n chainId: number;\n gateways?: { arweave?: string; ipfs?: string };\n tokenId: bigint;\n }) => Effect.Effect<NftMetadata>;\n name?: (params: { address: Address; chainId: number }) => Effect.Effect<string>;\n symbol?: (params: { address: Address; chainId: number }) => Effect.Effect<string>;\n totalSupply?: (params: { address: Address; chainId: number }) => Effect.Effect<bigint>;\n\n // Write methods\n approve?: (params: {\n account?: Address;\n address: Address;\n chainId: number;\n to: Address;\n tokenId: bigint;\n }) => Effect.Effect<Hash>;\n setApprovalForAll?: (params: {\n account?: Address;\n address: Address;\n approved: boolean;\n chainId: number;\n operator: Address;\n }) => Effect.Effect<Hash>;\n transferFrom?: (params: {\n account?: Address;\n address: Address;\n chainId: number;\n from: Address;\n to: Address;\n tokenId: bigint;\n }) => Effect.Effect<Hash>;\n safeTransferFrom?: (params: {\n account?: Address;\n address: Address;\n chainId: number;\n data?: Hex;\n from: Address;\n to: Address;\n tokenId: bigint;\n }) => Effect.Effect<Hash>;\n};\n\nconst DEFAULT_ADDRESS = \"0x1234567890123456789012345678901234567890\" as Address;\nconst DEFAULT_HASH = \"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\" as Hash;\n\nconst defaultConfig: Required<MockErc721ServiceConfig> = {\n // Write defaults\n approve: () => Effect.succeed(DEFAULT_HASH),\n balanceOf: () => Effect.succeed(5n),\n fetchMetadata: () =>\n Effect.succeed({\n attributes: [],\n description: \"A mock NFT for testing purposes\",\n image: \"ipfs://QmMockHash/image.png\",\n name: \"Mock NFT\",\n }),\n getApproved: () => Effect.succeed(DEFAULT_ADDRESS),\n isApprovedForAll: () => Effect.succeed(false),\n name: () => Effect.succeed(\"MockNFT\"),\n // Read defaults\n ownerOf: () => Effect.succeed(DEFAULT_ADDRESS),\n safeTransferFrom: () => Effect.succeed(DEFAULT_HASH),\n setApprovalForAll: () => Effect.succeed(DEFAULT_HASH),\n symbol: () => Effect.succeed(\"MNFT\"),\n tokenURI: () => Effect.succeed(\"ipfs://QmMockHash/metadata.json\"),\n totalSupply: () => Effect.succeed(10000n),\n transferFrom: () => Effect.succeed(DEFAULT_HASH),\n};\n\n/**\n * Creates a mock Erc721Service 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 = makeMockErc721ServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockErc721ServiceLayer({\n * ownerOf: () => Effect.succeed(\"0x...\" as Address),\n * balanceOf: () => Effect.succeed(10n),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const erc721 = yield* Erc721Service;\n * const owner = yield* erc721.ownerOf({ ... });\n * }).pipe(Effect.provide(layer));\n * ```\n */\nexport const makeMockErc721ServiceLayer = (\n config: MockErc721ServiceConfig = {},\n supportedChainId = 1\n): Layer.Layer<Erc721Service> =>\n makeMockServiceLayer(Erc721Service, defaultConfig, config, (merged) => ({\n // Write methods use WalletNotConnectedError - cast to widen to expected error types\n approve: withWalletChainIdCheck(\n supportedChainId,\n merged.approve\n ) as Erc721ServiceShape[\"approve\"],\n // Read methods use ClientNotFoundError - cast where needed to widen error types\n balanceOf: withChainIdCheck(supportedChainId, merged.balanceOf),\n fetchMetadata: withChainIdCheck(supportedChainId, merged.fetchMetadata),\n getApproved: withChainIdCheck(supportedChainId, merged.getApproved),\n isApprovedForAll: withChainIdCheck(supportedChainId, merged.isApprovedForAll),\n name: withChainIdCheck(supportedChainId, merged.name),\n ownerOf: withChainIdCheck(supportedChainId, merged.ownerOf) as Erc721ServiceShape[\"ownerOf\"],\n safeTransferFrom: withWalletChainIdCheck(\n supportedChainId,\n merged.safeTransferFrom\n ) as Erc721ServiceShape[\"safeTransferFrom\"],\n setApprovalForAll: withWalletChainIdCheck(\n supportedChainId,\n merged.setApprovalForAll\n ) as Erc721ServiceShape[\"setApprovalForAll\"],\n symbol: withChainIdCheck(supportedChainId, merged.symbol),\n tokenURI: withChainIdCheck(supportedChainId, merged.tokenURI) as Erc721ServiceShape[\"tokenURI\"],\n totalSupply: withChainIdCheck(supportedChainId, merged.totalSupply),\n transferFrom: withWalletChainIdCheck(\n supportedChainId,\n merged.transferFrom\n ) as Erc721ServiceShape[\"transferFrom\"],\n }));\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-gas-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-gas-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEtE,MAAM,oBAAoB,GAAgB;IACxC,UAAU,EAAE,EAAE;IACd,gBAAgB,EAAE,YAAY;IAC9B,QAAQ,EAAE,YAAY;IACtB,YAAY,EAAE,YAAY;IAC1B,oBAAoB,EAAE,WAAW;CAClC,CAAC;AAEF,MAAM,yBAAyB,GAAkC;IAC/D,IAAI,EAAE;QACJ,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,YAAY;QAC9B,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,aAAa;QAC3B,oBAAoB,EAAE,WAAW;KAClC;IACD,OAAO,EAAE;QACP,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,YAAY;QAC9B,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,aAAa;QAC3B,oBAAoB,EAAE,WAAW;KAClC;IACD,IAAI,EAAE;QACJ,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,YAAY;QAC9B,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,YAAY;QAC1B,oBAAoB,EAAE,WAAW;KAClC;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,YAAY;QAC9B,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,YAAY;QAC1B,oBAAoB,EAAE,WAAW;KAClC;CACF,CAAC;AA0CF,MAAM,aAAa,GAAmC;IACpD,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;IACxD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;IAC7C,kBAAkB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC;IACnE,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;IAC9C,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;IACpD,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;CAC5C,CAAC;AA4BF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,SAA+B,EAAE,EACjC,gBAAgB,GAAG,CAAC,EACK,EAAE,CAC3B,oBAAoB,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnE,YAAY,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC;IACrE,WAAW,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC;IACnE,kBAAkB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,CAAC;IACjF,UAAU,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC;IACjE,iBAAiB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,CAAC;IAC/E,eAAe,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,eAAe,CAAC;CAC5E,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"mock-gas-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-gas-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEtE,MAAM,oBAAoB,GAAgB;IACxC,UAAU,EAAE,EAAE;IACd,gBAAgB,EAAE,YAAY;IAC9B,QAAQ,EAAE,YAAY;IACtB,YAAY,EAAE,YAAY;IAC1B,oBAAoB,EAAE,WAAW;CAClC,CAAC;AAEF,MAAM,yBAAyB,GAAkC;IAC/D,IAAI,EAAE;QACJ,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,YAAY;QAC9B,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,aAAa;QAC3B,oBAAoB,EAAE,WAAW;KAClC;IACD,OAAO,EAAE;QACP,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,YAAY;QAC9B,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,aAAa;QAC3B,oBAAoB,EAAE,WAAW;KAClC;IACD,IAAI,EAAE;QACJ,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,YAAY;QAC9B,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,YAAY;QAC1B,oBAAoB,EAAE,WAAW;KAClC;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,EAAE;QACd,gBAAgB,EAAE,YAAY;QAC9B,QAAQ,EAAE,YAAY;QACtB,YAAY,EAAE,YAAY;QAC1B,oBAAoB,EAAE,WAAW;KAClC;CACF,CAAC;AA0CF,MAAM,aAAa,GAAmC;IACpD,YAAY,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC;IACxD,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;IAC7C,kBAAkB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC;IACnE,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;IAC9C,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;IACpD,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;CAC5C,CAAC;AA4BF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,SAA+B,EAAE,EACjC,gBAAgB,GAAG,CAAC,EACK,EAAE,CAC3B,oBAAoB,CAAC,UAAU,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnE,YAAY,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,YAAY,CAAC;IACrE,WAAW,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC;IACnE,kBAAkB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,kBAAkB,CAAC;IACjF,UAAU,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC;IACjE,iBAAiB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,CAAC;IAC/E,eAAe,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,eAAe,CAAC;CAC5E,CAAC,CAAC,CAAC","sourcesContent":["import type { Layer } from \"effect\";\nimport { Effect } from \"effect\";\nimport type { Address, Hex } from \"viem\";\nimport { MIN_TX_GAS } from \"@/src/constants/index.js\";\nimport type { ClientNotFoundError } from \"@/src/core/index.js\";\nimport type { FeeEstimate, GasPriceUnavailableError, GasSpeed } from \"@/src/gas/index.js\";\nimport { GasService } from \"@/src/gas/index.js\";\nimport { makeMockServiceLayer, withChainIdCheck } from \"./helpers.js\";\n\nconst DEFAULT_FEE_ESTIMATE: FeeEstimate = {\n confidence: 85,\n estimatedBaseFee: 30000000000n, // 30 gwei\n gasPrice: 45000000000n, // 45 gwei for legacy\n maxFeePerGas: 90000000000n, // 90 gwei\n maxPriorityFeePerGas: 1500000000n, // 1.5 gwei\n};\n\nconst DEFAULT_ALL_FEE_ESTIMATES: Record<GasSpeed, FeeEstimate> = {\n fast: {\n confidence: 95,\n estimatedBaseFee: 30000000000n,\n gasPrice: 60000000000n,\n maxFeePerGas: 110000000000n,\n maxPriorityFeePerGas: 2500000000n,\n },\n instant: {\n confidence: 99,\n estimatedBaseFee: 30000000000n,\n gasPrice: 80000000000n,\n maxFeePerGas: 140000000000n,\n maxPriorityFeePerGas: 5000000000n,\n },\n slow: {\n confidence: 70,\n estimatedBaseFee: 30000000000n,\n gasPrice: 35000000000n,\n maxFeePerGas: 70000000000n,\n maxPriorityFeePerGas: 1000000000n,\n },\n standard: {\n confidence: 85,\n estimatedBaseFee: 30000000000n,\n gasPrice: 45000000000n,\n maxFeePerGas: 90000000000n,\n maxPriorityFeePerGas: 1500000000n,\n },\n};\n\n/**\n * Configuration for the mock GasService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockGasServiceConfig = {\n estimateFees?: (params: {\n chainId: number;\n speed?: GasSpeed;\n }) => Effect.Effect<FeeEstimate, GasPriceUnavailableError | ClientNotFoundError>;\n\n getAllFeeEstimates?: (params: {\n chainId: number;\n }) => Effect.Effect<\n Record<GasSpeed, FeeEstimate>,\n GasPriceUnavailableError | ClientNotFoundError\n >;\n\n getBaseFee?: (params: {\n chainId: number;\n }) => Effect.Effect<bigint, GasPriceUnavailableError | ClientNotFoundError>;\n\n getMaxPriorityFee?: (params: {\n chainId: number;\n }) => Effect.Effect<bigint, GasPriceUnavailableError | ClientNotFoundError>;\n\n estimateGas?: (params: {\n chainId: number;\n data?: Hex;\n from?: Address;\n to: Address;\n value?: bigint;\n }) => Effect.Effect<bigint, GasPriceUnavailableError | ClientNotFoundError>;\n\n supportsEip1559?: (params: {\n chainId: number;\n }) => Effect.Effect<boolean, GasPriceUnavailableError | ClientNotFoundError>;\n};\n\nconst defaultConfig: Required<MockGasServiceConfig> = {\n estimateFees: () => Effect.succeed(DEFAULT_FEE_ESTIMATE),\n estimateGas: () => Effect.succeed(MIN_TX_GAS), // Standard transfer\n getAllFeeEstimates: () => Effect.succeed(DEFAULT_ALL_FEE_ESTIMATES),\n getBaseFee: () => Effect.succeed(30000000000n), // 30 gwei\n getMaxPriorityFee: () => Effect.succeed(1500000000n), // 1.5 gwei\n supportsEip1559: () => Effect.succeed(true),\n};\n\n/**\n * Creates a mock GasService 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 = makeMockGasServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockGasServiceLayer({\n * estimateFees: () => Effect.succeed({ maxFeePerGas: 100000000000n, ... }),\n * supportsEip1559: () => Effect.succeed(false),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const gasService = yield* GasService;\n * const fees = yield* gasService.estimateFees({ chainId: mainnet.id });\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockGasServiceLayer = (\n config: MockGasServiceConfig = {},\n supportedChainId = 1\n): Layer.Layer<GasService> =>\n makeMockServiceLayer(GasService, defaultConfig, config, (merged) => ({\n estimateFees: withChainIdCheck(supportedChainId, merged.estimateFees),\n estimateGas: withChainIdCheck(supportedChainId, merged.estimateGas),\n getAllFeeEstimates: withChainIdCheck(supportedChainId, merged.getAllFeeEstimates),\n getBaseFee: withChainIdCheck(supportedChainId, merged.getBaseFee),\n getMaxPriorityFee: withChainIdCheck(supportedChainId, merged.getMaxPriorityFee),\n supportsEip1559: withChainIdCheck(supportedChainId, merged.supportsEip1559),\n }));\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-nonce-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-nonce-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAoDtE,MAAM,aAAa,GAAqC;IACtD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;IACxC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACzC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;IACxC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;CAC/B,CAAC;AA+BF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,SAAiC,EAAE,EACnC,gBAAgB,GAAG,CAAC,EACO,EAAE,CAC7B,oBAAoB,CAAC,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAErE,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAClB,MAAM,CAAC,OAAO,KAAK,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;IAG1F,iBAAiB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,CAAC;IAC/E,OAAO,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC;IAC3D,OAAO,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC;IAC3D,eAAe,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,eAAe,CAAC;IAC3E,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAClB,MAAM,CAAC,OAAO,KAAK,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1F,OAAO,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC;IAC3D,IAAI,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC;CACtD,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"mock-nonce-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-nonce-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGhC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAoDtE,MAAM,aAAa,GAAqC;IACtD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;IACxC,iBAAiB,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACzC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;IACxC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;CAC/B,CAAC;AA+BF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,SAAiC,EAAE,EACnC,gBAAgB,GAAG,CAAC,EACO,EAAE,CAC7B,oBAAoB,CAAC,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAErE,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAClB,MAAM,CAAC,OAAO,KAAK,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;IAG1F,iBAAiB,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,iBAAiB,CAAC;IAC/E,OAAO,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC;IAC3D,OAAO,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC;IAC3D,eAAe,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,eAAe,CAAC;IAC3E,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAClB,MAAM,CAAC,OAAO,KAAK,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1F,OAAO,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC;IAC3D,IAAI,EAAE,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC;CACtD,CAAC,CAAC,CAAC","sourcesContent":["import type { Layer } from \"effect\";\nimport { Effect } from \"effect\";\nimport type { Address } from \"viem\";\nimport type { ClientNotFoundError, TransportError } from \"@/src/core/index.js\";\nimport { NonceService } from \"@/src/nonce/index.js\";\nimport { makeMockServiceLayer, withChainIdCheck } from \"./helpers.js\";\n\n/**\n * Configuration for the mock NonceService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockNonceServiceConfig = {\n getNext?: (params: {\n address: Address;\n chainId: number;\n }) => Effect.Effect<bigint, ClientNotFoundError | TransportError>;\n\n reserve?: (params: {\n address: Address;\n chainId: number;\n }) => Effect.Effect<bigint, ClientNotFoundError | TransportError>;\n\n release?: (params: {\n address: Address;\n chainId: number;\n nonce: bigint;\n }) => Effect.Effect<void, never>;\n\n confirm?: (params: {\n address: Address;\n chainId: number;\n nonce: bigint;\n }) => Effect.Effect<void, never>;\n\n getPendingCount?: (params: {\n address: Address;\n chainId: number;\n }) => Effect.Effect<bigint, ClientNotFoundError | TransportError>;\n\n getConfirmedCount?: (params: {\n address: Address;\n chainId: number;\n }) => Effect.Effect<bigint, ClientNotFoundError | TransportError>;\n\n getGaps?: (params: {\n address: Address;\n chainId: number;\n }) => Effect.Effect<bigint[], ClientNotFoundError>;\n\n sync?: (params: {\n address: Address;\n chainId: number;\n }) => Effect.Effect<bigint, ClientNotFoundError | TransportError>;\n};\n\nconst defaultConfig: Required<MockNonceServiceConfig> = {\n confirm: () => Effect.succeed(undefined),\n getConfirmedCount: () => Effect.succeed(0n),\n getGaps: () => Effect.succeed([]),\n getNext: () => Effect.succeed(0n),\n getPendingCount: () => Effect.succeed(0n),\n release: () => Effect.succeed(undefined),\n reserve: () => Effect.succeed(0n),\n sync: () => Effect.succeed(0n),\n};\n\n/**\n * Creates a mock NonceService 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 = makeMockNonceServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockNonceServiceLayer({\n * getNext: () => Effect.succeed(5n),\n * reserve: () => Effect.succeed(5n),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const nonceService = yield* NonceService;\n * const nonce = yield* nonceService.getNext({\n * chainId: mainnet.id,\n * address: \"0x...\",\n * });\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockNonceServiceLayer = (\n config: MockNonceServiceConfig = {},\n supportedChainId = 1\n): Layer.Layer<NonceService> =>\n makeMockServiceLayer(NonceService, defaultConfig, config, (merged) => ({\n // Methods that never fail - they succeed silently for unsupported chains\n confirm: (params) =>\n params.chainId === supportedChainId ? merged.confirm(params) : Effect.succeed(undefined),\n\n // Methods that can fail with ClientNotFoundError\n getConfirmedCount: withChainIdCheck(supportedChainId, merged.getConfirmedCount),\n getGaps: withChainIdCheck(supportedChainId, merged.getGaps),\n getNext: withChainIdCheck(supportedChainId, merged.getNext),\n getPendingCount: withChainIdCheck(supportedChainId, merged.getPendingCount),\n release: (params) =>\n params.chainId === supportedChainId ? merged.release(params) : Effect.succeed(undefined),\n reserve: withChainIdCheck(supportedChainId, merged.reserve),\n sync: withChainIdCheck(supportedChainId, merged.sync),\n }));\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-public-client.js","sourceRoot":"","sources":["../../src/testing-kit/mock-public-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mock-public-client.js","sourceRoot":"","sources":["../../src/testing-kit/mock-public-client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Effect } from \"effect\";\nimport { Layer } from \"effect\";\nimport { constVoid as noop } from \"effect/Function\";\nimport type {\n Address,\n Block,\n Hash,\n Hex,\n TransactionReceipt,\n WatchContractEventParameters,\n} from \"viem\";\nimport { MIN_TX_GAS } from \"@/src/constants/index.js\";\nimport type { PublicClientServiceShape } from \"@/src/core/index.js\";\nimport { PublicClientService } from \"@/src/core/index.js\";\nimport { makeChainIdGetter } from \"./helpers.js\";\n\n/**\n * Configuration for the mock PublicClient\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockPublicClientConfig = {\n // Contract methods\n readContract?: (params: unknown) => Promise<unknown>;\n multicall?: (\n params: unknown\n ) => Promise<Array<{ status: \"success\"; result: unknown } | { status: \"failure\"; error: Error }>>;\n estimateContractGas?: (params: unknown) => Promise<bigint>;\n simulateContract?: (params: unknown) => Promise<{ request: unknown; result: unknown }>;\n\n // Balance methods\n getBalance?: (params: {\n address: Address;\n blockTag?: \"latest\" | \"pending\";\n blockNumber?: bigint;\n }) => Promise<bigint>;\n\n // Transaction methods\n waitForTransactionReceipt?: (params: { hash: Hash }) => Promise<TransactionReceipt>;\n getTransactionConfirmations?: (\n params: { hash: Hash } | { transactionReceipt: TransactionReceipt }\n ) => Promise<bigint>;\n getTransactionCount?: (params: {\n address: Address;\n blockTag: \"latest\" | \"pending\";\n }) => Promise<number>;\n\n // Event methods\n watchContractEvent?: (params: WatchContractEventParameters) => () => void;\n getLogs?: (params: unknown) => Promise<unknown[]>;\n\n // Block methods\n getBlockNumber?: () => Promise<bigint>;\n getBlock?: (params: unknown) => Promise<Block>;\n watchBlockNumber?: (params: unknown) => () => void;\n watchBlocks?: (params: unknown) => () => void;\n watchEvent?: (params: unknown) => () => void;\n watchPendingTransactions?: (params: unknown) => () => void;\n\n // Gas methods\n getGasPrice?: () => Promise<bigint>;\n estimateMaxPriorityFeePerGas?: () => Promise<bigint>;\n estimateGas?: (params: unknown) => Promise<bigint>;\n\n // Bytecode methods\n getBytecode?: (params: { address: Address }) => Promise<Hex | null>;\n\n // ENS methods\n getEnsAddress?: (params: unknown) => Promise<Address | null>;\n getEnsName?: (params: unknown) => Promise<string | null>;\n getEnsAvatar?: (params: unknown) => Promise<string | null>;\n getEnsText?: (params: unknown) => Promise<string | null>;\n getEnsResolver?: (params: unknown) => Promise<Address | null>;\n};\n\nconst DEFAULT_ADDRESS = \"0x1234567890123456789012345678901234567890\" as Address;\nconst DEFAULT_HASH = \"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\" as Hash;\nconst DEFAULT_RESOLVER = \"0x4976fb03C32e5B8cfe2b6cCB31c09Ba78EBaBa41\" as Address;\nconst DEFAULT_BYTECODE = \"0x608060405234801561001057600080fd5b50\" as Hex;\n\nconst DEFAULT_BLOCK: Block = {\n baseFeePerGas: 30000000000n,\n blobGasUsed: 0n,\n difficulty: 0n,\n excessBlobGas: 0n,\n extraData: \"0x\",\n gasLimit: 30000000n,\n gasUsed: 12000000n,\n hash: DEFAULT_HASH,\n logsBloom: \"0x00\",\n miner: \"0x0000000000000000000000000000000000000000\",\n mixHash: DEFAULT_HASH,\n nonce: \"0x0000000000000000\",\n number: 1000n,\n parentHash: DEFAULT_HASH,\n receiptsRoot: DEFAULT_HASH,\n sealFields: [],\n sha3Uncles: DEFAULT_HASH,\n size: 1024n,\n stateRoot: DEFAULT_HASH,\n timestamp: 1700000000n,\n totalDifficulty: 0n,\n transactions: [],\n transactionsRoot: DEFAULT_HASH,\n uncles: [],\n};\n\n/**\n * Creates a mock PublicClientService 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 = makeMockPublicClientLayer();\n *\n * // Override specific methods\n * const layer = makeMockPublicClientLayer({\n * readContract: async () => 1000n,\n * getEnsAddress: async () => \"0x...\",\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const reader = yield* ContractReader;\n * const result = yield* reader.read({ ... });\n * }).pipe(\n * Effect.provide(Layer.provide(ContractReaderLive, layer))\n * );\n * ```\n */\nexport const makeMockPublicClientLayer = (\n config: MockPublicClientConfig = {},\n supportedChainId = 1\n): Layer.Layer<PublicClientService> => {\n const defaultMulticall: NonNullable<MockPublicClientConfig[\"multicall\"]> = (params: unknown) => {\n const calls = (params as { contracts?: unknown[] }).contracts ?? [];\n return Promise.resolve(calls.map(() => ({ result: 100n, status: \"success\" as const })));\n };\n\n const defaultWaitForTransactionReceipt: NonNullable<\n MockPublicClientConfig[\"waitForTransactionReceipt\"]\n > = async (params: { hash: Hash }): Promise<TransactionReceipt> => ({\n blockHash: DEFAULT_HASH,\n blockNumber: 1000n,\n contractAddress: null,\n cumulativeGasUsed: MIN_TX_GAS,\n effectiveGasPrice: 1000000000n,\n from: DEFAULT_ADDRESS,\n gasUsed: MIN_TX_GAS,\n logs: [],\n logsBloom: \"0x00\" as Address,\n status: \"success\",\n to: \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\" as Address,\n transactionHash: params.hash,\n transactionIndex: 0,\n type: \"eip1559\",\n });\n\n const {\n estimateContractGas = async () => MIN_TX_GAS,\n estimateGas = async () => MIN_TX_GAS,\n estimateMaxPriorityFeePerGas = async () => 1500000000n,\n getBalance = async () => 1000000000000000000n,\n getBlock = async () => DEFAULT_BLOCK,\n getBlockNumber = async () => 1000n,\n getBytecode = async () => DEFAULT_BYTECODE,\n getEnsAddress = async () => DEFAULT_ADDRESS,\n getEnsAvatar = async () => \"https://example.com/avatar.png\",\n getEnsName = async () => \"mock.eth\",\n getEnsResolver = async () => DEFAULT_RESOLVER,\n getEnsText = async () => \"mock-text-record\",\n getGasPrice = async () => 45000000000n,\n getLogs = async () => [],\n getTransactionConfirmations = async () => 3n,\n getTransactionCount = async () => 0,\n multicall = defaultMulticall,\n readContract = async () => 100n,\n simulateContract = async () => ({ request: {}, result: true }),\n waitForTransactionReceipt = defaultWaitForTransactionReceipt,\n watchBlockNumber = () => noop,\n watchBlocks = () => noop,\n watchContractEvent = () => noop,\n watchEvent = () => noop,\n watchPendingTransactions = () => noop,\n } = config;\n\n // Create mock PublicClient\n const mockPublicClient = {\n chain: { id: supportedChainId },\n estimateContractGas,\n estimateGas,\n estimateMaxPriorityFeePerGas,\n getBalance,\n getBlock,\n getBlockNumber,\n getBytecode,\n getEnsAddress,\n getEnsAvatar,\n getEnsName,\n getEnsResolver,\n getEnsText,\n getGasPrice,\n getLogs,\n getTransactionConfirmations,\n getTransactionCount,\n multicall,\n readContract,\n simulateContract,\n transport: { type: \"http\", url: \"http://localhost\" },\n waitForTransactionReceipt,\n watchBlockNumber,\n watchBlocks,\n watchContractEvent,\n watchEvent,\n watchPendingTransactions,\n } as unknown as ReturnType<PublicClientServiceShape[\"get\"]> extends Effect.Effect<\n infer A,\n infer _E,\n infer _R\n >\n ? A\n : never;\n\n return Layer.succeed(\n PublicClientService,\n PublicClientService.of({\n get: makeChainIdGetter(supportedChainId, () => mockPublicClient),\n })\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-signature-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-signature-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAQhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,eAAe,GAAG,4CAAuD,CAAC;AAChF,MAAM,YAAY,GAAG,oEAA2E,CAAC;AAmEjG,MAAM,aAAa,GAAyC;IAC1D,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;IACvD,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CACzB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAuD;IACpF,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CACzB,MAAM,CAAC,OAAO,CACZ,sIAA6I,CAC9I;IACH,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;IAC5D,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE,CACnC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAiE;IACjG,cAAc,EAAE,CAAC,UAAU,EAAE,EAAE,CAC7B,MAAM,CAAC,OAAO,CAAC;QACb,CAAC,EAAE,oEAA2E;QAC9E,CAAC,EAAE,oEAA2E;QAC9E,CAAC,EAAE,GAAG;KACP,CAAC;IACJ,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAC3B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAyD;CAC/E,CAAC;AA+BF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,SAAqC,EAAE,EACR,EAAE,CACjC,oBAAoB,CAAC,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzE,WAAW,EAAE,MAAM,CAAC,WAAW;IAC/B,aAAa,EAAE,MAAM,CAAC,aAAuD;IAC7E,aAAa,EAAE,MAAM,CAAC,aAAa;IACnC,cAAc,EAAE,MAAM,CAAC,cAAc;IACrC,uBAAuB,EACrB,MAAM,CAAC,uBAA2E;IACpF,cAAc,EAAE,MAAM,CAAC,cAAc;IACrC,aAAa,EAAE,MAAM,CAAC,aAAa;IACnC,eAAe,EAAE,MAAM,CAAC,eAA2D;CACpF,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"mock-signature-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-signature-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAQhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,eAAe,GAAG,4CAAuD,CAAC;AAChF,MAAM,YAAY,GAAG,oEAA2E,CAAC;AAmEjG,MAAM,aAAa,GAAyC;IAC1D,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;IACvD,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CACzB,MAAM,CAAC,OAAO,CAAC,YAAY,CAAuD;IACpF,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CACzB,MAAM,CAAC,OAAO,CACZ,sIAA6I,CAC9I;IACH,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;IAC5D,uBAAuB,EAAE,CAAC,OAAO,EAAE,EAAE,CACnC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAiE;IACjG,cAAc,EAAE,CAAC,UAAU,EAAE,EAAE,CAC7B,MAAM,CAAC,OAAO,CAAC;QACb,CAAC,EAAE,oEAA2E;QAC9E,CAAC,EAAE,oEAA2E;QAC9E,CAAC,EAAE,GAAG;KACP,CAAC;IACJ,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAChD,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAC3B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAyD;CAC/E,CAAC;AA+BF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,SAAqC,EAAE,EACR,EAAE,CACjC,oBAAoB,CAAC,gBAAgB,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACzE,WAAW,EAAE,MAAM,CAAC,WAAW;IAC/B,aAAa,EAAE,MAAM,CAAC,aAAuD;IAC7E,aAAa,EAAE,MAAM,CAAC,aAAa;IACnC,cAAc,EAAE,MAAM,CAAC,cAAc;IACrC,uBAAuB,EACrB,MAAM,CAAC,uBAA2E;IACpF,cAAc,EAAE,MAAM,CAAC,cAAc;IACrC,aAAa,EAAE,MAAM,CAAC,aAAa;IACnC,eAAe,EAAE,MAAM,CAAC,eAA2D;CACpF,CAAC,CAAC,CAAC","sourcesContent":["import type { Layer } from \"effect\";\nimport { Effect } from \"effect\";\nimport type { Address, Hex, TypedData, TypedDataDomain } from \"viem\";\nimport type {\n InvalidSignatureError,\n SignatureRecoveryError,\n SignatureServiceShape,\n SignatureVerificationError,\n} from \"@/src/signature/index.js\";\nimport { SignatureService } from \"@/src/signature/index.js\";\nimport { makeMockServiceLayer } from \"./helpers.js\";\n\nconst DEFAULT_ADDRESS = \"0x1234567890123456789012345678901234567890\" as Address;\nconst DEFAULT_HASH = \"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\" as Hex;\n\n/**\n * Configuration for the mock SignatureService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockSignatureServiceConfig = {\n verifyMessage?: (params: {\n address: Address;\n message: string | Uint8Array;\n signature: Hex;\n }) => Effect.Effect<boolean, SignatureVerificationError>;\n\n verifyTypedData?: <\n const TTypedData extends TypedData,\n TPrimaryType extends keyof TTypedData,\n >(params: {\n address: Address;\n domain: TypedDataDomain;\n types: TTypedData;\n primaryType: TPrimaryType;\n message: Record<string, unknown>;\n signature: Hex;\n }) => Effect.Effect<boolean, SignatureVerificationError>;\n\n recoverAddress?: (params: {\n message: string | Uint8Array;\n signature: Hex;\n }) => Effect.Effect<Address, SignatureRecoveryError>;\n\n recoverTypedDataAddress?: <\n const TTypedData extends TypedData,\n TPrimaryType extends keyof TTypedData,\n >(params: {\n domain: TypedDataDomain;\n types: TTypedData;\n primaryType: TPrimaryType;\n message: Record<string, unknown>;\n signature: Hex;\n }) => Effect.Effect<Address, SignatureRecoveryError>;\n\n splitSignature?: (signature: Hex) => Effect.Effect<\n {\n r: Hex;\n s: Hex;\n v: bigint;\n },\n InvalidSignatureError\n >;\n\n joinSignature?: (params: { r: Hex; s: Hex; v: bigint }) => Effect.Effect<Hex, never>;\n\n hashMessage?: (message: string | Uint8Array) => Effect.Effect<Hex, never>;\n\n hashTypedData?: <\n const TTypedData extends TypedData,\n TPrimaryType extends keyof TTypedData,\n >(params: {\n domain: TypedDataDomain;\n types: TTypedData;\n primaryType: TPrimaryType;\n message: Record<string, unknown>;\n }) => Effect.Effect<Hex, never>;\n};\n\nconst defaultConfig: Required<MockSignatureServiceConfig> = {\n hashMessage: (_message) => Effect.succeed(DEFAULT_HASH),\n hashTypedData: (_params) =>\n Effect.succeed(DEFAULT_HASH) as ReturnType<SignatureServiceShape[\"hashTypedData\"]>,\n joinSignature: (_params) =>\n Effect.succeed(\n \"0x1234567890123456789012345678901234567890123456789012345678901234abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd1b\" as Hex\n ),\n recoverAddress: (_params) => Effect.succeed(DEFAULT_ADDRESS),\n recoverTypedDataAddress: (_params) =>\n Effect.succeed(DEFAULT_ADDRESS) as ReturnType<SignatureServiceShape[\"recoverTypedDataAddress\"]>,\n splitSignature: (_signature) =>\n Effect.succeed({\n r: \"0x1234567890123456789012345678901234567890123456789012345678901234\" as Hex,\n s: \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdefabcd\" as Hex,\n v: 27n,\n }),\n verifyMessage: (_params) => Effect.succeed(true),\n verifyTypedData: (_params) =>\n Effect.succeed(true) as ReturnType<SignatureServiceShape[\"verifyTypedData\"]>,\n};\n\n/**\n * Creates a mock SignatureService layer for testing\n *\n * @param config - Optional configuration to override default mock behaviors\n *\n * @example\n * ```typescript\n * // Basic usage with defaults\n * const layer = makeMockSignatureServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockSignatureServiceLayer({\n * verifyMessage: () => Effect.succeed(true),\n * recoverAddress: () => Effect.succeed(\"0x...\" as Address),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const signatureService = yield* SignatureService;\n * const isValid = yield* signatureService.verifyMessage({\n * address: \"0x...\",\n * message: \"Hello\",\n * signature: \"0x...\",\n * });\n * }).pipe(\n * Effect.provide(layer)\n * );\n * ```\n */\nexport const makeMockSignatureServiceLayer = (\n config: MockSignatureServiceConfig = {}\n): Layer.Layer<SignatureService> =>\n makeMockServiceLayer(SignatureService, defaultConfig, config, (merged) => ({\n hashMessage: merged.hashMessage,\n hashTypedData: merged.hashTypedData as SignatureServiceShape[\"hashTypedData\"],\n joinSignature: merged.joinSignature,\n recoverAddress: merged.recoverAddress,\n recoverTypedDataAddress:\n merged.recoverTypedDataAddress as SignatureServiceShape[\"recoverTypedDataAddress\"],\n splitSignature: merged.splitSignature,\n verifyMessage: merged.verifyMessage,\n verifyTypedData: merged.verifyTypedData as SignatureServiceShape[\"verifyTypedData\"],\n }));\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-simulation-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-simulation-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAiCtE,MAAM,yBAAyB,GAAqB;IAClD,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,EAAE;IACR,SAAS,EAAE,EAAE;IACb,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,MAAM,aAAa,GAA0C;IAC3D,kBAAkB,EAAE,CAAC,MAAwB,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;QACzD,MAAM,UAAU,GACd,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChG,OAAO,MAAM,CAAC,OAAO,CACnB,qCAAqC,MAAM,UAAU,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,UAAU,GAAG,CAC7I,CAAC;IACJ,CAAC;IACD,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC;IACzD,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CACzB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC,CAAC;CAC3E,CAAC;AA+BF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,SAAsC,EAAE,EACxC,gBAAgB,GAAG,CAAC,EACY,EAAE,CAClC,oBAAoB,CAAC,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1E,kBAAkB,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC;IAE3E,QAAQ,EAAE,gBAAgB,CACxB,gBAAgB,EAChB,MAAM,CAAC,QAAQ,CACiC;IAClD,cAAc,EAAE,gBAAgB,CAC9B,gBAAgB,EAChB,MAAM,CAAC,cAAc,CACiC;CACzD,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"mock-simulation-service.js","sourceRoot":"","sources":["../../src/testing-kit/mock-simulation-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAiCtE,MAAM,yBAAyB,GAAqB;IAClD,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,EAAE;IACR,SAAS,EAAE,EAAE;IACb,OAAO,EAAE,IAAI;IACb,KAAK,EAAE,EAAE;CACV,CAAC;AAEF,MAAM,aAAa,GAA0C;IAC3D,kBAAkB,EAAE,CAAC,MAAwB,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC;QACzD,MAAM,UAAU,GACd,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChG,OAAO,MAAM,CAAC,OAAO,CACnB,qCAAqC,MAAM,UAAU,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,KAAK,UAAU,GAAG,CAC7I,CAAC;IACJ,CAAC;IACD,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,yBAAyB,CAAC;IACzD,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE,CACzB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC,CAAC;CAC3E,CAAC;AA+BF,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,SAAsC,EAAE,EACxC,gBAAgB,GAAG,CAAC,EACY,EAAE,CAClC,oBAAoB,CAAC,iBAAiB,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1E,kBAAkB,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC;IAE3E,QAAQ,EAAE,gBAAgB,CACxB,gBAAgB,EAChB,MAAM,CAAC,QAAQ,CACiC;IAClD,cAAc,EAAE,gBAAgB,CAC9B,gBAAgB,EAChB,MAAM,CAAC,cAAc,CACiC;CACzD,CAAC,CAAC,CAAC","sourcesContent":["import type { Layer } from \"effect\";\nimport { Effect } from \"effect\";\nimport type { Abi, Address, Hex } from \"viem\";\nimport { MIN_TX_GAS } from \"@/src/constants/index.js\";\nimport { formatPercent } from \"@/src/internal/index.js\";\nimport type { SimulationResult, SimulationServiceShape } from \"@/src/simulation/index.js\";\nimport { SimulationService } from \"@/src/simulation/index.js\";\nimport { makeMockServiceLayer, withChainIdCheck } from \"./helpers.js\";\n\n/**\n * Configuration for the mock SimulationService\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockSimulationServiceConfig = {\n simulate?: (params: {\n chainId: number;\n from: Address;\n to: Address;\n data?: Hex;\n value?: bigint;\n gas?: bigint;\n blockNumber?: bigint;\n }) => Effect.Effect<SimulationResult>;\n\n simulateBundle?: (params: {\n chainId: number;\n transactions: Array<{\n from: Address;\n to: Address;\n data?: Hex;\n value?: bigint;\n }>;\n blockNumber?: bigint;\n }) => Effect.Effect<SimulationResult[]>;\n\n getReadableSummary?: (result: SimulationResult, abi?: Abi) => Effect.Effect<string>;\n};\n\nconst DEFAULT_SIMULATION_RESULT: SimulationResult = {\n gasLimit: 30000000n,\n gasUsed: MIN_TX_GAS,\n logs: [],\n stateDiff: [],\n success: true,\n trace: [],\n};\n\nconst defaultConfig: Required<MockSimulationServiceConfig> = {\n getReadableSummary: (result: SimulationResult) => {\n const status = result.success ? \"✓ Success\" : \"✗ Failed\";\n const gasPercent =\n result.gasLimit > 0n ? formatPercent(Number(result.gasUsed) / Number(result.gasLimit)) : \"0%\";\n return Effect.succeed(\n `Mock simulation summary:\\nStatus: ${status}\\nGas: ${result.gasUsed.toLocaleString()} / ${result.gasLimit.toLocaleString()} (${gasPercent})`\n );\n },\n simulate: () => Effect.succeed(DEFAULT_SIMULATION_RESULT),\n simulateBundle: (params) =>\n Effect.succeed(params.transactions.map(() => DEFAULT_SIMULATION_RESULT)),\n};\n\n/**\n * Creates a mock SimulationService 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 = makeMockSimulationServiceLayer();\n *\n * // Override specific methods\n * const layer = makeMockSimulationServiceLayer({\n * simulate: () => Effect.succeed({\n * success: true,\n * gasUsed: 50000n,\n * gasLimit: 100000n,\n * logs: [],\n * stateDiff: [],\n * }),\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const simService = yield* SimulationService;\n * const result = yield* simService.simulate({ ... });\n * }).pipe(Effect.provide(layer));\n * ```\n */\nexport const makeMockSimulationServiceLayer = (\n config: MockSimulationServiceConfig = {},\n supportedChainId = 1\n): Layer.Layer<SimulationService> =>\n makeMockServiceLayer(SimulationService, defaultConfig, config, (merged) => ({\n getReadableSummary: (result, abi) => merged.getReadableSummary(result, abi),\n // Cast to widen error type from ClientNotFoundError to TenderlyErrors\n simulate: withChainIdCheck(\n supportedChainId,\n merged.simulate\n ) as unknown as SimulationServiceShape[\"simulate\"],\n simulateBundle: withChainIdCheck(\n supportedChainId,\n merged.simulateBundle\n ) as unknown as SimulationServiceShape[\"simulateBundle\"],\n }));\n"]}
@@ -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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"}
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 +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"}
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 +1 @@
1
- {"version":3,"file":"mock-wallet-client.js","sourceRoot":"","sources":["../../src/testing-kit/mock-wallet-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAsBvD,MAAM,eAAe,GAAG,4CAAuD,CAAC;AAChF,MAAM,YAAY,GAAG,oEAA4E,CAAC;AAClG,MAAM,iBAAiB,GACrB,oIAA2I,CAAC;AA4B9I,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,SAAiC,EAAE,EACnC,gBAAgB,GAAG,CAAC,EACc,EAAE;IAEpC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC;IACzE,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC;IAG7E,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAC9E,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAGlF,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,eAAe,CAAC;IAGhE,MAAM,gBAAgB,GAAG;QACvB,OAAO,EAAE;YACP,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE,UAAU;SACjB;QACD,KAAK,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE;QAC/B,eAAe;QACf,WAAW;QACX,eAAe;QACf,aAAa;QACb,aAAa;KAON,CAAC;IAEV,OAAO,KAAK,CAAC,OAAO,CAClB,mBAAmB,EACnB,mBAAmB,CAAC,EAAE,CAAC;QACrB,GAAG,EAAE,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC;KACvE,CAAC,CACH,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"mock-wallet-client.js","sourceRoot":"","sources":["../../src/testing-kit/mock-wallet-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAsBvD,MAAM,eAAe,GAAG,4CAAuD,CAAC;AAChF,MAAM,YAAY,GAAG,oEAA4E,CAAC;AAClG,MAAM,iBAAiB,GACrB,oIAA2I,CAAC;AA4B9I,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,SAAiC,EAAE,EACnC,gBAAgB,GAAG,CAAC,EACc,EAAE;IAEpC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC;IACzE,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC;IAG7E,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAC9E,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,iBAAiB,CAAC,CAAC;IAGlF,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,eAAe,CAAC;IAGhE,MAAM,gBAAgB,GAAG;QACvB,OAAO,EAAE;YACP,OAAO,EAAE,cAAc;YACvB,IAAI,EAAE,UAAU;SACjB;QACD,KAAK,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE;QAC/B,eAAe;QACf,WAAW;QACX,eAAe;QACf,aAAa;QACb,aAAa;KAON,CAAC;IAEV,OAAO,KAAK,CAAC,OAAO,CAClB,mBAAmB,EACnB,mBAAmB,CAAC,EAAE,CAAC;QACrB,GAAG,EAAE,uBAAuB,CAAC,gBAAgB,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC;KACvE,CAAC,CACH,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import type { Effect } from \"effect\";\nimport { Layer } from \"effect\";\nimport type { Address, Hash, Hex, TypedData } from \"viem\";\nimport type { WalletClientServiceShape } from \"@/src/core/index.js\";\nimport { WalletClientService } from \"@/src/core/index.js\";\nimport { makeWalletChainIdGetter } from \"./helpers.js\";\n\n/**\n * Configuration for the mock WalletClient\n *\n * All methods are optional - sensible defaults are provided.\n * Override specific methods to customize mock behavior for your tests.\n */\nexport type MockWalletClientConfig = {\n // Contract methods\n writeContract?: (params: unknown) => Promise<Hash>;\n sendTransaction?: (params: unknown) => Promise<Hash>;\n\n // Signing methods\n signMessage?: (params: { message: string | Hex }) => Promise<Hex>;\n signTypedData?: (params: { typedData: TypedData }) => Promise<Hex>;\n signTransaction?: (params: unknown) => Promise<Hex>;\n\n // Account config\n accountAddress?: Address;\n};\n\nconst DEFAULT_ADDRESS = \"0x1234567890123456789012345678901234567890\" as Address;\nconst DEFAULT_HASH = \"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\" as Hash;\nconst DEFAULT_SIGNATURE =\n \"0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001b\" as Hex;\n\n/**\n * Creates a mock WalletClientService 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 = makeMockWalletClientLayer();\n *\n * // Override specific methods\n * const layer = makeMockWalletClientLayer({\n * writeContract: async () => \"0xtxhash...\",\n * accountAddress: \"0xmyaddress...\",\n * });\n *\n * // Use in tests\n * Effect.gen(function* () {\n * const writer = yield* ContractWriter;\n * const hash = yield* writer.write({ ... });\n * }).pipe(\n * Effect.provide(Layer.provide(ContractWriterLive, layer))\n * );\n * ```\n */\nexport const makeMockWalletClientLayer = (\n config: MockWalletClientConfig = {},\n supportedChainId = 1\n): Layer.Layer<WalletClientService> => {\n // Contract defaults\n const writeContract = config.writeContract ?? (async () => DEFAULT_HASH);\n const sendTransaction = config.sendTransaction ?? (async () => DEFAULT_HASH);\n\n // Signing defaults\n const signMessage = config.signMessage ?? (async () => DEFAULT_SIGNATURE);\n const signTypedData = config.signTypedData ?? (async () => DEFAULT_SIGNATURE);\n const signTransaction = config.signTransaction ?? (async () => DEFAULT_SIGNATURE);\n\n // Account config\n const accountAddress = config.accountAddress ?? DEFAULT_ADDRESS;\n\n // Create mock WalletClient\n const mockWalletClient = {\n account: {\n address: accountAddress,\n type: \"json-rpc\",\n },\n chain: { id: supportedChainId },\n sendTransaction,\n signMessage,\n signTransaction,\n signTypedData,\n writeContract,\n } as unknown as ReturnType<WalletClientServiceShape[\"get\"]> extends Effect.Effect<\n infer A,\n infer _E,\n infer _R\n >\n ? A\n : never;\n\n return Layer.succeed(\n WalletClientService,\n WalletClientService.of({\n get: makeWalletChainIdGetter(supportedChainId, () => mockWalletClient),\n })\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"mock-wallet-provider.js","sourceRoot":"","sources":["../../src/testing-kit/mock-wallet-provider.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAAmC,EAAE,EAAkB,EAAE,CAAC,CAAC;IAChG,EAAE,EAAE,MAAM,CAAC,EAAE;IACb,cAAc,EAAE,MAAM,CAAC,cAAc;IACrC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;CAC9D,CAAC,CAAC"}
1
+ {"version":3,"file":"mock-wallet-provider.js","sourceRoot":"","sources":["../../src/testing-kit/mock-wallet-provider.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,SAAmC,EAAE,EAAkB,EAAE,CAAC,CAAC;IAChG,EAAE,EAAE,MAAM,CAAC,EAAE;IACb,cAAc,EAAE,MAAM,CAAC,cAAc;IACrC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;CAC9D,CAAC,CAAC","sourcesContent":["import type { WalletProvider } from \"@/src/wallet/index.js\";\n\nexport type MockWalletProviderConfig = {\n request?: (args: {\n method: string;\n params?: unknown[] | Record<string, unknown>;\n }) => Promise<unknown>;\n on?: (event: string, handler: (...args: unknown[]) => void) => void;\n removeListener?: (event: string, handler: (...args: unknown[]) => void) => void;\n};\n\n/**\n * Creates a mock WalletProvider for testing wallet connection flows\n */\nexport const makeMockWalletProvider = (config: MockWalletProviderConfig = {}): WalletProvider => ({\n on: config.on,\n removeListener: config.removeListener,\n request: config.request ?? (() => Promise.resolve(undefined)),\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"test-layer.js","sourceRoot":"","sources":["../../src/testing-kit/test-layer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"test-layer.js","sourceRoot":"","sources":["../../src/testing-kit/test-layer.ts"],"names":[],"mappings":"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","sourcesContent":["import { FetchHttpClient } from \"@effect/platform\";\nimport { Layer } from \"effect\";\nimport { mainnet } from \"viem/chains\";\nimport type { BalanceService } from \"@/src/balance/index.js\";\nimport { BalanceServiceLive } from \"@/src/balance/index.js\";\nimport type { BlockService } from \"@/src/block/index.js\";\nimport { BlockServiceLive } from \"@/src/block/index.js\";\nimport type { ContractPipeline, ContractReader, ContractWriter } from \"@/src/contract/index.js\";\nimport {\n ContractPipelineLive,\n ContractReaderLive,\n ContractWriterLive,\n} from \"@/src/contract/index.js\";\nimport type { PublicClientService, WalletClientService } from \"@/src/core/index.js\";\nimport type { DeployService } from \"@/src/deploy/index.js\";\nimport { DeployServiceLive } from \"@/src/deploy/index.js\";\nimport type { EnsResolver } from \"@/src/ens/index.js\";\nimport { EnsResolverLive } from \"@/src/ens/index.js\";\nimport type { Erc721Service } from \"@/src/erc721/index.js\";\nimport { Erc721ServiceLive } from \"@/src/erc721/index.js\";\nimport type { EventStream, ReliableEventStream } from \"@/src/events/index.js\";\nimport { EventStreamLive, ReliableEventStreamLive } from \"@/src/events/index.js\";\nimport type { GasService } from \"@/src/gas/index.js\";\nimport { GasServiceLive } from \"@/src/gas/index.js\";\nimport type { NonceService } from \"@/src/nonce/index.js\";\nimport { NonceServiceLive } from \"@/src/nonce/index.js\";\nimport type { SignatureService } from \"@/src/signature/index.js\";\nimport { SignatureServiceLive } from \"@/src/signature/index.js\";\nimport type { SimulationService } from \"@/src/simulation/index.js\";\nimport { SimulationServiceLive } from \"@/src/simulation/index.js\";\nimport type { SubscriptionService } from \"@/src/subscriptions/index.js\";\nimport { SubscriptionServiceLive } from \"@/src/subscriptions/index.js\";\nimport type { MockBalanceServiceConfig } from \"@/src/testing-kit/mock-balance-service.js\";\nimport { makeMockBalanceServiceLayer } from \"@/src/testing-kit/mock-balance-service.js\";\nimport type { MockBlockServiceConfig } from \"@/src/testing-kit/mock-block-service.js\";\nimport { makeMockBlockServiceLayer } from \"@/src/testing-kit/mock-block-service.js\";\nimport type { MockDeployServiceConfig } from \"@/src/testing-kit/mock-deploy-service.js\";\nimport { makeMockDeployServiceLayer } from \"@/src/testing-kit/mock-deploy-service.js\";\nimport type { MockErc721ServiceConfig } from \"@/src/testing-kit/mock-erc721-service.js\";\nimport { makeMockErc721ServiceLayer } from \"@/src/testing-kit/mock-erc721-service.js\";\nimport type { MockGasServiceConfig } from \"@/src/testing-kit/mock-gas-service.js\";\nimport { makeMockGasServiceLayer } from \"@/src/testing-kit/mock-gas-service.js\";\nimport type { MockNonceServiceConfig } from \"@/src/testing-kit/mock-nonce-service.js\";\nimport { makeMockNonceServiceLayer } from \"@/src/testing-kit/mock-nonce-service.js\";\nimport type { MockPublicClientConfig } from \"@/src/testing-kit/mock-public-client.js\";\nimport { makeMockPublicClientLayer } from \"@/src/testing-kit/mock-public-client.js\";\nimport type { MockSignatureServiceConfig } from \"@/src/testing-kit/mock-signature-service.js\";\nimport { makeMockSignatureServiceLayer } from \"@/src/testing-kit/mock-signature-service.js\";\nimport type { MockSimulationServiceConfig } from \"@/src/testing-kit/mock-simulation-service.js\";\nimport { makeMockSimulationServiceLayer } from \"@/src/testing-kit/mock-simulation-service.js\";\nimport type { MockSubscriptionServiceConfig } from \"@/src/testing-kit/mock-subscription-service.js\";\nimport { makeMockSubscriptionServiceLayer } from \"@/src/testing-kit/mock-subscription-service.js\";\nimport type { MockWalletClientConfig } from \"@/src/testing-kit/mock-wallet-client.js\";\nimport { makeMockWalletClientLayer } from \"@/src/testing-kit/mock-wallet-client.js\";\nimport type { TxManager, TxReplacement } from \"@/src/tx/index.js\";\nimport { TxManagerLive, TxReplacementLive } from \"@/src/tx/index.js\";\n\n/**\n * Configuration for the test layer composer\n *\n * @example\n * ```typescript\n * const layer = makeEffectEvmTestLayer({\n * publicClient: {\n * readContract: async () => 1000n,\n * getEnsAddress: async () => \"0x...\",\n * },\n * walletClient: {\n * writeContract: async () => \"0xtxhash...\",\n * },\n * erc721Service: {\n * ownerOf: () => Effect.succeed(\"0x...\" as Address),\n * },\n * });\n * ```\n */\nexport type TestLayerConfig = {\n /**\n * Configuration overrides for the mock PublicClient\n */\n publicClient?: MockPublicClientConfig;\n\n /**\n * Configuration overrides for the mock WalletClient\n */\n walletClient?: MockWalletClientConfig;\n\n /**\n * Configuration overrides for the mock BalanceService\n */\n balanceService?: MockBalanceServiceConfig;\n\n /**\n * Configuration overrides for the mock BlockService\n */\n blockService?: MockBlockServiceConfig;\n\n /**\n * Configuration overrides for the mock Erc721Service\n */\n erc721Service?: MockErc721ServiceConfig;\n\n /**\n * Configuration overrides for the mock GasService\n */\n gasService?: MockGasServiceConfig;\n\n /**\n * Configuration overrides for the mock NonceService\n */\n nonceService?: MockNonceServiceConfig;\n\n /**\n * Configuration overrides for the mock SignatureService\n */\n signatureService?: MockSignatureServiceConfig;\n\n /**\n * Configuration overrides for the mock SubscriptionService\n */\n subscriptionService?: MockSubscriptionServiceConfig;\n\n /**\n * Configuration overrides for the mock DeployService\n */\n deployService?: MockDeployServiceConfig;\n\n /**\n * Configuration overrides for the mock SimulationService\n */\n simulationService?: MockSimulationServiceConfig;\n\n /**\n * The chainId to support (default: 1 mainnet)\n */\n chainId?: number;\n};\n\n/**\n * Internal layer combining all application services\n * Requires PublicClientService and WalletClientService to be provided\n *\n * Layer composition order matters:\n * 1. Base services (directly client-bound, no service deps)\n * 2. Dependent services (require base services, e.g. Balance uses ContractReader, Deploy uses TxManager)\n * 3. High-level services (ContractPipeline, ReliableEventStream, Simulation)\n */\nconst baseServices = Layer.mergeAll(\n BlockServiceLive,\n ContractReaderLive,\n ContractWriterLive,\n GasServiceLive,\n NonceServiceLive,\n SignatureServiceLive,\n SubscriptionServiceLive,\n EventStreamLive,\n EnsResolverLive\n);\n\nconst txServices = Layer.provideMerge(\n TxManagerLive,\n Layer.provideMerge(TxReplacementLive, baseServices)\n);\n\nconst applicationServices = Layer.provideMerge(\n Layer.mergeAll(\n BalanceServiceLive,\n ContractPipelineLive,\n DeployServiceLive,\n Erc721ServiceLive,\n ReliableEventStreamLive,\n SimulationServiceLive\n ),\n txServices\n).pipe(Layer.provide(FetchHttpClient.layer));\n\n/**\n * Creates a complete effect-evm test layer with mocked boundaries\n *\n * This layer provides all effect-evm services with mocked PublicClientService\n * and WalletClientService boundaries. The mock boundaries use sensible defaults\n * that can be overridden via configuration.\n *\n * Use this for integration-style tests where you want real service implementations\n * with controlled network boundaries.\n *\n * @param config - Optional configuration to customize mock behaviors\n * @returns A Layer providing all effect-evm services\n *\n * @example\n * ```typescript\n * import { describe, expect, it } from \"@effect/vitest\";\n * import { Effect, Layer } from \"effect\";\n * import { ContractReader } from \"effect-evm\";\n * import { makeEffectEvmTestLayer } from \"effect-evm/testing-kit\";\n *\n * describe(\"MyFeature\", () => {\n * const testLayer = makeEffectEvmTestLayer({\n * publicClient: {\n * readContract: async () => 1000n,\n * },\n * });\n *\n * it.effect(\"reads contract value\", () =>\n * Effect.gen(function* () {\n * const reader = yield* ContractReader;\n * const result = yield* reader.read({ ... });\n * expect(result).toBe(1000n);\n * }).pipe(Effect.provide(testLayer))\n * );\n * });\n * ```\n */\nexport function makeEffectEvmTestLayer(\n config: TestLayerConfig = {}\n): Layer.Layer<\n | PublicClientService\n | WalletClientService\n | BalanceService\n | BlockService\n | ContractReader\n | ContractWriter\n | ContractPipeline\n | TxManager\n | TxReplacement\n | EventStream\n | ReliableEventStream\n | EnsResolver\n | Erc721Service\n | GasService\n | NonceService\n | SignatureService\n | SubscriptionService\n | DeployService\n | SimulationService\n> {\n const chainId = config.chainId ?? mainnet.id;\n\n // Create boundary mocks - use real services if no config provided\n const clientLayers = Layer.mergeAll(\n makeMockPublicClientLayer(config.publicClient ?? {}, chainId),\n makeMockWalletClientLayer(config.walletClient ?? {}, chainId)\n );\n\n // Create service mocks if config is provided, otherwise use real implementations from applicationServices\n let serviceMockLayer = Layer.empty;\n\n if (config.balanceService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n makeMockBalanceServiceLayer(config.balanceService, chainId)\n );\n }\n if (config.blockService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n makeMockBlockServiceLayer(config.blockService, chainId)\n );\n }\n if (config.erc721Service) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n makeMockErc721ServiceLayer(config.erc721Service, chainId)\n );\n }\n if (config.gasService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n makeMockGasServiceLayer(config.gasService, chainId)\n );\n }\n if (config.nonceService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n makeMockNonceServiceLayer(config.nonceService, chainId)\n );\n }\n if (config.signatureService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n makeMockSignatureServiceLayer(config.signatureService)\n );\n }\n if (config.subscriptionService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n makeMockSubscriptionServiceLayer(config.subscriptionService, chainId)\n );\n }\n if (config.deployService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n makeMockDeployServiceLayer(config.deployService, chainId)\n );\n }\n if (config.simulationService) {\n serviceMockLayer = Layer.merge(\n serviceMockLayer,\n makeMockSimulationServiceLayer(config.simulationService, chainId)\n );\n }\n\n // Provide boundary mocks and service mocks to application services\n const baseLayer = Layer.provideMerge(applicationServices, clientLayers);\n\n return Layer.merge(baseLayer, serviceMockLayer) as Layer.Layer<\n | PublicClientService\n | WalletClientService\n | BalanceService\n | BlockService\n | ContractReader\n | ContractWriter\n | ContractPipeline\n | TxManager\n | TxReplacement\n | EventStream\n | ReliableEventStream\n | EnsResolver\n | Erc721Service\n | GasService\n | NonceService\n | SignatureService\n | SubscriptionService\n | DeployService\n | SimulationService\n >;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transfer/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transfer/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC","sourcesContent":["export * from \"./service.js\";\n"]}