@prb/effect-evm 1.0.0-beta.2 → 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 (217) 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.js.map +1 -1
  9. package/dist/balance/utils.js.map +1 -1
  10. package/dist/block/errors.js.map +1 -1
  11. package/dist/block/index.js.map +1 -1
  12. package/dist/block/service.js.map +1 -1
  13. package/dist/block/service.test.integration.js.map +1 -1
  14. package/dist/constants/index.js.map +1 -1
  15. package/dist/contract/cross-chain-reader.js.map +1 -1
  16. package/dist/contract/index.js.map +1 -1
  17. package/dist/contract/pipeline/index.js.map +1 -1
  18. package/dist/contract/pipeline/internal/core.js.map +1 -1
  19. package/dist/contract/pipeline/internal/helpers.js.map +1 -1
  20. package/dist/contract/pipeline/internal/nonce.js.map +1 -1
  21. package/dist/contract/pipeline/internal/prepare.js.map +1 -1
  22. package/dist/contract/pipeline/internal/receipt.js.map +1 -1
  23. package/dist/contract/pipeline/live.js.map +1 -1
  24. package/dist/contract/pipeline/service.js.map +1 -1
  25. package/dist/contract/pipeline/types.js.map +1 -1
  26. package/dist/contract/pipeline/write-and-track.js.map +1 -1
  27. package/dist/contract/pipeline/write-and-wait.js.map +1 -1
  28. package/dist/contract/pipeline.js.map +1 -1
  29. package/dist/contract/reader.js.map +1 -1
  30. package/dist/contract/typed-contract.js.map +1 -1
  31. package/dist/contract/writer.js.map +1 -1
  32. package/dist/core/clients/index.js.map +1 -1
  33. package/dist/core/clients/public-client.js.map +1 -1
  34. package/dist/core/clients/wallet-client.js.map +1 -1
  35. package/dist/core/errors/client.js.map +1 -1
  36. package/dist/core/errors/contract.js.map +1 -1
  37. package/dist/core/errors/erc20.js.map +1 -1
  38. package/dist/core/errors/event.js.map +1 -1
  39. package/dist/core/errors/index.js.map +1 -1
  40. package/dist/core/errors/predicates.js.map +1 -1
  41. package/dist/core/errors/transaction.js.map +1 -1
  42. package/dist/core/errors/viem-mapper.js.map +1 -1
  43. package/dist/core/index.js.map +1 -1
  44. package/dist/deploy/errors.js.map +1 -1
  45. package/dist/deploy/index.js.map +1 -1
  46. package/dist/deploy/service.js.map +1 -1
  47. package/dist/eip7702/erc7579.js.map +1 -1
  48. package/dist/eip7702/errors.js.map +1 -1
  49. package/dist/eip7702/index.js.map +1 -1
  50. package/dist/eip7702/service.js.map +1 -1
  51. package/dist/ens/ens.js.map +1 -1
  52. package/dist/ens/errors.js.map +1 -1
  53. package/dist/ens/index.js.map +1 -1
  54. package/dist/erc20/allowance/core.js.map +1 -1
  55. package/dist/erc20/allowance/index.js.map +1 -1
  56. package/dist/erc20/allowance/no-output.js.map +1 -1
  57. package/dist/erc20/allowance/types.js.map +1 -1
  58. package/dist/erc20/index.js.map +1 -1
  59. package/dist/erc20/metadata.js.map +1 -1
  60. package/dist/erc721/errors.js.map +1 -1
  61. package/dist/erc721/helpers.js.map +1 -1
  62. package/dist/erc721/index.js.map +1 -1
  63. package/dist/erc721/metadata.js.map +1 -1
  64. package/dist/erc721/service.js.map +1 -1
  65. package/dist/events/backfill.js.map +1 -1
  66. package/dist/events/backfill.test.integration.js.map +1 -1
  67. package/dist/events/cursor.js.map +1 -1
  68. package/dist/events/decoder.js.map +1 -1
  69. package/dist/events/index.js.map +1 -1
  70. package/dist/events/reliable-stream-simple.test.integration.js.map +1 -1
  71. package/dist/events/reliable-stream.js.map +1 -1
  72. package/dist/events/reliable-stream.test.integration.js.map +1 -1
  73. package/dist/events/stream.js.map +1 -1
  74. package/dist/events/stream.test.integration.js.map +1 -1
  75. package/dist/gas/errors.js.map +1 -1
  76. package/dist/gas/estimator.js.map +1 -1
  77. package/dist/gas/index.js.map +1 -1
  78. package/dist/gas/service.js.map +1 -1
  79. package/dist/gas/service.test.integration.js.map +1 -1
  80. package/dist/index.js.map +1 -1
  81. package/dist/integrations/react-hooks/convenience/index.js.map +1 -1
  82. package/dist/integrations/react-hooks/internal/error.js.map +1 -1
  83. package/dist/integrations/react-hooks/internal/is-dev.js.map +1 -1
  84. package/dist/integrations/react-hooks/internal/runtime.js.map +1 -1
  85. package/dist/integrations/react-hooks/internal/scoped-run.js.map +1 -1
  86. package/dist/integrations/react-hooks/internal/stable.js.map +1 -1
  87. package/dist/integrations/react-hooks/primitives/use-effect-memo-factory.js.map +1 -1
  88. package/dist/integrations/react-hooks/primitives/use-effect.js.map +1 -1
  89. package/dist/integrations/react-hooks/primitives/use-fork-effect.js.map +1 -1
  90. package/dist/integrations/react-hooks/primitives/use-stream.js.map +1 -1
  91. package/dist/integrations/react-hooks/primitives.js.map +1 -1
  92. package/dist/integrations/react-hooks/provider.js.map +1 -1
  93. package/dist/integrations/react-hooks/wagmi/index.js.map +1 -1
  94. package/dist/integrations/react-hooks/wallet-provider-ref.js.map +1 -1
  95. package/dist/integrations/wagmi/index.js.map +1 -1
  96. package/dist/integrations/wagmi/layers.js.map +1 -1
  97. package/dist/internal/index.js.map +1 -1
  98. package/dist/internal/numbers.js.map +1 -1
  99. package/dist/internal/schedule.js.map +1 -1
  100. package/dist/internal/stream-adapters.js.map +1 -1
  101. package/dist/internal/viem-effect.js.map +1 -1
  102. package/dist/nonce/index.js.map +1 -1
  103. package/dist/nonce/manager.js.map +1 -1
  104. package/dist/nonce/service.js.map +1 -1
  105. package/dist/nonce/service.test.integration.js.map +1 -1
  106. package/dist/platform/browser/cursor-store/index.js.map +1 -1
  107. package/dist/platform/browser/cursor-store/local-storage.js.map +1 -1
  108. package/dist/platform/browser/index.js.map +1 -1
  109. package/dist/platform/browser/layers.js.map +1 -1
  110. package/dist/platform/browser/storage/errors.js.map +1 -1
  111. package/dist/platform/browser/storage/index.js.map +1 -1
  112. package/dist/platform/browser/storage/local-storage.js.map +1 -1
  113. package/dist/platform/browser/tx-persistence/index.js.map +1 -1
  114. package/dist/platform/browser/tx-persistence/persistence.js.map +1 -1
  115. package/dist/platform/browser/tx-store/errors.js.map +1 -1
  116. package/dist/platform/browser/tx-store/index.js.map +1 -1
  117. package/dist/platform/browser/tx-store/local-storage.js.map +1 -1
  118. package/dist/platform/browser/tx-store/store.js.map +1 -1
  119. package/dist/platform/browser/tx-store/types.js.map +1 -1
  120. package/dist/presets/index.js.map +1 -1
  121. package/dist/presets/layers.js.map +1 -1
  122. package/dist/presets/transports.js.map +1 -1
  123. package/dist/query/chain-head.js.map +1 -1
  124. package/dist/query/client.js.map +1 -1
  125. package/dist/query/client.test.integration.js.map +1 -1
  126. package/dist/query/contract-query.js.map +1 -1
  127. package/dist/query/contract-query.test.integration.js.map +1 -1
  128. package/dist/query/index.js.map +1 -1
  129. package/dist/query/multicall-batcher.js.map +1 -1
  130. package/dist/react-hooks/index.js.map +1 -1
  131. package/dist/react-hooks/use-is-safe-multisig.js.map +1 -1
  132. package/dist/react-hooks/use-safe-context.js.map +1 -1
  133. package/dist/react-hooks/wagmi/index.js.map +1 -1
  134. package/dist/rpc/cache.js.map +1 -1
  135. package/dist/rpc/circuit-breaker.js.map +1 -1
  136. package/dist/rpc/dedup.js.map +1 -1
  137. package/dist/rpc/index.js.map +1 -1
  138. package/dist/rpc/retry.js.map +1 -1
  139. package/dist/rpc/routemesh.js.map +1 -1
  140. package/dist/safe/adapter.js.map +1 -1
  141. package/dist/safe/detection.js.map +1 -1
  142. package/dist/safe/detection.test.integration.js.map +1 -1
  143. package/dist/safe/errors.js.map +1 -1
  144. package/dist/safe/index.js.map +1 -1
  145. package/dist/safe/live.js.map +1 -1
  146. package/dist/safe/service.js.map +1 -1
  147. package/dist/safe/service.test.integration.js.map +1 -1
  148. package/dist/safe/simulation/abis.js.map +1 -1
  149. package/dist/safe/simulation/addresses.js.map +1 -1
  150. package/dist/safe/simulation/encoding.js.map +1 -1
  151. package/dist/safe/simulation/errors.js.map +1 -1
  152. package/dist/safe/simulation/index.js.map +1 -1
  153. package/dist/safe/simulation/service.js.map +1 -1
  154. package/dist/safe/simulation/types.js.map +1 -1
  155. package/dist/safe/types.js.map +1 -1
  156. package/dist/signature/errors.js.map +1 -1
  157. package/dist/signature/index.js.map +1 -1
  158. package/dist/signature/service.js.map +1 -1
  159. package/dist/signature/service.test.integration.js.map +1 -1
  160. package/dist/signature/utils.js.map +1 -1
  161. package/dist/simulation/errors.js.map +1 -1
  162. package/dist/simulation/index.js.map +1 -1
  163. package/dist/simulation/service.js.map +1 -1
  164. package/dist/simulation/tenderly.js.map +1 -1
  165. package/dist/simulation/tenderly.test.integration.js.map +1 -1
  166. package/dist/simulation/types.js.map +1 -1
  167. package/dist/subscriptions/block-subscription.js.map +1 -1
  168. package/dist/subscriptions/errors.js.map +1 -1
  169. package/dist/subscriptions/index.js.map +1 -1
  170. package/dist/subscriptions/log-subscription.js.map +1 -1
  171. package/dist/subscriptions/pending-tx.js.map +1 -1
  172. package/dist/subscriptions/service.js.map +1 -1
  173. package/dist/telemetry/index.js.map +1 -1
  174. package/dist/telemetry/logger.js.map +1 -1
  175. package/dist/telemetry/tracer.js.map +1 -1
  176. package/dist/testing-kit/_fixtures/addresses.js.map +1 -1
  177. package/dist/testing-kit/_fixtures/receipts.js.map +1 -1
  178. package/dist/testing-kit/helpers.js.map +1 -1
  179. package/dist/testing-kit/index.js.map +1 -1
  180. package/dist/testing-kit/mock-balance-service.js.map +1 -1
  181. package/dist/testing-kit/mock-block-service.js.map +1 -1
  182. package/dist/testing-kit/mock-cross-chain-reader.js.map +1 -1
  183. package/dist/testing-kit/mock-deploy-service.js.map +1 -1
  184. package/dist/testing-kit/mock-erc721-service.js.map +1 -1
  185. package/dist/testing-kit/mock-gas-service.js.map +1 -1
  186. package/dist/testing-kit/mock-nonce-service.js.map +1 -1
  187. package/dist/testing-kit/mock-public-client.js.map +1 -1
  188. package/dist/testing-kit/mock-signature-service.js.map +1 -1
  189. package/dist/testing-kit/mock-simulation-service.js.map +1 -1
  190. package/dist/testing-kit/mock-subscription-service.js.map +1 -1
  191. package/dist/testing-kit/mock-transfer-service.js.map +1 -1
  192. package/dist/testing-kit/mock-wallet-client.js.map +1 -1
  193. package/dist/testing-kit/mock-wallet-provider.js.map +1 -1
  194. package/dist/testing-kit/test-layer.js.map +1 -1
  195. package/dist/transfer/index.js.map +1 -1
  196. package/dist/transfer/service.js.map +1 -1
  197. package/dist/tx/fees.js.map +1 -1
  198. package/dist/tx/index.js.map +1 -1
  199. package/dist/tx/manager.js.map +1 -1
  200. package/dist/tx/manager.test.integration.js.map +1 -1
  201. package/dist/tx/policy.js.map +1 -1
  202. package/dist/tx/replacement.js.map +1 -1
  203. package/dist/tx/tracker.js.map +1 -1
  204. package/dist/types/abi.js.map +1 -1
  205. package/dist/types/index.js.map +1 -1
  206. package/dist/types/params.js.map +1 -1
  207. package/dist/types/tx-overrides.js.map +1 -1
  208. package/dist/wagmi/index.js.map +1 -1
  209. package/dist/wagmi/layers.js.map +1 -1
  210. package/dist/wallet/errors.js.map +1 -1
  211. package/dist/wallet/index.js.map +1 -1
  212. package/dist/wallet/lifecycle.js.map +1 -1
  213. package/dist/wallet/operations.js.map +1 -1
  214. package/dist/wallet/provider-ref.js.map +1 -1
  215. package/dist/wallet/service.js.map +1 -1
  216. package/dist/wallet/types.js.map +1 -1
  217. package/package.json +22 -10
@@ -1 +1 @@
1
- {"version":3,"file":"local-storage.js","sourceRoot":"","sources":["../../../../src/platform/browser/tx-store/local-storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"local-storage.js","sourceRoot":"","sources":["../../../../src/platform/browser/tx-store/local-storage.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect, Layer } from \"effect\";\nimport { BrowserStorage } from \"../storage/index.js\";\nimport type { TxStoreError } from \"./errors.js\";\nimport { TxStore } from \"./store.js\";\nimport type { PersistedTx } from \"./types.js\";\n\n/**\n * Configuration for LocalStorageTxStore.\n */\nexport type LocalStorageTxStoreConfig = {\n /**\n * Maximum number of transactions to retain in storage.\n * When exceeded, oldest terminal (mined/failed) transactions are pruned.\n * @default 200\n */\n maxTxs?: number;\n};\n\n/**\n * Default configuration for LocalStorageTxStore.\n */\nconst DEFAULT_CONFIG: Required<LocalStorageTxStoreConfig> = {\n maxTxs: 200,\n};\n\n/**\n * Key prefix for transaction storage.\n */\nconst TX_KEY_PREFIX = \"ew3:v1:tx:\";\n\n/**\n * Key for the transaction index (stores array of tx IDs).\n */\nconst INDEX_KEY = \"ew3:v1:tx:index\";\n\n/**\n * Key prefix for quarantined corrupt transactions.\n */\nconst CORRUPT_KEY_PREFIX = \"ew3:v1:tx:corrupt:\";\n\n/**\n * Generate a storage key for a transaction.\n */\nfunction makeTxKey(chainId: number, rootHash: string): string {\n return `${TX_KEY_PREFIX}${chainId}:${rootHash}`;\n}\n\n/**\n * Parse transaction ID into chainId and rootHash.\n */\nfunction parseTxId(id: string): { chainId: number; rootHash: string } | null {\n const parts = id.split(\":\");\n if (parts.length !== 2) {\n return null;\n }\n\n const chainId = Number.parseInt(parts[0], 10);\n if (Number.isNaN(chainId)) {\n return null;\n }\n\n return { chainId, rootHash: parts[1] };\n}\n\n/**\n * Read the transaction index from storage.\n */\nfunction readIndex(storage: BrowserStorage): Effect.Effect<string[], TxStoreError> {\n return Effect.gen(function* () {\n const raw = yield* storage.get(INDEX_KEY);\n if (raw === null) {\n return [];\n }\n\n try {\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n // Index corrupted, reset to empty\n return [];\n }\n });\n}\n\n/**\n * Write the transaction index to storage.\n */\nfunction writeIndex(storage: BrowserStorage, index: string[]): Effect.Effect<void, TxStoreError> {\n return storage.set(INDEX_KEY, JSON.stringify(index));\n}\n\n/**\n * Read a single transaction from storage.\n * Returns null if not found or if decode fails (quarantines corrupt data).\n */\nfunction readTx(\n storage: BrowserStorage,\n id: string\n): Effect.Effect<PersistedTx | null, TxStoreError> {\n return Effect.gen(function* () {\n const parsed = parseTxId(id);\n if (!parsed) {\n return null;\n }\n\n const key = makeTxKey(parsed.chainId, parsed.rootHash);\n const raw = yield* storage.get(key);\n if (raw === null) {\n return null;\n }\n\n try {\n const tx = JSON.parse(raw) as PersistedTx;\n return tx;\n } catch (_error) {\n // Quarantine corrupt data\n const quarantineKey = `${CORRUPT_KEY_PREFIX}${id}:${Date.now()}`;\n yield* storage.set(quarantineKey, raw);\n yield* storage.remove(key);\n return null;\n }\n });\n}\n\n/**\n * Write a single transaction to storage.\n */\nfunction writeTx(storage: BrowserStorage, tx: PersistedTx): Effect.Effect<void, TxStoreError> {\n return Effect.gen(function* () {\n const parsed = parseTxId(tx.id);\n if (!parsed) {\n return;\n }\n\n const key = makeTxKey(parsed.chainId, parsed.rootHash);\n const raw = JSON.stringify(tx);\n yield* storage.set(key, raw);\n });\n}\n\n/**\n * Delete a single transaction from storage.\n */\nfunction deleteTx(storage: BrowserStorage, id: string): Effect.Effect<void, TxStoreError> {\n return Effect.gen(function* () {\n const parsed = parseTxId(id);\n if (!parsed) {\n return;\n }\n\n const key = makeTxKey(parsed.chainId, parsed.rootHash);\n yield* storage.remove(key);\n });\n}\n\n/**\n * Prune oldest terminal transactions if maxTxs is exceeded.\n */\nfunction pruneIfNeeded(\n storage: BrowserStorage,\n txs: PersistedTx[],\n maxTxs: number\n): Effect.Effect<PersistedTx[], TxStoreError> {\n return Effect.gen(function* () {\n if (txs.length <= maxTxs) {\n return txs;\n }\n\n // Separate in-flight from terminal\n const inFlight = txs.filter((tx) => tx.status === \"submitted\" || tx.status === \"pending\");\n const terminal = txs.filter((tx) => tx.status === \"mined\" || tx.status === \"failed\");\n\n // Sort terminal by updatedAt (oldest first)\n terminal.sort((a, b) => a.updatedAt - b.updatedAt);\n\n // Calculate how many to prune\n const totalAfterPrune = maxTxs;\n const keepTerminal = Math.max(0, totalAfterPrune - inFlight.length);\n const toPrune = terminal.slice(0, terminal.length - keepTerminal);\n\n // Delete pruned transactions\n for (const tx of toPrune) {\n yield* deleteTx(storage, tx.id);\n }\n\n // Return remaining transactions\n const kept = terminal.slice(terminal.length - keepTerminal);\n return [...inFlight, ...kept];\n });\n}\n\n/**\n * LocalStorage-based implementation of TxStore.\n * Uses an index to track all transaction IDs for efficient retrieval.\n */\nexport const makeLocalStorageTxStoreLive = (\n config: LocalStorageTxStoreConfig = {}\n): Layer.Layer<TxStore, never, BrowserStorage> => {\n const finalConfig = { ...DEFAULT_CONFIG, ...config };\n\n return Layer.effect(\n TxStore,\n Effect.gen(function* () {\n const storage = yield* BrowserStorage;\n\n return TxStore.of({\n delete: (id: string) =>\n Effect.gen(function* () {\n // Delete the transaction\n yield* deleteTx(storage, id);\n\n // Remove from index\n const index = yield* readIndex(storage);\n const newIndex = index.filter((txId) => txId !== id);\n yield* writeIndex(storage, newIndex);\n }),\n\n get: (id: string) => readTx(storage, id),\n getAll: () =>\n Effect.gen(function* () {\n const index = yield* readIndex(storage);\n const txs: PersistedTx[] = [];\n\n for (const id of index) {\n const tx = yield* readTx(storage, id);\n if (tx !== null) {\n txs.push(tx);\n }\n }\n\n // Update index to remove any IDs that failed to load\n const validIds = txs.map((tx) => tx.id);\n if (validIds.length !== index.length) {\n yield* writeIndex(storage, validIds);\n }\n\n return txs;\n }),\n\n getInFlight: () =>\n Effect.gen(function* () {\n const index = yield* readIndex(storage);\n const inFlight: PersistedTx[] = [];\n\n for (const id of index) {\n const tx = yield* readTx(storage, id);\n if (tx !== null && (tx.status === \"submitted\" || tx.status === \"pending\")) {\n inFlight.push(tx);\n }\n }\n\n return inFlight;\n }),\n\n upsert: (tx: PersistedTx) =>\n Effect.gen(function* () {\n // Write the transaction\n yield* writeTx(storage, tx);\n\n // Update index\n const index = yield* readIndex(storage);\n if (!index.includes(tx.id)) {\n index.push(tx.id);\n }\n\n // Load all transactions for pruning\n const allTxs: PersistedTx[] = [];\n for (const id of index) {\n const loadedTx = yield* readTx(storage, id);\n if (loadedTx !== null) {\n allTxs.push(loadedTx);\n }\n }\n\n // Prune if needed\n const prunedTxs = yield* pruneIfNeeded(storage, allTxs, finalConfig.maxTxs);\n const prunedIds = prunedTxs.map((t) => t.id);\n\n // Write updated index\n yield* writeIndex(storage, prunedIds);\n }),\n });\n })\n );\n};\n\n/**\n * LocalStorage-based TxStore layer with default configuration.\n */\nexport const LocalStorageTxStoreLive = makeLocalStorageTxStoreLive();\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/platform/browser/tx-store/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAuCrD,MAAM,OAAO,OAAQ,SAAQ,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAyB;CAAG;AAMnF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAC7C,OAAO,EACP,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,EAAuB,CAAC,CAAC;IAE9D,OAAO,OAAO,CAAC,EAAE,CAAC;QAChB,MAAM,EAAE,CAAC,EAAU,EAAE,EAAE,CACrB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEJ,GAAG,EAAE,CAAC,EAAU,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;QAC7B,CAAC,CAAC;QACJ,MAAM,EAAE,GAAG,EAAE,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC;QAEJ,WAAW,EAAE,GAAG,EAAE,CAChB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACpC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,WAAW,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,CAC7D,CAAC;QACJ,CAAC,CAAC;QAEJ,MAAM,EAAE,CAAC,EAAe,EAAE,EAAE,CAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACtB,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;KACL,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../../../src/platform/browser/tx-store/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAuCrD,MAAM,OAAO,OAAQ,SAAQ,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,EAAyB;CAAG;AAMnF,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,MAAM,CAC7C,OAAO,EACP,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,EAAuB,CAAC,CAAC;IAE9D,OAAO,OAAO,CAAC,EAAE,CAAC;QAChB,MAAM,EAAE,CAAC,EAAU,EAAE,EAAE,CACrB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAClB,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEJ,GAAG,EAAE,CAAC,EAAU,EAAE,EAAE,CAClB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;QAC7B,CAAC,CAAC;QACJ,MAAM,EAAE,GAAG,EAAE,CACX,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC;QAEJ,WAAW,EAAE,GAAG,EAAE,CAChB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAClC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACpC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,WAAW,IAAI,EAAE,CAAC,MAAM,KAAK,SAAS,CAC7D,CAAC;QACJ,CAAC,CAAC;QAEJ,MAAM,EAAE,CAAC,EAAe,EAAE,EAAE,CAC1B,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC/B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACtB,OAAO,MAAM,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;KACL,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC","sourcesContent":["import { Context, Effect, Layer, Ref } from \"effect\";\nimport type { TxStoreError } from \"./errors.js\";\nimport type { PersistedTx } from \"./types.js\";\n\n/**\n * Service interface for transaction store operations.\n * Provides CRUD operations for persisted transaction records.\n */\nexport type TxStoreShape = {\n /**\n * Retrieve all transactions from the store.\n */\n readonly getAll: () => Effect.Effect<PersistedTx[], TxStoreError>;\n\n /**\n * Retrieve a single transaction by ID.\n * Returns null if the transaction does not exist.\n */\n readonly get: (id: string) => Effect.Effect<PersistedTx | null, TxStoreError>;\n\n /**\n * Insert or update a transaction in the store.\n */\n readonly upsert: (tx: PersistedTx) => Effect.Effect<void, TxStoreError>;\n\n /**\n * Delete a transaction from the store by ID.\n */\n readonly delete: (id: string) => Effect.Effect<void, TxStoreError>;\n\n /**\n * Retrieve all in-flight transactions (submitted or pending status).\n */\n readonly getInFlight: () => Effect.Effect<PersistedTx[], TxStoreError>;\n};\n\n/**\n * Context tag for the TxStore service.\n */\nexport class TxStore extends Context.Tag(\"ew3/TxStore\")<TxStore, TxStoreShape>() {}\n\n/**\n * In-memory implementation of TxStore using a Ref-based Map.\n * Useful for testing or when persistence is not required.\n */\nexport const InMemoryTxStoreLive = Layer.effect(\n TxStore,\n Effect.gen(function* () {\n const store = yield* Ref.make(new Map<string, PersistedTx>());\n\n return TxStore.of({\n delete: (id: string) =>\n Effect.gen(function* () {\n yield* Ref.update(store, (map) => {\n const newMap = new Map(map);\n newMap.delete(id);\n return newMap;\n });\n }),\n\n get: (id: string) =>\n Effect.gen(function* () {\n const map = yield* Ref.get(store);\n return map.get(id) ?? null;\n }),\n getAll: () =>\n Effect.gen(function* () {\n const map = yield* Ref.get(store);\n return Array.from(map.values());\n }),\n\n getInFlight: () =>\n Effect.gen(function* () {\n const map = yield* Ref.get(store);\n return Array.from(map.values()).filter(\n (tx) => tx.status === \"submitted\" || tx.status === \"pending\"\n );\n }),\n\n upsert: (tx: PersistedTx) =>\n Effect.gen(function* () {\n yield* Ref.update(store, (map) => {\n const newMap = new Map(map);\n newMap.set(tx.id, tx);\n return newMap;\n });\n }),\n });\n })\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/platform/browser/tx-store/types.ts"],"names":[],"mappings":"AAuJA,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,QAAc;IACtD,OAAO,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/platform/browser/tx-store/types.ts"],"names":[],"mappings":"AAuJA,MAAM,UAAU,QAAQ,CAAC,OAAe,EAAE,QAAc;IACtD,OAAO,GAAG,OAAO,IAAI,QAAQ,EAAE,CAAC;AAClC,CAAC","sourcesContent":["import type { Hash } from \"viem\";\n\n/**\n * Represents a transaction replacement event (cancellation, repricing, or replacement).\n */\nexport type TxReplacement = {\n /**\n * Unix timestamp (milliseconds) when the replacement occurred.\n */\n at: number;\n\n /**\n * The original transaction hash that was replaced.\n */\n oldHash: Hash;\n\n /**\n * The new transaction hash after replacement.\n */\n newHash: Hash;\n\n /**\n * The reason for the replacement.\n */\n reason: \"cancelled\" | \"replaced\" | \"repriced\";\n};\n\n/**\n * Optional metadata about transaction gas parameters.\n * Stored as decimal strings to support bigint serialization.\n */\nexport type PersistedTxMeta = {\n /**\n * Gas limit as decimal string.\n */\n gas?: string;\n\n /**\n * Gas price as decimal string (legacy transactions).\n */\n gasPrice?: string;\n\n /**\n * Max fee per gas as decimal string (EIP-1559 transactions).\n */\n maxFeePerGas?: string;\n\n /**\n * Max priority fee per gas as decimal string (EIP-1559 transactions).\n */\n maxPriorityFeePerGas?: string;\n\n /**\n * Transaction nonce as decimal string.\n */\n nonce?: string;\n\n /**\n * Transaction type as decimal string (0 = legacy, 2 = EIP-1559, etc.).\n */\n type?: string;\n};\n\n/**\n * Persisted transaction record stored in browser storage.\n * Tracks the full lifecycle of a transaction including replacements.\n */\nexport type PersistedTx = {\n /**\n * Unique identifier: `${chainId}:${rootHash}`\n */\n id: string;\n\n /**\n * Chain ID where the transaction was submitted.\n */\n chainId: number;\n\n /**\n * The first submitted transaction hash (never changes).\n */\n rootHash: Hash;\n\n /**\n * The current transaction hash (updated after replacements).\n */\n currentHash: Hash;\n\n /**\n * Current status of the transaction.\n */\n status: \"submitted\" | \"pending\" | \"mined\" | \"failed\";\n\n /**\n * Unix timestamp (milliseconds) when the transaction was first created.\n */\n createdAt: number;\n\n /**\n * Unix timestamp (milliseconds) when the transaction was last updated.\n */\n updatedAt: number;\n\n /**\n * History of transaction replacements.\n */\n replacements: TxReplacement[];\n\n /**\n * Optional transaction metadata (gas parameters, nonce, etc.).\n */\n txMeta?: PersistedTxMeta;\n\n /**\n * Recipient address.\n */\n to?: string;\n\n /**\n * Sender address.\n */\n from?: string;\n\n /**\n * Transaction value as decimal string.\n */\n value?: string;\n\n /**\n * Transaction calldata as hex string.\n */\n data?: string;\n\n /**\n * Human-readable description of the transaction.\n */\n description?: string;\n\n /**\n * User-defined tags for categorization.\n */\n tags?: string[];\n};\n\n/**\n * Generate a unique transaction ID from chain ID and root hash.\n *\n * @param chainId - The chain ID\n * @param rootHash - The root transaction hash\n * @returns Transaction ID in format `${chainId}:${rootHash}`\n */\nexport function makeTxId(chainId: number, rootHash: Hash): string {\n return `${chainId}:${rootHash}`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/presets/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC","sourcesContent":["export * from \"./layers.js\";\nexport * from \"./transports.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"layers.js","sourceRoot":"","sources":["../../src/presets/layers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layers.js","sourceRoot":"","sources":["../../src/presets/layers.ts"],"names":[],"mappings":"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","sourcesContent":["import { FetchHttpClient } from \"@effect/platform\";\nimport { Effect, Layer, Option } from \"effect\";\nimport type { Chain, PublicClient, Transport, WalletClient } from \"viem\";\nimport { createPublicClient, createWalletClient, custom, fallback, webSocket } from \"viem\";\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 {\n ClientNotFoundError,\n PublicClientService,\n WalletClientService,\n WalletNotConnectedError,\n WrongNetworkError,\n} from \"@/src/core/index.js\";\nimport type { DeployService } from \"@/src/deploy/index.js\";\nimport { DeployServiceLive } from \"@/src/deploy/index.js\";\nimport type { Eip7702Service } from \"@/src/eip7702/index.js\";\nimport { Eip7702ServiceLive } from \"@/src/eip7702/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 {\n CursorStore,\n CursorStream,\n EventBackfill,\n EventStream,\n ReliableEventStream,\n} from \"@/src/events/index.js\";\nimport {\n CursorStreamLive,\n EventBackfillLive,\n EventStreamLive,\n InMemoryCursorStoreLive,\n ReliableEventStreamLive,\n} from \"@/src/events/index.js\";\nimport type { GasService } from \"@/src/gas/index.js\";\nimport { GasServiceLive } from \"@/src/gas/index.js\";\nimport { parseHexInt } from \"@/src/internal/index.js\";\nimport type { NonceService } from \"@/src/nonce/index.js\";\nimport { NonceServiceLive } from \"@/src/nonce/index.js\";\nimport type { ChainHead, ContractQuery, MulticallBatcher, QueryClient } from \"@/src/query/index.js\";\nimport {\n ChainHeadLive,\n ContractQueryLive,\n MulticallBatcherLive,\n QueryClientLive,\n} from \"@/src/query/index.js\";\nimport type { RequestDedup, RpcCache } from \"@/src/rpc/index.js\";\nimport { makeRpcCacheLive, RequestDedupLive } from \"@/src/rpc/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 { TxManager, TxReplacement } from \"@/src/tx/index.js\";\nimport { TxManagerLive, TxReplacementLive } from \"@/src/tx/index.js\";\nimport type { WalletLifecycle, WalletProvider, WalletService } from \"@/src/wallet/index.js\";\nimport {\n makeWalletLifecycleLive,\n makeWalletProviderRefLive,\n makeWalletServiceLive,\n WalletLifecycleFromProviderRefLive,\n WalletProviderRef,\n WalletServiceFromProviderRefLive,\n} from \"@/src/wallet/index.js\";\nimport type { HttpTransportOptions } from \"./transports.js\";\nimport { makeHttpTransport } from \"./transports.js\";\n\nconst UNKNOWN_CHAIN_ID = 0;\n\nexport type TransportRetryConfig = {\n /** The max number of times to retry. */\n readonly retryCount?: number | undefined;\n /** Base delay (in ms) between retries. */\n readonly retryDelay?: number | undefined;\n /** Timeout (in ms) for requests. */\n readonly timeout?: number | undefined;\n};\n\nexport type TransportCircuitBreakerConfig = {\n /**\n * Open the circuit after this many consecutive failures.\n * @default 5\n */\n readonly failureThreshold?: number | undefined;\n /**\n * Time (ms) to keep the circuit open before allowing a trial request.\n * @default 15_000\n */\n readonly resetTimeoutMs?: number | undefined;\n};\n\nexport type RpcMiddlewareConfig = {\n /**\n * Transport-level retry options (applied to URL-based transports).\n * Note: viem also has built-in retry for some transports; this config is passed through.\n */\n readonly retry?: TransportRetryConfig | undefined;\n /** Simple circuit breaker guarding transport request/subscribe */\n readonly circuitBreaker?: TransportCircuitBreakerConfig | undefined;\n /**\n * Optional in-flight request dedup for safe methods only.\n * Safe-method allowlist is intentionally strict.\n */\n readonly dedup?: boolean | undefined;\n};\n\nexport type ChainConfig = {\n readonly chainId: number;\n readonly chain: Chain;\n /** HTTP RPC URLs (fallback order). Required unless `transport` is provided. */\n readonly rpcUrls: readonly string[];\n /** Optional WS RPC URLs (fallback order). Used for subscription-backed operations when present. */\n readonly wsUrls?: readonly string[] | undefined;\n /**\n * Escape hatch: provide a fully constructed viem transport.\n * Takes precedence over `rpcUrls`/`wsUrls`/`http` options.\n */\n readonly transport?: Transport | undefined;\n /** HTTP transport options applied per URL when building from `rpcUrls`. */\n readonly http?: TransportRetryConfig | undefined;\n /** WebSocket transport options applied per URL when building from `wsUrls`. */\n readonly ws?:\n | (TransportRetryConfig & {\n readonly keepAlive?: boolean | undefined;\n readonly reconnect?: boolean | undefined;\n })\n | undefined;\n /** Optional middleware wrappers. */\n readonly rpcMiddleware?: RpcMiddlewareConfig | undefined;\n};\n\nconst toHttpOptions = (retry: TransportRetryConfig | undefined): HttpTransportOptions => ({\n retryCount: retry?.retryCount,\n retryDelay: retry?.retryDelay,\n timeout: retry?.timeout,\n});\n\nconst safeMethodAllowlist = new Set([\n \"eth_blockNumber\",\n \"eth_call\",\n \"eth_chainId\",\n \"eth_feeHistory\",\n \"eth_gasPrice\",\n \"eth_getBalance\",\n \"eth_getBlockByHash\",\n \"eth_getBlockByNumber\",\n \"eth_getCode\",\n \"eth_getLogs\",\n \"eth_getStorageAt\",\n \"eth_getTransactionByHash\",\n \"eth_getTransactionCount\",\n \"eth_getTransactionReceipt\",\n \"net_version\",\n]);\n\nconst stableStringify = (value: unknown): string =>\n JSON.stringify(value, (_, v) => (typeof v === \"bigint\" ? v.toString() : v));\n\nconst withDedup =\n (transport: Transport): Transport =>\n (args) => {\n const inner = transport(args);\n const inflight = new Map<string, ReturnType<typeof inner.request>>();\n\n const request = ((rpcRequest: unknown) => {\n const method = (rpcRequest as { method?: unknown }).method;\n if (typeof method !== \"string\" || !safeMethodAllowlist.has(method)) {\n return inner.request(rpcRequest as never);\n }\n\n const chainId = args.chain?.id ?? \"unknown\";\n const key = `${chainId}:${method}:${stableStringify((rpcRequest as { params?: unknown }).params)}`;\n\n const existing = inflight.get(key);\n if (existing) {\n return existing;\n }\n\n const promise = inner.request(rpcRequest as never);\n inflight.set(key, promise);\n\n (promise as Promise<unknown>).finally(() => {\n inflight.delete(key);\n });\n\n return promise;\n }) as unknown as typeof inner.request;\n\n return { ...inner, request };\n };\n\nconst withCircuitBreaker = (\n transport: Transport,\n config: TransportCircuitBreakerConfig\n): Transport => {\n const failureThreshold = config.failureThreshold ?? 5;\n const resetTimeoutMs = config.resetTimeoutMs ?? 15_000;\n\n let consecutiveFailures = 0;\n let openedAtMs: number | undefined;\n\n const isOpen = (): boolean =>\n openedAtMs !== undefined && Date.now() - openedAtMs < resetTimeoutMs;\n\n const noteFailure = () => {\n consecutiveFailures += 1;\n if (consecutiveFailures >= failureThreshold && openedAtMs === undefined) {\n openedAtMs = Date.now();\n }\n };\n\n const noteSuccess = () => {\n consecutiveFailures = 0;\n openedAtMs = undefined;\n };\n\n return (args) => {\n const inner = transport(args);\n\n const request = ((rpcRequest: unknown) => {\n if (isOpen()) {\n return Promise.reject(new Error(\"RPC circuit breaker is open\")) as ReturnType<\n typeof inner.request\n >;\n }\n\n const result = inner.request(rpcRequest as never);\n return (result as Promise<unknown>).then(\n (resultValue) => {\n noteSuccess();\n return resultValue;\n },\n (e) => {\n noteFailure();\n throw e;\n }\n ) as ReturnType<typeof inner.request>;\n }) as unknown as typeof inner.request;\n\n const value = (() => {\n const v = inner.value;\n if (typeof v !== \"object\" || v === null) {\n return v;\n }\n if (!(\"subscribe\" in v)) {\n return v;\n }\n\n const subscribeValue = (v as { subscribe?: unknown }).subscribe;\n if (typeof subscribeValue !== \"function\") {\n return v;\n }\n\n const subscribe = subscribeValue as (\n ...subscribeArgs: readonly unknown[]\n ) => Promise<unknown>;\n\n return {\n ...(v as Record<string, unknown>),\n subscribe: async (...subscribeArgs: readonly unknown[]) => {\n if (isOpen()) {\n throw new Error(\"RPC circuit breaker is open\");\n }\n\n try {\n const result = await subscribe(...subscribeArgs);\n noteSuccess();\n return result;\n } catch (e) {\n noteFailure();\n throw e;\n }\n },\n };\n })();\n\n return { ...inner, request, value };\n };\n};\n\nconst makePublicTransportForChain = (config: ChainConfig): Transport => {\n const middlewareRetry = config.rpcMiddleware?.retry;\n const httpOptions = toHttpOptions(config.http ?? middlewareRetry);\n\n const baseTransport =\n config.transport ??\n (() => {\n if (config.rpcUrls.length === 0) {\n throw new Error(\n `Invalid ChainConfig for chainId=${config.chainId}: rpcUrls must be non-empty when transport is not provided`\n );\n }\n\n const httpTransports = config.rpcUrls.map((url) =>\n makeHttpTransport({ url, ...httpOptions })\n );\n const httpTransport =\n httpTransports.length === 1 ? httpTransports[0] : fallback(httpTransports);\n\n const wsUrls = config.wsUrls ?? [];\n if (wsUrls.length === 0) {\n return httpTransport;\n }\n\n const wsConfig = config.ws ?? middlewareRetry;\n const wsTransports = wsUrls.map((url) =>\n webSocket(url, {\n keepAlive: config.ws?.keepAlive,\n reconnect: config.ws?.reconnect,\n retryCount: wsConfig?.retryCount,\n retryDelay: wsConfig?.retryDelay,\n timeout: wsConfig?.timeout,\n })\n );\n const wsTransport = wsTransports.length === 1 ? wsTransports[0] : fallback(wsTransports);\n\n // Prefer WS for subscription-backed flows, while keeping HTTP fallback for requests.\n // `fallback()` does not reliably preserve `subscribe`, so stitch `subscribe` back in from WS.\n const requestTransport = fallback([wsTransport, httpTransport]);\n return (args) => {\n const req = requestTransport(args);\n const ws = wsTransport(args);\n const wsValue = ws.value;\n\n const subscribe =\n typeof wsValue === \"object\" &&\n wsValue !== null &&\n \"subscribe\" in wsValue &&\n typeof (wsValue as { subscribe?: unknown }).subscribe === \"function\"\n ? (wsValue as { subscribe: unknown }).subscribe\n : undefined;\n\n return subscribe\n ? {\n ...req,\n value: { ...(req.value as Record<string, unknown>), subscribe },\n }\n : req;\n };\n })();\n\n const deduped = config.rpcMiddleware?.dedup ? withDedup(baseTransport) : baseTransport;\n const circuitBreaker =\n config.rpcMiddleware?.circuitBreaker !== undefined\n ? withCircuitBreaker(deduped, config.rpcMiddleware.circuitBreaker)\n : deduped;\n\n return circuitBreaker;\n};\n\n/**\n * Create a PublicClientService layer from chain configurations\n */\nexport function makePublicClientLayer(configs: ChainConfig[]): Layer.Layer<PublicClientService> {\n const clients = new Map<number, PublicClient>();\n\n for (const config of configs) {\n const client = createPublicClient({\n chain: config.chain,\n transport: makePublicTransportForChain(config),\n });\n clients.set(config.chainId, client);\n }\n\n return Layer.succeed(PublicClientService, {\n get: (chainId: number) =>\n Effect.gen(function* () {\n const client = clients.get(chainId);\n if (!client) {\n return yield* Effect.fail(\n new ClientNotFoundError({\n chainId,\n message: `No public client found for chain ${chainId}`,\n })\n );\n }\n return client;\n }),\n });\n}\n\n/**\n * Create a WalletClientService layer from an EIP-1193 provider\n */\nexport function makeWalletClientLayer(\n provider: { request: (...args: unknown[]) => Promise<unknown> },\n chains: Map<number, Chain>\n): Layer.Layer<WalletClientService> {\n return Layer.succeed(WalletClientService, {\n get: (chainId: number) =>\n Effect.gen(function* () {\n const chain = chains.get(chainId);\n if (!chain) {\n return yield* Effect.fail(\n new WalletNotConnectedError({\n chainId,\n message: `No chain configuration found for chain ${chainId}`,\n })\n );\n }\n\n const actualChainId = yield* Effect.tryPromise({\n catch: (cause) =>\n new WalletNotConnectedError({\n chainId,\n message:\n cause instanceof Error\n ? cause.message\n : `Failed to read wallet chainId for ${chainId}`,\n }),\n try: async () => {\n const hex = await provider.request({ method: \"eth_chainId\" });\n if (typeof hex !== \"string\") {\n throw new Error(\"Invalid eth_chainId response\");\n }\n return Option.getOrElse(parseHexInt(hex), () => UNKNOWN_CHAIN_ID);\n },\n });\n\n if (actualChainId !== chainId) {\n return yield* Effect.fail(\n new WrongNetworkError({\n actualChainId,\n expectedChainId: chainId,\n message: `Wallet is on chainId=${actualChainId} but expected chainId=${chainId}`,\n })\n );\n }\n\n const client = createWalletClient({\n chain,\n transport: custom(provider),\n });\n\n return client as WalletClient;\n }),\n });\n}\n\n/**\n * Create a WalletClientService layer from a dynamic provider ref.\n *\n * This is the key building block for \"stable runtime\" frontends: the runtime stays alive,\n * while the provider can be set/cleared/changed without reconstructing the Layer/Runtime.\n */\nexport function makeWalletClientLayerFromProviderRef(\n chains: Map<number, Chain>\n): Layer.Layer<WalletClientService, never, WalletProviderRef> {\n return Layer.effect(\n WalletClientService,\n Effect.gen(function* () {\n const providerRef = yield* WalletProviderRef;\n\n return WalletClientService.of({\n get: (chainId: number) =>\n Effect.gen(function* () {\n const chain = chains.get(chainId);\n if (!chain) {\n return yield* Effect.fail(\n new WalletNotConnectedError({\n chainId,\n message: `No chain configuration found for chain ${chainId}`,\n })\n );\n }\n\n const current = yield* providerRef.get;\n if (Option.isNone(current)) {\n return yield* Effect.fail(\n new WalletNotConnectedError({\n chainId,\n message: \"No wallet provider set\",\n })\n );\n }\n\n const provider = current.value;\n const actualChainId = yield* Effect.tryPromise({\n catch: (cause) =>\n new WalletNotConnectedError({\n chainId,\n message:\n cause instanceof Error\n ? cause.message\n : `Failed to read wallet chainId for ${chainId}`,\n }),\n try: async () => {\n const hex = await provider.request({ method: \"eth_chainId\" });\n if (typeof hex !== \"string\") {\n throw new Error(\"Invalid eth_chainId response\");\n }\n return Option.getOrElse(parseHexInt(hex), () => UNKNOWN_CHAIN_ID);\n },\n });\n\n if (actualChainId !== chainId) {\n return yield* Effect.fail(\n new WrongNetworkError({\n actualChainId,\n expectedChainId: chainId,\n message: `Wallet is on chainId=${actualChainId} but expected chainId=${chainId}`,\n })\n );\n }\n\n const client = createWalletClient({\n chain,\n transport: custom(provider),\n });\n\n return client as WalletClient;\n }),\n });\n })\n );\n}\n\n/**\n * Compose all effect-evm services into a single layer\n * Requires PublicClientService and WalletClientService to be provided\n * Note: WalletService and WalletLifecycle require a provider and should be added via makeEffectEvmLayer\n */\nconst cursorServices = Layer.mergeAll(EventStreamLive, EventBackfillLive, InMemoryCursorStoreLive);\n\nconst cursorStreamServices = Layer.provideMerge(CursorStreamLive, cursorServices);\n\nconst baseServices = Layer.mergeAll(\n BlockServiceLive,\n ContractReaderLive,\n ContractWriterLive,\n Erc721ServiceLive,\n cursorServices,\n cursorStreamServices,\n EnsResolverLive,\n GasServiceLive,\n NonceServiceLive,\n SignatureServiceLive,\n SubscriptionServiceLive,\n makeRpcCacheLive(),\n RequestDedupLive\n);\n\nconst txServices = Layer.provideMerge(\n TxManagerLive,\n Layer.provideMerge(TxReplacementLive, baseServices)\n);\n\nconst queryServices = Layer.provideMerge(\n ContractQueryLive,\n Layer.provideMerge(\n MulticallBatcherLive,\n Layer.provideMerge(QueryClientLive, Layer.provideMerge(ChainHeadLive, txServices))\n )\n);\n\nexport const effectEvmServices = Layer.provideMerge(\n Layer.mergeAll(\n BalanceServiceLive,\n ContractPipelineLive,\n Eip7702ServiceLive,\n DeployServiceLive,\n ReliableEventStreamLive,\n SimulationServiceLive\n ),\n queryServices\n).pipe(Layer.provide(FetchHttpClient.layer));\n\n/**\n * Create a complete effect-evm layer from chain configurations and provider\n */\nexport function makeEffectEvmLayer(\n configs: ChainConfig[],\n provider: { request: (...args: unknown[]) => Promise<unknown> }\n): Layer.Layer<\n | PublicClientService\n | WalletClientService\n | BalanceService\n | BlockService\n | ChainHead\n | ContractReader\n | ContractQuery\n | ContractWriter\n | ContractPipeline\n | Eip7702Service\n | DeployService\n | Erc721Service\n | GasService\n | NonceService\n | QueryClient\n | MulticallBatcher\n | RpcCache\n | RequestDedup\n | SignatureService\n | SimulationService\n | SubscriptionService\n | TxManager\n | TxReplacement\n | EventBackfill\n | EventStream\n | CursorStore\n | CursorStream\n | ReliableEventStream\n | EnsResolver\n | WalletService\n | WalletLifecycle\n> {\n const chains = new Map(configs.map((c) => [c.chainId, c.chain]));\n\n const clientLayers = Layer.mergeAll(\n makePublicClientLayer(configs),\n makeWalletClientLayer(provider, chains)\n );\n\n const walletLayers = Layer.mergeAll(\n makeWalletServiceLive(provider),\n makeWalletLifecycleLive(provider)\n );\n\n return Layer.provideMerge(Layer.mergeAll(effectEvmServices, walletLayers), clientLayers);\n}\n\n/**\n * Create a complete effect-evm layer with a dynamic wallet provider reference.\n *\n * This is intended for frontends (e.g. Next.js) that want a stable Effect runtime\n * while the wallet provider changes over time.\n *\n * Set/clear the provider by using `WalletProviderRef` (e.g. from React via `useForkEffect`).\n */\nexport function makeEffectEvmLayerWithWalletProviderRef(\n configs: ChainConfig[],\n initialProvider?: WalletProvider | undefined\n): Layer.Layer<\n | PublicClientService\n | WalletClientService\n | BalanceService\n | BlockService\n | ChainHead\n | ContractReader\n | ContractQuery\n | ContractWriter\n | ContractPipeline\n | Eip7702Service\n | DeployService\n | Erc721Service\n | GasService\n | NonceService\n | QueryClient\n | MulticallBatcher\n | RpcCache\n | RequestDedup\n | SignatureService\n | SimulationService\n | SubscriptionService\n | TxManager\n | TxReplacement\n | EventBackfill\n | EventStream\n | CursorStore\n | CursorStream\n | ReliableEventStream\n | EnsResolver\n | WalletService\n | WalletLifecycle\n | WalletProviderRef\n> {\n const chains = new Map(configs.map((c) => [c.chainId, c.chain]));\n const providerRefLayer = makeWalletProviderRefLive(initialProvider);\n\n const walletClientLayer = Layer.provideMerge(\n makeWalletClientLayerFromProviderRef(chains),\n providerRefLayer\n );\n\n const clientLayers = Layer.mergeAll(makePublicClientLayer(configs), walletClientLayer);\n\n const walletLayers = Layer.provideMerge(\n Layer.mergeAll(WalletServiceFromProviderRefLive, WalletLifecycleFromProviderRefLive),\n providerRefLayer\n );\n\n return Layer.provideMerge(\n Layer.mergeAll(effectEvmServices, walletLayers, providerRefLayer),\n clientLayers\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"transports.js","sourceRoot":"","sources":["../../src/presets/transports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAkBxF,MAAM,UAAU,iBAAiB,CAAC,MAAuB;IACvD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;QACtB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;QAClC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,mBAAmB;QACpD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,uBAAuB;KACnD,CAAC,CAAC;AACL,CAAC;AAKD,MAAM,UAAU,qBAAqB,CACnC,IAAuB,EACvB,UAAgC,EAAE;IAElC,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAKD,MAAM,UAAU,mBAAmB,CACjC,MAIG;IAEH,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACb,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC5E,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAA+B,CAChC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"transports.js","sourceRoot":"","sources":["../../src/presets/transports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAkBxF,MAAM,UAAU,iBAAiB,CAAC,MAAuB;IACvD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;QACtB,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,CAAC;QAClC,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,mBAAmB;QACpD,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,uBAAuB;KACnD,CAAC,CAAC;AACL,CAAC;AAKD,MAAM,UAAU,qBAAqB,CACnC,IAAuB,EACvB,UAAgC,EAAE;IAElC,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC;AAKD,MAAM,UAAU,mBAAmB,CACjC,MAIG;IAEH,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QACb,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,qBAAqB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC5E,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAA+B,CAChC,CAAC;AACJ,CAAC","sourcesContent":["import type { Transport } from \"viem\";\nimport { fallback, http } from \"viem\";\nimport { DEFAULT_REQUEST_TIMEOUT, DEFAULT_RETRY_DELAY } from \"@/src/constants/index.js\";\n\nexport type TransportConfig = {\n /** RPC URL */\n url: string;\n /** Timeout in milliseconds */\n timeout?: number;\n /** Number of retries on failure */\n retryCount?: number;\n /** Delay between retries in milliseconds */\n retryDelay?: number;\n};\n\nexport type HttpTransportOptions = Omit<TransportConfig, \"url\">;\n\n/**\n * Create an HTTP transport with configurable retry behavior\n */\nexport function makeHttpTransport(config: TransportConfig): Transport {\n return http(config.url, {\n retryCount: config.retryCount ?? 3,\n retryDelay: config.retryDelay ?? DEFAULT_RETRY_DELAY,\n timeout: config.timeout ?? DEFAULT_REQUEST_TIMEOUT,\n });\n}\n\n/**\n * Create a fallback transport from multiple URLs\n */\nexport function makeFallbackTransport(\n urls: readonly string[],\n options: HttpTransportOptions = {}\n): Transport {\n return fallback(urls.map((url) => makeHttpTransport({ url, ...options })));\n}\n\n/**\n * Create transports map for multiple chains\n */\nexport function makeChainTransports(\n chains: {\n chainId: number;\n rpcUrls: readonly string[];\n http?: HttpTransportOptions | undefined;\n }[]\n): Record<number, Transport> {\n return chains.reduce(\n (acc, chain) => {\n acc[chain.chainId] = makeFallbackTransport(chain.rpcUrls, chain.http ?? {});\n return acc;\n },\n {} as Record<number, Transport>\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"chain-head.js","sourceRoot":"","sources":["../../src/query/chain-head.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGxD,OAAO,EAAE,mBAAmB,EAAE,cAAc,IAAI,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAYrD,MAAM,OAAO,SAAU,SAAQ,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAA6B;CAAG;AAE3F,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CACvC,SAAS,EACT,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC;IACvD,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC;IAEvD,OAAO,SAAS,CAAC,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEvD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC9B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,mBAAmB,CAAC;oBACtB,KAAK;oBACL,OAAO,EAAE,+CAA+C,OAAO,GAAG;oBAClE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,SAAS;iBACvC,CAAC;gBACJ,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE;aACnC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE;YAC1C,UAAU,EAAE,EAAE,OAAO,EAAE;SACxB,CAAC,CACH;QAEH,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CACjB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;gBAChE,OAAO;aACR,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,IAAI,CAChB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CACjE,CAAC;QACJ,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE;YACrC,UAAU,EAAE,EAAE,OAAO,EAAE;SACxB,CAAC,CACH;KACJ,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC"}
1
+ {"version":3,"file":"chain-head.js","sourceRoot":"","sources":["../../src/query/chain-head.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGxD,OAAO,EAAE,mBAAmB,EAAE,cAAc,IAAI,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAYrD,MAAM,OAAO,SAAU,SAAQ,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAA6B;CAAG;AAE3F,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CACvC,SAAS,EACT,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC;IACvD,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC;IAEvD,OAAO,SAAS,CAAC,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEvD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;gBAC9B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CACf,IAAI,mBAAmB,CAAC;oBACtB,KAAK;oBACL,OAAO,EAAE,+CAA+C,OAAO,GAAG;oBAClE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,SAAS;iBACvC,CAAC;gBACJ,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE;aACnC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,EAAE;YAC1C,UAAU,EAAE,EAAE,OAAO,EAAE;SACxB,CAAC,CACH;QAEH,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CACjB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAClB,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,CAAC;gBAChE,OAAO;aACR,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC,IAAI,CAChB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,EAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CACjE,CAAC;QACJ,CAAC,CAAC,CAAC,IAAI,CACL,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE;YACrC,UAAU,EAAE,EAAE,OAAO,EAAE;SACxB,CAAC,CACH;KACJ,CAAC,CAAC;AACL,CAAC,CAAC,CACH,CAAC","sourcesContent":["import { Context, Effect, Layer, Stream } from \"effect\";\nimport type { Block } from \"viem\";\nimport type { ClientNotFoundError, TransportError } from \"@/src/core/index.js\";\nimport { PublicClientService, TransportError as TransportErrorClass } from \"@/src/core/index.js\";\nimport { SubscriptionService } from \"@/src/subscriptions/index.js\";\nimport { SpanNames } from \"@/src/telemetry/index.js\";\n\nexport type ChainHeadShape = {\n readonly current: (\n chainId: number\n ) => Effect.Effect<bigint, ClientNotFoundError | TransportError>;\n\n readonly watch: (\n chainId: number\n ) => Effect.Effect<Stream.Stream<bigint, never>, ClientNotFoundError>;\n};\n\nexport class ChainHead extends Context.Tag(\"ew3/ChainHead\")<ChainHead, ChainHeadShape>() {}\n\nexport const ChainHeadLive = Layer.effect(\n ChainHead,\n Effect.gen(function* () {\n const publicClientService = yield* PublicClientService;\n const subscriptionService = yield* SubscriptionService;\n\n return ChainHead.of({\n current: (chainId) =>\n Effect.gen(function* () {\n const client = yield* publicClientService.get(chainId);\n\n return yield* Effect.tryPromise({\n catch: (cause) =>\n new TransportErrorClass({\n cause,\n message: `Failed to get current block number (chainId=${chainId})`,\n url: client.transport.url ?? \"unknown\",\n }),\n try: () => client.getBlockNumber(),\n });\n }).pipe(\n Effect.withSpan(SpanNames.BLOCK_GET_NUMBER, {\n attributes: { chainId },\n })\n ),\n\n watch: (chainId) =>\n Effect.gen(function* () {\n const { stream } = yield* subscriptionService.watchBlocksRetrying({\n chainId,\n });\n\n return stream.pipe(\n Stream.map((block: Block) => block.number),\n Stream.filter((n): n is bigint => n !== null && n !== undefined)\n );\n }).pipe(\n Effect.withSpan(SpanNames.BLOCK_WATCH, {\n attributes: { chainId },\n })\n ),\n });\n })\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/query/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/query/client.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Fiber } from \"effect\";\nimport { Context, Effect, Layer, Ref, Stream } from \"effect\";\nimport { ChainHead } from \"@/src/query/chain-head.js\";\nimport { RequestDedup, RpcCache } from \"@/src/rpc/index.js\";\n\nexport type QueryOptions = {\n readonly ttl?: number | undefined;\n readonly blockScoped?: boolean | undefined;\n readonly chainId?: number | undefined;\n};\n\nexport type WatchOptions = QueryOptions & {\n readonly refetchOn: Stream.Stream<unknown, never>;\n};\n\nexport type QueryClientShape = {\n readonly query: <A, E, R>(\n key: string,\n effect: Effect.Effect<A, E, R>,\n options?: QueryOptions | undefined\n ) => Effect.Effect<A, E, R>;\n\n readonly watch: <A, E, R>(\n key: string,\n effect: Effect.Effect<A, E, R>,\n options: WatchOptions\n ) => Stream.Stream<A, E, R>;\n};\n\nexport class QueryClient extends Context.Tag(\"ew3/QueryClient\")<QueryClient, QueryClientShape>() {}\n\nexport const QueryClientLive = Layer.scoped(\n QueryClient,\n Effect.gen(function* () {\n const cache = yield* RpcCache;\n const dedup = yield* RequestDedup;\n const chainHead = yield* ChainHead;\n const scope = yield* Effect.scope;\n\n type InvalidatorState = Fiber.RuntimeFiber<void, never> | \"starting\";\n const invalidatorsRef = yield* Ref.make(new Map<number, InvalidatorState>());\n\n const ensureInvalidator = (chainId: number): Effect.Effect<void> =>\n Effect.gen(function* () {\n const shouldStart = yield* Ref.modify(invalidatorsRef, (current) => {\n if (current.has(chainId)) {\n return [false, current] as const;\n }\n const next = new Map(current);\n next.set(chainId, \"starting\");\n return [true, next] as const;\n });\n\n if (!shouldStart) {\n return;\n }\n\n const stream = yield* chainHead.watch(chainId);\n const started = Stream.runForEach(stream, (blockNumber) =>\n cache.invalidateBlock(blockNumber)\n )\n .pipe(Effect.forkIn(scope))\n .pipe(\n Effect.tap((fiber) =>\n Ref.update(invalidatorsRef, (current) => {\n const next = new Map(current);\n next.set(chainId, fiber);\n return next;\n })\n ),\n Effect.catchAll(() =>\n Ref.update(invalidatorsRef, (current) => {\n const next = new Map(current);\n next.delete(chainId);\n return next;\n })\n )\n );\n\n yield* started;\n }).pipe(Effect.catchAll(() => Effect.void));\n\n const query: QueryClientShape[\"query\"] = <A, E, R>(\n key: string,\n effect: Effect.Effect<A, E, R>,\n options?: QueryOptions | undefined\n ) =>\n Effect.gen(function* () {\n if (options?.blockScoped && options.chainId !== undefined) {\n yield* ensureInvalidator(options.chainId);\n }\n\n const cached = yield* cache.get<A>(key);\n if (cached !== null) {\n return cached;\n }\n\n return yield* dedup.dedupe(key, effect).pipe(\n Effect.tap((value) =>\n Effect.gen(function* () {\n if (options?.blockScoped && options.chainId !== undefined) {\n const current = yield* chainHead.current(options.chainId).pipe(Effect.either);\n if (current._tag === \"Right\") {\n yield* cache.set(key, value, current.right, options.ttl);\n return;\n }\n }\n yield* cache.set(key, value, undefined, options?.ttl);\n })\n )\n );\n });\n\n const watch: QueryClientShape[\"watch\"] = <A, E, R>(\n key: string,\n effect: Effect.Effect<A, E, R>,\n options: WatchOptions\n ) => {\n const initial = Stream.fromEffect(query(key, effect, options));\n const refetch = options.refetchOn.pipe(Stream.mapEffect(() => query(key, effect, options)));\n return Stream.concat(initial, refetch);\n };\n\n return QueryClient.of({ query, watch });\n })\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"client.test.integration.js","sourceRoot":"","sources":["../../src/query/client.test.integration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.test.integration.js","sourceRoot":"","sources":["../../src/query/client.test.integration.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from \"@effect/vitest\";\nimport { Deferred, Effect, Fiber, Layer, Ref, Stream, SubscriptionRef } from \"effect\";\nimport { ChainHead, QueryClient, QueryClientLive } from \"@/src/query/index.js\";\nimport { makeRpcCacheLive, RequestDedupLive, RpcCache } from \"@/src/rpc/index.js\";\nimport { TEST_CHAIN_ID } from \"@/src/testing-kit/index.js\";\n\ndescribe(\"QueryClient\", () => {\n it.effect(\"caches repeated queries\", () =>\n Effect.gen(function* () {\n const queryClient = yield* QueryClient;\n\n let executions = 0;\n const effect = Effect.sync(() => {\n executions += 1;\n return \"value\";\n });\n\n const result1 = yield* queryClient.query(\"key\", effect, { ttl: 60_000 });\n const result2 = yield* queryClient.query(\"key\", effect, { ttl: 60_000 });\n\n expect(result1).toBe(\"value\");\n expect(result2).toBe(\"value\");\n expect(executions).toBe(1);\n }).pipe(\n Effect.provide(\n Layer.provide(\n QueryClientLive,\n Layer.mergeAll(\n Layer.succeed(\n ChainHead,\n ChainHead.of({\n current: () => Effect.succeed(1n),\n watch: () => Effect.succeed(Stream.empty),\n })\n ),\n makeRpcCacheLive({ ttl: 60_000 }),\n RequestDedupLive\n )\n )\n )\n )\n );\n\n it.effect(\"dedupes concurrent queries with the same key\", () =>\n Effect.gen(function* () {\n const queryClient = yield* QueryClient;\n const started = yield* Deferred.make<void>();\n const gate = yield* Deferred.make<void>();\n\n let executions = 0;\n const effect = Effect.gen(function* () {\n executions += 1;\n yield* Deferred.succeed(started, undefined);\n yield* Deferred.await(gate);\n return \"shared\";\n });\n\n const fiber1 = yield* Effect.fork(queryClient.query(\"key\", effect, { ttl: 60_000 }));\n const fiber2 = yield* Effect.fork(queryClient.query(\"key\", effect, { ttl: 60_000 }));\n\n yield* Deferred.await(started);\n yield* Deferred.succeed(gate, undefined);\n\n const result1 = yield* Fiber.join(fiber1);\n const result2 = yield* Fiber.join(fiber2);\n\n expect(result1).toBe(\"shared\");\n expect(result2).toBe(\"shared\");\n expect(executions).toBe(1);\n }).pipe(\n Effect.provide(\n Layer.provide(\n QueryClientLive,\n Layer.mergeAll(\n Layer.succeed(\n ChainHead,\n ChainHead.of({\n current: () => Effect.succeed(1n),\n watch: () => Effect.succeed(Stream.empty),\n })\n ),\n makeRpcCacheLive({ ttl: 60_000 }),\n RequestDedupLive\n )\n )\n )\n )\n );\n\n it.effect(\"invalidates block-scoped cache entries on new head blocks\", () =>\n Effect.gen(function* () {\n const headRef = yield* SubscriptionRef.make(1n);\n const watchStarted = yield* Deferred.make<void>();\n const invalidated = yield* Deferred.make<void>();\n const invalidationsRef = yield* Ref.make<readonly bigint[]>([]);\n\n const queryClientLayer = Layer.provideMerge(\n QueryClientLive,\n Layer.mergeAll(\n Layer.succeed(\n ChainHead,\n ChainHead.of({\n current: () => SubscriptionRef.get(headRef),\n watch: () =>\n Effect.succeed(\n headRef.changes.pipe(Stream.onStart(Deferred.succeed(watchStarted, undefined)))\n ),\n })\n ),\n Layer.provide(\n Layer.effect(\n RpcCache,\n Effect.gen(function* () {\n const base = yield* RpcCache;\n return RpcCache.of({\n ...base,\n invalidateBlock: (blockNumber) =>\n base.invalidateBlock(blockNumber).pipe(\n Effect.tap(() =>\n Ref.update(invalidationsRef, (current) => [...current, blockNumber])\n ),\n Effect.tap(() =>\n blockNumber === 2n\n ? Deferred.succeed(invalidated, undefined).pipe(Effect.asVoid)\n : Effect.void\n )\n ),\n });\n })\n ),\n makeRpcCacheLive({ ttl: 60_000 })\n ),\n RequestDedupLive\n )\n );\n\n return yield* Effect.gen(function* () {\n const queryClient = yield* QueryClient;\n const cache = yield* RpcCache;\n\n let executions = 0;\n const effect = Effect.sync(() => {\n executions += 1;\n return \"value\";\n });\n\n const result1 = yield* queryClient.query(\"key\", effect, {\n blockScoped: true,\n chainId: TEST_CHAIN_ID,\n ttl: 60_000,\n });\n\n expect(yield* cache.get<string>(\"key\")).toBe(\"value\");\n\n yield* Deferred.await(watchStarted);\n\n // Set the new block - this will trigger invalidation via headRef.changes\n yield* SubscriptionRef.set(headRef, 2n);\n\n yield* Deferred.await(invalidated);\n expect(yield* cache.get<string>(\"key\")).toBeNull();\n expect(yield* Ref.get(invalidationsRef)).toContain(2n);\n\n const result2 = yield* queryClient.query(\"key\", effect, {\n blockScoped: true,\n chainId: TEST_CHAIN_ID,\n ttl: 60_000,\n });\n\n expect(result1).toBe(\"value\");\n expect(result2).toBe(\"value\");\n expect(executions).toBe(2);\n }).pipe(Effect.provide(queryClientLayer));\n }).pipe(Effect.scoped)\n );\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"contract-query.js","sourceRoot":"","sources":["../../src/query/contract-query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract-query.js","sourceRoot":"","sources":["../../src/query/contract-query.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAGhD,OAAO,EAAE,iBAAiB,IAAI,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAuCpE,MAAM,OAAO,aAAc,SAAQ,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAGhE;CAAG;AAEN,MAAM,eAAe,GAAG,CAAC,KAAc,EAAU,EAAE,CACjD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9E,MAAM,SAAS,GAAG,CAAC,MAA+B,EAAU,EAAE;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;IAC/B,OAAO;QACL,cAAc;QACd,MAAM,CAAC,OAAO;QACd,MAAM,CAAC,OAAO;QACd,MAAM,CAAC,OAAO,IAAI,YAAY;QAC9B,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;QAC3B,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,iBAAiB;QACnD,MAAM,CAAC,QAAQ,IAAI,cAAc;QACjC,eAAe,CAAC,IAAI,CAAC;QACrB,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;KAC5B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,MAA+B,EAC/B,KAAc,EAC4C,EAAE;IAC5D,MAAM,QAAQ,GAAG,KAAiC,CAAC;IACnD,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,IAAI,QAAQ,EAAE,CAAC;QACnE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC1B,IAAI,GAAG,KAAK,qBAAqB,IAAI,GAAG,KAAK,gBAAgB,EAAE,CAAC;YAC9D,OAAO,KAA6C,CAAC;QACvD,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,IAAI,sBAAsB,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK;QACL,YAAY,EAAE,MAAM,CAAC,YAAsB;QAC3C,OAAO;KACR,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAC3C,aAAa,EACb,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC;IACvC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,gBAAgB,CAAC;IAExC,MAAM,IAAI,GAAG,CAIX,MAAuC,EACvC,OAA8C,EAC9C,EAAE;QACF,MAAM,GAAG,GAAG,SAAS,CAAC,MAA4C,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG;YACX,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAwC;YACrD,YAAY,EAAE,MAAM,CAAC,YAAY;SACV,CAAC;QAE1B,MAAM,MAAM,GAAG,OAAO;aACnB,OAAO,CACN,MAAM,CAAC,OAAO,EACd,IAAI,EACJ;YACE,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CACF;aACA,IAAI,CACH,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,kBAAkB,CAAC,MAA4C,EAAE,KAAK,CAAC,CACxE,CACF,CAAC;QAEJ,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE;YACpC,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI;YACzC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,GAAG,EAAE,OAAO,EAAE,GAAG;SAClB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAIhB,MAAuC,EACvC,OAA+C,EAC/C,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACjF,MAAM,GAAG,GAAG,SAAS,CAAC,MAA4C,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,OAAO,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE;YACpC,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,IAAI;YACzC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS;YACT,GAAG,EAAE,OAAO,EAAE,GAAG;SAClB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,OAAO,aAAa,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;AAC/C,CAAC,CAAC,CACH,CAAC","sourcesContent":["import type { Stream } from \"effect\";\nimport { Context, Effect, Layer } from \"effect\";\nimport type { Abi, ContractFunctionName } from \"viem\";\nimport type { ClientNotFoundError, ContractReadError, MulticallError } from \"@/src/core/index.js\";\nimport { ContractReadError as ContractReadErrorClass } from \"@/src/core/index.js\";\nimport { ChainHead } from \"@/src/query/chain-head.js\";\nimport { QueryClient } from \"@/src/query/client.js\";\nimport { MulticallBatcher } from \"@/src/query/multicall-batcher.js\";\nimport type { ContractFunctionReturnType, MulticallCall, ReadParams } from \"@/src/types/index.js\";\n\nexport type ContractQueryReadOptions = {\n readonly ttl?: number | undefined;\n readonly blockScoped?: boolean | undefined;\n};\n\nexport type ContractQueryWatchOptions = ContractQueryReadOptions & {\n readonly refetchOn?: Stream.Stream<unknown, never> | undefined;\n};\n\nexport type ContractQueryShape = {\n readonly read: <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">,\n >(\n params: ReadParams<TAbi, TFunctionName>,\n options?: ContractQueryReadOptions | undefined\n ) => Effect.Effect<\n ContractFunctionReturnType<TAbi, \"pure\" | \"view\", TFunctionName>,\n ContractReadError | MulticallError | ClientNotFoundError\n >;\n\n readonly watchRead: <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">,\n >(\n params: ReadParams<TAbi, TFunctionName>,\n options?: ContractQueryWatchOptions | undefined\n ) => Effect.Effect<\n Stream.Stream<\n ContractFunctionReturnType<TAbi, \"pure\" | \"view\", TFunctionName>,\n ContractReadError | MulticallError | ClientNotFoundError\n >,\n ClientNotFoundError\n >;\n};\n\nexport class ContractQuery extends Context.Tag(\"ew3/ContractQuery\")<\n ContractQuery,\n ContractQueryShape\n>() {}\n\nconst stableStringify = (value: unknown): string =>\n JSON.stringify(value, (_, v) => (typeof v === \"bigint\" ? v.toString() : v));\n\nconst stableKey = (params: ReadParams<Abi, string>): string => {\n const args = params.args ?? [];\n return [\n \"contractRead\",\n params.chainId,\n params.address,\n params.account ?? \"no-account\",\n String(params.functionName),\n params.blockNumber?.toString() ?? \"no-block-number\",\n params.blockTag ?? \"no-block-tag\",\n stableStringify(args),\n stableStringify(params.abi),\n ].join(\":\");\n};\n\nconst normalizeReadError = (\n params: ReadParams<Abi, string>,\n cause: unknown\n): ContractReadError | MulticallError | ClientNotFoundError => {\n const anyCause = cause as { _tag?: string } | null;\n if (anyCause && typeof anyCause === \"object\" && \"_tag\" in anyCause) {\n const tag = anyCause._tag;\n if (tag === \"ClientNotFoundError\" || tag === \"MulticallError\") {\n return cause as ClientNotFoundError | MulticallError;\n }\n }\n\n const message = cause instanceof Error ? cause.message : String(cause);\n return new ContractReadErrorClass({\n address: params.address,\n cause,\n functionName: params.functionName as string,\n message,\n });\n};\n\nexport const ContractQueryLive = Layer.effect(\n ContractQuery,\n Effect.gen(function* () {\n const queryClient = yield* QueryClient;\n const chainHead = yield* ChainHead;\n const batcher = yield* MulticallBatcher;\n\n const read = <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">,\n >(\n params: ReadParams<TAbi, TFunctionName>,\n options?: ContractQueryReadOptions | undefined\n ) => {\n const key = stableKey(params as unknown as ReadParams<Abi, string>);\n const call = {\n abi: params.abi,\n address: params.address,\n args: params.args as unknown as MulticallCall[\"args\"],\n functionName: params.functionName,\n } satisfies MulticallCall;\n\n const effect = batcher\n .enqueue<ContractFunctionReturnType<TAbi, \"pure\" | \"view\", TFunctionName>>(\n params.chainId,\n call,\n {\n blockNumber: params.blockNumber,\n blockTag: params.blockTag,\n }\n )\n .pipe(\n Effect.mapError((cause) =>\n normalizeReadError(params as unknown as ReadParams<Abi, string>, cause)\n )\n );\n\n return queryClient.query(key, effect, {\n blockScoped: options?.blockScoped ?? true,\n chainId: params.chainId,\n ttl: options?.ttl,\n });\n };\n\n const watchRead = <\n TAbi extends Abi,\n TFunctionName extends ContractFunctionName<TAbi, \"pure\" | \"view\">,\n >(\n params: ReadParams<TAbi, TFunctionName>,\n options?: ContractQueryWatchOptions | undefined\n ) =>\n Effect.gen(function* () {\n const refetchOn = options?.refetchOn ?? (yield* chainHead.watch(params.chainId));\n const key = stableKey(params as unknown as ReadParams<Abi, string>);\n\n const effect = read(params, options);\n return queryClient.watch(key, effect, {\n blockScoped: options?.blockScoped ?? true,\n chainId: params.chainId,\n refetchOn,\n ttl: options?.ttl,\n });\n });\n\n return ContractQuery.of({ read, watchRead });\n })\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"contract-query.test.integration.js","sourceRoot":"","sources":["../../src/query/contract-query.test.integration.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contract-query.test.integration.js","sourceRoot":"","sources":["../../src/query/contract-query.test.integration.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from \"@effect/vitest\";\nimport { Effect, Layer, Stream } from \"effect\";\nimport type { Abi } from \"viem\";\nimport { erc20Abi } from \"viem\";\nimport { ContractReader } from \"@/src/contract/index.js\";\nimport {\n ChainHead,\n ContractQuery,\n ContractQueryLive,\n MulticallBatcherLive,\n QueryClientLive,\n} from \"@/src/query/index.js\";\nimport { makeRpcCacheLive, RequestDedupLive } from \"@/src/rpc/index.js\";\nimport { TEST_ADDRESS, TEST_ADDRESS_2, TEST_CHAIN_ID } from \"@/src/testing-kit/index.js\";\n\ndescribe(\"ContractQuery\", () => {\n it.effect(\"batches concurrent reads into a single multicall\", () =>\n Effect.gen(function* () {\n let multicallCount = 0;\n let lastBatchSize = 0;\n\n const contractReaderLayer = Layer.succeed(\n ContractReader,\n ContractReader.of({\n multicall: (_chainId, calls) => {\n multicallCount += 1;\n lastBatchSize = calls.length;\n return Effect.succeed(\n calls.map((_, i) => ({\n result: BigInt(i + 1),\n status: \"success\" as const,\n })) as any\n );\n },\n read: () => Effect.succeed(0n as any),\n })\n );\n\n const chainHeadLayer = Layer.succeed(\n ChainHead,\n ChainHead.of({\n current: () => Effect.succeed(1n),\n watch: () => Effect.succeed(Stream.empty),\n })\n );\n\n const queryClientLayer = Layer.provideMerge(\n QueryClientLive,\n Layer.mergeAll(chainHeadLayer, makeRpcCacheLive({ ttl: 60_000 }), RequestDedupLive)\n );\n\n const multicallBatcherLayer = Layer.provideMerge(MulticallBatcherLive, contractReaderLayer);\n\n const contractQueryLayer = Layer.provide(\n ContractQueryLive,\n Layer.mergeAll(queryClientLayer, multicallBatcherLayer)\n );\n\n const contractQuery = yield* ContractQuery.pipe(Effect.provide(contractQueryLayer));\n\n // Use batching: true to enable request batching for concurrent effects\n const [r1, r2, r3] = yield* Effect.all(\n [\n contractQuery.read({\n abi: erc20Abi,\n address: TEST_ADDRESS,\n args: [TEST_ADDRESS] as const,\n chainId: TEST_CHAIN_ID,\n functionName: \"balanceOf\",\n }),\n contractQuery.read({\n abi: erc20Abi,\n address: TEST_ADDRESS,\n args: [TEST_ADDRESS_2] as const,\n chainId: TEST_CHAIN_ID,\n functionName: \"balanceOf\",\n }),\n contractQuery.read({\n abi: erc20Abi,\n address: TEST_ADDRESS,\n chainId: TEST_CHAIN_ID,\n functionName: \"totalSupply\",\n }),\n ],\n { batching: true, concurrency: 3 }\n );\n\n expect(r1).toBe(1n);\n expect(r2).toBe(2n);\n expect(r3).toBe(3n);\n expect(multicallCount).toBe(1);\n expect(lastBatchSize).toBe(3);\n }).pipe(Effect.scoped)\n );\n\n it.effect(\"caches identical reads (no additional multicall)\", () =>\n Effect.gen(function* () {\n let multicallCount = 0;\n\n const contractReaderLayer = Layer.succeed(\n ContractReader,\n ContractReader.of({\n multicall: (_chainId, calls) => {\n multicallCount += 1;\n return Effect.succeed(\n calls.map(() => ({\n result: 123n,\n status: \"success\" as const,\n })) as any\n );\n },\n read: () => Effect.succeed(0n as any),\n })\n );\n\n const chainHeadLayer = Layer.succeed(\n ChainHead,\n ChainHead.of({\n current: () => Effect.succeed(1n),\n watch: () => Effect.succeed(Stream.empty),\n })\n );\n\n const queryClientLayer = Layer.provideMerge(\n QueryClientLive,\n Layer.mergeAll(chainHeadLayer, makeRpcCacheLive({ ttl: 60_000 }), RequestDedupLive)\n );\n\n const multicallBatcherLayer = Layer.provideMerge(MulticallBatcherLive, contractReaderLayer);\n\n const contractQueryLayer = Layer.provide(\n ContractQueryLive,\n Layer.mergeAll(queryClientLayer, multicallBatcherLayer)\n );\n\n const contractQuery = yield* ContractQuery.pipe(Effect.provide(contractQueryLayer));\n\n const params = {\n abi: erc20Abi,\n address: TEST_ADDRESS,\n args: [TEST_ADDRESS] as const,\n chainId: TEST_CHAIN_ID,\n functionName: \"balanceOf\" as const,\n };\n\n const r1 = yield* contractQuery.read(params);\n const r2 = yield* contractQuery.read(params);\n\n expect(r1).toBe(123n);\n expect(r2).toBe(123n);\n expect(multicallCount).toBe(1);\n }).pipe(Effect.scoped)\n );\n\n it.effect(\"does not crash when args contain BigInt (cache key)\", () =>\n Effect.gen(function* () {\n let multicallCount = 0;\n\n const bigintArgAbi = [\n {\n inputs: [{ name: \"x\", type: \"uint256\" }],\n name: \"echo\",\n outputs: [{ name: \"y\", type: \"uint256\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n ] as const satisfies Abi;\n\n const contractReaderLayer = Layer.succeed(\n ContractReader,\n ContractReader.of({\n multicall: (_chainId, calls) => {\n multicallCount += 1;\n expect(calls).toHaveLength(1);\n return Effect.succeed([{ result: 456n, status: \"success\" as const }] as any);\n },\n read: () => Effect.succeed(0n as any),\n })\n );\n\n const chainHeadLayer = Layer.succeed(\n ChainHead,\n ChainHead.of({\n current: () => Effect.succeed(1n),\n watch: () => Effect.succeed(Stream.empty),\n })\n );\n\n const queryClientLayer = Layer.provideMerge(\n QueryClientLive,\n Layer.mergeAll(chainHeadLayer, makeRpcCacheLive({ ttl: 60_000 }), RequestDedupLive)\n );\n\n const multicallBatcherLayer = Layer.provideMerge(MulticallBatcherLive, contractReaderLayer);\n\n const contractQueryLayer = Layer.provide(\n ContractQueryLive,\n Layer.mergeAll(queryClientLayer, multicallBatcherLayer)\n );\n\n const contractQuery = yield* ContractQuery.pipe(Effect.provide(contractQueryLayer));\n\n const params = {\n abi: bigintArgAbi,\n address: TEST_ADDRESS,\n args: [1n] as const,\n chainId: TEST_CHAIN_ID,\n functionName: \"echo\" as const,\n };\n\n const r1 = yield* contractQuery.read(params);\n const r2 = yield* contractQuery.read(params);\n\n expect(r1).toBe(456n);\n expect(r2).toBe(456n);\n expect(multicallCount).toBe(1);\n }).pipe(Effect.scoped)\n );\n});\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC","sourcesContent":["export * from \"./chain-head.js\";\nexport * from \"./client.js\";\nexport * from \"./contract-query.js\";\nexport * from \"./multicall-batcher.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"multicall-batcher.js","sourceRoot":"","sources":["../../src/query/multicall-batcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multicall-batcher.js","sourceRoot":"","sources":["../../src/query/multicall-batcher.ts"],"names":[],"mappings":"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","sourcesContent":["import { Context, Effect, Layer, Request, RequestResolver } from \"effect\";\nimport type { ContractReaderShape } from \"@/src/contract/index.js\";\nimport { ContractReader } from \"@/src/contract/index.js\";\nimport type { MulticallCall } from \"@/src/types/index.js\";\n\nexport type MulticallBatchOptions = {\n readonly blockNumber?: bigint | undefined;\n readonly blockTag?: import(\"viem\").BlockTag | undefined;\n};\n\n/**\n * Request type for multicall batching.\n * Each request represents a single contract call to be batched.\n */\ninterface MulticallRequest extends Request.Request<unknown, Error> {\n readonly _tag: \"MulticallRequest\";\n readonly chainId: number;\n readonly call: MulticallCall;\n readonly options?: MulticallBatchOptions | undefined;\n}\n\nconst MulticallRequest = Request.tagged<MulticallRequest>(\"MulticallRequest\");\n\n/**\n * Generate a stable cache key for grouping requests by chainId and options.\n */\nconst stableStringify = (value: unknown): string =>\n JSON.stringify(value, (_, v) => (typeof v === \"bigint\" ? v.toString() : v));\n\nconst keyFor = (chainId: number, options?: MulticallBatchOptions | undefined): string =>\n `${chainId}:${stableStringify(options ?? {})}`;\n\ntype RequestGroup = {\n chainId: number;\n options?: MulticallBatchOptions | undefined;\n requests: readonly MulticallRequest[];\n};\n\n/**\n * Group requests by chainId and block options.\n */\nconst groupRequests = (requests: readonly MulticallRequest[]): Map<string, RequestGroup> => {\n const grouped = new Map<string, RequestGroup>();\n\n for (const req of requests) {\n const key = keyFor(req.chainId, req.options);\n const existing = grouped.get(key);\n if (existing) {\n grouped.set(key, {\n ...existing,\n requests: [...existing.requests, req],\n });\n } else {\n grouped.set(key, {\n chainId: req.chainId,\n options: req.options,\n requests: [req],\n });\n }\n }\n\n return grouped;\n};\n\n/**\n * Complete all requests in a group with a failure.\n */\nconst failGroup = (requests: readonly MulticallRequest[], error: Error) =>\n Effect.forEach(requests, (req) => Request.completeEffect(req, Effect.fail(error)), {\n discard: true,\n });\n\n/**\n * Complete all requests in a group with their corresponding results.\n */\nconst completeGroup = (\n requests: readonly MulticallRequest[],\n results: readonly {\n status: \"success\" | \"failure\";\n result?: unknown;\n error?: Error;\n }[]\n) =>\n Effect.forEach(\n requests,\n (req, i) => {\n const res = results[i];\n if (res?.status === \"success\") {\n return Request.completeEffect(req, Effect.succeed(res.result));\n }\n return Request.completeEffect(\n req,\n Effect.fail(res?.error ?? new Error(\"Unknown multicall error\"))\n );\n },\n { discard: true }\n );\n\n/**\n * Execute a single multicall group and complete all requests.\n */\nconst executeGroup = (contractReader: ContractReaderShape, group: RequestGroup) =>\n Effect.gen(function* () {\n const result = yield* contractReader\n .multicall(\n group.chainId,\n group.requests.map((r) => r.call),\n group.options\n )\n .pipe(Effect.either);\n\n if (result._tag === \"Left\") {\n const error = result.left instanceof Error ? result.left : new Error(String(result.left));\n yield* failGroup(group.requests, error);\n } else {\n yield* completeGroup(group.requests, result.right);\n }\n });\n\n/**\n * Creates a batched RequestResolver that groups multicall requests by chainId and options.\n */\nconst makeMulticallResolver = (\n contractReader: ContractReaderShape\n): RequestResolver.RequestResolver<MulticallRequest, never> =>\n RequestResolver.makeBatched((requests: readonly MulticallRequest[]) =>\n Effect.gen(function* () {\n const grouped = groupRequests(requests);\n\n // Execute groups in parallel (cross-chain requests can run concurrently)\n yield* Effect.all(\n [...grouped.values()].map((group) => executeGroup(contractReader, group)),\n { concurrency: \"unbounded\" }\n );\n })\n ).pipe(RequestResolver.batchN(100));\n\nexport type MulticallBatcherShape = {\n readonly enqueue: <A>(\n chainId: number,\n call: MulticallCall,\n options?: MulticallBatchOptions | undefined\n ) => Effect.Effect<A, Error>;\n};\n\nexport class MulticallBatcher extends Context.Tag(\"ew3/MulticallBatcher\")<\n MulticallBatcher,\n MulticallBatcherShape\n>() {}\n\n/**\n * Live implementation of MulticallBatcher using Effect's Request/RequestResolver.\n * Automatically batches and deduplicates multicall requests across concurrent fibers.\n */\nexport const MulticallBatcherLive = Layer.effect(\n MulticallBatcher,\n Effect.gen(function* () {\n const contractReader = yield* ContractReader;\n const resolver = makeMulticallResolver(contractReader);\n\n return MulticallBatcher.of({\n enqueue: <A>(chainId: number, call: MulticallCall, options?: MulticallBatchOptions) =>\n Effect.request(MulticallRequest({ call, chainId, options }), resolver) as Effect.Effect<\n A,\n Error\n >,\n });\n })\n);\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react-hooks/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAOb,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,SAAS,EACT,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,8CAA8C,CAAC;AAKtD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react-hooks/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAOb,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,aAAa,EACb,aAAa,EACb,SAAS,EACT,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,8CAA8C,CAAC;AAKtD,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC;AAC7F,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["\"use client\";\n\nexport type {\n EffectMemoOptions,\n StreamState,\n UseEffectResult,\n} from \"@/src/integrations/react-hooks/primitives.js\";\nexport {\n useEffectMemo,\n useEffectMemoFactory,\n useEffectOnce,\n useForkEffect,\n useStream,\n useStreamEffect,\n useStreamValue,\n useSubscriptionRef,\n useSubscriptionRefValue,\n} from \"@/src/integrations/react-hooks/primitives.js\";\nexport type {\n EffectEvmLayerProviderProps,\n EffectEvmProviderProps,\n} from \"@/src/integrations/react-hooks/provider.js\";\nexport {\n EffectEvmLayerProvider,\n EffectEvmProvider,\n EffectEvmProviderSync,\n useEffectEvmLayer,\n useEffectEvmRuntime,\n} from \"@/src/integrations/react-hooks/provider.js\";\nexport type { WalletProviderRefActions } from \"@/src/integrations/react-hooks/wallet-provider-ref.js\";\nexport { useWalletProviderRef } from \"@/src/integrations/react-hooks/wallet-provider-ref.js\";\nexport { useIsSafeMultisig } from \"./use-is-safe-multisig.js\";\nexport { useSafeContext } from \"./use-safe-context.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"use-is-safe-multisig.js","sourceRoot":"","sources":["../../src/react-hooks/use-is-safe-multisig.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAMvD,MAAM,YAAY,GAAG;IAEnB,yBAAyB;IACzB,wBAAwB;IACxB,qBAAqB;IAErB,4BAA4B;IAC5B,yBAAyB;IACzB,2BAA2B;IAC3B,0BAA0B;CAClB,CAAC;AAYX,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,CAAC;IAChD,MAAM,aAAa,GAAG,cAAc,EAAE,CAAC;IAIvC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,iBAAiB,EAAE,EAAE,CAAC;YACpD,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAGP,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,WAAW,IAAI,SAAS,EAAE,EAAE,KAAK,MAAM,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,OAAO,YAAY,CAAC;AACtB,CAAC;AAMD,SAAS,iBAAiB;IACxB,IAAI,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QAEP,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YAC5C,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"use-is-safe-multisig.js","sourceRoot":"","sources":["../../src/react-hooks/use-is-safe-multisig.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAMvD,MAAM,YAAY,GAAG;IAEnB,yBAAyB;IACzB,wBAAwB;IACxB,qBAAqB;IAErB,4BAA4B;IAC5B,yBAAyB;IACzB,2BAA2B;IAC3B,0BAA0B;CAClB,CAAC;AAYX,MAAM,UAAU,iBAAiB;IAC/B,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,CAAC;IAChD,MAAM,aAAa,GAAG,cAAc,EAAE,CAAC;IAIvC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,iBAAiB,EAAE,EAAE,CAAC;YACpD,eAAe,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAGP,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,IAAI,WAAW,IAAI,SAAS,EAAE,EAAE,KAAK,MAAM,EAAE,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,OAAO,YAAY,CAAC;AACtB,CAAC;AAMD,SAAS,iBAAiB;IACxB,IAAI,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACnD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QAEP,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC;YAC5C,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC1D,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,KAAK,MAAM,CAAC,CAAC;QAClE,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC","sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { useAccount } from \"wagmi\";\nimport { useSafeContext } from \"./use-safe-context.js\";\n\n/**\n * Known Safe wallet domains for iframe origin validation.\n * Includes the main Safe app and chain-specific Safe deployments.\n */\nconst SAFE_ORIGINS = [\n // Main Safe domains\n \"https://app.safe.global\",\n \"https://gnosis-safe.io\",\n \"https://safe.global\",\n // Chain-specific Safe deployments\n \"https://safe.berachain.com\",\n \"https://safe.chiliz.com\",\n \"https://safe.lightlink.io\",\n \"https://safe.optimism.io\",\n] as const;\n\n/**\n * Detect if the connected wallet is a Safe multisig.\n *\n * Detection strategy (in order of reliability):\n * 1. Safe Apps SDK detection via postMessage (most reliable, works cross-origin)\n * 2. Wagmi connector ID check\n * 3. Iframe origin validation (fallback, may fail cross-origin)\n *\n * @returns true if wallet is a Safe multisig\n */\nexport function useIsSafeMultisig(): boolean {\n const { connector, isConnected } = useAccount();\n const isSafeContext = useSafeContext();\n\n // Method 3: Iframe origin fallback (may fail cross-origin)\n // Deferred to useEffect to avoid SSR hydration mismatch\n const [isSafeIframe, setIsSafeIframe] = useState(false);\n useEffect(() => {\n if (window.parent !== window && isValidSafeOrigin()) {\n setIsSafeIframe(true);\n }\n }, []);\n\n // Method 1: Safe Apps SDK (most reliable - uses postMessage)\n if (isSafeContext) {\n return true;\n }\n\n // Method 2: Connected via Safe connector\n if (isConnected && connector?.id === \"safe\") {\n return true;\n }\n\n // Method 3: Fallback\n return isSafeIframe;\n}\n\n/**\n * Check if the parent window origin matches known Safe domains.\n * This prevents false positives from other iframe contexts.\n */\nfunction isValidSafeOrigin(): boolean {\n try {\n // Try to access parent origin (may throw SecurityError for cross-origin)\n const parentOrigin = window.parent.location.origin;\n return SAFE_ORIGINS.some((origin) => parentOrigin === origin);\n } catch {\n // Cross-origin access blocked - check ancestorOrigins if available\n if (window.location.ancestorOrigins?.length) {\n const ancestorOrigin = window.location.ancestorOrigins[0];\n return SAFE_ORIGINS.some((origin) => ancestorOrigin === origin);\n }\n // Cannot determine origin - default to false to avoid false positives\n return false;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"use-safe-context.js","sourceRoot":"","sources":["../../src/react-hooks/use-safe-context.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAM5C,MAAM,gBAAgB,GAAG,IAAI,CAAC;AA0B9B,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QAEb,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAC;QAGtB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAGrB,MAAM,CAAC,4BAA4B,CAAC;aACjC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,EAAE;YACT,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"use-safe-context.js","sourceRoot":"","sources":["../../src/react-hooks/use-safe-context.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAM5C,MAAM,gBAAgB,GAAG,IAAI,CAAC;AA0B9B,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QAEb,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO;QACT,CAAC;QAED,IAAI,SAAS,GAAG,KAAK,CAAC;QAGtB,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAGrB,MAAM,CAAC,4BAA4B,CAAC;aACjC,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC,CAAC;aACD,IAAI,CAAC,GAAG,EAAE;YACT,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,SAAS,CAAC,KAAK,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;aACD,OAAO,CAAC,GAAG,EAAE;YACZ,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\n/**\n * Timeout for Safe SDK detection in milliseconds.\n * Safe Apps SDK uses postMessage which can hang if not in Safe context.\n */\nconst SAFE_SDK_TIMEOUT = 3000;\n\n/**\n * Detect if the app is running in a Safe App context using the Safe Apps SDK.\n *\n * This hook asynchronously checks with the Safe Apps SDK to determine if\n * we're running inside a Safe App iframe. More reliable than iframe origin\n * detection because:\n * - Uses postMessage (works cross-origin)\n * - Gets definitive answer from Safe\n * - Includes timeout to prevent hangs\n *\n * @returns true if running in Safe App context, false otherwise\n *\n * @example\n * ```tsx\n * function MyComponent() {\n * const isSafeContext = useSafeContext();\n *\n * if (isSafeContext) {\n * return <p>Running in Safe App</p>;\n * }\n * return <p>Regular browser context</p>;\n * }\n * ```\n */\nexport function useSafeContext(): boolean {\n const [isSafe, setIsSafe] = useState(false);\n\n useEffect(() => {\n // SSR guard\n if (typeof window === \"undefined\") {\n return;\n }\n\n let cancelled = false;\n\n // Timeout fallback - resolve to false if SDK doesn't respond\n const timeout = setTimeout(() => {\n if (!cancelled) {\n setIsSafe(false);\n }\n }, SAFE_SDK_TIMEOUT);\n\n // Dynamically import SDK to keep it optional\n import(\"@safe-global/safe-apps-sdk\")\n .then(({ default: SafeAppsSDK }) => {\n const sdk = new SafeAppsSDK();\n return sdk.safe.getInfo();\n })\n .then(() => {\n if (!cancelled) {\n setIsSafe(true);\n }\n })\n .catch(() => {\n if (!cancelled) {\n setIsSafe(false);\n }\n })\n .finally(() => {\n clearTimeout(timeout);\n });\n\n return () => {\n cancelled = true;\n clearTimeout(timeout);\n };\n }, []);\n\n return isSafe;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react-hooks/wagmi/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,cAAc,+CAA+C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react-hooks/wagmi/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,cAAc,+CAA+C,CAAC","sourcesContent":["\"use client\";\n\nexport * from \"@/src/integrations/react-hooks/wagmi/index.js\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/rpc/cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/rpc/cache.ts"],"names":[],"mappings":"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","sourcesContent":["import { Clock, Context, Effect, Layer, Ref } from \"effect\";\n\nexport type CacheConfig = {\n ttl?: number; // default 12_000ms (1 block)\n maxSize?: number; // default 100 entries\n blockScoped?: boolean; // default true - invalidate on new block\n};\n\nexport type CacheEntry<T> = {\n value: T;\n timestamp: number;\n blockNumber?: bigint;\n ttl?: number;\n};\n\nexport type RpcCacheShape = {\n readonly get: <T>(key: string) => Effect.Effect<T | null>;\n readonly set: <T>(\n key: string,\n value: T,\n blockNumber?: bigint,\n ttl?: number\n ) => Effect.Effect<void>;\n readonly invalidate: (key: string) => Effect.Effect<void>;\n readonly invalidateBlock: (blockNumber: bigint) => Effect.Effect<void>;\n readonly clear: Effect.Effect<void>;\n};\n\nexport class RpcCache extends Context.Tag(\"ew3/RpcCache\")<RpcCache, RpcCacheShape>() {}\n\n/**\n * Create a cache layer with LRU eviction using Effect's Cache module\n */\nexport const makeRpcCacheLive = (config?: CacheConfig): Layer.Layer<RpcCache> => {\n const defaultTtl = config?.ttl ?? 12_000;\n const maxSize = config?.maxSize ?? 100;\n const blockScoped = config?.blockScoped ?? true;\n\n return Layer.effect(\n RpcCache,\n Effect.gen(function* () {\n // Store cache entries with timestamps and metadata\n const entriesRef = yield* Ref.make(new Map<string, CacheEntry<unknown>>());\n // Track access order for LRU eviction\n const accessOrderRef = yield* Ref.make(new Map<string, number>());\n const accessCounterRef = yield* Ref.make(0);\n\n // Evict the least recently used entry when at capacity\n const evictOldest = Effect.gen(function* () {\n const entries = yield* Ref.get(entriesRef);\n const accessOrder = yield* Ref.get(accessOrderRef);\n\n if (entries.size >= maxSize) {\n // Find the key with the lowest access counter (oldest)\n let oldestKey: string | null = null;\n let oldestAccess = Number.POSITIVE_INFINITY;\n\n for (const [key, access] of accessOrder.entries()) {\n if (access < oldestAccess) {\n oldestAccess = access;\n oldestKey = key;\n }\n }\n\n if (oldestKey) {\n const keyToEvict = oldestKey;\n yield* Ref.update(entriesRef, (e) => {\n const newEntries = new Map(e);\n newEntries.delete(keyToEvict);\n return newEntries;\n });\n yield* Ref.update(accessOrderRef, (o) => {\n const newAccessOrder = new Map(o);\n newAccessOrder.delete(keyToEvict);\n return newAccessOrder;\n });\n }\n }\n });\n\n const get = <T>(key: string): Effect.Effect<T | null> =>\n Effect.gen(function* () {\n const entries = yield* Ref.get(entriesRef);\n const entry = entries.get(key);\n\n if (!entry) {\n return null;\n }\n\n // Check TTL expiration\n const now = yield* Clock.currentTimeMillis;\n const entryTtl = entry.ttl ?? defaultTtl;\n\n if (now - entry.timestamp > entryTtl) {\n // Expired - remove it\n yield* Ref.update(entriesRef, (e) => {\n const newEntries = new Map(e);\n newEntries.delete(key);\n return newEntries;\n });\n yield* Ref.update(accessOrderRef, (o) => {\n const newAccessOrder = new Map(o);\n newAccessOrder.delete(key);\n return newAccessOrder;\n });\n return null;\n }\n\n // Update access order for LRU\n const accessCounter = yield* Ref.updateAndGet(accessCounterRef, (n) => n + 1);\n yield* Ref.update(accessOrderRef, (o) => {\n const newAccessOrder = new Map(o);\n newAccessOrder.set(key, accessCounter);\n return newAccessOrder;\n });\n\n return entry.value as T;\n });\n\n const set = <T>(\n key: string,\n value: T,\n blockNumber?: bigint,\n entryTtl?: number\n ): Effect.Effect<void> =>\n Effect.gen(function* () {\n const now = yield* Clock.currentTimeMillis;\n\n // Evict oldest entry if at capacity\n yield* evictOldest;\n\n // Store entry with timestamp\n yield* Ref.update(entriesRef, (entries) => {\n const newEntries = new Map(entries);\n newEntries.set(key, {\n blockNumber,\n timestamp: now,\n ttl: entryTtl,\n value,\n });\n return newEntries;\n });\n\n // Update access order for LRU\n const accessCounter = yield* Ref.updateAndGet(accessCounterRef, (n) => n + 1);\n yield* Ref.update(accessOrderRef, (o) => {\n const newAccessOrder = new Map(o);\n newAccessOrder.set(key, accessCounter);\n return newAccessOrder;\n });\n });\n\n const invalidate = (key: string): Effect.Effect<void> =>\n Effect.gen(function* () {\n yield* Ref.update(entriesRef, (entries) => {\n const newEntries = new Map(entries);\n newEntries.delete(key);\n return newEntries;\n });\n yield* Ref.update(accessOrderRef, (o) => {\n const newAccessOrder = new Map(o);\n newAccessOrder.delete(key);\n return newAccessOrder;\n });\n });\n\n const invalidateBlock = (blockNumber: bigint): Effect.Effect<void> =>\n Effect.gen(function* () {\n if (!blockScoped) {\n return;\n }\n\n const entries = yield* Ref.get(entriesRef);\n const keysToInvalidate: string[] = [];\n\n for (const [key, entry] of entries.entries()) {\n if (entry.blockNumber !== undefined && entry.blockNumber < blockNumber) {\n keysToInvalidate.push(key);\n }\n }\n\n // Invalidate all matching keys\n yield* Effect.all(\n keysToInvalidate.map((key) => invalidate(key)),\n { concurrency: \"unbounded\" }\n );\n });\n\n const clear: Effect.Effect<void> = Effect.gen(function* () {\n yield* Ref.set(entriesRef, new Map());\n yield* Ref.set(accessOrderRef, new Map());\n yield* Ref.set(accessCounterRef, 0);\n });\n\n return {\n clear,\n get,\n invalidate,\n invalidateBlock,\n set,\n } satisfies RpcCacheShape;\n })\n );\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/rpc/circuit-breaker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"circuit-breaker.js","sourceRoot":"","sources":["../../src/rpc/circuit-breaker.ts"],"names":[],"mappings":"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","sourcesContent":["import { Clock, Config, Effect, Ref, Schema } from \"effect\";\nimport { DEFAULT_MAX_DELAY } from \"@/src/constants/index.js\";\n\nexport type CircuitState = \"closed\" | \"open\" | \"half-open\";\n\nexport type CircuitBreakerConfig = {\n /** Number of failures before opening the circuit (default: 5) */\n failureThreshold?: number;\n /** Time in milliseconds before attempting recovery (default: 30_000) */\n resetTimeout?: number;\n /** Number of successes needed to close from half-open (default: 2) */\n successThreshold?: number;\n};\n\n/**\n * Config-based circuit breaker configuration from environment variables.\n *\n * Environment variables (all optional, nested under `EW3_CIRCUIT_BREAKER_` prefix):\n * - `EW3_CIRCUIT_BREAKER_FAILURE_THRESHOLD`: Number of failures before opening circuit (default: 5)\n * - `EW3_CIRCUIT_BREAKER_SUCCESS_THRESHOLD`: Number of successes needed to close from half-open (default: 3)\n * - `EW3_CIRCUIT_BREAKER_RESET_TIMEOUT`: Time in ms before attempting recovery (default: 30_000)\n *\n * @example\n * ```typescript\n * import { Effect } from \"effect\";\n * import { CircuitBreakerConfigFromEnv } from \"effect-evm/rpc\";\n *\n * const program = Effect.gen(function* () {\n * const config = yield* CircuitBreakerConfigFromEnv;\n * // Use config for circuit breaker\n * });\n * ```\n */\nexport const CircuitBreakerConfigFromEnv = Config.all({\n failureThreshold: Config.number(\"FAILURE_THRESHOLD\").pipe(Config.withDefault(5)),\n resetTimeout: Config.number(\"RESET_TIMEOUT\").pipe(Config.withDefault(30_000)),\n successThreshold: Config.number(\"SUCCESS_THRESHOLD\").pipe(Config.withDefault(3)),\n}).pipe(Config.nested(\"EW3_CIRCUIT_BREAKER\"));\n\n/**\n * Error thrown when circuit breaker is open\n */\nexport class CircuitOpenError extends Schema.TaggedError<CircuitOpenError>()(\"CircuitOpenError\", {\n message: Schema.String,\n openedAt: Schema.Number,\n}) {}\n\n/**\n * Internal state tracking for circuit breaker\n */\ntype CircuitBreakerState = {\n state: CircuitState;\n failures: number;\n successes: number;\n lastFailureTime: number;\n};\n\n/**\n * Circuit breaker service definition\n */\nexport type CircuitBreaker = {\n /** Execute an effect with circuit breaker protection */\n readonly execute: <A, E, R>(\n effect: Effect.Effect<A, E, R>\n ) => Effect.Effect<A, E | CircuitOpenError, R>;\n /** Get current circuit state */\n readonly getState: Effect.Effect<CircuitState>;\n /** Manually reset the circuit to closed state */\n readonly reset: Effect.Effect<void>;\n};\n\n/**\n * Create a circuit breaker instance\n * Uses Ref for thread-safe state management\n *\n * @param config - Circuit breaker configuration options\n * @returns Effect that creates a new CircuitBreaker\n */\nexport const makeCircuitBreaker = (\n config?: CircuitBreakerConfig\n): Effect.Effect<CircuitBreaker> => {\n const {\n failureThreshold = 5,\n resetTimeout = DEFAULT_MAX_DELAY,\n successThreshold = 2,\n } = config ?? {};\n\n return Effect.gen(function* () {\n const stateRef = yield* Ref.make<CircuitBreakerState>({\n failures: 0,\n lastFailureTime: 0,\n state: \"closed\",\n successes: 0,\n });\n\n const recordSuccess = Effect.gen(function* () {\n yield* Ref.update(stateRef, (state) => {\n if (state.state === \"half-open\") {\n const newSuccesses = state.successes + 1;\n if (newSuccesses >= successThreshold) {\n // Close the circuit after enough successes\n return {\n failures: 0,\n lastFailureTime: 0,\n state: \"closed\" as const,\n successes: 0,\n };\n }\n return { ...state, successes: newSuccesses };\n }\n // Reset failure count on success in closed state\n return { ...state, failures: 0 };\n });\n });\n\n const recordFailure = Effect.gen(function* () {\n const now = yield* Clock.currentTimeMillis;\n yield* Ref.update(stateRef, (state) => {\n const newFailures = state.failures + 1;\n\n if (state.state === \"half-open\") {\n // Failure in half-open state reopens the circuit\n return {\n failures: newFailures,\n lastFailureTime: now,\n state: \"open\" as const,\n successes: 0,\n };\n }\n\n if (state.state === \"closed\" && newFailures >= failureThreshold) {\n // Open the circuit after threshold failures\n return {\n failures: newFailures,\n lastFailureTime: now,\n state: \"open\" as const,\n successes: 0,\n };\n }\n\n return { ...state, failures: newFailures, lastFailureTime: now };\n });\n });\n\n const execute = <A, E, R>(\n effect: Effect.Effect<A, E, R>\n ): Effect.Effect<A, E | CircuitOpenError, R> =>\n Effect.gen(function* () {\n const now = yield* Clock.currentTimeMillis;\n const currentState = yield* Ref.get(stateRef);\n\n // Check if we should attempt to recover\n if (currentState.state === \"open\" && now - currentState.lastFailureTime >= resetTimeout) {\n yield* Ref.update(stateRef, (s) => ({\n ...s,\n state: \"half-open\" as const,\n successes: 0,\n }));\n }\n\n const state = yield* Ref.get(stateRef);\n\n // Reject if circuit is open\n if (state.state === \"open\") {\n return yield* Effect.fail(\n new CircuitOpenError({\n message: \"Circuit breaker is open\",\n openedAt: state.lastFailureTime,\n })\n );\n }\n\n // Execute the effect and track success/failure\n const result = yield* Effect.matchEffect(effect, {\n onFailure: (error) =>\n Effect.gen(function* () {\n yield* recordFailure;\n return yield* Effect.fail(error);\n }),\n onSuccess: (value) =>\n Effect.gen(function* () {\n yield* recordSuccess;\n return value;\n }),\n });\n\n return result;\n });\n\n const getState = Effect.gen(function* () {\n const state = yield* Ref.get(stateRef);\n return state.state;\n });\n\n const reset = Ref.set(stateRef, {\n failures: 0,\n lastFailureTime: 0,\n state: \"closed\" as const,\n successes: 0,\n });\n\n return {\n execute,\n getState,\n reset,\n } satisfies CircuitBreaker;\n });\n};\n"]}