diff --git a/.changeset/odd-bears-relax.md b/.changeset/odd-bears-relax.md new file mode 100644 index 0000000..a39722e --- /dev/null +++ b/.changeset/odd-bears-relax.md @@ -0,0 +1,5 @@ +--- +"@viem/anvil": patch +--- + +Added support for specifying headers in fork mode diff --git a/packages/anvil.js/src/anvil/createAnvil.ts b/packages/anvil.js/src/anvil/createAnvil.ts index 1f98c61..b2c18a7 100644 --- a/packages/anvil.js/src/anvil/createAnvil.ts +++ b/packages/anvil.js/src/anvil/createAnvil.ts @@ -105,6 +105,14 @@ export type AnvilOptions = { * on disk, anything missing locally would be fetched from the remote. */ forkChainId?: number | undefined; + /** + * Specify headers to send along with any request to the remote JSON-RPC server in forking mode. + * + * e.g. "User-Agent: test-agent" + * + * Requires `forkUrl` to be set. + */ + forkHeader?: Record | undefined; /** * Initial retry backoff on encountering errors. */ diff --git a/packages/anvil.js/src/anvil/toArgs.ts b/packages/anvil.js/src/anvil/toArgs.ts index 4f2c48d..d2caf04 100644 --- a/packages/anvil.js/src/anvil/toArgs.ts +++ b/packages/anvil.js/src/anvil/toArgs.ts @@ -7,13 +7,27 @@ import { toFlagCase } from "./toFlagCase.js"; * @returns The command line arguments. */ export function toArgs(options: { - [key: string]: string | boolean | number | bigint | undefined; + [key: string]: Record | string | boolean | number | bigint | undefined; }) { return Object.entries(options).flatMap(([key, value]) => { if (value === undefined) { return []; } + if (typeof value === "object" && value !== null) { + return Object.entries(value).flatMap(([subKey, subValue]) => { + if (subValue === undefined) { + return []; + } + + const flag = toFlagCase(key); + + const value = `${subKey}: ${subValue}`; + + return [flag, value]; + }); + } + const flag = toFlagCase(key); if (value === false) {