@prb/effect-evm 1.0.0 → 1.0.1
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.
- package/CHANGELOG.md +9 -0
- package/README.md +5 -2
- package/dist/integrations/wagmi/layers.d.ts +4 -2
- package/dist/integrations/wagmi/layers.d.ts.map +1 -1
- package/dist/integrations/wagmi/layers.js +5 -3
- package/dist/integrations/wagmi/layers.js.map +1 -1
- package/dist/presets/layers.d.ts +2 -1
- package/dist/presets/layers.d.ts.map +1 -1
- package/dist/presets/layers.js +8 -4
- package/dist/presets/layers.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,15 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Common Changelog](https://common-changelog.org/).
|
|
6
6
|
|
|
7
7
|
[1.0.0]: https://github.com/PaulRBerg/prb-effect/releases/tag/%40prb%2Feffect-evm%401.0.0
|
|
8
|
+
[1.0.1]: https://github.com/PaulRBerg/prb-effect/releases/tag/%40prb%2Feffect-evm%401.0.1
|
|
9
|
+
|
|
10
|
+
## [1.0.1] - 2026-02-04
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- Add optional `txPolicy` parameter to `WagmiWalletClientOptions` for customizing receipt timeout and tx settings per
|
|
15
|
+
layer
|
|
16
|
+
- Add `makeEffectEvmServices()` factory function for flexible service composition
|
|
8
17
|
|
|
9
18
|
## [1.0.0] - 2026-02-03
|
|
10
19
|
|
package/README.md
CHANGED
|
@@ -4,11 +4,14 @@
|
|
|
4
4
|
[](https://effect.website)
|
|
5
5
|
[](https://viem.sh)
|
|
6
6
|
|
|
7
|
-
> [!WARNING]
|
|
8
|
-
>
|
|
7
|
+
> [!WARNING]
|
|
8
|
+
>
|
|
9
|
+
> This is experimental, beta software. It is provided "as is" without warranty of any kind, express or implied.
|
|
9
10
|
|
|
10
11
|
Type-safe, composable EVM abstractions for [Effect](https://effect.website), built on [viem](https://viem.sh).
|
|
11
12
|
|
|
13
|
+

|
|
14
|
+
|
|
12
15
|
## 📦 Installation
|
|
13
16
|
|
|
14
17
|
```bash
|
|
@@ -2,11 +2,13 @@ import type { Config } from "@wagmi/core";
|
|
|
2
2
|
import { Layer } from "effect";
|
|
3
3
|
import type { Address } from "viem";
|
|
4
4
|
import { PublicClientService, WalletClientService } from "../../core/index.js";
|
|
5
|
+
import type { TxPolicy } from "../../tx/index.js";
|
|
5
6
|
export type WagmiWalletClientOptions = {
|
|
6
7
|
readonly account?: Address;
|
|
8
|
+
readonly txPolicy?: TxPolicy;
|
|
7
9
|
};
|
|
8
10
|
export declare function makePublicClientLayerFromWagmi(config: Config): Layer.Layer<PublicClientService>;
|
|
9
11
|
export declare function makeWalletClientLayerFromWagmi(config: Config, options?: WagmiWalletClientOptions): Layer.Layer<WalletClientService>;
|
|
10
|
-
export declare function makeEffectEvmLayerFromWagmi(config: Config, options?: WagmiWalletClientOptions): Layer.Layer<PublicClientService | WalletClientService | import("../../index.js").ContractReader | import("../../index.js").EventBackfill | import("../../index.js").CursorStore | import("../../index.js").CursorStream | import("../../index.js").EventStream | import("../../index.js").ReliableEventStream | import("../../index.js").GasService | import("../../index.js").NonceService | import("../../index.js").RpcCache | import("../../index.js").RequestDedup | import("../../index.js").TxReplacement | import("../../index.js").TxManager | import("../../index.js").ContractPipeline | import("../../index.js").ContractWriter | import("../../index.js").BalanceService | import("../../index.js").BlockService | import("../../index.js").DeployService | import("../../index.js").Eip7702Service | import("../../index.js").EnsResolver | import("../../index.js").Erc721Service | import("../../index.js").SubscriptionService | import("../../index.js").ChainHead | import("../../index.js").QueryClient | import("../../index.js").MulticallBatcher | import("../../index.js").ContractQuery | import("../../index.js").SignatureService | import("../../index.js").SimulationService, never, never>;
|
|
11
|
-
export declare function makeEffectEvmLayerFromWagmiWithWalletProviderRef(config: Config, options?: WagmiWalletClientOptions): Layer.Layer<import("../../wallet/index.js").WalletLifecycle | import("../../wallet/index.js").WalletProviderRef | import("../../wallet/index.js").WalletService | PublicClientService | WalletClientService | import("../../index.js").ContractReader | import("../../index.js").EventBackfill | import("../../index.js").CursorStore | import("../../index.js").CursorStream | import("../../index.js").EventStream | import("../../index.js").ReliableEventStream | import("../../index.js").GasService | import("../../index.js").NonceService | import("../../index.js").RpcCache | import("../../index.js").RequestDedup | import("../../index.js").TxReplacement | import("../../index.js").TxManager | import("../../index.js").ContractPipeline | import("../../index.js").ContractWriter | import("../../index.js").BalanceService | import("../../index.js").BlockService | import("../../index.js").DeployService | import("../../index.js").Eip7702Service | import("../../index.js").EnsResolver | import("../../index.js").Erc721Service | import("../../index.js").SubscriptionService | import("../../index.js").ChainHead | import("../../index.js").QueryClient | import("../../index.js").MulticallBatcher | import("../../index.js").ContractQuery | import("../../index.js").SignatureService | import("../../index.js").SimulationService, never, never>;
|
|
12
|
+
export declare function makeEffectEvmLayerFromWagmi(config: Config, options?: WagmiWalletClientOptions): Layer.Layer<PublicClientService | WalletClientService | import("../../index.js").ContractReader | import("../../index.js").EventBackfill | import("../../index.js").CursorStore | import("../../index.js").CursorStream | import("../../index.js").EventStream | import("../../index.js").ReliableEventStream | import("../../index.js").GasService | import("../../index.js").NonceService | import("../../index.js").RpcCache | import("../../index.js").RequestDedup | import("../../tx/index.js").TxReplacement | import("../../tx/index.js").TxManager | import("../../index.js").ContractPipeline | import("../../index.js").ContractWriter | import("../../index.js").BalanceService | import("../../index.js").BlockService | import("../../index.js").DeployService | import("../../index.js").Eip7702Service | import("../../index.js").EnsResolver | import("../../index.js").Erc721Service | import("../../index.js").SubscriptionService | import("../../index.js").ChainHead | import("../../index.js").QueryClient | import("../../index.js").MulticallBatcher | import("../../index.js").ContractQuery | import("../../index.js").SignatureService | import("../../index.js").SimulationService, never, never>;
|
|
13
|
+
export declare function makeEffectEvmLayerFromWagmiWithWalletProviderRef(config: Config, options?: WagmiWalletClientOptions): Layer.Layer<import("../../wallet/index.js").WalletLifecycle | import("../../wallet/index.js").WalletProviderRef | import("../../wallet/index.js").WalletService | PublicClientService | WalletClientService | import("../../index.js").ContractReader | import("../../index.js").EventBackfill | import("../../index.js").CursorStore | import("../../index.js").CursorStream | import("../../index.js").EventStream | import("../../index.js").ReliableEventStream | import("../../index.js").GasService | import("../../index.js").NonceService | import("../../index.js").RpcCache | import("../../index.js").RequestDedup | import("../../tx/index.js").TxReplacement | import("../../tx/index.js").TxManager | import("../../index.js").ContractPipeline | import("../../index.js").ContractWriter | import("../../index.js").BalanceService | import("../../index.js").BlockService | import("../../index.js").DeployService | import("../../index.js").Eip7702Service | import("../../index.js").EnsResolver | import("../../index.js").Erc721Service | import("../../index.js").SubscriptionService | import("../../index.js").ChainHead | import("../../index.js").QueryClient | import("../../index.js").MulticallBatcher | import("../../index.js").ContractQuery | import("../../index.js").SignatureService | import("../../index.js").SimulationService, never, never>;
|
|
12
14
|
//# sourceMappingURL=layers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../../../src/integrations/wagmi/layers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAEL,mBAAmB,EACnB,mBAAmB,EAGpB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../../../src/integrations/wagmi/layers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAEL,mBAAmB,EACnB,mBAAmB,EAGpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAOlD,MAAM,MAAM,wBAAwB,GAAG;IAMrC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAW3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CAC9B,CAAC;AAEF,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CA0B/F;AAED,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,wBAA6B,GACrC,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAkDlC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,wBAA6B,kqCASvC;AAYD,wBAAgB,gDAAgD,CAC9D,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,wBAA6B,wzCAgBvC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getPublicClient, getWalletClient } from "@wagmi/core";
|
|
2
2
|
import { Effect, Layer } from "effect";
|
|
3
3
|
import { ClientNotFoundError, PublicClientService, WalletClientService, WalletNotConnectedError, WrongNetworkError, } from "../../core/index.js";
|
|
4
|
-
import { effectEvmServices } from "../../presets/index.js";
|
|
4
|
+
import { effectEvmServices, makeEffectEvmServices } from "../../presets/index.js";
|
|
5
5
|
import { makeWalletProviderRefLive, WalletLifecycleFromProviderRefLive, WalletServiceFromProviderRefLive, } from "../../wallet/index.js";
|
|
6
6
|
export function makePublicClientLayerFromWagmi(config) {
|
|
7
7
|
return Layer.succeed(PublicClientService, {
|
|
@@ -61,12 +61,14 @@ export function makeWalletClientLayerFromWagmi(config, options = {}) {
|
|
|
61
61
|
}
|
|
62
62
|
export function makeEffectEvmLayerFromWagmi(config, options = {}) {
|
|
63
63
|
const clientLayers = Layer.mergeAll(makePublicClientLayerFromWagmi(config), makeWalletClientLayerFromWagmi(config, options));
|
|
64
|
-
|
|
64
|
+
const services = options.txPolicy ? makeEffectEvmServices(options.txPolicy) : effectEvmServices;
|
|
65
|
+
return Layer.provideMerge(services, clientLayers);
|
|
65
66
|
}
|
|
66
67
|
export function makeEffectEvmLayerFromWagmiWithWalletProviderRef(config, options = {}) {
|
|
67
68
|
const clientLayers = Layer.mergeAll(makePublicClientLayerFromWagmi(config), makeWalletClientLayerFromWagmi(config, options));
|
|
68
69
|
const providerRefLayer = makeWalletProviderRefLive();
|
|
69
70
|
const walletLayers = Layer.provideMerge(Layer.mergeAll(WalletServiceFromProviderRefLive, WalletLifecycleFromProviderRefLive), providerRefLayer);
|
|
70
|
-
|
|
71
|
+
const services = options.txPolicy ? makeEffectEvmServices(options.txPolicy) : effectEvmServices;
|
|
72
|
+
return Layer.provideMerge(Layer.mergeAll(services, walletLayers, providerRefLayer), clientLayers);
|
|
71
73
|
}
|
|
72
74
|
//# sourceMappingURL=layers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layers.js","sourceRoot":"","sources":["../../../src/integrations/wagmi/layers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"layers.js","sourceRoot":"","sources":["../../../src/integrations/wagmi/layers.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Config } from \"@wagmi/core\";\nimport { getPublicClient, getWalletClient } from \"@wagmi/core\";\nimport { Effect, Layer } from \"effect\";\nimport type { Address } from \"viem\";\nimport {\n ClientNotFoundError,\n PublicClientService,\n WalletClientService,\n WalletNotConnectedError,\n WrongNetworkError,\n} from \"@/src/core/index.js\";\nimport { effectEvmServices, makeEffectEvmServices } from \"@/src/presets/index.js\";\nimport type { TxPolicy } from \"@/src/tx/index.js\";\nimport {\n makeWalletProviderRefLive,\n WalletLifecycleFromProviderRefLive,\n WalletServiceFromProviderRefLive,\n} from \"@/src/wallet/index.js\";\n\nexport type WagmiWalletClientOptions = {\n /**\n * Fixed account to request from wagmi when creating a WalletClient.\n *\n * If omitted, wagmi will use the current connector/account (if present).\n */\n readonly account?: Address;\n /**\n * Custom transaction policy for receipt timeout and other tx settings.\n *\n * @example\n * ```ts\n * const layer = makeEffectEvmLayerFromWagmi(config, {\n * txPolicy: { receiptTimeout: Duration.toMillis(\"10 minutes\") }\n * });\n * ```\n */\n readonly txPolicy?: TxPolicy;\n};\n\nexport function makePublicClientLayerFromWagmi(config: Config): Layer.Layer<PublicClientService> {\n return Layer.succeed(PublicClientService, {\n get: (chainId) =>\n Effect.gen(function* () {\n const client = yield* Effect.try({\n catch: (cause) =>\n new ClientNotFoundError({\n chainId,\n message:\n cause instanceof Error ? cause.message : `No public client for chain ${chainId}`,\n }),\n try: () => getPublicClient(config, { chainId }),\n });\n\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\n return client;\n }),\n });\n}\n\nexport function makeWalletClientLayerFromWagmi(\n config: Config,\n options: WagmiWalletClientOptions = {}\n): Layer.Layer<WalletClientService> {\n return Layer.succeed(WalletClientService, {\n get: (chainId) =>\n Effect.tryPromise({\n catch: (cause) =>\n new WalletNotConnectedError({\n chainId,\n message:\n cause instanceof Error\n ? cause.message\n : `No wallet client available for chain ${chainId}`,\n }),\n try: () => {\n const params = options.account ? { account: options.account, chainId } : { chainId };\n return getWalletClient(config, params);\n },\n }).pipe(\n Effect.flatMap((client) => {\n if (!client) {\n return Effect.fail(\n new WalletNotConnectedError({\n chainId,\n message: `No wallet client available for chain ${chainId}`,\n })\n );\n }\n\n return Effect.tryPromise({\n catch: () =>\n new WalletNotConnectedError({\n chainId,\n message: `Failed to read wallet chainId for ${chainId}`,\n }),\n try: () => client.getChainId(),\n }).pipe(\n Effect.flatMap((actualChainId) =>\n actualChainId === chainId\n ? Effect.succeed(client)\n : 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 })\n ),\n });\n}\n\nexport function makeEffectEvmLayerFromWagmi(\n config: Config,\n options: WagmiWalletClientOptions = {}\n) {\n const clientLayers = Layer.mergeAll(\n makePublicClientLayerFromWagmi(config),\n makeWalletClientLayerFromWagmi(config, options)\n );\n\n const services = options.txPolicy ? makeEffectEvmServices(options.txPolicy) : effectEvmServices;\n return Layer.provideMerge(services, clientLayers);\n}\n\n/**\n * Like `makeEffectEvmLayerFromWagmi`, but also provides a dynamic `WalletProviderRef`\n * and wallet services derived from it.\n *\n * This is the recommended layer for frontends that want a stable Effect runtime\n * while the connected wallet/provider changes over time.\n *\n * Pair this with a React-side subscriber (e.g. via `watchAccount`) that updates\n * `WalletProviderRef`.\n */\nexport function makeEffectEvmLayerFromWagmiWithWalletProviderRef(\n config: Config,\n options: WagmiWalletClientOptions = {}\n) {\n const clientLayers = Layer.mergeAll(\n makePublicClientLayerFromWagmi(config),\n makeWalletClientLayerFromWagmi(config, options)\n );\n\n const providerRefLayer = makeWalletProviderRefLive();\n\n const walletLayers = Layer.provideMerge(\n Layer.mergeAll(WalletServiceFromProviderRefLive, WalletLifecycleFromProviderRefLive),\n providerRefLayer\n );\n\n const services = options.txPolicy ? makeEffectEvmServices(options.txPolicy) : effectEvmServices;\n return Layer.provideMerge(Layer.mergeAll(services, walletLayers, providerRefLayer), clientLayers);\n}\n"]}
|
package/dist/presets/layers.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ import type { RequestDedup, RpcCache } from "../rpc/index.js";
|
|
|
16
16
|
import type { SignatureService } from "../signature/index.js";
|
|
17
17
|
import type { SimulationService } from "../simulation/index.js";
|
|
18
18
|
import type { SubscriptionService } from "../subscriptions/index.js";
|
|
19
|
-
import type { TxManager, TxReplacement } from "../tx/index.js";
|
|
19
|
+
import type { TxManager, TxPolicy, TxReplacement } from "../tx/index.js";
|
|
20
20
|
import type { WalletLifecycle, WalletProvider, WalletService } from "../wallet/index.js";
|
|
21
21
|
import { WalletProviderRef } from "../wallet/index.js";
|
|
22
22
|
export type TransportRetryConfig = {
|
|
@@ -51,6 +51,7 @@ export declare function makeWalletClientLayer(provider: {
|
|
|
51
51
|
request: (...args: unknown[]) => Promise<unknown>;
|
|
52
52
|
}, chains: Map<number, Chain>): Layer.Layer<WalletClientService>;
|
|
53
53
|
export declare function makeWalletClientLayerFromProviderRef(chains: Map<number, Chain>): Layer.Layer<WalletClientService, never, WalletProviderRef>;
|
|
54
|
+
export declare function makeEffectEvmServices(txPolicy?: TxPolicy): Layer.Layer<ContractReader | EventBackfill | CursorStore | CursorStream | EventStream | ReliableEventStream | GasService | NonceService | RpcCache | RequestDedup | TxReplacement | TxManager | ContractPipeline | ContractWriter | BalanceService | BlockService | DeployService | Eip7702Service | EnsResolver | Erc721Service | SubscriptionService | ChainHead | QueryClient | MulticallBatcher | ContractQuery | SignatureService | SimulationService, never, PublicClientService | WalletClientService>;
|
|
54
55
|
export declare const effectEvmServices: Layer.Layer<ContractReader | EventBackfill | CursorStore | CursorStream | EventStream | ReliableEventStream | GasService | NonceService | RpcCache | RequestDedup | TxReplacement | TxManager | ContractPipeline | ContractWriter | BalanceService | BlockService | DeployService | Eip7702Service | EnsResolver | Erc721Service | SubscriptionService | ChainHead | QueryClient | MulticallBatcher | ContractQuery | SignatureService | SimulationService, never, PublicClientService | WalletClientService>;
|
|
55
56
|
export declare function makeEffectEvmLayer(configs: ChainConfig[], provider: {
|
|
56
57
|
request: (...args: unknown[]) => Promise<unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../../src/presets/layers.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,EAAU,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAgB,SAAS,EAAgB,MAAM,MAAM,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAMhG,OAAO,EAEL,mBAAmB,EACnB,mBAAmB,EAGpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,aAAa,EACb,WAAW,EACX,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAQ/B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAOpG,OAAO,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAExE,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../../src/presets/layers.ts"],"names":[],"mappings":"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"}
|
package/dist/presets/layers.js
CHANGED
|
@@ -18,7 +18,7 @@ import { makeRpcCacheLive, RequestDedupLive } from "../rpc/index.js";
|
|
|
18
18
|
import { SignatureServiceLive } from "../signature/index.js";
|
|
19
19
|
import { SimulationServiceLive } from "../simulation/index.js";
|
|
20
20
|
import { SubscriptionServiceLive } from "../subscriptions/index.js";
|
|
21
|
-
import { TxManagerLive, TxReplacementLive } from "../tx/index.js";
|
|
21
|
+
import { makeTxManagerLive, TxManagerLive, TxReplacementLive } from "../tx/index.js";
|
|
22
22
|
import { makeWalletLifecycleLive, makeWalletProviderRefLive, makeWalletServiceLive, WalletLifecycleFromProviderRefLive, WalletProviderRef, WalletServiceFromProviderRefLive, } from "../wallet/index.js";
|
|
23
23
|
import { makeHttpTransport } from "./transports.js";
|
|
24
24
|
const UNKNOWN_CHAIN_ID = 0;
|
|
@@ -297,9 +297,13 @@ export function makeWalletClientLayerFromProviderRef(chains) {
|
|
|
297
297
|
const cursorServices = Layer.mergeAll(EventStreamLive, EventBackfillLive, InMemoryCursorStoreLive);
|
|
298
298
|
const cursorStreamServices = Layer.provideMerge(CursorStreamLive, cursorServices);
|
|
299
299
|
const baseServices = Layer.mergeAll(BlockServiceLive, ContractReaderLive, ContractWriterLive, Erc721ServiceLive, cursorServices, cursorStreamServices, EnsResolverLive, GasServiceLive, NonceServiceLive, SignatureServiceLive, SubscriptionServiceLive, makeRpcCacheLive(), RequestDedupLive);
|
|
300
|
-
|
|
301
|
-
const
|
|
302
|
-
|
|
300
|
+
export function makeEffectEvmServices(txPolicy) {
|
|
301
|
+
const txManagerLayer = txPolicy ? makeTxManagerLive(txPolicy) : TxManagerLive;
|
|
302
|
+
const txServices = Layer.provideMerge(txManagerLayer, Layer.provideMerge(TxReplacementLive, baseServices));
|
|
303
|
+
const queryServices = Layer.provideMerge(ContractQueryLive, Layer.provideMerge(MulticallBatcherLive, Layer.provideMerge(QueryClientLive, Layer.provideMerge(ChainHeadLive, txServices))));
|
|
304
|
+
return Layer.provideMerge(Layer.mergeAll(BalanceServiceLive, ContractPipelineLive, Eip7702ServiceLive, DeployServiceLive, ReliableEventStreamLive, SimulationServiceLive), queryServices).pipe(Layer.provide(FetchHttpClient.layer));
|
|
305
|
+
}
|
|
306
|
+
export const effectEvmServices = makeEffectEvmServices();
|
|
303
307
|
export function makeEffectEvmLayer(configs, provider) {
|
|
304
308
|
const chains = new Map(configs.map((c) => [c.chainId, c.chain]));
|
|
305
309
|
const clientLayers = Layer.mergeAll(makePublicClientLayer(configs), makeWalletClientLayer(provider, chains));
|
|
@@ -1 +1 @@
|
|
|
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
|
+
{"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, TxPolicy, TxReplacement } from \"@/src/tx/index.js\";\nimport { makeTxManagerLive, 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\n/**\n * Create effect-evm services with an optional custom TxPolicy.\n * Use this when you need to customize receipt timeout or other tx settings.\n */\nexport function makeEffectEvmServices(txPolicy?: TxPolicy) {\n const txManagerLayer = txPolicy ? makeTxManagerLive(txPolicy) : TxManagerLive;\n\n const txServices = Layer.provideMerge(\n txManagerLayer,\n Layer.provideMerge(TxReplacementLive, baseServices)\n );\n\n const queryServices = Layer.provideMerge(\n ContractQueryLive,\n Layer.provideMerge(\n MulticallBatcherLive,\n Layer.provideMerge(QueryClientLive, Layer.provideMerge(ChainHeadLive, txServices))\n )\n );\n\n return 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/** Default effect-evm services with standard TxPolicy. */\nexport const effectEvmServices = makeEffectEvmServices();\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"]}
|